@lacspace/image 1.0.0 → 1.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.
- package/README.md +18 -0
- package/dist/index.cjs +116 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +47 -9
- package/dist/index.d.ts +47 -9
- package/dist/index.js +114 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/color.ts","../src/surface.ts","../src/env.ts","../src/png.ts","../src/jpeg.ts","../src/encode.ts","../src/bytes.ts","../src/fit.ts","../src/svg.ts"],"names":["fit","w","h","isNode"],"mappings":"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AA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM;AACxD,CAAA;AACA,IAAM,mBAAmB,UAAA,CAAW,EAAA,CAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AACxF,IAAM,iBAAA,GAAoB,UAAA,CAAW,EAAA,CAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAI,EAAE,CAAA;AAC5E,IAAM,mBAAmB,UAAA,CAAW,EAAA,CAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,GAAG,GAAI,CAAA;AAC3F,IAAM,oBAAoB,UAAA,CAAW,EAAA;AAAA,EACnC,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAC5G,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAC5G,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM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","file":"index.js","sourcesContent":["/**\n * Tiny, dependency-free colour parser → RGBA tuple (0..255 each).\n * Supports: #rgb, #rgba, #rrggbb, #rrggbbaa, rgb()/rgba(), and \"transparent\".\n */\n\nimport type { Color } from \"./types.js\";\n\nexport type RGBA = [number, number, number, number];\n\nconst NAMED: Record<string, RGBA> = {\n transparent: [0, 0, 0, 0],\n black: [0, 0, 0, 255],\n white: [255, 255, 255, 255],\n red: [255, 0, 0, 255],\n green: [0, 128, 0, 255],\n blue: [0, 0, 255, 255],\n};\n\nfunction clampByte(n: number): number {\n n = Math.round(n);\n return n < 0 ? 0 : n > 255 ? 255 : n;\n}\n\nexport function parseColor(input: Color): RGBA {\n const s = String(input).trim().toLowerCase();\n if (s in NAMED) return [...NAMED[s]!] as RGBA;\n\n if (s[0] === \"#\") {\n const hex = s.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n const r = parseInt(hex[0]! + hex[0]!, 16);\n const g = parseInt(hex[1]! + hex[1]!, 16);\n const b = parseInt(hex[2]! + hex[2]!, 16);\n const a = hex.length === 4 ? parseInt(hex[3]! + hex[3]!, 16) : 255;\n return [r, g, b, a];\n }\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) : 255;\n return [r, g, b, a];\n }\n }\n\n const m = s.match(/^rgba?\\(([^)]+)\\)$/);\n if (m) {\n const parts = m[1]!.split(/[,/\\s]+/).filter(Boolean);\n const r = clampByte(parseFloat(parts[0] ?? \"0\"));\n const g = clampByte(parseFloat(parts[1] ?? \"0\"));\n const b = clampByte(parseFloat(parts[2] ?? \"0\"));\n let a = 255;\n if (parts[3] != null) {\n const av = parseFloat(parts[3]);\n a = parts[3].includes(\"%\") ? clampByte((av / 100) * 255) : clampByte(av <= 1 ? av * 255 : av);\n }\n return [r, g, b, a];\n }\n\n // Unknown — fail soft to opaque black so a bad token never crashes a render.\n return [0, 0, 0, 255];\n}\n\n/** Alpha-over composite of `src` onto `dst` (both premultiplied by their own alpha here). */\nexport function blendOver(dst: RGBA, src: RGBA): RGBA {\n const sa = src[3] / 255;\n const da = dst[3] / 255;\n const outA = sa + da * (1 - sa);\n if (outA === 0) return [0, 0, 0, 0];\n const r = (src[0] * sa + dst[0] * da * (1 - sa)) / outA;\n const g = (src[1] * sa + dst[1] * da * (1 - sa)) / outA;\n const b = (src[2] * sa + dst[2] * da * (1 - sa)) / outA;\n return [clampByte(r), clampByte(g), clampByte(b), clampByte(outA * 255)];\n}\n\n/** Linear interpolation between two colours at t in 0..1. */\nexport function mix(a: RGBA, b: RGBA, t: number): RGBA {\n return [\n clampByte(a[0] + (b[0] - a[0]) * t),\n clampByte(a[1] + (b[1] - a[1]) * t),\n clampByte(a[2] + (b[2] - a[2]) * t),\n clampByte(a[3] + (b[3] - a[3]) * t),\n ];\n}\n","/**\n * Surface — a zero-dependency RGBA pixel buffer with a small, deterministic\n * drawing API (fills, gradients, patterns, image placement, resize, crop).\n * Works identically in Node and the browser; nothing here touches the DOM.\n */\n\nimport type {\n Color,\n DrawImageOptions,\n LinearGradientOptions,\n PatternOptions,\n PatternKind,\n PixelSource,\n RadialGradientOptions,\n} from \"./types.js\";\nimport { parseColor, blendOver, mix, type RGBA } from \"./color.js\";\n\nfunction sortStops(stops: { offset: number; color: Color }[]) {\n return stops\n .map((s) => ({ offset: Math.max(0, Math.min(1, s.offset)), rgba: parseColor(s.color) }))\n .sort((a, b) => a.offset - b.offset);\n}\n\nfunction sampleStops(stops: { offset: number; rgba: RGBA }[], t: number): RGBA {\n if (stops.length === 0) return [0, 0, 0, 0];\n if (t <= stops[0]!.offset) return stops[0]!.rgba;\n const last = stops[stops.length - 1]!;\n if (t >= last.offset) return last.rgba;\n for (let i = 1; i < stops.length; i++) {\n const a = stops[i - 1]!;\n const b = stops[i]!;\n if (t <= b.offset) {\n const span = b.offset - a.offset || 1;\n return mix(a.rgba, b.rgba, (t - a.offset) / span);\n }\n }\n return last.rgba;\n}\n\n/** A small mulberry32 PRNG so `noise` is deterministic across runs and platforms. */\nfunction rng(seed: number) {\n let s = seed >>> 0 || 1;\n return () => {\n s |= 0;\n s = (s + 0x6d2b79f5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport class Surface implements PixelSource {\n readonly width: number;\n readonly height: number;\n readonly data: Uint8ClampedArray;\n\n constructor(width: number, height: number, data?: Uint8ClampedArray) {\n this.width = Math.max(1, Math.floor(width));\n this.height = Math.max(1, Math.floor(height));\n this.data = data ?? new Uint8ClampedArray(this.width * this.height * 4);\n }\n\n /** Wrap an existing RGBA source (e.g. a Canvas ImageData) without copying. */\n static from(src: PixelSource): Surface {\n return new Surface(src.width, src.height, src.data);\n }\n\n private idx(x: number, y: number) {\n return (y * this.width + x) * 4;\n }\n\n private set(x: number, y: number, c: RGBA) {\n const i = this.idx(x, y);\n const d = this.data;\n if (c[3] === 255) {\n d[i] = c[0];\n d[i + 1] = c[1];\n d[i + 2] = c[2];\n d[i + 3] = 255;\n } else {\n const dst: RGBA = [d[i]!, d[i + 1]!, d[i + 2]!, d[i + 3]!];\n const out = blendOver(dst, c);\n d[i] = out[0];\n d[i + 1] = out[1];\n d[i + 2] = out[2];\n d[i + 3] = out[3];\n }\n }\n\n /** Paint the whole surface a solid colour (replaces, does not blend). */\n fill(color: Color): this {\n const [r, g, b, a] = parseColor(color);\n const d = this.data;\n for (let i = 0; i < d.length; i += 4) {\n d[i] = r;\n d[i + 1] = g;\n d[i + 2] = b;\n d[i + 3] = a;\n }\n return this;\n }\n\n /** Blend a rectangle of colour over the surface. */\n rect(x: number, y: number, w: number, h: number, color: Color): this {\n const c = parseColor(color);\n const x0 = Math.max(0, Math.floor(x));\n const y0 = Math.max(0, Math.floor(y));\n const x1 = Math.min(this.width, Math.floor(x + w));\n const y1 = Math.min(this.height, Math.floor(y + h));\n for (let py = y0; py < y1; py++) for (let px = x0; px < x1; px++) this.set(px, py, c);\n return this;\n }\n\n linearGradient(opts: LinearGradientOptions): this {\n const stops = sortStops(opts.stops);\n const angle = ((opts.angle ?? 0) * Math.PI) / 180;\n const dx = Math.cos(angle);\n const dy = Math.sin(angle);\n const w = this.width;\n const h = this.height;\n // Projected extent of the box corners onto the axis, to normalise t to 0..1.\n const projs = [0, w * dx, h * dy, w * dx + h * dy];\n const min = Math.min(...projs);\n const span = Math.max(...projs) - min || 1;\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const t = ((px + 0.5) * dx + (py + 0.5) * dy - min) / span;\n this.set(px, py, sampleStops(stops, t));\n }\n }\n return this;\n }\n\n radialGradient(opts: RadialGradientOptions): this {\n const stops = sortStops(opts.stops);\n const w = this.width;\n const h = this.height;\n const cx = (opts.cx ?? 0.5) * w;\n const cy = (opts.cy ?? 0.5) * h;\n const radius = (opts.radius ?? 0.75) * Math.max(w, h);\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const dx = px + 0.5 - cx;\n const dy = py + 0.5 - cy;\n const t = Math.sqrt(dx * dx + dy * dy) / (radius || 1);\n this.set(px, py, sampleStops(stops, t));\n }\n }\n return this;\n }\n\n pattern(kind: PatternKind, opts: PatternOptions = {}): this {\n const size = Math.max(1, opts.size ?? 24);\n const color = parseColor(opts.color ?? \"rgba(255,255,255,0.13)\");\n const w = this.width;\n const h = this.height;\n if (kind === \"noise\") {\n const rand = rng(opts.seed ?? 1);\n const strength = opts.strength ?? 0.06;\n const d = this.data;\n for (let i = 0; i < d.length; i += 4) {\n const n = (rand() - 0.5) * 2 * strength * 255;\n d[i] = d[i]! + n;\n d[i + 1] = d[i + 1]! + n;\n d[i + 2] = d[i + 2]! + n;\n }\n return this;\n }\n if (kind === \"dots\") {\n const r = Math.max(1, size / 6);\n for (let cy = size / 2; cy < h; cy += size)\n for (let cx = size / 2; cx < w; cx += size)\n for (let py = -r; py <= r; py++)\n for (let px = -r; px <= r; px++)\n if (px * px + py * py <= r * r) this.set(Math.round(cx + px), Math.round(cy + py), color);\n return this;\n }\n if (kind === \"grid\") {\n for (let x = 0; x < w; x += size) this.rect(x, 0, 1, h, opts.color ?? \"rgba(255,255,255,0.13)\");\n for (let y = 0; y < h; y += size) this.rect(0, y, w, 1, opts.color ?? \"rgba(255,255,255,0.13)\");\n return this;\n }\n if (kind === \"stripes\") {\n const angle = opts.angle ?? 45;\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n let coord: number;\n if (angle === 0) coord = px;\n else if (angle === 90) coord = py;\n else coord = px + py;\n if (Math.floor(coord / size) % 2 === 0) this.set(px, py, color);\n }\n }\n return this;\n }\n // checker\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const on = (Math.floor(px / size) + Math.floor(py / size)) % 2 === 0;\n if (on) this.set(px, py, color);\n }\n }\n return this;\n }\n\n /** Bilinear sample of a source at fractional (u,v) in source pixel space. */\n private static sampleBilinear(src: PixelSource, u: number, v: number): RGBA {\n const x = Math.max(0, Math.min(src.width - 1, u));\n const y = Math.max(0, Math.min(src.height - 1, v));\n const x0 = Math.floor(x);\n const y0 = Math.floor(y);\n const x1 = Math.min(src.width - 1, x0 + 1);\n const y1 = Math.min(src.height - 1, y0 + 1);\n const fx = x - x0;\n const fy = y - y0;\n const at = (px: number, py: number): RGBA => {\n const i = (py * src.width + px) * 4;\n return [src.data[i]!, src.data[i + 1]!, src.data[i + 2]!, src.data[i + 3]!];\n };\n const top = mix(at(x0, y0), at(x1, y0), fx);\n const bot = mix(at(x0, y1), at(x1, y1), fx);\n return mix(top, bot, fy);\n }\n\n /** Place another image/surface onto this one, with fit + resampling. */\n drawImage(src: PixelSource, o: DrawImageOptions = {}): this {\n const dx = o.x ?? 0;\n const dy = o.y ?? 0;\n const dw = o.width ?? src.width;\n const dh = o.height ?? src.height;\n const fit = o.fit ?? \"cover\";\n const nearest = o.resample === \"nearest\";\n\n // Map a destination pixel back to a source coordinate honouring `fit`.\n let scaleX = src.width / dw;\n let scaleY = src.height / dh;\n let offU = 0;\n let offV = 0;\n if (fit === \"cover\" || fit === \"contain\") {\n const s = fit === \"cover\" ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n scaleX = scaleY = s;\n offU = (src.width - dw * s) / 2;\n offV = (src.height - dh * s) / 2;\n }\n const x0 = Math.max(0, Math.floor(dx));\n const y0 = Math.max(0, Math.floor(dy));\n const x1 = Math.min(this.width, Math.floor(dx + dw));\n const y1 = Math.min(this.height, Math.floor(dy + dh));\n for (let py = y0; py < y1; py++) {\n for (let px = x0; px < x1; px++) {\n const u = (px - dx) * scaleX + offU;\n const v = (py - dy) * scaleY + offV;\n if (fit === \"contain\" && (u < 0 || v < 0 || u >= src.width || v >= src.height)) continue;\n const c = nearest\n ? (() => {\n const i = (Math.min(src.height - 1, Math.max(0, Math.round(v))) * src.width +\n Math.min(src.width - 1, Math.max(0, Math.round(u)))) * 4;\n return [src.data[i]!, src.data[i + 1]!, src.data[i + 2]!, src.data[i + 3]!] as RGBA;\n })()\n : Surface.sampleBilinear(src, u, v);\n this.set(px, py, c);\n }\n }\n return this;\n }\n\n /** Return a NEW surface resampled to the given dimensions (bilinear). */\n resize(width: number, height: number): Surface {\n const out = new Surface(width, height);\n const sx = this.width / out.width;\n const sy = this.height / out.height;\n for (let py = 0; py < out.height; py++) {\n for (let px = 0; px < out.width; px++) {\n const c = Surface.sampleBilinear(this, (px + 0.5) * sx - 0.5, (py + 0.5) * sy - 0.5);\n const i = (py * out.width + px) * 4;\n out.data[i] = c[0];\n out.data[i + 1] = c[1];\n out.data[i + 2] = c[2];\n out.data[i + 3] = c[3];\n }\n }\n return out;\n }\n\n /** Return a NEW surface cropped to the given rectangle. */\n crop(x: number, y: number, w: number, h: number): Surface {\n const out = new Surface(w, h);\n for (let py = 0; py < out.height; py++) {\n for (let px = 0; px < out.width; px++) {\n const srcX = Math.min(this.width - 1, Math.max(0, x + px));\n const srcY = Math.min(this.height - 1, Math.max(0, y + py));\n const si = (srcY * this.width + srcX) * 4;\n const di = (py * out.width + px) * 4;\n out.data[di] = this.data[si]!;\n out.data[di + 1] = this.data[si + 1]!;\n out.data[di + 2] = this.data[si + 2]!;\n out.data[di + 3] = this.data[si + 3]!;\n }\n }\n return out;\n }\n\n /** Flatten transparency onto a solid background, returning a NEW opaque surface. */\n flatten(background: Color = \"#ffffff\"): Surface {\n const bg = parseColor(background);\n const out = new Surface(this.width, this.height);\n for (let i = 0; i < this.data.length; i += 4) {\n const src: RGBA = [this.data[i]!, this.data[i + 1]!, this.data[i + 2]!, this.data[i + 3]!];\n const c = blendOver([bg[0], bg[1], bg[2], 255], src);\n out.data[i] = c[0];\n out.data[i + 1] = c[1];\n out.data[i + 2] = c[2];\n out.data[i + 3] = 255;\n }\n return out;\n }\n\n /**\n * Return a NEW surface with each channel reduced to `bits` bits (2..8).\n * Fewer distinct values compress far better as lossless PNG — the main lever\n * for hitting a PNG size budget on noisy/photographic content.\n */\n posterize(bits: number): Surface {\n const b = Math.max(1, Math.min(8, Math.floor(bits)));\n if (b >= 8) return this.clone();\n const levels = (1 << b) - 1;\n const out = new Surface(this.width, this.height, new Uint8ClampedArray(this.data));\n const d = out.data;\n for (let i = 0; i < d.length; i += 4) {\n d[i] = Math.round((Math.round((d[i]! / 255) * levels) / levels) * 255);\n d[i + 1] = Math.round((Math.round((d[i + 1]! / 255) * levels) / levels) * 255);\n d[i + 2] = Math.round((Math.round((d[i + 2]! / 255) * levels) / levels) * 255);\n // alpha left intact\n }\n return out;\n }\n\n clone(): Surface {\n return new Surface(this.width, this.height, new Uint8ClampedArray(this.data));\n }\n}\n\n/** Convenience: a new surface pre-filled with a linear gradient. */\nexport function gradient(width: number, height: number, opts: LinearGradientOptions): Surface {\n return new Surface(width, height).linearGradient(opts);\n}\n\n/** Convenience: a new surface pre-filled with a radial gradient. */\nexport function radial(width: number, height: number, opts: RadialGradientOptions): Surface {\n return new Surface(width, height).radialGradient(opts);\n}\n\n/** Convenience: a solid surface with a pattern painted over it. */\nexport function pattern(\n width: number,\n height: number,\n base: Color,\n kind: PatternKind,\n opts?: PatternOptions,\n): Surface {\n return new Surface(width, height).fill(base).pattern(kind, opts);\n}\n","/**\n * Isomorphic canvas layer. When a real Canvas is available (browser main thread,\n * a Worker with OffscreenCanvas), we use it to encode PNG/JPEG/WebP with the\n * platform's own well-tuned encoders. In Node there is no canvas, so callers\n * fall back to the pure-JS PNG/JPEG encoders in this package.\n */\n\nimport type { ImageFormat, PixelSource } from \"./types.js\";\n\ntype AnyCanvas = {\n width: number;\n height: number;\n getContext(id: \"2d\"): CanvasRenderingContext2D | null;\n toBlob?: (cb: (b: Blob | null) => void, type?: string, quality?: number) => void;\n convertToBlob?: (opts?: { type?: string; quality?: number }) => Promise<Blob>;\n};\n\n/** Does this runtime expose a usable 2D canvas we can encode from? */\nexport function hasCanvas(): boolean {\n if (typeof OffscreenCanvas !== \"undefined\") return true;\n return typeof document !== \"undefined\" && typeof document.createElement === \"function\";\n}\n\nfunction makeCanvas(width: number, height: number): AnyCanvas {\n if (typeof OffscreenCanvas !== \"undefined\") return new OffscreenCanvas(width, height) as unknown as AnyCanvas;\n const el = document.createElement(\"canvas\");\n el.width = width;\n el.height = height;\n return el as unknown as AnyCanvas;\n}\n\nconst MIME: Record<ImageFormat, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n};\n\nasync function canvasToBytes(canvas: AnyCanvas, format: ImageFormat, quality?: number): Promise<Uint8Array> {\n const type = MIME[format];\n const q = quality != null ? Math.max(0, Math.min(1, quality / 100)) : undefined;\n let blob: Blob | null;\n if (canvas.convertToBlob) {\n blob = await canvas.convertToBlob({ type, quality: q });\n } else if (canvas.toBlob) {\n blob = await new Promise<Blob | null>((res) => canvas.toBlob!((b) => res(b), type, q));\n } else {\n throw new Error(\"Canvas has no toBlob/convertToBlob\");\n }\n if (!blob) throw new Error(`Canvas failed to encode ${format}`);\n return new Uint8Array(await blob.arrayBuffer());\n}\n\n/** Encode a pixel source via the platform canvas. Throws if no canvas here. */\nexport async function encodeViaCanvas(source: PixelSource, format: ImageFormat, quality?: number): Promise<Uint8Array> {\n if (!hasCanvas()) throw new Error(\"No canvas available in this runtime\");\n const canvas = makeCanvas(source.width, source.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Could not get a 2D context\");\n const img = new ImageData(new Uint8ClampedArray(source.data), source.width, source.height);\n ctx.putImageData(img, 0, 0);\n return canvasToBytes(canvas, format, quality);\n}\n\n/** True where the platform can actually emit this format via canvas. */\nexport async function canvasSupports(format: ImageFormat): Promise<boolean> {\n if (!hasCanvas()) return false;\n try {\n const test = makeCanvas(2, 2);\n const bytes = await canvasToBytes(test, format, 80);\n // Some browsers silently fall back to PNG for unsupported types.\n if (format === \"webp\") return bytes[0] !== 0x89; // not a PNG signature\n return bytes.length > 0;\n } catch {\n return false;\n }\n}\n","/**\n * Minimal, dependency-free PNG encoder (8-bit RGBA, non-interlaced).\n * Compression: `node:zlib` when running in Node (kept external in browser\n * bundles), otherwise a valid *stored* (uncompressed) DEFLATE stream — so the\n * output is always a spec-correct PNG everywhere, just larger without zlib.\n * In the browser the orchestrator prefers Canvas, which compresses properly.\n */\n\nimport type { PixelSource } from \"./types.js\";\n\nconst SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst CRC_TABLE = (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) c = CRC_TABLE[(c ^ bytes[i]!) & 0xff]! ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n\nfunction adler32(bytes: Uint8Array): number {\n let a = 1;\n let b = 0;\n const MOD = 65521;\n for (let i = 0; i < bytes.length; i++) {\n a = (a + bytes[i]!) % MOD;\n b = (b + a) % MOD;\n }\n return ((b << 16) | a) >>> 0;\n}\n\nfunction u32(n: number): Uint8Array {\n return new Uint8Array([(n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255]);\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([type.charCodeAt(0), type.charCodeAt(1), type.charCodeAt(2), type.charCodeAt(3)]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n out.set(u32(data.length), 0);\n out.set(body, 4);\n out.set(u32(crc32(body)), 4 + body.length);\n return out;\n}\n\n/** A valid zlib stream using only *stored* DEFLATE blocks (no compression). */\nfunction storedZlib(data: Uint8Array): Uint8Array {\n const MAX = 65535;\n const blocks: Uint8Array[] = [];\n let offset = 0;\n if (data.length === 0) {\n blocks.push(new Uint8Array([1, 0, 0, 0xff, 0xff]));\n }\n while (offset < data.length) {\n const len = Math.min(MAX, data.length - offset);\n const final = offset + len >= data.length ? 1 : 0;\n const header = new Uint8Array(5);\n header[0] = final;\n header[1] = len & 255;\n header[2] = (len >>> 8) & 255;\n header[3] = ~len & 255;\n header[4] = (~len >>> 8) & 255;\n blocks.push(header, data.subarray(offset, offset + len));\n offset += len;\n }\n const bodyLen = blocks.reduce((n, b) => n + b.length, 0);\n const out = new Uint8Array(2 + bodyLen + 4);\n out[0] = 0x78; // CMF\n out[1] = 0x01; // FLG\n let p = 2;\n for (const b of blocks) {\n out.set(b, p);\n p += b.length;\n }\n out.set(u32(adler32(data)), p);\n return out;\n}\n\nfunction isNode(): boolean {\n return typeof process !== \"undefined\" && !!(process as { versions?: { node?: string } }).versions?.node;\n}\n\nasync function deflate(data: Uint8Array, level: number): Promise<Uint8Array> {\n if (isNode()) {\n try {\n const z = await import(/* @vite-ignore */ \"node:zlib\");\n return new Uint8Array((z.deflateSync as (b: Uint8Array, o?: object) => Buffer)(data, { level }));\n } catch {\n /* fall through to stored */\n }\n }\n return storedZlib(data);\n}\n\n/** Prepend a \"None\" filter byte (0) to every scanline. */\nfunction filterScanlines(src: PixelSource): Uint8Array {\n const { width, height, data } = src;\n const rowBytes = width * 4;\n const out = new Uint8Array(height * (rowBytes + 1));\n for (let y = 0; y < height; y++) {\n const o = y * (rowBytes + 1);\n out[o] = 0;\n out.set(data.subarray(y * rowBytes, y * rowBytes + rowBytes), o + 1);\n }\n return out;\n}\n\nfunction assemble(source: PixelSource, idat: Uint8Array): Uint8Array {\n const ihdrData = new Uint8Array(13);\n ihdrData.set(u32(source.width), 0);\n ihdrData.set(u32(source.height), 4);\n ihdrData[8] = 8; // bit depth\n ihdrData[9] = 6; // colour type: RGBA\n ihdrData[10] = 0; // compression\n ihdrData[11] = 0; // filter\n ihdrData[12] = 0; // interlace\n const ihdr = chunk(\"IHDR\", ihdrData);\n const idatChunk = chunk(\"IDAT\", idat);\n const iend = chunk(\"IEND\", new Uint8Array(0));\n const out = new Uint8Array(SIGNATURE.length + ihdr.length + idatChunk.length + iend.length);\n let p = 0;\n for (const part of [SIGNATURE, ihdr, idatChunk, iend]) {\n out.set(part, p);\n p += part.length;\n }\n return out;\n}\n\n/** Encode an RGBA source to PNG bytes. `level` 0..9 (zlib), default 9. */\nexport async function encodePng(source: PixelSource, level = 9): Promise<Uint8Array> {\n const idat = await deflate(filterScanlines(source), level);\n return assemble(source, idat);\n}\n\n/** Synchronous PNG using the pure stored-deflate path (valid, uncompressed). */\nexport function encodePngSync(source: PixelSource): Uint8Array {\n return assemble(source, storedZlib(filterScanlines(source)));\n}\n","/**\n * Pure-JS baseline JPEG encoder (4:4:4, no external deps).\n * Adapted from the classic public-domain JPEG encoder (AAN forward DCT +\n * standard Huffman tables). Runs identically in Node and the browser and is\n * the engine the size-budget fitter tunes via the `quality` knob.\n */\n\nimport type { PixelSource } from \"./types.js\";\n\nconst ZIGZAG = Int32Array.of(\n 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44,\n 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49,\n 57, 58, 62, 63,\n);\n\nconst STD_DC_LUM_CODES = Int32Array.of(0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);\nconst STD_DC_LUM_VALUES = Int32Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\nconst STD_AC_LUM_CODES = Int32Array.of(0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d);\nconst STD_AC_LUM_VALUES = Int32Array.of(\n 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14,\n 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09,\n 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,\n 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65,\n 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,\n 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,\n 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca,\n 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,\n 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,\n);\nconst STD_DC_CHR_CODES = Int32Array.of(0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0);\nconst STD_DC_CHR_VALUES = Int32Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\nconst STD_AC_CHR_CODES = Int32Array.of(0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77);\nconst STD_AC_CHR_VALUES = Int32Array.of(\n 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32,\n 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16,\n 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39,\n 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64,\n 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86,\n 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,\n 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,\n 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,\n);\n\nconst YQT = Int32Array.of(\n 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51,\n 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101,\n 72, 92, 95, 98, 112, 100, 103, 99,\n);\nconst UVQT = Int32Array.of(\n 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99,\n);\nconst AASF = Float64Array.of(1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.5411961, 0.275899379);\n\ninterface HuffTable {\n code: Int32Array;\n len: Int32Array;\n}\n\nfunction computeHuffTable(nrcodes: Int32Array, values: Int32Array): HuffTable {\n const code = new Int32Array(256);\n const len = new Int32Array(256);\n let codeValue = 0;\n let pos = 0;\n for (let k = 1; k <= 16; k++) {\n for (let j = 1; j <= nrcodes[k]!; j++) {\n const v = values[pos]!;\n code[v] = codeValue;\n len[v] = k;\n pos++;\n codeValue++;\n }\n codeValue *= 2;\n }\n return { code, len };\n}\n\nexport function encodeJpeg(source: PixelSource, quality = 82): Uint8Array {\n const q = Math.max(1, Math.min(100, Math.round(quality)));\n const sf = q < 50 ? Math.floor(5000 / q) : 200 - q * 2;\n\n const YTable = new Int32Array(64);\n const UVTable = new Int32Array(64);\n const fdtblY = new Float64Array(64);\n const fdtblUV = new Float64Array(64);\n\n for (let i = 0; i < 64; i++) {\n YTable[ZIGZAG[i]!] = Math.min(255, Math.max(1, Math.floor((YQT[i]! * sf + 50) / 100)));\n UVTable[ZIGZAG[i]!] = Math.min(255, Math.max(1, Math.floor((UVQT[i]! * sf + 50) / 100)));\n }\n {\n let i = 0;\n for (let row = 0; row < 8; row++) {\n for (let col = 0; col < 8; col++) {\n fdtblY[i] = 1.0 / (YTable[ZIGZAG[i]!]! * AASF[row]! * AASF[col]! * 8.0);\n fdtblUV[i] = 1.0 / (UVTable[ZIGZAG[i]!]! * AASF[row]! * AASF[col]! * 8.0);\n i++;\n }\n }\n }\n\n const YDC = computeHuffTable(STD_DC_LUM_CODES, STD_DC_LUM_VALUES);\n const YAC = computeHuffTable(STD_AC_LUM_CODES, STD_AC_LUM_VALUES);\n const UVDC = computeHuffTable(STD_DC_CHR_CODES, STD_DC_CHR_VALUES);\n const UVAC = computeHuffTable(STD_AC_CHR_CODES, STD_AC_CHR_VALUES);\n\n // Category + bit-code tables for value encoding (index = 32767 + value).\n const category = new Int32Array(65536);\n const bitCode = new Int32Array(65536);\n const bitLen = new Int32Array(65536);\n {\n let nrlower = 1;\n let nrupper = 2;\n for (let cat = 1; cat <= 15; cat++) {\n for (let nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitLen[32767 + nr] = cat;\n bitCode[32767 + nr] = nr;\n }\n for (let nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitLen[32767 + nrneg] = cat;\n bitCode[32767 + nrneg] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n const out: number[] = [];\n let byteNew = 0;\n let bytePos = 7;\n const writeByte = (v: number) => out.push(v & 0xff);\n const writeWord = (v: number) => {\n out.push((v >>> 8) & 0xff);\n out.push(v & 0xff);\n };\n const writeBits = (value: number, length: number) => {\n let posval = length - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) byteNew |= 1 << bytePos;\n posval--;\n bytePos--;\n if (bytePos < 0) {\n if (byteNew === 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(byteNew);\n }\n bytePos = 7;\n byteNew = 0;\n }\n }\n };\n\n const data = new Float64Array(64);\n const outDU = new Int32Array(64);\n const DU = new Int32Array(64);\n\n const fDCTQuant = (fdtbl: Float64Array): Int32Array => {\n let off = 0;\n for (let i = 0; i < 8; i++) {\n const d0 = data[off]!, d1 = data[off + 1]!, d2 = data[off + 2]!, d3 = data[off + 3]!;\n const d4 = data[off + 4]!, d5 = data[off + 5]!, d6 = data[off + 6]!, d7 = data[off + 7]!;\n const t0 = d0 + d7, t7 = d0 - d7, t1 = d1 + d6, t6 = d1 - d6;\n const t2 = d2 + d5, t5 = d2 - d5, t3 = d3 + d4, t4 = d3 - d4;\n let t10 = t0 + t3;\n const t13 = t0 - t3;\n let t11 = t1 + t2;\n const t12 = t1 - t2;\n data[off] = t10 + t11;\n data[off + 4] = t10 - t11;\n const z1 = (t12 + t13) * 0.707106781;\n data[off + 2] = t13 + z1;\n data[off + 6] = t13 - z1;\n t10 = t4 + t5;\n t11 = t5 + t6;\n const t12b = t6 + t7;\n const z5 = (t10 - t12b) * 0.382683433;\n const z2 = 0.5411961 * t10 + z5;\n const z4 = 1.306562965 * t12b + z5;\n const z3 = t11 * 0.707106781;\n const z11 = t7 + z3;\n const z13 = t7 - z3;\n data[off + 5] = z13 + z2;\n data[off + 3] = z13 - z2;\n data[off + 1] = z11 + z4;\n data[off + 7] = z11 - z4;\n off += 8;\n }\n off = 0;\n for (let i = 0; i < 8; i++) {\n const d0 = data[off]!, d1 = data[off + 8]!, d2 = data[off + 16]!, d3 = data[off + 24]!;\n const d4 = data[off + 32]!, d5 = data[off + 40]!, d6 = data[off + 48]!, d7 = data[off + 56]!;\n const t0 = d0 + d7, t7 = d0 - d7, t1 = d1 + d6, t6 = d1 - d6;\n const t2 = d2 + d5, t5 = d2 - d5, t3 = d3 + d4, t4 = d3 - d4;\n let t10 = t0 + t3;\n const t13 = t0 - t3;\n let t11 = t1 + t2;\n const t12 = t1 - t2;\n data[off] = t10 + t11;\n data[off + 32] = t10 - t11;\n const z1 = (t12 + t13) * 0.707106781;\n data[off + 16] = t13 + z1;\n data[off + 48] = t13 - z1;\n t10 = t4 + t5;\n t11 = t5 + t6;\n const t12b = t6 + t7;\n const z5 = (t10 - t12b) * 0.382683433;\n const z2 = 0.5411961 * t10 + z5;\n const z4 = 1.306562965 * t12b + z5;\n const z3 = t11 * 0.707106781;\n const z11 = t7 + z3;\n const z13 = t7 - z3;\n data[off + 40] = z13 + z2;\n data[off + 24] = z13 - z2;\n data[off + 8] = z11 + z4;\n data[off + 56] = z11 - z4;\n off++;\n }\n for (let i = 0; i < 64; i++) {\n const v = data[i]! * fdtbl[i]!;\n outDU[i] = v > 0 ? (v + 0.5) | 0 : (v - 0.5) | 0;\n }\n return outDU;\n };\n\n const processDU = (fdtbl: Float64Array, dc: number, HTDC: HuffTable, HTAC: HuffTable): number => {\n const duDct = fDCTQuant(fdtbl);\n for (let j = 0; j < 64; j++) DU[ZIGZAG[j]!] = duDct[j]!;\n const diff = DU[0]! - dc;\n const newDc = DU[0]!;\n if (diff === 0) {\n writeBits(HTDC.code[0]!, HTDC.len[0]!);\n } else {\n const pos = 32767 + diff;\n writeBits(HTDC.code[category[pos]!]!, HTDC.len[category[pos]!]!);\n writeBits(bitCode[pos]!, bitLen[pos]!);\n }\n let end0 = 63;\n while (end0 > 0 && DU[end0] === 0) end0--;\n if (end0 === 0) {\n writeBits(HTAC.code[0]!, HTAC.len[0]!); // EOB\n return newDc;\n }\n let i = 1;\n while (i <= end0) {\n const start = i;\n while (DU[i] === 0 && i <= end0) i++;\n let nrzeroes = i - start;\n if (nrzeroes >= 16) {\n const lng = nrzeroes >> 4;\n for (let m = 1; m <= lng; m++) writeBits(HTAC.code[0xf0]!, HTAC.len[0xf0]!);\n nrzeroes &= 0xf;\n }\n const pos = 32767 + DU[i]!;\n const sym = (nrzeroes << 4) + category[pos]!;\n writeBits(HTAC.code[sym]!, HTAC.len[sym]!);\n writeBits(bitCode[pos]!, bitLen[pos]!);\n i++;\n }\n if (end0 !== 63) writeBits(HTAC.code[0]!, HTAC.len[0]!); // EOB\n return newDc;\n };\n\n const { width, height, data: px } = source;\n\n // ---- Headers ----\n writeWord(0xffd8); // SOI\n // APP0 / JFIF\n writeWord(0xffe0);\n writeWord(16);\n for (const c of [0x4a, 0x46, 0x49, 0x46, 0]) writeByte(c); // \"JFIF\\0\"\n writeByte(1);\n writeByte(1);\n writeByte(0);\n writeWord(1);\n writeWord(1);\n writeByte(0);\n writeByte(0);\n // DQT\n writeWord(0xffdb);\n writeWord(132);\n writeByte(0);\n for (let i = 0; i < 64; i++) writeByte(YTable[i]!);\n writeByte(1);\n for (let i = 0; i < 64; i++) writeByte(UVTable[i]!);\n // SOF0\n writeWord(0xffc0);\n writeWord(17);\n writeByte(8);\n writeWord(height);\n writeWord(width);\n writeByte(3);\n writeByte(1);\n writeByte(0x11);\n writeByte(0);\n writeByte(2);\n writeByte(0x11);\n writeByte(1);\n writeByte(3);\n writeByte(0x11);\n writeByte(1);\n // DHT\n writeWord(0xffc4);\n writeWord(0x01a2);\n const writeHuffSpec = (cls: number, codes: Int32Array, values: Int32Array) => {\n writeByte(cls);\n for (let i = 1; i <= 16; i++) writeByte(codes[i]!);\n for (let i = 0; i < values.length; i++) writeByte(values[i]!);\n };\n writeHuffSpec(0x00, STD_DC_LUM_CODES, STD_DC_LUM_VALUES);\n writeHuffSpec(0x10, STD_AC_LUM_CODES, STD_AC_LUM_VALUES);\n writeHuffSpec(0x01, STD_DC_CHR_CODES, STD_DC_CHR_VALUES);\n writeHuffSpec(0x11, STD_AC_CHR_CODES, STD_AC_CHR_VALUES);\n // SOS\n writeWord(0xffda);\n writeWord(12);\n writeByte(3);\n writeByte(1);\n writeByte(0);\n writeByte(2);\n writeByte(0x11);\n writeByte(3);\n writeByte(0x11);\n writeByte(0);\n writeByte(0x3f);\n writeByte(0);\n\n // ---- Entropy-coded scan (4:4:4) ----\n let dcY = 0;\n let dcU = 0;\n let dcV = 0;\n byteNew = 0;\n bytePos = 7;\n const clampX = (x: number) => (x < 0 ? 0 : x >= width ? width - 1 : x);\n const clampY = (y: number) => (y < 0 ? 0 : y >= height ? height - 1 : y);\n\n for (let by = 0; by < height; by += 8) {\n for (let bx = 0; bx < width; bx += 8) {\n // Y\n let k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = 0.299 * R + 0.587 * G + 0.114 * B - 128;\n }\n }\n dcY = processDU(fdtblY, dcY, YDC, YAC);\n // U\n k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = -0.16874 * R - 0.33126 * G + 0.5 * B;\n }\n }\n dcU = processDU(fdtblUV, dcU, UVDC, UVAC);\n // V\n k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = 0.5 * R - 0.41869 * G - 0.08131 * B;\n }\n }\n dcV = processDU(fdtblUV, dcV, UVDC, UVAC);\n }\n }\n\n // Flush remaining bits (pad with 1s) then EOI.\n if (bytePos !== 7) writeBits(0x7f, 7);\n writeWord(0xffd9);\n\n return Uint8Array.from(out);\n}\n","/**\n * Unified, isomorphic encode(): pick the best available encoder for the format\n * and runtime. Browser/Worker → native Canvas (all formats). Node → pure-JS PNG\n * (zlib) and JPEG; WebP needs a Canvas runtime.\n */\n\nimport { hasCanvas, encodeViaCanvas } from \"./env.js\";\nimport { encodePng } from \"./png.js\";\nimport { encodeJpeg } from \"./jpeg.js\";\nimport { Surface } from \"./surface.js\";\nimport type { EncodeOptions, EncodeResult, PixelSource } from \"./types.js\";\n\nfunction hasAlpha(src: PixelSource): boolean {\n const d = src.data;\n for (let i = 3; i < d.length; i += 4) if (d[i]! < 255) return true;\n return false;\n}\n\n/** Encode an RGBA source to the requested format. */\nexport async function encode(source: PixelSource, opts: EncodeOptions): Promise<EncodeResult> {\n const format = opts.format;\n const quality = opts.quality ?? 82;\n let bytes: Uint8Array;\n\n if (format === \"jpeg\") {\n const flat = hasAlpha(source) ? Surface.from(source).flatten(opts.background ?? \"#ffffff\") : source;\n if (hasCanvas()) {\n try {\n bytes = await encodeViaCanvas(flat, \"jpeg\", quality);\n } catch {\n bytes = encodeJpeg(flat, quality);\n }\n } else {\n bytes = encodeJpeg(flat, quality);\n }\n } else if (format === \"png\") {\n if (hasCanvas()) {\n try {\n bytes = await encodeViaCanvas(source, \"png\");\n } catch {\n bytes = await encodePng(source);\n }\n } else {\n bytes = await encodePng(source);\n }\n } else if (format === \"webp\") {\n if (!hasCanvas()) {\n throw new Error(\n \"WebP encoding needs a Canvas runtime (browser or a Worker with OffscreenCanvas). \" +\n \"In Node, export png or jpeg instead.\",\n );\n }\n bytes = await encodeViaCanvas(source, \"webp\", quality);\n } else {\n throw new Error(`Unsupported format: ${String(format)}`);\n }\n\n return {\n bytes,\n format,\n width: source.width,\n height: source.height,\n quality: format === \"png\" ? undefined : quality,\n size: bytes.length,\n };\n}\n","/**\n * Human file-size parsing and formatting. Binary units (1 KB = 1024 bytes) to\n * match what operating systems and upload limits usually report.\n */\n\nconst UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n k: 1024,\n kib: 1024,\n mb: 1024 * 1024,\n m: 1024 * 1024,\n mib: 1024 * 1024,\n gb: 1024 * 1024 * 1024,\n g: 1024 * 1024 * 1024,\n gib: 1024 * 1024 * 1024,\n};\n\n/** Parse \"200kb\", \"1.5 MB\", \"500\", 4096 → bytes. Throws on nonsense. */\nexport function parseSize(input: string | number): number {\n if (typeof input === \"number\") {\n if (!Number.isFinite(input) || input <= 0) throw new Error(`Invalid size: ${input}`);\n return Math.floor(input);\n }\n const m = String(input).trim().toLowerCase().match(/^([0-9]*\\.?[0-9]+)\\s*([a-z]*)$/);\n if (!m) throw new Error(`Cannot parse size: \"${input}\"`);\n const value = parseFloat(m[1]!);\n const unit = m[2] || \"b\";\n const mult = UNITS[unit];\n if (mult == null) throw new Error(`Unknown size unit: \"${unit}\"`);\n return Math.floor(value * mult);\n}\n\n/** Format a byte count as a short human string, e.g. 1536 → \"1.5 KB\". */\nexport function formatBytes(bytes: number, decimals = 1): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let n = bytes / 1024;\n let u = 0;\n while (n >= 1024 && u < units.length - 1) {\n n /= 1024;\n u++;\n }\n return `${n.toFixed(decimals).replace(/\\.0$/, \"\")} ${units[u]}`;\n}\n","/**\n * fit() — encode an image to land at or under a file-size budget.\n *\n * Lossy formats (jpeg/webp): binary-search the quality knob for the highest\n * quality that fits; if even the floor is too big, progressively downscale.\n * Lossless png: quality can't move bytes, so we downscale toward the budget.\n *\n * It is a best-effort ceiling: the result is the closest fit ≤ budget we can\n * reach within the quality/scale bounds (never padded up to the budget).\n */\n\nimport { encode } from \"./encode.js\";\nimport { parseSize } from \"./bytes.js\";\nimport { Surface } from \"./surface.js\";\nimport type { EncodeResult, FitOptions, PixelSource } from \"./types.js\";\n\nfunction toSurface(src: PixelSource): Surface {\n return src instanceof Surface ? src : Surface.from(src);\n}\n\nexport async function fit(source: PixelSource, opts: FitOptions): Promise<EncodeResult> {\n const maxBytes = opts.maxBytes ?? (opts.maxSize != null ? parseSize(opts.maxSize) : undefined);\n if (!maxBytes || maxBytes <= 0) throw new Error(\"fit() needs a positive `maxBytes` or `maxSize`.\");\n\n const { format } = opts;\n const minQuality = opts.minQuality ?? 30;\n const maxQuality = opts.maxQuality ?? 92;\n const allowResize = opts.allowResize ?? true;\n const minScale = opts.minScale ?? 0.35;\n const background = opts.background;\n const base = toSurface(source);\n\n // --- Lossless PNG: combine downscale + colour quantization (posterize) ---\n if (format === \"png\") {\n let best = await encode(base, { format, background });\n if (best.size <= maxBytes) return best;\n if (!allowResize) return best;\n const scales = [1, 0.85, 0.7, 0.55, minScale];\n const bitsSteps = [8, 6, 5, 4, 3, 2]; // 8 = no quantization\n for (const scale of scales) {\n const w = Math.max(1, Math.round(base.width * scale));\n const h = Math.max(1, Math.round(base.height * scale));\n const scaled = scale === 1 ? base : base.resize(w, h);\n for (const bits of bitsSteps) {\n const surf = bits >= 8 ? scaled : scaled.posterize(bits);\n const r = await encode(surf, { format, background });\n if (r.size < best.size) best = r;\n if (r.size <= maxBytes) return r;\n }\n }\n return best; // smallest we could produce (budget genuinely unreachable losslessly)\n }\n\n // --- Lossy jpeg/webp: quality search, then downscale if needed ---\n const qualitySearch = async (surface: Surface): Promise<EncodeResult | null> => {\n let lo = minQuality;\n let hi = maxQuality;\n let best: EncodeResult | null = null;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const r = await encode(surface, { format, quality: mid, background });\n if (r.size <= maxBytes) {\n best = r;\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n return best;\n };\n\n const atFull = await qualitySearch(base);\n if (atFull) return atFull;\n\n if (allowResize) {\n for (let scale = 0.85; scale >= minScale; scale -= 0.12) {\n const w = Math.max(1, Math.round(base.width * scale));\n const h = Math.max(1, Math.round(base.height * scale));\n const found = await qualitySearch(base.resize(w, h));\n if (found) return found;\n }\n // Last resort: smallest scale at the lowest quality.\n const w = Math.max(1, Math.round(base.width * minScale));\n const h = Math.max(1, Math.round(base.height * minScale));\n return encode(base.resize(w, h), { format, quality: minQuality, background });\n }\n\n // No resizing allowed and nothing fit — return the smallest (floor quality).\n return encode(base, { format, quality: minQuality, background });\n}\n","/**\n * SVG → raster. In the browser we draw the SVG onto a canvas (zero-dep). In\n * Node, rich SVG text/paths need a real renderer, so we use an OPTIONAL peer\n * (`sharp`) if it's installed — otherwise we throw a clear, actionable error.\n * This keeps the package itself zero-dependency while still enabling server-side\n * raster for teams that opt in.\n */\n\nimport { Surface } from \"./surface.js\";\nimport type { Color } from \"./types.js\";\n\nexport interface RasterizeSvgOptions {\n width?: number;\n height?: number;\n /** Painted under the SVG (SVGs are transparent by default). */\n background?: Color;\n}\n\nasync function svgToSurfaceBrowser(svg: string, opts: RasterizeSvgOptions): Promise<Surface> {\n const blob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n try {\n const img = await new Promise<HTMLImageElement>((resolve, reject) => {\n const el = new Image();\n el.onload = () => resolve(el);\n el.onerror = () => reject(new Error(\"Failed to load SVG\"));\n el.src = url;\n });\n const w = opts.width ?? img.naturalWidth ?? 512;\n const h = opts.height ?? img.naturalHeight ?? 512;\n const canvas =\n typeof OffscreenCanvas !== \"undefined\"\n ? new OffscreenCanvas(w, h)\n : Object.assign(document.createElement(\"canvas\"), { width: w, height: h });\n const ctx = (canvas as HTMLCanvasElement).getContext(\"2d\");\n if (!ctx) throw new Error(\"No 2D context for SVG rasterization\");\n if (opts.background) {\n ctx.fillStyle = opts.background;\n ctx.fillRect(0, 0, w, h);\n }\n ctx.drawImage(img as unknown as CanvasImageSource, 0, 0, w, h);\n const data = ctx.getImageData(0, 0, w, h);\n return new Surface(w, h, data.data);\n } finally {\n URL.revokeObjectURL(url);\n }\n}\n\nasync function svgToSurfaceNode(svg: string, opts: RasterizeSvgOptions): Promise<Surface> {\n let sharp: undefined | ((input: Buffer) => SharpLike);\n try {\n // @ts-ignore optional peer dependency — may not be installed\n const mod = (await import(\"sharp\")) as unknown as { default: (input: Buffer) => SharpLike };\n sharp = mod.default;\n } catch {\n throw new Error(\n \"SVG rasterization in Node requires the optional peer `sharp`. Install it (npm i sharp) \" +\n \"or run rasterizeSvg() in the browser, where it uses the native Canvas with no extra deps.\",\n );\n }\n let pipe = sharp(Buffer.from(svg));\n if (opts.width || opts.height) pipe = pipe.resize(opts.width, opts.height, { fit: \"fill\" });\n if (opts.background) pipe = pipe.flatten({ background: opts.background });\n const { data, info } = await pipe.ensureAlpha().raw().toBuffer({ resolveWithObject: true });\n return new Surface(info.width, info.height, new Uint8ClampedArray(data));\n}\n\ninterface SharpLike {\n resize(w?: number, h?: number, o?: { fit?: string }): SharpLike;\n flatten(o: { background?: string }): SharpLike;\n ensureAlpha(): SharpLike;\n raw(): SharpLike;\n toBuffer(o: { resolveWithObject: true }): Promise<{ data: Uint8Array; info: { width: number; height: number } }>;\n}\n\n/** Rasterize an SVG string to a Surface (browser: Canvas; Node: optional `sharp`). */\nexport async function rasterizeSvg(svg: string, opts: RasterizeSvgOptions = {}): Promise<Surface> {\n const isNode = typeof process !== \"undefined\" && !!(process as { versions?: { node?: string } }).versions?.node;\n if (!isNode && typeof Image !== \"undefined\") return svgToSurfaceBrowser(svg, opts);\n return svgToSurfaceNode(svg, opts);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/color.ts","../src/surface.ts","../src/generators.ts","../src/env.ts","../src/png.ts","../src/jpeg.ts","../src/encode.ts","../src/bytes.ts","../src/fit.ts","../src/svg.ts"],"names":["fit","rng","w","h","isNode"],"mappings":"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,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAC5G,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAC5G,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,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AAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC5G,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AA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","file":"index.js","sourcesContent":["/**\n * Tiny, dependency-free colour parser → RGBA tuple (0..255 each).\n * Supports: #rgb, #rgba, #rrggbb, #rrggbbaa, rgb()/rgba(), and \"transparent\".\n */\n\nimport type { Color } from \"./types.js\";\n\nexport type RGBA = [number, number, number, number];\n\nconst NAMED: Record<string, RGBA> = {\n transparent: [0, 0, 0, 0],\n black: [0, 0, 0, 255],\n white: [255, 255, 255, 255],\n red: [255, 0, 0, 255],\n green: [0, 128, 0, 255],\n blue: [0, 0, 255, 255],\n};\n\nfunction clampByte(n: number): number {\n n = Math.round(n);\n return n < 0 ? 0 : n > 255 ? 255 : n;\n}\n\nexport function parseColor(input: Color): RGBA {\n const s = String(input).trim().toLowerCase();\n if (s in NAMED) return [...NAMED[s]!] as RGBA;\n\n if (s[0] === \"#\") {\n const hex = s.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n const r = parseInt(hex[0]! + hex[0]!, 16);\n const g = parseInt(hex[1]! + hex[1]!, 16);\n const b = parseInt(hex[2]! + hex[2]!, 16);\n const a = hex.length === 4 ? parseInt(hex[3]! + hex[3]!, 16) : 255;\n return [r, g, b, a];\n }\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) : 255;\n return [r, g, b, a];\n }\n }\n\n const m = s.match(/^rgba?\\(([^)]+)\\)$/);\n if (m) {\n const parts = m[1]!.split(/[,/\\s]+/).filter(Boolean);\n const r = clampByte(parseFloat(parts[0] ?? \"0\"));\n const g = clampByte(parseFloat(parts[1] ?? \"0\"));\n const b = clampByte(parseFloat(parts[2] ?? \"0\"));\n let a = 255;\n if (parts[3] != null) {\n const av = parseFloat(parts[3]);\n a = parts[3].includes(\"%\") ? clampByte((av / 100) * 255) : clampByte(av <= 1 ? av * 255 : av);\n }\n return [r, g, b, a];\n }\n\n // Unknown — fail soft to opaque black so a bad token never crashes a render.\n return [0, 0, 0, 255];\n}\n\n/** Alpha-over composite of `src` onto `dst` (both premultiplied by their own alpha here). */\nexport function blendOver(dst: RGBA, src: RGBA): RGBA {\n const sa = src[3] / 255;\n const da = dst[3] / 255;\n const outA = sa + da * (1 - sa);\n if (outA === 0) return [0, 0, 0, 0];\n const r = (src[0] * sa + dst[0] * da * (1 - sa)) / outA;\n const g = (src[1] * sa + dst[1] * da * (1 - sa)) / outA;\n const b = (src[2] * sa + dst[2] * da * (1 - sa)) / outA;\n return [clampByte(r), clampByte(g), clampByte(b), clampByte(outA * 255)];\n}\n\n/** Linear interpolation between two colours at t in 0..1. */\nexport function mix(a: RGBA, b: RGBA, t: number): RGBA {\n return [\n clampByte(a[0] + (b[0] - a[0]) * t),\n clampByte(a[1] + (b[1] - a[1]) * t),\n clampByte(a[2] + (b[2] - a[2]) * t),\n clampByte(a[3] + (b[3] - a[3]) * t),\n ];\n}\n","/**\n * Surface — a zero-dependency RGBA pixel buffer with a small, deterministic\n * drawing API (fills, gradients, patterns, image placement, resize, crop).\n * Works identically in Node and the browser; nothing here touches the DOM.\n */\n\nimport type {\n Color,\n DrawImageOptions,\n LinearGradientOptions,\n PatternOptions,\n PatternKind,\n PixelSource,\n RadialGradientOptions,\n} from \"./types.js\";\nimport { parseColor, blendOver, mix, type RGBA } from \"./color.js\";\n\nfunction sortStops(stops: { offset: number; color: Color }[]) {\n return stops\n .map((s) => ({ offset: Math.max(0, Math.min(1, s.offset)), rgba: parseColor(s.color) }))\n .sort((a, b) => a.offset - b.offset);\n}\n\nfunction sampleStops(stops: { offset: number; rgba: RGBA }[], t: number): RGBA {\n if (stops.length === 0) return [0, 0, 0, 0];\n if (t <= stops[0]!.offset) return stops[0]!.rgba;\n const last = stops[stops.length - 1]!;\n if (t >= last.offset) return last.rgba;\n for (let i = 1; i < stops.length; i++) {\n const a = stops[i - 1]!;\n const b = stops[i]!;\n if (t <= b.offset) {\n const span = b.offset - a.offset || 1;\n return mix(a.rgba, b.rgba, (t - a.offset) / span);\n }\n }\n return last.rgba;\n}\n\n/** A small mulberry32 PRNG so `noise` is deterministic across runs and platforms. */\nfunction rng(seed: number) {\n let s = seed >>> 0 || 1;\n return () => {\n s |= 0;\n s = (s + 0x6d2b79f5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nexport class Surface implements PixelSource {\n readonly width: number;\n readonly height: number;\n readonly data: Uint8ClampedArray;\n\n constructor(width: number, height: number, data?: Uint8ClampedArray) {\n this.width = Math.max(1, Math.floor(width));\n this.height = Math.max(1, Math.floor(height));\n this.data = data ?? new Uint8ClampedArray(this.width * this.height * 4);\n }\n\n /** Wrap an existing RGBA source (e.g. a Canvas ImageData) without copying. */\n static from(src: PixelSource): Surface {\n return new Surface(src.width, src.height, src.data);\n }\n\n private idx(x: number, y: number) {\n return (y * this.width + x) * 4;\n }\n\n private set(x: number, y: number, c: RGBA) {\n const i = this.idx(x, y);\n const d = this.data;\n if (c[3] === 255) {\n d[i] = c[0];\n d[i + 1] = c[1];\n d[i + 2] = c[2];\n d[i + 3] = 255;\n } else {\n const dst: RGBA = [d[i]!, d[i + 1]!, d[i + 2]!, d[i + 3]!];\n const out = blendOver(dst, c);\n d[i] = out[0];\n d[i + 1] = out[1];\n d[i + 2] = out[2];\n d[i + 3] = out[3];\n }\n }\n\n /** Paint the whole surface a solid colour (replaces, does not blend). */\n fill(color: Color): this {\n const [r, g, b, a] = parseColor(color);\n const d = this.data;\n for (let i = 0; i < d.length; i += 4) {\n d[i] = r;\n d[i + 1] = g;\n d[i + 2] = b;\n d[i + 3] = a;\n }\n return this;\n }\n\n /** Blend a rectangle of colour over the surface. */\n rect(x: number, y: number, w: number, h: number, color: Color): this {\n const c = parseColor(color);\n const x0 = Math.max(0, Math.floor(x));\n const y0 = Math.max(0, Math.floor(y));\n const x1 = Math.min(this.width, Math.floor(x + w));\n const y1 = Math.min(this.height, Math.floor(y + h));\n for (let py = y0; py < y1; py++) for (let px = x0; px < x1; px++) this.set(px, py, c);\n return this;\n }\n\n linearGradient(opts: LinearGradientOptions): this {\n const stops = sortStops(opts.stops);\n const angle = ((opts.angle ?? 0) * Math.PI) / 180;\n const dx = Math.cos(angle);\n const dy = Math.sin(angle);\n const w = this.width;\n const h = this.height;\n // Projected extent of the box corners onto the axis, to normalise t to 0..1.\n const projs = [0, w * dx, h * dy, w * dx + h * dy];\n const min = Math.min(...projs);\n const span = Math.max(...projs) - min || 1;\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const t = ((px + 0.5) * dx + (py + 0.5) * dy - min) / span;\n this.set(px, py, sampleStops(stops, t));\n }\n }\n return this;\n }\n\n radialGradient(opts: RadialGradientOptions): this {\n const stops = sortStops(opts.stops);\n const w = this.width;\n const h = this.height;\n const cx = (opts.cx ?? 0.5) * w;\n const cy = (opts.cy ?? 0.5) * h;\n const radius = (opts.radius ?? 0.75) * Math.max(w, h);\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const dx = px + 0.5 - cx;\n const dy = py + 0.5 - cy;\n const t = Math.sqrt(dx * dx + dy * dy) / (radius || 1);\n this.set(px, py, sampleStops(stops, t));\n }\n }\n return this;\n }\n\n pattern(kind: PatternKind, opts: PatternOptions = {}): this {\n const size = Math.max(1, opts.size ?? 24);\n const color = parseColor(opts.color ?? \"rgba(255,255,255,0.13)\");\n const w = this.width;\n const h = this.height;\n if (kind === \"noise\") {\n const rand = rng(opts.seed ?? 1);\n const strength = opts.strength ?? 0.06;\n const d = this.data;\n for (let i = 0; i < d.length; i += 4) {\n const n = (rand() - 0.5) * 2 * strength * 255;\n d[i] = d[i]! + n;\n d[i + 1] = d[i + 1]! + n;\n d[i + 2] = d[i + 2]! + n;\n }\n return this;\n }\n if (kind === \"dots\") {\n const r = Math.max(1, size / 6);\n for (let cy = size / 2; cy < h; cy += size)\n for (let cx = size / 2; cx < w; cx += size)\n for (let py = -r; py <= r; py++)\n for (let px = -r; px <= r; px++)\n if (px * px + py * py <= r * r) this.set(Math.round(cx + px), Math.round(cy + py), color);\n return this;\n }\n if (kind === \"grid\") {\n for (let x = 0; x < w; x += size) this.rect(x, 0, 1, h, opts.color ?? \"rgba(255,255,255,0.13)\");\n for (let y = 0; y < h; y += size) this.rect(0, y, w, 1, opts.color ?? \"rgba(255,255,255,0.13)\");\n return this;\n }\n if (kind === \"stripes\") {\n const angle = opts.angle ?? 45;\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n let coord: number;\n if (angle === 0) coord = px;\n else if (angle === 90) coord = py;\n else coord = px + py;\n if (Math.floor(coord / size) % 2 === 0) this.set(px, py, color);\n }\n }\n return this;\n }\n // checker\n for (let py = 0; py < h; py++) {\n for (let px = 0; px < w; px++) {\n const on = (Math.floor(px / size) + Math.floor(py / size)) % 2 === 0;\n if (on) this.set(px, py, color);\n }\n }\n return this;\n }\n\n /** Bilinear sample of a source at fractional (u,v) in source pixel space. */\n private static sampleBilinear(src: PixelSource, u: number, v: number): RGBA {\n const x = Math.max(0, Math.min(src.width - 1, u));\n const y = Math.max(0, Math.min(src.height - 1, v));\n const x0 = Math.floor(x);\n const y0 = Math.floor(y);\n const x1 = Math.min(src.width - 1, x0 + 1);\n const y1 = Math.min(src.height - 1, y0 + 1);\n const fx = x - x0;\n const fy = y - y0;\n const at = (px: number, py: number): RGBA => {\n const i = (py * src.width + px) * 4;\n return [src.data[i]!, src.data[i + 1]!, src.data[i + 2]!, src.data[i + 3]!];\n };\n const top = mix(at(x0, y0), at(x1, y0), fx);\n const bot = mix(at(x0, y1), at(x1, y1), fx);\n return mix(top, bot, fy);\n }\n\n /** Place another image/surface onto this one, with fit + resampling. */\n drawImage(src: PixelSource, o: DrawImageOptions = {}): this {\n const dx = o.x ?? 0;\n const dy = o.y ?? 0;\n const dw = o.width ?? src.width;\n const dh = o.height ?? src.height;\n const fit = o.fit ?? \"cover\";\n const nearest = o.resample === \"nearest\";\n\n // Map a destination pixel back to a source coordinate honouring `fit`.\n let scaleX = src.width / dw;\n let scaleY = src.height / dh;\n let offU = 0;\n let offV = 0;\n if (fit === \"cover\" || fit === \"contain\") {\n const s = fit === \"cover\" ? Math.min(scaleX, scaleY) : Math.max(scaleX, scaleY);\n scaleX = scaleY = s;\n offU = (src.width - dw * s) / 2;\n offV = (src.height - dh * s) / 2;\n }\n const x0 = Math.max(0, Math.floor(dx));\n const y0 = Math.max(0, Math.floor(dy));\n const x1 = Math.min(this.width, Math.floor(dx + dw));\n const y1 = Math.min(this.height, Math.floor(dy + dh));\n for (let py = y0; py < y1; py++) {\n for (let px = x0; px < x1; px++) {\n const u = (px - dx) * scaleX + offU;\n const v = (py - dy) * scaleY + offV;\n if (fit === \"contain\" && (u < 0 || v < 0 || u >= src.width || v >= src.height)) continue;\n const c = nearest\n ? (() => {\n const i = (Math.min(src.height - 1, Math.max(0, Math.round(v))) * src.width +\n Math.min(src.width - 1, Math.max(0, Math.round(u)))) * 4;\n return [src.data[i]!, src.data[i + 1]!, src.data[i + 2]!, src.data[i + 3]!] as RGBA;\n })()\n : Surface.sampleBilinear(src, u, v);\n this.set(px, py, c);\n }\n }\n return this;\n }\n\n /** Return a NEW surface resampled to the given dimensions (bilinear). */\n resize(width: number, height: number): Surface {\n const out = new Surface(width, height);\n const sx = this.width / out.width;\n const sy = this.height / out.height;\n for (let py = 0; py < out.height; py++) {\n for (let px = 0; px < out.width; px++) {\n const c = Surface.sampleBilinear(this, (px + 0.5) * sx - 0.5, (py + 0.5) * sy - 0.5);\n const i = (py * out.width + px) * 4;\n out.data[i] = c[0];\n out.data[i + 1] = c[1];\n out.data[i + 2] = c[2];\n out.data[i + 3] = c[3];\n }\n }\n return out;\n }\n\n /** Return a NEW surface cropped to the given rectangle. */\n crop(x: number, y: number, w: number, h: number): Surface {\n const out = new Surface(w, h);\n for (let py = 0; py < out.height; py++) {\n for (let px = 0; px < out.width; px++) {\n const srcX = Math.min(this.width - 1, Math.max(0, x + px));\n const srcY = Math.min(this.height - 1, Math.max(0, y + py));\n const si = (srcY * this.width + srcX) * 4;\n const di = (py * out.width + px) * 4;\n out.data[di] = this.data[si]!;\n out.data[di + 1] = this.data[si + 1]!;\n out.data[di + 2] = this.data[si + 2]!;\n out.data[di + 3] = this.data[si + 3]!;\n }\n }\n return out;\n }\n\n /** Flatten transparency onto a solid background, returning a NEW opaque surface. */\n flatten(background: Color = \"#ffffff\"): Surface {\n const bg = parseColor(background);\n const out = new Surface(this.width, this.height);\n for (let i = 0; i < this.data.length; i += 4) {\n const src: RGBA = [this.data[i]!, this.data[i + 1]!, this.data[i + 2]!, this.data[i + 3]!];\n const c = blendOver([bg[0], bg[1], bg[2], 255], src);\n out.data[i] = c[0];\n out.data[i + 1] = c[1];\n out.data[i + 2] = c[2];\n out.data[i + 3] = 255;\n }\n return out;\n }\n\n /**\n * Return a NEW surface with each channel reduced to `bits` bits (2..8).\n * Fewer distinct values compress far better as lossless PNG — the main lever\n * for hitting a PNG size budget on noisy/photographic content.\n */\n posterize(bits: number): Surface {\n const b = Math.max(1, Math.min(8, Math.floor(bits)));\n if (b >= 8) return this.clone();\n const levels = (1 << b) - 1;\n const out = new Surface(this.width, this.height, new Uint8ClampedArray(this.data));\n const d = out.data;\n for (let i = 0; i < d.length; i += 4) {\n d[i] = Math.round((Math.round((d[i]! / 255) * levels) / levels) * 255);\n d[i + 1] = Math.round((Math.round((d[i + 1]! / 255) * levels) / levels) * 255);\n d[i + 2] = Math.round((Math.round((d[i + 2]! / 255) * levels) / levels) * 255);\n // alpha left intact\n }\n return out;\n }\n\n clone(): Surface {\n return new Surface(this.width, this.height, new Uint8ClampedArray(this.data));\n }\n}\n\n/** Convenience: a new surface pre-filled with a linear gradient. */\nexport function gradient(width: number, height: number, opts: LinearGradientOptions): Surface {\n return new Surface(width, height).linearGradient(opts);\n}\n\n/** Convenience: a new surface pre-filled with a radial gradient. */\nexport function radial(width: number, height: number, opts: RadialGradientOptions): Surface {\n return new Surface(width, height).radialGradient(opts);\n}\n\n/** Convenience: a solid surface with a pattern painted over it. */\nexport function pattern(\n width: number,\n height: number,\n base: Color,\n kind: PatternKind,\n opts?: PatternOptions,\n): Surface {\n return new Surface(width, height).fill(base).pattern(kind, opts);\n}\n","/**\n * Deterministic, no-AI image generators built on Surface:\n * - identicon(): a symmetric avatar from any string (GitHub-style)\n * - mesh(): a smooth multi-point mesh gradient\n * - placeholder(): a tasteful gradient placeholder / LQIP from a seed\n * All are seeded, so the same input always yields the same image.\n */\nimport { Surface } from \"./surface.js\";\nimport { parseColor, mix, type RGBA } from \"./color.js\";\nimport type { Color } from \"./types.js\";\n\nfunction hash32(str: string): number {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\nfunction rng(seed: number) {\n let s = seed >>> 0 || 1;\n return () => {\n s |= 0;\n s = (s + 0x6d2b79f5) | 0;\n let t = Math.imul(s ^ (s >>> 15), 1 | s);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\nfunction hsl(h: number, s: number, l: number): RGBA {\n h = ((h % 360) + 360) % 360;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0, g = 0, b = 0;\n if (h < 60) [r, g, b] = [c, x, 0];\n else if (h < 120) [r, g, b] = [x, c, 0];\n else if (h < 180) [r, g, b] = [0, c, x];\n else if (h < 240) [r, g, b] = [0, x, c];\n else if (h < 300) [r, g, b] = [x, 0, c];\n else [r, g, b] = [c, 0, x];\n return [Math.round((r + m) * 255), Math.round((g + m) * 255), Math.round((b + m) * 255), 255];\n}\n\nexport interface IdenticonOptions {\n size?: number;\n /** Odd number of cells across (default 5). */\n grid?: number;\n background?: Color;\n /** Force the foreground colour; default derived from the seed. */\n color?: Color;\n /** Cell padding fraction (default 0.12 of the size). */\n padding?: number;\n}\n\n/** A symmetric identicon avatar from any string. */\nexport function identicon(seed: string, opts: IdenticonOptions = {}): Surface {\n const size = opts.size ?? 240;\n const grid = Math.max(3, (opts.grid ?? 5) | 1); // force odd\n const h = hash32(seed);\n const rand = rng(h);\n const fgRgba = hsl(h % 360, 0.62, 0.58);\n const fg = opts.color ?? `rgb(${fgRgba[0]},${fgRgba[1]},${fgRgba[2]})`;\n const s = new Surface(size, size).fill(opts.background ?? \"#0f1117\");\n const pad = Math.round(size * (opts.padding ?? 0.12));\n const cell = (size - pad * 2) / grid;\n const half = Math.ceil(grid / 2);\n for (let col = 0; col < half; col++) {\n for (let row = 0; row < grid; row++) {\n if (rand() > 0.5) {\n const mirror = grid - 1 - col;\n const y = pad + row * cell;\n s.rect(pad + col * cell, y, Math.ceil(cell), Math.ceil(cell), fg);\n if (mirror !== col) s.rect(pad + mirror * cell, y, Math.ceil(cell), Math.ceil(cell), fg);\n }\n }\n }\n return s;\n}\n\nexport interface MeshOptions {\n colors?: Color[];\n /** Number of colour points (default = colors.length or 5). */\n points?: number;\n seed?: string | number;\n}\n\nconst DEFAULT_MESH = [\"#0BB9D9\", \"#3B82F6\", \"#7C3AED\", \"#EC4899\", \"#22D3EE\"];\n\n/** A smooth multi-point mesh gradient (inverse-distance blend of seeded points). */\nexport function mesh(width: number, height: number, opts: MeshOptions = {}): Surface {\n const palette = (opts.colors ?? DEFAULT_MESH).map(parseColor);\n const n = Math.max(2, opts.points ?? palette.length);\n const seed = typeof opts.seed === \"number\" ? opts.seed : hash32(String(opts.seed ?? \"mesh\"));\n const rand = rng(seed);\n const pts = Array.from({ length: n }, (_, i) => ({\n x: rand() * width,\n y: rand() * height,\n c: palette[i % palette.length]!,\n }));\n const out = new Surface(width, height);\n const d = out.data;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let wr = 0, wg = 0, wb = 0, wsum = 0;\n for (const p of pts) {\n const dx = x - p.x;\n const dy = y - p.y;\n const w = 1 / (dx * dx + dy * dy + 800); // +epsilon for smoothness\n wr += p.c[0] * w;\n wg += p.c[1] * w;\n wb += p.c[2] * w;\n wsum += w;\n }\n const i = (y * width + x) * 4;\n d[i] = wr / wsum;\n d[i + 1] = wg / wsum;\n d[i + 2] = wb / wsum;\n d[i + 3] = 255;\n }\n }\n return out;\n}\n\nexport interface PlaceholderOptions {\n seed?: string | number;\n /** Force the two gradient endpoints instead of deriving from the seed. */\n colors?: [Color, Color];\n /** Add a faint dot grid over the gradient (default true). */\n texture?: boolean;\n}\n\n/** A tasteful, seeded gradient placeholder (great as an LQIP or empty state). */\nexport function placeholder(width: number, height: number, opts: PlaceholderOptions = {}): Surface {\n const seed = typeof opts.seed === \"number\" ? opts.seed : hash32(String(opts.seed ?? `${width}x${height}`));\n const rand = rng(seed);\n let from: RGBA, to: RGBA;\n if (opts.colors) {\n [from, to] = [parseColor(opts.colors[0]), parseColor(opts.colors[1])];\n } else {\n const base = Math.floor(rand() * 360);\n from = hsl(base, 0.55, 0.55);\n to = hsl(base + 40 + rand() * 60, 0.55, 0.45);\n }\n const angle = Math.floor(rand() * 180);\n const s = new Surface(width, height).linearGradient({\n angle,\n stops: [\n { offset: 0, color: `rgb(${from[0]},${from[1]},${from[2]})` },\n { offset: 1, color: `rgb(${to[0]},${to[1]},${to[2]})` },\n ],\n });\n if (opts.texture !== false) s.pattern(\"dots\", { size: Math.max(20, Math.round(width / 24)), color: \"rgba(255,255,255,0.08)\" });\n return s;\n}\n\n// re-export mix for parity/testing convenience\nexport { mix };\n","/**\n * Isomorphic canvas layer. When a real Canvas is available (browser main thread,\n * a Worker with OffscreenCanvas), we use it to encode PNG/JPEG/WebP with the\n * platform's own well-tuned encoders. In Node there is no canvas, so callers\n * fall back to the pure-JS PNG/JPEG encoders in this package.\n */\n\nimport type { ImageFormat, PixelSource } from \"./types.js\";\n\ntype AnyCanvas = {\n width: number;\n height: number;\n getContext(id: \"2d\"): CanvasRenderingContext2D | null;\n toBlob?: (cb: (b: Blob | null) => void, type?: string, quality?: number) => void;\n convertToBlob?: (opts?: { type?: string; quality?: number }) => Promise<Blob>;\n};\n\n/** Does this runtime expose a usable 2D canvas we can encode from? */\nexport function hasCanvas(): boolean {\n if (typeof OffscreenCanvas !== \"undefined\") return true;\n return typeof document !== \"undefined\" && typeof document.createElement === \"function\";\n}\n\nfunction makeCanvas(width: number, height: number): AnyCanvas {\n if (typeof OffscreenCanvas !== \"undefined\") return new OffscreenCanvas(width, height) as unknown as AnyCanvas;\n const el = document.createElement(\"canvas\");\n el.width = width;\n el.height = height;\n return el as unknown as AnyCanvas;\n}\n\nconst MIME: Record<ImageFormat, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n};\n\nasync function canvasToBytes(canvas: AnyCanvas, format: ImageFormat, quality?: number): Promise<Uint8Array> {\n const type = MIME[format];\n const q = quality != null ? Math.max(0, Math.min(1, quality / 100)) : undefined;\n let blob: Blob | null;\n if (canvas.convertToBlob) {\n blob = await canvas.convertToBlob({ type, quality: q });\n } else if (canvas.toBlob) {\n blob = await new Promise<Blob | null>((res) => canvas.toBlob!((b) => res(b), type, q));\n } else {\n throw new Error(\"Canvas has no toBlob/convertToBlob\");\n }\n if (!blob) throw new Error(`Canvas failed to encode ${format}`);\n return new Uint8Array(await blob.arrayBuffer());\n}\n\n/** Encode a pixel source via the platform canvas. Throws if no canvas here. */\nexport async function encodeViaCanvas(source: PixelSource, format: ImageFormat, quality?: number): Promise<Uint8Array> {\n if (!hasCanvas()) throw new Error(\"No canvas available in this runtime\");\n const canvas = makeCanvas(source.width, source.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Could not get a 2D context\");\n const img = new ImageData(new Uint8ClampedArray(source.data), source.width, source.height);\n ctx.putImageData(img, 0, 0);\n return canvasToBytes(canvas, format, quality);\n}\n\n/** True where the platform can actually emit this format via canvas. */\nexport async function canvasSupports(format: ImageFormat): Promise<boolean> {\n if (!hasCanvas()) return false;\n try {\n const test = makeCanvas(2, 2);\n const bytes = await canvasToBytes(test, format, 80);\n // Some browsers silently fall back to PNG for unsupported types.\n if (format === \"webp\") return bytes[0] !== 0x89; // not a PNG signature\n return bytes.length > 0;\n } catch {\n return false;\n }\n}\n","/**\n * Minimal, dependency-free PNG encoder (8-bit RGBA, non-interlaced).\n * Compression: `node:zlib` when running in Node (kept external in browser\n * bundles), otherwise a valid *stored* (uncompressed) DEFLATE stream — so the\n * output is always a spec-correct PNG everywhere, just larger without zlib.\n * In the browser the orchestrator prefers Canvas, which compresses properly.\n */\n\nimport type { PixelSource } from \"./types.js\";\n\nconst SIGNATURE = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);\n\nconst CRC_TABLE = (() => {\n const t = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n t[n] = c >>> 0;\n }\n return t;\n})();\n\nfunction crc32(bytes: Uint8Array): number {\n let c = 0xffffffff;\n for (let i = 0; i < bytes.length; i++) c = CRC_TABLE[(c ^ bytes[i]!) & 0xff]! ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n\nfunction adler32(bytes: Uint8Array): number {\n let a = 1;\n let b = 0;\n const MOD = 65521;\n for (let i = 0; i < bytes.length; i++) {\n a = (a + bytes[i]!) % MOD;\n b = (b + a) % MOD;\n }\n return ((b << 16) | a) >>> 0;\n}\n\nfunction u32(n: number): Uint8Array {\n return new Uint8Array([(n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255]);\n}\n\nfunction chunk(type: string, data: Uint8Array): Uint8Array {\n const typeBytes = new Uint8Array([type.charCodeAt(0), type.charCodeAt(1), type.charCodeAt(2), type.charCodeAt(3)]);\n const body = new Uint8Array(typeBytes.length + data.length);\n body.set(typeBytes, 0);\n body.set(data, typeBytes.length);\n const out = new Uint8Array(4 + body.length + 4);\n out.set(u32(data.length), 0);\n out.set(body, 4);\n out.set(u32(crc32(body)), 4 + body.length);\n return out;\n}\n\n/** A valid zlib stream using only *stored* DEFLATE blocks (no compression). */\nfunction storedZlib(data: Uint8Array): Uint8Array {\n const MAX = 65535;\n const blocks: Uint8Array[] = [];\n let offset = 0;\n if (data.length === 0) {\n blocks.push(new Uint8Array([1, 0, 0, 0xff, 0xff]));\n }\n while (offset < data.length) {\n const len = Math.min(MAX, data.length - offset);\n const final = offset + len >= data.length ? 1 : 0;\n const header = new Uint8Array(5);\n header[0] = final;\n header[1] = len & 255;\n header[2] = (len >>> 8) & 255;\n header[3] = ~len & 255;\n header[4] = (~len >>> 8) & 255;\n blocks.push(header, data.subarray(offset, offset + len));\n offset += len;\n }\n const bodyLen = blocks.reduce((n, b) => n + b.length, 0);\n const out = new Uint8Array(2 + bodyLen + 4);\n out[0] = 0x78; // CMF\n out[1] = 0x01; // FLG\n let p = 2;\n for (const b of blocks) {\n out.set(b, p);\n p += b.length;\n }\n out.set(u32(adler32(data)), p);\n return out;\n}\n\nfunction isNode(): boolean {\n return typeof process !== \"undefined\" && !!(process as { versions?: { node?: string } }).versions?.node;\n}\n\nasync function deflate(data: Uint8Array, level: number): Promise<Uint8Array> {\n if (isNode()) {\n try {\n const z = await import(/* @vite-ignore */ \"node:zlib\");\n return new Uint8Array((z.deflateSync as (b: Uint8Array, o?: object) => Buffer)(data, { level }));\n } catch {\n /* fall through to stored */\n }\n }\n return storedZlib(data);\n}\n\n/** Prepend a \"None\" filter byte (0) to every scanline. */\nfunction filterScanlines(src: PixelSource): Uint8Array {\n const { width, height, data } = src;\n const rowBytes = width * 4;\n const out = new Uint8Array(height * (rowBytes + 1));\n for (let y = 0; y < height; y++) {\n const o = y * (rowBytes + 1);\n out[o] = 0;\n out.set(data.subarray(y * rowBytes, y * rowBytes + rowBytes), o + 1);\n }\n return out;\n}\n\nfunction assemble(source: PixelSource, idat: Uint8Array): Uint8Array {\n const ihdrData = new Uint8Array(13);\n ihdrData.set(u32(source.width), 0);\n ihdrData.set(u32(source.height), 4);\n ihdrData[8] = 8; // bit depth\n ihdrData[9] = 6; // colour type: RGBA\n ihdrData[10] = 0; // compression\n ihdrData[11] = 0; // filter\n ihdrData[12] = 0; // interlace\n const ihdr = chunk(\"IHDR\", ihdrData);\n const idatChunk = chunk(\"IDAT\", idat);\n const iend = chunk(\"IEND\", new Uint8Array(0));\n const out = new Uint8Array(SIGNATURE.length + ihdr.length + idatChunk.length + iend.length);\n let p = 0;\n for (const part of [SIGNATURE, ihdr, idatChunk, iend]) {\n out.set(part, p);\n p += part.length;\n }\n return out;\n}\n\n/** Encode an RGBA source to PNG bytes. `level` 0..9 (zlib), default 9. */\nexport async function encodePng(source: PixelSource, level = 9): Promise<Uint8Array> {\n const idat = await deflate(filterScanlines(source), level);\n return assemble(source, idat);\n}\n\n/** Synchronous PNG using the pure stored-deflate path (valid, uncompressed). */\nexport function encodePngSync(source: PixelSource): Uint8Array {\n return assemble(source, storedZlib(filterScanlines(source)));\n}\n","/**\n * Pure-JS baseline JPEG encoder (4:4:4, no external deps).\n * Adapted from the classic public-domain JPEG encoder (AAN forward DCT +\n * standard Huffman tables). Runs identically in Node and the browser and is\n * the engine the size-budget fitter tunes via the `quality` knob.\n */\n\nimport type { PixelSource } from \"./types.js\";\n\nconst ZIGZAG = Int32Array.of(\n 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44,\n 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49,\n 57, 58, 62, 63,\n);\n\nconst STD_DC_LUM_CODES = Int32Array.of(0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0);\nconst STD_DC_LUM_VALUES = Int32Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\nconst STD_AC_LUM_CODES = Int32Array.of(0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d);\nconst STD_AC_LUM_VALUES = Int32Array.of(\n 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14,\n 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09,\n 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,\n 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65,\n 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,\n 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,\n 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca,\n 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,\n 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,\n);\nconst STD_DC_CHR_CODES = Int32Array.of(0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0);\nconst STD_DC_CHR_VALUES = Int32Array.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\nconst STD_AC_CHR_CODES = Int32Array.of(0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77);\nconst STD_AC_CHR_VALUES = Int32Array.of(\n 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32,\n 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16,\n 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39,\n 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64,\n 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86,\n 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,\n 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8,\n 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,\n 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,\n);\n\nconst YQT = Int32Array.of(\n 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51,\n 87, 80, 62, 18, 22, 37, 56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78, 87, 103, 121, 120, 101,\n 72, 92, 95, 98, 112, 100, 103, 99,\n);\nconst UVQT = Int32Array.of(\n 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99,\n 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,\n 99, 99, 99, 99, 99, 99,\n);\nconst AASF = Float64Array.of(1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.5411961, 0.275899379);\n\ninterface HuffTable {\n code: Int32Array;\n len: Int32Array;\n}\n\nfunction computeHuffTable(nrcodes: Int32Array, values: Int32Array): HuffTable {\n const code = new Int32Array(256);\n const len = new Int32Array(256);\n let codeValue = 0;\n let pos = 0;\n for (let k = 1; k <= 16; k++) {\n for (let j = 1; j <= nrcodes[k]!; j++) {\n const v = values[pos]!;\n code[v] = codeValue;\n len[v] = k;\n pos++;\n codeValue++;\n }\n codeValue *= 2;\n }\n return { code, len };\n}\n\nexport function encodeJpeg(source: PixelSource, quality = 82): Uint8Array {\n const q = Math.max(1, Math.min(100, Math.round(quality)));\n const sf = q < 50 ? Math.floor(5000 / q) : 200 - q * 2;\n\n const YTable = new Int32Array(64);\n const UVTable = new Int32Array(64);\n const fdtblY = new Float64Array(64);\n const fdtblUV = new Float64Array(64);\n\n for (let i = 0; i < 64; i++) {\n YTable[ZIGZAG[i]!] = Math.min(255, Math.max(1, Math.floor((YQT[i]! * sf + 50) / 100)));\n UVTable[ZIGZAG[i]!] = Math.min(255, Math.max(1, Math.floor((UVQT[i]! * sf + 50) / 100)));\n }\n {\n let i = 0;\n for (let row = 0; row < 8; row++) {\n for (let col = 0; col < 8; col++) {\n fdtblY[i] = 1.0 / (YTable[ZIGZAG[i]!]! * AASF[row]! * AASF[col]! * 8.0);\n fdtblUV[i] = 1.0 / (UVTable[ZIGZAG[i]!]! * AASF[row]! * AASF[col]! * 8.0);\n i++;\n }\n }\n }\n\n const YDC = computeHuffTable(STD_DC_LUM_CODES, STD_DC_LUM_VALUES);\n const YAC = computeHuffTable(STD_AC_LUM_CODES, STD_AC_LUM_VALUES);\n const UVDC = computeHuffTable(STD_DC_CHR_CODES, STD_DC_CHR_VALUES);\n const UVAC = computeHuffTable(STD_AC_CHR_CODES, STD_AC_CHR_VALUES);\n\n // Category + bit-code tables for value encoding (index = 32767 + value).\n const category = new Int32Array(65536);\n const bitCode = new Int32Array(65536);\n const bitLen = new Int32Array(65536);\n {\n let nrlower = 1;\n let nrupper = 2;\n for (let cat = 1; cat <= 15; cat++) {\n for (let nr = nrlower; nr < nrupper; nr++) {\n category[32767 + nr] = cat;\n bitLen[32767 + nr] = cat;\n bitCode[32767 + nr] = nr;\n }\n for (let nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {\n category[32767 + nrneg] = cat;\n bitLen[32767 + nrneg] = cat;\n bitCode[32767 + nrneg] = nrupper - 1 + nrneg;\n }\n nrlower <<= 1;\n nrupper <<= 1;\n }\n }\n\n const out: number[] = [];\n let byteNew = 0;\n let bytePos = 7;\n const writeByte = (v: number) => out.push(v & 0xff);\n const writeWord = (v: number) => {\n out.push((v >>> 8) & 0xff);\n out.push(v & 0xff);\n };\n const writeBits = (value: number, length: number) => {\n let posval = length - 1;\n while (posval >= 0) {\n if (value & (1 << posval)) byteNew |= 1 << bytePos;\n posval--;\n bytePos--;\n if (bytePos < 0) {\n if (byteNew === 0xff) {\n writeByte(0xff);\n writeByte(0);\n } else {\n writeByte(byteNew);\n }\n bytePos = 7;\n byteNew = 0;\n }\n }\n };\n\n const data = new Float64Array(64);\n const outDU = new Int32Array(64);\n const DU = new Int32Array(64);\n\n const fDCTQuant = (fdtbl: Float64Array): Int32Array => {\n let off = 0;\n for (let i = 0; i < 8; i++) {\n const d0 = data[off]!, d1 = data[off + 1]!, d2 = data[off + 2]!, d3 = data[off + 3]!;\n const d4 = data[off + 4]!, d5 = data[off + 5]!, d6 = data[off + 6]!, d7 = data[off + 7]!;\n const t0 = d0 + d7, t7 = d0 - d7, t1 = d1 + d6, t6 = d1 - d6;\n const t2 = d2 + d5, t5 = d2 - d5, t3 = d3 + d4, t4 = d3 - d4;\n let t10 = t0 + t3;\n const t13 = t0 - t3;\n let t11 = t1 + t2;\n const t12 = t1 - t2;\n data[off] = t10 + t11;\n data[off + 4] = t10 - t11;\n const z1 = (t12 + t13) * 0.707106781;\n data[off + 2] = t13 + z1;\n data[off + 6] = t13 - z1;\n t10 = t4 + t5;\n t11 = t5 + t6;\n const t12b = t6 + t7;\n const z5 = (t10 - t12b) * 0.382683433;\n const z2 = 0.5411961 * t10 + z5;\n const z4 = 1.306562965 * t12b + z5;\n const z3 = t11 * 0.707106781;\n const z11 = t7 + z3;\n const z13 = t7 - z3;\n data[off + 5] = z13 + z2;\n data[off + 3] = z13 - z2;\n data[off + 1] = z11 + z4;\n data[off + 7] = z11 - z4;\n off += 8;\n }\n off = 0;\n for (let i = 0; i < 8; i++) {\n const d0 = data[off]!, d1 = data[off + 8]!, d2 = data[off + 16]!, d3 = data[off + 24]!;\n const d4 = data[off + 32]!, d5 = data[off + 40]!, d6 = data[off + 48]!, d7 = data[off + 56]!;\n const t0 = d0 + d7, t7 = d0 - d7, t1 = d1 + d6, t6 = d1 - d6;\n const t2 = d2 + d5, t5 = d2 - d5, t3 = d3 + d4, t4 = d3 - d4;\n let t10 = t0 + t3;\n const t13 = t0 - t3;\n let t11 = t1 + t2;\n const t12 = t1 - t2;\n data[off] = t10 + t11;\n data[off + 32] = t10 - t11;\n const z1 = (t12 + t13) * 0.707106781;\n data[off + 16] = t13 + z1;\n data[off + 48] = t13 - z1;\n t10 = t4 + t5;\n t11 = t5 + t6;\n const t12b = t6 + t7;\n const z5 = (t10 - t12b) * 0.382683433;\n const z2 = 0.5411961 * t10 + z5;\n const z4 = 1.306562965 * t12b + z5;\n const z3 = t11 * 0.707106781;\n const z11 = t7 + z3;\n const z13 = t7 - z3;\n data[off + 40] = z13 + z2;\n data[off + 24] = z13 - z2;\n data[off + 8] = z11 + z4;\n data[off + 56] = z11 - z4;\n off++;\n }\n for (let i = 0; i < 64; i++) {\n const v = data[i]! * fdtbl[i]!;\n outDU[i] = v > 0 ? (v + 0.5) | 0 : (v - 0.5) | 0;\n }\n return outDU;\n };\n\n const processDU = (fdtbl: Float64Array, dc: number, HTDC: HuffTable, HTAC: HuffTable): number => {\n const duDct = fDCTQuant(fdtbl);\n for (let j = 0; j < 64; j++) DU[ZIGZAG[j]!] = duDct[j]!;\n const diff = DU[0]! - dc;\n const newDc = DU[0]!;\n if (diff === 0) {\n writeBits(HTDC.code[0]!, HTDC.len[0]!);\n } else {\n const pos = 32767 + diff;\n writeBits(HTDC.code[category[pos]!]!, HTDC.len[category[pos]!]!);\n writeBits(bitCode[pos]!, bitLen[pos]!);\n }\n let end0 = 63;\n while (end0 > 0 && DU[end0] === 0) end0--;\n if (end0 === 0) {\n writeBits(HTAC.code[0]!, HTAC.len[0]!); // EOB\n return newDc;\n }\n let i = 1;\n while (i <= end0) {\n const start = i;\n while (DU[i] === 0 && i <= end0) i++;\n let nrzeroes = i - start;\n if (nrzeroes >= 16) {\n const lng = nrzeroes >> 4;\n for (let m = 1; m <= lng; m++) writeBits(HTAC.code[0xf0]!, HTAC.len[0xf0]!);\n nrzeroes &= 0xf;\n }\n const pos = 32767 + DU[i]!;\n const sym = (nrzeroes << 4) + category[pos]!;\n writeBits(HTAC.code[sym]!, HTAC.len[sym]!);\n writeBits(bitCode[pos]!, bitLen[pos]!);\n i++;\n }\n if (end0 !== 63) writeBits(HTAC.code[0]!, HTAC.len[0]!); // EOB\n return newDc;\n };\n\n const { width, height, data: px } = source;\n\n // ---- Headers ----\n writeWord(0xffd8); // SOI\n // APP0 / JFIF\n writeWord(0xffe0);\n writeWord(16);\n for (const c of [0x4a, 0x46, 0x49, 0x46, 0]) writeByte(c); // \"JFIF\\0\"\n writeByte(1);\n writeByte(1);\n writeByte(0);\n writeWord(1);\n writeWord(1);\n writeByte(0);\n writeByte(0);\n // DQT\n writeWord(0xffdb);\n writeWord(132);\n writeByte(0);\n for (let i = 0; i < 64; i++) writeByte(YTable[i]!);\n writeByte(1);\n for (let i = 0; i < 64; i++) writeByte(UVTable[i]!);\n // SOF0\n writeWord(0xffc0);\n writeWord(17);\n writeByte(8);\n writeWord(height);\n writeWord(width);\n writeByte(3);\n writeByte(1);\n writeByte(0x11);\n writeByte(0);\n writeByte(2);\n writeByte(0x11);\n writeByte(1);\n writeByte(3);\n writeByte(0x11);\n writeByte(1);\n // DHT\n writeWord(0xffc4);\n writeWord(0x01a2);\n const writeHuffSpec = (cls: number, codes: Int32Array, values: Int32Array) => {\n writeByte(cls);\n for (let i = 1; i <= 16; i++) writeByte(codes[i]!);\n for (let i = 0; i < values.length; i++) writeByte(values[i]!);\n };\n writeHuffSpec(0x00, STD_DC_LUM_CODES, STD_DC_LUM_VALUES);\n writeHuffSpec(0x10, STD_AC_LUM_CODES, STD_AC_LUM_VALUES);\n writeHuffSpec(0x01, STD_DC_CHR_CODES, STD_DC_CHR_VALUES);\n writeHuffSpec(0x11, STD_AC_CHR_CODES, STD_AC_CHR_VALUES);\n // SOS\n writeWord(0xffda);\n writeWord(12);\n writeByte(3);\n writeByte(1);\n writeByte(0);\n writeByte(2);\n writeByte(0x11);\n writeByte(3);\n writeByte(0x11);\n writeByte(0);\n writeByte(0x3f);\n writeByte(0);\n\n // ---- Entropy-coded scan (4:4:4) ----\n let dcY = 0;\n let dcU = 0;\n let dcV = 0;\n byteNew = 0;\n bytePos = 7;\n const clampX = (x: number) => (x < 0 ? 0 : x >= width ? width - 1 : x);\n const clampY = (y: number) => (y < 0 ? 0 : y >= height ? height - 1 : y);\n\n for (let by = 0; by < height; by += 8) {\n for (let bx = 0; bx < width; bx += 8) {\n // Y\n let k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = 0.299 * R + 0.587 * G + 0.114 * B - 128;\n }\n }\n dcY = processDU(fdtblY, dcY, YDC, YAC);\n // U\n k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = -0.16874 * R - 0.33126 * G + 0.5 * B;\n }\n }\n dcU = processDU(fdtblUV, dcU, UVDC, UVAC);\n // V\n k = 0;\n for (let r = 0; r < 8; r++) {\n for (let c = 0; c < 8; c++) {\n const i = (clampY(by + r) * width + clampX(bx + c)) * 4;\n const R = px[i]!, G = px[i + 1]!, B = px[i + 2]!;\n data[k++] = 0.5 * R - 0.41869 * G - 0.08131 * B;\n }\n }\n dcV = processDU(fdtblUV, dcV, UVDC, UVAC);\n }\n }\n\n // Flush remaining bits (pad with 1s) then EOI.\n if (bytePos !== 7) writeBits(0x7f, 7);\n writeWord(0xffd9);\n\n return Uint8Array.from(out);\n}\n","/**\n * Unified, isomorphic encode(): pick the best available encoder for the format\n * and runtime. Browser/Worker → native Canvas (all formats). Node → pure-JS PNG\n * (zlib) and JPEG; WebP needs a Canvas runtime.\n */\n\nimport { hasCanvas, encodeViaCanvas } from \"./env.js\";\nimport { encodePng } from \"./png.js\";\nimport { encodeJpeg } from \"./jpeg.js\";\nimport { Surface } from \"./surface.js\";\nimport type { EncodeOptions, EncodeResult, PixelSource } from \"./types.js\";\n\nfunction hasAlpha(src: PixelSource): boolean {\n const d = src.data;\n for (let i = 3; i < d.length; i += 4) if (d[i]! < 255) return true;\n return false;\n}\n\n/** Encode an RGBA source to the requested format. */\nexport async function encode(source: PixelSource, opts: EncodeOptions): Promise<EncodeResult> {\n const format = opts.format;\n const quality = opts.quality ?? 82;\n let bytes: Uint8Array;\n\n if (format === \"jpeg\") {\n const flat = hasAlpha(source) ? Surface.from(source).flatten(opts.background ?? \"#ffffff\") : source;\n if (hasCanvas()) {\n try {\n bytes = await encodeViaCanvas(flat, \"jpeg\", quality);\n } catch {\n bytes = encodeJpeg(flat, quality);\n }\n } else {\n bytes = encodeJpeg(flat, quality);\n }\n } else if (format === \"png\") {\n if (hasCanvas()) {\n try {\n bytes = await encodeViaCanvas(source, \"png\");\n } catch {\n bytes = await encodePng(source);\n }\n } else {\n bytes = await encodePng(source);\n }\n } else if (format === \"webp\") {\n if (!hasCanvas()) {\n throw new Error(\n \"WebP encoding needs a Canvas runtime (browser or a Worker with OffscreenCanvas). \" +\n \"In Node, export png or jpeg instead.\",\n );\n }\n bytes = await encodeViaCanvas(source, \"webp\", quality);\n } else {\n throw new Error(`Unsupported format: ${String(format)}`);\n }\n\n return {\n bytes,\n format,\n width: source.width,\n height: source.height,\n quality: format === \"png\" ? undefined : quality,\n size: bytes.length,\n };\n}\n","/**\n * Human file-size parsing and formatting. Binary units (1 KB = 1024 bytes) to\n * match what operating systems and upload limits usually report.\n */\n\nconst UNITS: Record<string, number> = {\n b: 1,\n kb: 1024,\n k: 1024,\n kib: 1024,\n mb: 1024 * 1024,\n m: 1024 * 1024,\n mib: 1024 * 1024,\n gb: 1024 * 1024 * 1024,\n g: 1024 * 1024 * 1024,\n gib: 1024 * 1024 * 1024,\n};\n\n/** Parse \"200kb\", \"1.5 MB\", \"500\", 4096 → bytes. Throws on nonsense. */\nexport function parseSize(input: string | number): number {\n if (typeof input === \"number\") {\n if (!Number.isFinite(input) || input <= 0) throw new Error(`Invalid size: ${input}`);\n return Math.floor(input);\n }\n const m = String(input).trim().toLowerCase().match(/^([0-9]*\\.?[0-9]+)\\s*([a-z]*)$/);\n if (!m) throw new Error(`Cannot parse size: \"${input}\"`);\n const value = parseFloat(m[1]!);\n const unit = m[2] || \"b\";\n const mult = UNITS[unit];\n if (mult == null) throw new Error(`Unknown size unit: \"${unit}\"`);\n return Math.floor(value * mult);\n}\n\n/** Format a byte count as a short human string, e.g. 1536 → \"1.5 KB\". */\nexport function formatBytes(bytes: number, decimals = 1): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let n = bytes / 1024;\n let u = 0;\n while (n >= 1024 && u < units.length - 1) {\n n /= 1024;\n u++;\n }\n return `${n.toFixed(decimals).replace(/\\.0$/, \"\")} ${units[u]}`;\n}\n","/**\n * fit() — encode an image to land at or under a file-size budget.\n *\n * Lossy formats (jpeg/webp): binary-search the quality knob for the highest\n * quality that fits; if even the floor is too big, progressively downscale.\n * Lossless png: quality can't move bytes, so we downscale toward the budget.\n *\n * It is a best-effort ceiling: the result is the closest fit ≤ budget we can\n * reach within the quality/scale bounds (never padded up to the budget).\n */\n\nimport { encode } from \"./encode.js\";\nimport { parseSize } from \"./bytes.js\";\nimport { Surface } from \"./surface.js\";\nimport type { EncodeResult, FitOptions, PixelSource } from \"./types.js\";\n\nfunction toSurface(src: PixelSource): Surface {\n return src instanceof Surface ? src : Surface.from(src);\n}\n\nexport async function fit(source: PixelSource, opts: FitOptions): Promise<EncodeResult> {\n const maxBytes = opts.maxBytes ?? (opts.maxSize != null ? parseSize(opts.maxSize) : undefined);\n if (!maxBytes || maxBytes <= 0) throw new Error(\"fit() needs a positive `maxBytes` or `maxSize`.\");\n\n const { format } = opts;\n const minQuality = opts.minQuality ?? 30;\n const maxQuality = opts.maxQuality ?? 92;\n const allowResize = opts.allowResize ?? true;\n const minScale = opts.minScale ?? 0.35;\n const background = opts.background;\n const base = toSurface(source);\n\n // --- Lossless PNG: combine downscale + colour quantization (posterize) ---\n if (format === \"png\") {\n let best = await encode(base, { format, background });\n if (best.size <= maxBytes) return best;\n if (!allowResize) return best;\n const scales = [1, 0.85, 0.7, 0.55, minScale];\n const bitsSteps = [8, 6, 5, 4, 3, 2]; // 8 = no quantization\n for (const scale of scales) {\n const w = Math.max(1, Math.round(base.width * scale));\n const h = Math.max(1, Math.round(base.height * scale));\n const scaled = scale === 1 ? base : base.resize(w, h);\n for (const bits of bitsSteps) {\n const surf = bits >= 8 ? scaled : scaled.posterize(bits);\n const r = await encode(surf, { format, background });\n if (r.size < best.size) best = r;\n if (r.size <= maxBytes) return r;\n }\n }\n return best; // smallest we could produce (budget genuinely unreachable losslessly)\n }\n\n // --- Lossy jpeg/webp: quality search, then downscale if needed ---\n const qualitySearch = async (surface: Surface): Promise<EncodeResult | null> => {\n let lo = minQuality;\n let hi = maxQuality;\n let best: EncodeResult | null = null;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const r = await encode(surface, { format, quality: mid, background });\n if (r.size <= maxBytes) {\n best = r;\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n return best;\n };\n\n const atFull = await qualitySearch(base);\n if (atFull) return atFull;\n\n if (allowResize) {\n for (let scale = 0.85; scale >= minScale; scale -= 0.12) {\n const w = Math.max(1, Math.round(base.width * scale));\n const h = Math.max(1, Math.round(base.height * scale));\n const found = await qualitySearch(base.resize(w, h));\n if (found) return found;\n }\n // Last resort: smallest scale at the lowest quality.\n const w = Math.max(1, Math.round(base.width * minScale));\n const h = Math.max(1, Math.round(base.height * minScale));\n return encode(base.resize(w, h), { format, quality: minQuality, background });\n }\n\n // No resizing allowed and nothing fit — return the smallest (floor quality).\n return encode(base, { format, quality: minQuality, background });\n}\n","/**\n * SVG → raster. In the browser we draw the SVG onto a canvas (zero-dep). In\n * Node, rich SVG text/paths need a real renderer, so we use an OPTIONAL peer\n * (`sharp`) if it's installed — otherwise we throw a clear, actionable error.\n * This keeps the package itself zero-dependency while still enabling server-side\n * raster for teams that opt in.\n */\n\nimport { Surface } from \"./surface.js\";\nimport type { Color } from \"./types.js\";\n\nexport interface RasterizeSvgOptions {\n width?: number;\n height?: number;\n /** Painted under the SVG (SVGs are transparent by default). */\n background?: Color;\n}\n\nasync function svgToSurfaceBrowser(svg: string, opts: RasterizeSvgOptions): Promise<Surface> {\n const blob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n try {\n const img = await new Promise<HTMLImageElement>((resolve, reject) => {\n const el = new Image();\n el.onload = () => resolve(el);\n el.onerror = () => reject(new Error(\"Failed to load SVG\"));\n el.src = url;\n });\n const w = opts.width ?? img.naturalWidth ?? 512;\n const h = opts.height ?? img.naturalHeight ?? 512;\n const canvas =\n typeof OffscreenCanvas !== \"undefined\"\n ? new OffscreenCanvas(w, h)\n : Object.assign(document.createElement(\"canvas\"), { width: w, height: h });\n const ctx = (canvas as HTMLCanvasElement).getContext(\"2d\");\n if (!ctx) throw new Error(\"No 2D context for SVG rasterization\");\n if (opts.background) {\n ctx.fillStyle = opts.background;\n ctx.fillRect(0, 0, w, h);\n }\n ctx.drawImage(img as unknown as CanvasImageSource, 0, 0, w, h);\n const data = ctx.getImageData(0, 0, w, h);\n return new Surface(w, h, data.data);\n } finally {\n URL.revokeObjectURL(url);\n }\n}\n\nasync function svgToSurfaceNode(svg: string, opts: RasterizeSvgOptions): Promise<Surface> {\n let sharp: undefined | ((input: Buffer) => SharpLike);\n try {\n // @ts-ignore optional peer dependency — may not be installed\n const mod = (await import(\"sharp\")) as unknown as { default: (input: Buffer) => SharpLike };\n sharp = mod.default;\n } catch {\n throw new Error(\n \"SVG rasterization in Node requires the optional peer `sharp`. Install it (npm i sharp) \" +\n \"or run rasterizeSvg() in the browser, where it uses the native Canvas with no extra deps.\",\n );\n }\n let pipe = sharp(Buffer.from(svg));\n if (opts.width || opts.height) pipe = pipe.resize(opts.width, opts.height, { fit: \"fill\" });\n if (opts.background) pipe = pipe.flatten({ background: opts.background });\n const { data, info } = await pipe.ensureAlpha().raw().toBuffer({ resolveWithObject: true });\n return new Surface(info.width, info.height, new Uint8ClampedArray(data));\n}\n\ninterface SharpLike {\n resize(w?: number, h?: number, o?: { fit?: string }): SharpLike;\n flatten(o: { background?: string }): SharpLike;\n ensureAlpha(): SharpLike;\n raw(): SharpLike;\n toBuffer(o: { resolveWithObject: true }): Promise<{ data: Uint8Array; info: { width: number; height: number } }>;\n}\n\n/** Rasterize an SVG string to a Surface (browser: Canvas; Node: optional `sharp`). */\nexport async function rasterizeSvg(svg: string, opts: RasterizeSvgOptions = {}): Promise<Surface> {\n const isNode = typeof process !== \"undefined\" && !!(process as { versions?: { node?: string } }).versions?.node;\n if (!isNode && typeof Image !== \"undefined\") return svgToSurfaceBrowser(svg, opts);\n return svgToSurfaceNode(svg, opts);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lacspace/image",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Generate images without AI — draw gradients, patterns and placeholders, resize, and export to PNG, JPEG, WebP or SVG with an exact file-size budget (KB/MB). Zero-dependency, isomorphic: native Canvas in the browser, pure-JS encoders in Node.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|