{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/custom-artwork-cropper.js?psv=crop-modes-v2-20260819"],
  "sourcesContent": ["(() => {\n  const root = document.querySelector('[data-ps-product]');\n  const modal = root?.querySelector('[data-ps-cropper]');\n  const geometry = globalThis.PosterCropGeometry;\n  const cropMode = globalThis.PosterCropMode;\n  if (!root || !modal || !geometry || !cropMode) return;\n\n  const workspace = modal.querySelector('[data-ps-cropper-workspace]');\n  const canvas = modal.querySelector('[data-ps-cropper-canvas]');\n  const context = canvas?.getContext('2d');\n  const confirmButton = modal.querySelector('[data-ps-cropper-confirm]');\n  const cancelButtons = [...modal.querySelectorAll('[data-ps-cropper-cancel]')];\n  const ratioButtons = [...modal.querySelectorAll('[data-ps-cropper-ratio]')];\n  const instruction = modal.querySelector('[data-ps-cropper-instruction]');\n  if (!workspace || !canvas || !context || !confirmButton || !ratioButtons.length) return;\n\n  const ratios = cropMode.ratios;\n  const supportsFreeform = root.dataset.psFramingRenderMode === 'css';\n  const handles = ['nw', 'ne', 'sw', 'se'];\n  let state = null;\n  let resolver = null;\n  let resizeObserver = null;\n  let previousFocus = null;\n  let pointerState = null;\n\n  const pointFromEvent = (event) => {\n    const bounds = canvas.getBoundingClientRect();\n    return { x: event.clientX - bounds.left, y: event.clientY - bounds.top };\n  };\n\n  const displayedImageRect = () => {\n    const availableWidth = canvas.clientWidth;\n    const availableHeight = canvas.clientHeight;\n    const scale = Math.min(availableWidth / state.image.naturalWidth, availableHeight / state.image.naturalHeight);\n    const width = state.image.naturalWidth * scale;\n    const height = state.image.naturalHeight * scale;\n    return { x: (availableWidth - width) / 2, y: (availableHeight - height) / 2, width, height };\n  };\n\n  const handlePoints = (crop) => ({\n    nw: { x: crop.x, y: crop.y }, ne: { x: crop.x + crop.width, y: crop.y },\n    sw: { x: crop.x, y: crop.y + crop.height }, se: { x: crop.x + crop.width, y: crop.y + crop.height },\n  });\n\n  const hitHandle = (point) => {\n    const points = handlePoints(state.crop);\n    return handles.find((name) => Math.hypot(point.x - points[name].x, point.y - points[name].y) <= 18) || '';\n  };\n\n  const isInsideCrop = (point) => point.x >= state.crop.x && point.x <= state.crop.x + state.crop.width\n    && point.y >= state.crop.y && point.y <= state.crop.y + state.crop.height;\n\n  const draw = () => {\n    if (!state) return;\n    const width = canvas.clientWidth;\n    const height = canvas.clientHeight;\n    const density = Math.min(globalThis.devicePixelRatio || 1, 2);\n    if (canvas.width !== Math.round(width * density) || canvas.height !== Math.round(height * density)) {\n      canvas.width = Math.round(width * density);\n      canvas.height = Math.round(height * density);\n    }\n    context.setTransform(density, 0, 0, density, 0, 0);\n    context.clearRect(0, 0, width, height);\n    context.fillStyle = '#292b2b';\n    context.fillRect(0, 0, width, height);\n    const imageRect = displayedImageRect();\n    context.drawImage(state.image, imageRect.x, imageRect.y, imageRect.width, imageRect.height);\n\n    const crop = state.crop;\n    context.save();\n    context.fillStyle = 'rgb(0 0 0 / 58%)';\n    context.beginPath();\n    context.rect(imageRect.x, imageRect.y, imageRect.width, imageRect.height);\n    context.rect(crop.x, crop.y, crop.width, crop.height);\n    context.fill('evenodd');\n    context.restore();\n\n    context.save();\n    context.strokeStyle = '#fff';\n    context.lineWidth = 2;\n    context.strokeRect(crop.x, crop.y, crop.width, crop.height);\n    context.strokeStyle = 'rgb(255 255 255 / 72%)';\n    context.lineWidth = 1;\n    context.beginPath();\n    for (let index = 1; index < 3; index += 1) {\n      const x = crop.x + crop.width * index / 3;\n      const y = crop.y + crop.height * index / 3;\n      context.moveTo(x, crop.y); context.lineTo(x, crop.y + crop.height);\n      context.moveTo(crop.x, y); context.lineTo(crop.x + crop.width, y);\n    }\n    context.stroke();\n    context.fillStyle = '#fff';\n    Object.values(handlePoints(crop)).forEach((point) => {\n      context.fillRect(point.x - 7, point.y - 7, 14, 14);\n    });\n    context.restore();\n  };\n\n  const resetCrop = () => {\n    if (!state) return;\n    const currentRatio = state.crop?.width && state.crop?.height ? state.crop.width / state.crop.height : 1;\n    state.crop = geometry.fitCrop(displayedImageRect(), ratios[state.orientation] || currentRatio, 0.72);\n    draw();\n  };\n\n  const syncInstruction = () => {\n    if (!instruction || !state) return;\n    instruction.textContent = cropMode.isFreeform(state)\n      ? instruction.dataset.freeformText\n      : instruction.dataset.fixedText;\n  };\n\n  const syncRatioSelection = () => {\n    if (!state) return;\n    const selectedOption = cropMode.selectedOption(state);\n    ratioButtons.forEach((button) => {\n      const selected = button.dataset.psCropperRatio === selectedOption;\n      button.classList.toggle('is-selected', selected);\n      button.setAttribute('aria-checked', String(selected));\n    });\n    syncInstruction();\n  };\n\n  const setCropOption = (option, { track = true } = {}) => {\n    if (!state) return;\n    const selection = cropMode.select(option, supportsFreeform);\n    if (!selection) return;\n    state.cropMode = selection.cropMode;\n    state.orientation = selection.orientation;\n    syncRatioSelection();\n\n    if (selection.cropMode === 'fixed') {\n      resetCrop();\n      if (track) {\n        window.dataLayer?.push({\n          event: 'custom_artwork_crop_ratio_selected',\n          orientation: selection.orientation,\n          ratio: ratios[selection.orientation],\n          crop_mode: 'fixed',\n        });\n      }\n      return;\n    }\n\n    draw();\n    if (track) {\n      window.dataLayer?.push({\n        event: 'custom_artwork_crop_mode_selected',\n        crop_mode: 'freeform',\n        starting_ratio: state.crop.width / state.crop.height,\n      });\n    }\n  };\n\n  const close = (result) => {\n    modal.hidden = true;\n    document.body.classList.remove('ps-cropper-open');\n    pointerState = null;\n    const resolve = resolver;\n    resolver = null;\n    if (state?.url) URL.revokeObjectURL(state.url);\n    state = null;\n    previousFocus?.focus?.();\n    previousFocus = null;\n    resolve?.(result);\n  };\n\n  const cancel = () => {\n    if (!state) return;\n    window.dataLayer?.push({ event: 'custom_artwork_crop_cancelled' });\n    close(null);\n  };\n\n  const outputFile = () => new Promise((resolve, reject) => {\n    const source = geometry.toSourceRect(state.crop, displayedImageRect(), state.image.naturalWidth, state.image.naturalHeight);\n    const cropRatio = state.crop.width / state.crop.height;\n    const outputOrientation = cropMode.outputOrientation(state);\n    const longest = Math.max(source.width, source.height);\n    const outputScale = Math.min(1, 3200 / longest);\n    const outputWidth = Math.max(1, Math.round(source.width * outputScale));\n    const outputHeight = Math.max(1, Math.round(source.height * outputScale));\n    const outputCanvas = document.createElement('canvas');\n    outputCanvas.width = outputWidth;\n    outputCanvas.height = outputHeight;\n    const outputContext = outputCanvas.getContext('2d');\n    outputContext.drawImage(state.image, source.x, source.y, source.width, source.height, 0, 0, outputWidth, outputHeight);\n    const requestedType = ['image/jpeg', 'image/png', 'image/webp'].includes(state.file.type) ? state.file.type : 'image/jpeg';\n    outputCanvas.toBlob((blob) => {\n      if (!blob) {\n        reject(new Error('The cropped image could not be prepared. Please try again.'));\n        return;\n      }\n      const extension = requestedType === 'image/png' ? 'png' : requestedType === 'image/webp' ? 'webp' : 'jpg';\n      const baseName = state.file.name.replace(/\\.[^.]+$/, '') || 'custom-artwork';\n      const file = new File([blob], `${baseName}-${outputOrientation}.${extension}`, { type: blob.type || requestedType, lastModified: Date.now() });\n      resolve({ file, orientation: outputOrientation, ratio: cropRatio, width: outputWidth, height: outputHeight });\n    }, requestedType, requestedType === 'image/jpeg' || requestedType === 'image/webp' ? 0.92 : undefined);\n  });\n\n  const confirm = async () => {\n    if (!state || confirmButton.disabled) return;\n    confirmButton.disabled = true;\n    const originalLabel = confirmButton.textContent;\n    confirmButton.textContent = 'Preparing\u2026';\n    try {\n      const result = await outputFile();\n      window.dataLayer?.push({\n        event: 'custom_artwork_crop_applied', orientation: result.orientation, ratio: result.ratio,\n        output_width: result.width, output_height: result.height,\n      });\n      close(result);\n    } catch (error) {\n      console.error('Artwork crop failed.', error);\n    } finally {\n      confirmButton.disabled = false;\n      confirmButton.textContent = originalLabel;\n    }\n  };\n\n  const loadImage = (url) => new Promise((resolve, reject) => {\n    const image = new Image();\n    image.onload = () => resolve(image);\n    image.onerror = () => reject(new Error('This image could not be opened for cropping.'));\n    image.src = url;\n  });\n\n  const open = async (file) => {\n    if (resolver) close(null);\n    const url = URL.createObjectURL(file);\n    const image = await loadImage(url).catch((error) => {\n      URL.revokeObjectURL(url);\n      throw error;\n    });\n    const suggestedOrientation = image.naturalWidth / image.naturalHeight > 1.08\n      ? 'landscape' : image.naturalWidth / image.naturalHeight < 0.92 ? 'portrait' : 'square';\n    state = { file, url, image, cropMode: 'fixed', orientation: suggestedOrientation, crop: null };\n    previousFocus = document.activeElement;\n    modal.hidden = false;\n    document.body.classList.add('ps-cropper-open');\n    setCropOption(suggestedOrientation, { track: false });\n    requestAnimationFrame(() => {\n      resetCrop();\n      ratioButtons.find((button) => button.classList.contains('is-selected'))?.focus();\n    });\n    window.dataLayer?.push({\n      event: 'custom_artwork_crop_opened',\n      suggested_orientation: suggestedOrientation,\n      crop_mode: state.cropMode,\n      free_crop_available: supportsFreeform,\n    });\n    return new Promise((resolve) => { resolver = resolve; });\n  };\n\n  ratioButtons.forEach((button) => button.addEventListener('click', () => setCropOption(button.dataset.psCropperRatio)));\n  cancelButtons.forEach((button) => button.addEventListener('click', cancel));\n  confirmButton.addEventListener('click', confirm);\n  canvas.addEventListener('pointerdown', (event) => {\n    if (!state) return;\n    const point = pointFromEvent(event);\n    const handle = hitHandle(point);\n    if (!handle && !isInsideCrop(point)) return;\n    pointerState = {\n      id: event.pointerId,\n      mode: handle ? 'resize' : 'move',\n      handle,\n      point,\n      crop: { ...state.crop },\n    };\n    canvas.setPointerCapture(event.pointerId);\n    canvas.style.cursor = handle ? `${handle}-resize` : 'grabbing';\n  });\n  canvas.addEventListener('pointermove', (event) => {\n    if (!state) return;\n    const point = pointFromEvent(event);\n    if (!pointerState) {\n      const handle = hitHandle(point);\n      canvas.style.cursor = handle ? `${handle}-resize` : isInsideCrop(point) ? 'move' : 'default';\n      return;\n    }\n    if (pointerState.id !== event.pointerId) return;\n    if (pointerState.mode === 'move') {\n      state.crop = geometry.moveCrop(pointerState.crop, point.x - pointerState.point.x, point.y - pointerState.point.y, displayedImageRect());\n    } else if (supportsFreeform && cropMode.isFreeform(state)) {\n      state.crop = geometry.resizeCropFree(pointerState.crop, pointerState.handle, point, displayedImageRect());\n    } else {\n      state.crop = geometry.resizeCrop(pointerState.crop, pointerState.handle, point, displayedImageRect(), ratios[state.orientation]);\n    }\n    draw();\n  });\n  const releasePointer = (event) => {\n    if (!pointerState || pointerState.id !== event.pointerId) return;\n    if (pointerState.mode === 'resize' && supportsFreeform && cropMode.isFreeform(state)) {\n      const cropRatio = state.crop.width / state.crop.height;\n      window.dataLayer?.push({\n        event: 'custom_artwork_crop_resized',\n        crop_mode: 'freeform',\n        crop_ratio: cropRatio,\n        matched_orientation: geometry.matchRatio(cropRatio, ratios) || 'custom',\n      });\n    }\n    pointerState = null;\n    canvas.style.cursor = 'move';\n  };\n  canvas.addEventListener('pointerup', releasePointer);\n  canvas.addEventListener('pointercancel', releasePointer);\n  modal.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape') cancel();\n  });\n  resizeObserver = new ResizeObserver(() => state && resetCrop());\n  resizeObserver.observe(workspace);\n\n  root.productArtworkCropper = { open };\n})();\n"],
  "mappings": "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",
  "names": []
}
