{
  "version": 3,
  "sources": ["/cdn/shop/t/31/assets/craftdiy-customizer-variant-router-v1.js?craftdiy_release=v44-final.3"],
  "sourcesContent": ["(() => {\n  'use strict';\n\n  const RELEASE = 'v44-final.3';\n  const VERSION = '1.4.0-v44-final3-router-sync';\n  const BIRTHSTONE_SLOT_OVERRIDES = Object.freeze({\n    'birthstone-engraved-rings/6': 2,\n    'birthstone-engraved-rings/7': 2,\n    'birthstone-engraved-rings/8': 2,\n  });\n  const PAGE_NONCE = `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n  const jsonPromises = new Map();\n\n  function fetchJson(url) {\n    if (!jsonPromises.has(url)) {\n      jsonPromises.set(url, fetch(url, {\n        credentials: 'same-origin',\n        cache: 'no-store',\n      }).then(async (response) => {\n        if (!response.ok) throw new Error(`Configuration request failed (${response.status}): ${url}`);\n        return response.json();\n      }));\n    }\n    return jsonPromises.get(url);\n  }\n\n  function siblingAssetUrl(referenceUrl, assetName) {\n    const url = new URL(referenceUrl, location.href);\n    const parts = url.pathname.split('/');\n    parts[parts.length - 1] = encodeURIComponent(assetName).replaceAll('%2F', '/');\n    url.pathname = parts.join('/');\n    // Reuse the Liquid asset_url version token as a cache buster for sibling\n    // manifests and images. Shopify's CDN accepts the token on any theme asset;\n    // stripping it here can serve a stale manifest immediately after a theme push.\n    url.hash = '';\n    return url.href;\n  }\n\n  function currentManifestUrl(referenceUrl, assetName) {\n    const url = new URL(siblingAssetUrl(referenceUrl, assetName));\n    /* The previous router copied product-map's `v` value onto every Manifest.\n     * Replacing only a Manifest therefore kept requesting the old cached URL.\n     * A Manifest is small and loaded once per product page, so request the\n     * current Asset explicitly instead of reusing another file's version. */\n    url.searchParams.delete('v');\n    url.searchParams.set('craftdiy_manifest', `${VERSION}-${PAGE_NONCE}`);\n    return url.href;\n  }\n\n  function parseVariants(root) {\n    const source = root.querySelector('[data-craftdiy-variants]')?.textContent || '[]';\n    const variants = JSON.parse(source);\n    if (!Array.isArray(variants) || !variants.length) throw new Error('No Shopify variants were supplied to the customizer.');\n    return variants.map((variant) => ({\n      id: String(variant.id || ''),\n      sku: String(variant.sku || '').trim(),\n      options: Array.isArray(variant.options) ? variant.options.map(String) : [],\n      available: Boolean(variant.available),\n    }));\n  }\n\n  function status(root, message, state = 'loading') {\n    root.dataset.routerState = state;\n    const node = root.querySelector('[data-craftdiy-router-status]');\n    if (!node) return;\n    const publicMessage = state === 'error'\n      ? 'Personalization is temporarily unavailable. Please refresh the page and try again.'\n      : '';\n    node.hidden = !publicMessage;\n    node.textContent = publicMessage;\n    node.dataset.state = state;\n    if (state === 'error' && message) console.error('[CRAFTDIY SKU router]', message);\n  }\n\n  function isProductForm(form) {\n    if (!(form instanceof HTMLFormElement)) return false;\n    if (form.closest('.shopify-payment-button')) return false;\n    return Boolean(form.querySelector('[name=\"id\"]'));\n  }\n\n  function findProductForm(root) {\n    const closest = root.closest('form');\n    if (isProductForm(closest)) return closest;\n\n    const scope = root.closest(\n      'product-info,[data-section-type=\"main-product\"],section[id*=\"MainProduct\"],.product,main',\n    ) || document;\n    const selectors = [\n      'form[action*=\"/cart/add\"]',\n      'product-form form',\n      'form[data-type=\"add-to-cart-form\"]',\n      'form[id*=\"product-form\"]',\n    ];\n    for (const selector of selectors) {\n      const match = [...scope.querySelectorAll(selector)].find(isProductForm);\n      if (match) return match;\n    }\n    return [...document.querySelectorAll('form')].find(isProductForm) || null;\n  }\n\n  async function boot(root) {\n    if (root.dataset.routerBound === 'true') return;\n    root.dataset.routerBound = 'true';\n\n    if (root.dataset.craftdiyRelease !== RELEASE) {\n      status(root, `Customizer files are from mixed releases. Expected ${RELEASE}; replace the router snippet last.`, 'error');\n      return;\n    }\n\n    const form = findProductForm(root);\n    const variantInput = form?.querySelector('input[name=\"id\"]');\n    const mount = root.querySelector('[data-craftdiy-customizer-mount]');\n    if (!form || !variantInput || !mount) {\n      status(root, 'Customizer could not find the Shopify product form.', 'error');\n      return;\n    }\n\n    let variants;\n    try { variants = parseVariants(root); }\n    catch (error) {\n      status(root, error.message, 'error');\n      console.error('[CRAFTDIY SKU router]', error);\n      return;\n    }\n\n    const mapUrl = root.dataset.productMapUrl;\n    const handle = root.dataset.productHandle;\n    let productMap;\n    try {\n      const completeMap = await fetchJson(mapUrl);\n      productMap = completeMap?.products?.[handle];\n      if (!productMap) throw new Error(`No approved product map exists for ${handle}.`);\n    } catch (error) {\n      status(root, error.message, 'error');\n      console.error('[CRAFTDIY SKU router]', error);\n      return;\n    }\n\n    let switchToken = 0;\n    let currentVariantId = '';\n    let queued = false;\n\n    async function mountVariant() {\n      queued = false;\n      const token = ++switchToken;\n      const variantId = String(variantInput.value || root.dataset.initialVariantId || '');\n      const variant = variants.find((candidate) => candidate.id === variantId);\n      if (!variant) throw new Error(`Unknown Shopify Variant ID: ${variantId || '(blank)'}.`);\n      if (!variant.sku) throw new Error(`Shopify Variant ${variant.id} has no SKU.`);\n\n      const route = productMap.variantsBySku?.[variant.sku];\n      if (!route) throw new Error(`SKU ${variant.sku} is not present in the approved 399-SKU map.`);\n      if (!route.configKey || !route.baseImageAssetName) throw new Error(`SKU ${variant.sku} has an incomplete customizer route.`);\n\n      const category = String(route.configKey).split('/')[0];\n      const manifestName = `craftdiy-customizer-manifest-${category}.json`;\n      const manifestUrl = currentManifestUrl(mapUrl, manifestName);\n      const baseImageUrl = siblingAssetUrl(mapUrl, route.baseImageAssetName);\n\n      status(root, `Loading customization for ${variant.sku}\u2026`, 'loading');\n      const manifest = await fetchJson(manifestUrl);\n      const sourceConfig = manifest?.items?.[route.configKey];\n      if (!sourceConfig) throw new Error(`Manifest configuration is missing: ${route.configKey}.`);\n      if (token !== switchToken) return;\n\n      const config = structuredClone(sourceConfig);\n      const forcedBirthstoneSlots = BIRTHSTONE_SLOT_OVERRIDES[route.configKey];\n      if (Number.isInteger(forcedBirthstoneSlots)) {\n        config.birthstoneSlots = forcedBirthstoneSlots;\n        if (config.birthstonePreview) config.birthstonePreview.slotCount = forcedBirthstoneSlots;\n        if (config.pairing === 'text_birthstone_by_index' && Array.isArray(config.textZones)) {\n          config.textZones = config.textZones.slice(0, forcedBirthstoneSlots);\n        }\n      }\n\n      const previous = mount.querySelector('craftdiy-customizer');\n      const previousState = previous?.exportState?.() || null;\n      const customizer = document.createElement('craftdiy-customizer');\n      customizer.dataset.configKey = route.configKey;\n      customizer.dataset.manifestUrl = manifestUrl;\n      customizer.dataset.baseImageUrl = baseImageUrl;\n      customizer.dataset.productHandle = handle;\n      customizer.dataset.productId = root.dataset.productId || '';\n      customizer.dataset.productTitle = root.dataset.productTitle || '';\n      customizer.dataset.variantId = variant.id;\n      customizer.dataset.sku = variant.sku;\n      customizer.dataset.customizerType = productMap.customizerType || '';\n      customizer.dataset.uploadBase = root.dataset.uploadBase || '/apps/craftdiy-upload';\n      customizer.dataset.title = 'Make it yours';\n      customizer.dataset.subtitle = 'Personalize this exact option and preview every detail.';\n      const inlineConfig = document.createElement('script');\n      inlineConfig.type = 'application/json';\n      inlineConfig.dataset.craftdiyConfig = '';\n      inlineConfig.textContent = JSON.stringify(config);\n      customizer.append(inlineConfig);\n\n      mount.replaceChildren(customizer);\n      await customElements.whenDefined('craftdiy-customizer');\n      await customizer.readyPromise;\n      if (token !== switchToken) return;\n      if (customizer.dataset.loadedRelease !== RELEASE) {\n        throw new Error(`Customizer engine release mismatch. Expected ${RELEASE}; refresh after replacing all files.`);\n      }\n      if (previousState) customizer.importState(previousState);\n\n      currentVariantId = variant.id;\n      root.dataset.variantId = variant.id;\n      root.dataset.sku = variant.sku;\n      root.dataset.configKey = route.configKey;\n      root.dataset.customizerType = productMap.customizerType || '';\n      root.dataset.baseImageUrl = baseImageUrl;\n      root.dataset.manifestUrl = manifestUrl;\n      root.dataset.routerVersion = VERSION;\n      root.dataset.craftdiyLoadedRelease = RELEASE;\n      status(root, `Customizer ready for ${variant.sku}.`, 'ready');\n\n      root.dispatchEvent(new CustomEvent('craftdiy:router-configured', {\n        bubbles: true,\n        detail: {\n          root,\n          form,\n          customizer,\n          productMap,\n          route,\n          variant,\n          manifestUrl,\n          baseImageUrl,\n        },\n      }));\n    }\n\n    function queueMount(force = false) {\n      const next = String(variantInput.value || root.dataset.initialVariantId || '');\n      if (!force && next === currentVariantId) return;\n      if (queued) return;\n      queued = true;\n      queueMicrotask(() => mountVariant().catch((error) => {\n        queued = false;\n        status(root, error.message, 'error');\n        form.dataset.craftProductionReady = 'false';\n        console.error('[CRAFTDIY SKU router]', error);\n      }));\n    }\n\n    variantInput.addEventListener('change', () => queueMount());\n    form.querySelectorAll('[data-option-index], select[name^=\"options\"], input[name^=\"options\"]').forEach((control) => {\n      control.addEventListener('change', () => setTimeout(() => queueMount(), 0));\n    });\n    ['variant:change', 'variant:changed', 'variant:select', 'product:variant-change'].forEach((name) => {\n      document.addEventListener(name, () => setTimeout(() => queueMount(), 0));\n    });\n    new MutationObserver(() => queueMount()).observe(variantInput, {\n      attributes: true,\n      attributeFilter: ['value'],\n    });\n\n    queueMount(true);\n  }\n\n  function start() {\n    document.querySelectorAll('[data-craftdiy-sku-router]').forEach((root) => {\n      boot(root).catch((error) => {\n        status(root, error.message || String(error), 'error');\n        console.error('[CRAFTDIY SKU router]', error);\n      });\n    });\n  }\n\n  if (globalThis.__CRAFTDIY_TEST_HOOKS__) {\n    globalThis.__CRAFTDIY_TEST_HOOKS__.router = {\n      currentManifestUrl,\n      siblingAssetUrl,\n      BIRTHSTONE_SLOT_OVERRIDES,\n      RELEASE,\n      VERSION,\n    };\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true });\n  else start();\n})();\n"],
  "mappings": "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",
  "names": []
}
