{"version":3,"sources":["../src/viewtag/index.ts","../src/viewtag/device.ts","../src/viewtag/transform.ts","../src/viewtag/url-builder.ts","../src/viewtag/responsive.ts","../src/viewtag/create-ar.ts","../src/viewtag/format-detection.ts"],"sourcesContent":["export { createAR } from './create-ar';\nexport { detectBestFormat, getBestFormatSync, resetFormatCache } from './format-detection';\nexport { encodeAssetPathForDelivery, buildImageUrl } from './url-builder';\nexport { buildTransformString, isGifFormatOutput } from './transform';\nexport type {\n  CreateARConfig,\n  ARInstance,\n  TransformOptions,\n  ResponsiveOptions,\n  ResponsiveAttributes,\n  LayerOptions,\n  LayerEnhancementOptions,\n} from './types';\n","/**\n * Device detection utilities for DPR.\n */\n\nexport function getDPR(): number {\n  if (typeof window === 'undefined') return 1;\n  const dpr = window.devicePixelRatio || 1;\n  // Round to 1 or 2 for most cases (can be extended to 3 for high-DPI)\n  return dpr >= 2 ? 2 : 1;\n}\n\n","/**\n * Transformation builder - converts TransformOptions to URL transformation string\n * with deterministic sorting\n */\n\nimport type { TransformOptions, LayerOptions } from './types';\nimport { getDPR } from './device';\n\ninterface TransformationPart {\n  param: string;\n  value: string;\n  sortKey: string; // For deterministic sorting\n}\n\nfunction normalizePosition(value: string): string {\n  const normalized = value.trim().toLowerCase();\n  const positionMap: Record<string, string> = {\n    center: 'c',\n    'top-left': 'tl',\n    'top-right': 'tr',\n    'bottom-left': 'bl',\n    'bottom-right': 'br',\n    top: 't',\n    bottom: 'b',\n    left: 'l',\n    right: 'r',\n    p_c: 'c',\n    p_tl: 'tl',\n    p_tr: 'tr',\n    p_bl: 'bl',\n    p_br: 'br',\n    p_t: 't',\n    p_b: 'b',\n    p_l: 'l',\n    p_r: 'r',\n  };\n  return positionMap[normalized] || normalized;\n}\n\n/** Output format is GIF — omit DPR and quality in delivery URLs (e.g. ARImage / animated GIF). */\nexport function isGifFormatOutput(transform?: TransformOptions | null): boolean {\n  const f = transform?.f;\n  return typeof f === 'string' && f.toLowerCase() === 'gif';\n}\n\nconst VIDEO_FORMATS = new Set(['mp4', 'webm', 'mov', 'avi', 'mkv', 'ogg', 'ogv']);\n\n/** Output format is a video — omit DPR (video resolution is fixed; dpr_ rejected by API). */\nexport function isVideoFormatOutput(transform?: TransformOptions | null): boolean {\n  const f = transform?.f;\n  return typeof f === 'string' && VIDEO_FORMATS.has(f.toLowerCase());\n}\n\n/**\n * Build transformation string from options\n * Transformations are sorted alphabetically by param prefix\n */\n/**\n * `enableDPR` defaults to `false`: reading the device ratio here makes the URL\n * depend on which machine rendered it — 1 on the server, 2 on a retina client —\n * so an SSR app ships one `src` and hydrates a different one, which costs a\n * React attribute mismatch and a second network fetch. A single URL cannot be\n * ratio-correct for every screen anyway; that is what the `1x`/`2x` candidates\n * in `responsiveImageAttributes` are for. Pass `true` to opt back in.\n */\nexport function buildTransformString(\n  transform: TransformOptions,\n  defaults?: { f?: string; q?: string | number; [key: string]: any },\n  enableDPR: boolean = false\n): string {\n  const parts: TransformationPart[] = [];\n  \n  // Helper to add transformation part\n  const addPart = (param: string, value: string | number | boolean) => {\n    if (value === undefined || value === null) return;\n    \n    let valueStr: string;\n    if (typeof value === 'boolean') {\n      valueStr = value ? '' : '';\n      if (!value) return; // Skip false booleans\n    } else {\n      valueStr = String(value);\n    }\n    \n    // Create sort key: param prefix determines order\n    // Special handling: dpr_ should come early, but after basic size params\n    let sortKey = param;\n    if (param.startsWith('dpr_')) {\n      sortKey = 'dpr_' + param; // Keep dpr early\n    } else if (param.startsWith('a_')) {\n      sortKey = 'a_' + param; // Text rotation\n    } else if (param.startsWith('ar_')) {\n      sortKey = 'ar_' + param;\n    } else if (param.startsWith('bg_')) {\n      sortKey = 'bg_' + param;\n    } else if (param.startsWith('c_')) {\n      sortKey = 'c_' + param;\n    } else if (param.startsWith('co_')) {\n      sortKey = 'co_' + param; // Text color\n    } else if (param.startsWith('e_')) {\n      sortKey = 'e_' + param;\n    } else if (param.startsWith('f_')) {\n      sortKey = 'f_' + param;\n    } else if (param.startsWith('fl_')) {\n      sortKey = 'fl_' + param;\n    } else if (param.startsWith('fo_')) {\n      sortKey = 'fo_' + param;\n    } else if (param.startsWith('flip_')) {\n      sortKey = 'flip_' + param;\n    } else if (param.startsWith('h_')) {\n      sortKey = 'h_' + param;\n    } else if (param.startsWith('ip_')) {\n      sortKey = 'ip_' + param; // Image layer placement\n    } else if (param.startsWith('k_')) {\n      sortKey = 'k_' + param;\n    } else if (param.startsWith('l_')) {\n      sortKey = 'l_' + param;\n    } else if (param.startsWith('la_')) {\n      sortKey = 'la_' + param;\n    } else if (param.startsWith('lar_')) {\n      sortKey = 'lar_' + param;\n    } else if (param.startsWith('lbg_')) {\n      sortKey = 'lbg_' + param;\n    } else if (param.startsWith('lc_')) {\n      sortKey = 'lc_' + param;\n    } else if (param.startsWith('le_')) {\n      sortKey = 'le_' + param;\n    } else if (param.startsWith('lf_')) {\n      sortKey = 'lf_' + param;\n    } else if (param.startsWith('lflip_')) {\n      sortKey = 'lflip_' + param;\n    } else if (param.startsWith('lh_')) {\n      sortKey = 'lh_' + param;\n    } else if (param.startsWith('lp_')) {\n      sortKey = 'lp_' + param;\n    } else if (param.startsWith('lq_')) {\n      sortKey = 'lq_' + param;\n    } else if (param.startsWith('lr_')) {\n      sortKey = 'lr_' + param;\n    } else if (param.startsWith('ltype_')) {\n      sortKey = 'ltype_' + param;\n    } else if (param.startsWith('lw_')) {\n      sortKey = 'lw_' + param;\n    } else if (param.startsWith('lzoom_')) {\n      sortKey = 'lzoom_' + param;\n    } else if (param.startsWith('lbr_')) {\n      sortKey = 'lbr_' + param;\n    } else if (param.startsWith('o_')) {\n      sortKey = 'o_' + param; // Opacity\n    } else if (param.startsWith('p_')) {\n      sortKey = 'p_' + param;\n    } else if (param.startsWith('ps_')) {\n      sortKey = 'ps_' + param;\n    } else if (param.startsWith('q_')) {\n      sortKey = 'q_' + param;\n    } else if (param.startsWith('r_')) {\n      sortKey = 'r_' + param;\n    } else if (param.startsWith('tp_')) {\n      sortKey = 'tp_' + param; // Text placement\n    } else if (param.startsWith('w_')) {\n      sortKey = 'w_' + param;\n    } else if (param.startsWith('x_')) {\n      sortKey = 'x_' + param;\n    } else if (param.startsWith('y_')) {\n      sortKey = 'y_' + param;\n    } else if (param.startsWith('z_')) {\n      sortKey = 'z_' + param;\n    } else if (param.startsWith('br_')) {\n      sortKey = 'br_' + param;\n    }\n    \n    parts.push({ param, value: valueStr, sortKey });\n  };\n  \n  // Size & Crop\n  if (transform.w !== undefined) addPart('w_', transform.w);\n  if (transform.h !== undefined) addPart('h_', transform.h);\n  if (transform.fit) {\n    const fitMap: Record<string, string> = {\n      crop: 'crop',\n      fill: 'fill',\n      fit: 'fit',\n      scale: 'scale'\n    };\n    addPart('c_', fitMap[transform.fit] || transform.fit);\n  }\n  if (transform.ar) addPart('ar_', transform.ar);\n  if (transform.position) addPart('p_', normalizePosition(transform.position));\n  if (transform.position_strategy) {\n    const strategy = String(transform.position_strategy).trim().toLowerCase().replace(/^ps_/, '');\n    if (strategy === 'entropy' || strategy === 'attention') {\n      addPart('ps_', strategy);\n    }\n  }\n  if (transform.focus) addPart('fo_', transform.focus);\n\n  // Video trim (seconds) → so_{n}, eo_{n}\n  if (transform.so !== undefined) addPart('so_', transform.so);\n  if (transform.eo !== undefined) addPart('eo_', transform.eo);\n  \n  // Transform\n  if (transform.r !== undefined) addPart('r_', transform.r);\n  if (transform.z !== undefined) addPart('z_', transform.z);\n  if (transform.flip) addPart('flip_', transform.flip);\n  if (transform.br !== undefined) addPart('br_', transform.br);\n  \n  const resolvedFormat = transform.f ?? defaults?.f;\n  const isGifOutput =\n    typeof resolvedFormat === 'string' && resolvedFormat.toLowerCase() === 'gif';\n  const isVideoOutput =\n    typeof resolvedFormat === 'string' && VIDEO_FORMATS.has(resolvedFormat.toLowerCase());\n  if (resolvedFormat && resolvedFormat !== 'auto') addPart('f_', resolvedFormat);\n\n  // Quality: for GIF, only honor explicit `transform.q` (e.g. 50 → q_50, 90 → q_90); skip defaults.q.\n  const quality = isGifOutput ? transform.q : transform.q ?? defaults?.q;\n  if (quality !== undefined && quality !== 'auto') addPart('q_', quality);\n\n  // Background\n  if (transform.bg) {\n    if (transform.bg.startsWith('rgb:')) {\n      addPart('bg_rgb:', transform.bg.replace('rgb:', ''));\n    } else {\n      addPart('bg_', transform.bg);\n    }\n  }\n\n  // DPR — never for GIF or video output (video resolution is fixed; dpr_ rejected by video API)\n  if (!isGifOutput && !isVideoOutput) {\n    if (enableDPR && transform.dpr === undefined) {\n      const dpr = getDPR();\n      if (dpr !== 1) addPart('dpr_', dpr);\n    } else if (transform.dpr !== undefined) {\n      addPart('dpr_', transform.dpr);\n    }\n  }\n  \n  // Effects (e_*)\n  if (transform.improve !== undefined) {\n    if (typeof transform.improve === 'boolean' && transform.improve) {\n      addPart('e_improve', '');\n    } else if (typeof transform.improve === 'string') {\n      addPart('e_improve', transform.improve);\n    } else if (typeof transform.improve === 'object') {\n      const { mode, blend } = transform.improve;\n      let value = mode || '';\n      if (blend !== undefined) value += `:${blend}`;\n      addPart('e_improve', value);\n    }\n  }\n  if (transform.unsharpMask !== undefined) addPart('e_unsharp_mask:', transform.unsharpMask);\n  if (transform.saturation !== undefined) addPart('e_saturation:', transform.saturation);\n  if (transform.contrast !== undefined) addPart('e_contrast:', transform.contrast);\n  if (transform.brightness !== undefined) addPart('e_brightness:', transform.brightness);\n  if (transform.gamma !== undefined) addPart('e_gamma:', transform.gamma);\n  if (transform.sharpen !== undefined) {\n    if (typeof transform.sharpen === 'boolean' && transform.sharpen) {\n      addPart('e_sharpen', '');\n    } else {\n      addPart('e_sharpen:', transform.sharpen);\n    }\n  }\n  if (transform.grayscale) addPart('e_grayscale', '');\n  if (transform.blackwhite !== undefined) addPart('e_blackwhite:', transform.blackwhite);\n  if (transform.hue !== undefined) addPart('e_hue:', transform.hue);\n  if (transform.warmth !== undefined) addPart('e_warmth:', transform.warmth);\n  if (transform.tint !== undefined) addPart('e_tint:', transform.tint);\n  if (transform.normalize) addPart('e_normalize', '');\n  if (transform.invert) addPart('e_invert', '');\n  if (transform.fade !== undefined) addPart('e_fade:', transform.fade);\n  if (transform.vignette !== undefined) addPart('e_vignette:', transform.vignette);\n  if (transform.highlights !== undefined) addPart('e_highlights:', transform.highlights);\n  if (transform.shadows !== undefined) addPart('e_shadows:', transform.shadows);\n  if (transform.exposure !== undefined) addPart('e_exposure:', transform.exposure);\n  if (transform.structure !== undefined) addPart('e_structure:', transform.structure);\n  if (transform.autoEnhance) addPart('e_auto_enhance', '');\n  if (transform.temperature !== undefined) addPart('e_temperature:', transform.temperature);\n  if (transform.linear) addPart('e_linear:', transform.linear);\n  if (transform.recomb) addPart('e_recomb:', transform.recomb);\n  if (transform.threshold !== undefined) addPart('e_threshold:', transform.threshold);\n  if (transform.convolve) addPart('e_convolve:', transform.convolve);\n  if (transform.unflatten) addPart('e_unflatten', '');\n  if (transform.flatten) addPart('e_flatten', '');\n  if (transform.median !== undefined) addPart('e_median:', transform.median);\n  if (transform.blur !== undefined) addPart('e_blur:', transform.blur);\n  if (transform.extend) addPart('e_extend:', transform.extend);\n  if (transform.affine) addPart('e_affine:', transform.affine);\n  if (transform.extract) addPart('e_extract:', transform.extract);\n  if (transform.ensureAlpha) addPart('e_ensure_alpha', '');\n  if (transform.removeAlpha) addPart('e_remove_alpha:', transform.removeAlpha);\n  \n  // Blend mode (for layers)\n  if (transform.blend) addPart('e_', transform.blend);\n  \n  // Raw transformations (for advanced users)\n  Object.keys(transform).forEach(key => {\n    if (key.startsWith('_') || \n        ['w', 'h', 'fit', 'ar', 'position', 'position_strategy', 'focus', 'so', 'eo', 'r', 'z', 'flip', 'br', 'f', 'q', 'bg', 'dpr',\n         'improve', 'unsharpMask', 'saturation', 'contrast', 'brightness', 'gamma', 'sharpen',\n         'grayscale', 'blackwhite', 'hue', 'warmth', 'tint', 'normalize', 'invert', 'fade',\n         'vignette', 'highlights', 'shadows', 'exposure', 'structure', 'autoEnhance', 'temperature',\n         'linear', 'recomb', 'threshold', 'convolve', 'unflatten', 'flatten', 'median', 'blur',\n         'extend', 'affine', 'extract', 'ensureAlpha', 'removeAlpha', 'blend', 'layers'].includes(key)) {\n      return; // Skip already processed keys\n    }\n    \n    // Allow raw transformation strings\n    if (typeof transform[key] === 'string' || typeof transform[key] === 'number' || typeof transform[key] === 'boolean') {\n      addPart(key, transform[key] as any);\n    }\n  });\n  \n  // Sort base transformation parts deterministically by param prefix\n  parts.sort((a, b) => {\n    // Extract prefix for comparison\n    const prefixA = a.param.split('_')[0] + '_';\n    const prefixB = b.param.split('_')[0] + '_';\n    \n    if (prefixA !== prefixB) {\n      return prefixA.localeCompare(prefixB);\n    }\n    \n    // Same prefix, compare full param\n    return a.param.localeCompare(b.param);\n  });\n  \n  // Build base transformation string\n  const baseTransform = parts.map(p => {\n    if (p.value === '') {\n      return p.param; // Boolean flags without values\n    }\n    return `${p.param}${p.value}`;\n  }).join(',');\n  \n  // Build layers separately - each layer must end with fl_layer_apply\n  const layerParts: string[] = [];\n  if (transform.layers && transform.layers.length > 0) {\n    transform.layers.forEach(layer => {\n      const layerTransformParts: TransformationPart[] = [];\n      \n      const addLayerPart = (param: string, value: string | number | boolean) => {\n        if (value === undefined || value === null) return;\n        \n        let valueStr: string;\n        if (typeof value === 'boolean') {\n          valueStr = value ? '' : '';\n          if (!value) return; // Skip false booleans\n        } else {\n          valueStr = String(value);\n        }\n        \n        layerTransformParts.push({\n          param,\n          value: valueStr,\n          sortKey: param\n        });\n      };\n      \n      buildLayerTransform(layer, addLayerPart);\n      \n      // Sort layer parts with specific order (not alphabetical)\n      // Order: l_image/l_text first, then ip_/tp_, then other params, then fl_layer_apply\n      const applyFlag = layerTransformParts.find(p => p.param === 'fl_layer_apply');\n      const regularParts = layerTransformParts.filter(p => p.param !== 'fl_layer_apply');\n      \n      // Define order priority for layer parameters\n      const getLayerParamOrder = (param: string): number => {\n        // l_image or l_text must be first\n        if (param.startsWith('l_image:') || param.startsWith('l_text:')) return 0;\n        // ip_ (image placement) or tp_ (text placement) comes right after l_image/l_text\n        if (param.startsWith('ip_') || param.startsWith('tp_')) return 1;\n        // l_type comes after placement\n        if (param.startsWith('l_type:')) return 2;\n        // lw_, lh_ come after l_type\n        if (param.startsWith('lw_')) return 3;\n        if (param.startsWith('lh_')) return 4;\n        // o_ (opacity) comes after dimensions\n        if (param.startsWith('o_')) return 5;\n        // Other l* layer params (not lzoom_; see below)\n        if (param.startsWith('l') && !param.startsWith('lzoom_')) return 6;\n        // co_ (color) for text\n        if (param.startsWith('co_')) return 7;\n        // a_ (rotation) for text\n        if (param.startsWith('a_')) return 8;\n        // lr_ (rotation) for image\n        if (param.startsWith('lr_')) return 8;\n        // lzoom_ after placement/color/rotation, before offsets\n        if (param.startsWith('lzoom_')) return 9;\n        // x_, y_ offsets\n        if (param.startsWith('x_') || param.startsWith('y_')) return 10;\n        // le_ (layer enhancements)\n        if (param.startsWith('le_')) return 11;\n        // e_ (blend mode)\n        if (param.startsWith('e_')) return 12;\n        // Everything else\n        return 100;\n      };\n      \n      regularParts.sort((a, b) => {\n        const orderA = getLayerParamOrder(a.param);\n        const orderB = getLayerParamOrder(b.param);\n        \n        if (orderA !== orderB) {\n          return orderA - orderB;\n        }\n        \n        // Same order priority, sort alphabetically\n        return a.param.localeCompare(b.param);\n      });\n      \n      // Build layer string: regular parts + fl_layer_apply at the end\n      const layerString = [\n        ...regularParts.map(p => p.value === '' ? p.param : `${p.param}${p.value}`),\n        ...(applyFlag ? [applyFlag.param] : [])\n      ].join(',');\n      \n      if (layerString) {\n        layerParts.push(layerString);\n      }\n    });\n  }\n  \n  // Combine: base transformations + layers\n  const allParts = baseTransform ? [baseTransform, ...layerParts] : layerParts;\n  return allParts.join(',');\n}\n\nfunction buildLayerTransform(layer: LayerOptions, addPart: (param: string, value: string | number | boolean) => void) {\n  if (layer.type === 'text') {\n    // Build text layer: l_text:fontFamily_fontSize_style:text\n    // Example: l_text:arial_24_bold:Demo\n    const parts: string[] = [];\n    if (layer.fontFamily) parts.push(layer.fontFamily);\n    if (layer.fontSize !== undefined) parts.push(String(layer.fontSize));\n    if (layer.fontStyle) parts.push(layer.fontStyle);\n    if (layer.align) parts.push(layer.align);\n    \n    const text = layer.text ? encodeURIComponent(layer.text) : '';\n    const layerSpec = parts.length > 0 ? `${parts.join('_')}:${text}` : text;\n    addPart('l_text:', layerSpec);\n    \n    // Text layer modifiers (after l_text)\n    if (layer.fontColor) {\n      // Remove # if present, convert to hex without #\n      const color = layer.fontColor.replace('#', '');\n      addPart('co_', color);\n    }\n    if (layer.placement) {\n      // Convert placement to short form if needed\n      const placement = normalizePlacement(layer.placement);\n      if (placement) addPart('tp_', placement);\n    }\n    if (layer.rotation !== undefined) addPart('a_', layer.rotation);\n    if (layer.x !== undefined) addPart('x_', layer.x);\n    if (layer.y !== undefined) addPart('y_', layer.y);\n  } else if (layer.type === 'image') {\n    // Image layer: l_image:imagePath\n    // Order: l_image, l_type, lw, lh, ip, o, fl_layer_apply\n    // Example: l_image:fav.png,l_type:overlay,lw_200,lh_200,ip_ne,o_100,fl_layer_apply\n    if (layer.imagePath) {\n      addPart('l_image:', layer.imagePath);\n    }\n    \n    // Image layer modifiers in correct order\n    if (layer.layerType) addPart('l_type:', layer.layerType);\n    if (layer.width !== undefined) addPart('lw_', layer.width);\n    if (layer.height !== undefined) addPart('lh_', layer.height);\n    if (layer.placement) {\n      // Convert placement to short form if needed\n      const placement = normalizePlacement(layer.placement);\n      if (placement) addPart('ip_', placement);\n    }\n    if (layer.opacity !== undefined) addPart('o_', layer.opacity);\n    if (layer.rotation !== undefined) addPart('lr_', layer.rotation);\n    if (layer.crop) addPart('lc_', layer.crop);\n    if (layer.aspectRatio) addPart('lar_', layer.aspectRatio);\n    if (layer.quality !== undefined) addPart('lq_', layer.quality);\n    if (layer.format) addPart('lf_', layer.format);\n    if (layer.background) addPart('lbg_', layer.background);\n    if (layer.position) addPart('lp_', layer.position);\n    if (layer.borderRadius !== undefined) addPart('lbr_', layer.borderRadius);\n    if (layer.flip) addPart('lflip_', layer.flip);\n    if (layer.zoom !== undefined) addPart('lzoom_', layer.zoom);\n    if (layer.x !== undefined) addPart('x_', layer.x);\n    if (layer.y !== undefined) addPart('y_', layer.y);\n    if (layer.blendMode) addPart('e_', layer.blendMode);\n    \n    // Layer enhancements (le_*)\n    if (layer.enhance) {\n      const enhance = layer.enhance;\n      if (enhance.improve !== undefined) {\n        if (typeof enhance.improve === 'boolean' && enhance.improve) {\n          addPart('le_improve', '');\n        } else if (typeof enhance.improve === 'string') {\n          addPart('le_improve', enhance.improve);\n        }\n      }\n      if (enhance.sharpen !== undefined) addPart('le_sharpen:', enhance.sharpen);\n      if (enhance.brightness !== undefined) addPart('le_brightness:', enhance.brightness);\n      if (enhance.saturation !== undefined) addPart('le_saturation:', enhance.saturation);\n      if (enhance.contrast !== undefined) addPart('le_contrast:', enhance.contrast);\n      if (enhance.hue !== undefined) addPart('le_hue:', enhance.hue);\n      if (enhance.warmth !== undefined) addPart('le_warmth:', enhance.warmth);\n      if (enhance.tint !== undefined) addPart('le_tint:', enhance.tint);\n      if (enhance.normalize) addPart('le_normalize', '');\n      if (enhance.invert) addPart('le_invert', '');\n      if (enhance.fade !== undefined) addPart('le_fade:', enhance.fade);\n      if (enhance.vignette !== undefined) addPart('le_vignette:', enhance.vignette);\n      if (enhance.highlights !== undefined) addPart('le_highlights:', enhance.highlights);\n      if (enhance.shadows !== undefined) addPart('le_shadows:', enhance.shadows);\n      if (enhance.exposure !== undefined) addPart('le_exposure:', enhance.exposure);\n      if (enhance.structure !== undefined) addPart('le_structure:', enhance.structure);\n      if (enhance.autoEnhance) addPart('le_auto_enhance', '');\n      if (enhance.temperature !== undefined) addPart('le_temperature:', enhance.temperature);\n      if (enhance.blackwhite !== undefined) addPart('le_blackwhite:', enhance.blackwhite);\n      if (enhance.gamma !== undefined) addPart('le_gamma:', enhance.gamma);\n      if (enhance.unsharpMask !== undefined) addPart('le_unsharp_mask:', enhance.unsharpMask);\n      if (enhance.grayscale) addPart('le_grayscale', '');\n    }\n  }\n  \n  // Layer apply flag (always at the end)\n  addPart('fl_layer_apply', '');\n}\n\n/**\n * Normalize placement values to short form\n * north -> n, north-east -> ne, etc.\n */\nfunction normalizePlacement(placement: string): string {\n  const normalized = placement.trim().toLowerCase().replace(/\\s+/g, ' ');\n  const mapping: Record<string, string> = {\n    'north': 'n',\n    'south': 's',\n    'east': 'e',\n    'west': 'w',\n    'center': 'c',\n    'north-west': 'nw',\n    'north west': 'nw',\n    'north-east': 'ne',\n    'north east': 'ne',\n    'south-west': 'sw',\n    'south west': 'sw',\n    'south-east': 'se',\n    'south east': 'se',\n    'none': 'none'\n  };\n  return mapping[normalized] || normalized;\n}\n\n","/**\n * URL builder for AutoRender image URLs\n */\n\nimport { buildTransformString } from './transform';\nimport type { TransformOptions } from './types';\n\nconst ABSOLUTE_URL_RE = /^https?:\\/\\//i;\n\n/**\n * Escape only the structural characters of a remote fetch payload:\n * `%` (round-trip safety), `,` (transform-token delimiter), `?` and `#`\n * (terminate the path when the generated URL is requested). Slashes and\n * colons stay literal, so URLs without these characters are unchanged.\n * Kept byte-identical with `@autorender/native`'s escapeFetchPayload —\n * enforced by the native package's URL parity tests.\n */\nexport function escapeFetchPayload(url: string): string {\n  return url\n    .replace(/%/g, '%25')\n    .replace(/,/g, '%2C')\n    .replace(/\\?/g, '%3F')\n    .replace(/#/g, '%23');\n}\n\n/**\n * Workspace path segment for `ar.url()` / ARImage `src`.\n *\n * - Relative paths (`products/shoe.jpg`): each path segment is encoded separately.\n * - Absolute URLs (`https://demo.com/photo.jpg`): emitted as `fetch_<url>`.\n */\nexport function encodeAssetPathForDelivery(src: string): string {\n  const trimmed = src.trim();\n  if (!trimmed) {\n    return '';\n  }\n\n  if (ABSOLUTE_URL_RE.test(trimmed)) {\n    const fetchPayload = `fetch_${trimmed}`;\n    return encodeURIComponent(fetchPayload);\n  }\n\n  if (trimmed.startsWith('fetch_')) {\n    return encodeURIComponent(trimmed);\n  }\n\n  return trimmed\n    .split('/')\n    .filter(Boolean)\n    .map(segment => encodeURIComponent(segment))\n    .join('/');\n}\n\nexport function buildImageUrl(\n  baseUrl: string,\n  workspace: string,\n  src: string,\n  transform?: TransformOptions,\n  defaults?: { f?: string; q?: string | number; [key: string]: any },\n  // Defaults to `false` for the same reason `buildTransformString` does — a\n  // device-derived `dpr_` makes the URL differ between server and client render.\n  enableDPR: boolean = false\n): string {\n  // Normalize base URL (remove trailing slashes)\n  const normalizedBase = baseUrl.replace(/\\/+$/, '');\n  \n  // Build transformation string\n  const transformStr = buildTransformString(transform || {}, defaults, enableDPR);\n\n  const trimmedSrc = src.trim();\n\n  // Remote fetch support:\n  // For `https://...` sources, the backend expects the `fetch_...` token to be part\n  // of the transformation segment (comma-separated), not a separate path segment.\n  if (ABSOLUTE_URL_RE.test(trimmedSrc)) {\n    const fetchPart = `fetch_${escapeFetchPayload(trimmedSrc)}`;\n    const transformWithFetch = transformStr ? `${transformStr},${fetchPart}` : fetchPart;\n    return `${normalizedBase}/${workspace}/${transformWithFetch}`;\n  }\n\n  // Support callers passing an already-prefixed fetch token.\n  if (trimmedSrc.startsWith('fetch_')) {\n    const fetchPart = `fetch_${escapeFetchPayload(trimmedSrc.slice(6))}`;\n    const transformWithFetch = transformStr ? `${transformStr},${fetchPart}` : fetchPart;\n    return `${normalizedBase}/${workspace}/${transformWithFetch}`;\n  }\n\n  const encodedPath = encodeAssetPathForDelivery(trimmedSrc);\n  \n  // Build URL: baseUrl/workspace/transformations/file_path\n  if (transformStr) {\n    return `${normalizedBase}/${workspace}/${transformStr}/${encodedPath}`;\n  }\n\n  return `${normalizedBase}/${workspace}/${encodedPath}`;\n}\n\n","/**\n * Responsive image attributes generator\n * Implements three strategies based on input options\n */\n\nimport { buildImageUrl } from './url-builder';\nimport type { ResponsiveOptions, ResponsiveAttributes, TransformOptions } from './types';\n\n// The delivery edge snaps `w_` to a fixed ladder — widths at or below 240 are\n// served exactly, anything larger rounds to the nearest of these rungs (ties go\n// up). Breakpoints that are not rungs cost a cache key and return a byte-identical\n// image under a different `w` descriptor, so every default below is either <= 240\n// or an exact rung.\nexport const DEFAULT_DEVICE_BREAKPOINTS = [320, 480, 720, 1080, 1440, 1920];\nexport const DEFAULT_IMAGE_BREAKPOINTS = [16, 32, 48, 64, 96, 128, 240, 320, 480];\n\n/**\n * Parse sizes attribute to extract minimum viewport width\n * Returns the smallest vw value found, or null if none found\n */\nfunction parseMinVWFromSizes(sizes: string): number | null {\n  // Match patterns like \"33vw\", \"100vw\", \"(min-width: 800px) 33vw\"\n  const vwMatches = sizes.match(/(\\d+(?:\\.\\d+)?)vw/g);\n  if (!vwMatches || vwMatches.length === 0) return null;\n  \n  const vwValues = vwMatches.map(m => parseFloat(m));\n  return Math.min(...vwValues);\n}\n\n/**\n * Find nearest breakpoint to a given width\n */\nfunction findNearestBreakpoint(width: number, breakpoints: number[]): number {\n  return breakpoints.reduce((prev, curr) => {\n    return Math.abs(curr - width) < Math.abs(prev - width) ? curr : prev;\n  });\n}\n\nfunction normalizeBreakpoints(breakpoints: number[]): number[] {\n  const normalized = breakpoints\n    .filter((bp): bp is number => Number.isFinite(bp) && bp > 0)\n    .map(bp => Math.round(bp));\n\n  if (normalized.length === 0) {\n    return [];\n  }\n\n  return [...new Set(normalized)].sort((a, b) => a - b);\n}\n\n/**\n * Generate responsive image attributes\n * \n * Rule 1: width only → DPR strategy (1x and 2x)\n * Rule 2: sizes provided → width-based strategy\n * Rule 3: neither → all device breakpoints\n */\nexport function generateResponsiveAttributes(\n  baseUrl: string,\n  workspace: string,\n  options: ResponsiveOptions,\n  defaults?: { f?: string; q?: string | number; [key: string]: any },\n  deviceBreakpoints: number[] = DEFAULT_DEVICE_BREAKPOINTS,\n  imageBreakpoints: number[] = DEFAULT_IMAGE_BREAKPOINTS,\n  enableDPR: boolean = true\n): ResponsiveAttributes {\n  const { src, width, sizes, transform, breakpoints } = options;\n\n  const normalizedDeviceBreakpoints = normalizeBreakpoints(deviceBreakpoints);\n  const normalizedImageBreakpoints = normalizeBreakpoints(imageBreakpoints);\n  const customBreakpoints = breakpoints ? normalizeBreakpoints(breakpoints) : null;\n\n  const effectiveDeviceBreakpoints =\n    normalizedDeviceBreakpoints.length > 0\n      ? normalizedDeviceBreakpoints\n      : normalizeBreakpoints(DEFAULT_DEVICE_BREAKPOINTS);\n  const effectiveImageBreakpoints =\n    normalizedImageBreakpoints.length > 0\n      ? normalizedImageBreakpoints\n      : normalizeBreakpoints(DEFAULT_IMAGE_BREAKPOINTS);\n  \n  // Rule 1: width only → DPR strategy\n  if (width !== undefined && !sizes) {\n    const baseWidth = width;\n\n    // Both candidates are emitted unconditionally. Reading the device ratio here\n    // would make the markup depend on the renderer: `getDPR()` is 1 on the server\n    // and 2 on a retina client, so the server would ship a one-candidate srcSet\n    // and the client would hydrate a two-candidate one — a React attribute\n    // mismatch, and a second network fetch when the browser re-picks. Emitting\n    // both and letting the browser choose is what `1x`/`2x` descriptors are for.\n    const srcSetParts: string[] = [];\n\n    // 1x URL — no `dpr_1`, which is a no-op the origin still caches separately.\n    const transform1x: TransformOptions = {\n      ...transform,\n      w: baseWidth\n    };\n    const url1x = buildImageUrl(baseUrl, workspace, src, transform1x, defaults, false);\n    srcSetParts.push(`${url1x} 1x`);\n\n    if (enableDPR) {\n      const transform2x: TransformOptions = {\n        ...transform,\n        w: baseWidth,\n        dpr: 2\n      };\n      const url2x = buildImageUrl(baseUrl, workspace, src, transform2x, defaults, false);\n      srcSetParts.push(`${url2x} 2x`);\n    }\n\n    // Default `src` must match the 1x candidate (avoid enableDPR-only drift vs srcSet).\n    const baseSrc = url1x;\n\n    return {\n      src: baseSrc,\n      srcSet: srcSetParts.join(', '),\n      width: baseWidth\n    };\n  }\n  \n  // Rule 2: sizes provided → width-based strategy\n  if (sizes) {\n    const minVW = parseMinVWFromSizes(sizes);\n\n    // Prefer user breakpoints, else both ladders. The image ladder alone tops out\n    // at 480, so a `sizes=\"100vw\"` hero would offer nothing larger and every\n    // viewport above 480 would upscale a 480 px rendition.\n    const widthBreakpoints =\n      customBreakpoints && customBreakpoints.length > 0\n        ? customBreakpoints\n        : normalizeBreakpoints([...effectiveImageBreakpoints, ...effectiveDeviceBreakpoints]);\n    const smallestViewport = effectiveDeviceBreakpoints[0];\n    const minimumRequiredWidth = minVW\n      ? Math.max(1, Math.round((minVW / 100) * smallestViewport))\n      : 0;\n    const filteredBreakpoints = widthBreakpoints.filter(bp => bp >= minimumRequiredWidth);\n    const finalBreakpoints =\n      filteredBreakpoints.length > 0\n        ? filteredBreakpoints\n        : [findNearestBreakpoint(Math.max(1, minimumRequiredWidth), widthBreakpoints)];\n    \n    // Generate srcset with w descriptors. `dpr_` is deliberately not emitted on\n    // these: a `w` descriptor already states the candidate's real pixel width, and\n    // the browser multiplies by its own ratio when choosing. Adding `dpr_` would\n    // double-count the ratio and, because it is read from the device, differ\n    // between server and client render.\n    const srcSetParts = finalBreakpoints.map(bp => {\n      const transformWithWidth: TransformOptions = {\n        ...transform,\n        w: bp\n      };\n      const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, false);\n      return `${url} ${bp}w`;\n    });\n\n    // Base URL (use smallest breakpoint or provided width)\n    const baseWidth = width || finalBreakpoints[0];\n    const baseTransform: TransformOptions = {\n      ...transform,\n      w: baseWidth\n    };\n    const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, false);\n    \n    return {\n      src: baseSrc,\n      srcSet: srcSetParts.join(', '),\n      sizes: sizes,\n      width: baseWidth\n    };\n  }\n  \n  // Rule 3: neither width nor sizes → all device breakpoints\n  // Use all breakpoints with w descriptors\n  const finalBreakpoints =\n    customBreakpoints && customBreakpoints.length > 0\n      ? customBreakpoints\n      : effectiveDeviceBreakpoints;\n  // As in Rule 2, `w` descriptors carry the pixel width, so no `dpr_` here.\n  const srcSetParts = finalBreakpoints.map(bp => {\n    const transformWithWidth: TransformOptions = {\n      ...transform,\n      w: bp\n    };\n    const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, false);\n    return `${url} ${bp}w`;\n  });\n\n  // Base URL (use smallest breakpoint)\n  const baseWidth = finalBreakpoints[0];\n  const baseTransform: TransformOptions = {\n    ...transform,\n    w: baseWidth\n  };\n  const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, false);\n  \n  return {\n    src: baseSrc,\n    srcSet: srcSetParts.join(', '),\n    sizes: '100vw',\n    width: baseWidth\n  };\n}\n","/**\n * Main AutoRender client factory\n * Creates an AR instance with URL building and responsive image capabilities\n */\n\nimport { buildImageUrl } from './url-builder';\nimport { buildTransformString } from './transform';\nimport {\n  generateResponsiveAttributes,\n  DEFAULT_DEVICE_BREAKPOINTS,\n  DEFAULT_IMAGE_BREAKPOINTS\n} from './responsive';\nimport { getDPR } from './device';\nimport type {\n  CreateARConfig,\n  ARInstance,\n  TransformOptions,\n  ResponsiveOptions,\n  ResponsiveAttributes\n} from './types';\n\nconst DEFAULT_BASE_URL = 'https://assets.autorender.io';\n\nexport function createAR(config: CreateARConfig): ARInstance {\n  const {\n    baseUrl = DEFAULT_BASE_URL,\n    workspace,\n    defaults = {},\n    deviceBreakpoints = DEFAULT_DEVICE_BREAKPOINTS,\n    imageBreakpoints = DEFAULT_IMAGE_BREAKPOINTS,\n    enableDPR = true\n  } = config;\n  \n  if (!workspace) {\n    throw new Error('workspace is required');\n  }\n  \n  const instance: ARInstance = {\n    /**\n     * Generate image URL with transformations\n     */\n    url(src: string, transform?: TransformOptions): string {\n      // `enableDPR` is deliberately not forwarded: it governs the `2x` candidate\n      // in `responsiveImageAttributes`, not this single URL, which must be the\n      // same string on the server and in the browser.\n      return buildImageUrl(\n        baseUrl,\n        workspace,\n        src,\n        transform,\n        defaults\n      );\n    },\n\n    /**\n     * Generate transformation string only (without URL)\n     */\n    transformString(transform: TransformOptions): string {\n      return buildTransformString(\n        transform,\n        defaults\n      );\n    },\n    \n    /**\n     * Generate responsive image attributes\n     */\n    responsiveImageAttributes(options: ResponsiveOptions): ResponsiveAttributes {\n      // Allow per-call breakpoint override\n      const effectiveDeviceBreakpoints = options.breakpoints || deviceBreakpoints;\n      \n      return generateResponsiveAttributes(\n        baseUrl,\n        workspace,\n        options,\n        defaults,\n        effectiveDeviceBreakpoints,\n        imageBreakpoints,\n        enableDPR\n      );\n    },\n    \n    /**\n     * Get current device pixel ratio\n     */\n    getDPR(): number {\n      return getDPR();\n    }\n  };\n  \n  return instance;\n}\n\n","/**\n * Browser format detection utilities\n * Detects which image formats the browser supports\n */\n\nconst isBrowser = typeof document !== 'undefined' && typeof Image !== 'undefined';\n\nlet cachedFormat: string | null = null;\n\n/**\n * Detect the best image format supported by the browser\n * Priority: AVIF > WebP > JPEG\n * Uses synchronous detection for immediate results\n */\nexport function detectBestFormat(): string {\n  if (cachedFormat !== null) {\n    return cachedFormat;\n  }\n\n  if (!isBrowser) {\n    // Server-side or non-browser environment\n    cachedFormat = 'webp';\n    return cachedFormat;\n  }\n\n  // Synchronous detection using canvas.toDataURL\n  try {\n    const canvas = document.createElement('canvas');\n    canvas.width = 1;\n    canvas.height = 1;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) {\n      cachedFormat = 'webp';\n      return cachedFormat;\n    }\n\n    // Test AVIF\n    try {\n      const avifDataURL = canvas.toDataURL('image/avif');\n      if (avifDataURL && avifDataURL.indexOf('data:image/avif') === 0) {\n        cachedFormat = 'avif';\n        return cachedFormat;\n      }\n    } catch (e) {\n      // AVIF not supported\n    }\n\n    // Test WebP\n    try {\n      const webpDataURL = canvas.toDataURL('image/webp');\n      if (webpDataURL && webpDataURL.indexOf('data:image/webp') === 0) {\n        cachedFormat = 'webp';\n        return cachedFormat;\n      }\n    } catch (e) {\n      // WebP not supported\n    }\n\n    // Fallback to JPEG\n    cachedFormat = 'jpg';\n    return cachedFormat;\n  } catch (e) {\n    // Fallback to WebP if detection fails\n    cachedFormat = 'webp';\n    return cachedFormat;\n  }\n}\n\n\n/**\n * Get the best format synchronously (uses cached value or detects)\n */\nexport function getBestFormatSync(): string {\n  if (cachedFormat !== null) {\n    return cachedFormat;\n  }\n  return detectBestFormat();\n}\n\n/**\n * Reset cached format (useful for testing)\n */\nexport function resetFormatCache(): void {\n  cachedFormat = null;\n}\n\n"],"mappings":"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","names":["baseWidth","srcSetParts","baseSrc","finalBreakpoints","baseTransform"]}