{"version":3,"sources":["../../src/frameit/devices.ts","../../src/frameit/index.ts"],"names":["promisify","execFile","readdir","extname","join","stat","basename"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Device frame definitions ported from Fastlane's `frameit/device_types.rb`.\n *\n * Each device mirrors Fastlane's `Device.new(id, name, priority, resolutions,\n * ppi, color, platform)` declaration. Frame canvas dimensions and screen\n * offsets are computed from the primary screen resolution, because Fastlane\n * resolves those at runtime from the downloaded `offsets.json` in its frames\n * repository — which is not bundled here.\n *\n * For modern edge-to-edge devices (post-2017 iPhones, Pixel 3+, recent Samsung),\n * the frame adds a small 4–7% horizontal bezel. For bezeled devices, padding\n * roughly follows the real chassis (~10% X, ~18% Y). These estimates mean\n * `frameScreenshots` still composites sensibly, but they are not pixel-perfect\n * reproductions of the real frame PNGs.\n *\n * Device names follow Fastlane's `formatted_name_without_apple`: the \"Apple \"\n * prefix is stripped, as are parenthesised suffixes (e.g. \"(3rd generation)\").\n */\n\nexport interface DeviceFrame {\n  /** Fastlane device id (slug). Used for filename detection. */\n  id: string;\n  /** Human-readable device name (matches Fastlane's `formatted_name_without_apple`). */\n  name: string;\n  /** Priority (from Fastlane). Higher wins when multiple devices match. */\n  priority: number;\n  /** Frame canvas dimensions (computed). */\n  width: number;\n  height: number;\n  /** Primary screen resolution used for detection and compositing. */\n  screenWidth: number;\n  screenHeight: number;\n  /** All supported screen resolutions [width, height] for detection. */\n  screenResolutions: Array<[number, number]>;\n  /** Screen-within-frame offset in pixels. */\n  screenOffsetX: number;\n  screenOffsetY: number;\n  platform: \"ios\" | \"android\" | \"mac\";\n  /** Optional PPI from Fastlane. */\n  ppi?: number;\n  /** Default color from Fastlane. */\n  color?: string;\n}\n\ninterface ComputeInput {\n  id: string;\n  name: string;\n  priority: number;\n  resolutions: Array<[number, number]>;\n  ppi?: number;\n  color?: string;\n  platform: \"ios\" | \"android\" | \"mac\";\n  style: \"edge\" | \"bezel\" | \"tablet\" | \"mac\";\n}\n\nfunction buildFrame(d: ComputeInput): DeviceFrame {\n  // Pick the portrait resolution (smaller = width)\n  const [res] = d.resolutions;\n  const [a, b] = res;\n  const screenWidth = Math.min(a, b);\n  const screenHeight = Math.max(a, b);\n\n  let width: number;\n  let height: number;\n  let offsetX: number;\n  let offsetY: number;\n\n  switch (d.style) {\n    case \"edge\": {\n      // Modern edge-to-edge: ~4% X bezel each side, minimal Y bezel\n      const padX = Math.round(screenWidth * 0.04);\n      const padY = Math.round(screenHeight * 0.005);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"bezel\": {\n      // Older bezeled phones: ~5% X, ~9% Y each side\n      const padX = Math.round(screenWidth * 0.05);\n      const padY = Math.round(screenHeight * 0.09);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"tablet\": {\n      const padX = Math.round(screenWidth * 0.05);\n      const padY = Math.round(screenHeight * 0.05);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"mac\": {\n      const padX = Math.round(screenWidth * 0.08);\n      const padY = Math.round(screenHeight * 0.12);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n  }\n\n  return {\n    id: d.id,\n    name: d.name,\n    priority: d.priority,\n    width,\n    height,\n    screenWidth,\n    screenHeight,\n    screenResolutions: d.resolutions,\n    screenOffsetX: offsetX,\n    screenOffsetY: offsetY,\n    platform: d.platform,\n    ppi: d.ppi,\n    color: d.color,\n  };\n}\n\n/**\n * All devices from Fastlane's `frameit/device_types.rb` (66 entries) plus\n * iPhone 15/16 models that Apple released after Fastlane's last update, and\n * a couple of Samsung Galaxy S21 entries carried over from fastnode's\n * pre-port list. Ordered descending by priority so `detectDevice*` picks the\n * newest/highest priority device when multiple match.\n */\nexport const DEVICE_FRAMES: DeviceFrame[] = [\n  // ── iPhones 15/16 (post-Fastlane) ──\n  buildFrame({ id: \"iphone16-pro-max\", name: \"iPhone 16 Pro Max\", priority: 14, resolutions: [[1320, 2868], [2868, 1320]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16-pro\", name: \"iPhone 16 Pro\", priority: 14, resolutions: [[1206, 2622], [2622, 1206]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16-plus\", name: \"iPhone 16 Plus\", priority: 14, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16\", name: \"iPhone 16\", priority: 14, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone15-pro-max\", name: \"iPhone 15 Pro Max\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15-pro\", name: \"iPhone 15 Pro\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15-plus\", name: \"iPhone 15 Plus\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15\", name: \"iPhone 15\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n\n  // ── iPhones (Fastlane Platform::IOS) ──\n  buildFrame({ id: \"iphone14-pro-max\", name: \"iPhone 14 Pro Max\", priority: 12, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14-pro\", name: \"iPhone 14 Pro\", priority: 12, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14-plus\", name: \"iPhone 14 Plus\", priority: 12, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14\", name: \"iPhone 14\", priority: 12, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone13-pro-max\", name: \"iPhone 13 Pro Max\", priority: 11, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13-pro\", name: \"iPhone 13 Pro\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13\", name: \"iPhone 13\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13-mini\", name: \"iPhone 13 Mini\", priority: 11, resolutions: [[1080, 2340], [2340, 1080]], ppi: 476, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone12-pro-max\", name: \"iPhone 12 Pro Max\", priority: 10, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12-pro\", name: \"iPhone 12 Pro\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12\", name: \"iPhone 12\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12-mini\", name: \"iPhone 12 Mini\", priority: 10, resolutions: [[1125, 2436], [2436, 1125]], ppi: 476, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone11-pro-max\", name: \"iPhone 11 Pro Max\", priority: 9, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-11-pro\", name: \"iPhone 11 Pro\", priority: 9, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-11\", name: \"iPhone 11\", priority: 9, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XS-Max\", name: \"iPhone XS Max\", priority: 8, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XR\", name: \"iPhone XR\", priority: 8, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XS\", name: \"iPhone XS\", priority: 8, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-X\", name: \"iPhone X\", priority: 7, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-8\", name: \"iPhone 8\", priority: 6, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-8-plus\", name: \"iPhone 8 Plus\", priority: 6, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-7\", name: \"iPhone 7\", priority: 5, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-7-plus\", name: \"iPhone 7 Plus\", priority: 5, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-6s\", name: \"iPhone 6s\", priority: 4, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-6s-plus\", name: \"iPhone 6s Plus\", priority: 4, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-se\", name: \"iPhone SE\", priority: 3, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-5s\", name: \"iPhone 5s\", priority: 2, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-5c\", name: \"iPhone 5c\", priority: 2, resolutions: [[640, 1136], [1136, 640]], ppi: 326, color: \"White\", platform: \"ios\", style: \"bezel\" }),\n\n  // ── iPads ──\n  buildFrame({ id: \"ipadPro11\", name: \"iPad Pro 11-inch\", priority: 1, resolutions: [[1668, 2388], [2388, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipadPro129\", name: \"iPad Pro 12.9-inch 4th generation\", priority: 5, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipadPro129-3gen\", name: \"iPad Pro 12.9-inch 3rd generation\", priority: 4, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-pro\", name: \"iPad Pro\", priority: 3, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad105\", name: \"iPad Pro 10.5-inch\", priority: 1, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-10-2\", name: \"iPad 10.2\", priority: 1, resolutions: [[1620, 2160], [2160, 1620]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-air-2\", name: \"iPad Air 2\", priority: 1, resolutions: [[1536, 2048], [2048, 1536]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-air-2019\", name: \"iPad Air 2019\", priority: 2, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-mini-4\", name: \"iPad Mini 4\", priority: 2, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-mini-2019\", name: \"iPad Mini 2019\", priority: 3, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n\n  // ── Mac ──\n  buildFrame({ id: \"mac\", name: \"MacBook\", priority: 0, resolutions: [[1280, 800], [1440, 900], [2560, 1600], [2880, 1800]], color: \"Space Gray\", platform: \"mac\", style: \"mac\" }),\n\n  // ── Google Pixel (Android) ──\n  buildFrame({ id: \"google-pixel-5\", name: \"Google Pixel 5\", priority: 10, resolutions: [[1080, 2340], [2340, 1080]], ppi: 432, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-4-xl\", name: \"Google Pixel 4 XL\", priority: 9, resolutions: [[1440, 3040], [3040, 1440]], ppi: 537, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-4\", name: \"Google Pixel 4\", priority: 9, resolutions: [[1080, 2280], [2280, 1080]], ppi: 444, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-3-xl\", name: \"Google Pixel 3 XL\", priority: 7, resolutions: [[1440, 2960], [2960, 1440]], ppi: 523, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-3\", name: \"Google Pixel 3\", priority: 7, resolutions: [[1080, 2160], [2160, 1080]], ppi: 443, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n\n  // ── HTC / Huawei / Motorola (Android, bezeled) ──\n  buildFrame({ id: \"htc-one-a9\", name: \"HTC One A9\", priority: 6, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"htc-one-m8\", name: \"HTC One M8\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"huawei-p8\", name: \"Huawei P8\", priority: 5, resolutions: [[1080, 1920], [1920, 1080]], ppi: 424, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"motorola-moto-e\", name: \"Motorola Moto E\", priority: 3, resolutions: [[540, 960], [960, 540]], ppi: 245, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"motorola-moto-g\", name: \"Motorola Moto G\", priority: 4, resolutions: [[1080, 1920], [1920, 1080]], ppi: 401, platform: \"android\", style: \"bezel\" }),\n\n  // ── Nexus (Android, bezeled) ──\n  buildFrame({ id: \"nexus-4\", name: \"Nexus 4\", priority: 7, resolutions: [[768, 1280], [1820, 768]], ppi: 318, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-5x\", name: \"Nexus 5X\", priority: 7, resolutions: [[1080, 1920], [1920, 1080]], ppi: 423, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-6p\", name: \"Nexus 6P\", priority: 7, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-9\", name: \"Nexus 9\", priority: 7, resolutions: [[1536, 2048], [2048, 1536]], ppi: 281, platform: \"android\", style: \"tablet\" }),\n\n  // ── Samsung Galaxy (Android) ──\n  buildFrame({ id: \"samsung-galaxy-s21\", name: \"Samsung Galaxy S21\", priority: 9, resolutions: [[1080, 2400], [2400, 1080]], ppi: 421, color: \"Phantom Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-10-plus\", name: \"Samsung Galaxy Note 10+\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 498, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-10\", name: \"Samsung Galaxy Note 10\", priority: 6, resolutions: [[1080, 2280], [2280, 1080]], ppi: 401, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-5\", name: \"Samsung Galaxy Note 5\", priority: 5, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s10-plus\", name: \"Samsung Galaxy S10+\", priority: 8, resolutions: [[1440, 3040], [3040, 1440]], ppi: 522, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s10\", name: \"Samsung Galaxy S10\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 550, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s9\", name: \"Samsung Galaxy S9\", priority: 6, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s8\", name: \"Samsung Galaxy S8\", priority: 5, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s7\", name: \"Samsung Galaxy S7\", priority: 4, resolutions: [[1440, 2560], [2560, 1440]], ppi: 577, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s5\", name: \"Samsung Galaxy S5\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 432, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s3\", name: \"Samsung Galaxy S3\", priority: 3, resolutions: [[720, 1280], [1280, 720]], ppi: 306, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s-duos\", name: \"Samsung Galaxy S Duos\", priority: 3, resolutions: [[480, 800], [800, 480]], ppi: 233, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-grand-prime\", name: \"Samsung Galaxy Grand Prime\", priority: 5, resolutions: [[540, 960], [960, 540]], ppi: 220, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n\n  // ── Xiaomi ──\n  buildFrame({ id: \"xiaomi-mi-mix-alpha\", name: \"Xiaomi Mi Mix Alpha\", priority: 1, resolutions: [[2088, 2250], [2250, 2088]], ppi: 388, platform: \"android\", style: \"edge\" }),\n];\n\n/**\n * Match a device by screenshot pixel dimensions. Returns the highest-priority\n * device whose resolution list contains `(width, height)` in either orientation.\n */\nexport function detectDeviceFromDimensions(\n  width: number,\n  height: number\n): DeviceFrame | null {\n  let best: DeviceFrame | null = null;\n  for (const device of DEVICE_FRAMES) {\n    for (const [w, h] of device.screenResolutions) {\n      if (w === width && h === height) {\n        if (!best || device.priority > best.priority) best = device;\n        break;\n      }\n    }\n  }\n  return best;\n}\n\n/**\n * Match a device by filename substring. Mirrors Fastlane's\n * `Device.detect_device`: a device matches if the filename contains either\n * the formatted name or the slug id. Token separators `-`, `_`, and spaces\n * are treated as equivalent, and `.` inside numeric suffixes (e.g. `12.9`)\n * is optional. Returns the highest-priority match.\n */\nexport function detectDeviceFromFilename(filename: string): DeviceFrame | null {\n  const lower = filename.toLowerCase();\n  let best: DeviceFrame | null = null;\n\n  const matchesToken = (candidate: string): boolean => {\n    const pattern = candidate\n      .toLowerCase()\n      .replace(/[()]/g, \"\")\n      .replace(/[.+^$*?|{}\\\\[\\]]/g, \"\\\\$&\")\n      .replace(/\\\\\\./g, \"\\\\.?\")\n      .replace(/[-_\\s]+/g, \"[-_ ]?\");\n    return new RegExp(pattern).test(lower);\n  };\n\n  for (const device of DEVICE_FRAMES) {\n    if (matchesToken(device.name) || matchesToken(device.id)) {\n      if (!best || device.priority > best.priority) best = device;\n    }\n  }\n  return best;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { join, extname, basename } from \"node:path\";\nimport { detectDeviceFromDimensions, detectDeviceFromFilename, type DeviceFrame } from \"./devices.js\";\n\nexport { DEVICE_FRAMES, detectDeviceFromDimensions, detectDeviceFromFilename } from \"./devices.js\";\nexport type { DeviceFrame } from \"./devices.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface FrameitOptions {\n  screenshotsPath: string;\n  outputPath?: string;\n  forceDeviceType?: string;\n  useDeviceOuterShadow?: boolean;\n  whiteBackground?: boolean;\n}\n\nexport async function frameScreenshots(options: FrameitOptions): Promise<void> {\n  const inputDir = options.screenshotsPath;\n  const outputDir = options.outputPath ?? inputDir;\n\n  const entries = await readdir(inputDir);\n  const imageFiles = entries.filter((f) =>\n    [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase()) &&\n    !f.includes(\"_framed\")\n  );\n\n  for (const file of imageFiles) {\n    const filePath = join(inputDir, file);\n    const fileStat = await stat(filePath);\n    if (!fileStat.isFile()) continue;\n\n    // Detect device from filename or dimensions\n    let device = detectDeviceFromFilename(file);\n    if (!device) {\n      const dims = await getImageDimensions(filePath);\n      if (dims) {\n        device = detectDeviceFromDimensions(dims.width, dims.height);\n      }\n    }\n\n    if (!device) continue;\n\n    // Frame the screenshot using ImageMagick\n    const outputFile = join(\n      outputDir,\n      basename(file, extname(file)) + \"_framed.png\"\n    );\n\n    try {\n      await compositeScreenshot(filePath, device, outputFile, options);\n    } catch {\n      // ImageMagick may not be installed — skip gracefully\n    }\n  }\n}\n\nasync function getImageDimensions(\n  filePath: string\n): Promise<{ width: number; height: number } | null> {\n  try {\n    const { stdout } = await execFileAsync(\"identify\", [\"-format\", \"%wx%h\", filePath]);\n    const [w, h] = stdout.trim().split(\"x\").map(Number);\n    if (w && h) return { width: w, height: h };\n  } catch {\n    // ImageMagick not available\n  }\n  return null;\n}\n\nasync function compositeScreenshot(\n  screenshotPath: string,\n  device: DeviceFrame,\n  outputPath: string,\n  options: FrameitOptions\n): Promise<void> {\n  // Create a canvas of the device frame size, composite the screenshot at the offset\n  const bgColor = options.whiteBackground ? \"white\" : \"none\";\n\n  const args = [\n    \"-size\", `${device.width}x${device.height}`,\n    `xc:${bgColor}`,\n    screenshotPath,\n    \"-geometry\", `${device.screenWidth}x${device.screenHeight}+${device.screenOffsetX}+${device.screenOffsetY}`,\n    \"-composite\",\n    outputPath,\n  ];\n\n  await execFileAsync(\"convert\", args);\n}\n"]}