@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 @@
1
+ {"version":3,"sources":["../src/blending.ts","../src/core/color.ts","../src/core/context.ts","../src/core/drawing.ts","../src/core/font.ts","../src/core/map-rendering.ts","../src/core/pixel.ts","../src/core/shapes.ts","../src/core/sprite-rendering.ts","../src/core/text.ts","../src/core/transform.ts","../src/core/image.ts"],"sourcesContent":["export const BLENDING_MODES: Record<string, GlobalCompositeOperation> = {\n\tnormal: \"source-over\",\n\tadditive: \"lighter\",\n};\n\nconst MODES = [\n\t\"source-over\",\n\t\"source-in\",\n\t\"source-out\",\n\t\"source-atop\",\n\t\"destination-over\",\n\t\"destination-in\",\n\t\"destination-out\",\n\t\"destination-atop\",\n\t\"lighter\",\n\t\"copy\",\n\t\"xor\",\n\t\"multiply\",\n\t\"screen\",\n\t\"overlay\",\n\t\"darken\",\n\t\"lighten\",\n\t\"color-dodge\",\n\t\"color-burn\",\n\t\"hard-light\",\n\t\"soft-light\",\n\t\"difference\",\n\t\"exclusion\",\n\t\"hue\",\n\t\"saturation\",\n\t\"color\",\n\t\"luminosity\",\n];\n\nfor (const mode of MODES) {\n\tBLENDING_MODES[mode] = mode as GlobalCompositeOperation;\n}\n","/**\n * Color management for Image class\n * Handles color setting, pixel operations, and gradients\n */\n\nexport function setColor(context: CanvasRenderingContext2D, color?: string): void {\n\tif (color == null) {\n\t\treturn;\n\t}\n\tif (typeof color === \"string\") {\n\t\tcontext.fillStyle = color;\n\t\tcontext.strokeStyle = color;\n\t}\n}\n\nexport function setLinearGradient(\n\tcontext: CanvasRenderingContext2D,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n\tc1: string,\n\tc2: string,\n): void {\n\tconst grd = context.createLinearGradient(x1, y1, x2, y2);\n\tgrd.addColorStop(0, c1);\n\tgrd.addColorStop(1, c2);\n\tcontext.fillStyle = grd;\n\tcontext.strokeStyle = grd;\n}\n\nexport function setRadialGradient(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tc1: string,\n\tc2: string,\n): void {\n\tconst grd = context.createRadialGradient(x, y, 0, x, y, radius);\n\tgrd.addColorStop(0, c1);\n\tgrd.addColorStop(1, c2);\n\tcontext.fillStyle = grd;\n\tcontext.strokeStyle = grd;\n}\n","/**\n * Context management for Image class\n * Handles canvas context initialization and state management\n */\n\nexport interface ImageContextState {\n\talpha: number;\n\tpixelated: number;\n\tline_width: number;\n\ttranslation_x: number;\n\ttranslation_y: number;\n\trotation: number;\n\tscale_x: number;\n\tscale_y: number;\n\timage_transform: boolean;\n\tanchor_x: number;\n\tanchor_y: number;\n\tobject_rotation: number;\n\tobject_scale_x: number;\n\tobject_scale_y: number;\n\tfont: string;\n}\n\nexport function createDefaultContextState(centered: boolean): ImageContextState {\n\tif (centered) {\n\t\treturn {\n\t\t\talpha: 1,\n\t\t\tpixelated: 1,\n\t\t\tline_width: 1,\n\t\t\ttranslation_x: 0, // Will be set to width/2\n\t\t\ttranslation_y: 0, // Will be set to height/2\n\t\t\trotation: 0,\n\t\t\tscale_x: 1,\n\t\t\tscale_y: -1,\n\t\t\timage_transform: true,\n\t\t\tanchor_x: 0,\n\t\t\tanchor_y: 0,\n\t\t\tobject_rotation: 0,\n\t\t\tobject_scale_x: 1,\n\t\t\tobject_scale_y: -1,\n\t\t\tfont: \"BitCell\",\n\t\t};\n\t} else {\n\t\treturn {\n\t\t\talpha: 1,\n\t\t\tpixelated: 1,\n\t\t\tline_width: 1,\n\t\t\ttranslation_x: 0,\n\t\t\ttranslation_y: 0,\n\t\t\trotation: 0,\n\t\t\tscale_x: 1,\n\t\t\tscale_y: 1,\n\t\t\timage_transform: false,\n\t\t\tanchor_x: -1,\n\t\t\tanchor_y: 1,\n\t\t\tobject_rotation: 0,\n\t\t\tobject_scale_x: 1,\n\t\t\tobject_scale_y: 1,\n\t\t\tfont: \"BitCell\",\n\t\t};\n\t}\n}\n\nexport function updateImageTransform(state: ImageContextState): void {\n\tstate.image_transform =\n\t\tstate.translation_x !== 0 ||\n\t\tstate.translation_y !== 0 ||\n\t\tstate.scale_x !== 1 ||\n\t\tstate.scale_y !== 1 ||\n\t\tstate.rotation !== 0;\n}\n","/**\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","/**\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","/**\n * Map rendering for Image class\n * Handles drawing map objects onto the canvas\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport interface MapSource {\n\tready?: boolean | number;\n\tdraw?: (context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number) => void;\n}\n\nconst resolveStringMap = (name: string): MapSource | null => {\n\tconst playerRuntime = (globalThis as any)?.player?.runtime;\n\tif (!playerRuntime) {\n\t\treturn null;\n\t}\n\n\t// Resolved maps are stored under runtime.maps; fall back to\n\t// screen.runtime.maps if provided by host environments.\n\tconst directMaps = playerRuntime.maps as Record<string, MapSource> | undefined;\n\tif (directMaps && directMaps[name]) {\n\t\treturn directMaps[name];\n\t}\n\n\tconst screenMaps = playerRuntime.screen?.runtime?.maps as Record<string, MapSource> | undefined;\n\tif (screenMaps && screenMaps[name]) {\n\t\treturn screenMaps[name];\n\t}\n\n\treturn null;\n};\n\nexport function drawMap(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tmap: MapSource | string,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tconst resolvedMap: MapSource | null = typeof map === \"string\" ? resolveStringMap(map) : (map ?? null);\n\n\tif (!resolvedMap || !resolvedMap.ready || !resolvedMap.draw) {\n\t\treturn;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tresolvedMap.draw(context, -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\tresolvedMap.draw(context, x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n","/**\n * Pixel-level operations for Image class\n * Handles individual pixel reading and writing\n */\n\nexport interface RGBColor {\n\tR: number;\n\tG: number;\n\tB: number;\n}\n\nexport interface RGBAColor extends RGBColor {\n\tA: number;\n}\n\nlet pixelDataCache: ImageData | null = null;\n\nexport function setRGB(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tr: number | RGBColor,\n\tg?: number,\n\tb?: number,\n): void {\n\tif (pixelDataCache == null) {\n\t\tpixelDataCache = context.createImageData(1, 1);\n\t}\n\n\tif (typeof r === \"object\") {\n\t\tpixelDataCache.data[0] = r.R;\n\t\tpixelDataCache.data[1] = r.G;\n\t\tpixelDataCache.data[2] = r.B;\n\t} else {\n\t\tpixelDataCache.data[0] = r;\n\t\tpixelDataCache.data[1] = g || 0;\n\t\tpixelDataCache.data[2] = b || 0;\n\t}\n\tpixelDataCache.data[3] = 255;\n\n\tcontext.putImageData(pixelDataCache, x, y);\n}\n\nexport function setRGBA(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tr: number | RGBAColor,\n\tg?: number,\n\tb?: number,\n\ta?: number,\n): void {\n\tif (pixelDataCache == null) {\n\t\tpixelDataCache = context.createImageData(1, 1);\n\t}\n\n\tif (typeof r === \"object\") {\n\t\tpixelDataCache.data[0] = r.R;\n\t\tpixelDataCache.data[1] = r.G;\n\t\tpixelDataCache.data[2] = r.B;\n\t\tpixelDataCache.data[3] = r.A != null ? r.A : 255;\n\t} else {\n\t\tpixelDataCache.data[0] = r;\n\t\tpixelDataCache.data[1] = g || 0;\n\t\tpixelDataCache.data[2] = b || 0;\n\t\tpixelDataCache.data[3] = a ?? 255;\n\t}\n\n\tcontext.putImageData(pixelDataCache, x, y);\n}\n\nexport function getRGB(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tresult: RGBColor = {\n\t\tR: 0,\n\t\tG: 0,\n\t\tB: 0,\n\t},\n): RGBColor {\n\tconst d = context.getImageData(x, y, 1, 1);\n\tresult.R = d.data[0];\n\tresult.G = d.data[1];\n\tresult.B = d.data[2];\n\treturn result;\n}\n\nexport function getRGBA(\n\tcontext: CanvasRenderingContext2D,\n\tx: number,\n\ty: number,\n\tresult: RGBAColor = {\n\t\tR: 0,\n\t\tG: 0,\n\t\tB: 0,\n\t\tA: 255,\n\t},\n): RGBAColor {\n\tconst d = context.getImageData(x, y, 1, 1);\n\tresult.R = d.data[0];\n\tresult.G = d.data[1];\n\tresult.B = d.data[2];\n\tresult.A = d.data[3];\n\treturn result;\n}\n","/**\n * Advanced shape drawing operations\n * Handles polygons, polylines, curves, and arcs\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.closePath();\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.fill();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 4) {\n\t\tcontext.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);\n\t\tindex += 4;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 6) {\n\t\tcontext.bezierCurveTo(\n\t\t\targs[index],\n\t\t\targs[index + 1],\n\t\t\targs[index + 2],\n\t\t\targs[index + 3],\n\t\t\targs[index + 4],\n\t\t\targs[index + 5],\n\t\t);\n\t\tindex += 6;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function fillArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t}\n}\n","/**\n * Sprite and image rendering for Image class\n * Handles drawing sprites and images onto the canvas\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport interface SpriteSource {\n\tframes?: Array<{\n\t\tcanvas: HTMLCanvasElement;\n\t}>;\n\tcanvas?: HTMLCanvasElement;\n\timage?: HTMLImageElement;\n\tready?: boolean | number;\n\tfps?: number;\n\tanimation_start?: number;\n}\n\nexport function getSpriteFrame(sprite: SpriteSource | string): HTMLCanvasElement | null {\n\t// Handle Image instances\n\tif (typeof sprite === \"object\" && \"canvas\" in sprite && !(\"frames\" in sprite)) {\n\t\treturn sprite.canvas || (sprite.image as any) || null;\n\t}\n\n\t// Handle Sprite instances\n\tif (typeof sprite === \"object\" && sprite.frames && sprite.frames.length > 0) {\n\t\tif (!sprite.ready) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (sprite.frames.length > 1) {\n\t\t\t// Initialize animation_start lazily on first use to ensure animation starts from frame 0\n\t\t\t// This ensures smooth sequential animation: 0->1->2->...->N->0->1->...\n\t\t\tif (!sprite.animation_start || sprite.animation_start === 0) {\n\t\t\t\tsprite.animation_start = Date.now();\n\t\t\t}\n\t\t\tconst dt = 1000 / (sprite.fps || 5);\n\t\t\tconst frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length;\n\t\t\tif (frame >= 0 && frame < sprite.frames.length) {\n\t\t\t\treturn sprite.frames[frame].canvas;\n\t\t\t}\n\t\t\treturn sprite.frames[0].canvas;\n\t\t}\n\t\treturn sprite.frames[0].canvas;\n\t}\n\n\treturn null;\n}\n\nexport function drawSprite(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / canvas.width) * canvas.height;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, -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.drawImage(canvas, x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawSpritePart(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tsx: number,\n\tsy: number,\n\tsw: number,\n\tsh: number,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\t// Image class uses w = canvas.width (Screen uses w = sw)\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / sw) * sh;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, sx, sy, sw, sh, -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.drawImage(\n\t\t\tcanvas,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tsw,\n\t\t\tsh,\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);\n\t}\n}\n","/**\n * Text rendering operations for Image class\n * Handles text drawing, measurement, and font management\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function textWidth(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tsize: number,\n): number {\n\tcontext.font = `${size}pt ${state.font}`;\n\treturn context.measureText(text).width;\n}\n\nexport function drawText(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tx: number,\n\ty: number,\n\tsize: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.font = `${size}pt ${state.font}`;\n\tcontext.textAlign = \"center\";\n\tcontext.textBaseline = \"middle\";\n\n\tconst w = context.measureText(text).width;\n\tconst h = size;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillText(text, 0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillText(text, x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2);\n\t}\n}\n\nexport function drawTextOutline(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\ttext: string,\n\tx: number,\n\ty: number,\n\tsize: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.font = `${size}pt ${state.font}`;\n\tcontext.lineWidth = state.line_width;\n\tcontext.textAlign = \"center\";\n\tcontext.textBaseline = \"middle\";\n\n\tconst w = context.measureText(text).width;\n\tconst h = size;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeText(text, 0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeText(text, x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2);\n\t}\n}\n","/**\n * Transform operations for Image class\n * Handles translation, rotation, scaling, and anchoring\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { updateImageTransform } from \"./context\";\n\nexport function setTranslation(state: ImageContextState, translation_x: number, translation_y: number): void {\n\tstate.translation_x = translation_x;\n\tstate.translation_y = translation_y;\n\n\tif (!isFinite(state.translation_x)) {\n\t\tstate.translation_x = 0;\n\t}\n\tif (!isFinite(state.translation_y)) {\n\t\tstate.translation_y = 0;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setScale(state: ImageContextState, scale_x: number, scale_y: number): void {\n\tstate.scale_x = scale_x;\n\tstate.scale_y = scale_y;\n\n\tif (!isFinite(state.scale_x) || state.scale_x === 0) {\n\t\tstate.scale_x = 1;\n\t}\n\tif (!isFinite(state.scale_y) || state.scale_y === 0) {\n\t\tstate.scale_y = 1;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setRotation(state: ImageContextState, rotation: number): void {\n\tstate.rotation = rotation;\n\n\tif (!isFinite(state.rotation)) {\n\t\tstate.rotation = 0;\n\t}\n\n\tupdateImageTransform(state);\n}\n\nexport function setDrawAnchor(state: ImageContextState, anchor_x: number, anchor_y: number): void {\n\tstate.anchor_x = anchor_x;\n\tstate.anchor_y = anchor_y;\n\n\tif (typeof state.anchor_x !== \"number\") {\n\t\tstate.anchor_x = 0;\n\t}\n\tif (typeof state.anchor_y !== \"number\") {\n\t\tstate.anchor_y = 0;\n\t}\n}\n\nexport function setDrawRotation(state: ImageContextState, object_rotation: number): void {\n\tstate.object_rotation = object_rotation;\n}\n\nexport function setDrawScale(state: ImageContextState, object_scale_x: number, object_scale_y: number): void {\n\tstate.object_scale_x = object_scale_x;\n\tstate.object_scale_y = object_scale_y;\n}\n","/**\n * Image - Canvas-based image class for game graphics\n *\n * Provides a canvas wrapper for image manipulation and drawing operations.\n */\n\nimport { BLENDING_MODES } from \"../blending\";\nimport * as ColorOps from \"./color\";\nimport { createDefaultContextState, type ImageContextState } from \"./context\";\nimport * as DrawingOps from \"./drawing\";\nimport * as FontOps from \"./font\";\nimport * as MapRenderingOps from \"./map-rendering\";\nimport * as PixelOps from \"./pixel\";\nimport * as ShapeOps from \"./shapes\";\nimport * as SpriteRenderingOps from \"./sprite-rendering\";\nimport * as TextOps from \"./text\";\nimport * as TransformOps from \"./transform\";\n\n/**\n * For variadic shape methods, the last argument may optionally be a color string.\n * This helper splits the args into point pairs and an optional color.\n */\nfunction splitColorArg(args: any[]): { points: any[]; color: string | undefined } {\n\tif (args.length > 0 && args.length % 2 === 1 && typeof args[args.length - 1] === \"string\") {\n\t\treturn { points: args.slice(0, -1), color: args[args.length - 1] };\n\t}\n\treturn { points: args, color: undefined };\n}\n\nexport class Image {\n\tprivate _canvas!: HTMLCanvasElement;\n\tprivate _context: CanvasRenderingContext2D | null = null;\n\tprivate _image: HTMLImageElement | null = null;\n\tprivate _state!: ImageContextState;\n\tprivate _centered: boolean;\n\n\tpublic width: number;\n\tpublic height: number;\n\n\tconstructor(widthOrImage: number | HTMLImageElement | HTMLCanvasElement, height?: number, centered: boolean = false) {\n\t\tthis._centered = centered;\n\n\t\tif (typeof widthOrImage === \"object\" && \"naturalWidth\" in widthOrImage) {\n\t\t\t// HTMLImageElement\n\t\t\tthis._image = widthOrImage as HTMLImageElement;\n\t\t\tthis.width = this._image.width;\n\t\t\tthis.height = this._image.height;\n\t\t} else if (typeof widthOrImage === \"object\" && \"getContext\" in widthOrImage) {\n\t\t\t// HTMLCanvasElement\n\t\t\tthis._canvas = widthOrImage as HTMLCanvasElement;\n\t\t\tthis.width = this._canvas.width;\n\t\t\tthis.height = this._canvas.height;\n\t\t} else {\n\t\t\t// Number\n\t\t\tthis._canvas = document.createElement(\"canvas\");\n\t\t\tthis.width = Math.round(widthOrImage as number);\n\t\t\tthis.height = Math.round(height || (widthOrImage as number));\n\t\t\tthis._canvas.width = this.width;\n\t\t\tthis._canvas.height = this.height;\n\t\t}\n\t}\n\n\t/**\n\t * Initialize or get the canvas context\n\t * Matches msImage initContext behavior exactly\n\t */\n\tinitContext(): CanvasRenderingContext2D {\n\t\t// Return early if context already exists (same as msImage line 68)\n\t\tif (this._context) {\n\t\t\treturn this._context;\n\t\t}\n\n\t\t// Convert image to canvas if needed (same as msImage lines 69-75)\n\t\tif (!this._canvas && this._image) {\n\t\t\tthis._canvas = document.createElement(\"canvas\");\n\t\t\tthis._canvas.width = this._image.width;\n\t\t\tthis._canvas.height = this._image.height;\n\t\t\tthis._context = this._canvas.getContext(\"2d\")!;\n\t\t\tthis._context.drawImage(this._image, 0, 0);\n\t\t\tthis._image = null;\n\t\t}\n\n\t\t// Always get fresh context (same as msImage line 80)\n\t\t// This ensures no leftover transforms from previous operations\n\t\tthis._context = this._canvas.getContext(\"2d\")!;\n\t\tif (this._context) {\n\t\t\tthis._context.lineCap = \"round\";\n\t\t}\n\n\t\t// Initialize state (same as msImage lines 77-106)\n\t\tif (!this._state) {\n\t\t\tthis._state = createDefaultContextState(this._centered);\n\t\t\tif (this._centered) {\n\t\t\t\tthis._state.translation_x = this.width / 2;\n\t\t\t\tthis._state.translation_y = this.height / 2;\n\t\t\t}\n\t\t}\n\n\t\treturn this._context;\n\t}\n\n\t/**\n\t * Get the canvas element\n\t */\n\tget canvas(): HTMLCanvasElement {\n\t\tthis.initContext();\n\t\treturn this._canvas;\n\t}\n\n\t/**\n\t * Get the image element (if still available)\n\t */\n\tget image(): HTMLImageElement | null {\n\t\treturn this._image;\n\t}\n\n\t/**\n\t * Get the rendering context\n\t */\n\tget context(): CanvasRenderingContext2D | null {\n\t\treturn this._context;\n\t}\n\n\t// ===== PIXEL OPERATIONS =====\n\n\tsetRGB(x: number, y: number, r: number | PixelOps.RGBColor, g?: number, b?: number): void {\n\t\tthis.initContext();\n\t\tPixelOps.setRGB(this._context!, x, y, r, g, b);\n\t}\n\n\tsetRGBA(x: number, y: number, r: number | PixelOps.RGBAColor, g?: number, b?: number, a?: number): void {\n\t\tthis.initContext();\n\t\tPixelOps.setRGBA(this._context!, x, y, r, g, b, a);\n\t}\n\n\tgetRGB(x: number, y: number, result?: PixelOps.RGBColor): PixelOps.RGBColor {\n\t\tthis.initContext();\n\t\treturn PixelOps.getRGB(this._context!, x, y, result);\n\t}\n\n\tgetRGBA(x: number, y: number, result?: PixelOps.RGBAColor): PixelOps.RGBAColor {\n\t\tthis.initContext();\n\t\treturn PixelOps.getRGBA(this._context!, x, y, result);\n\t}\n\n\t// ===== CANVAS OPERATIONS =====\n\n\tclear(color?: string): void {\n\t\tthis.initContext();\n\t\tconst c = this._context!.fillStyle;\n\t\tconst s = this._context!.strokeStyle;\n\t\tconst blending_save = this._context!.globalCompositeOperation;\n\n\t\tthis._context!.globalAlpha = 1;\n\t\tthis._context!.globalCompositeOperation = \"source-over\";\n\n\t\tif (color != null) {\n\t\t\tthis.setColor(color);\n\t\t} else {\n\t\t\tthis._context!.fillStyle = \"#000\";\n\t\t}\n\n\t\tthis._context!.fillRect(0, 0, this.width, this.height);\n\t\tthis._context!.fillStyle = c;\n\t\tthis._context!.strokeStyle = s;\n\t\tthis._context!.globalCompositeOperation = blending_save;\n\t}\n\n\t// ===== COLOR OPERATIONS =====\n\n\tsetColor(color?: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setColor(this._context!, color);\n\t}\n\n\tsetAlpha(alpha: number): void {\n\t\tthis.initContext();\n\t\tthis._state.alpha = alpha;\n\t}\n\n\tsetPixelated(pixelated: number): void {\n\t\tthis.initContext();\n\t\tthis._state.pixelated = pixelated;\n\t}\n\n\tsetBlending(blending?: string): void {\n\t\tthis.initContext();\n\t\tconst mode = BLENDING_MODES[blending || \"normal\"] || \"source-over\";\n\t\tthis._context!.globalCompositeOperation = mode;\n\t}\n\n\tsetLineWidth(line_width: number): void {\n\t\tthis.initContext();\n\t\tthis._state.line_width = line_width;\n\t}\n\n\tsetLineDash(dash: number[] | any): void {\n\t\tthis.initContext();\n\t\tif (!Array.isArray(dash)) {\n\t\t\tthis._context!.setLineDash([]);\n\t\t} else {\n\t\t\tthis._context!.setLineDash(dash);\n\t\t}\n\t}\n\n\tsetLinearGradient(x1: number, y1: number, x2: number, y2: number, c1: string, c2: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setLinearGradient(this._context!, x1, y1, x2, y2, c1, c2);\n\t}\n\n\tsetRadialGradient(x: number, y: number, radius: number, c1: string, c2: string): void {\n\t\tthis.initContext();\n\t\tColorOps.setRadialGradient(this._context!, x, y, radius, c1, c2);\n\t}\n\n\t// ===== FONT OPERATIONS =====\n\n\tsetFont(font?: string): void {\n\t\tthis.initContext();\n\t\tthis._state.font = font || \"Verdana\";\n\t\tthis.loadFont(this._state.font);\n\t}\n\n\tloadFont(font: string): Promise<void> | void {\n\t\treturn FontOps.loadFont(font);\n\t}\n\n\tisFontReady(font?: string): boolean {\n\t\treturn FontOps.isFontReady(font || this._state?.font || \"Verdana\");\n\t}\n\n\t// ===== TRANSFORM OPERATIONS =====\n\n\tsetTranslation(translation_x: number, translation_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setTranslation(this._state, translation_x, translation_y);\n\t}\n\n\tsetScale(scale_x: number, scale_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setScale(this._state, scale_x, scale_y);\n\t}\n\n\tsetRotation(rotation: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setRotation(this._state, rotation);\n\t}\n\n\tsetDrawAnchor(anchor_x: number, anchor_y: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawAnchor(this._state, anchor_x, anchor_y);\n\t}\n\n\tsetDrawRotation(object_rotation: number): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawRotation(this._state, object_rotation);\n\t}\n\n\tsetDrawScale(object_scale_x: number, object_scale_y: number = object_scale_x): void {\n\t\tthis.initContext();\n\t\tTransformOps.setDrawScale(this._state, object_scale_x, object_scale_y);\n\t}\n\n\t// ===== DRAWING OPERATIONS =====\n\n\tfillRect(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRect(this._context!, this._state, x, y, w, h);\n\t}\n\n\tfillRoundRect(x: number, y: number, w: number, h: number, round: number = 10, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRoundRect(this._context!, this._state, x, y, w, h, round);\n\t}\n\n\tfillRound(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.fillRound(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawRect(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRect(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawRoundRect(x: number, y: number, w: number, h: number, round: number = 10, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRoundRect(this._context!, this._state, x, y, w, h, round);\n\t}\n\n\tdrawRound(x: number, y: number, w: number, h: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawRound(this._context!, this._state, x, y, w, h);\n\t}\n\n\tdrawLine(x1: number, y1: number, x2: number, y2: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tDrawingOps.drawLine(this._context!, this._state, x1, y1, x2, y2);\n\t}\n\n\t// ===== SHAPE OPERATIONS =====\n\n\tdrawPolyline(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawPolyline(this._context!, this._state, points);\n\t}\n\n\tdrawPolygon(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawPolygon(this._context!, this._state, points);\n\t}\n\n\tfillPolygon(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.fillPolygon(this._context!, this._state, points);\n\t}\n\n\tdrawQuadCurve(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawQuadCurve(this._context!, this._state, points);\n\t}\n\n\tdrawBezierCurve(...args: any[]): void {\n\t\tthis.initContext();\n\t\tconst { points, color } = splitColorArg(args);\n\t\tthis.setColor(color);\n\t\tShapeOps.drawBezierCurve(this._context!, this._state, points);\n\t}\n\n\tdrawArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tShapeOps.drawArc(this._context!, this._state, x, y, radius, angle1, angle2, ccw);\n\t}\n\n\tfillArc(x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tShapeOps.fillArc(this._context!, this._state, x, y, radius, angle1, angle2, ccw);\n\t}\n\n\t// ===== TEXT OPERATIONS =====\n\n\ttextWidth(text: string, size: number): number {\n\t\tthis.initContext();\n\t\treturn TextOps.textWidth(this._context!, this._state, text, size);\n\t}\n\n\tdrawText(text: string, x: number, y: number, size: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tTextOps.drawText(this._context!, this._state, text, x, y, size);\n\t}\n\n\tdrawTextOutline(text: string, x: number, y: number, size: number, color?: string): void {\n\t\tthis.initContext();\n\t\tthis.setColor(color);\n\t\tTextOps.drawTextOutline(this._context!, this._state, text, x, y, size);\n\t}\n\n\t// ===== SPRITE RENDERING =====\n\n\tdrawSprite(sprite: SpriteRenderingOps.SpriteSource | string, x: number, y: number, w?: number, h?: number): void {\n\t\tthis.initContext();\n\t\tSpriteRenderingOps.drawSprite(this._context!, this._state, sprite, x, y, w, h);\n\t}\n\n\tdrawImage(sprite: SpriteRenderingOps.SpriteSource | string, x: number, y: number, w?: number, h?: number): void {\n\t\tthis.drawSprite(sprite, x, y, w, h);\n\t}\n\n\tdrawSpritePart(\n\t\tsprite: SpriteRenderingOps.SpriteSource | string,\n\t\tsx: number,\n\t\tsy: number,\n\t\tsw: number,\n\t\tsh: number,\n\t\tx: number,\n\t\ty: number,\n\t\tw?: number,\n\t\th?: number,\n\t): void {\n\t\tthis.initContext();\n\t\tSpriteRenderingOps.drawSpritePart(this._context!, this._state, sprite, sx, sy, sw, sh, x, y, w, h);\n\t}\n\n\tdrawImagePart(\n\t\tsprite: SpriteRenderingOps.SpriteSource | string,\n\t\tsx: number,\n\t\tsy: number,\n\t\tsw: number,\n\t\tsh: number,\n\t\tx: number,\n\t\ty: number,\n\t\tw?: number,\n\t\th?: number,\n\t): void {\n\t\tthis.drawSpritePart(sprite, sx, sy, sw, sh, x, y, w, h);\n\t}\n\n\t// ===== MAP RENDERING =====\n\n\tdrawMap(map: MapRenderingOps.MapSource | string, x: number, y: number, w: number, h: number): void {\n\t\tthis.initContext();\n\t\tMapRenderingOps.drawMap(this._context!, this._state, map, x, y, w, h);\n\t}\n}\n"],"mappings":"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","names":["BLENDING_MODES","normal","additive","MODES","mode","setColor","context","color","fillStyle","strokeStyle","setLinearGradient","x1","y1","x2","y2","c1","c2","grd","createLinearGradient","addColorStop","setRadialGradient","x","y","radius","createRadialGradient","createDefaultContextState","centered","alpha","pixelated","line_width","translation_x","translation_y","rotation","scale_x","scale_y","image_transform","anchor_x","anchor_y","object_rotation","object_scale_x","object_scale_y","font","updateImageTransform","state","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","loadedFonts","Set","loadingFonts","Map","loadFont","font","has","Promise","resolve","get","document","promise","fonts","load","then","add","delete","catch","set","isFontReady","check","clearFontCache","clear","resolveStringMap","name","playerRuntime","globalThis","player","runtime","directMaps","maps","screenMaps","screen","drawMap","context","state","map","x","y","w","h","resolvedMap","ready","draw","globalAlpha","alpha","imageSmoothingEnabled","pixelated","initDrawOp","anchor_x","anchor_y","closeDrawOp","pixelDataCache","setRGB","context","x","y","r","g","b","createImageData","data","R","G","B","putImageData","setRGBA","a","A","getRGB","result","d","getImageData","getRGBA","drawPolyline","context","state","args","Array","isArray","globalAlpha","alpha","lineWidth","line_width","length","len","Math","floor","transform","initDrawOp","beginPath","moveTo","i","lineTo","stroke","closeDrawOp","drawPolygon","closePath","fillPolygon","fill","drawQuadCurve","index","quadraticCurveTo","drawBezierCurve","bezierCurveTo","drawArc","x","y","radius","angle1","angle2","ccw","arc","PI","fillArc","getSpriteFrame","sprite","canvas","image","frames","length","ready","animation_start","Date","now","dt","fps","frame","Math","floor","drawSprite","context","state","x","y","w","h","width","height","globalAlpha","alpha","imageSmoothingEnabled","pixelated","initDrawOp","drawImage","anchor_x","anchor_y","closeDrawOp","drawSpritePart","sx","sy","sw","sh","textWidth","context","state","text","size","font","measureText","width","drawText","x","y","globalAlpha","alpha","textAlign","textBaseline","w","h","initDrawOp","fillText","anchor_x","anchor_y","closeDrawOp","drawTextOutline","lineWidth","line_width","strokeText","setTranslation","state","translation_x","translation_y","isFinite","updateImageTransform","setScale","scale_x","scale_y","setRotation","rotation","setDrawAnchor","anchor_x","anchor_y","setDrawRotation","object_rotation","setDrawScale","object_scale_x","object_scale_y","splitColorArg","args","length","points","slice","color","undefined","Image","_canvas","_context","_image","_state","_centered","width","height","widthOrImage","centered","document","createElement","Math","round","initContext","getContext","drawImage","lineCap","createDefaultContextState","translation_x","translation_y","canvas","image","context","setRGB","x","y","r","g","b","PixelOps","setRGBA","a","getRGB","result","getRGBA","clear","c","fillStyle","s","strokeStyle","blending_save","globalCompositeOperation","globalAlpha","setColor","fillRect","ColorOps","setAlpha","alpha","setPixelated","pixelated","setBlending","blending","mode","BLENDING_MODES","setLineWidth","line_width","setLineDash","dash","Array","isArray","setLinearGradient","x1","y1","x2","y2","c1","c2","setRadialGradient","radius","setFont","font","loadFont","isFontReady","setTranslation","TransformOps","setScale","scale_x","scale_y","setRotation","rotation","setDrawAnchor","anchor_x","anchor_y","setDrawRotation","object_rotation","setDrawScale","object_scale_x","object_scale_y","w","h","DrawingOps","fillRoundRect","fillRound","drawRect","drawRoundRect","drawRound","drawLine","drawPolyline","ShapeOps","drawPolygon","fillPolygon","drawQuadCurve","drawBezierCurve","drawArc","angle1","angle2","ccw","fillArc","textWidth","text","size","drawText","TextOps","drawTextOutline","drawSprite","sprite","SpriteRenderingOps","drawSpritePart","sx","sy","sw","sh","drawImagePart","drawMap","map","MapRenderingOps"]}
@@ -0,0 +1,20 @@
1
+ import { ImageContextState } from './core/context.mjs';
2
+
3
+ /**
4
+ * Map rendering for Image class
5
+ * Handles drawing map objects onto the canvas
6
+ */
7
+
8
+ interface MapSource {
9
+ ready?: boolean | number;
10
+ draw?: (context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number) => void;
11
+ }
12
+ declare function drawMap(context: CanvasRenderingContext2D, state: ImageContextState, map: MapSource | string, x: number, y: number, w: number, h: number): void;
13
+
14
+ type mapRendering_MapSource = MapSource;
15
+ declare const mapRendering_drawMap: typeof drawMap;
16
+ declare namespace mapRendering {
17
+ export { type mapRendering_MapSource as MapSource, mapRendering_drawMap as drawMap };
18
+ }
19
+
20
+ export { type MapSource as M, drawMap as d, mapRendering as m };
@@ -0,0 +1,20 @@
1
+ import { ImageContextState } from './core/context.js';
2
+
3
+ /**
4
+ * Map rendering for Image class
5
+ * Handles drawing map objects onto the canvas
6
+ */
7
+
8
+ interface MapSource {
9
+ ready?: boolean | number;
10
+ draw?: (context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number) => void;
11
+ }
12
+ declare function drawMap(context: CanvasRenderingContext2D, state: ImageContextState, map: MapSource | string, x: number, y: number, w: number, h: number): void;
13
+
14
+ type mapRendering_MapSource = MapSource;
15
+ declare const mapRendering_drawMap: typeof drawMap;
16
+ declare namespace mapRendering {
17
+ export { type mapRendering_MapSource as MapSource, mapRendering_drawMap as drawMap };
18
+ }
19
+
20
+ export { type MapSource as M, drawMap as d, mapRendering as m };
@@ -0,0 +1,27 @@
1
+ import { ImageContextState } from './core/context.js';
2
+
3
+ /**
4
+ * Advanced shape drawing operations
5
+ * Handles polygons, polylines, curves, and arcs
6
+ */
7
+
8
+ declare function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
9
+ declare function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
10
+ declare function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
11
+ declare function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
12
+ declare function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
13
+ declare function drawArc(context: CanvasRenderingContext2D, state: ImageContextState, x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean): void;
14
+ declare function fillArc(context: CanvasRenderingContext2D, state: ImageContextState, x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean): void;
15
+
16
+ declare const shapes_drawArc: typeof drawArc;
17
+ declare const shapes_drawBezierCurve: typeof drawBezierCurve;
18
+ declare const shapes_drawPolygon: typeof drawPolygon;
19
+ declare const shapes_drawPolyline: typeof drawPolyline;
20
+ declare const shapes_drawQuadCurve: typeof drawQuadCurve;
21
+ declare const shapes_fillArc: typeof fillArc;
22
+ declare const shapes_fillPolygon: typeof fillPolygon;
23
+ declare namespace shapes {
24
+ export { shapes_drawArc as drawArc, shapes_drawBezierCurve as drawBezierCurve, shapes_drawPolygon as drawPolygon, shapes_drawPolyline as drawPolyline, shapes_drawQuadCurve as drawQuadCurve, shapes_fillArc as fillArc, shapes_fillPolygon as fillPolygon };
25
+ }
26
+
27
+ export { drawBezierCurve as a, drawPolygon as b, drawPolyline as c, drawArc as d, drawQuadCurve as e, fillArc as f, fillPolygon as g, shapes as s };
@@ -0,0 +1,27 @@
1
+ import { ImageContextState } from './core/context.mjs';
2
+
3
+ /**
4
+ * Advanced shape drawing operations
5
+ * Handles polygons, polylines, curves, and arcs
6
+ */
7
+
8
+ declare function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
9
+ declare function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
10
+ declare function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
11
+ declare function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
12
+ declare function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void;
13
+ declare function drawArc(context: CanvasRenderingContext2D, state: ImageContextState, x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean): void;
14
+ declare function fillArc(context: CanvasRenderingContext2D, state: ImageContextState, x: number, y: number, radius: number, angle1: number, angle2: number, ccw: boolean): void;
15
+
16
+ declare const shapes_drawArc: typeof drawArc;
17
+ declare const shapes_drawBezierCurve: typeof drawBezierCurve;
18
+ declare const shapes_drawPolygon: typeof drawPolygon;
19
+ declare const shapes_drawPolyline: typeof drawPolyline;
20
+ declare const shapes_drawQuadCurve: typeof drawQuadCurve;
21
+ declare const shapes_fillArc: typeof fillArc;
22
+ declare const shapes_fillPolygon: typeof fillPolygon;
23
+ declare namespace shapes {
24
+ export { shapes_drawArc as drawArc, shapes_drawBezierCurve as drawBezierCurve, shapes_drawPolygon as drawPolygon, shapes_drawPolyline as drawPolyline, shapes_drawQuadCurve as drawQuadCurve, shapes_fillArc as fillArc, shapes_fillPolygon as fillPolygon };
25
+ }
26
+
27
+ export { drawBezierCurve as a, drawPolygon as b, drawPolyline as c, drawArc as d, drawQuadCurve as e, fillArc as f, fillPolygon as g, shapes as s };
@@ -0,0 +1,30 @@
1
+ import { ImageContextState } from './core/context.js';
2
+
3
+ /**
4
+ * Sprite and image rendering for Image class
5
+ * Handles drawing sprites and images onto the canvas
6
+ */
7
+
8
+ interface SpriteSource {
9
+ frames?: Array<{
10
+ canvas: HTMLCanvasElement;
11
+ }>;
12
+ canvas?: HTMLCanvasElement;
13
+ image?: HTMLImageElement;
14
+ ready?: boolean | number;
15
+ fps?: number;
16
+ animation_start?: number;
17
+ }
18
+ declare function getSpriteFrame(sprite: SpriteSource | string): HTMLCanvasElement | null;
19
+ declare function drawSprite(context: CanvasRenderingContext2D, state: ImageContextState, sprite: SpriteSource | string, x: number, y: number, w?: number, h?: number): void;
20
+ declare function drawSpritePart(context: CanvasRenderingContext2D, state: ImageContextState, sprite: SpriteSource | string, sx: number, sy: number, sw: number, sh: number, x: number, y: number, w?: number, h?: number): void;
21
+
22
+ type spriteRendering_SpriteSource = SpriteSource;
23
+ declare const spriteRendering_drawSprite: typeof drawSprite;
24
+ declare const spriteRendering_drawSpritePart: typeof drawSpritePart;
25
+ declare const spriteRendering_getSpriteFrame: typeof getSpriteFrame;
26
+ declare namespace spriteRendering {
27
+ export { type spriteRendering_SpriteSource as SpriteSource, spriteRendering_drawSprite as drawSprite, spriteRendering_drawSpritePart as drawSpritePart, spriteRendering_getSpriteFrame as getSpriteFrame };
28
+ }
29
+
30
+ export { type SpriteSource as S, drawSpritePart as a, drawSprite as d, getSpriteFrame as g, spriteRendering as s };
@@ -0,0 +1,30 @@
1
+ import { ImageContextState } from './core/context.mjs';
2
+
3
+ /**
4
+ * Sprite and image rendering for Image class
5
+ * Handles drawing sprites and images onto the canvas
6
+ */
7
+
8
+ interface SpriteSource {
9
+ frames?: Array<{
10
+ canvas: HTMLCanvasElement;
11
+ }>;
12
+ canvas?: HTMLCanvasElement;
13
+ image?: HTMLImageElement;
14
+ ready?: boolean | number;
15
+ fps?: number;
16
+ animation_start?: number;
17
+ }
18
+ declare function getSpriteFrame(sprite: SpriteSource | string): HTMLCanvasElement | null;
19
+ declare function drawSprite(context: CanvasRenderingContext2D, state: ImageContextState, sprite: SpriteSource | string, x: number, y: number, w?: number, h?: number): void;
20
+ declare function drawSpritePart(context: CanvasRenderingContext2D, state: ImageContextState, sprite: SpriteSource | string, sx: number, sy: number, sw: number, sh: number, x: number, y: number, w?: number, h?: number): void;
21
+
22
+ type spriteRendering_SpriteSource = SpriteSource;
23
+ declare const spriteRendering_drawSprite: typeof drawSprite;
24
+ declare const spriteRendering_drawSpritePart: typeof drawSpritePart;
25
+ declare const spriteRendering_getSpriteFrame: typeof getSpriteFrame;
26
+ declare namespace spriteRendering {
27
+ export { type spriteRendering_SpriteSource as SpriteSource, spriteRendering_drawSprite as drawSprite, spriteRendering_drawSpritePart as drawSpritePart, spriteRendering_getSpriteFrame as getSpriteFrame };
28
+ }
29
+
30
+ export { type SpriteSource as S, drawSpritePart as a, drawSprite as d, getSpriteFrame as g, spriteRendering as s };
@@ -0,0 +1,19 @@
1
+ import { ImageContextState } from './core/context.mjs';
2
+
3
+ /**
4
+ * Text rendering operations for Image class
5
+ * Handles text drawing, measurement, and font management
6
+ */
7
+
8
+ declare function textWidth(context: CanvasRenderingContext2D, state: ImageContextState, text: string, size: number): number;
9
+ declare function drawText(context: CanvasRenderingContext2D, state: ImageContextState, text: string, x: number, y: number, size: number): void;
10
+ declare function drawTextOutline(context: CanvasRenderingContext2D, state: ImageContextState, text: string, x: number, y: number, size: number): void;
11
+
12
+ declare const text_drawText: typeof drawText;
13
+ declare const text_drawTextOutline: typeof drawTextOutline;
14
+ declare const text_textWidth: typeof textWidth;
15
+ declare namespace text {
16
+ export { text_drawText as drawText, text_drawTextOutline as drawTextOutline, text_textWidth as textWidth };
17
+ }
18
+
19
+ export { drawTextOutline as a, textWidth as b, drawText as d, text as t };
@@ -0,0 +1,19 @@
1
+ import { ImageContextState } from './core/context.js';
2
+
3
+ /**
4
+ * Text rendering operations for Image class
5
+ * Handles text drawing, measurement, and font management
6
+ */
7
+
8
+ declare function textWidth(context: CanvasRenderingContext2D, state: ImageContextState, text: string, size: number): number;
9
+ declare function drawText(context: CanvasRenderingContext2D, state: ImageContextState, text: string, x: number, y: number, size: number): void;
10
+ declare function drawTextOutline(context: CanvasRenderingContext2D, state: ImageContextState, text: string, x: number, y: number, size: number): void;
11
+
12
+ declare const text_drawText: typeof drawText;
13
+ declare const text_drawTextOutline: typeof drawTextOutline;
14
+ declare const text_textWidth: typeof textWidth;
15
+ declare namespace text {
16
+ export { text_drawText as drawText, text_drawTextOutline as drawTextOutline, text_textWidth as textWidth };
17
+ }
18
+
19
+ export { drawTextOutline as a, textWidth as b, drawText as d, text as t };
@@ -0,0 +1,25 @@
1
+ import { ImageContextState } from './core/context.mjs';
2
+
3
+ /**
4
+ * Transform operations for Image class
5
+ * Handles translation, rotation, scaling, and anchoring
6
+ */
7
+
8
+ declare function setTranslation(state: ImageContextState, translation_x: number, translation_y: number): void;
9
+ declare function setScale(state: ImageContextState, scale_x: number, scale_y: number): void;
10
+ declare function setRotation(state: ImageContextState, rotation: number): void;
11
+ declare function setDrawAnchor(state: ImageContextState, anchor_x: number, anchor_y: number): void;
12
+ declare function setDrawRotation(state: ImageContextState, object_rotation: number): void;
13
+ declare function setDrawScale(state: ImageContextState, object_scale_x: number, object_scale_y: number): void;
14
+
15
+ declare const transform_setDrawAnchor: typeof setDrawAnchor;
16
+ declare const transform_setDrawRotation: typeof setDrawRotation;
17
+ declare const transform_setDrawScale: typeof setDrawScale;
18
+ declare const transform_setRotation: typeof setRotation;
19
+ declare const transform_setScale: typeof setScale;
20
+ declare const transform_setTranslation: typeof setTranslation;
21
+ declare namespace transform {
22
+ export { transform_setDrawAnchor as setDrawAnchor, transform_setDrawRotation as setDrawRotation, transform_setDrawScale as setDrawScale, transform_setRotation as setRotation, transform_setScale as setScale, transform_setTranslation as setTranslation };
23
+ }
24
+
25
+ export { setDrawRotation as a, setDrawScale as b, setRotation as c, setScale as d, setTranslation as e, setDrawAnchor as s, transform as t };
@@ -0,0 +1,25 @@
1
+ import { ImageContextState } from './core/context.js';
2
+
3
+ /**
4
+ * Transform operations for Image class
5
+ * Handles translation, rotation, scaling, and anchoring
6
+ */
7
+
8
+ declare function setTranslation(state: ImageContextState, translation_x: number, translation_y: number): void;
9
+ declare function setScale(state: ImageContextState, scale_x: number, scale_y: number): void;
10
+ declare function setRotation(state: ImageContextState, rotation: number): void;
11
+ declare function setDrawAnchor(state: ImageContextState, anchor_x: number, anchor_y: number): void;
12
+ declare function setDrawRotation(state: ImageContextState, object_rotation: number): void;
13
+ declare function setDrawScale(state: ImageContextState, object_scale_x: number, object_scale_y: number): void;
14
+
15
+ declare const transform_setDrawAnchor: typeof setDrawAnchor;
16
+ declare const transform_setDrawRotation: typeof setDrawRotation;
17
+ declare const transform_setDrawScale: typeof setDrawScale;
18
+ declare const transform_setRotation: typeof setRotation;
19
+ declare const transform_setScale: typeof setScale;
20
+ declare const transform_setTranslation: typeof setTranslation;
21
+ declare namespace transform {
22
+ export { transform_setDrawAnchor as setDrawAnchor, transform_setDrawRotation as setDrawRotation, transform_setDrawScale as setDrawScale, transform_setRotation as setRotation, transform_setScale as setScale, transform_setTranslation as setTranslation };
23
+ }
24
+
25
+ export { setDrawRotation as a, setDrawScale as b, setRotation as c, setScale as d, setTranslation as e, setDrawAnchor as s, transform as t };
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@al8b/image",
3
+ "version": "0.1.0",
4
+ "sideEffects": false,
5
+ "files": [
6
+ "dist/**/*",
7
+ "README.md",
8
+ "package.json"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsup",
12
+ "clean": "bun --bun ../../../scripts/clean-package.mjs dist",
13
+ "test": "vitest run --passWithNoTests"
14
+ },
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.mjs",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.mjs",
22
+ "require": "./dist/index.js"
23
+ }
24
+ },
25
+ "dependencies": {
26
+ "@al8b/diagnostics": "workspace:*"
27
+ },
28
+ "keywords": [
29
+ "image",
30
+ "canvas",
31
+ "graphics"
32
+ ],
33
+ "devDependencies": {
34
+ "@types/jsdom": "^27.0.0",
35
+ "@vitest/ui": "^4.0.9",
36
+ "happy-dom": "^20.0.10",
37
+ "jsdom": "^24.1.3",
38
+ "vitest": "^4.0.9"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ }
43
+ }