@al8b/image 0.1.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 (94) hide show
  1. package/README.md +30 -0
  2. package/dist/blending.d.mts +3 -0
  3. package/dist/blending.d.ts +3 -0
  4. package/dist/blending.js +65 -0
  5. package/dist/blending.js.map +1 -0
  6. package/dist/blending.mjs +40 -0
  7. package/dist/blending.mjs.map +1 -0
  8. package/dist/color-DJyRSbpZ.d.mts +16 -0
  9. package/dist/color-DJyRSbpZ.d.ts +16 -0
  10. package/dist/core/color.d.mts +1 -0
  11. package/dist/core/color.d.ts +1 -0
  12. package/dist/core/color.js +61 -0
  13. package/dist/core/color.js.map +1 -0
  14. package/dist/core/color.mjs +36 -0
  15. package/dist/core/color.mjs.map +1 -0
  16. package/dist/core/context.d.mts +25 -0
  17. package/dist/core/context.d.ts +25 -0
  18. package/dist/core/context.js +77 -0
  19. package/dist/core/context.js.map +1 -0
  20. package/dist/core/context.mjs +53 -0
  21. package/dist/core/context.mjs.map +1 -0
  22. package/dist/core/drawing.d.mts +2 -0
  23. package/dist/core/drawing.d.ts +2 -0
  24. package/dist/core/drawing.js +165 -0
  25. package/dist/core/drawing.js.map +1 -0
  26. package/dist/core/drawing.mjs +134 -0
  27. package/dist/core/drawing.mjs.map +1 -0
  28. package/dist/core/font.d.mts +19 -0
  29. package/dist/core/font.d.ts +19 -0
  30. package/dist/core/font.js +80 -0
  31. package/dist/core/font.js.map +1 -0
  32. package/dist/core/font.mjs +55 -0
  33. package/dist/core/font.mjs.map +1 -0
  34. package/dist/core/image.d.mts +84 -0
  35. package/dist/core/image.d.ts +84 -0
  36. package/dist/core/image.js +1018 -0
  37. package/dist/core/image.js.map +1 -0
  38. package/dist/core/image.mjs +993 -0
  39. package/dist/core/image.mjs.map +1 -0
  40. package/dist/core/map-rendering.d.mts +2 -0
  41. package/dist/core/map-rendering.d.ts +2 -0
  42. package/dist/core/map-rendering.js +95 -0
  43. package/dist/core/map-rendering.js.map +1 -0
  44. package/dist/core/map-rendering.mjs +70 -0
  45. package/dist/core/map-rendering.mjs.map +1 -0
  46. package/dist/core/pixel.d.mts +18 -0
  47. package/dist/core/pixel.d.ts +18 -0
  48. package/dist/core/pixel.js +99 -0
  49. package/dist/core/pixel.js.map +1 -0
  50. package/dist/core/pixel.mjs +73 -0
  51. package/dist/core/pixel.mjs.map +1 -0
  52. package/dist/core/shapes.d.mts +2 -0
  53. package/dist/core/shapes.d.ts +2 -0
  54. package/dist/core/shapes.js +218 -0
  55. package/dist/core/shapes.js.map +1 -0
  56. package/dist/core/shapes.mjs +187 -0
  57. package/dist/core/shapes.mjs.map +1 -0
  58. package/dist/core/sprite-rendering.d.mts +2 -0
  59. package/dist/core/sprite-rendering.d.ts +2 -0
  60. package/dist/core/sprite-rendering.js +135 -0
  61. package/dist/core/sprite-rendering.js.map +1 -0
  62. package/dist/core/sprite-rendering.mjs +108 -0
  63. package/dist/core/sprite-rendering.mjs.map +1 -0
  64. package/dist/core/text.d.mts +2 -0
  65. package/dist/core/text.d.ts +2 -0
  66. package/dist/core/text.js +105 -0
  67. package/dist/core/text.js.map +1 -0
  68. package/dist/core/text.mjs +78 -0
  69. package/dist/core/text.mjs.map +1 -0
  70. package/dist/core/transform.d.mts +2 -0
  71. package/dist/core/transform.d.ts +2 -0
  72. package/dist/core/transform.js +101 -0
  73. package/dist/core/transform.js.map +1 -0
  74. package/dist/core/transform.mjs +71 -0
  75. package/dist/core/transform.mjs.map +1 -0
  76. package/dist/drawing-Bo2U4IUE.d.mts +31 -0
  77. package/dist/drawing-e7iVDl14.d.ts +31 -0
  78. package/dist/index.d.mts +12 -0
  79. package/dist/index.d.ts +12 -0
  80. package/dist/index.js +1098 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/index.mjs +1066 -0
  83. package/dist/index.mjs.map +1 -0
  84. package/dist/map-rendering-CzeC061I.d.mts +20 -0
  85. package/dist/map-rendering-DcldCBtY.d.ts +20 -0
  86. package/dist/shapes-BY37IuhJ.d.ts +27 -0
  87. package/dist/shapes-CpCwX9Rp.d.mts +27 -0
  88. package/dist/sprite-rendering-Dac9FQ2x.d.ts +30 -0
  89. package/dist/sprite-rendering-DfQuLVXT.d.mts +30 -0
  90. package/dist/text-CIoUSRc-.d.mts +19 -0
  91. package/dist/text-HW25Qq3e.d.ts +19 -0
  92. package/dist/transform-Dqo6bY4r.d.mts +25 -0
  93. package/dist/transform-iwq8WdqR.d.ts +25 -0
  94. package/package.json +43 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/core/drawing.ts
22
+ var drawing_exports = {};
23
+ __export(drawing_exports, {
24
+ closeDrawOp: () => closeDrawOp,
25
+ drawLine: () => drawLine,
26
+ drawRect: () => drawRect,
27
+ drawRound: () => drawRound,
28
+ drawRoundRect: () => drawRoundRect,
29
+ fillRect: () => fillRect,
30
+ fillRound: () => fillRound,
31
+ fillRoundRect: () => fillRoundRect,
32
+ initDrawOp: () => initDrawOp
33
+ });
34
+ module.exports = __toCommonJS(drawing_exports);
35
+ function initDrawOp(context, state, x, y, object_transform = true) {
36
+ let res = false;
37
+ if (state.image_transform) {
38
+ context.save();
39
+ res = true;
40
+ context.translate(state.translation_x, state.translation_y);
41
+ context.scale(state.scale_x, state.scale_y);
42
+ context.rotate(state.rotation / 180 * Math.PI);
43
+ context.translate(x, y);
44
+ }
45
+ if (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {
46
+ if (!res) {
47
+ context.save();
48
+ res = true;
49
+ context.translate(x, y);
50
+ }
51
+ if (state.object_rotation !== 0) {
52
+ context.rotate(state.object_rotation / 180 * Math.PI);
53
+ }
54
+ if (state.object_scale_x !== 1 || state.object_scale_y !== 1) {
55
+ context.scale(state.object_scale_x, state.object_scale_y);
56
+ }
57
+ }
58
+ return res;
59
+ }
60
+ __name(initDrawOp, "initDrawOp");
61
+ function closeDrawOp(context) {
62
+ context.restore();
63
+ }
64
+ __name(closeDrawOp, "closeDrawOp");
65
+ function fillRect(context, state, x, y, w, h) {
66
+ context.globalAlpha = state.alpha;
67
+ if (initDrawOp(context, state, x, y)) {
68
+ context.fillRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
69
+ closeDrawOp(context);
70
+ } else {
71
+ context.fillRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
72
+ }
73
+ }
74
+ __name(fillRect, "fillRect");
75
+ function fillRoundRect(context, state, x, y, w, h, round) {
76
+ context.globalAlpha = state.alpha;
77
+ if (initDrawOp(context, state, x, y)) {
78
+ context.fillRoundRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h, round);
79
+ closeDrawOp(context);
80
+ } else {
81
+ context.fillRoundRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h, round);
82
+ }
83
+ }
84
+ __name(fillRoundRect, "fillRoundRect");
85
+ function fillRound(context, state, x, y, w, h) {
86
+ context.globalAlpha = state.alpha;
87
+ w = Math.abs(w);
88
+ h = Math.abs(h);
89
+ if (initDrawOp(context, state, x, y)) {
90
+ context.beginPath();
91
+ context.ellipse(-state.anchor_x * w / 2, 0 + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
92
+ context.fill();
93
+ closeDrawOp(context);
94
+ } else {
95
+ context.beginPath();
96
+ context.ellipse(x - state.anchor_x * w / 2, y + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
97
+ context.fill();
98
+ }
99
+ }
100
+ __name(fillRound, "fillRound");
101
+ function drawRect(context, state, x, y, w, h) {
102
+ context.globalAlpha = state.alpha;
103
+ context.lineWidth = state.line_width;
104
+ if (initDrawOp(context, state, x, y)) {
105
+ context.strokeRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
106
+ closeDrawOp(context);
107
+ } else {
108
+ context.strokeRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
109
+ }
110
+ }
111
+ __name(drawRect, "drawRect");
112
+ function drawRoundRect(context, state, x, y, w, h, round) {
113
+ context.globalAlpha = state.alpha;
114
+ context.lineWidth = state.line_width;
115
+ if (initDrawOp(context, state, x, y)) {
116
+ context.strokeRoundRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h, round);
117
+ closeDrawOp(context);
118
+ } else {
119
+ context.strokeRoundRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h, round);
120
+ }
121
+ }
122
+ __name(drawRoundRect, "drawRoundRect");
123
+ function drawRound(context, state, x, y, w, h) {
124
+ context.globalAlpha = state.alpha;
125
+ context.lineWidth = state.line_width;
126
+ w = Math.abs(w);
127
+ h = Math.abs(h);
128
+ if (initDrawOp(context, state, x, y)) {
129
+ context.beginPath();
130
+ context.ellipse(0 - state.anchor_x * w / 2, 0 + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
131
+ context.stroke();
132
+ closeDrawOp(context);
133
+ } else {
134
+ context.beginPath();
135
+ context.ellipse(x - state.anchor_x * w / 2, y + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
136
+ context.stroke();
137
+ }
138
+ }
139
+ __name(drawRound, "drawRound");
140
+ function drawLine(context, state, x1, y1, x2, y2) {
141
+ context.globalAlpha = state.alpha;
142
+ context.lineWidth = state.line_width;
143
+ const transform = initDrawOp(context, state, 0, 0, false);
144
+ context.beginPath();
145
+ context.moveTo(x1, y1);
146
+ context.lineTo(x2, y2);
147
+ context.stroke();
148
+ if (transform) {
149
+ closeDrawOp(context);
150
+ }
151
+ }
152
+ __name(drawLine, "drawLine");
153
+ // Annotate the CommonJS export names for ESM import in node:
154
+ 0 && (module.exports = {
155
+ closeDrawOp,
156
+ drawLine,
157
+ drawRect,
158
+ drawRound,
159
+ drawRoundRect,
160
+ fillRect,
161
+ fillRound,
162
+ fillRoundRect,
163
+ initDrawOp
164
+ });
165
+ //# sourceMappingURL=drawing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/drawing.ts"],"sourcesContent":["/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n"],"mappings":"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","names":["initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","fillRect","w","h","globalAlpha","alpha","anchor_x","anchor_y","fillRoundRect","round","fillRound","abs","beginPath","ellipse","fill","drawRect","lineWidth","line_width","strokeRect","drawRoundRect","strokeRoundRect","drawRound","stroke","drawLine","x1","y1","x2","y2","transform","moveTo","lineTo"]}
@@ -0,0 +1,134 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/core/drawing.ts
5
+ function initDrawOp(context, state, x, y, object_transform = true) {
6
+ let res = false;
7
+ if (state.image_transform) {
8
+ context.save();
9
+ res = true;
10
+ context.translate(state.translation_x, state.translation_y);
11
+ context.scale(state.scale_x, state.scale_y);
12
+ context.rotate(state.rotation / 180 * Math.PI);
13
+ context.translate(x, y);
14
+ }
15
+ if (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {
16
+ if (!res) {
17
+ context.save();
18
+ res = true;
19
+ context.translate(x, y);
20
+ }
21
+ if (state.object_rotation !== 0) {
22
+ context.rotate(state.object_rotation / 180 * Math.PI);
23
+ }
24
+ if (state.object_scale_x !== 1 || state.object_scale_y !== 1) {
25
+ context.scale(state.object_scale_x, state.object_scale_y);
26
+ }
27
+ }
28
+ return res;
29
+ }
30
+ __name(initDrawOp, "initDrawOp");
31
+ function closeDrawOp(context) {
32
+ context.restore();
33
+ }
34
+ __name(closeDrawOp, "closeDrawOp");
35
+ function fillRect(context, state, x, y, w, h) {
36
+ context.globalAlpha = state.alpha;
37
+ if (initDrawOp(context, state, x, y)) {
38
+ context.fillRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
39
+ closeDrawOp(context);
40
+ } else {
41
+ context.fillRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
42
+ }
43
+ }
44
+ __name(fillRect, "fillRect");
45
+ function fillRoundRect(context, state, x, y, w, h, round) {
46
+ context.globalAlpha = state.alpha;
47
+ if (initDrawOp(context, state, x, y)) {
48
+ context.fillRoundRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h, round);
49
+ closeDrawOp(context);
50
+ } else {
51
+ context.fillRoundRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h, round);
52
+ }
53
+ }
54
+ __name(fillRoundRect, "fillRoundRect");
55
+ function fillRound(context, state, x, y, w, h) {
56
+ context.globalAlpha = state.alpha;
57
+ w = Math.abs(w);
58
+ h = Math.abs(h);
59
+ if (initDrawOp(context, state, x, y)) {
60
+ context.beginPath();
61
+ context.ellipse(-state.anchor_x * w / 2, 0 + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
62
+ context.fill();
63
+ closeDrawOp(context);
64
+ } else {
65
+ context.beginPath();
66
+ context.ellipse(x - state.anchor_x * w / 2, y + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
67
+ context.fill();
68
+ }
69
+ }
70
+ __name(fillRound, "fillRound");
71
+ function drawRect(context, state, x, y, w, h) {
72
+ context.globalAlpha = state.alpha;
73
+ context.lineWidth = state.line_width;
74
+ if (initDrawOp(context, state, x, y)) {
75
+ context.strokeRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
76
+ closeDrawOp(context);
77
+ } else {
78
+ context.strokeRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
79
+ }
80
+ }
81
+ __name(drawRect, "drawRect");
82
+ function drawRoundRect(context, state, x, y, w, h, round) {
83
+ context.globalAlpha = state.alpha;
84
+ context.lineWidth = state.line_width;
85
+ if (initDrawOp(context, state, x, y)) {
86
+ context.strokeRoundRect(-w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h, round);
87
+ closeDrawOp(context);
88
+ } else {
89
+ context.strokeRoundRect(x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h, round);
90
+ }
91
+ }
92
+ __name(drawRoundRect, "drawRoundRect");
93
+ function drawRound(context, state, x, y, w, h) {
94
+ context.globalAlpha = state.alpha;
95
+ context.lineWidth = state.line_width;
96
+ w = Math.abs(w);
97
+ h = Math.abs(h);
98
+ if (initDrawOp(context, state, x, y)) {
99
+ context.beginPath();
100
+ context.ellipse(0 - state.anchor_x * w / 2, 0 + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
101
+ context.stroke();
102
+ closeDrawOp(context);
103
+ } else {
104
+ context.beginPath();
105
+ context.ellipse(x - state.anchor_x * w / 2, y + state.anchor_y * h / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);
106
+ context.stroke();
107
+ }
108
+ }
109
+ __name(drawRound, "drawRound");
110
+ function drawLine(context, state, x1, y1, x2, y2) {
111
+ context.globalAlpha = state.alpha;
112
+ context.lineWidth = state.line_width;
113
+ const transform = initDrawOp(context, state, 0, 0, false);
114
+ context.beginPath();
115
+ context.moveTo(x1, y1);
116
+ context.lineTo(x2, y2);
117
+ context.stroke();
118
+ if (transform) {
119
+ closeDrawOp(context);
120
+ }
121
+ }
122
+ __name(drawLine, "drawLine");
123
+ export {
124
+ closeDrawOp,
125
+ drawLine,
126
+ drawRect,
127
+ drawRound,
128
+ drawRoundRect,
129
+ fillRect,
130
+ fillRound,
131
+ fillRoundRect,
132
+ initDrawOp
133
+ };
134
+ //# sourceMappingURL=drawing.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/drawing.ts"],"sourcesContent":["/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n"],"mappings":"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","names":["initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","fillRect","w","h","globalAlpha","alpha","anchor_x","anchor_y","fillRoundRect","round","fillRound","abs","beginPath","ellipse","fill","drawRect","lineWidth","line_width","strokeRect","drawRoundRect","strokeRoundRect","drawRound","stroke","drawLine","x1","y1","x2","y2","transform","moveTo","lineTo"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Font management for Image class
3
+ * Handles font loading and readiness checking
4
+ */
5
+ /**
6
+ * Load a font for use in the image
7
+ * In a full implementation, this would integrate with a font loading system
8
+ */
9
+ declare function loadFont(font: string): Promise<void> | void;
10
+ /**
11
+ * Check if a font is ready to use
12
+ */
13
+ declare function isFontReady(font: string): boolean;
14
+ /**
15
+ * Clear font cache (useful for testing)
16
+ */
17
+ declare function clearFontCache(): void;
18
+
19
+ export { clearFontCache, isFontReady, loadFont };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Font management for Image class
3
+ * Handles font loading and readiness checking
4
+ */
5
+ /**
6
+ * Load a font for use in the image
7
+ * In a full implementation, this would integrate with a font loading system
8
+ */
9
+ declare function loadFont(font: string): Promise<void> | void;
10
+ /**
11
+ * Check if a font is ready to use
12
+ */
13
+ declare function isFontReady(font: string): boolean;
14
+ /**
15
+ * Clear font cache (useful for testing)
16
+ */
17
+ declare function clearFontCache(): void;
18
+
19
+ export { clearFontCache, isFontReady, loadFont };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/core/font.ts
22
+ var font_exports = {};
23
+ __export(font_exports, {
24
+ clearFontCache: () => clearFontCache,
25
+ isFontReady: () => isFontReady,
26
+ loadFont: () => loadFont
27
+ });
28
+ module.exports = __toCommonJS(font_exports);
29
+ var loadedFonts = /* @__PURE__ */ new Set();
30
+ var loadingFonts = /* @__PURE__ */ new Map();
31
+ function loadFont(font) {
32
+ if (!font) {
33
+ return;
34
+ }
35
+ if (loadedFonts.has(font)) {
36
+ return Promise.resolve();
37
+ }
38
+ if (loadingFonts.has(font)) {
39
+ return loadingFonts.get(font);
40
+ }
41
+ if (typeof document !== "undefined" && "fonts" in document) {
42
+ const promise = document.fonts.load(`12pt ${font}`).then(() => {
43
+ loadedFonts.add(font);
44
+ loadingFonts.delete(font);
45
+ }).catch(() => {
46
+ loadedFonts.add(font);
47
+ loadingFonts.delete(font);
48
+ });
49
+ loadingFonts.set(font, promise);
50
+ return promise;
51
+ }
52
+ loadedFonts.add(font);
53
+ return Promise.resolve();
54
+ }
55
+ __name(loadFont, "loadFont");
56
+ function isFontReady(font) {
57
+ if (!font) {
58
+ return true;
59
+ }
60
+ if (loadedFonts.has(font)) {
61
+ return true;
62
+ }
63
+ if (typeof document !== "undefined" && "fonts" in document) {
64
+ return document.fonts.check(`12pt ${font}`);
65
+ }
66
+ return true;
67
+ }
68
+ __name(isFontReady, "isFontReady");
69
+ function clearFontCache() {
70
+ loadedFonts.clear();
71
+ loadingFonts.clear();
72
+ }
73
+ __name(clearFontCache, "clearFontCache");
74
+ // Annotate the CommonJS export names for ESM import in node:
75
+ 0 && (module.exports = {
76
+ clearFontCache,
77
+ isFontReady,
78
+ loadFont
79
+ });
80
+ //# sourceMappingURL=font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/font.ts"],"sourcesContent":["/**\n * Font management for Image class\n * Handles font loading and readiness checking\n */\n\n// Font cache to track loaded fonts\nconst loadedFonts = new Set<string>();\nconst loadingFonts = new Map<string, Promise<void>>();\n\n/**\n * Load a font for use in the image\n * In a full implementation, this would integrate with a font loading system\n */\nexport function loadFont(font: string): Promise<void> | void {\n\tif (!font) {\n\t\treturn;\n\t}\n\n\t// If already loaded, return immediately\n\tif (loadedFonts.has(font)) {\n\t\treturn Promise.resolve();\n\t}\n\n\t// If currently loading, return existing promise\n\tif (loadingFonts.has(font)) {\n\t\treturn loadingFonts.get(font);\n\t}\n\n\t// Check if font is available via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\tconst promise = document.fonts\n\t\t\t.load(`12pt ${font}`)\n\t\t\t.then(() => {\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Font loading failed, but we'll mark it as loaded anyway\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t});\n\n\t\tloadingFonts.set(font, promise);\n\t\treturn promise;\n\t}\n\n\t// Fallback: assume font is available\n\tloadedFonts.add(font);\n\treturn Promise.resolve();\n}\n\n/**\n * Check if a font is ready to use\n */\nexport function isFontReady(font: string): boolean {\n\tif (!font) {\n\t\treturn true;\n\t}\n\n\t// Check if font is in loaded set\n\tif (loadedFonts.has(font)) {\n\t\treturn true;\n\t}\n\n\t// Check via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\treturn document.fonts.check(`12pt ${font}`);\n\t}\n\n\t// Fallback: assume font is ready\n\treturn true;\n}\n\n/**\n * Clear font cache (useful for testing)\n */\nexport function clearFontCache(): void {\n\tloadedFonts.clear();\n\tloadingFonts.clear();\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAMA,IAAMA,cAAc,oBAAIC,IAAAA;AACxB,IAAMC,eAAe,oBAAIC,IAAAA;AAMlB,SAASC,SAASC,MAAY;AACpC,MAAI,CAACA,MAAM;AACV;EACD;AAGA,MAAIL,YAAYM,IAAID,IAAAA,GAAO;AAC1B,WAAOE,QAAQC,QAAO;EACvB;AAGA,MAAIN,aAAaI,IAAID,IAAAA,GAAO;AAC3B,WAAOH,aAAaO,IAAIJ,IAAAA;EACzB;AAGA,MAAI,OAAOK,aAAa,eAAe,WAAWA,UAAU;AAC3D,UAAMC,UAAUD,SAASE,MACvBC,KAAK,QAAQR,IAAAA,EAAM,EACnBS,KAAK,MAAA;AACLd,kBAAYe,IAAIV,IAAAA;AAChBH,mBAAac,OAAOX,IAAAA;IACrB,CAAA,EACCY,MAAM,MAAA;AAENjB,kBAAYe,IAAIV,IAAAA;AAChBH,mBAAac,OAAOX,IAAAA;IACrB,CAAA;AAEDH,iBAAagB,IAAIb,MAAMM,OAAAA;AACvB,WAAOA;EACR;AAGAX,cAAYe,IAAIV,IAAAA;AAChB,SAAOE,QAAQC,QAAO;AACvB;AApCgBJ;AAyCT,SAASe,YAAYd,MAAY;AACvC,MAAI,CAACA,MAAM;AACV,WAAO;EACR;AAGA,MAAIL,YAAYM,IAAID,IAAAA,GAAO;AAC1B,WAAO;EACR;AAGA,MAAI,OAAOK,aAAa,eAAe,WAAWA,UAAU;AAC3D,WAAOA,SAASE,MAAMQ,MAAM,QAAQf,IAAAA,EAAM;EAC3C;AAGA,SAAO;AACR;AAjBgBc;AAsBT,SAASE,iBAAAA;AACfrB,cAAYsB,MAAK;AACjBpB,eAAaoB,MAAK;AACnB;AAHgBD;","names":["loadedFonts","Set","loadingFonts","Map","loadFont","font","has","Promise","resolve","get","document","promise","fonts","load","then","add","delete","catch","set","isFontReady","check","clearFontCache","clear"]}
@@ -0,0 +1,55 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/core/font.ts
5
+ var loadedFonts = /* @__PURE__ */ new Set();
6
+ var loadingFonts = /* @__PURE__ */ new Map();
7
+ function loadFont(font) {
8
+ if (!font) {
9
+ return;
10
+ }
11
+ if (loadedFonts.has(font)) {
12
+ return Promise.resolve();
13
+ }
14
+ if (loadingFonts.has(font)) {
15
+ return loadingFonts.get(font);
16
+ }
17
+ if (typeof document !== "undefined" && "fonts" in document) {
18
+ const promise = document.fonts.load(`12pt ${font}`).then(() => {
19
+ loadedFonts.add(font);
20
+ loadingFonts.delete(font);
21
+ }).catch(() => {
22
+ loadedFonts.add(font);
23
+ loadingFonts.delete(font);
24
+ });
25
+ loadingFonts.set(font, promise);
26
+ return promise;
27
+ }
28
+ loadedFonts.add(font);
29
+ return Promise.resolve();
30
+ }
31
+ __name(loadFont, "loadFont");
32
+ function isFontReady(font) {
33
+ if (!font) {
34
+ return true;
35
+ }
36
+ if (loadedFonts.has(font)) {
37
+ return true;
38
+ }
39
+ if (typeof document !== "undefined" && "fonts" in document) {
40
+ return document.fonts.check(`12pt ${font}`);
41
+ }
42
+ return true;
43
+ }
44
+ __name(isFontReady, "isFontReady");
45
+ function clearFontCache() {
46
+ loadedFonts.clear();
47
+ loadingFonts.clear();
48
+ }
49
+ __name(clearFontCache, "clearFontCache");
50
+ export {
51
+ clearFontCache,
52
+ isFontReady,
53
+ loadFont
54
+ };
55
+ //# sourceMappingURL=font.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/font.ts"],"sourcesContent":["/**\n * Font management for Image class\n * Handles font loading and readiness checking\n */\n\n// Font cache to track loaded fonts\nconst loadedFonts = new Set<string>();\nconst loadingFonts = new Map<string, Promise<void>>();\n\n/**\n * Load a font for use in the image\n * In a full implementation, this would integrate with a font loading system\n */\nexport function loadFont(font: string): Promise<void> | void {\n\tif (!font) {\n\t\treturn;\n\t}\n\n\t// If already loaded, return immediately\n\tif (loadedFonts.has(font)) {\n\t\treturn Promise.resolve();\n\t}\n\n\t// If currently loading, return existing promise\n\tif (loadingFonts.has(font)) {\n\t\treturn loadingFonts.get(font);\n\t}\n\n\t// Check if font is available via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\tconst promise = document.fonts\n\t\t\t.load(`12pt ${font}`)\n\t\t\t.then(() => {\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Font loading failed, but we'll mark it as loaded anyway\n\t\t\t\tloadedFonts.add(font);\n\t\t\t\tloadingFonts.delete(font);\n\t\t\t});\n\n\t\tloadingFonts.set(font, promise);\n\t\treturn promise;\n\t}\n\n\t// Fallback: assume font is available\n\tloadedFonts.add(font);\n\treturn Promise.resolve();\n}\n\n/**\n * Check if a font is ready to use\n */\nexport function isFontReady(font: string): boolean {\n\tif (!font) {\n\t\treturn true;\n\t}\n\n\t// Check if font is in loaded set\n\tif (loadedFonts.has(font)) {\n\t\treturn true;\n\t}\n\n\t// Check via CSS Font Loading API\n\tif (typeof document !== \"undefined\" && \"fonts\" in document) {\n\t\treturn document.fonts.check(`12pt ${font}`);\n\t}\n\n\t// Fallback: assume font is ready\n\treturn true;\n}\n\n/**\n * Clear font cache (useful for testing)\n */\nexport function clearFontCache(): void {\n\tloadedFonts.clear();\n\tloadingFonts.clear();\n}\n"],"mappings":";;;;AAMA,IAAMA,cAAc,oBAAIC,IAAAA;AACxB,IAAMC,eAAe,oBAAIC,IAAAA;AAMlB,SAASC,SAASC,MAAY;AACpC,MAAI,CAACA,MAAM;AACV;EACD;AAGA,MAAIL,YAAYM,IAAID,IAAAA,GAAO;AAC1B,WAAOE,QAAQC,QAAO;EACvB;AAGA,MAAIN,aAAaI,IAAID,IAAAA,GAAO;AAC3B,WAAOH,aAAaO,IAAIJ,IAAAA;EACzB;AAGA,MAAI,OAAOK,aAAa,eAAe,WAAWA,UAAU;AAC3D,UAAMC,UAAUD,SAASE,MACvBC,KAAK,QAAQR,IAAAA,EAAM,EACnBS,KAAK,MAAA;AACLd,kBAAYe,IAAIV,IAAAA;AAChBH,mBAAac,OAAOX,IAAAA;IACrB,CAAA,EACCY,MAAM,MAAA;AAENjB,kBAAYe,IAAIV,IAAAA;AAChBH,mBAAac,OAAOX,IAAAA;IACrB,CAAA;AAEDH,iBAAagB,IAAIb,MAAMM,OAAAA;AACvB,WAAOA;EACR;AAGAX,cAAYe,IAAIV,IAAAA;AAChB,SAAOE,QAAQC,QAAO;AACvB;AApCgBJ;AAyCT,SAASe,YAAYd,MAAY;AACvC,MAAI,CAACA,MAAM;AACV,WAAO;EACR;AAGA,MAAIL,YAAYM,IAAID,IAAAA,GAAO;AAC1B,WAAO;EACR;AAGA,MAAI,OAAOK,aAAa,eAAe,WAAWA,UAAU;AAC3D,WAAOA,SAASE,MAAMQ,MAAM,QAAQf,IAAAA,EAAM;EAC3C;AAGA,SAAO;AACR;AAjBgBc;AAsBT,SAASE,iBAAAA;AACfrB,cAAYsB,MAAK;AACjBpB,eAAaoB,MAAK;AACnB;AAHgBD;","names":["loadedFonts","Set","loadingFonts","Map","loadFont","font","has","Promise","resolve","get","document","promise","fonts","load","then","add","delete","catch","set","isFontReady","check","clearFontCache","clear"]}
@@ -0,0 +1,84 @@
1
+ import { M as MapSource } from '../map-rendering-CzeC061I.mjs';
2
+ import { RGBColor, RGBAColor } from './pixel.mjs';
3
+ import { S as SpriteSource } from '../sprite-rendering-DfQuLVXT.mjs';
4
+ import './context.mjs';
5
+
6
+ /**
7
+ * Image - Canvas-based image class for game graphics
8
+ *
9
+ * Provides a canvas wrapper for image manipulation and drawing operations.
10
+ */
11
+
12
+ declare class Image {
13
+ private _canvas;
14
+ private _context;
15
+ private _image;
16
+ private _state;
17
+ private _centered;
18
+ width: number;
19
+ height: number;
20
+ constructor(widthOrImage: number | HTMLImageElement | HTMLCanvasElement, height?: number, centered?: boolean);
21
+ /**
22
+ * Initialize or get the canvas context
23
+ * Matches msImage initContext behavior exactly
24
+ */
25
+ initContext(): CanvasRenderingContext2D;
26
+ /**
27
+ * Get the canvas element
28
+ */
29
+ get canvas(): HTMLCanvasElement;
30
+ /**
31
+ * Get the image element (if still available)
32
+ */
33
+ get image(): HTMLImageElement | null;
34
+ /**
35
+ * Get the rendering context
36
+ */
37
+ get context(): CanvasRenderingContext2D | null;
38
+ setRGB(x: number, y: number, r: number | RGBColor, g?: number, b?: number): void;
39
+ setRGBA(x: number, y: number, r: number | RGBAColor, g?: number, b?: number, a?: number): void;
40
+ getRGB(x: number, y: number, result?: RGBColor): RGBColor;
41
+ getRGBA(x: number, y: number, result?: RGBAColor): RGBAColor;
42
+ clear(color?: string): void;
43
+ setColor(color?: string): void;
44
+ setAlpha(alpha: number): void;
45
+ setPixelated(pixelated: number): void;
46
+ setBlending(blending?: string): void;
47
+ setLineWidth(line_width: number): void;
48
+ setLineDash(dash: number[] | any): void;
49
+ setLinearGradient(x1: number, y1: number, x2: number, y2: number, c1: string, c2: string): void;
50
+ setRadialGradient(x: number, y: number, radius: number, c1: string, c2: string): void;
51
+ setFont(font?: string): void;
52
+ loadFont(font: string): Promise<void> | void;
53
+ isFontReady(font?: string): boolean;
54
+ setTranslation(translation_x: number, translation_y: number): void;
55
+ setScale(scale_x: number, scale_y: number): void;
56
+ setRotation(rotation: number): void;
57
+ setDrawAnchor(anchor_x: number, anchor_y: number): void;
58
+ setDrawRotation(object_rotation: number): void;
59
+ setDrawScale(object_scale_x: number, object_scale_y?: number): void;
60
+ fillRect(x: number, y: number, w: number, h: number, color?: string): void;
61
+ fillRoundRect(x: number, y: number, w: number, h: number, round?: number, color?: string): void;
62
+ fillRound(x: number, y: number, w: number, h: number, color?: string): void;
63
+ drawRect(x: number, y: number, w: number, h: number, color?: string): void;
64
+ drawRoundRect(x: number, y: number, w: number, h: number, round?: number, color?: string): void;
65
+ drawRound(x: number, y: number, w: number, h: number, color?: string): void;
66
+ drawLine(x1: number, y1: number, x2: number, y2: number, color?: string): void;
67
+ drawPolyline(...args: any[]): void;
68
+ drawPolygon(...args: any[]): void;
69
+ fillPolygon(...args: any[]): void;
70
+ drawQuadCurve(...args: any[]): void;
71
+ drawBezierCurve(...args: any[]): void;
72
+ drawArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void;
73
+ fillArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void;
74
+ textWidth(text: string, size: number): number;
75
+ drawText(text: string, x: number, y: number, size: number, color?: string): void;
76
+ drawTextOutline(text: string, x: number, y: number, size: number, color?: string): void;
77
+ drawSprite(sprite: SpriteSource | string, x: number, y: number, w?: number, h?: number): void;
78
+ drawImage(sprite: SpriteSource | string, x: number, y: number, w?: number, h?: number): void;
79
+ drawSpritePart(sprite: SpriteSource | string, sx: number, sy: number, sw: number, sh: number, x: number, y: number, w?: number, h?: number): void;
80
+ drawImagePart(sprite: SpriteSource | string, sx: number, sy: number, sw: number, sh: number, x: number, y: number, w?: number, h?: number): void;
81
+ drawMap(map: MapSource | string, x: number, y: number, w: number, h: number): void;
82
+ }
83
+
84
+ export { Image };