{
  "version": 3,
  "sources": ["/cdn/shop/t/13/assets/pf-theme.js?pf_build=20260910-checkout-7"],
  "sourcesContent": ["((callback) =>\n  document.readyState === \"loading\"\n    ? document.addEventListener(\"DOMContentLoaded\", callback, { once: !0 })\n    : callback())(() => {\n  const mobileToggle = document.querySelector(\".pf-mobile-toggle\"),\n    mobileNav = document.querySelector(\".pf-mobile-nav\");\n  (mobileToggle &&\n    mobileNav &&\n    mobileToggle.addEventListener(\"click\", () => {\n      const willOpen = mobileNav.hidden;\n      ((mobileNav.hidden = !willOpen),\n        mobileToggle.setAttribute(\"aria-expanded\", String(willOpen)),\n        (mobileToggle.textContent = willOpen ? \"\\xD7\" : \"\\u2630\"));\n    }),\n    document.querySelectorAll(\".pf-product-thumb\").forEach((thumb) => {\n      thumb.addEventListener(\"click\", () => {\n        const mainImage = document.querySelector(\".pf-product-main-image img\");\n        mainImage &&\n          ((mainImage.src = thumb.dataset.pfImage),\n          (mainImage.srcset = \"\"),\n          document\n            .querySelectorAll(\".pf-product-thumb\")\n            .forEach((item) => item.removeAttribute(\"aria-current\")),\n          thumb.setAttribute(\"aria-current\", \"true\"));\n      });\n    }));\n  const variantSelect = document.querySelector(\"[data-pf-variant-select]\");\n  variantSelect &&\n    variantSelect.addEventListener(\"change\", () => {\n      const option = variantSelect.selectedOptions[0],\n        variantInput = document.querySelector(\"[data-pf-product-variant]\"),\n        price = document.querySelector(\"[data-pf-product-price]\");\n      (variantInput && (variantInput.value = variantSelect.value),\n        price &&\n          option?.dataset.price &&\n          (price.textContent = option.dataset.price));\n    });\n  const personalizeForm = document.querySelector(\"[data-pf-personalize]\"),\n    mobileAdd = document.querySelector(\"[data-pf-mobile-add]\"),\n    isCompositePersonalization =\n      personalizeForm?.closest(\"[data-pf-hat-page]\")?.dataset\n        .pfProductHandle === \"the-original-personalized-pet-hat\";\n  mobileAdd &&\n    personalizeForm &&\n    mobileAdd.addEventListener(\"click\", () => {\n      if (!mobileAdd.disabled) {\n        if (typeof personalizeForm.requestSubmit == \"function\") {\n          personalizeForm.requestSubmit();\n          return;\n        }\n        personalizeForm.dispatchEvent(\n          new Event(\"submit\", { bubbles: !0, cancelable: !0 }),\n        );\n      }\n    });\n  const photoInput = document.querySelector(\"[data-pf-photo-input]\"),\n    photoCount = document.querySelector(\"[data-pf-photo-count]\"),\n    fileSelection = document.querySelector(\"[data-pf-file-selection]\"),\n    uploadArea = document.querySelector(\"[data-pf-upload-area]\"),\n    uploadError = document.querySelector(\"[data-pf-upload-error]\"),\n    photoPreviews = document.querySelector(\"[data-pf-photo-previews]\"),\n    photoPreviewList = document.querySelector(\"[data-pf-photo-preview-list]\");\n  let selectedPhotoFiles = [],\n    uploadedPhotos = [];\n  const photoUploadTasks = new Map(),\n    photoUploadErrors = new Map(),\n    preparedPhotoFiles = new WeakMap(),\n    preparedPhotoParts = new WeakMap(),\n    photoSelections = new Map();\n  let photoSelectionGeneration = 0,\n    photoUploadRetryAfter = 0,\n    productAddPending = !1,\n    uploadShakeTimer,\n    cartWarmupPromise = null;\n  const prewarmedImages = new Map(),\n    photoPreviewUrls = new Map(),\n    photoFilesEndpoint =\n      \"/apps/petcap-photo/v1/shopify-file?pf_checkout_strategy=staged-v1\",\n    splitPhotoFilesEndpoint =\n      \"/apps/petcap-photo/v1/shopify-file?pf_checkout_strategy=split-v1&pf_upload_part=\",\n    directPhotoSessionEndpoint =\n      \"/apps/petcap-photo/v1/direct-upload/session?pf_checkout_strategy=direct-r2-v1\",\n    directPhotoConfirmEndpoint =\n      \"/apps/petcap-photo/v1/direct-upload/finalize?pf_checkout_strategy=direct-r2-v1\",\n    directR2AccountId = \"94cdb5b6ceebb88bb442f0f32cb50aa5\",\n    reorderLookupEndpoint = \"/apps/petcap-photo/v1/reorder-lookup\",\n    maxPhotoUploadBytes = 10 * 1024 * 1024,\n    preferredPhotoUploadBytes = 1280 * 1024,\n    maxPhotoSourceBytes = 60 * 1024 * 1024,\n    photoUploadTimeoutMs = 25e3,\n    supportedPhotoTypes = new Set([\n      \"image/jpeg\",\n      \"image/png\",\n      \"image/webp\",\n      \"image/heic\",\n      \"image/heif\",\n    ]),\n    photoCompressionPresets = [\n      { maxEdgePx: 4096, quality: 0.84 },\n      { maxEdgePx: 2400, quality: 0.82 },\n      { maxEdgePx: 2048, quality: 0.78 },\n      { maxEdgePx: 1600, quality: 0.74 },\n    ],\n    maxCheckoutPreviewBytes = 200 * 1024,\n    checkoutPreviewPresets = [\n      { maxEdgePx: 320, quality: 0.72 },\n      { maxEdgePx: 256, quality: 0.62 },\n    ],\n    reorderDetails = personalizeForm?.querySelector(\n      \"[data-pf-reorder-details]\",\n    ),\n    reorderReference = personalizeForm?.querySelector(\n      \"[data-pf-reorder-reference]\",\n    ),\n    reorderVerify = personalizeForm?.querySelector(\"[data-pf-reorder-verify]\"),\n    reorderStatus = personalizeForm?.querySelector(\"[data-pf-reorder-status]\"),\n    reorderVariantId = Number(\n      personalizeForm?.dataset?.pfReorderVariantId || 0,\n    );\n  let verifiedReorder = null,\n    reorderLookupGeneration = 0,\n    pendingCustomizationId = \"\";\n  const createCustomizationId = () =>\n      typeof window.crypto?.randomUUID == \"function\"\n        ? window.crypto.randomUUID()\n        : \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(\n            /[xy]/g,\n            (character) => {\n              const random = Math.floor(Math.random() * 16);\n              return (character === \"x\" ? random : (random & 3) | 8).toString(\n                16,\n              );\n            },\n          ),\n    shopifyStorefrontUrl = (value) => {\n      const url = String(value || \"\"),\n        match = url.match(\n          /^https:\\/\\/(?:cdn\\.shopify\\.com|cdn\\.shopifycdn\\.net)\\/s\\/files\\/1\\/0738\\/1201\\/7187\\/(files|products)\\/([^\\s]+)$/i,\n        );\n      return match ? `/cdn/shop/${match[1]}/${match[2]}` : url;\n    },\n    shopifyThumbnailUrl = (value, width = 160) => {\n      const originalUrl = shopifyStorefrontUrl(value).replace(\n        /([?&])width=\\d+(&)?/i,\n        (_match, separator, hasFollowingParameter) =>\n          hasFollowingParameter ? separator : \"\",\n      );\n      return originalUrl\n        ? `${originalUrl}${originalUrl.includes(\"?\") ? \"&\" : \"?\"}width=${width}`\n        : \"\";\n    },\n    prewarmImage = (url, { retainSuccess = !1 } = {}) => {\n      if (!url || prewarmedImages.has(url) || typeof window.Image != \"function\")\n        return;\n      const image = new window.Image();\n      ((image.decoding = \"async\"),\n        (image.onload = () => {\n          retainSuccess || prewarmedImages.delete(url);\n        }),\n        (image.onerror = () => prewarmedImages.delete(url)),\n        prewarmedImages.set(url, image),\n        (image.src = url));\n    },\n    prewarmThumbnail = (value) => prewarmImage(shopifyThumbnailUrl(value)),\n    shopifyCheckoutThumbnailUrl = (value) => {\n      const match = String(value || \"\").match(\n          /^(https:\\/\\/(?:cdn\\.shopify\\.com|cdn\\.shopifycdn\\.net)\\/s\\/files\\/1\\/(?:\\d+\\/){3}files\\/[^?#]+?)(\\.(?:jpe?g|png|webp))(\\?[^#]*)?$/i,\n        ),\n        edge = Number(window.devicePixelRatio) === 3 ? 256 : 64;\n      return match\n        ? `${match[1]}_${edge}x${edge}${match[2]}${match[3] || \"\"}`\n        : \"\";\n    },\n    prewarmCheckoutThumbnail = (value) =>\n      prewarmImage(shopifyCheckoutThumbnailUrl(value), { retainSuccess: !0 }),\n    warmCart = () => {\n      if (cartWarmupPromise) return cartWarmupPromise;\n      const cartPath = String(window.routes?.cart_url || \"/cart\").replace(\n        /\\.js(?:[?#]|$)/,\n        \"\",\n      );\n      return (\n        (cartWarmupPromise = fetch(`${cartPath}.js`, {\n          headers: { Accept: \"application/json\" },\n          credentials: \"same-origin\",\n          cache: \"no-store\",\n        })\n          .then((response) => (response.ok ? response.json() : null))\n          .catch(() => null)),\n        cartWarmupPromise\n      );\n    },\n    cartAddUrl = String(window.routes?.cart_add_url || \"/cart/add.js\").replace(\n      /\\/cart\\/add(?:\\.js)?(?=[?#]|$)/,\n      \"/cart/add.js\",\n    ),\n    cartJsonUrl = `${String(window.routes?.cart_url || \"/cart\").replace(\n      /\\.js(?:[?#]|$)/,\n      \"\",\n    )}.js`,\n    hasConfirmedAddedItems = (payload, expectedItems) => {\n      const addedItems = Array.isArray(payload?.items)\n        ? payload.items\n        : payload?.id\n          ? [payload]\n          : [];\n      return (\n        expectedItems.length > 0 &&\n        expectedItems.every((expected) =>\n          addedItems.some(\n            (actual) =>\n              Number(actual?.variant_id || actual?.id) ===\n                Number(expected.id) &&\n              Number.isSafeInteger(Number(actual.quantity)) &&\n              Number(actual.quantity) >= Number(expected.quantity || 1) &&\n              Object.entries(expected.properties || {}).every(\n                ([key, value]) =>\n                  String(actual.properties?.[key] ?? \"\") === String(value),\n              ),\n          ),\n        )\n      );\n    },\n    getCustomizationCartState = async (customizationId, expectedItems) => {\n      const response = await fetch(cartJsonUrl, {\n        headers: { Accept: \"application/json\" },\n        credentials: \"same-origin\",\n        cache: \"no-store\",\n      });\n      if (!response.ok) throw new Error(\"We could not verify your cart.\");\n      const cart = await response.json(),\n        matchingItems = (Array.isArray(cart?.items) ? cart.items : []).filter(\n          (item) =>\n            String(item?.properties?.[\"_Petcap Customization ID\"] || \"\") ===\n            String(customizationId),\n        );\n      if (matchingItems.length === 0) return { state: \"absent\", cart };\n      return hasConfirmedAddedItems({ items: matchingItems }, expectedItems)\n        ? { state: \"confirmed\", cart }\n        : { state: \"partial\", cart };\n    },\n    clearUploadError = () => {\n      (uploadError && uploadError.classList.add(\"hidden\"),\n        photoInput && photoInput.setAttribute(\"aria-invalid\", \"false\"));\n    },\n    escapeHtml = (value) =>\n      String(value ?? \"\")\n        .replaceAll(\"&\", \"&amp;\")\n        .replaceAll(\"<\", \"&lt;\")\n        .replaceAll(\">\", \"&gt;\")\n        .replaceAll('\"', \"&quot;\")\n        .replaceAll(\"'\", \"&#039;\"),\n    previewUrlFor = (file) => {\n      if (photoPreviewUrls.has(file)) return photoPreviewUrls.get(file);\n      try {\n        if (typeof URL > \"u\" || typeof URL.createObjectURL != \"function\")\n          return \"\";\n        const previewUrl = URL.createObjectURL(file);\n        return (photoPreviewUrls.set(file, previewUrl), previewUrl);\n      } catch {\n        return \"\";\n      }\n    },\n    renderPhotoPreviews = () => {\n      (photoPreviews &&\n        ((photoPreviews.hidden = selectedPhotoFiles.length === 0),\n        photoPreviews.setAttribute?.(\n          \"aria-hidden\",\n          String(selectedPhotoFiles.length === 0),\n        )),\n        photoPreviewList &&\n          (photoPreviewList.innerHTML = selectedPhotoFiles\n            .map((file, index) => {\n              const previewUrl = previewUrlFor(file);\n              return `<div class=\"relative\" data-pf-photo-preview>\n          ${previewUrl ? `<img src=\"${escapeHtml(previewUrl)}\" alt=\"Preview of uploaded photo ${index + 1}\" class=\"h-20 w-20 rounded-xl border border-shapes-text/30 object-cover\">` : \"\"}\n          <button type=\"button\" data-pf-photo-remove=\"${index}\" class=\"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full border border-shapes-text bg-white text-xs font-black text-shapes-coral\" aria-label=\"Remove uploaded photo ${index + 1}\">\\xD7</button>\n        </div>`;\n            })\n            .join(\"\")));\n    },\n    uploadsInFileOrder = (files, uploads) => {\n      const byFile = new Map(\n        (uploads || []).map((upload) => [upload.file, upload]),\n      );\n      return files.map((file) => byFile.get(file)).filter(Boolean);\n    },\n    showUploadError = (message) => {\n      (uploadError &&\n        ((uploadError.textContent = message),\n        uploadError.classList.remove(\"hidden\")),\n        photoInput && photoInput.setAttribute(\"aria-invalid\", \"true\"),\n        uploadArea &&\n          (uploadArea.scrollIntoView({ behavior: \"smooth\", block: \"center\" }),\n          uploadArea.classList.remove(\"shake-highlight\"),\n          uploadArea.offsetWidth,\n          uploadArea.classList.add(\"shake-highlight\"),\n          window.clearTimeout(uploadShakeTimer),\n          (uploadShakeTimer = window.setTimeout(\n            () => uploadArea.classList.remove(\"shake-highlight\"),\n            1e3,\n          ))));\n    },\n    setReorderStatus = (message, state = \"\") => {\n      reorderStatus &&\n        ((reorderStatus.textContent = message),\n        (reorderStatus.dataset.state = state),\n        reorderStatus.classList.toggle(\"hidden\", !message),\n        reorderStatus.classList.toggle(\"text-green-800\", state === \"success\"),\n        reorderStatus.classList.toggle(\"text-red-700\", state === \"error\"));\n    },\n    reorderIsSelected = () =>\n      personalizeForm?.querySelector('input[name=\"artwork_variant\"]:checked')\n        ?.value === \"reorder\",\n    selectedPhotoUploadPending = () =>\n      !reorderIsSelected() &&\n      selectedPhotoFiles.some((file) => photoUploadTasks.has(file)),\n    syncAddAvailability = () => {\n      if (!personalizeForm || productAddPending) return;\n      const reorderLocked =\n          reorderIsSelected() && (!verifiedReorder || !reorderVariantId),\n        photoLocked = selectedPhotoUploadPending(),\n        subjectsLocked =\n          isCompositePersonalization &&\n          !reorderIsSelected() &&\n          personalizeForm.closest(\"[data-pf-hat-page]\")?.dataset\n            .pfSubjectsReady !== \"true\",\n        addLocked = reorderLocked || photoLocked || subjectsLocked,\n        addButton = personalizeForm.querySelector(\"[data-pf-add-button]\");\n      (addButton && (addButton.disabled = addLocked),\n        mobileAdd &&\n          ((mobileAdd.disabled = addLocked),\n          mobileAdd.setAttribute?.(\n            \"aria-disabled\",\n            String(addLocked),\n          )));\n    },\n    syncReorderInterface = () => {\n      const reorderSelected = reorderIsSelected();\n      (reorderDetails && (reorderDetails.hidden = !reorderSelected),\n        uploadArea && (uploadArea.hidden = reorderSelected),\n        reorderSelected && clearUploadError(),\n        syncAddAvailability());\n    },\n    parseReorderPhotos = (payload) => {\n      const isCheckoutPhotoUrl = (value) =>\n          /^https:\\/\\/(?:cdn\\.shopify\\.com|cdn\\.shopifycdn\\.net)\\/s\\/files\\/1\\/(?:0722\\/5337\\/4626|0678\\/6786\\/9283|0801\\/9522\\/3776|0738\\/1201\\/7187)\\/files\\/[^\\s?#]+(?:\\?[^\\s#]*)?$/i.test(\n            value,\n          ) ||\n          /^https:\\/\\/(?:mypetcap\\.com|petcap\\.net)\\/cdn\\/shop\\/files\\/[^\\s?#]+(?:\\?[^\\s#]*)?$/i.test(\n            value,\n          ),\n        isTrustedPhotoUrl = (value) =>\n          isCheckoutPhotoUrl(value) ||\n          /^https:\\/\\/(?:mypetcap\\.com|petcap\\.net)\\/apps\\/petcap-photo\\/files\\/customer-photos\\/\\d{4}\\/\\d{2}\\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\.(?:jpe?g|png|webp|gif|avif|heic|heif)$/i.test(\n            value,\n          ) ||\n          /^https:\\/\\/zkjmosomfjdvenfbavay\\.supabase\\.co\\/storage\\/v1\\/object\\/public\\/customer-source-photos\\/(?!\\.{1,2}\\/)(?!.*\\/\\.{1,2}\\/)[^\\s?#]+\\.(?:jpe?g|png|webp|gif|avif|heic|heif)(?:\\?[^\\s#]*)?$/i.test(\n            value,\n          ),\n        normalizeUrls = (values) =>\n          !Array.isArray(values) ||\n          values.length < 1 ||\n          values.length > 3 ||\n          !values.every(\n            (value) =>\n              typeof value == \"string\" && isTrustedPhotoUrl(value.trim()),\n          )\n            ? null\n            : values.map((value) => value.trim()),\n        photos = normalizeUrls(payload?.photos);\n      if (!photos) return null;\n      const sourcePhotos =\n        payload.sourcePhotos === void 0\n          ? [...photos]\n          : normalizeUrls(payload.sourcePhotos);\n      return !sourcePhotos ||\n        sourcePhotos.length !== photos.length ||\n        !photos.every(\n          (photo, index) =>\n            photo === sourcePhotos[index] || isCheckoutPhotoUrl(photo),\n        )\n        ? null\n        : { photos, sourcePhotos };\n    },\n    parseReorderProof = (payload, reorderPhotos) => {\n      if (!reorderPhotos) return \"\";\n      const proof = reorderPhotos.photos.some(\n        (photo, index) => photo !== reorderPhotos.sourcePhotos[index],\n      )\n        ? payload.sourceProof\n        : payload.proof;\n      return typeof proof == \"string\" ? proof.trim() : \"\";\n    },\n    reorderUploadsFor = (reorder) =>\n      reorder.photos.map((photo, index) => {\n        const source = reorder.sourcePhotos?.[index] || photo;\n        return { url: source, checkoutUrl: photo !== source ? photo : \"\" };\n      }),\n    clearVerifiedReorder = () => {\n      ((verifiedReorder = null),\n        (reorderLookupGeneration += 1),\n        reorderVerify && (reorderVerify.disabled = !1),\n        setReorderStatus(\"\"),\n        syncAddAvailability());\n    };\n  function showReorderAccessNotice(payload) {\n    if (payload?.code === \"REORDER_LOGIN_REQUIRED\") {\n      setReorderStatus(\"Please log in to verify artwork from your previous orders. \", \"error\");\n      const loginLink = document.createElement(\"a\");\n      loginLink.href = \"/account/login?return_url=\" + encodeURIComponent(window.location.pathname + window.location.search);\n      loginLink.textContent = \"Log in\";\n      loginLink.className = \"font-bold underline\";\n      reorderStatus?.appendChild(loginLink);\n      return true;\n    }\n    if (payload?.code === \"migration_review_required\") {\n      setReorderStatus(\"Previous artwork from the former store needs manual review. Please contact us for help.\", \"error\");\n      return true;\n    }\n    return false;\n  }\n  (reorderReference &&\n    reorderReference.addEventListener(\"input\", () => {\n      pendingCustomizationId = \"\";\n      clearVerifiedReorder();\n    }),\n    personalizeForm?.addEventListener(\"pf:variant-change\", () => {\n      pendingCustomizationId = \"\";\n      clearVerifiedReorder();\n    }),\n    reorderVerify &&\n      reorderReference &&\n      reorderVerify.addEventListener(\"click\", async (event) => {\n        event.preventDefault();\n        const reference = reorderReference.value.trim();\n        clearVerifiedReorder();\n        const generation = reorderLookupGeneration;\n        if (!reference) {\n          (setReorderStatus(\n            \"Enter the order number from your previous order.\",\n            \"error\",\n          ),\n            syncAddAvailability());\n          return;\n        }\n        ((reorderVerify.disabled = !0),\n          setReorderStatus(\"Looking for your previous artwork\\u2026\"));\n        try {\n          const response = await fetch(reorderLookupEndpoint, {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/json\",\n                Accept: \"application/json\",\n              },\n              body: JSON.stringify({ reference }),\n            }),\n            payload = await response.json().catch(() => ({}));\n          if (\n            generation !== reorderLookupGeneration ||\n            reorderReference.value.trim() !== reference\n          )\n            return;\n          if (showReorderAccessNotice(payload)) return;\n          const reorderPhotos = parseReorderPhotos(payload),\n            proof = parseReorderProof(payload, reorderPhotos);\n          if (\n            !response.ok ||\n            payload.verified !== !0 ||\n            !reorderPhotos ||\n            !proof\n          )\n            throw new Error(\"Previous artwork could not be verified.\");\n          ((verifiedReorder = { ...reorderPhotos, proof }),\n            reorderPhotos.photos.forEach(prewarmThumbnail),\n            setReorderStatus(\n              \"Artwork found. You can add this reorder to your cart.\",\n              \"success\",\n            ));\n        } catch {\n          if (\n            generation !== reorderLookupGeneration ||\n            reorderReference.value.trim() !== reference\n          )\n            return;\n          ((verifiedReorder = null),\n            setReorderStatus(\n              \"We couldn't find artwork for those order details. Check them and try again.\",\n              \"error\",\n            ));\n        } finally {\n          (generation === reorderLookupGeneration &&\n            (reorderVerify.disabled = !1),\n            syncAddAvailability());\n        }\n      }));\n  const supportedPhotoFile = (file) => {\n      const fileType = String(file?.type || \"\").toLowerCase(),\n        fileName = String(file?.name || \"\");\n      return (\n        supportedPhotoTypes.has(fileType) ||\n        /\\.(?:jpe?g|png|webp|heic|heif)$/i.test(fileName)\n      );\n    },\n    photoTooLargeError = (file) =>\n      new Error(\n        file.size > maxPhotoSourceBytes\n          ? `${file.name || \"This photo\"} is larger than 60 MB. Choose a smaller file.`\n          : `${file.name || \"This photo\"} could not be prepared for upload. Choose a smaller file.`,\n      ),\n    decodePhotoForUpload = async (file) => {\n      if (typeof window.createImageBitmap == \"function\")\n        try {\n          return await window.createImageBitmap(file, {\n            imageOrientation: \"from-image\",\n          });\n        } catch {}\n      if (\n        typeof window.Image != \"function\" ||\n        typeof window.URL?.createObjectURL != \"function\" ||\n        typeof window.URL?.revokeObjectURL != \"function\"\n      )\n        throw new Error(\"decode failed\");\n      const objectUrl = window.URL.createObjectURL(file);\n      return new Promise((resolve, reject) => {\n        const image = new window.Image();\n        ((image.decoding = \"async\"),\n          (image.onload = () => {\n            (window.URL.revokeObjectURL(objectUrl), resolve(image));\n          }),\n          (image.onerror = () => {\n            (window.URL.revokeObjectURL(objectUrl),\n              reject(new Error(\"decode failed\")));\n          }),\n          (image.src = objectUrl));\n      });\n    },\n    encodePhotoAsJpeg = async (\n      file,\n      decodedPhoto,\n      { maxEdgePx, quality, fileNameSuffix = \"\" },\n    ) => {\n      const sourceWidth = Number(\n          decodedPhoto.width || decodedPhoto.naturalWidth || 0,\n        ),\n        sourceHeight = Number(\n          decodedPhoto.height || decodedPhoto.naturalHeight || 0,\n        );\n      if (!sourceWidth || !sourceHeight) throw new Error(\"decode failed\");\n      const maxDimension = Math.max(sourceWidth, sourceHeight),\n        scale = Number.isFinite(maxEdgePx)\n          ? Math.min(1, maxEdgePx / maxDimension)\n          : 1,\n        canvas = document.createElement(\"canvas\");\n      ((canvas.width = Math.max(1, Math.round(sourceWidth * scale))),\n        (canvas.height = Math.max(1, Math.round(sourceHeight * scale))));\n      const context = canvas.getContext(\"2d\");\n      if (!context) throw new Error(\"encode failed\");\n      ((context.fillStyle = \"#ffffff\"),\n        context.fillRect(0, 0, canvas.width, canvas.height),\n        context.drawImage(decodedPhoto, 0, 0, canvas.width, canvas.height));\n      const blob = await new Promise((resolve, reject) => {\n        try {\n          canvas.toBlob(resolve, \"image/jpeg\", quality);\n        } catch (error) {\n          reject(error);\n        }\n      }).finally(() => {\n        ((canvas.width = 0), (canvas.height = 0));\n      });\n      if (!blob) throw new Error(\"encode failed\");\n      const baseName =\n        String(file.name || \"customer-photo\").replace(/\\.[^.]+$/, \"\") ||\n        \"customer-photo\";\n      return new window.File([blob], `${baseName}${fileNameSuffix}.jpg`, {\n        type: \"image/jpeg\",\n        lastModified: file.lastModified || Date.now(),\n      });\n    },\n    optimizePhotoForUpload = async (file, decodedPhoto) => {\n      if (!supportedPhotoFile(file))\n        throw new Error(\"Choose a JPG, PNG, WEBP, HEIC or HEIF image.\");\n      if (file.size <= preferredPhotoUploadBytes) return file;\n      if (file.size > maxPhotoSourceBytes) throw photoTooLargeError(file);\n      if (typeof window.File != \"function\") {\n        if (file.size <= maxPhotoUploadBytes) return file;\n        throw photoTooLargeError(file);\n      }\n      let smallestPhoto = file;\n      if (decodedPhoto)\n        for (const preset of photoCompressionPresets)\n          try {\n            const candidate = await encodePhotoAsJpeg(\n              file,\n              decodedPhoto,\n              preset,\n            );\n            if (\n              (candidate.size < smallestPhoto.size &&\n                (smallestPhoto = candidate),\n              smallestPhoto.size <= preferredPhotoUploadBytes)\n            )\n              break;\n          } catch {}\n      if (smallestPhoto.size <= maxPhotoUploadBytes) return smallestPhoto;\n      throw photoTooLargeError(file);\n    },\n    prepareCheckoutPreview = async (file, decodedPhoto) => {\n      for (const preset of checkoutPreviewPresets)\n        try {\n          const preview = await encodePhotoAsJpeg(file, decodedPhoto, {\n            ...preset,\n            fileNameSuffix: \"-checkout\",\n          });\n          if (preview.size <= maxCheckoutPreviewBytes) return preview;\n        } catch {}\n      return null;\n    },\n    preparePhotoPartsForUpload = (file) => {\n      const existing = preparedPhotoParts.get(file);\n      if (existing) return existing;\n      const decoded = (async () => {\n          if (!supportedPhotoFile(file))\n            throw new Error(\"Choose a JPG, PNG, WEBP, HEIC or HEIF image.\");\n          if (file.size > maxPhotoSourceBytes) throw photoTooLargeError(file);\n          if (typeof window.File == \"function\")\n            try {\n              return await decodePhotoForUpload(file);\n            } catch {}\n          return null;\n        })(),\n        checkoutPreview = decoded.then((photo) =>\n          photo ? prepareCheckoutPreview(file, photo) : null,\n        ),\n        master = checkoutPreview.then(\n          async () => (\n            await new Promise((resolve) => window.setTimeout(resolve, 0)),\n            optimizePhotoForUpload(file, await decoded)\n          ),\n        ),\n        parts = { master, checkoutPreview };\n      return (\n        preparedPhotoParts.set(file, parts),\n        Promise.allSettled([master, checkoutPreview]).then(async () => {\n          (await decoded.catch(() => null))?.close?.();\n        }),\n        parts\n      );\n    },\n    preparePhotoFilesForUpload = (file) => {\n      const existing = preparedPhotoFiles.get(file);\n      if (existing) return existing;\n      const parts = preparePhotoPartsForUpload(file),\n        preparation = Promise.all([parts.master, parts.checkoutPreview]).then(\n          ([master, checkoutPreview]) => ({ master, checkoutPreview }),\n        );\n      return (\n        preparedPhotoFiles.set(file, preparation),\n        preparation.catch(() => {}),\n        preparation\n      );\n    },\n    currentPhotoSelection = (file) => {\n      let selection = photoSelections.get(file);\n      return (\n        selection ||\n          ((selection = {\n            generation: ++photoSelectionGeneration,\n            cancelled: !1,\n            parts: new Map(),\n            controllers: new Set(),\n          }),\n          photoSelections.set(file, selection)),\n        selection\n      );\n    },\n    assertCurrentPhotoSelection = (file, selection) => {\n      if (\n        selection.cancelled ||\n        photoSelections.get(file) !== selection ||\n        !selectedPhotoFiles.includes(file)\n      )\n        throw new Error(\n          \"Your photo selection changed. Select your photos again.\",\n        );\n    },\n    waitForPhotoRetry = async (file, selection, retryAt = 0) => {\n      for (; Math.max(retryAt, photoUploadRetryAfter) > Date.now(); ) {\n        assertCurrentPhotoSelection(file, selection);\n        const delay = Math.min(\n          1e3,\n          Math.max(retryAt, photoUploadRetryAfter) - Date.now(),\n        );\n        await new Promise((resolve) => window.setTimeout(resolve, delay));\n      }\n      assertCurrentPhotoSelection(file, selection);\n    },\n    photoUploadReceipt = (payload, part) => {\n      const url = typeof payload?.url == \"string\" ? payload.url.trim() : \"\",\n        checkoutUrl =\n          typeof payload?.checkoutUrl == \"string\"\n            ? payload.checkoutUrl.trim()\n            : \"\",\n        sourceValid =\n          /^https:\\/\\/(?:mypetcap\\.com|petcap\\.net)\\/apps\\/petcap-photo\\/files\\/customer-photos\\/\\d{4}\\/\\d{2}\\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\.(?:jpe?g|png|webp|gif|avif|heic|heif)$/i.test(\n            url,\n          ),\n        checkoutValid =\n          /^https:\\/\\/(?:cdn\\.shopify\\.com|cdn\\.shopifycdn\\.net)\\/s\\/files\\/1\\/(?:0722\\/5337\\/4626|0678\\/6786\\/9283|0801\\/9522\\/3776|0738\\/1201\\/7187)\\/files\\/[^\\s/?#]+\\.(?:jpe?g|png|webp|gif|avif)(?:\\?[^\\s#]*)?$/i.test(\n            checkoutUrl,\n          );\n      if (\n        (part === \"checkout_preview\" && !checkoutValid) ||\n        (part !== \"checkout_preview\" && !sourceValid) ||\n        (part === \"staged\" && checkoutUrl && !checkoutValid)\n      )\n        throw new Error(\n          \"We could not confirm the photo upload. Select the photo again.\",\n        );\n      return part === \"checkout_preview\"\n        ? { checkoutUrl }\n        : { url, checkoutUrl: part === \"staged\" ? checkoutUrl : \"\" };\n    },\n    directPhotoError = (\n      stage,\n      {\n        retryable = !1,\n        retryAt = 0,\n        code = \"\",\n        uncertain = !1,\n        status = 0,\n      } = {},\n    ) => {\n      const error = new Error(\n        \"We could not upload this photo. Try again or select the photo again.\",\n      );\n      return (\n        Object.assign(error, { retryable, retryAt, code, uncertain, status }),\n        error\n      );\n    },\n    directPhotoMetadata = async (file, selection, master) => {\n      if (\n        (assertCurrentPhotoSelection(file, selection),\n        !master.size || master.size > maxPhotoUploadBytes)\n      )\n        throw photoTooLargeError(file);\n      const bytes = await master.arrayBuffer();\n      assertCurrentPhotoSelection(file, selection);\n      const digest = new Uint8Array(\n        await window.crypto.subtle.digest(\"SHA-256\", bytes),\n      );\n      assertCurrentPhotoSelection(file, selection);\n      const mimeByExtension = {\n          jpg: \"image/jpeg\",\n          jpeg: \"image/jpeg\",\n          png: \"image/png\",\n          webp: \"image/webp\",\n          gif: \"image/gif\",\n          avif: \"image/avif\",\n          heic: \"image/heic\",\n          heif: \"image/heif\",\n        },\n        mimeType = Object.values(mimeByExtension).includes(master.type)\n          ? master.type\n          : mimeByExtension[\n              String(master.name || \"\")\n                .split(\".\")\n                .pop()\n                .toLowerCase()\n            ];\n      if (!mimeType) throw directPhotoError(\"session\");\n      const body = new Blob([bytes], { type: mimeType });\n      if (body.size !== master.size || bytes.byteLength !== master.size)\n        throw directPhotoError(\"session\");\n      return {\n        body,\n        metadata: {\n          clientRequestId: createCustomizationId(),\n          mimeType,\n          byteLength: body.size,\n          sha256: [...digest]\n            .map((byte) => byte.toString(16).padStart(2, \"0\"))\n            .join(\"\"),\n        },\n      };\n    },\n    directPhotoRequest = async (\n      file,\n      selection,\n      stage,\n      url,\n      request,\n      expiresAt = 0,\n    ) => {\n      if (\n        (await waitForPhotoRetry(file, selection),\n        expiresAt && expiresAt <= Date.now())\n      )\n        throw directPhotoError(stage);\n      const controller = new window.AbortController();\n      selection.controllers.add(controller);\n      const timeoutMs = { session: 1e4, put: 25e3, confirm: 15e3 }[stage],\n        timeout = window.setTimeout(() => controller.abort(), timeoutMs);\n      try {\n        const response = await fetch(url, {\n            ...request,\n            signal: controller.signal,\n            redirect: \"error\",\n            referrerPolicy: \"no-referrer\",\n            credentials: stage === \"put\" ? \"omit\" : \"same-origin\",\n            ...(stage === \"put\" ? { mode: \"cors\" } : {}),\n          }),\n          payload =\n            stage === \"put\" ? null : await response.json().catch(() => null);\n        if (\n          (assertCurrentPhotoSelection(file, selection),\n          stage === \"put\" &&\n            (response.status === 200 ||\n              response.status === 204 ||\n              response.status === 412))\n        )\n          return null;\n        if (stage !== \"put\" && response.status === 200 && payload)\n          return payload;\n        const code =\n            typeof payload?.code == \"string\" &&\n            /^[A-Z0-9_]{1,80}$/.test(payload.code)\n              ? payload.code\n              : \"\",\n          retryable =\n            stage !== \"session\" &&\n            (stage === \"put\"\n              ? response.status === 429 || response.status >= 500\n              : payload?.retryable === !0 &&\n                (response.status === 429 ||\n                  (response.status === 409 &&\n                    code === \"DIRECT_R2_UPLOAD_NOT_FOUND\") ||\n                  (response.status === 503 &&\n                    code === \"DIRECT_R2_STORAGE_UNAVAILABLE\"))),\n          header = response.headers?.get?.(\"Retry-After\"),\n          delay =\n            header && /^\\d+(?:\\.\\d+)?$/.test(header.trim())\n              ? Number(header) * 1e3\n              : Math.max(0, Date.parse(header || \"\") - Date.now()) || 0,\n          retryAt = Date.now() + Math.max(1e3, delay);\n        throw (\n          response.status === 429 &&\n            (photoUploadRetryAfter = Math.max(photoUploadRetryAfter, retryAt)),\n          directPhotoError(stage, {\n            retryable,\n            retryAt,\n            code,\n            uncertain: stage === \"put\" && response.status >= 500,\n            status: response.status,\n          })\n        );\n      } catch (error) {\n        throw (\n          assertCurrentPhotoSelection(file, selection),\n          Object.prototype.hasOwnProperty.call(error, \"retryable\")\n            ? error\n            : directPhotoError(stage, {\n                retryable: stage !== \"session\",\n                retryAt: Date.now() + 1e3,\n                uncertain: stage === \"put\",\n              })\n        );\n      } finally {\n        (window.clearTimeout(timeout),\n          selection.controllers.delete(controller));\n      }\n    },\n    runDirectPhotoStep = async (file, selection, direct, stage, work) => {\n      for (;;) {\n        if (\n          (assertCurrentPhotoSelection(file, selection),\n          (stage === \"put\"\n            ? direct.session.expiresAt\n            : direct.session.confirmExpiresAt) <= Date.now())\n        )\n          throw directPhotoError(stage);\n        try {\n          return await work();\n        } catch (error) {\n          if (\n            (assertCurrentPhotoSelection(file, selection),\n            (stage === \"put\" && error.uncertain) ||\n              (stage === \"confirm\" &&\n                direct.putUncertain &&\n                error.code === \"DIRECT_R2_UPLOAD_NOT_FOUND\") ||\n              error.retryable !== !0 ||\n              direct.autoRetryUsed)\n          )\n            throw error;\n          ((direct.autoRetryUsed = !0),\n            await waitForPhotoRetry(file, selection, error.retryAt));\n        }\n      }\n    },\n    exactDirectPhotoKeys = (value, keys) =>\n      !!(\n        value &&\n        typeof value == \"object\" &&\n        !Array.isArray(value) &&\n        Object.keys(value).length === keys.length &&\n        keys.every((key) => Object.prototype.hasOwnProperty.call(value, key))\n      ),\n    validateDirectPhotoSession = (payload, metadata) => {\n      const uuid =\n          /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n        extension = {\n          \"image/jpeg\": \"jpg\",\n          \"image/png\": \"png\",\n          \"image/webp\": \"webp\",\n          \"image/gif\": \"gif\",\n          \"image/avif\": \"avif\",\n          \"image/heic\": \"heic\",\n          \"image/heif\": \"heif\",\n        }[metadata.mimeType];\n      if (\n        !exactDirectPhotoKeys(payload, [\n          \"sessionId\",\n          \"sessionToken\",\n          \"uploadUrl\",\n          \"method\",\n          \"headers\",\n          \"expiresAt\",\n          \"confirmExpiresAt\",\n        ]) ||\n        !uuid.test(payload.sessionId) ||\n        typeof payload.sessionToken != \"string\" ||\n        payload.sessionToken.length > 2048 ||\n        !/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]{43}$/.test(payload.sessionToken) ||\n        payload.method !== \"PUT\" ||\n        typeof payload.uploadUrl != \"string\" ||\n        payload.uploadUrl.length > 4096 ||\n        !exactDirectPhotoKeys(payload.headers, [\n          \"Content-Type\",\n          \"If-None-Match\",\n        ]) ||\n        payload.headers[\"Content-Type\"] !== metadata.mimeType ||\n        payload.headers[\"If-None-Match\"] !== \"*\" ||\n        !Number.isSafeInteger(payload.expiresAt) ||\n        !Number.isSafeInteger(payload.confirmExpiresAt) ||\n        payload.expiresAt <= Date.now() ||\n        payload.expiresAt > Date.now() + 12e4 ||\n        payload.confirmExpiresAt <= payload.expiresAt ||\n        payload.confirmExpiresAt > Date.now() + 36e4 ||\n        !/^[0-9a-f]{32}$/.test(directR2AccountId)\n      )\n        throw directPhotoError(\"session\");\n      let upload;\n      try {\n        upload = new URL(payload.uploadUrl);\n      } catch {\n        throw directPhotoError(\"session\");\n      }\n      const path = new RegExp(\n          `^/petcap-customer-photos/direct-upload-staging/\\\\d{4}/\\\\d{2}/${payload.sessionId}\\\\.${extension}$`,\n        ),\n        requiredQuery = [\n          \"X-Amz-Algorithm\",\n          \"X-Amz-Credential\",\n          \"X-Amz-Date\",\n          \"X-Amz-Expires\",\n          \"X-Amz-SignedHeaders\",\n          \"X-Amz-Signature\",\n        ];\n      if (\n        upload.protocol !== \"https:\" ||\n        upload.username ||\n        upload.password ||\n        upload.port ||\n        upload.hash ||\n        upload.hostname !== `${directR2AccountId}.r2.cloudflarestorage.com` ||\n        !path.test(upload.pathname) ||\n        !requiredQuery.every(\n          (key) => upload.searchParams.getAll(key).length === 1,\n        ) ||\n        upload.searchParams.get(\"X-Amz-Algorithm\") !== \"AWS4-HMAC-SHA256\" ||\n        upload.searchParams.get(\"X-Amz-Expires\") !== \"60\" ||\n        upload.searchParams.get(\"X-Amz-SignedHeaders\") !==\n          \"content-length;content-type;host;if-none-match\" ||\n        !/^\\d{8}T\\d{6}Z$/.test(upload.searchParams.get(\"X-Amz-Date\")) ||\n        !/^[0-9a-f]{64}$/.test(upload.searchParams.get(\"X-Amz-Signature\"))\n      )\n        throw directPhotoError(\"session\");\n      return payload;\n    },\n    validateDirectPhotoConfirmation = (payload, direct) => {\n      if (\n        !exactDirectPhotoKeys(payload, [\n          \"confirmed\",\n          \"url\",\n          \"sessionId\",\n          \"sha256\",\n          \"byteLength\",\n          \"mimeType\",\n        ]) ||\n        payload.confirmed !== !0 ||\n        payload.sessionId !== direct.session.sessionId ||\n        payload.sha256 !== direct.metadata.sha256 ||\n        payload.byteLength !== direct.metadata.byteLength ||\n        payload.mimeType !== direct.metadata.mimeType ||\n        typeof payload.url != \"string\" ||\n        ![\n          \"https://mypetcap.com/apps/petcap-photo/files/customer-photos/\",\n          \"https://petcap.net/apps/petcap-photo/files/customer-photos/\",\n        ].some((prefix) => payload.url.startsWith(prefix))\n      )\n        throw directPhotoError(\"confirm\");\n      try {\n        return photoUploadReceipt(payload, \"source\");\n      } catch {\n        throw directPhotoError(\"confirm\");\n      }\n    },\n    uploadDirectPhotoSource = async (file, selection, master) => {\n      assertCurrentPhotoSelection(file, selection);\n      let direct = selection.directSource;\n      if (\n        (direct ||\n          ((direct = {\n            master,\n            body: null,\n            metadata: null,\n            session: null,\n            sessionAttempted: !1,\n            putDone: !1,\n            putUncertain: !1,\n            confirmed: null,\n            autoRetryUsed: !1,\n          }),\n          (selection.directSource = direct)),\n        direct.master !== master)\n      )\n        throw directPhotoError(\"session\");\n      if (direct.confirmed) return direct.confirmed;\n      if (!direct.metadata) {\n        if (!/^[0-9a-f]{32}$/.test(directR2AccountId))\n          throw directPhotoError(\"session\");\n        try {\n          const prepared = await directPhotoMetadata(file, selection, master);\n          ((direct.metadata = prepared.metadata),\n            (direct.body = prepared.body));\n        } catch {\n          throw directPhotoError(\"session\");\n        }\n      }\n      if (!direct.session) {\n        if (direct.sessionAttempted) throw directPhotoError(\"session\");\n        direct.sessionAttempted = !0;\n        const payload2 = await directPhotoRequest(\n          file,\n          selection,\n          \"session\",\n          directPhotoSessionEndpoint,\n          {\n            method: \"POST\",\n            headers: {\n              Accept: \"application/json\",\n              \"Content-Type\": \"application/json\",\n            },\n            body: JSON.stringify(direct.metadata),\n          },\n        );\n        (assertCurrentPhotoSelection(file, selection),\n          (direct.session = validateDirectPhotoSession(\n            payload2,\n            direct.metadata,\n          )));\n      }\n      const put = () =>\n          runDirectPhotoStep(file, selection, direct, \"put\", () =>\n            directPhotoRequest(\n              file,\n              selection,\n              \"put\",\n              direct.session.uploadUrl,\n              {\n                method: \"PUT\",\n                headers: direct.session.headers,\n                body: direct.body,\n              },\n              direct.session.expiresAt,\n            ),\n          ),\n        confirm = () =>\n          runDirectPhotoStep(file, selection, direct, \"confirm\", () =>\n            directPhotoRequest(\n              file,\n              selection,\n              \"confirm\",\n              directPhotoConfirmEndpoint,\n              {\n                method: \"POST\",\n                headers: {\n                  Accept: \"application/json\",\n                  \"Content-Type\": \"application/json\",\n                },\n                body: JSON.stringify({\n                  sessionId: direct.session.sessionId,\n                  sessionToken: direct.session.sessionToken,\n                }),\n              },\n              direct.session.confirmExpiresAt,\n            ),\n          );\n      if (!direct.putDone && !direct.putUncertain)\n        try {\n          (await put(), (direct.putDone = !0));\n        } catch (error) {\n          if (!error.uncertain) throw error;\n          direct.putUncertain = !0;\n        }\n      let payload;\n      try {\n        payload = await confirm();\n      } catch (error) {\n        if (\n          !direct.putUncertain ||\n          error.code !== \"DIRECT_R2_UPLOAD_NOT_FOUND\" ||\n          ((direct.putUncertain = !1), direct.autoRetryUsed)\n        )\n          throw error;\n        ((direct.autoRetryUsed = !0),\n          await waitForPhotoRetry(file, selection, error.retryAt));\n        try {\n          await put();\n        } catch (retryError) {\n          throw (\n            retryError.uncertain && (direct.putUncertain = !0),\n            retryError\n          );\n        }\n        ((direct.putDone = !0), (payload = await confirm()));\n      }\n      return (\n        assertCurrentPhotoSelection(file, selection),\n        (direct.confirmed = validateDirectPhotoConfirmation(payload, direct)),\n        (direct.session = null),\n        (direct.body = null),\n        direct.confirmed\n      );\n    },\n    requestPhotoPart = async (file, selection, part, uploadFile) => {\n      if (\n        (await waitForPhotoRetry(file, selection),\n        uploadFile.size >\n          (part === \"checkout_preview\"\n            ? maxCheckoutPreviewBytes\n            : maxPhotoUploadBytes))\n      )\n        throw photoTooLargeError(file);\n      const formData = new FormData(),\n        field = part === \"checkout_preview\" ? \"checkout_preview\" : \"file\";\n      (formData.append(field, uploadFile, uploadFile.name),\n        formData.append(\n          \"alt\",\n          `Customer-uploaded photo: ${file.name}`.slice(0, 1024),\n        ));\n      const controller =\n        typeof window.AbortController == \"function\"\n          ? new window.AbortController()\n          : null;\n      controller && selection.controllers.add(controller);\n      const timeoutId = controller\n        ? window.setTimeout(() => controller.abort(), photoUploadTimeoutMs)\n        : null;\n      try {\n        const response = await fetch(\n            part === \"staged\"\n              ? photoFilesEndpoint\n              : `${splitPhotoFilesEndpoint}${part}`,\n            {\n              method: \"POST\",\n              body: formData,\n              headers: { Accept: \"application/json\" },\n              ...(controller ? { signal: controller.signal } : {}),\n            },\n          ),\n          payload = await response.json().catch(() => ({}));\n        if ((assertCurrentPhotoSelection(file, selection), !response.ok)) {\n          const error = new Error(\n            payload.error || \"We could not upload this photo. Try again.\",\n          );\n          error.retryable = payload.retryable === !0 || response.status === 429;\n          const header = response.headers?.get?.(\"Retry-After\"),\n            delay =\n              header && /^\\d+(?:\\.\\d+)?$/.test(header.trim())\n                ? Number(header) * 1e3\n                : Math.max(0, Date.parse(header || \"\") - Date.now()) || 0;\n          throw (\n            (error.retryAt = Date.now() + Math.max(1e3, delay)),\n            response.status === 429 &&\n              (photoUploadRetryAfter = Math.max(\n                photoUploadRetryAfter,\n                error.retryAt,\n              )),\n            error\n          );\n        }\n        const receipt = photoUploadReceipt(payload, part);\n        return (\n          receipt.checkoutUrl\n            ? (prewarmThumbnail(receipt.checkoutUrl),\n              prewarmCheckoutThumbnail(receipt.checkoutUrl))\n            : part === \"staged\" && prewarmThumbnail(receipt.url),\n          receipt\n        );\n      } catch (error) {\n        throw error?.name === \"AbortError\"\n          ? new Error(\"The photo upload took too long. Select the photo again.\")\n          : error;\n      } finally {\n        (timeoutId !== null && window.clearTimeout(timeoutId),\n          controller && selection.controllers.delete(controller));\n      }\n    },\n    startPhotoPart = (file, selection, role, work) => {\n      let part = selection.parts.get(role);\n      if (\n        (part ||\n          ((part = {\n            ready: !1,\n            result: null,\n            task: null,\n            error: null,\n            attempts: 0,\n          }),\n          selection.parts.set(role, part)),\n        part.ready)\n      )\n        return Promise.resolve(part.result);\n      if (part.task) return part.task;\n      if (part.error && part.error.retryable !== !0)\n        return Promise.reject(part.error);\n      const retryAt = part.error?.retryAt || 0;\n      let task;\n      return (\n        (task = (async () => {\n          (await waitForPhotoRetry(file, selection, retryAt),\n            (part.attempts += 1));\n          const result = await work();\n          return (\n            assertCurrentPhotoSelection(file, selection),\n            (part.ready = !0),\n            (part.result = result),\n            (part.error = null),\n            result\n          );\n        })()\n          .catch((error) => {\n            throw (\n              (part.error = error),\n              error.retryable === !0 &&\n                (error.retryAt = Math.max(\n                  error.retryAt || 0,\n                  Date.now() + Math.min(3e4, 1e3 * 2 ** (part.attempts - 1)),\n                )),\n              error\n            );\n          })\n          .finally(() => {\n            part.task === task && (part.task = null);\n          })),\n        (part.task = task),\n        task\n      );\n    },\n    uploadPhoto = async (file, selection = currentPhotoSelection(file)) => {\n      assertCurrentPhotoSelection(file, selection);\n      const prepared = preparePhotoPartsForUpload(file),\n        previewTask = startPhotoPart(\n          file,\n          selection,\n          \"checkout_preview\",\n          async () => {\n            const preview2 = await prepared.checkoutPreview;\n            return preview2\n              ? requestPhotoPart(file, selection, \"checkout_preview\", preview2)\n              : null;\n          },\n        ),\n        sourceTask = startPhotoPart(file, selection, \"source\", async () => {\n          const preview2 = await prepared.checkoutPreview,\n            master = await prepared.master;\n          if (!preview2)\n            return requestPhotoPart(file, selection, \"staged\", master);\n          if (\n            typeof window.AbortController != \"function\" ||\n            !window.crypto?.subtle ||\n            typeof master.arrayBuffer != \"function\"\n          )\n            return requestPhotoPart(file, selection, \"source\", master);\n          try {\n            return await uploadDirectPhotoSource(file, selection, master);\n          } catch (error) {\n            if (!Object.prototype.hasOwnProperty.call(error || {}, \"status\"))\n              throw error;\n            return (\n              (selection.directSource = null),\n              requestPhotoPart(file, selection, \"source\", master)\n            );\n          }\n        }),\n        [preview, source] = await Promise.allSettled([previewTask, sourceTask]);\n      if (\n        (assertCurrentPhotoSelection(file, selection),\n        preview.status === \"rejected\")\n      )\n        throw preview.reason;\n      if (source.status === \"rejected\") throw source.reason;\n      return {\n        file,\n        url: source.value.url,\n        checkoutUrl:\n          preview.value?.checkoutUrl || source.value.checkoutUrl || \"\",\n        generation: selection.generation,\n      };\n    },\n    firstUploadErrorFor = (files) =>\n      files.map((file) => photoUploadErrors.get(file)).find(Boolean) || null,\n    syncPhotoUploadState = ({ showFailure = !1 } = {}) => {\n      const pendingFiles = selectedPhotoFiles.filter((file) =>\n          photoUploadTasks.has(file),\n        ),\n        currentError = firstUploadErrorFor(selectedPhotoFiles);\n      if (fileSelection) {\n        const fileCount = selectedPhotoFiles.length;\n        fileSelection.textContent = fileCount\n          ? `${fileCount} file${fileCount === 1 ? \"\" : \"s\"} selected`\n          : \"No photos selected\";\n      }\n      if (\n        (photoCount &&\n          (pendingFiles.length\n            ? (photoCount.textContent = `Uploading ${selectedPhotoFiles.length} photo${selectedPhotoFiles.length === 1 ? \"\" : \"s\"}\\u2026`)\n            : currentError\n              ? (photoCount.textContent = `${selectedPhotoFiles.length} of 3 photos selected`)\n              : (photoCount.textContent = selectedPhotoFiles.length\n                  ? `${selectedPhotoFiles.length} of 3 photos ready`\n                  : \"No photos uploaded\")),\n        showFailure &&\n          currentError &&\n          showUploadError(\n            currentError.message ||\n              \"We could not upload this photo. Try again.\",\n          ),\n        !productAddPending)\n      ) {\n        const addButton = personalizeForm?.querySelector(\n          \"[data-pf-add-button]\",\n        );\n        (addButton &&\n          (addButton.textContent = pendingFiles.length\n            ? \"Preparing your photo\\u2026\"\n            : \"Add to cart\"),\n          mobileAdd && (mobileAdd.hidden = pendingFiles.length > 0),\n          syncAddAvailability());\n      }\n    },\n    startPhotoUpload = (file) => {\n      const existingTask = photoUploadTasks.get(file);\n      if (existingTask) return existingTask;\n      const existingUpload = uploadedPhotos.find(\n        (upload) =>\n          upload.file === file &&\n          upload.url &&\n          (!photoSelections.has(file) ||\n            upload.generation === photoSelections.get(file).generation),\n      );\n      if (existingUpload) return Promise.resolve(existingUpload);\n      const selection = currentPhotoSelection(file);\n      photoUploadErrors.delete(file);\n      let task;\n      return (\n        (task = uploadPhoto(file, selection)\n          .then(\n            (upload) => (\n              assertCurrentPhotoSelection(file, selection),\n              (uploadedPhotos = [\n                ...uploadedPhotos.filter((item) => item.file !== file),\n                upload,\n              ]),\n              photoUploadErrors.delete(file),\n              upload\n            ),\n          )\n          .catch((error) => {\n            throw (\n              photoSelections.get(file) === selection &&\n                !selection.cancelled &&\n                photoUploadErrors.set(file, error),\n              error\n            );\n          })\n          .finally(() => {\n            (photoUploadTasks.get(file) === task &&\n              photoUploadTasks.delete(file),\n              photoSelections.get(file) === selection &&\n                !selection.cancelled &&\n                syncPhotoUploadState());\n          })),\n        photoUploadTasks.set(file, task),\n        task\n      );\n    },\n    forgetPhoto = (file) => {\n      const selection = photoSelections.get(file);\n      (selection &&\n        ((selection.cancelled = !0),\n        selection.controllers.forEach((controller) => controller.abort()),\n        selection.directSource && (selection.directSource.session = null),\n        photoSelections.delete(file)),\n        (photoSelectionGeneration += 1),\n        (uploadedPhotos = uploadedPhotos.filter(\n          (upload) => upload.file !== file,\n        )),\n        photoUploadTasks.delete(file),\n        photoUploadErrors.delete(file));\n      const previewUrl = photoPreviewUrls.get(file);\n      (previewUrl &&\n        typeof URL < \"u\" &&\n        typeof URL.revokeObjectURL == \"function\" &&\n        URL.revokeObjectURL(previewUrl),\n        photoPreviewUrls.delete(file));\n    },\n    isSameSelectedPhoto = (first, second) =>\n      first.name === second.name &&\n      first.size === second.size &&\n      first.type === second.type &&\n      (first.lastModified || 0) === (second.lastModified || 0);\n  (photoInput &&\n    photoInput.addEventListener(\"change\", async () => {\n      pendingCustomizationId = \"\";\n      const incomingFiles = [...photoInput.files];\n      photoInput.value = \"\";\n      const remaining = 3 - selectedPhotoFiles.length,\n        files = [];\n      if (\n        (incomingFiles.forEach((file) => {\n          const failedIndex = selectedPhotoFiles.findIndex(\n            (selectedFile) =>\n              photoUploadErrors.has(selectedFile) &&\n              isSameSelectedPhoto(selectedFile, file),\n          );\n          failedIndex >= 0\n            ? (forgetPhoto(selectedPhotoFiles[failedIndex]),\n              (selectedPhotoFiles[failedIndex] = file),\n              files.push(file))\n            : selectedPhotoFiles.length < 3 &&\n              (selectedPhotoFiles.push(file), files.push(file));\n        }),\n        !files.length)\n      ) {\n        (syncPhotoUploadState(),\n          incomingFiles.length &&\n            showUploadError(\"You can upload up to three photos.\"));\n        return;\n      }\n      (files.forEach(previewUrlFor),\n        renderPhotoPreviews(),\n        incomingFiles.length > files.length\n          ? showUploadError(\n              remaining > 0\n                ? `You can add only ${remaining} more photo${remaining === 1 ? \"\" : \"s\"}.`\n                : \"You can upload up to three photos.\",\n            )\n          : clearUploadError(),\n        warmCart(),\n        prewarmThumbnail(personalizeForm?.dataset?.pfCartThumbnail));\n      const batchTasks = files.map(startPhotoUpload);\n      (syncPhotoUploadState(),\n        await Promise.allSettled(batchTasks),\n        syncPhotoUploadState({ showFailure: !0 }));\n    }),\n    photoPreviewList?.addEventListener(\"click\", (event) => {\n      const removeButton = event.target.closest(\"[data-pf-photo-remove]\");\n      if (!removeButton) return;\n      const index = Number(removeButton.dataset.pfPhotoRemove);\n      if (\n        !Number.isInteger(index) ||\n        index < 0 ||\n        index >= selectedPhotoFiles.length\n      )\n        return;\n      pendingCustomizationId = \"\";\n      const [removedFile] = selectedPhotoFiles.splice(index, 1);\n      (forgetPhoto(removedFile),\n        clearUploadError(),\n        renderPhotoPreviews(),\n        syncPhotoUploadState({ showFailure: !0 }));\n    }),\n    personalizeForm\n      ?.querySelectorAll('input[name=\"pet_name\"], textarea[name=\"designer_note\"]')\n      .forEach((field) =>\n        field.addEventListener(\"input\", () => {\n          pendingCustomizationId = \"\";\n        }),\n      ),\n    window.addEventListener?.(\"pagehide\", () => {\n      (photoPreviewUrls.forEach((url) => {\n        url &&\n          typeof URL < \"u\" &&\n          typeof URL.revokeObjectURL == \"function\" &&\n          URL.revokeObjectURL(url);\n      }),\n        photoPreviewUrls.clear());\n    }),\n    personalizeForm &&\n      (personalizeForm.addEventListener(\"submit\", async (event) => {\n        if ((event.preventDefault(), productAddPending)) return;\n        const addButton = personalizeForm.querySelector(\"[data-pf-add-button]\"),\n          errorBox = personalizeForm.querySelector(\"[data-pf-product-error]\"),\n          productVariant = personalizeForm.querySelector(\n            \"[data-pf-product-variant]\",\n          )?.value,\n          selectedHats = Array.isArray(personalizeForm.pfSelectedHats)\n            ? personalizeForm.pfSelectedHats.map((hat) => ({\n                ...hat,\n                quantity: 1,\n              }))\n            : [\n                {\n                  id: Number(productVariant),\n                  title: document.title.split(\"\\u2013\")[0].trim(),\n                  thumbnail: personalizeForm.dataset?.pfCartThumbnail || \"\",\n                  quantity: 1,\n                },\n              ],\n          artworkChoice = personalizeForm.querySelector(\n            'input[name=\"artwork_variant\"]:checked',\n          ),\n          petName = personalizeForm\n            .querySelector('input[name=\"pet_name\"]')\n            ?.value.trim(),\n          designerNote = (\n            personalizeForm.querySelector('textarea[name=\"designer_note\"]')\n              ?.value || \"\"\n          )\n            .trim()\n            .slice(0, 1e3);\n        if (\n          (errorBox?.classList.add(\"hidden\"),\n          !productVariant ||\n            !Number.isSafeInteger(Number(productVariant)) ||\n            Number(productVariant) <= 0 ||\n            !artworkChoice ||\n            !selectedHats.length ||\n            selectedHats.some(\n              (hat) =>\n                !Number.isSafeInteger(Number(hat.id)) || Number(hat.id) <= 0,\n            ))\n        )\n          return;\n        const isReorder = artworkChoice.value === \"reorder\",\n          files = isReorder\n            ? []\n            : selectedPhotoFiles.length\n              ? [...selectedPhotoFiles]\n              : [...(photoInput?.files || [])].slice(0, 3);\n        if (isReorder && (!verifiedReorder || !reorderVariantId)) {\n          (setReorderStatus(\n            reorderVariantId\n              ? \"Confirm your previous order details before adding this reorder.\"\n              : \"Previous artwork is temporarily unavailable. Contact support for help.\",\n            \"error\",\n          ),\n            syncAddAvailability());\n          return;\n        }\n        if (!isReorder && files.length === 0) {\n          showUploadError(\"Upload at least one photo to continue.\");\n          return;\n        }\n        (clearUploadError(),\n          (productAddPending = !0),\n          addButton?.classList.add(\"pf-loading\"),\n          addButton &&\n            ((addButton.disabled = !0),\n            (addButton.textContent = \"Adding\\u2026\")),\n          mobileAdd && (mobileAdd.hidden = !0));\n        let optimisticOperationId = 0;\n        const artworkTitle = artworkChoice.dataset.artworkTitle || \"Reorder\",\n          productTitle = [\n            ...new Set(selectedHats.map((hat) => hat.title)),\n          ].join(\", \"),\n          retryingCustomization = Boolean(pendingCustomizationId),\n          customizationId =\n            pendingCustomizationId ||\n            (pendingCustomizationId = createCustomizationId()),\n          reorderUploads = isReorder ? reorderUploadsFor(verifiedReorder) : [],\n          makeArtworkProperties = (uploads = []) => {\n            const properties = {\n              \"For Product\": productTitle,\n              \"Pet Name\": petName || \"Not provided\",\n              \"Number of Pets\": artworkTitle.match(/\\d+/)?.[0] || \"1\",\n              \"_Petcap Customization ID\": customizationId,\n              \"_Petcap Photo Carrier\": \"true\",\n            };\n            return (\n              isReorder &&\n                (properties[\"_Petcap Reorder Proof\"] = verifiedReorder.proof),\n              designerNote &&\n                (properties[\"Message for Designer\"] = designerNote),\n              uploads.forEach((upload, index) => {\n                ((properties[`_Pet Photo URL ${index + 1}`] =\n                  upload.checkoutUrl || upload.url),\n                  upload.checkoutUrl &&\n                    upload.url &&\n                    (properties[`_Pet Photo R2 URL ${index + 1}`] =\n                      upload.url));\n              }),\n              properties\n            );\n          },\n          makeProductProperties = (uploads = []) => {\n            const properties = {};\n            return (\n              petName && (properties[\"Pet Name\"] = petName),\n              designerNote &&\n                (properties[\"Message for Designer\"] = designerNote),\n              (properties[\n                isReorder ? \"_Artwork Subjects\" : \"Artwork Subjects\"\n              ] = artworkTitle),\n              (properties[\"_Petcap Customization ID\"] = customizationId),\n              (properties[\"_Petcap Photo Required\"] = \"true\"),\n              uploads.forEach((upload, index) => {\n                ((properties[`_Pet Photo URL ${index + 1}`] =\n                  upload.checkoutUrl || upload.url),\n                  upload.checkoutUrl &&\n                    upload.url &&\n                    (properties[`_Pet Photo R2 URL ${index + 1}`] =\n                      upload.url));\n              }),\n              properties\n            );\n          },\n          previewPhotoUrls = isReorder\n            ? reorderUploads.map((upload) => upload.checkoutUrl || upload.url)\n            : files.map(previewUrlFor);\n        let optimisticItems;\n        if (isReorder) {\n          /* PF_GMC_REORDER_TWO_LINE */\n          optimisticItems = selectedHats.map((hat) => ({\n            variant_id: Number(hat.id),\n            product_title: hat.title,\n            title: hat.title,\n            quantity: 1,\n            image: hat.thumbnail || hat.image || \"\",\n            properties: makeProductProperties(reorderUploads),\n          }));\n          optimisticItems.push({\n            variant_id: reorderVariantId,\n            product_title: \"Custom Artwork\",\n            title: \"Custom Artwork\",\n            quantity: 1,\n            image: \"\",\n            properties: makeArtworkProperties(reorderUploads),\n            preview_photo_urls: previewPhotoUrls,\n            preview_photo_files: files,\n          });\n        } else if (isCompositePersonalization) {\n          /* PF_GMC_COMPOSITE_ONE_LINE */\n          optimisticItems = [\n            {\n              variant_id: Number(productVariant),\n              product_title: document\n                .querySelector(\"[data-pf-product-title]\")\n                ?.textContent?.trim(),\n              title: document\n                .querySelector(\"[data-pf-product-title]\")\n                ?.textContent?.trim(),\n              quantity: 1,\n              image: personalizeForm.dataset?.pfCartThumbnail || \"\",\n              properties: makeProductProperties([]),\n              preview_photo_urls: previewPhotoUrls,\n              preview_photo_files: files,\n            },\n          ];\n        } else {\n          optimisticItems = selectedHats.map((hat) => ({\n            variant_id: Number(hat.id),\n            product_title: hat.title,\n            title: hat.title,\n            quantity: 1,\n            image: hat.thumbnail || hat.image || \"\",\n            properties: makeProductProperties([]),\n          }));\n          optimisticItems.push({\n            variant_id: Number(artworkChoice.value),\n            product_title: \"Custom Artwork\",\n            title: \"Custom Artwork\",\n            quantity: 1,\n            image: \"\",\n            properties: makeArtworkProperties([]),\n            preview_photo_urls: previewPhotoUrls,\n            preview_photo_files: files,\n          });\n        }\n        ((optimisticOperationId =\n            window.PFCartDrawer?.renderOptimisticAndOpen?.(optimisticItems)),\n          optimisticOperationId || window.PFCartDrawer?.openPending?.());\n        let cartAddCommitted = !1,\n          cartAddAttempted = !1,\n          cartAddDefinitivelyRejected = !1,\n          preserveCustomizationId = retryingCustomization,\n          submittedItems = [],\n          successEventDispatched = !1;\n        const showCommittedCart = async (cartPayload, items) => {\n          cartAddCommitted = !0;\n          pendingCustomizationId = \"\";\n          if (!successEventDispatched) {\n            successEventDispatched = !0;\n            personalizeForm.dispatchEvent(\n              new CustomEvent(\"pf:cart-add-committed\", {\n                bubbles: !0,\n                detail: { customizationId, items },\n              }),\n            );\n          }\n          if (hasConfirmedAddedItems(cartPayload, items))\n            window.PFCartDrawer?.markAddCommitted?.(optimisticOperationId);\n          if (window.PFCartDrawer?.renderBundledAndOpen?.(cartPayload) === !0)\n            return;\n          try {\n            if (!window.PFCartDrawer?.refreshAndOpen)\n              throw new Error(\"We could not refresh the cart.\");\n            await window.PFCartDrawer.refreshAndOpen({\n              preserveCommittedAdd: !0,\n            });\n          } catch {\n            window.PFCartDrawer?.settleCommittedWithoutRefresh?.(\n              optimisticOperationId,\n            );\n          }\n        };\n        try {\n          const pendingUploads = isReorder ? [] : files.map(startPhotoUpload),\n            submissionGeneration = photoSelectionGeneration;\n          if (\n            (pendingUploads.length &&\n              (addButton &&\n                (addButton.textContent = \"Uploading your photo\\u2026\"),\n              await Promise.allSettled(pendingUploads)),\n            !isReorder &&\n              (submissionGeneration !== photoSelectionGeneration ||\n                files.length !== selectedPhotoFiles.length ||\n                files.some(\n                  (file, index) => selectedPhotoFiles[index] !== file,\n                )))\n          )\n            throw new Error(\n              \"Your photo selection changed. Select your photos again.\",\n            );\n          const readyUploads = isReorder\n              ? reorderUploads\n              : uploadsInFileOrder(files, uploadedPhotos),\n            currentUploadError = isReorder ? null : firstUploadErrorFor(files);\n          if (\n            !isReorder &&\n            currentUploadError &&\n            readyUploads.length !== files.length\n          )\n            throw new Error(\n              currentUploadError.message ||\n                \"We could not upload this photo. Select it again.\",\n            );\n          if (!isReorder && readyUploads.length !== files.length)\n            throw new Error(\"Your photos are not ready yet. Try again.\");\n          const productProperties = makeProductProperties(readyUploads);\n          let items;\n          if (isReorder) {\n            /* PF_GMC_REORDER_TWO_LINE */\n            const hatItems = new Map();\n            selectedHats.forEach((hat) => {\n              const id = Number(hat.id),\n                existing = hatItems.get(id);\n              existing\n                ? (existing.quantity += 1)\n                : hatItems.set(id, {\n                    id,\n                    quantity: 1,\n                    properties: productProperties,\n                  });\n            });\n            items = [\n              ...hatItems.values(),\n              {\n                id: reorderVariantId,\n                quantity: 1,\n                properties: makeArtworkProperties(readyUploads),\n              },\n            ];\n          } else if (isCompositePersonalization) {\n            /* PF_GMC_COMPOSITE_ONE_LINE */\n            items = [\n              {\n                id: Number(productVariant),\n                quantity: 1,\n                properties: productProperties,\n              },\n            ];\n          } else {\n            const hatItems = new Map();\n            selectedHats.forEach((hat) => {\n              const id = Number(hat.id),\n                existing = hatItems.get(id);\n              existing\n                ? (existing.quantity += 1)\n                : hatItems.set(id, {\n                    id,\n                    quantity: 1,\n                    properties: productProperties,\n                  });\n            });\n            items = [\n              ...hatItems.values(),\n              {\n                id: Number(artworkChoice.value),\n                quantity: 1,\n                properties: makeArtworkProperties(readyUploads),\n              },\n            ];\n          }\n          submittedItems = items;\n\n          if (retryingCustomization) {\n            preserveCustomizationId = !0;\n            let preflight;\n            try {\n              preflight = await getCustomizationCartState(\n                customizationId,\n                items,\n              );\n            } catch {\n              throw new Error(\n                \"We could not safely verify your previous attempt. Your cart was not submitted again; try once more in a moment.\",\n              );\n            }\n            if (preflight.state === \"confirmed\") {\n              await showCommittedCart(preflight.cart, items);\n              return;\n            }\n            if (preflight.state === \"partial\")\n              throw new Error(\n                \"Part of this customization is already in your cart. We did not submit it again; please contact support before retrying.\",\n              );\n            preserveCustomizationId = !1;\n          }\n\n          cartAddAttempted = !0;\n          preserveCustomizationId = !0;\n          const cartResponse = await fetch(cartAddUrl, {\n            method: \"POST\",\n            headers: {\n              \"Content-Type\": \"application/json\",\n              Accept: \"application/json\",\n            },\n            body: JSON.stringify({\n              items,\n              sections: [\"pf-cart-state\"],\n              sections_url: window.location.pathname || \"/\",\n            }),\n          });\n          if (!cartResponse.ok) {\n            const errorPayload = await cartResponse.json().catch(() => ({}));\n            cartAddDefinitivelyRejected =\n              cartResponse.status >= 400 && cartResponse.status < 500;\n            if (cartAddDefinitivelyRejected) {\n              preserveCustomizationId = !1;\n              pendingCustomizationId = \"\";\n            }\n            throw new Error(\n              errorPayload.description ||\n                \"We could not add your selections to the cart.\",\n            );\n          }\n          const cartPayload = await cartResponse.json().catch(() => ({}));\n          await showCommittedCart(cartPayload, items);\n        } catch (error) {\n          let displayedError = error;\n          if (\n            !cartAddCommitted &&\n            cartAddAttempted &&\n            !cartAddDefinitivelyRejected &&\n            submittedItems.length\n          ) {\n            preserveCustomizationId = !0;\n            try {\n              const reconciliation = await getCustomizationCartState(\n                customizationId,\n                submittedItems,\n              );\n              if (reconciliation.state === \"confirmed\") {\n                await showCommittedCart(reconciliation.cart, submittedItems);\n              } else if (reconciliation.state === \"partial\") {\n                displayedError = new Error(\n                  \"Part of this customization is already in your cart. We did not submit it again; please contact support before retrying.\",\n                );\n              } else {\n                displayedError = new Error(\n                  \"We could not confirm that this customization reached your cart. Try again; we will verify it before submitting another copy.\",\n                );\n              }\n            } catch {\n              displayedError = new Error(\n                \"We could not confirm that this customization reached your cart. Try again; we will verify it before submitting another copy.\",\n              );\n            }\n          }\n          if (!preserveCustomizationId) pendingCustomizationId = \"\";\n          if (!cartAddCommitted) {\n            window.PFCartDrawer?.rollbackOptimistic?.(optimisticOperationId);\n            window.PFCartDrawer?.close?.();\n            if (errorBox) {\n              errorBox.textContent =\n                displayedError.message || \"Something went wrong. Try again.\";\n              errorBox.classList.remove(\"hidden\");\n            }\n          }\n        } finally {\n          (addButton?.classList.remove(\"pf-loading\"),\n            addButton && (addButton.textContent = \"Add to cart\"),\n            mobileAdd && (mobileAdd.hidden = !1),\n            (productAddPending = !1),\n            syncAddAvailability());\n        }\n      }),\n      personalizeForm\n        .querySelectorAll('input[name=\"artwork_variant\"]')\n        .forEach((choice) => {\n          choice.addEventListener(\"change\", () => {\n            if (!choice.checked) return;\n            pendingCustomizationId = \"\";\n            clearVerifiedReorder();\n            syncReorderInterface();\n          });\n        }),\n      syncReorderInterface()),\n    document\n      .querySelectorAll('.pf-product-page form[action*=\"/cart/add\"]')\n      .forEach((form) => {\n        if (\n          form.dataset.pfFastCartBound === \"true\" ||\n          form.closest(\"[data-pf-personalize]\")\n        )\n          return;\n        form.dataset.pfFastCartBound = \"true\";\n        let formAddPending = !1;\n        form.addEventListener(\"submit\", async (event) => {\n          const drawer = window.PFCartDrawer;\n          if (!drawer?.renderOptimisticAndOpen) return;\n          const submitter = event.submitter?.matches?.(\n            '[type=\"submit\"], button:not([type]), input[type=\"submit\"]',\n          )\n            ? event.submitter\n            : form.querySelector(\n                '[type=\"submit\"], button:not([type]), input[type=\"submit\"]',\n              );\n          if (formAddPending || submitter?.disabled) {\n            event.preventDefault();\n            return;\n          }\n          const formData = new FormData(form),\n            variantId = Number(formData.get(\"id\"));\n          if (!Number.isSafeInteger(variantId) || variantId <= 0) return;\n          (event.preventDefault(), (formAddPending = !0));\n          const quantity = Math.max(\n              1,\n              Number.parseInt(formData.get(\"quantity\") || \"1\", 10) || 1,\n            ),\n            productRoot = form.closest(\".pf-product-page\") || document,\n            titleText =\n              productRoot.querySelector(\"h1\")?.textContent?.trim() ||\n              document.title.split(\"\\u2013\")[0].trim() ||\n              \"Product\",\n            image =\n              productRoot.querySelector(\".pf-product-main-image img, img\")\n                ?.currentSrc ||\n              productRoot.querySelector(\".pf-product-main-image img, img\")\n                ?.src ||\n              \"\",\n            properties = {};\n          formData.forEach((value, key) => {\n            const match = String(key).match(/^properties\\[(.+)]$/);\n            match &&\n              String(value || \"\").trim() &&\n              (properties[match[1]] = value);\n          });\n          const previousText = submitter?.textContent;\n          let optimisticOperationId = 0,\n            cartAddCommitted = !1;\n          try {\n            (form.querySelector(\"[data-pf-fast-cart-error]\")?.remove(),\n              submitter?.classList?.add(\"pf-loading\"),\n              submitter &&\n                ((submitter.disabled = !0),\n                (submitter.textContent = \"Adding\\u2026\")),\n              (optimisticOperationId = drawer.renderOptimisticAndOpen([\n                {\n                  product_title: titleText,\n                  title: titleText,\n                  quantity,\n                  image,\n                  properties,\n                },\n              ])));\n            const item = { id: variantId, quantity };\n            Object.keys(properties).length && (item.properties = properties);\n            const cartResponse = await fetch(cartAddUrl, {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/json\",\n                Accept: \"application/json\",\n              },\n              body: JSON.stringify({\n                items: [item],\n                sections: [\"pf-cart-state\"],\n                sections_url: window.location.pathname || \"/\",\n              }),\n            });\n            if (!cartResponse.ok) {\n              const errorPayload = await cartResponse.json().catch(() => ({}));\n              throw new Error(\n                errorPayload.description ||\n                  \"We could not add this item to the cart.\",\n              );\n            }\n            cartAddCommitted = !0;\n            const cartPayload = await cartResponse.json().catch(() => ({}));\n            if (\n              (hasConfirmedAddedItems(cartPayload, [item]) &&\n                drawer.markAddCommitted?.(optimisticOperationId),\n              !(drawer.renderBundledAndOpen?.(cartPayload) === !0))\n            )\n              try {\n                await drawer.refreshAndOpen?.({ preserveCommittedAdd: !0 });\n              } catch {\n                drawer.settleCommittedWithoutRefresh?.(optimisticOperationId);\n              }\n          } catch (error) {\n            cartAddCommitted\n              ? drawer.settleCommittedWithoutRefresh?.(optimisticOperationId)\n              : (drawer.rollbackOptimistic?.(optimisticOperationId),\n                drawer.close?.(),\n                form.insertAdjacentHTML(\n                  \"beforeend\",\n                  `<p class=\"mt-3 rounded-xl border-2 border-red-800 bg-white p-3 text-sm font-bold text-red-800\" data-pf-fast-cart-error role=\"alert\">${escapeHtml(error?.message || \"Something went wrong. Try again.\")}</p>`,\n                ));\n          } finally {\n            (submitter?.classList?.remove(\"pf-loading\"),\n              submitter &&\n                ((submitter.disabled = !1),\n                previousText !== void 0 &&\n                  (submitter.textContent = previousText)),\n              (formAddPending = !1));\n          }\n        });\n      }));\n  const styleRoutes = {\n    \"'47\": \"/collections/47\",\n    Trucker: \"/collections/trucker\",\n    Vintage: \"/collections/vintage\",\n    Richardson: \"/collections/richardson\",\n    Beanie: \"/collections/beanie\",\n    Youth: \"/collections/youth\",\n  };\n  (document.querySelectorAll(\".pf-source-page button\").forEach((button) => {\n    const route = styleRoutes[button.textContent.trim()];\n    route &&\n      !button.hasAttribute(\"aria-label\") &&\n      button.addEventListener(\"click\", () => window.location.assign(route));\n  }),\n    document\n      .querySelectorAll(\n        'button[aria-label=\"Previous testimonials\"], button[aria-label=\"Next testimonials\"], button[aria-label=\"Previous reviews\"], button[aria-label=\"Next reviews\"]',\n      )\n      .forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          const section = button.closest(\"section\"),\n            track = section\n              ? [...section.querySelectorAll(\"div\")].find(\n                  (el) =>\n                    el.classList.contains(\"snap-x\") &&\n                    el.querySelector(\"article\"),\n                )\n              : null;\n          track &&\n            track.scrollBy({\n              left: (button.getAttribute(\"aria-label\") || \"\").startsWith(\n                \"Previous\",\n              )\n                ? -track.clientWidth\n                : track.clientWidth,\n              behavior: \"smooth\",\n            });\n        });\n      }),\n    document\n      .querySelectorAll(\n        'button[aria-label^=\"Go to testimonial page\"], button[aria-label^=\"Go to review group\"]',\n      )\n      .forEach((dot) => {\n        dot.addEventListener(\"click\", () => {\n          const section = dot.closest(\"section\"),\n            track = section\n              ? [...section.querySelectorAll(\"div\")].find(\n                  (el) =>\n                    el.classList.contains(\"snap-x\") &&\n                    el.querySelector(\"article\"),\n                )\n              : null;\n          if (!track) return;\n          const page =\n            Number(\n              (dot.getAttribute(\"aria-label\") || \"\").match(/\\d+/)?.[0] || 1,\n            ) - 1;\n          track.scrollTo({\n            left: page * track.clientWidth,\n            behavior: \"smooth\",\n          });\n        });\n      }),\n    document.querySelectorAll(\".pf-source-page button\").forEach((button) => {\n      button.textContent.trim() === \"Load More Reviews\" &&\n        button.addEventListener(\"click\", () => {\n          ((button.textContent = \"All reviews loaded\"), (button.disabled = !0));\n        });\n    }));\n  const momentImageSelector =\n    'img[data-pf-image-name], img[alt=\"Customer pet photo\"], img[alt=\"Customer photograph shared with PetCap\"], img[alt=\"Customer PetCap photo\"]';\n  [...document.querySelectorAll(\".pf-source-page div, .pf-product-page div\")]\n    .filter(\n      (el) =>\n        (el.dataset.pfWildTrack === \"true\" ||\n          el.classList.contains(\"overflow-x-hidden\")) &&\n        el.classList.contains(\"cursor-grab\") &&\n        el.querySelector(momentImageSelector),\n    )\n    .forEach((track) => {\n      if (track.dataset.pfMomentsCarousel === \"true\") return;\n      track.dataset.pfMomentsCarousel = \"true\";\n      let loopWidth = 0;\n      const scrollSpeed = track.dataset.pfWildTrack === \"true\" ? 120 : 32;\n      let animationPosition = track.scrollLeft;\n      const finePointerHover = matchMedia(\"(hover: hover) and (pointer: fine)\");\n      let interactionPaused = !1,\n        dragging = !1,\n        dragStartX = 0,\n        dragStartScroll = 0,\n        resumeTimer,\n        lastFrame = null,\n        frameId = null,\n        destroyed = !1,\n        lifecycleSuspended = !1,\n        observersConnected = !1,\n        isInViewport = typeof IntersectionObserver != \"function\",\n        resizeObserver,\n        intersectionObserver;\n      const measureLoopWidth = () => {\n          const cards = [...track.children].filter((card) =>\n              card.querySelector(momentImageSelector),\n            ),\n            firstCard = cards[0],\n            firstImage = firstCard?.querySelector(momentImageSelector),\n            firstSource =\n              firstImage?.dataset.pfImageName ||\n              firstImage?.currentSrc ||\n              firstImage?.src,\n            repeatedCard = cards.slice(1).find((card) => {\n              const image = card.querySelector(momentImageSelector);\n              return (\n                (image?.dataset.pfImageName ||\n                  image?.currentSrc ||\n                  image?.src) === firstSource\n              );\n            });\n          ((loopWidth =\n            firstCard && repeatedCard\n              ? repeatedCard.offsetLeft - firstCard.offsetLeft\n              : track.scrollWidth / 2),\n            loopWidth > 0 &&\n              animationPosition >= loopWidth &&\n              (animationPosition %= loopWidth));\n        },\n        resumeAfterInteraction = () => {\n          (clearTimeout(resumeTimer),\n            (resumeTimer = setTimeout(() => {\n              interactionPaused = !1;\n            }, 900)));\n        },\n        handlePointerDown = (event) => {\n          (event.pointerType === \"mouse\" && event.button !== 0) ||\n            (clearTimeout(resumeTimer),\n            (interactionPaused = !0),\n            (dragging = !0),\n            (dragStartX = event.clientX),\n            (animationPosition = track.scrollLeft),\n            (dragStartScroll = animationPosition),\n            track.classList.add(\"pf-is-dragging\"),\n            track.setPointerCapture?.(event.pointerId));\n        },\n        handlePointerMove = (event) => {\n          dragging &&\n            ((track.scrollLeft =\n              dragStartScroll - (event.clientX - dragStartX)),\n            (animationPosition = track.scrollLeft));\n        },\n        finishDrag = (event) => {\n          dragging &&\n            ((dragging = !1),\n            (animationPosition = track.scrollLeft),\n            track.classList.remove(\"pf-is-dragging\"),\n            track.hasPointerCapture?.(event.pointerId) &&\n              track.releasePointerCapture(event.pointerId),\n            resumeAfterInteraction());\n        };\n      (track.addEventListener(\"pointerdown\", handlePointerDown),\n        track.addEventListener(\"pointermove\", handlePointerMove),\n        track.addEventListener(\"pointerup\", finishDrag),\n        track.addEventListener(\"pointercancel\", finishDrag));\n      const handleWheel = () => {\n        ((interactionPaused = !0), resumeAfterInteraction());\n      };\n      track.addEventListener(\"wheel\", handleWheel, { passive: !0 });\n      const stopAnimation = () => {\n          (frameId !== null && cancelAnimationFrame(frameId),\n            (frameId = null),\n            (lastFrame = null));\n        },\n        canAnimate = () =>\n          !destroyed && !lifecycleSuspended && !document.hidden && isInViewport,\n        animate = (now) => {\n          if (((frameId = null), track.isConnected === !1)) {\n            destroy();\n            return;\n          }\n          if (!canAnimate()) {\n            lastFrame = null;\n            return;\n          }\n          lastFrame === null && (lastFrame = now);\n          const elapsed = Math.min(Math.max(now - lastFrame, 0), 80);\n          lastFrame = now;\n          const hoverPaused =\n              finePointerHover.matches && track.matches(\":hover\"),\n            focusPaused = track.contains(document.activeElement);\n          (!(hoverPaused || focusPaused || interactionPaused) &&\n          loopWidth > 0 &&\n          track.scrollWidth > track.clientWidth\n            ? ((animationPosition += (scrollSpeed * elapsed) / 1e3),\n              animationPosition >= loopWidth &&\n                (animationPosition %= loopWidth),\n              (track.scrollLeft = animationPosition))\n            : (animationPosition = track.scrollLeft),\n            canAnimate() && (frameId = requestAnimationFrame(animate)));\n        },\n        startAnimation = () => {\n          !canAnimate() ||\n            frameId !== null ||\n            ((lastFrame = performance.now()),\n            (frameId = requestAnimationFrame(animate)));\n        },\n        disconnectObservers = () => {\n          (resizeObserver?.disconnect(),\n            intersectionObserver?.disconnect(),\n            (resizeObserver = null),\n            (intersectionObserver = null),\n            (observersConnected = !1),\n            (isInViewport = typeof IntersectionObserver != \"function\"));\n        },\n        connectObservers = () => {\n          destroyed ||\n            lifecycleSuspended ||\n            observersConnected ||\n            ((observersConnected = !0),\n            typeof ResizeObserver == \"function\" &&\n              ((resizeObserver = new ResizeObserver(measureLoopWidth)),\n              resizeObserver.observe(track)),\n            typeof IntersectionObserver == \"function\"\n              ? ((isInViewport = !1),\n                (intersectionObserver = new IntersectionObserver(\n                  (entries) => {\n                    const entry =\n                        entries.find(\n                          (candidate) => candidate.target === track,\n                        ) || entries[0],\n                      nextVisible = !!(\n                        entry?.isIntersecting || entry?.intersectionRatio > 0\n                      );\n                    ((isInViewport = nextVisible),\n                      nextVisible\n                        ? ((animationPosition = track.scrollLeft),\n                          measureLoopWidth(),\n                          startAnimation())\n                        : stopAnimation());\n                  },\n                  { rootMargin: \"200px 0px\" },\n                )),\n                intersectionObserver.observe(track))\n              : ((isInViewport = !0), startAnimation()));\n        },\n        handleVisibilityChange = () => {\n          if (document.hidden) {\n            stopAnimation();\n            return;\n          }\n          ((animationPosition = track.scrollLeft),\n            measureLoopWidth(),\n            startAnimation());\n        },\n        handlePageHide = (event) => {\n          (stopAnimation(),\n            clearTimeout(resumeTimer),\n            (interactionPaused = !1),\n            (dragging = !1),\n            track.classList.remove(\"pf-is-dragging\"),\n            disconnectObservers(),\n            event.persisted ? (lifecycleSuspended = !0) : destroy());\n        },\n        handlePageShow = (event) => {\n          !event.persisted ||\n            destroyed ||\n            ((lifecycleSuspended = !1),\n            (animationPosition = track.scrollLeft),\n            measureLoopWidth(),\n            connectObservers());\n        };\n      function destroy() {\n        destroyed ||\n          ((destroyed = !0),\n          stopAnimation(),\n          clearTimeout(resumeTimer),\n          disconnectObservers(),\n          track.removeEventListener(\"pointerdown\", handlePointerDown),\n          track.removeEventListener(\"pointermove\", handlePointerMove),\n          track.removeEventListener(\"pointerup\", finishDrag),\n          track.removeEventListener(\"pointercancel\", finishDrag),\n          track.removeEventListener(\"wheel\", handleWheel),\n          customerImages.forEach((image) =>\n            image.removeEventListener(\"load\", measureLoopWidth),\n          ),\n          document.removeEventListener(\n            \"visibilitychange\",\n            handleVisibilityChange,\n          ),\n          window.removeEventListener(\"pagehide\", handlePageHide),\n          window.removeEventListener(\"pageshow\", handlePageShow));\n      }\n      const customerImages = [...track.querySelectorAll(momentImageSelector)];\n      (customerImages.forEach((image) =>\n        image.addEventListener(\"load\", measureLoopWidth, { once: !0 }),\n      ),\n        document.addEventListener(\"visibilitychange\", handleVisibilityChange),\n        window.addEventListener(\"pagehide\", handlePageHide),\n        window.addEventListener(\"pageshow\", handlePageShow),\n        measureLoopWidth(),\n        connectObservers());\n    });\n});\n//# sourceMappingURL=/cdn/shop/t/7/assets/pf-theme.js.map?pf_build=20260910-checkout-7&v=106510649684808034331790934280\n"],
  "mappings": "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",
  "names": []
}
