{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/pf-cart-media.js?psv=9fa45b70efe2717f"],
  "sourcesContent": ["/* Read-only cart media. Purchase state stays in the existing cart controllers. */\n(() => {\n  'use strict';\n  const requests = new WeakMap();\n  const escape = value => String(value ?? '').replace(/[&<>\"']/g, c => ({ '&':'&amp;', '<':'&lt;', '>':'&gt;', '\"':'&quot;', \"'\":'&#39;' }[c]));\n  const safeUrl = value => {\n    if (typeof value !== 'string' || !/^(https:\\/\\/|\\/\\/)/.test(value.trim())) return '';\n    try { return new URL(value, location.origin).protocol === 'https:' ? value.trim() : ''; } catch { return ''; }\n  };\n  const signature = items => {\n    if (!Array.isArray(items)) return null;\n    const keys = new Set();\n    const rows = [];\n    for (const item of items) {\n      if (typeof item?.key !== 'string' || !item.key || keys.has(item.key) || !Number.isSafeInteger(item.quantity) || item.quantity < 1) return null;\n      keys.add(item.key); rows.push([item.key, item.quantity]);\n    }\n    return JSON.stringify(rows.sort((a, b) => a[0].localeCompare(b[0])));\n  };\n  const initial = item => {\n    const custom = safeUrl(item.properties?.['Custom artwork']);\n    const original = safeUrl(typeof item.image === 'string' ? item.image : item.featured_image?.url);\n    const oldHanger = /round-rods|hanging[ -]?rods|hanger|display-options/i.test(original + ' ' + (item.featured_image?.alt || ''));\n    const source = custom || (!oldHanger ? original : '');\n    return `<span class=\"cd-drawer__image\" data-pf-cart-media-slot=\"${escape(item.key)}\" data-pf-cart-media-quantity=\"${escape(item.quantity)}\"><span class=\"pf-cart-media\" data-pf-cart-media data-pf-cart-media-kind=\"${custom ? 'custom' : 'original'}\" data-pf-cart-frame=\"none\">${source ? `<img class=\"pf-cart-media__image\" src=\"${escape(source)}\" alt=\"${escape(item.product_title)}\" loading=\"lazy\" decoding=\"async\">` : ''}</span></span>`;\n  };\n  const parse = (html, cart) => {\n    const doc = new DOMParser().parseFromString(html, 'text/html');\n    const roots = doc.querySelectorAll('[data-pf-cart-media-response]');\n    if (roots.length !== 1 || roots[0].dataset.pfCartCurrency !== cart.currency) return null;\n    const root = roots[0], state = root.querySelectorAll('[data-pf-cart-media-state]');\n    if (state.length !== 1 || signature(JSON.parse(state[0].textContent)) !== signature(cart.items)) return null;\n    const visible = cart.items.filter(item => !item.properties?._framing_component);\n    const templates = root.querySelectorAll('template[data-pf-cart-media-line]');\n    if (templates.length !== visible.length) return null;\n    const media = new Map();\n    for (const template of templates) {\n      const item = visible.find(row => row.key === template.dataset.pfCartMediaLine);\n      if (!item || media.has(item.key) || Number(template.dataset.pfCartMediaQuantity) !== item.quantity) return null;\n      const fragment = template.content;\n      if (fragment.children.length !== 1) return null;\n      const node = fragment.firstElementChild;\n      if (!node.matches('span.pf-cart-media[data-pf-cart-media]')) return null;\n      if (!['none', 'black'].includes(node.dataset.pfCartFrame) || !['original', 'custom', 'verified-artwork'].includes(node.dataset.pfCartMediaKind)) return null;\n      if (node.children.length > 1 || [...node.querySelectorAll('*')].some(child => child.tagName !== 'IMG')) return null;\n      for (const child of [node, ...node.querySelectorAll('*')]) {\n        if ([...child.attributes].some(attribute => !['class','src','alt','loading','decoding','data-pf-cart-media','data-pf-cart-media-kind','data-pf-cart-frame'].includes(attribute.name))) return null;\n      }\n      const img = node.querySelector('img');\n      if (img && !safeUrl(img.getAttribute('src'))) return null;\n      // A saved customer preview must never be replaced by the catalogue demo.\n      const custom = safeUrl(item.properties?.['Custom artwork']);\n      if (custom && (!img || img.getAttribute('src') !== custom || node.dataset.pfCartMediaKind !== 'custom')) return null;\n      media.set(item.key, node);\n    }\n    return media;\n  };\n  const hydrate = async (host, cart) => {\n    const previous = requests.get(host);\n    previous?.controller.abort();\n    const request = { controller: new AbortController() };\n    requests.set(host, request);\n    const expected = signature(cart?.items);\n    if (expected === null || !cart.items.length) return false;\n    try {\n      const url = new URL(window.PFMarketCommerce.path('cart'), location.origin);\n      if (url.origin !== location.origin) return false;\n      url.searchParams.set('section_id', 'pf-cart-media');\n      const response = await fetch(url.href, { method:'GET', credentials:'same-origin', cache:'no-store', headers:{ Accept:'text/html' }, signal:request.controller.signal });\n      if (!response.ok || (response.url && new URL(response.url).origin !== location.origin)) return false;\n      const media = parse(await response.text(), cart);\n      if (!media || requests.get(host) !== request || !host.isConnected) return false;\n      const slots = [...host.querySelectorAll('[data-pf-cart-media-slot]')];\n      const slotKeys = new Set(slots.map(slot => slot.dataset.pfCartMediaSlot));\n      if (slots.length !== media.size || slotKeys.size !== media.size || [...media.keys()].some(key => !slotKeys.has(key))\n        || slots.some(slot => !media.has(slot.dataset.pfCartMediaSlot)\n        || Number(slot.dataset.pfCartMediaQuantity) !== cart.items.find(item => item.key === slot.dataset.pfCartMediaSlot)?.quantity)) return false;\n      for (const slot of slots) slot.replaceChildren(document.importNode(media.get(slot.dataset.pfCartMediaSlot), true));\n      return true;\n    } catch { return false; }\n  };\n  window.PFCartMedia = Object.freeze({ initial, hydrate });\n})();\n"],
  "mappings": "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",
  "names": []
}
