create-opentray 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/assets/create-openspec-template-iOS-Dark-1024@1x.png +0 -0
  2. package/assets/create-openspec-template-iOS-Default-1024@1x.png +0 -0
  3. package/assets/inter-glyph.OFL.txt +93 -0
  4. package/assets/inter-glyph.ttf +0 -0
  5. package/dist/{bin-Dyfucd3C.mjs → bin-BQb2Bjcu.mjs} +449 -2787
  6. package/dist/bin-BQb2Bjcu.mjs.map +1 -0
  7. package/dist/bin.mjs +1 -1
  8. package/dist/{decode-ico-D3SL2BXi.mjs → decode-ico-BHd2POHf.mjs} +2 -2
  9. package/dist/{decode-ico-D3SL2BXi.mjs.map → decode-ico-BHd2POHf.mjs.map} +1 -1
  10. package/dist/index.d.mts +40 -6
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +1 -1
  13. package/dist/{raster-BQ07mKLu.mjs → raster-DeMbA2zI.mjs} +15 -16
  14. package/dist/{raster-BQ07mKLu.mjs.map → raster-DeMbA2zI.mjs.map} +1 -1
  15. package/dist/shell/assets/browse.js +1 -1
  16. package/dist/shell/assets/index.css +1 -1
  17. package/dist/shell/assets/index.js +9 -9
  18. package/dist/shell/assets/index2.js +2 -0
  19. package/dist/shell/assets/input.js +1 -1
  20. package/dist/shell/assets/main.js +20 -19
  21. package/dist/shell/assets/ort.bundle.min.js +2763 -0
  22. package/dist/shell/assets/ort.bundle.min.mjs +2817 -0
  23. package/dist/shell/assets/ort.webgpu.bundle.min.js +2763 -0
  24. package/dist/shell/assets/ort.webgpu.bundle.min.mjs +2817 -0
  25. package/dist/shell/assets/terminal-pane.js +1 -1
  26. package/dist/shell/assets/terminal.js +1 -1
  27. package/dist/shell/browse.html +1 -1
  28. package/dist/shell/index.html +1 -1
  29. package/dist/shell/terminal.html +1 -1
  30. package/dist/webui/assets/browse.js +1 -1
  31. package/dist/webui/assets/index.css +1 -1
  32. package/dist/webui/assets/index.js +9 -9
  33. package/dist/webui/assets/index2.js +2 -0
  34. package/dist/webui/assets/input.js +1 -1
  35. package/dist/webui/assets/main.js +20 -19
  36. package/dist/webui/assets/ort.bundle.min.js +2763 -0
  37. package/dist/webui/assets/ort.bundle.min.mjs +2817 -0
  38. package/dist/webui/assets/ort.webgpu.bundle.min.js +2763 -0
  39. package/dist/webui/assets/ort.webgpu.bundle.min.mjs +2817 -0
  40. package/dist/webui/assets/terminal-pane.js +1 -1
  41. package/dist/webui/assets/terminal.js +1 -1
  42. package/dist/webui/browse.html +1 -1
  43. package/dist/webui/index.html +1 -1
  44. package/dist/webui/terminal.html +1 -1
  45. package/package.json +15 -6
  46. package/dist/avif-DCXcyYJR.mjs +0 -2
  47. package/dist/bin-Dyfucd3C.mjs.map +0 -1
  48. package/dist/decode-C4b5NXc_.mjs +0 -1236
  49. package/dist/decode-C4b5NXc_.mjs.map +0 -1
  50. package/dist/decode-Dsj9J0OD.mjs +0 -1214
  51. package/dist/decode-Dsj9J0OD.mjs.map +0 -1
  52. package/dist/decode-FysWS28R.mjs +0 -254
  53. package/dist/decode-FysWS28R.mjs.map +0 -1
  54. package/dist/decode-Xr7mARKr.mjs +0 -1262
  55. package/dist/decode-Xr7mARKr.mjs.map +0 -1
  56. package/dist/full.umd-oM1VUBRH.mjs +0 -3055
  57. package/dist/full.umd-oM1VUBRH.mjs.map +0 -1
  58. package/dist/jpeg-B4tsxG5f.mjs +0 -2
  59. package/dist/png-rD0XEazj.mjs +0 -35
  60. package/dist/png-rD0XEazj.mjs.map +0 -1
  61. package/dist/resize-B47sgoOb.mjs +0 -489
  62. package/dist/resize-B47sgoOb.mjs.map +0 -1
  63. package/dist/resvg-wasm-fcJTLpJs.mjs +0 -522
  64. package/dist/resvg-wasm-fcJTLpJs.mjs.map +0 -1
  65. package/dist/rolldown-runtime-JspESFgx.mjs +0 -35
  66. package/dist/webp-CcbaCrQ7.mjs +0 -2
package/dist/bin.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import { n as openBrowser, r as parseWizardCli, t as main } from "./bin-Dyfucd3C.mjs";
2
+ import { n as openBrowser, r as parseWizardCli, t as main } from "./bin-BQb2Bjcu.mjs";
3
3
  export { main, openBrowser, parseWizardCli };
@@ -1,4 +1,4 @@
1
- import { t as __commonJSMin } from "./rolldown-runtime-JspESFgx.mjs";
1
+ import { I as __commonJSMin } from "./bin-BQb2Bjcu.mjs";
2
2
  //#region ../../node_modules/.pnpm/to-data-view@1.1.0/node_modules/to-data-view/index.js
3
3
  var require_to_data_view = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4
4
  module.exports = function toDataView(data) {
@@ -271,4 +271,4 @@ var require_decode_ico = /* @__PURE__ */ __commonJSMin(((exports, module) => {
271
271
  export default require_decode_ico();
272
272
  export {};
273
273
 
274
- //# sourceMappingURL=decode-ico-D3SL2BXi.mjs.map
274
+ //# sourceMappingURL=decode-ico-BHd2POHf.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode-ico-D3SL2BXi.mjs","names":[],"sources":["../../../node_modules/.pnpm/to-data-view@1.1.0/node_modules/to-data-view/index.js","../../../node_modules/.pnpm/@canvas+image-data@1.1.0/node_modules/@canvas/image-data/index.js","../../../node_modules/.pnpm/decode-bmp@0.2.1/node_modules/decode-bmp/index.js","../../../node_modules/.pnpm/decode-ico@0.4.1/node_modules/decode-ico/index.js"],"sourcesContent":["module.exports = function toDataView (data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {\n return new DataView(data.buffer, data.byteOffset, data.byteLength)\n }\n\n if (data instanceof ArrayBuffer) {\n return new DataView(data)\n }\n\n throw new TypeError('Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray')\n}\n","const widthMap = new WeakMap()\nconst heightMap = new WeakMap()\n\nclass ImageData {\n constructor (width, height, ...args) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'ImageData': 2 arguments required, but only ${arguments.length} present.`)\n }\n\n if (typeof width === 'object') {\n if (!(width instanceof Uint8ClampedArray)) {\n throw new TypeError(\"Failed to construct 'ImageData': parameter 1 is not of type 'Uint8ClampedArray'.\")\n }\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((height * 4) > width.length) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n if ((width.length % 4) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of 4.\")\n }\n\n if ((width.length % (4 * height)) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of (4 * width).\")\n }\n\n if (typeof args[0] !== 'undefined') {\n if (typeof args[0] !== 'number' || args[0] === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n args[0] = args[0] >>> 0\n\n if ((width.length % (4 * height * args[0])) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not equal to (4 * width * height).\")\n }\n }\n\n widthMap.set(this, height)\n heightMap.set(this, typeof args[0] !== 'undefined' ? args[0] : (width.byteLength / height / 4))\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: width, writable: false })\n } else {\n if (typeof width !== 'number' || width === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n width = width >>> 0\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((width * height) >= (1 << 30)) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n widthMap.set(this, width)\n heightMap.set(this, height)\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: new Uint8ClampedArray(width * height * 4), writable: false })\n }\n }\n}\n\nObject.defineProperty(ImageData.prototype, 'width', {\n enumerable: true,\n configurable: true,\n get () { return widthMap.get(this) }\n})\n\nObject.defineProperty(ImageData.prototype, 'height', {\n enumerable: true,\n configurable: true,\n get () { return heightMap.get(this) }\n})\n\nmodule.exports = ImageData\n","const toDataView = require('to-data-view')\nconst ImageData = require('@canvas/image-data')\n\nfunction makeDivisibleByFour (input) {\n const rest = input % 4\n\n return rest ? input + 4 - rest : input\n}\n\nclass Bitmap {\n constructor (data, offset, { width, height, colorDepth, format }) {\n this.format = format\n this.offset = offset\n this.depth = colorDepth\n this.stride = makeDivisibleByFour(width * this.depth / 8)\n this.size = (this.stride * height)\n this.data = data.slice(this.offset, this.offset + this.size)\n\n if (this.size !== this.data.byteLength) {\n throw new Error('Truncated bitmap data')\n }\n }\n\n get (x, y, channel) {\n const idx = this.format.indexOf(channel)\n\n if (this.depth === 1) {\n const slice = this.data[(y * this.stride) + (x / 8 | 0)]\n const mask = 1 << (7 - (x % 8) * 1)\n\n return (slice & mask) >> (7 - (x % 8) * 1)\n }\n\n if (this.depth === 2) {\n const slice = this.data[(y * this.stride) + (x / 4 | 0)]\n const mask = 3 << (6 - (x % 4) * 2)\n\n return (slice & mask) >>> (6 - (x % 4) * 2)\n }\n\n if (this.depth === 4) {\n const slice = this.data[(y * this.stride) + (x / 2 | 0)]\n const mask = 15 << (4 - (x % 2) * 4)\n\n return (slice & mask) >>> (4 - (x % 2) * 4)\n }\n\n return this.data[(y * this.stride) + (x * (this.depth / 8)) + idx]\n }\n}\n\nfunction decodeTrueColorBmp (data, { width, height, colorDepth, icon }) {\n if (colorDepth !== 32 && colorDepth !== 24) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const xor = new Bitmap(data, 0, { width, height, colorDepth, format: 'BGRA' })\n const and = (colorDepth === 24 && icon)\n ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' })\n : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n result[idx++] = xor.get(x, height - y - 1, 'R')\n result[idx++] = xor.get(x, height - y - 1, 'G')\n result[idx++] = xor.get(x, height - y - 1, 'B')\n\n if (colorDepth === 32) {\n result[idx++] = xor.get(x, height - y - 1, 'A')\n } else {\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction decodePaletteBmp (data, { width, height, colorDepth, colorCount, icon }) {\n if (colorDepth !== 8 && colorDepth !== 4 && colorDepth !== 2 && colorDepth !== 1) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const colors = new Bitmap(data, 0, { width: colorCount, height: 1, colorDepth: 32, format: 'BGRA' })\n const xor = new Bitmap(data, colors.offset + colors.size, { width, height, colorDepth, format: 'C' })\n const and = icon ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' }) : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const colorIndex = xor.get(x, height - y - 1, 'C')\n\n result[idx++] = colors.get(colorIndex, 0, 'R')\n result[idx++] = colors.get(colorIndex, 0, 'G')\n result[idx++] = colors.get(colorIndex, 0, 'B')\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction checkMagicBytes (bytes) {\n if (bytes !== 0x4D42) throw new Error(`Invalid magic byte 0x${bytes.toString(16)}`)\n}\n\nmodule.exports = function decodeBmp (source, { width: iconWidth = 0, height: iconHeight = 0, icon = false } = {}) {\n const data = toDataView(source)\n\n let headerSize\n let bitmapWidth\n let bitmapHeight\n let colorDepth\n let colorCount\n\n if (icon) {\n headerSize = data.getUint32(0, true)\n bitmapWidth = (data.getUint32(4, true) / 1) | 0\n bitmapHeight = (data.getUint32(8, true) / 2) | 0\n colorDepth = data.getUint16(14, true)\n colorCount = data.getUint32(32, true)\n } else {\n checkMagicBytes(data.getUint16(0, true))\n headerSize = 14 + data.getUint32(14, true)\n bitmapWidth = data.getUint32(18, true)\n bitmapHeight = data.getUint32(22, true)\n colorDepth = data.getUint16(28, true)\n colorCount = data.getUint32(46, true)\n }\n\n if (colorCount === 0 && colorDepth <= 8) {\n colorCount = (1 << colorDepth)\n }\n\n const width = (bitmapWidth === 0 ? iconWidth : bitmapWidth)\n const height = (bitmapHeight === 0 ? iconHeight : bitmapHeight)\n\n const bitmapData = new Uint8Array(data.buffer, data.byteOffset + headerSize, data.byteLength - headerSize)\n\n const result = colorCount\n ? decodePaletteBmp(bitmapData, { width, height, colorDepth, colorCount, icon })\n : decodeTrueColorBmp(bitmapData, { width, height, colorDepth, icon })\n\n return Object.assign(new ImageData(result, width, height), { colorDepth })\n}\n","const toDataView = require('to-data-view')\nconst decodeBmp = require('decode-bmp')\nconst ImageData = require('@canvas/image-data')\n\nfunction isPng (view, offset) {\n return (view.getUint32(offset + 0) === 0x89504e47 && view.getUint32(offset + 4) === 0x0d0a1a0a)\n}\n\nfunction pngBitsPerPixel (view, offset) {\n const bitDepth = view.getUint8(offset + 24)\n const colorType = view.getUint8(offset + 25)\n\n if (colorType === 0) return bitDepth * 1\n if (colorType === 2) return bitDepth * 3\n if (colorType === 3) return bitDepth * 1\n if (colorType === 4) return bitDepth * 2\n if (colorType === 6) return bitDepth * 4\n\n throw new Error('Invalid PNG colorType')\n}\n\nfunction pngWidth (view, offset) {\n return view.getUint32(offset + 16, false)\n}\n\nfunction pngHeight (view, offset) {\n return view.getUint32(offset + 20, false)\n}\n\nmodule.exports = function decodeIco (input) {\n const view = toDataView(input)\n\n if (view.byteLength < 6) {\n throw new Error('Truncated header')\n }\n\n if (isPng(view, 0)) {\n // the file is actually a png masquerading as an ico\n\n return [{\n bpp: pngBitsPerPixel(view, 0),\n data: new Uint8Array(view.buffer, view.byteOffset, view.byteLength),\n height: pngHeight(view, 0),\n hotspot: null,\n type: 'png',\n width: pngWidth(view, 0)\n }]\n }\n\n if (view.getUint16(0, true) !== 0) {\n throw new Error('Invalid magic bytes')\n }\n\n const type = view.getUint16(2, true)\n\n if (type !== 1 && type !== 2) {\n throw new Error('Invalid image type')\n }\n\n const length = view.getUint16(4, true)\n\n if (view.byteLength < 6 + (16 * length)) {\n throw new Error('Truncated image list')\n }\n\n return Array.from({ length }, (_, idx) => {\n const width = view.getUint8(6 + (16 * idx) + 0)\n const height = view.getUint8(6 + (16 * idx) + 1)\n const size = view.getUint32(6 + (16 * idx) + 8, true)\n const offset = view.getUint32(6 + (16 * idx) + 12, true)\n\n const hotspot = (type !== 2 ? null : {\n x: view.getUint16(6 + (16 * idx) + 4, true),\n y: view.getUint16(6 + (16 * idx) + 6, true)\n })\n\n if (isPng(view, offset)) {\n return {\n bpp: pngBitsPerPixel(view, offset),\n data: new Uint8Array(view.buffer, view.byteOffset + offset, size),\n height: pngHeight(view, offset),\n hotspot,\n type: 'png',\n width: pngWidth(view, offset)\n }\n }\n\n const data = new Uint8Array(view.buffer, view.byteOffset + offset, size)\n const bmp = decodeBmp(data, { width, height, icon: true })\n const info = { bpp: bmp.colorDepth, hotspot, type: 'bmp' }\n\n return Object.assign(new ImageData(bmp.data, bmp.width, bmp.height), info)\n })\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"decode-ico-BHd2POHf.mjs","names":[],"sources":["../../../node_modules/.pnpm/to-data-view@1.1.0/node_modules/to-data-view/index.js","../../../node_modules/.pnpm/@canvas+image-data@1.1.0/node_modules/@canvas/image-data/index.js","../../../node_modules/.pnpm/decode-bmp@0.2.1/node_modules/decode-bmp/index.js","../../../node_modules/.pnpm/decode-ico@0.4.1/node_modules/decode-ico/index.js"],"sourcesContent":["module.exports = function toDataView (data) {\n if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {\n return new DataView(data.buffer, data.byteOffset, data.byteLength)\n }\n\n if (data instanceof ArrayBuffer) {\n return new DataView(data)\n }\n\n throw new TypeError('Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray')\n}\n","const widthMap = new WeakMap()\nconst heightMap = new WeakMap()\n\nclass ImageData {\n constructor (width, height, ...args) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'ImageData': 2 arguments required, but only ${arguments.length} present.`)\n }\n\n if (typeof width === 'object') {\n if (!(width instanceof Uint8ClampedArray)) {\n throw new TypeError(\"Failed to construct 'ImageData': parameter 1 is not of type 'Uint8ClampedArray'.\")\n }\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((height * 4) > width.length) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n if ((width.length % 4) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of 4.\")\n }\n\n if ((width.length % (4 * height)) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not a multiple of (4 * width).\")\n }\n\n if (typeof args[0] !== 'undefined') {\n if (typeof args[0] !== 'number' || args[0] === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n args[0] = args[0] >>> 0\n\n if ((width.length % (4 * height * args[0])) !== 0) {\n throw new Error(\"Failed to construct 'ImageData': The input data length is not equal to (4 * width * height).\")\n }\n }\n\n widthMap.set(this, height)\n heightMap.set(this, typeof args[0] !== 'undefined' ? args[0] : (width.byteLength / height / 4))\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: width, writable: false })\n } else {\n if (typeof width !== 'number' || width === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source width is zero or not a number.\")\n }\n\n width = width >>> 0\n\n if (typeof height !== 'number' || height === 0) {\n throw new Error(\"Failed to construct 'ImageData': The source height is zero or not a number.\")\n }\n\n height = height >>> 0\n\n if ((width * height) >= (1 << 30)) {\n throw new Error(\"Failed to construct 'ImageData': The requested image size exceeds the supported range.\")\n }\n\n widthMap.set(this, width)\n heightMap.set(this, height)\n Object.defineProperty(this, 'data', { configurable: true, enumerable: true, value: new Uint8ClampedArray(width * height * 4), writable: false })\n }\n }\n}\n\nObject.defineProperty(ImageData.prototype, 'width', {\n enumerable: true,\n configurable: true,\n get () { return widthMap.get(this) }\n})\n\nObject.defineProperty(ImageData.prototype, 'height', {\n enumerable: true,\n configurable: true,\n get () { return heightMap.get(this) }\n})\n\nmodule.exports = ImageData\n","const toDataView = require('to-data-view')\nconst ImageData = require('@canvas/image-data')\n\nfunction makeDivisibleByFour (input) {\n const rest = input % 4\n\n return rest ? input + 4 - rest : input\n}\n\nclass Bitmap {\n constructor (data, offset, { width, height, colorDepth, format }) {\n this.format = format\n this.offset = offset\n this.depth = colorDepth\n this.stride = makeDivisibleByFour(width * this.depth / 8)\n this.size = (this.stride * height)\n this.data = data.slice(this.offset, this.offset + this.size)\n\n if (this.size !== this.data.byteLength) {\n throw new Error('Truncated bitmap data')\n }\n }\n\n get (x, y, channel) {\n const idx = this.format.indexOf(channel)\n\n if (this.depth === 1) {\n const slice = this.data[(y * this.stride) + (x / 8 | 0)]\n const mask = 1 << (7 - (x % 8) * 1)\n\n return (slice & mask) >> (7 - (x % 8) * 1)\n }\n\n if (this.depth === 2) {\n const slice = this.data[(y * this.stride) + (x / 4 | 0)]\n const mask = 3 << (6 - (x % 4) * 2)\n\n return (slice & mask) >>> (6 - (x % 4) * 2)\n }\n\n if (this.depth === 4) {\n const slice = this.data[(y * this.stride) + (x / 2 | 0)]\n const mask = 15 << (4 - (x % 2) * 4)\n\n return (slice & mask) >>> (4 - (x % 2) * 4)\n }\n\n return this.data[(y * this.stride) + (x * (this.depth / 8)) + idx]\n }\n}\n\nfunction decodeTrueColorBmp (data, { width, height, colorDepth, icon }) {\n if (colorDepth !== 32 && colorDepth !== 24) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const xor = new Bitmap(data, 0, { width, height, colorDepth, format: 'BGRA' })\n const and = (colorDepth === 24 && icon)\n ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' })\n : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n result[idx++] = xor.get(x, height - y - 1, 'R')\n result[idx++] = xor.get(x, height - y - 1, 'G')\n result[idx++] = xor.get(x, height - y - 1, 'B')\n\n if (colorDepth === 32) {\n result[idx++] = xor.get(x, height - y - 1, 'A')\n } else {\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction decodePaletteBmp (data, { width, height, colorDepth, colorCount, icon }) {\n if (colorDepth !== 8 && colorDepth !== 4 && colorDepth !== 2 && colorDepth !== 1) {\n throw new Error(`A color depth of ${colorDepth} is not supported`)\n }\n\n const colors = new Bitmap(data, 0, { width: colorCount, height: 1, colorDepth: 32, format: 'BGRA' })\n const xor = new Bitmap(data, colors.offset + colors.size, { width, height, colorDepth, format: 'C' })\n const and = icon ? new Bitmap(data, xor.offset + xor.size, { width, height, colorDepth: 1, format: 'A' }) : null\n\n const result = new Uint8Array(width * height * 4)\n\n let idx = 0\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const colorIndex = xor.get(x, height - y - 1, 'C')\n\n result[idx++] = colors.get(colorIndex, 0, 'R')\n result[idx++] = colors.get(colorIndex, 0, 'G')\n result[idx++] = colors.get(colorIndex, 0, 'B')\n result[idx++] = and && and.get(x, height - y - 1, 'A') ? 0 : 255\n }\n }\n\n return new Uint8ClampedArray(result.buffer, result.byteOffset, result.byteLength)\n}\n\nfunction checkMagicBytes (bytes) {\n if (bytes !== 0x4D42) throw new Error(`Invalid magic byte 0x${bytes.toString(16)}`)\n}\n\nmodule.exports = function decodeBmp (source, { width: iconWidth = 0, height: iconHeight = 0, icon = false } = {}) {\n const data = toDataView(source)\n\n let headerSize\n let bitmapWidth\n let bitmapHeight\n let colorDepth\n let colorCount\n\n if (icon) {\n headerSize = data.getUint32(0, true)\n bitmapWidth = (data.getUint32(4, true) / 1) | 0\n bitmapHeight = (data.getUint32(8, true) / 2) | 0\n colorDepth = data.getUint16(14, true)\n colorCount = data.getUint32(32, true)\n } else {\n checkMagicBytes(data.getUint16(0, true))\n headerSize = 14 + data.getUint32(14, true)\n bitmapWidth = data.getUint32(18, true)\n bitmapHeight = data.getUint32(22, true)\n colorDepth = data.getUint16(28, true)\n colorCount = data.getUint32(46, true)\n }\n\n if (colorCount === 0 && colorDepth <= 8) {\n colorCount = (1 << colorDepth)\n }\n\n const width = (bitmapWidth === 0 ? iconWidth : bitmapWidth)\n const height = (bitmapHeight === 0 ? iconHeight : bitmapHeight)\n\n const bitmapData = new Uint8Array(data.buffer, data.byteOffset + headerSize, data.byteLength - headerSize)\n\n const result = colorCount\n ? decodePaletteBmp(bitmapData, { width, height, colorDepth, colorCount, icon })\n : decodeTrueColorBmp(bitmapData, { width, height, colorDepth, icon })\n\n return Object.assign(new ImageData(result, width, height), { colorDepth })\n}\n","const toDataView = require('to-data-view')\nconst decodeBmp = require('decode-bmp')\nconst ImageData = require('@canvas/image-data')\n\nfunction isPng (view, offset) {\n return (view.getUint32(offset + 0) === 0x89504e47 && view.getUint32(offset + 4) === 0x0d0a1a0a)\n}\n\nfunction pngBitsPerPixel (view, offset) {\n const bitDepth = view.getUint8(offset + 24)\n const colorType = view.getUint8(offset + 25)\n\n if (colorType === 0) return bitDepth * 1\n if (colorType === 2) return bitDepth * 3\n if (colorType === 3) return bitDepth * 1\n if (colorType === 4) return bitDepth * 2\n if (colorType === 6) return bitDepth * 4\n\n throw new Error('Invalid PNG colorType')\n}\n\nfunction pngWidth (view, offset) {\n return view.getUint32(offset + 16, false)\n}\n\nfunction pngHeight (view, offset) {\n return view.getUint32(offset + 20, false)\n}\n\nmodule.exports = function decodeIco (input) {\n const view = toDataView(input)\n\n if (view.byteLength < 6) {\n throw new Error('Truncated header')\n }\n\n if (isPng(view, 0)) {\n // the file is actually a png masquerading as an ico\n\n return [{\n bpp: pngBitsPerPixel(view, 0),\n data: new Uint8Array(view.buffer, view.byteOffset, view.byteLength),\n height: pngHeight(view, 0),\n hotspot: null,\n type: 'png',\n width: pngWidth(view, 0)\n }]\n }\n\n if (view.getUint16(0, true) !== 0) {\n throw new Error('Invalid magic bytes')\n }\n\n const type = view.getUint16(2, true)\n\n if (type !== 1 && type !== 2) {\n throw new Error('Invalid image type')\n }\n\n const length = view.getUint16(4, true)\n\n if (view.byteLength < 6 + (16 * length)) {\n throw new Error('Truncated image list')\n }\n\n return Array.from({ length }, (_, idx) => {\n const width = view.getUint8(6 + (16 * idx) + 0)\n const height = view.getUint8(6 + (16 * idx) + 1)\n const size = view.getUint32(6 + (16 * idx) + 8, true)\n const offset = view.getUint32(6 + (16 * idx) + 12, true)\n\n const hotspot = (type !== 2 ? null : {\n x: view.getUint16(6 + (16 * idx) + 4, true),\n y: view.getUint16(6 + (16 * idx) + 6, true)\n })\n\n if (isPng(view, offset)) {\n return {\n bpp: pngBitsPerPixel(view, offset),\n data: new Uint8Array(view.buffer, view.byteOffset + offset, size),\n height: pngHeight(view, offset),\n hotspot,\n type: 'png',\n width: pngWidth(view, offset)\n }\n }\n\n const data = new Uint8Array(view.buffer, view.byteOffset + offset, size)\n const bmp = decodeBmp(data, { width, height, icon: true })\n const info = { bpp: bmp.colorDepth, hotspot, type: 'bmp' }\n\n return Object.assign(new ImageData(bmp.data, bmp.width, bmp.height), info)\n })\n}\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -128,8 +128,9 @@ interface PortDiscoverySession {
128
128
  declare const createPortDiscovery: (options: PortDiscoveryOptions) => PortDiscoverySession;
129
129
  //#endregion
130
130
  //#region packages/core/src/scrape.d.ts
131
- /** Variant tag: the original art, or a solid-color silhouette derived from it. */
132
- type IconVariant = "original" | "solid-black" | "solid-white";
131
+ /** Variant tag: the original art, a solid-color silhouette derived from it,
132
+ * or an AI subject-extraction derived by the wizard's browser client. */
133
+ type IconVariant = "original" | "solid-black" | "solid-white" | "subject";
133
134
  /** One scraped icon candidate, ranked and deduplicated. */
134
135
  interface ScrapedIcon {
135
136
  /** Index within the candidate list (stable for /api/icon-data/:port/:index). */
@@ -310,6 +311,11 @@ interface CommandRunEvent {
310
311
  readonly chunk?: string;
311
312
  readonly code?: number | null;
312
313
  readonly message?: string;
314
+ /**
315
+ * Stable machine code for pty-unavailable events so consumers can localize
316
+ * (and detect) the reason without parsing the human-readable message.
317
+ */
318
+ readonly reason?: "pty_bun_terminal_missing" | "pty_node_pty_missing";
313
319
  }
314
320
  interface CommandRunTerminalSize {
315
321
  readonly cols: number;
@@ -341,6 +347,10 @@ interface CommandRun {
341
347
  }
342
348
  declare const startCommandRun: (options: CommandRunOptions) => Promise<CommandRun>;
343
349
  //#endregion
350
+ //#region packages/core/src/user-messages.d.ts
351
+ declare const UI_LOCALES: readonly ["zh-CN", "ja", "ko", "en", "ar", "fr", "es", "de", "ru"];
352
+ type UiLocale = (typeof UI_LOCALES)[number];
353
+ //#endregion
344
354
  //#region packages/core/src/open-app.d.ts
345
355
  interface OpenAppInput {
346
356
  readonly projectDir: string;
@@ -352,8 +362,12 @@ interface OpenAppResult {
352
362
  readonly detail: string;
353
363
  }
354
364
  declare const openMaterializedApp: (input: OpenAppInput) => Promise<OpenAppResult>;
355
- /** Platform-truthful pinning hint; makes no persistence claim before first open. */
356
- declare const pinningHint: (platform?: NodeJS.Platform) => string;
365
+ /**
366
+ * Platform-truthful pinning hint; makes no persistence claim before first
367
+ * open. `locale` localizes the wizard/webui projection; the default keeps
368
+ * direct core consumers (CLI) on their historical output.
369
+ */
370
+ declare const pinningHint: (platform?: NodeJS.Platform, locale?: UiLocale) => string;
357
371
  //#endregion
358
372
  //#region packages/core/src/scaffold.d.ts
359
373
  interface ScaffoldAppConfig {
@@ -580,6 +594,10 @@ type WizardEvent = {
580
594
  readonly type: "icons";
581
595
  readonly port: number;
582
596
  readonly icons: readonly ScrapedIcon[];
597
+ /** Bumps on every scrape-side REPLACEMENT of the list (not appends):
598
+ * indexes restart from zero per scrape, so clients keying per-candidate
599
+ * work (e.g. subject extraction) need this to tell generations apart. */
600
+ readonly generation: number;
583
601
  } | {
584
602
  readonly type: "form";
585
603
  readonly values: WizardFormValues;
@@ -610,7 +628,8 @@ type WizardEvent = {
610
628
  readonly services: readonly DiscoveredService[];
611
629
  readonly selectedPort?: number | undefined;
612
630
  readonly iconCandidates: readonly ScrapedIcon[];
613
- readonly iconsPort?: number | undefined;
631
+ readonly iconsPort?: number | undefined; /** Scrape-generation counter carried by icons events and snapshots. */
632
+ readonly iconsGeneration: number;
614
633
  readonly interactive: boolean;
615
634
  };
616
635
  interface WizardOptions {
@@ -663,6 +682,17 @@ interface WizardSession {
663
682
  selectTrayIconCandidate(port: number, index: number): boolean;
664
683
  /** Test/extension seam: replace the scraped candidate set for a port. */
665
684
  replaceIconCandidates(port: number, icons: readonly ScrapedIcon[]): void;
685
+ /** Append a wizard-derived candidate (e.g. browser-side subject extraction)
686
+ * for the port the current candidates belong to; bytes land in the
687
+ * session-owned temp dir so icon routes keep serving them. Returns the
688
+ * appended candidate, or undefined when the port/state rejects it. */
689
+ addIconCandidate(port: number, candidate: {
690
+ readonly bytes: Buffer;
691
+ readonly variantOf: number;
692
+ readonly width: number;
693
+ readonly height: number;
694
+ readonly format: string;
695
+ }): Promise<ScrapedIcon | undefined>;
666
696
  /** Compose the app icon preview/asset for the current foreground. */
667
697
  composeIcon(options: {
668
698
  foregroundPath: string;
@@ -679,6 +709,8 @@ interface WizardSession {
679
709
  analyzeIconForeground(foregroundPath: string): Promise<WizardIconAnalysis>;
680
710
  readonly form: WizardFormValues;
681
711
  readonly result: MaterializeResult | undefined;
712
+ /** Adopt the webui's locale for every user-facing string this session emits. */
713
+ setLocale(locale: UiLocale): void;
682
714
  /** Whole-session state for reconnecting clients (page refresh recovery). */
683
715
  snapshot(): WizardEvent;
684
716
  /** String form is tokenized; array form is taken as argv verbatim (array
@@ -748,7 +780,9 @@ interface WizardServerHandle {
748
780
  close(): Promise<void>;
749
781
  }
750
782
  declare const createWizardServer: (createSession: (emit: (event: WizardEvent) => void) => WizardSession, options?: {
751
- readonly port?: number;
783
+ readonly port?: number; /** Test seam: upstream dist base for the model proxy (default: IMG.LY CDN). */
784
+ readonly imglyUpstream?: (version: string) => string; /** Test seam: disk cache root (default: ~/.opentray/cache/imgly-data). */
785
+ readonly imglyCacheRoot?: string;
752
786
  }) => Promise<WizardServerHandle>;
753
787
  declare const isAuthorized: (request: IncomingMessage, url: URL, token: string) => boolean;
754
788
  declare const isLoopbackHost: (request: IncomingMessage) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../packages/core/src/app-id.ts","../packages/core/src/command-family.ts","../packages/core/src/launch-vector.ts","../packages/core/src/tokenize.ts","../packages/core/src/port-scan.ts","../packages/core/src/scrape.ts","../../icon/src/generate.ts","../../icon/src/default-icon.ts","../../icon/src/compose.ts","../packages/core/src/command-run.ts","../packages/core/src/open-app.ts","../packages/core/src/scaffold.ts","../packages/core/src/materialize.ts","../src/wizard.ts","../src/server.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../packages/core/src/app-id.ts","../packages/core/src/command-family.ts","../packages/core/src/launch-vector.ts","../packages/core/src/tokenize.ts","../packages/core/src/port-scan.ts","../packages/core/src/scrape.ts","../../icon/src/generate.ts","../../icon/src/default-icon.ts","../../icon/src/compose.ts","../packages/core/src/command-run.ts","../packages/core/src/user-messages.ts","../packages/core/src/open-app.ts","../packages/core/src/scaffold.ts","../packages/core/src/materialize.ts","../src/wizard.ts","../src/server.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { A as resolveOnPath, C as parseNetstatPorts, D as waitForTcpPort, E as verifyHttpService, F as toProjectDirectoryName, M as deriveDefaultAppId, N as deriveDefaultAppName, O as parseShebangInterpreter, P as isValidAppId, S as parseLsofPorts, T as serviceUrl, _ as faviconCandidateSize, a as isAuthorized, b as scrapeService, c as openMaterializedApp, d as expectedDarwinBundlePath, f as isDirectoryOccupied, g as extractTitle, h as extractFaviconCandidates, i as createWizardServer, j as tokenizeCommandLine, k as resolveLaunchVector, l as pinningHint, m as writeScaffold, o as isLoopbackHost, p as materialize, r as parseWizardCli, s as createWizardSession, t as main, u as detectPackageManager, v as rankFaviconCandidates, w as parsePowerShellPorts, x as createPortDiscovery, y as resolveFaviconUrl } from "./bin-Dyfucd3C.mjs";
1
+ import { A as resolveOnPath, C as parseNetstatPorts, D as waitForTcpPort, E as verifyHttpService, F as toProjectDirectoryName, M as deriveDefaultAppId, N as deriveDefaultAppName, O as parseShebangInterpreter, P as isValidAppId, S as parseLsofPorts, T as serviceUrl, _ as faviconCandidateSize, a as isAuthorized, b as scrapeService, c as openMaterializedApp, d as expectedDarwinBundlePath, f as isDirectoryOccupied, g as extractTitle, h as extractFaviconCandidates, i as createWizardServer, j as tokenizeCommandLine, k as resolveLaunchVector, l as pinningHint, m as writeScaffold, o as isLoopbackHost, p as materialize, r as parseWizardCli, s as createWizardSession, t as main, u as detectPackageManager, v as rankFaviconCandidates, w as parsePowerShellPorts, x as createPortDiscovery, y as resolveFaviconUrl } from "./bin-BQb2Bjcu.mjs";
2
2
  export { createPortDiscovery, createWizardServer, createWizardSession, deriveDefaultAppId, deriveDefaultAppName, detectPackageManager, expectedDarwinBundlePath, extractFaviconCandidates, extractTitle, faviconCandidateSize, isAuthorized, isDirectoryOccupied, isLoopbackHost, isValidAppId, materialize, openMaterializedApp, parseLsofPorts, parseNetstatPorts, parsePowerShellPorts, parseShebangInterpreter, parseWizardCli, pinningHint, rankFaviconCandidates, resolveFaviconUrl, resolveLaunchVector, resolveOnPath, main as runWizardMain, scrapeService, serviceUrl, toProjectDirectoryName, tokenizeCommandLine, verifyHttpService, waitForTcpPort, writeScaffold };
@@ -1,4 +1,3 @@
1
- import { i as __toESM } from "./rolldown-runtime-JspESFgx.mjs";
2
1
  import { createRequire } from "node:module";
3
2
  import { readFile, readdir } from "node:fs/promises";
4
3
  import { homedir, platform } from "node:os";
@@ -198,7 +197,7 @@ let resvgReady;
198
197
  /** PNG decode/encode (shared wasm instance between decode and encode). */
199
198
  const loadPng = () => {
200
199
  pngReady ??= (async () => {
201
- const { init } = await import("./decode-FysWS28R.mjs");
200
+ const { init } = await import("@jsquash/png/decode.js");
202
201
  await init(readWasm("@jsquash/png/codec/pkg/squoosh_png_bg.wasm"));
203
202
  })();
204
203
  return pngReady;
@@ -206,7 +205,7 @@ const loadPng = () => {
206
205
  /** Lanczos/other resize kernels. */
207
206
  const loadResize = () => {
208
207
  resizeReady ??= (async () => {
209
- const { initResize } = await import("./resize-B47sgoOb.mjs");
208
+ const { initResize } = await import("@jsquash/resize");
210
209
  await initResize(readWasm("@jsquash/resize/lib/resize/pkg/squoosh_resize_bg.wasm"));
211
210
  })();
212
211
  return resizeReady;
@@ -214,7 +213,7 @@ const loadResize = () => {
214
213
  /** SVG rasterizer. */
215
214
  const loadResvg = () => {
216
215
  resvgReady ??= (async () => {
217
- const { initWasm } = await import("./resvg-wasm-fcJTLpJs.mjs");
216
+ const { initWasm } = await import("@resvg/resvg-wasm");
218
217
  await initWasm(readWasm("@resvg/resvg-wasm/index_bg.wasm"));
219
218
  })();
220
219
  return resvgReady;
@@ -222,7 +221,7 @@ const loadResvg = () => {
222
221
  /** Decode a PNG to RGBA pixels. */
223
222
  const decodePng = async (bytes) => {
224
223
  await loadPng();
225
- const { decode } = await import("./png-rD0XEazj.mjs");
224
+ const { decode } = await import("@jsquash/png");
226
225
  const buffer = new ArrayBuffer(bytes.byteLength);
227
226
  new Uint8Array(buffer).set(bytes);
228
227
  const decoded = await decode(buffer);
@@ -232,7 +231,7 @@ const decodePng = async (bytes) => {
232
231
  /** Encode RGBA pixels to PNG bytes (no density metadata; see encode.ts pHYs). */
233
232
  const encodePng = async (image) => {
234
233
  await loadPng();
235
- const { encode } = await import("./png-rD0XEazj.mjs");
234
+ const { encode } = await import("@jsquash/png");
236
235
  return new Uint8Array(await encode(image));
237
236
  };
238
237
  //#endregion
@@ -259,7 +258,7 @@ const sniffFormat = (bytes) => {
259
258
  /** JPEG EXIF orientation (1–8); non-JPEG and missing tags report 1. */
260
259
  const exifOrientationOf = async (format, bytes) => {
261
260
  if (format !== "jpeg") return 1;
262
- const imported = await import("./full.umd-oM1VUBRH.mjs").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
261
+ const imported = await import("exifr");
263
262
  const orientation = (imported.default ?? imported).orientation;
264
263
  return await orientation(bytes) ?? 1;
265
264
  };
@@ -322,21 +321,21 @@ const decodeImage = async (bytes) => {
322
321
  switch (format) {
323
322
  case "png": return decodePng(bytes);
324
323
  case "jpeg": {
325
- const { init } = await import("./decode-Xr7mARKr.mjs");
324
+ const { init } = await import("@jsquash/jpeg/decode.js");
326
325
  await init(readModule("@jsquash/jpeg/codec/dec/mozjpeg_dec.wasm"));
327
- const { decode } = await import("./jpeg-B4tsxG5f.mjs");
326
+ const { decode } = await import("@jsquash/jpeg");
328
327
  return orThrow("JPEG", await decode(toExactBuffer(bytes)));
329
328
  }
330
329
  case "webp": {
331
- const { init } = await import("./decode-C4b5NXc_.mjs");
330
+ const { init } = await import("@jsquash/webp/decode.js");
332
331
  await init(readModule("@jsquash/webp/codec/dec/webp_dec.wasm"));
333
- const { decode } = await import("./webp-CcbaCrQ7.mjs");
332
+ const { decode } = await import("@jsquash/webp");
334
333
  return orThrow("WebP", await decode(toExactBuffer(bytes)));
335
334
  }
336
335
  case "avif": {
337
- const { init } = await import("./decode-Dsj9J0OD.mjs");
336
+ const { init } = await import("@jsquash/avif/decode.js");
338
337
  await init(readModule("@jsquash/avif/codec/dec/avif_dec.wasm"));
339
- const { decode } = await import("./avif-DCXcyYJR.mjs");
338
+ const { decode } = await import("@jsquash/avif");
340
339
  return orThrow("AVIF", await decode(toExactBuffer(bytes)));
341
340
  }
342
341
  case "svg": return rasterizeSvg(new TextDecoder().decode(bytes), 1024);
@@ -359,7 +358,7 @@ const decodeImageFile = async (path) => decodeImage(new Uint8Array(await readFil
359
358
  /** Rasterize an SVG string with the kernel font ladder attached. */
360
359
  const rasterizeSvg = async (svg, width) => {
361
360
  await loadResvg();
362
- const { Resvg } = await import("./resvg-wasm-fcJTLpJs.mjs");
361
+ const { Resvg } = await import("@resvg/resvg-wasm");
363
362
  const rendered = new Resvg(svg, {
364
363
  fitTo: {
365
364
  mode: "width",
@@ -381,7 +380,7 @@ const encodeImagePng = (image) => encodePng(image);
381
380
  */
382
381
  const resizeImage = async (image, width, height, method = "lanczos3") => {
383
382
  if (image.width === width && image.height === height) return imageOf(image);
384
- const { default: resize } = await import("./resize-B47sgoOb.mjs");
383
+ const { default: resize } = await import("@jsquash/resize");
385
384
  await loadResize();
386
385
  if (method === "nearest") return resizeNearest(image, width, height);
387
386
  return resize(image, {
@@ -490,4 +489,4 @@ const brightPixelRatio = (image, alphaThreshold = 200, brightness = 230) => {
490
489
  //#endregion
491
490
  export { assetsDirectory as _, decodeImage as a, encodeImagePng as c, rasterizeSvg as d, resizeImage as f, glyphLadderFingerprint as g, embeddedGlyphFont as h, cropImage as i, insideImage as l, GLYPH_FONT_FAMILY as m, cloneImage as n, decodeImageFile as o, trimBounds as p, containImage as r, emptyImageOf as s, brightPixelRatio as t, pasteImage as u };
492
491
 
493
- //# sourceMappingURL=raster-BQ07mKLu.mjs.map
492
+ //# sourceMappingURL=raster-DeMbA2zI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"raster-BQ07mKLu.mjs","names":[],"sources":["../../icon/src/assets.ts","../../icon/src/fonts.ts","../../icon/src/types.ts","../../icon/src/wasm.ts","../../icon/src/raster.ts"],"sourcesContent":["/**\n * Bundled asset resolution. Assets live at the package root (`assets/`),\n * exactly one level above both `src/` (source checkout) and `dist/` (built\n * output), so the resolution is uniform: package.json `files` ships both\n * `dist` and `assets`.\n */\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport const assetsDirectory = (): string =>\n join(moduleDirectory, \"..\", \"assets\");\n","/**\n * Glyph font ladder (plan D5; spike-verified): the WASM rasterizer cannot\n * autoload system fonts, and `loadSystemFonts: true` silently drops text, so\n * every render must pass explicit `fontBuffers`:\n *\n * 1. the embedded OFL subset (deterministic Latin rendering everywhere), then\n * 2. a bounded, ranked scan of well-known OS font directories (CJK and other\n * scripts beyond the embedded subset).\n *\n * Rendering quality is verified empirically downstream (text-presence pixel\n * check in default-icon.ts) — the ladder never silently accepts a blank tile.\n */\nimport { readdir, readFile } from \"node:fs/promises\";\nimport type { Dirent } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { assetsDirectory } from \"./assets\";\n\n/** Family name referenced by generated glyph SVG text elements. */\nexport const GLYPH_FONT_FAMILY = \"OpenTray Glyph\";\n\n/**\n * Preferred font basenames, highest priority first. CJK-capable fonts lead:\n * the embedded subset already covers Latin, so discovery exists for wider\n * scripts. UI fonts follow so headless Linux still finds a fallback.\n */\nconst PREFERRED_PATTERNS: readonly RegExp[] = [\n /pingfang|stheiti|hiragino|songti|heiti|kaiti|yuanti/i,\n /sourcehan|source-han|noto.{0,12}(cjk|sc|tc|jp|kr)|wqy|droidsansfallback/i,\n /msyh|msjh|simsun|simhei|simkai|simfang|deng/i,\n /segoeui|arial|helvetica|liberationsans|dejavusans|roboto-regular|ubuntu-regular/i,\n];\n\nconst FONT_EXTENSIONS = new Set([\".ttf\", \".otf\", \".ttc\", \".otc\"]);\n/** Discovery caps: glyph generation reads fonts once per cache miss. */\nconst MAX_FONT_FILES = 10;\nconst MAX_TOTAL_BYTES = 192 * 1024 * 1024;\n\nconst systemFontDirectories = (): readonly string[] => {\n const home = homedir();\n switch (platform()) {\n case \"darwin\":\n return [\n \"/System/Library/Fonts\",\n \"/System/Library/Fonts/Supplemental\",\n \"/Library/Fonts\",\n join(home, \"Library\", \"Fonts\"),\n ];\n case \"win32\":\n return [\n join(process.env.SystemRoot ?? \"C:\\\\Windows\", \"Fonts\"),\n join(\n process.env.LOCALAPPDATA ?? join(home, \"AppData\", \"Local\"),\n \"Microsoft\",\n \"Windows\",\n \"Fonts\",\n ),\n ];\n default:\n return [\n \"/usr/share/fonts\",\n \"/usr/local/share/fonts\",\n join(home, \".local\", \"share\", \"fonts\"),\n join(home, \".fonts\"),\n ];\n }\n};\n\nconst listFontFiles = async (\n directory: string,\n depth = 2,\n): Promise<readonly string[]> => {\n const found: string[] = [];\n let entries: readonly Dirent[];\n try {\n entries = await readdir(directory, { withFileTypes: true });\n } catch {\n return found;\n }\n for (const entry of entries) {\n const entryPath = join(directory, entry.name);\n if (entry.isDirectory() && depth > 0) {\n found.push(...(await listFontFiles(entryPath, depth - 1)));\n } else if (entry.isFile() && FONT_EXTENSIONS.has(extOf(entry.name))) {\n found.push(entryPath);\n }\n }\n return found;\n};\n\nconst extOf = (name: string): string => {\n const dot = name.lastIndexOf(\".\");\n return dot === -1 ? \"\" : name.slice(dot).toLowerCase();\n};\n\nconst priorityOf = (path: string): number => {\n for (let index = 0; index < PREFERRED_PATTERNS.length; index += 1) {\n if (PREFERRED_PATTERNS[index]!.test(path)) return index;\n }\n return PREFERRED_PATTERNS.length;\n};\n\nconst cache = new Map<string, Uint8Array>();\n\n/** Embedded OFL subset bytes (Inter SemiBold, latin; see assets/*.OFL.txt). */\nexport const embeddedGlyphFont = async (): Promise<Uint8Array> => {\n const path = join(assetsDirectory(), \"inter-glyph.ttf\");\n const cached = cache.get(path);\n if (cached !== undefined) return cached;\n const bytes = new Uint8Array(await readFile(path));\n cache.set(path, bytes);\n return bytes;\n};\n\nlet ladderPromise: Promise<readonly Uint8Array[]> | undefined;\nlet ladderFingerprintPromise: Promise<string> | undefined;\n\n/**\n * Stable identity of the discovered ladder (path + byte length pairs): OS\n * font changes invalidate generated-icon caches without hashing font bytes.\n */\nexport const glyphLadderFingerprint = (): Promise<string> => {\n ladderFingerprintPromise ??= (async () => {\n const parts: string[] = [];\n for (const buffer of await glyphFontLadder()) {\n parts.push(`${buffer.byteLength}`);\n }\n return parts.join(\",\");\n })();\n return ladderFingerprintPromise;\n};\n\n/**\n * The full font ladder for resvg `fontBuffers`: embedded subset first, then a\n * bounded ranked selection from the OS. Deterministic order, memoized.\n */\nexport const glyphFontLadder = (): Promise<readonly Uint8Array[]> => {\n ladderPromise ??= (async () => {\n const embedded = await embeddedGlyphFont();\n const candidates: { path: string; priority: number }[] = [];\n for (const directory of systemFontDirectories()) {\n for (const path of await listFontFiles(directory)) {\n candidates.push({ path, priority: priorityOf(path) });\n }\n }\n candidates.sort(\n (a, b) => a.priority - b.priority || (a.path < b.path ? -1 : 1),\n );\n const buffers: Uint8Array[] = [embedded];\n let total = embedded.byteLength;\n for (const { path } of candidates) {\n if (buffers.length >= MAX_FONT_FILES || total >= MAX_TOTAL_BYTES) break;\n const cached = cache.get(path);\n if (cached !== undefined) {\n buffers.push(cached);\n total += cached.byteLength;\n continue;\n }\n try {\n const bytes = new Uint8Array(await readFile(path));\n cache.set(path, bytes);\n buffers.push(bytes);\n total += bytes.byteLength;\n } catch {\n // Unreadable font files are skipped; the ladder degrades gracefully.\n }\n }\n return buffers;\n })();\n return ladderPromise;\n};\n\n/** Test hook: forget memoized font state. */\nexport const resetGlyphFontCache = (): void => {\n cache.clear();\n ladderPromise = undefined;\n};\n","/**\n * Shared value types for the icon kernel.\n *\n * `ImageData` (the one browser type the WASM codecs exchange) resolves from\n * the DOM lib that the codec `.d.ts` files pull into the program; at RUNTIME\n * Node has no global `ImageData` constructor until a codec's glue polyfills\n * it. The kernel therefore never calls the constructor — it builds plain\n * structural objects through `makeImage`, which satisfies the same interface\n * on every runtime (Node, Bun, browsers).\n */\nexport type ImageDataLike = ImageData;\n\nexport const makeImage = (\n data: Uint8ClampedArray<ArrayBuffer>,\n width: number,\n height: number,\n): ImageDataLike => ({ data, width, height, colorSpace: \"srgb\" });\n","/**\n * Lazy WASM bootstrap for the kernel's image stack (spike-verified\n * 2026-09-09, demos/wasm-spike):\n *\n * - jsquash v3 codecs auto-`init()` through `fetch(new URL(...))` which Node\n * rejects for file URLs. The only reliable Node path is pre-initializing\n * with the wasm bytes read from disk, via each codec's subpath export.\n * - `@resvg/resvg-wasm` cannot load system fonts in a WASM environment; text\n * must arrive as explicit `fontBuffers` (see fonts.ts). `loadSystemFonts`\n * stays false everywhere — with it true, resvg silently drops text.\n *\n * Every loader is a memoized singleton so repeated generation calls pay the\n * wasm handshake once per process. Initialization failure throws a typed\n * error; callers (runtime daemon, build tools) decide their own fallback.\n */\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\n\nimport type { ImageDataLike } from \"./types\";\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Exact-typed wasm bytes (TS 5.7 typed-array variance: a fresh copy over a\n * plain `ArrayBuffer` keeps codec signatures satisfied without casts).\n */\nconst readWasm = (request: string): Uint8Array<ArrayBuffer> => {\n const bytes = readFileSync(require.resolve(request));\n const out = new Uint8Array(new ArrayBuffer(bytes.byteLength));\n out.set(bytes);\n return out;\n};\n\n/**\n * Compiled module for the emscripten-generation codecs (jpeg/webp/avif),\n * whose `init` accepts a `WebAssembly.Module` positionally (typing gap in\n * their d.ts); the wasm-bindgen generation (png v3, resize, resvg) takes raw\n * bytes instead.\n */\nconst readModule = (request: string): WebAssembly.Module =>\n new WebAssembly.Module(readWasm(request));\n\nexport { readWasm, readModule };\n\nlet pngReady: Promise<void> | undefined;\nlet resizeReady: Promise<void> | undefined;\nlet resvgReady: Promise<void> | undefined;\n\n/** PNG decode/encode (shared wasm instance between decode and encode). */\nexport const loadPng = (): Promise<void> => {\n pngReady ??= (async () => {\n const { init } = await import(\"@jsquash/png/decode.js\");\n await init(readWasm(\"@jsquash/png/codec/pkg/squoosh_png_bg.wasm\"));\n })();\n return pngReady;\n};\n\n/** Lanczos/other resize kernels. */\nexport const loadResize = (): Promise<void> => {\n resizeReady ??= (async () => {\n const { initResize } = await import(\"@jsquash/resize\");\n await initResize(\n readWasm(\"@jsquash/resize/lib/resize/pkg/squoosh_resize_bg.wasm\"),\n );\n })();\n return resizeReady;\n};\n\n/** SVG rasterizer. */\nexport const loadResvg = (): Promise<void> => {\n resvgReady ??= (async () => {\n const { initWasm } = await import(\"@resvg/resvg-wasm\");\n await initWasm(readWasm(\"@resvg/resvg-wasm/index_bg.wasm\"));\n })();\n return resvgReady;\n};\n\n/** Decode a PNG to RGBA pixels. */\nexport const decodePng = async (bytes: Uint8Array): Promise<ImageDataLike> => {\n await loadPng();\n const { decode } = await import(\"@jsquash/png\");\n const buffer = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(buffer).set(bytes);\n const decoded = await decode(buffer);\n if (decoded === null) throw new Error(\"PNG decode failed\");\n return decoded;\n};\n\n/** Encode RGBA pixels to PNG bytes (no density metadata; see encode.ts pHYs). */\nexport const encodePng = async (image: ImageDataLike): Promise<Uint8Array> => {\n await loadPng();\n const { encode } = await import(\"@jsquash/png\");\n return new Uint8Array(await encode(image));\n};\n\nexport class IconKernelInitError extends Error {\n constructor(\n readonly stage: string,\n readonly cause: unknown,\n ) {\n super(`icon kernel wasm initialization failed at ${stage}: ${String(cause)}`);\n this.name = \"IconKernelInitError\";\n }\n}\n","/**\n * Raster foundation for the icon kernel (spike-verified): format-dispatched\n * WASM decoding, aspect-preserving resize with manual letterboxing, EXIF\n * orientation, SVG rasterization through the font ladder, and the raw pixel\n * operations (paste / contain / trim / dest-in clip) that the composition and\n * generation paths are built on.\n */\nimport { readFile } from \"node:fs/promises\";\n\nimport { GLYPH_FONT_FAMILY, glyphFontLadder } from \"./fonts\";\nimport { makeImage, type ImageDataLike } from \"./types\";\nimport { decodePng, encodePng, loadResize, loadResvg, readModule } from \"./wasm\";\n\nexport type { ImageDataLike };\n\nconst imageOf = (image: ImageDataLike): ImageDataLike =>\n makeImage(new Uint8ClampedArray(image.data), image.width, image.height);\n\nexport const emptyImageOf = (width: number, height: number): ImageDataLike =>\n makeImage(new Uint8ClampedArray(width * height * 4), width, height);\n\nexport const cloneImage = (image: ImageDataLike): ImageDataLike => imageOf(image);\n\n/* ---------------------------------- decode --------------------------------- */\n\nconst sniffFormat = (bytes: Uint8Array): \"png\" | \"jpeg\" | \"webp\" | \"avif\" | \"svg\" | \"unknown\" => {\n if (bytes.length >= 8 && bytes[0] === 0x89 && bytes[1] === 0x50) return \"png\";\n if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8) return \"jpeg\";\n if (\n bytes.length >= 12 &&\n bytes[0] === 0x52 &&\n bytes[1] === 0x49 &&\n bytes[2] === 0x46 &&\n bytes[3] === 0x46 &&\n bytes[8] === 0x57 &&\n bytes[9] === 0x45\n ) {\n return \"webp\";\n }\n if (bytes.length >= 12 && bytes[4] === 0x66 && bytes[5] === 0x74 && bytes[6] === 0x79 && bytes[7] === 0x70) {\n return \"avif\";\n }\n const head = new TextDecoder()\n .decode(bytes.subarray(0, 1024).filter((byte) => byte !== 0))\n .trimStart();\n if (head.startsWith(\"<?xml\") || head.startsWith(\"<svg\")) return \"svg\";\n return \"unknown\";\n};\n\n/** JPEG EXIF orientation (1–8); non-JPEG and missing tags report 1. */\nconst exifOrientationOf = async (\n format: string,\n bytes: Uint8Array,\n): Promise<number> => {\n if (format !== \"jpeg\") return 1;\n // exifr ships CJS; under Node ESM the callable lives on `default`, while\n // bundler-run tests also accept the named form — resolve both.\n const imported = await import(\"exifr\");\n const orientation = (imported.default ?? imported).orientation;\n return (await orientation(bytes)) ?? 1;\n};\n\n/** Apply an EXIF orientation value to raw pixels. */\nconst applyOrientation = (\n image: ImageDataLike,\n orientation: number,\n): ImageDataLike => {\n if (orientation <= 1 || orientation > 8) return image;\n const { width, height, data } = image;\n const swap = orientation >= 5;\n const out = emptyImageOf(swap ? height : width, swap ? width : height);\n const outW = out.width;\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n const source = (y * width + x) * 4;\n let targetX = x;\n let targetY = y;\n switch (orientation) {\n case 2: targetX = width - 1 - x; break;\n case 3: targetX = width - 1 - x; targetY = height - 1 - y; break;\n case 4: targetY = height - 1 - y; break;\n case 5: targetX = y; targetY = x; break;\n case 6: targetX = y; targetY = width - 1 - x; break;\n case 7: targetX = height - 1 - y; targetY = x; break;\n case 8: targetX = height - 1 - y; targetY = width - 1 - x; break;\n default: break;\n }\n const target = (targetY * outW + targetX) * 4;\n out.data[target] = data[source]!;\n out.data[target + 1] = data[source + 1]!;\n out.data[target + 2] = data[source + 2]!;\n out.data[target + 3] = data[source + 3]!;\n }\n }\n return out;\n};\n\n/**\n * Decode an encoded raster image (PNG/JPEG/WebP/AVIF) or rasterize an SVG\n * (through the font ladder; text never silently drops) to RGBA pixels.\n * JPEG orientation is applied so phone-photo sources compose upright.\n */\nexport const decodeImage = async (bytes: Uint8Array): Promise<ImageDataLike> => {\n const format = sniffFormat(bytes);\n const decoded = await (async (): Promise<ImageDataLike> => {\n switch (format) {\n case \"png\":\n return decodePng(bytes);\n case \"jpeg\": {\n // The emscripten-generation `init` accepts a compiled module as its\n // first positional parameter (runtime-verified); its published d.ts\n // only types the overrides object, hence the targeted cast.\n const { init } = await import(\"@jsquash/jpeg/decode.js\");\n await init(\n readModule(\"@jsquash/jpeg/codec/dec/mozjpeg_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/jpeg\");\n return orThrow(\"JPEG\", await decode(toExactBuffer(bytes)));\n }\n case \"webp\": {\n const { init } = await import(\"@jsquash/webp/decode.js\");\n await init(\n readModule(\"@jsquash/webp/codec/dec/webp_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/webp\");\n return orThrow(\"WebP\", await decode(toExactBuffer(bytes)));\n }\n case \"avif\": {\n const { init } = await import(\"@jsquash/avif/decode.js\");\n await init(\n readModule(\"@jsquash/avif/codec/dec/avif_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/avif\");\n return orThrow(\"AVIF\", await decode(toExactBuffer(bytes)));\n }\n case \"svg\":\n return rasterizeSvg(new TextDecoder().decode(bytes), 1024);\n default:\n throw new Error(\n \"unsupported icon source format (expected PNG/JPEG/WebP/AVIF/SVG bytes)\",\n );\n }\n })();\n return applyOrientation(decoded, await exifOrientationOf(format, bytes));\n};\n\n/** Copy into a standalone ArrayBuffer for codecs that demand exactly that. */\nconst toExactBuffer = (bytes: Uint8Array): ArrayBuffer => {\n const out = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(out).set(bytes);\n return out;\n};\n\nconst orThrow = (label: string, image: ImageDataLike | null): ImageDataLike => {\n if (image === null) throw new Error(`${label} decode failed`);\n return image;\n};\n\nexport const decodeImageFile = async (path: string): Promise<ImageDataLike> =>\n decodeImage(new Uint8Array(await readFile(path)));\n\n/** Rasterize an SVG string with the kernel font ladder attached. */\nexport const rasterizeSvg = async (\n svg: string,\n width: number,\n): Promise<ImageDataLike> => {\n await loadResvg();\n const { Resvg } = await import(\"@resvg/resvg-wasm\");\n const resvg = new Resvg(svg, {\n fitTo: { mode: \"width\", value: width },\n font: {\n loadSystemFonts: false,\n fontBuffers: [...(await glyphFontLadder())],\n defaultFontFamily: GLYPH_FONT_FAMILY,\n },\n background: \"rgba(0,0,0,0)\",\n });\n const rendered = resvg.render();\n return makeImage(\n new Uint8ClampedArray(rendered.pixels),\n rendered.width,\n rendered.height,\n );\n};\n\nexport const encodeImagePng = (image: ImageDataLike): Promise<Uint8Array> =>\n encodePng(image);\n\n/* ---------------------------------- resize --------------------------------- */\n\nexport type ResizeMethod = \"lanczos3\" | \"nearest\";\n\n/**\n * Resize with a chosen sampling kernel. The WASM resize is an exact\n * width/height remap, so callers pass aspect-true targets.\n */\nexport const resizeImage = async (\n image: ImageDataLike,\n width: number,\n height: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n if (image.width === width && image.height === height) return imageOf(image);\n const { default: resize } = await import(\"@jsquash/resize\");\n await loadResize();\n if (method === \"nearest\") {\n return resizeNearest(image, width, height);\n }\n return resize(image, { width, height, method: \"lanczos3\" });\n};\n\n/** Point sampling for pixel-art sources (sharp `kernel: nearest` port). */\nconst resizeNearest = (\n image: ImageDataLike,\n width: number,\n height: number,\n): ImageDataLike => {\n const out = emptyImageOf(width, height);\n for (let y = 0; y < height; y += 1) {\n const sourceY = Math.min(image.height - 1, Math.floor((y * image.height) / height));\n for (let x = 0; x < width; x += 1) {\n const sourceX = Math.min(image.width - 1, Math.floor((x * image.width) / width));\n const s = (sourceY * image.width + sourceX) * 4;\n const t = (y * width + x) * 4;\n out.data[t] = image.data[s]!;\n out.data[t + 1] = image.data[s + 1]!;\n out.data[t + 2] = image.data[s + 2]!;\n out.data[t + 3] = image.data[s + 3]!;\n }\n }\n return out;\n};\n\n/**\n * Aspect-preserving scale to fit INSIDE a box without padding (sharp\n * `fit: \"inside\"` semantics) — analysis paths must not add letterbox pixels\n * that would dilute coverage statistics.\n */\nexport const insideImage = async (\n image: ImageDataLike,\n maxSize: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n const scale = Math.min(maxSize / image.width, maxSize / image.height);\n return resizeImage(\n image,\n Math.max(1, Math.round(image.width * scale)),\n Math.max(1, Math.round(image.height * scale)),\n method,\n );\n};\n\n/**\n * `fit: contain` with TRANSPARENT letterboxing — the sharp default padding is\n * opaque black, and the composition laws require transparency (create\n * round-12 defect note).\n */\nexport const containImage = async (\n image: ImageDataLike,\n width: number,\n height: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n if (image.width === width && image.height === height) return imageOf(image);\n const scale = Math.min(width / image.width, height / image.height);\n const scaled = await resizeImage(\n image,\n Math.max(1, Math.round(image.width * scale)),\n Math.max(1, Math.round(image.height * scale)),\n method,\n );\n const canvas = emptyImageOf(width, height);\n pasteImage(\n canvas,\n scaled,\n Math.round((width - scaled.width) / 2),\n Math.round((height - scaled.height) / 2),\n );\n return canvas;\n};\n\n/* ------------------------------ pixel operations ---------------------------- */\n\n/** Source-over paste of `source` onto `target` at the given offset. */\nexport const pasteImage = (\n target: ImageDataLike,\n source: ImageDataLike,\n left: number,\n top: number,\n): void => {\n for (let y = 0; y < source.height; y += 1) {\n const targetY = top + y;\n if (targetY < 0 || targetY >= target.height) continue;\n for (let x = 0; x < source.width; x += 1) {\n const targetX = left + x;\n if (targetX < 0 || targetX >= target.width) continue;\n const s = (y * source.width + x) * 4;\n const t = (targetY * target.width + targetX) * 4;\n const alpha = source.data[s + 3]! / 255;\n const inverse = 1 - alpha;\n target.data[t] =\n source.data[s]! * alpha + target.data[t]! * inverse;\n target.data[t + 1] =\n source.data[s + 1]! * alpha + target.data[t + 1]! * inverse;\n target.data[t + 2] =\n source.data[s + 2]! * alpha + target.data[t + 2]! * inverse;\n target.data[t + 3] = Math.round(\n source.data[s + 3]! + target.data[t + 3]! * inverse,\n );\n }\n }\n};\n\n/**\n * Bounding box of pixels with alpha above `threshold`. Deliberate deviation\n * from sharp's `.trim()`, which keyed on the top-left pixel COLOR: opaque\n * letterboxed sources (e.g. a white-matte logo JPEG) no longer crop their\n * background — alpha is the honest content signal for icon foregrounds.\n */\nexport const trimBounds = (\n image: ImageDataLike,\n threshold = 0,\n): { left: number; top: number; width: number; height: number } | null => {\n let minX = image.width;\n let minY = image.height;\n let maxX = -1;\n let maxY = -1;\n for (let y = 0; y < image.height; y += 1) {\n for (let x = 0; x < image.width; x += 1) {\n if (image.data[(y * image.width + x) * 4 + 3]! > threshold) {\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n }\n }\n if (maxX < 0) return null;\n return {\n left: minX,\n top: minY,\n width: maxX - minX + 1,\n height: maxY - minY + 1,\n };\n};\n\nexport const cropImage = (\n image: ImageDataLike,\n left: number,\n top: number,\n width: number,\n height: number,\n): ImageDataLike => {\n const out = emptyImageOf(width, height);\n pasteImage(out, image, -left, -top);\n return out;\n};\n\n/** Fraction of pixels whose alpha exceeds `alphaThreshold` (0–1). */\nexport const opaqueCoverage = (\n image: ImageDataLike,\n alphaThreshold = 200,\n): number => {\n let opaque = 0;\n for (let i = 3; i < image.data.length; i += 4) {\n if (image.data[i]! > alphaThreshold) opaque += 1;\n }\n return opaque / (image.width * image.height);\n};\n\n/** Fraction of near-white opaque pixels (0–1) — the glyph text-presence probe. */\nexport const brightPixelRatio = (\n image: ImageDataLike,\n alphaThreshold = 200,\n brightness = 230,\n): number => {\n let bright = 0;\n for (let i = 0; i < image.data.length; i += 4) {\n if (image.data[i + 3]! <= alphaThreshold) continue;\n if (\n image.data[i]! >= brightness &&\n image.data[i + 1]! >= brightness &&\n image.data[i + 2]! >= brightness\n ) {\n bright += 1;\n }\n }\n return bright / (image.width * image.height);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"raster-DeMbA2zI.mjs","names":[],"sources":["../../icon/src/assets.ts","../../icon/src/fonts.ts","../../icon/src/types.ts","../../icon/src/wasm.ts","../../icon/src/raster.ts"],"sourcesContent":["/**\n * Bundled asset resolution. Assets live at the package root (`assets/`),\n * exactly one level above both `src/` (source checkout) and `dist/` (built\n * output), so the resolution is uniform: package.json `files` ships both\n * `dist` and `assets`.\n */\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\nexport const assetsDirectory = (): string =>\n join(moduleDirectory, \"..\", \"assets\");\n","/**\n * Glyph font ladder (plan D5; spike-verified): the WASM rasterizer cannot\n * autoload system fonts, and `loadSystemFonts: true` silently drops text, so\n * every render must pass explicit `fontBuffers`:\n *\n * 1. the embedded OFL subset (deterministic Latin rendering everywhere), then\n * 2. a bounded, ranked scan of well-known OS font directories (CJK and other\n * scripts beyond the embedded subset).\n *\n * Rendering quality is verified empirically downstream (text-presence pixel\n * check in default-icon.ts) — the ladder never silently accepts a blank tile.\n */\nimport { readdir, readFile } from \"node:fs/promises\";\nimport type { Dirent } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { assetsDirectory } from \"./assets\";\n\n/** Family name referenced by generated glyph SVG text elements. */\nexport const GLYPH_FONT_FAMILY = \"OpenTray Glyph\";\n\n/**\n * Preferred font basenames, highest priority first. CJK-capable fonts lead:\n * the embedded subset already covers Latin, so discovery exists for wider\n * scripts. UI fonts follow so headless Linux still finds a fallback.\n */\nconst PREFERRED_PATTERNS: readonly RegExp[] = [\n /pingfang|stheiti|hiragino|songti|heiti|kaiti|yuanti/i,\n /sourcehan|source-han|noto.{0,12}(cjk|sc|tc|jp|kr)|wqy|droidsansfallback/i,\n /msyh|msjh|simsun|simhei|simkai|simfang|deng/i,\n /segoeui|arial|helvetica|liberationsans|dejavusans|roboto-regular|ubuntu-regular/i,\n];\n\nconst FONT_EXTENSIONS = new Set([\".ttf\", \".otf\", \".ttc\", \".otc\"]);\n/** Discovery caps: glyph generation reads fonts once per cache miss. */\nconst MAX_FONT_FILES = 10;\nconst MAX_TOTAL_BYTES = 192 * 1024 * 1024;\n\nconst systemFontDirectories = (): readonly string[] => {\n const home = homedir();\n switch (platform()) {\n case \"darwin\":\n return [\n \"/System/Library/Fonts\",\n \"/System/Library/Fonts/Supplemental\",\n \"/Library/Fonts\",\n join(home, \"Library\", \"Fonts\"),\n ];\n case \"win32\":\n return [\n join(process.env.SystemRoot ?? \"C:\\\\Windows\", \"Fonts\"),\n join(\n process.env.LOCALAPPDATA ?? join(home, \"AppData\", \"Local\"),\n \"Microsoft\",\n \"Windows\",\n \"Fonts\",\n ),\n ];\n default:\n return [\n \"/usr/share/fonts\",\n \"/usr/local/share/fonts\",\n join(home, \".local\", \"share\", \"fonts\"),\n join(home, \".fonts\"),\n ];\n }\n};\n\nconst listFontFiles = async (\n directory: string,\n depth = 2,\n): Promise<readonly string[]> => {\n const found: string[] = [];\n let entries: readonly Dirent[];\n try {\n entries = await readdir(directory, { withFileTypes: true });\n } catch {\n return found;\n }\n for (const entry of entries) {\n const entryPath = join(directory, entry.name);\n if (entry.isDirectory() && depth > 0) {\n found.push(...(await listFontFiles(entryPath, depth - 1)));\n } else if (entry.isFile() && FONT_EXTENSIONS.has(extOf(entry.name))) {\n found.push(entryPath);\n }\n }\n return found;\n};\n\nconst extOf = (name: string): string => {\n const dot = name.lastIndexOf(\".\");\n return dot === -1 ? \"\" : name.slice(dot).toLowerCase();\n};\n\nconst priorityOf = (path: string): number => {\n for (let index = 0; index < PREFERRED_PATTERNS.length; index += 1) {\n if (PREFERRED_PATTERNS[index]!.test(path)) return index;\n }\n return PREFERRED_PATTERNS.length;\n};\n\nconst cache = new Map<string, Uint8Array>();\n\n/** Embedded OFL subset bytes (Inter SemiBold, latin; see assets/*.OFL.txt). */\nexport const embeddedGlyphFont = async (): Promise<Uint8Array> => {\n const path = join(assetsDirectory(), \"inter-glyph.ttf\");\n const cached = cache.get(path);\n if (cached !== undefined) return cached;\n const bytes = new Uint8Array(await readFile(path));\n cache.set(path, bytes);\n return bytes;\n};\n\nlet ladderPromise: Promise<readonly Uint8Array[]> | undefined;\nlet ladderFingerprintPromise: Promise<string> | undefined;\n\n/**\n * Stable identity of the discovered ladder (path + byte length pairs): OS\n * font changes invalidate generated-icon caches without hashing font bytes.\n */\nexport const glyphLadderFingerprint = (): Promise<string> => {\n ladderFingerprintPromise ??= (async () => {\n const parts: string[] = [];\n for (const buffer of await glyphFontLadder()) {\n parts.push(`${buffer.byteLength}`);\n }\n return parts.join(\",\");\n })();\n return ladderFingerprintPromise;\n};\n\n/**\n * The full font ladder for resvg `fontBuffers`: embedded subset first, then a\n * bounded ranked selection from the OS. Deterministic order, memoized.\n */\nexport const glyphFontLadder = (): Promise<readonly Uint8Array[]> => {\n ladderPromise ??= (async () => {\n const embedded = await embeddedGlyphFont();\n const candidates: { path: string; priority: number }[] = [];\n for (const directory of systemFontDirectories()) {\n for (const path of await listFontFiles(directory)) {\n candidates.push({ path, priority: priorityOf(path) });\n }\n }\n candidates.sort(\n (a, b) => a.priority - b.priority || (a.path < b.path ? -1 : 1),\n );\n const buffers: Uint8Array[] = [embedded];\n let total = embedded.byteLength;\n for (const { path } of candidates) {\n if (buffers.length >= MAX_FONT_FILES || total >= MAX_TOTAL_BYTES) break;\n const cached = cache.get(path);\n if (cached !== undefined) {\n buffers.push(cached);\n total += cached.byteLength;\n continue;\n }\n try {\n const bytes = new Uint8Array(await readFile(path));\n cache.set(path, bytes);\n buffers.push(bytes);\n total += bytes.byteLength;\n } catch {\n // Unreadable font files are skipped; the ladder degrades gracefully.\n }\n }\n return buffers;\n })();\n return ladderPromise;\n};\n\n/** Test hook: forget memoized font state. */\nexport const resetGlyphFontCache = (): void => {\n cache.clear();\n ladderPromise = undefined;\n};\n","/**\n * Shared value types for the icon kernel.\n *\n * `ImageData` (the one browser type the WASM codecs exchange) resolves from\n * the DOM lib that the codec `.d.ts` files pull into the program; at RUNTIME\n * Node has no global `ImageData` constructor until a codec's glue polyfills\n * it. The kernel therefore never calls the constructor — it builds plain\n * structural objects through `makeImage`, which satisfies the same interface\n * on every runtime (Node, Bun, browsers).\n */\nexport type ImageDataLike = ImageData;\n\nexport const makeImage = (\n data: Uint8ClampedArray<ArrayBuffer>,\n width: number,\n height: number,\n): ImageDataLike => ({ data, width, height, colorSpace: \"srgb\" });\n","/**\n * Lazy WASM bootstrap for the kernel's image stack (spike-verified\n * 2026-09-09, demos/wasm-spike):\n *\n * - jsquash v3 codecs auto-`init()` through `fetch(new URL(...))` which Node\n * rejects for file URLs. The only reliable Node path is pre-initializing\n * with the wasm bytes read from disk, via each codec's subpath export.\n * - `@resvg/resvg-wasm` cannot load system fonts in a WASM environment; text\n * must arrive as explicit `fontBuffers` (see fonts.ts). `loadSystemFonts`\n * stays false everywhere — with it true, resvg silently drops text.\n *\n * Every loader is a memoized singleton so repeated generation calls pay the\n * wasm handshake once per process. Initialization failure throws a typed\n * error; callers (runtime daemon, build tools) decide their own fallback.\n */\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\n\nimport type { ImageDataLike } from \"./types\";\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Exact-typed wasm bytes (TS 5.7 typed-array variance: a fresh copy over a\n * plain `ArrayBuffer` keeps codec signatures satisfied without casts).\n */\nconst readWasm = (request: string): Uint8Array<ArrayBuffer> => {\n const bytes = readFileSync(require.resolve(request));\n const out = new Uint8Array(new ArrayBuffer(bytes.byteLength));\n out.set(bytes);\n return out;\n};\n\n/**\n * Compiled module for the emscripten-generation codecs (jpeg/webp/avif),\n * whose `init` accepts a `WebAssembly.Module` positionally (typing gap in\n * their d.ts); the wasm-bindgen generation (png v3, resize, resvg) takes raw\n * bytes instead.\n */\nconst readModule = (request: string): WebAssembly.Module =>\n new WebAssembly.Module(readWasm(request));\n\nexport { readWasm, readModule };\n\nlet pngReady: Promise<void> | undefined;\nlet resizeReady: Promise<void> | undefined;\nlet resvgReady: Promise<void> | undefined;\n\n/** PNG decode/encode (shared wasm instance between decode and encode). */\nexport const loadPng = (): Promise<void> => {\n pngReady ??= (async () => {\n const { init } = await import(\"@jsquash/png/decode.js\");\n await init(readWasm(\"@jsquash/png/codec/pkg/squoosh_png_bg.wasm\"));\n })();\n return pngReady;\n};\n\n/** Lanczos/other resize kernels. */\nexport const loadResize = (): Promise<void> => {\n resizeReady ??= (async () => {\n const { initResize } = await import(\"@jsquash/resize\");\n await initResize(\n readWasm(\"@jsquash/resize/lib/resize/pkg/squoosh_resize_bg.wasm\"),\n );\n })();\n return resizeReady;\n};\n\n/** SVG rasterizer. */\nexport const loadResvg = (): Promise<void> => {\n resvgReady ??= (async () => {\n const { initWasm } = await import(\"@resvg/resvg-wasm\");\n await initWasm(readWasm(\"@resvg/resvg-wasm/index_bg.wasm\"));\n })();\n return resvgReady;\n};\n\n/** Decode a PNG to RGBA pixels. */\nexport const decodePng = async (bytes: Uint8Array): Promise<ImageDataLike> => {\n await loadPng();\n const { decode } = await import(\"@jsquash/png\");\n const buffer = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(buffer).set(bytes);\n const decoded = await decode(buffer);\n if (decoded === null) throw new Error(\"PNG decode failed\");\n return decoded;\n};\n\n/** Encode RGBA pixels to PNG bytes (no density metadata; see encode.ts pHYs). */\nexport const encodePng = async (image: ImageDataLike): Promise<Uint8Array> => {\n await loadPng();\n const { encode } = await import(\"@jsquash/png\");\n return new Uint8Array(await encode(image));\n};\n\nexport class IconKernelInitError extends Error {\n constructor(\n readonly stage: string,\n readonly cause: unknown,\n ) {\n super(`icon kernel wasm initialization failed at ${stage}: ${String(cause)}`);\n this.name = \"IconKernelInitError\";\n }\n}\n","/**\n * Raster foundation for the icon kernel (spike-verified): format-dispatched\n * WASM decoding, aspect-preserving resize with manual letterboxing, EXIF\n * orientation, SVG rasterization through the font ladder, and the raw pixel\n * operations (paste / contain / trim / dest-in clip) that the composition and\n * generation paths are built on.\n */\nimport { readFile } from \"node:fs/promises\";\n\nimport { GLYPH_FONT_FAMILY, glyphFontLadder } from \"./fonts\";\nimport { makeImage, type ImageDataLike } from \"./types\";\nimport { decodePng, encodePng, loadResize, loadResvg, readModule } from \"./wasm\";\n\nexport type { ImageDataLike };\n\nconst imageOf = (image: ImageDataLike): ImageDataLike =>\n makeImage(new Uint8ClampedArray(image.data), image.width, image.height);\n\nexport const emptyImageOf = (width: number, height: number): ImageDataLike =>\n makeImage(new Uint8ClampedArray(width * height * 4), width, height);\n\nexport const cloneImage = (image: ImageDataLike): ImageDataLike => imageOf(image);\n\n/* ---------------------------------- decode --------------------------------- */\n\nconst sniffFormat = (bytes: Uint8Array): \"png\" | \"jpeg\" | \"webp\" | \"avif\" | \"svg\" | \"unknown\" => {\n if (bytes.length >= 8 && bytes[0] === 0x89 && bytes[1] === 0x50) return \"png\";\n if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8) return \"jpeg\";\n if (\n bytes.length >= 12 &&\n bytes[0] === 0x52 &&\n bytes[1] === 0x49 &&\n bytes[2] === 0x46 &&\n bytes[3] === 0x46 &&\n bytes[8] === 0x57 &&\n bytes[9] === 0x45\n ) {\n return \"webp\";\n }\n if (bytes.length >= 12 && bytes[4] === 0x66 && bytes[5] === 0x74 && bytes[6] === 0x79 && bytes[7] === 0x70) {\n return \"avif\";\n }\n const head = new TextDecoder()\n .decode(bytes.subarray(0, 1024).filter((byte) => byte !== 0))\n .trimStart();\n if (head.startsWith(\"<?xml\") || head.startsWith(\"<svg\")) return \"svg\";\n return \"unknown\";\n};\n\n/** JPEG EXIF orientation (1–8); non-JPEG and missing tags report 1. */\nconst exifOrientationOf = async (\n format: string,\n bytes: Uint8Array,\n): Promise<number> => {\n if (format !== \"jpeg\") return 1;\n // exifr ships CJS; under Node ESM the callable lives on `default`, while\n // bundler-run tests also accept the named form — resolve both.\n const imported = await import(\"exifr\");\n const orientation = (imported.default ?? imported).orientation;\n return (await orientation(bytes)) ?? 1;\n};\n\n/** Apply an EXIF orientation value to raw pixels. */\nconst applyOrientation = (\n image: ImageDataLike,\n orientation: number,\n): ImageDataLike => {\n if (orientation <= 1 || orientation > 8) return image;\n const { width, height, data } = image;\n const swap = orientation >= 5;\n const out = emptyImageOf(swap ? height : width, swap ? width : height);\n const outW = out.width;\n for (let y = 0; y < height; y += 1) {\n for (let x = 0; x < width; x += 1) {\n const source = (y * width + x) * 4;\n let targetX = x;\n let targetY = y;\n switch (orientation) {\n case 2: targetX = width - 1 - x; break;\n case 3: targetX = width - 1 - x; targetY = height - 1 - y; break;\n case 4: targetY = height - 1 - y; break;\n case 5: targetX = y; targetY = x; break;\n case 6: targetX = y; targetY = width - 1 - x; break;\n case 7: targetX = height - 1 - y; targetY = x; break;\n case 8: targetX = height - 1 - y; targetY = width - 1 - x; break;\n default: break;\n }\n const target = (targetY * outW + targetX) * 4;\n out.data[target] = data[source]!;\n out.data[target + 1] = data[source + 1]!;\n out.data[target + 2] = data[source + 2]!;\n out.data[target + 3] = data[source + 3]!;\n }\n }\n return out;\n};\n\n/**\n * Decode an encoded raster image (PNG/JPEG/WebP/AVIF) or rasterize an SVG\n * (through the font ladder; text never silently drops) to RGBA pixels.\n * JPEG orientation is applied so phone-photo sources compose upright.\n */\nexport const decodeImage = async (bytes: Uint8Array): Promise<ImageDataLike> => {\n const format = sniffFormat(bytes);\n const decoded = await (async (): Promise<ImageDataLike> => {\n switch (format) {\n case \"png\":\n return decodePng(bytes);\n case \"jpeg\": {\n // The emscripten-generation `init` accepts a compiled module as its\n // first positional parameter (runtime-verified); its published d.ts\n // only types the overrides object, hence the targeted cast.\n const { init } = await import(\"@jsquash/jpeg/decode.js\");\n await init(\n readModule(\"@jsquash/jpeg/codec/dec/mozjpeg_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/jpeg\");\n return orThrow(\"JPEG\", await decode(toExactBuffer(bytes)));\n }\n case \"webp\": {\n const { init } = await import(\"@jsquash/webp/decode.js\");\n await init(\n readModule(\"@jsquash/webp/codec/dec/webp_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/webp\");\n return orThrow(\"WebP\", await decode(toExactBuffer(bytes)));\n }\n case \"avif\": {\n const { init } = await import(\"@jsquash/avif/decode.js\");\n await init(\n readModule(\"@jsquash/avif/codec/dec/avif_dec.wasm\") as never,\n );\n const { decode } = await import(\"@jsquash/avif\");\n return orThrow(\"AVIF\", await decode(toExactBuffer(bytes)));\n }\n case \"svg\":\n return rasterizeSvg(new TextDecoder().decode(bytes), 1024);\n default:\n throw new Error(\n \"unsupported icon source format (expected PNG/JPEG/WebP/AVIF/SVG bytes)\",\n );\n }\n })();\n return applyOrientation(decoded, await exifOrientationOf(format, bytes));\n};\n\n/** Copy into a standalone ArrayBuffer for codecs that demand exactly that. */\nconst toExactBuffer = (bytes: Uint8Array): ArrayBuffer => {\n const out = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(out).set(bytes);\n return out;\n};\n\nconst orThrow = (label: string, image: ImageDataLike | null): ImageDataLike => {\n if (image === null) throw new Error(`${label} decode failed`);\n return image;\n};\n\nexport const decodeImageFile = async (path: string): Promise<ImageDataLike> =>\n decodeImage(new Uint8Array(await readFile(path)));\n\n/** Rasterize an SVG string with the kernel font ladder attached. */\nexport const rasterizeSvg = async (\n svg: string,\n width: number,\n): Promise<ImageDataLike> => {\n await loadResvg();\n const { Resvg } = await import(\"@resvg/resvg-wasm\");\n const resvg = new Resvg(svg, {\n fitTo: { mode: \"width\", value: width },\n font: {\n loadSystemFonts: false,\n fontBuffers: [...(await glyphFontLadder())],\n defaultFontFamily: GLYPH_FONT_FAMILY,\n },\n background: \"rgba(0,0,0,0)\",\n });\n const rendered = resvg.render();\n return makeImage(\n new Uint8ClampedArray(rendered.pixels),\n rendered.width,\n rendered.height,\n );\n};\n\nexport const encodeImagePng = (image: ImageDataLike): Promise<Uint8Array> =>\n encodePng(image);\n\n/* ---------------------------------- resize --------------------------------- */\n\nexport type ResizeMethod = \"lanczos3\" | \"nearest\";\n\n/**\n * Resize with a chosen sampling kernel. The WASM resize is an exact\n * width/height remap, so callers pass aspect-true targets.\n */\nexport const resizeImage = async (\n image: ImageDataLike,\n width: number,\n height: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n if (image.width === width && image.height === height) return imageOf(image);\n const { default: resize } = await import(\"@jsquash/resize\");\n await loadResize();\n if (method === \"nearest\") {\n return resizeNearest(image, width, height);\n }\n return resize(image, { width, height, method: \"lanczos3\" });\n};\n\n/** Point sampling for pixel-art sources (sharp `kernel: nearest` port). */\nconst resizeNearest = (\n image: ImageDataLike,\n width: number,\n height: number,\n): ImageDataLike => {\n const out = emptyImageOf(width, height);\n for (let y = 0; y < height; y += 1) {\n const sourceY = Math.min(image.height - 1, Math.floor((y * image.height) / height));\n for (let x = 0; x < width; x += 1) {\n const sourceX = Math.min(image.width - 1, Math.floor((x * image.width) / width));\n const s = (sourceY * image.width + sourceX) * 4;\n const t = (y * width + x) * 4;\n out.data[t] = image.data[s]!;\n out.data[t + 1] = image.data[s + 1]!;\n out.data[t + 2] = image.data[s + 2]!;\n out.data[t + 3] = image.data[s + 3]!;\n }\n }\n return out;\n};\n\n/**\n * Aspect-preserving scale to fit INSIDE a box without padding (sharp\n * `fit: \"inside\"` semantics) — analysis paths must not add letterbox pixels\n * that would dilute coverage statistics.\n */\nexport const insideImage = async (\n image: ImageDataLike,\n maxSize: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n const scale = Math.min(maxSize / image.width, maxSize / image.height);\n return resizeImage(\n image,\n Math.max(1, Math.round(image.width * scale)),\n Math.max(1, Math.round(image.height * scale)),\n method,\n );\n};\n\n/**\n * `fit: contain` with TRANSPARENT letterboxing — the sharp default padding is\n * opaque black, and the composition laws require transparency (create\n * round-12 defect note).\n */\nexport const containImage = async (\n image: ImageDataLike,\n width: number,\n height: number,\n method: ResizeMethod = \"lanczos3\",\n): Promise<ImageDataLike> => {\n if (image.width === width && image.height === height) return imageOf(image);\n const scale = Math.min(width / image.width, height / image.height);\n const scaled = await resizeImage(\n image,\n Math.max(1, Math.round(image.width * scale)),\n Math.max(1, Math.round(image.height * scale)),\n method,\n );\n const canvas = emptyImageOf(width, height);\n pasteImage(\n canvas,\n scaled,\n Math.round((width - scaled.width) / 2),\n Math.round((height - scaled.height) / 2),\n );\n return canvas;\n};\n\n/* ------------------------------ pixel operations ---------------------------- */\n\n/** Source-over paste of `source` onto `target` at the given offset. */\nexport const pasteImage = (\n target: ImageDataLike,\n source: ImageDataLike,\n left: number,\n top: number,\n): void => {\n for (let y = 0; y < source.height; y += 1) {\n const targetY = top + y;\n if (targetY < 0 || targetY >= target.height) continue;\n for (let x = 0; x < source.width; x += 1) {\n const targetX = left + x;\n if (targetX < 0 || targetX >= target.width) continue;\n const s = (y * source.width + x) * 4;\n const t = (targetY * target.width + targetX) * 4;\n const alpha = source.data[s + 3]! / 255;\n const inverse = 1 - alpha;\n target.data[t] =\n source.data[s]! * alpha + target.data[t]! * inverse;\n target.data[t + 1] =\n source.data[s + 1]! * alpha + target.data[t + 1]! * inverse;\n target.data[t + 2] =\n source.data[s + 2]! * alpha + target.data[t + 2]! * inverse;\n target.data[t + 3] = Math.round(\n source.data[s + 3]! + target.data[t + 3]! * inverse,\n );\n }\n }\n};\n\n/**\n * Bounding box of pixels with alpha above `threshold`. Deliberate deviation\n * from sharp's `.trim()`, which keyed on the top-left pixel COLOR: opaque\n * letterboxed sources (e.g. a white-matte logo JPEG) no longer crop their\n * background — alpha is the honest content signal for icon foregrounds.\n */\nexport const trimBounds = (\n image: ImageDataLike,\n threshold = 0,\n): { left: number; top: number; width: number; height: number } | null => {\n let minX = image.width;\n let minY = image.height;\n let maxX = -1;\n let maxY = -1;\n for (let y = 0; y < image.height; y += 1) {\n for (let x = 0; x < image.width; x += 1) {\n if (image.data[(y * image.width + x) * 4 + 3]! > threshold) {\n if (x < minX) minX = x;\n if (x > maxX) maxX = x;\n if (y < minY) minY = y;\n if (y > maxY) maxY = y;\n }\n }\n }\n if (maxX < 0) return null;\n return {\n left: minX,\n top: minY,\n width: maxX - minX + 1,\n height: maxY - minY + 1,\n };\n};\n\nexport const cropImage = (\n image: ImageDataLike,\n left: number,\n top: number,\n width: number,\n height: number,\n): ImageDataLike => {\n const out = emptyImageOf(width, height);\n pasteImage(out, image, -left, -top);\n return out;\n};\n\n/** Fraction of pixels whose alpha exceeds `alphaThreshold` (0–1). */\nexport const opaqueCoverage = (\n image: ImageDataLike,\n alphaThreshold = 200,\n): number => {\n let opaque = 0;\n for (let i = 3; i < image.data.length; i += 4) {\n if (image.data[i]! > alphaThreshold) opaque += 1;\n }\n return opaque / (image.width * image.height);\n};\n\n/** Fraction of near-white opaque pixels (0–1) — the glyph text-presence probe. */\nexport const brightPixelRatio = (\n image: ImageDataLike,\n alphaThreshold = 200,\n brightness = 230,\n): number => {\n let bright = 0;\n for (let i = 0; i < image.data.length; i += 4) {\n if (image.data[i + 3]! <= alphaThreshold) continue;\n if (\n image.data[i]! >= brightness &&\n image.data[i + 1]! >= brightness &&\n image.data[i + 2]! >= brightness\n ) {\n bright += 1;\n }\n }\n return bright / (image.width * image.height);\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- import{r as t,j as n,R as S,a as B}from"./index.js";import{B as v,A as I,a as N,R as U,G as z,I as A}from"./input.js";const K=()=>typeof window<"u"&&"navigation"in window?window.navigation:void 0,p=c=>{const i=c.trim();if(i.length!==0)try{return new URL(/^https?:\/\//iu.test(i)?i:`http://${i}`).href}catch{return}},T=c=>`${location.pathname}?url=${encodeURIComponent(c)}`,F=()=>{const c=new URLSearchParams(location.search).get("url");return p(c??"")??"about:blank"};function P(){const c=t.useRef(F()),[i,k]=t.useState(c.current),[m,E]=t.useState(c.current),u=t.useRef([c.current]),s=t.useRef(0),l=t.useRef(K()),w=t.useRef(null),f=t.useRef(null),[$,j]=t.useState(0),d=t.useCallback(e=>{E(e),k(e)},[]);t.useEffect(()=>{const e=l.current;if(e===void 0)return;const r=o=>{!o.canIntercept||o.hashChange||o.intercept({handler:()=>{const b=new URLSearchParams(new URL(o.destination.url).search).get("url");if(b===null)return;const R=p(b);R!==void 0&&d(R)}})},a=()=>j(o=>o+1);return e.addEventListener("navigate",r),e.addEventListener("currententrychange",a),()=>{e.removeEventListener("navigate",r),e.removeEventListener("currententrychange",a)}},[]);const L=e=>{const r=l.current;if(r!==void 0)try{r.navigate(T(e));return}catch{}u.current=[...u.current.slice(0,s.current+1),e],s.current=u.current.length-1,d(e)},h=l.current?.currentEntry??null,C=h!==null?h.index>0:s.current>0,D=h!==null?h.index<(l.current?.entries().length??1)-1:s.current<u.current.length-1,x=t.useCallback(()=>{const e=l.current;if(e!==void 0&&e.currentEntry!==null&&e.currentEntry.index>0){const r=e.entries()[e.currentEntry.index-1];if(r!==void 0)try{e.traverseTo(r.key);return}catch{}}s.current>0&&(s.current-=1,d(u.current[s.current]))},[d]),y=t.useCallback(()=>{const e=l.current;if(e!==void 0&&e.currentEntry!==null){const a=e.entries()[e.currentEntry.index+1];if(a!==void 0)try{e.traverseTo(a.key);return}catch{}}s.current<u.current.length-1&&(s.current+=1,d(u.current[s.current]))},[d]),g=t.useCallback(()=>{w.current!==null&&(w.current.src=m)},[m]);return t.useEffect(()=>{const e=r=>{const a=r.metaKey||r.ctrlKey,o=document.activeElement===f.current;if(r.key==="F5"||a&&r.key.toLowerCase()==="r"){r.preventDefault(),g();return}if(!o){if(a&&r.key==="ArrowLeft"||a&&r.key==="["){r.preventDefault(),x();return}if(a&&r.key==="ArrowRight"||a&&r.key==="]"){r.preventDefault(),y();return}a&&r.key.toLowerCase()==="l"&&(r.preventDefault(),f.current?.focus(),f.current?.select())}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[x,y,g]),n.jsxs("div",{className:"flex h-screen flex-col overflow-hidden",children:[n.jsxs("div",{className:"flex h-11 shrink-0 items-center gap-2 border-b border-border bg-card px-3",children:[n.jsx(v,{variant:"ghost",size:"icon-sm",disabled:!C,onClick:x,"aria-label":"后退",children:n.jsx(I,{})}),n.jsx(v,{variant:"ghost",size:"icon-sm",disabled:!D,onClick:y,"aria-label":"前进",children:n.jsx(N,{})}),n.jsx(v,{variant:"ghost",size:"icon-sm",onClick:g,"aria-label":"重新加载",children:n.jsx(U,{})}),n.jsx(z,{className:"size-4 shrink-0 text-muted-foreground"}),n.jsx(A,{ref:f,className:"h-7 font-mono text-xs",value:i,placeholder:"输入 URL 跳转",onChange:e=>k(e.target.value),onKeyDown:e=>{if(e.key!=="Enter")return;const r=p(i);r!==void 0&&L(r)}})]}),n.jsx("iframe",{ref:w,title:"service",src:m,className:"min-h-0 flex-1 border-0 bg-white",sandbox:"allow-same-origin allow-scripts allow-forms"})]})}S.createRoot(document.getElementById("root")).render(n.jsx(B.StrictMode,{children:n.jsx(P,{})}));
1
+ import{u as S,r as n,j as t,a as B,b as N,R as z,c as A,P as U}from"./index.js";import{B as p,A as T,a as K,R as F,G as $,I as G}from"./input.js";const M=()=>typeof window<"u"&&"navigation"in window?window.navigation:void 0,b=c=>{const s=c.trim();if(s.length!==0)try{return new URL(/^https?:\/\//iu.test(s)?s:`http://${s}`).href}catch{return}},V=c=>`${location.pathname}?url=${encodeURIComponent(c)}`,H=()=>{const c=new URLSearchParams(location.search).get("url");return b(c??"")??"about:blank"};function O(){const{messages:c}=S(),s=n.useRef(H()),[k,R]=n.useState(s.current),[w,L]=n.useState(s.current),l=n.useRef([s.current]),o=n.useRef(0),u=n.useRef(M()),x=n.useRef(null),f=n.useRef(null),[q,C]=n.useState(0),d=n.useCallback(e=>{L(e),R(e)},[]);n.useEffect(()=>{const e=u.current;if(e===void 0)return;const r=i=>{!i.canIntercept||i.hashChange||i.intercept({handler:()=>{const E=new URLSearchParams(new URL(i.destination.url).search).get("url");if(E===null)return;const j=b(E);j!==void 0&&d(j)}})},a=()=>C(i=>i+1);return e.addEventListener("navigate",r),e.addEventListener("currententrychange",a),()=>{e.removeEventListener("navigate",r),e.removeEventListener("currententrychange",a)}},[]);const D=e=>{const r=u.current;if(r!==void 0)try{r.navigate(V(e));return}catch{}l.current=[...l.current.slice(0,o.current+1),e],o.current=l.current.length-1,d(e)},m=u.current?.currentEntry??null,P=m!==null?m.index>0:o.current>0,I=m!==null?m.index<(u.current?.entries().length??1)-1:o.current<l.current.length-1,y=n.useCallback(()=>{const e=u.current;if(e!==void 0&&e.currentEntry!==null&&e.currentEntry.index>0){const r=e.entries()[e.currentEntry.index-1];if(r!==void 0)try{e.traverseTo(r.key);return}catch{}}o.current>0&&(o.current-=1,d(l.current[o.current]))},[d]),g=n.useCallback(()=>{const e=u.current;if(e!==void 0&&e.currentEntry!==null){const a=e.entries()[e.currentEntry.index+1];if(a!==void 0)try{e.traverseTo(a.key);return}catch{}}o.current<l.current.length-1&&(o.current+=1,d(l.current[o.current]))},[d]),v=n.useCallback(()=>{x.current!==null&&(x.current.src=w)},[w]);return n.useEffect(()=>{const e=r=>{const a=r.metaKey||r.ctrlKey,i=document.activeElement===f.current;if(r.key==="F5"||a&&r.key.toLowerCase()==="r"){r.preventDefault(),v();return}if(!i){if(a&&r.key==="ArrowLeft"||a&&r.key==="["){r.preventDefault(),y();return}if(a&&r.key==="ArrowRight"||a&&r.key==="]"){r.preventDefault(),g();return}a&&r.key.toLowerCase()==="l"&&(r.preventDefault(),f.current?.focus(),f.current?.select())}};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[y,g,v]),t.jsxs("div",{className:"flex h-screen flex-col overflow-hidden",children:[t.jsxs("div",{className:"flex h-11 shrink-0 items-center gap-2 border-b border-border bg-card px-3",children:[t.jsx(p,{variant:"ghost",size:"icon-sm",disabled:!P,onClick:y,"aria-label":c.common.back,children:t.jsx(T,{})}),t.jsx(p,{variant:"ghost",size:"icon-sm",disabled:!I,onClick:g,"aria-label":c.common.forward,children:t.jsx(K,{})}),t.jsx(p,{variant:"ghost",size:"icon-sm",onClick:v,"aria-label":c.common.reload,children:t.jsx(F,{})}),t.jsx($,{className:"size-4 shrink-0 text-muted-foreground"}),t.jsx(G,{ref:f,className:"h-7 font-mono text-xs",value:k,placeholder:c.tabs.urlPlaceholder,onChange:e=>R(e.target.value),onKeyDown:e=>{if(e.key!=="Enter")return;const r=b(k);r!==void 0&&D(r)}})]}),t.jsx("iframe",{ref:x,title:"service",src:w,className:"min-h-0 flex-1 border-0 bg-white",sandbox:"allow-same-origin allow-scripts allow-forms"})]})}const h=B();N(h.locale,h.theme);z.createRoot(document.getElementById("root")).render(t.jsx(A.StrictMode,{children:t.jsx(U,{initialLocale:h.locale,initialTheme:h.theme,children:t.jsx(O,{})})}));