apexify.js 4.6.2 → 4.7.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 (129) hide show
  1. package/dist/cjs/ai/ApexModules.d.ts.map +1 -1
  2. package/dist/cjs/ai/ApexModules.js +56 -7
  3. package/dist/cjs/ai/ApexModules.js.map +1 -1
  4. package/dist/cjs/ai/functions/readFiles.js +1 -1
  5. package/dist/cjs/ai/functions/readFiles.js.map +1 -1
  6. package/dist/cjs/ai/modals-chat/electronHub/chatmodels.d.ts.map +1 -1
  7. package/dist/cjs/ai/modals-chat/electronHub/chatmodels.js +2 -1
  8. package/dist/cjs/ai/modals-chat/electronHub/chatmodels.js.map +1 -1
  9. package/dist/cjs/ai/modals-chat/electronHub/speechModels.d.ts.map +1 -1
  10. package/dist/cjs/ai/modals-chat/electronHub/speechModels.js +1 -1
  11. package/dist/cjs/ai/modals-chat/electronHub/speechModels.js.map +1 -1
  12. package/dist/cjs/canvas/ApexPainter.d.ts.map +1 -1
  13. package/dist/cjs/canvas/ApexPainter.js +27 -28
  14. package/dist/cjs/canvas/ApexPainter.js.map +1 -1
  15. package/dist/cjs/canvas/Themes/Level-Up/levelup.d.ts +11 -0
  16. package/dist/cjs/canvas/Themes/Level-Up/levelup.d.ts.map +1 -0
  17. package/dist/cjs/canvas/Themes/Level-Up/levelup.js +163 -0
  18. package/dist/cjs/canvas/Themes/Level-Up/levelup.js.map +1 -0
  19. package/dist/cjs/canvas/utils/Background/bg.d.ts +17 -10
  20. package/dist/cjs/canvas/utils/Background/bg.d.ts.map +1 -1
  21. package/dist/cjs/canvas/utils/Background/bg.js +102 -27
  22. package/dist/cjs/canvas/utils/Background/bg.js.map +1 -1
  23. package/dist/cjs/canvas/utils/Custom/customLines.d.ts.map +1 -1
  24. package/dist/cjs/canvas/utils/Custom/customLines.js +43 -19
  25. package/dist/cjs/canvas/utils/Custom/customLines.js.map +1 -1
  26. package/dist/cjs/canvas/utils/General/general functions.d.ts +6 -1
  27. package/dist/cjs/canvas/utils/General/general functions.d.ts.map +1 -1
  28. package/dist/cjs/canvas/utils/General/general functions.js +19 -20
  29. package/dist/cjs/canvas/utils/General/general functions.js.map +1 -1
  30. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts +3 -9
  31. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts.map +1 -1
  32. package/dist/cjs/canvas/utils/Image/imageProperties.js +220 -214
  33. package/dist/cjs/canvas/utils/Image/imageProperties.js.map +1 -1
  34. package/dist/cjs/canvas/utils/Texts/textProperties.d.ts +12 -14
  35. package/dist/cjs/canvas/utils/Texts/textProperties.d.ts.map +1 -1
  36. package/dist/cjs/canvas/utils/Texts/textProperties.js +100 -91
  37. package/dist/cjs/canvas/utils/Texts/textProperties.js.map +1 -1
  38. package/dist/cjs/canvas/utils/types.d.ts +89 -109
  39. package/dist/cjs/canvas/utils/types.d.ts.map +1 -1
  40. package/dist/cjs/canvas/utils/types.js.map +1 -1
  41. package/dist/cjs/canvas/utils/utils.d.ts +2 -4
  42. package/dist/cjs/canvas/utils/utils.d.ts.map +1 -1
  43. package/dist/cjs/canvas/utils/utils.js +2 -5
  44. package/dist/cjs/canvas/utils/utils.js.map +1 -1
  45. package/dist/cjs/index.d.ts.map +1 -1
  46. package/dist/cjs/index.js +31 -3
  47. package/dist/cjs/index.js.map +1 -1
  48. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  49. package/dist/esm/ai/ApexModules.d.ts.map +1 -1
  50. package/dist/esm/ai/ApexModules.js +56 -7
  51. package/dist/esm/ai/ApexModules.js.map +1 -1
  52. package/dist/esm/ai/functions/readFiles.js +1 -1
  53. package/dist/esm/ai/functions/readFiles.js.map +1 -1
  54. package/dist/esm/ai/modals-chat/electronHub/chatmodels.d.ts.map +1 -1
  55. package/dist/esm/ai/modals-chat/electronHub/chatmodels.js +2 -1
  56. package/dist/esm/ai/modals-chat/electronHub/chatmodels.js.map +1 -1
  57. package/dist/esm/ai/modals-chat/electronHub/speechModels.d.ts.map +1 -1
  58. package/dist/esm/ai/modals-chat/electronHub/speechModels.js +1 -1
  59. package/dist/esm/ai/modals-chat/electronHub/speechModels.js.map +1 -1
  60. package/dist/esm/canvas/ApexPainter.d.ts.map +1 -1
  61. package/dist/esm/canvas/ApexPainter.js +27 -28
  62. package/dist/esm/canvas/ApexPainter.js.map +1 -1
  63. package/dist/esm/canvas/Themes/Level-Up/levelup.d.ts +11 -0
  64. package/dist/esm/canvas/Themes/Level-Up/levelup.d.ts.map +1 -0
  65. package/dist/esm/canvas/Themes/Level-Up/levelup.js +163 -0
  66. package/dist/esm/canvas/Themes/Level-Up/levelup.js.map +1 -0
  67. package/dist/esm/canvas/utils/Background/bg.d.ts +17 -10
  68. package/dist/esm/canvas/utils/Background/bg.d.ts.map +1 -1
  69. package/dist/esm/canvas/utils/Background/bg.js +102 -27
  70. package/dist/esm/canvas/utils/Background/bg.js.map +1 -1
  71. package/dist/esm/canvas/utils/Custom/customLines.d.ts.map +1 -1
  72. package/dist/esm/canvas/utils/Custom/customLines.js +43 -19
  73. package/dist/esm/canvas/utils/Custom/customLines.js.map +1 -1
  74. package/dist/esm/canvas/utils/General/general functions.d.ts +6 -1
  75. package/dist/esm/canvas/utils/General/general functions.d.ts.map +1 -1
  76. package/dist/esm/canvas/utils/General/general functions.js +19 -20
  77. package/dist/esm/canvas/utils/General/general functions.js.map +1 -1
  78. package/dist/esm/canvas/utils/Image/imageProperties.d.ts +3 -9
  79. package/dist/esm/canvas/utils/Image/imageProperties.d.ts.map +1 -1
  80. package/dist/esm/canvas/utils/Image/imageProperties.js +220 -214
  81. package/dist/esm/canvas/utils/Image/imageProperties.js.map +1 -1
  82. package/dist/esm/canvas/utils/Texts/textProperties.d.ts +12 -14
  83. package/dist/esm/canvas/utils/Texts/textProperties.d.ts.map +1 -1
  84. package/dist/esm/canvas/utils/Texts/textProperties.js +100 -91
  85. package/dist/esm/canvas/utils/Texts/textProperties.js.map +1 -1
  86. package/dist/esm/canvas/utils/types.d.ts +89 -109
  87. package/dist/esm/canvas/utils/types.d.ts.map +1 -1
  88. package/dist/esm/canvas/utils/types.js.map +1 -1
  89. package/dist/esm/canvas/utils/utils.d.ts +2 -4
  90. package/dist/esm/canvas/utils/utils.d.ts.map +1 -1
  91. package/dist/esm/canvas/utils/utils.js +2 -5
  92. package/dist/esm/canvas/utils/utils.js.map +1 -1
  93. package/dist/esm/index.d.ts.map +1 -1
  94. package/dist/esm/index.js +31 -3
  95. package/dist/esm/index.js.map +1 -1
  96. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  97. package/lib/ai/ApexModules.ts +83 -11
  98. package/lib/ai/functions/readFiles.ts +1 -1
  99. package/lib/ai/modals-chat/electronHub/chatmodels.ts +4 -2
  100. package/lib/ai/modals-chat/electronHub/speechModels.ts +2 -1
  101. package/lib/canvas/ApexPainter.ts +52 -61
  102. package/lib/canvas/Themes/Level-Up/levelup.ts +183 -0
  103. package/lib/canvas/utils/Background/bg.ts +179 -65
  104. package/lib/canvas/utils/Custom/customLines.ts +53 -20
  105. package/lib/canvas/utils/General/general functions.ts +21 -29
  106. package/lib/canvas/utils/Image/imageProperties.ts +399 -318
  107. package/lib/canvas/utils/Texts/textProperties.ts +213 -162
  108. package/lib/canvas/utils/types.ts +74 -107
  109. package/lib/canvas/utils/utils.ts +2 -5
  110. package/lib/index.ts +38 -10
  111. package/package.json +3 -2
  112. package/dist/cjs/canvas/utils/Background/circular.d.ts +0 -3
  113. package/dist/cjs/canvas/utils/Background/circular.d.ts.map +0 -1
  114. package/dist/cjs/canvas/utils/Background/circular.js +0 -13
  115. package/dist/cjs/canvas/utils/Background/circular.js.map +0 -1
  116. package/dist/cjs/canvas/utils/Background/radius.d.ts +0 -18
  117. package/dist/cjs/canvas/utils/Background/radius.d.ts.map +0 -1
  118. package/dist/cjs/canvas/utils/Background/radius.js +0 -104
  119. package/dist/cjs/canvas/utils/Background/radius.js.map +0 -1
  120. package/dist/esm/canvas/utils/Background/circular.d.ts +0 -3
  121. package/dist/esm/canvas/utils/Background/circular.d.ts.map +0 -1
  122. package/dist/esm/canvas/utils/Background/circular.js +0 -13
  123. package/dist/esm/canvas/utils/Background/circular.js.map +0 -1
  124. package/dist/esm/canvas/utils/Background/radius.d.ts +0 -18
  125. package/dist/esm/canvas/utils/Background/radius.d.ts.map +0 -1
  126. package/dist/esm/canvas/utils/Background/radius.js +0 -104
  127. package/dist/esm/canvas/utils/Background/radius.js.map +0 -1
  128. package/lib/canvas/utils/Background/circular.ts +0 -17
  129. package/lib/canvas/utils/Background/radius.ts +0 -102
@@ -1,104 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.radiusBorder = radiusBorder;
4
- /**
5
- * Applies a radius border (clipping path) to the canvas context with support for selective corner rounding.
6
- *
7
- * @param ctx The canvas rendering context.
8
- * @param x The x-coordinate of the rectangle.
9
- * @param y The y-coordinate of the rectangle.
10
- * @param width The width of the rectangle.
11
- * @param height The height of the rectangle.
12
- * @param radius The radius for rounding the corners.
13
- * @param borderPosition Which corners to round. Valid values include:
14
- * - "all" (default)
15
- * - "top", "bottom", "left", "right"
16
- * - "top-left", "top-right", "bottom-left", "bottom-right"
17
- * - A comma-separated list, e.g. "top, left, bottom" (for three sides) or "top-left, bottom-right"
18
- */
19
- function radiusBorder(ctx, x = 0, y = 0, width, height, radius = 0, borderPosition = 'all') {
20
- const minDimension = Math.min(width, height);
21
- const maxRadius = minDimension / 2;
22
- const clipRadius = Math.min(radius, maxRadius);
23
- let roundTopLeft = false;
24
- let roundTopRight = false;
25
- let roundBottomRight = false;
26
- let roundBottomLeft = false;
27
- const bp = borderPosition.trim().toLowerCase();
28
- if (bp === 'all') {
29
- roundTopLeft = roundTopRight = roundBottomRight = roundBottomLeft = true;
30
- }
31
- else if (bp === 'top') {
32
- roundTopLeft = roundTopRight = true;
33
- }
34
- else if (bp === 'bottom') {
35
- roundBottomLeft = roundBottomRight = true;
36
- }
37
- else if (bp === 'left') {
38
- roundTopLeft = roundBottomLeft = true;
39
- }
40
- else if (bp === 'right') {
41
- roundTopRight = roundBottomRight = true;
42
- }
43
- else if (bp === 'top-left') {
44
- roundTopLeft = true;
45
- }
46
- else if (bp === 'top-right') {
47
- roundTopRight = true;
48
- }
49
- else if (bp === 'bottom-left') {
50
- roundBottomLeft = true;
51
- }
52
- else if (bp === 'bottom-right') {
53
- roundBottomRight = true;
54
- }
55
- else {
56
- const positions = bp.split(',').map(s => s.trim());
57
- roundTopLeft =
58
- positions.includes('top-left') || (positions.includes('top') && positions.includes('left'));
59
- roundTopRight =
60
- positions.includes('top-right') || (positions.includes('top') && positions.includes('right'));
61
- roundBottomRight =
62
- positions.includes('bottom-right') || (positions.includes('bottom') && positions.includes('right'));
63
- roundBottomLeft =
64
- positions.includes('bottom-left') || (positions.includes('bottom') && positions.includes('left'));
65
- }
66
- const tl = roundTopLeft ? clipRadius : 0;
67
- const tr = roundTopRight ? clipRadius : 0;
68
- const br = roundBottomRight ? clipRadius : 0;
69
- const bl = roundBottomLeft ? clipRadius : 0;
70
- ctx.save();
71
- ctx.beginPath();
72
- ctx.moveTo(x + tl, y);
73
- ctx.lineTo(x + width - tr, y);
74
- if (tr > 0) {
75
- ctx.quadraticCurveTo(x + width, y, x + width, y + tr);
76
- }
77
- else {
78
- ctx.lineTo(x + width, y);
79
- }
80
- ctx.lineTo(x + width, y + height - br);
81
- if (br > 0) {
82
- ctx.quadraticCurveTo(x + width, y + height, x + width - br, y + height);
83
- }
84
- else {
85
- ctx.lineTo(x + width, y + height);
86
- }
87
- ctx.lineTo(x + bl, y + height);
88
- if (bl > 0) {
89
- ctx.quadraticCurveTo(x, y + height, x, y + height - bl);
90
- }
91
- else {
92
- ctx.lineTo(x, y + height);
93
- }
94
- ctx.lineTo(x, y + tl);
95
- if (tl > 0) {
96
- ctx.quadraticCurveTo(x, y, x + tl, y);
97
- }
98
- else {
99
- ctx.lineTo(x, y);
100
- }
101
- ctx.closePath();
102
- ctx.clip();
103
- }
104
- //# sourceMappingURL=radius.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"radius.js","sourceRoot":"","sources":["../../../../../lib/canvas/utils/Background/radius.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { SKRSContext2D } from "@napi-rs/canvas";
2
-
3
- export function circularBorder(
4
- ctx: SKRSContext2D,
5
- width: number,
6
- height: number,
7
- radius: number = 0
8
- ): void {
9
- const minDimension = Math.min(width, height);
10
- const clipRadius = minDimension / 2 + radius;
11
- ctx.save();
12
- ctx.beginPath();
13
- ctx.arc(width / 2, height / 2, clipRadius, 0, Math.PI * 2);
14
- ctx.closePath();
15
- ctx.clip();
16
- }
17
-
@@ -1,102 +0,0 @@
1
- import { SKRSContext2D } from "@napi-rs/canvas";
2
-
3
- /**
4
- * Applies a radius border (clipping path) to the canvas context with support for selective corner rounding.
5
- *
6
- * @param ctx The canvas rendering context.
7
- * @param x The x-coordinate of the rectangle.
8
- * @param y The y-coordinate of the rectangle.
9
- * @param width The width of the rectangle.
10
- * @param height The height of the rectangle.
11
- * @param radius The radius for rounding the corners.
12
- * @param borderPosition Which corners to round. Valid values include:
13
- * - "all" (default)
14
- * - "top", "bottom", "left", "right"
15
- * - "top-left", "top-right", "bottom-left", "bottom-right"
16
- * - A comma-separated list, e.g. "top, left, bottom" (for three sides) or "top-left, bottom-right"
17
- */
18
- export function radiusBorder(
19
- ctx: SKRSContext2D,
20
- x: number = 0,
21
- y: number = 0,
22
- width: number,
23
- height: number,
24
- radius: number = 0,
25
- borderPosition: string = 'all'
26
- ): void {
27
- const minDimension = Math.min(width, height);
28
- const maxRadius = minDimension / 2;
29
- const clipRadius = Math.min(radius, maxRadius);
30
-
31
- let roundTopLeft = false;
32
- let roundTopRight = false;
33
- let roundBottomRight = false;
34
- let roundBottomLeft = false;
35
-
36
- const bp = borderPosition.trim().toLowerCase();
37
-
38
- if (bp === 'all') {
39
- roundTopLeft = roundTopRight = roundBottomRight = roundBottomLeft = true;
40
- } else if (bp === 'top') {
41
- roundTopLeft = roundTopRight = true;
42
- } else if (bp === 'bottom') {
43
- roundBottomLeft = roundBottomRight = true;
44
- } else if (bp === 'left') {
45
- roundTopLeft = roundBottomLeft = true;
46
- } else if (bp === 'right') {
47
- roundTopRight = roundBottomRight = true;
48
- } else if (bp === 'top-left') {
49
- roundTopLeft = true;
50
- } else if (bp === 'top-right') {
51
- roundTopRight = true;
52
- } else if (bp === 'bottom-left') {
53
- roundBottomLeft = true;
54
- } else if (bp === 'bottom-right') {
55
- roundBottomRight = true;
56
- } else {
57
- const positions = bp.split(',').map(s => s.trim());
58
- roundTopLeft =
59
- positions.includes('top-left') || (positions.includes('top') && positions.includes('left'));
60
- roundTopRight =
61
- positions.includes('top-right') || (positions.includes('top') && positions.includes('right'));
62
- roundBottomRight =
63
- positions.includes('bottom-right') || (positions.includes('bottom') && positions.includes('right'));
64
- roundBottomLeft =
65
- positions.includes('bottom-left') || (positions.includes('bottom') && positions.includes('left'));
66
- }
67
-
68
- const tl = roundTopLeft ? clipRadius : 0;
69
- const tr = roundTopRight ? clipRadius : 0;
70
- const br = roundBottomRight ? clipRadius : 0;
71
- const bl = roundBottomLeft ? clipRadius : 0;
72
-
73
- ctx.save();
74
- ctx.beginPath();
75
- ctx.moveTo(x + tl, y);
76
- ctx.lineTo(x + width - tr, y);
77
- if (tr > 0) {
78
- ctx.quadraticCurveTo(x + width, y, x + width, y + tr);
79
- } else {
80
- ctx.lineTo(x + width, y);
81
- }
82
- ctx.lineTo(x + width, y + height - br);
83
- if (br > 0) {
84
- ctx.quadraticCurveTo(x + width, y + height, x + width - br, y + height);
85
- } else {
86
- ctx.lineTo(x + width, y + height);
87
- }
88
- ctx.lineTo(x + bl, y + height);
89
- if (bl > 0) {
90
- ctx.quadraticCurveTo(x, y + height, x, y + height - bl);
91
- } else {
92
- ctx.lineTo(x, y + height);
93
- }
94
- ctx.lineTo(x, y + tl);
95
- if (tl > 0) {
96
- ctx.quadraticCurveTo(x, y, x + tl, y);
97
- } else {
98
- ctx.lineTo(x, y);
99
- }
100
- ctx.closePath();
101
- ctx.clip();
102
- }