{
  "version": 3,
  "sources": ["/cdn/shop/t/20/assets/cw-enquiry-context.js?cw=20260920-retention-05"],
  "sourcesContent": ["(function (root) {\n  'use strict';\n  const TTL = 30 * 60 * 1000;\n  const KEY = 'cw-attribution-v1';\n  const campaignKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];\n  const requestTopics = new Set([\n    'services', 'gift', 'project', 'gift-selection', 'projects-spaces', 'private-viewing',\n    'craft', 'about', 'professional-projects', 'bloom-bond', 'symbolic-creatures',\n    'landscape-presence', 'the-gilded-court', 'the-origin', 'story-co-creation',\n    'cigar-ashtrays', 'blue-and-white', 'porcelain-wall-art'\n  ]);\n  const own = (o, k) => Object.prototype.hasOwnProperty.call(o, k);\n  function selection(search, catalogue) {\n    const params = new URLSearchParams(search);\n    if (params.getAll('sku').length > 1 || params.getAll('shortlist').length > 1) return [];\n    const raw = [params.get('sku') || '', params.get('shortlist') || ''].filter(Boolean).join(',');\n    if (raw.length > 256) return [];\n    return [...new Set(raw.split(',').map(x => x.trim().toUpperCase()).filter(x => /^CD-\\d{3}$/.test(x) && own(catalogue, x)))].slice(0, 12);\n  }\n  function touch(href, referrer) {\n    const url = new URL(href);\n    const value = { path: url.pathname.slice(0, 200) };\n    for (const key of campaignKeys) {\n      const values = url.searchParams.getAll(key);\n      if (values.length === 1 && /^[a-zA-Z0-9_. -]{1,80}$/.test(values[0])) value[key] = values[0];\n    }\n    try { const ref = new URL(referrer); if (/^https?:$/.test(ref.protocol) && ref.origin !== url.origin) value.referrer_host = ref.hostname.slice(0, 160); } catch (_) {}\n    return value;\n  }\n  function selectionNotice(search, catalogue) {\n    const p = new URLSearchParams(search);\n    const raw = [p.get('sku') || '', p.get('shortlist') || ''].filter(Boolean).join(',');\n    if (!raw) return false;\n    const tokens = [...new Set(raw.split(',').map(x => x.trim().toUpperCase()))];\n    return p.getAll('sku').length > 1 || p.getAll('shortlist').length > 1 || raw.length > 256 || tokens.length > 12 || tokens.some(x => !/^CD-\\d{3}$/.test(x) || !own(catalogue, x));\n  }\n  function attribution(previous, current, allowed, now) {\n    if (!allowed) return null;\n    const valid = previous && Number.isFinite(previous.expires) && previous.expires > now && previous.expires <= now + TTL && previous.first;\n    return { first: valid ? previous.first : current, last: current, expires: now + TTL };\n  }\n  const api = { selection, selectionNotice, touch, attribution, TTL, requestTopics: [...requestTopics] };\n  if (typeof module !== 'undefined' && module.exports) module.exports = api;\n  if (!root.document) return;\n  const doc = root.document;\n  let catalogue = {};\n  try { catalogue = JSON.parse(doc.querySelector('[data-cw-enquiry-catalogue]')?.textContent || '{}'); } catch (_) {}\n  const forms = [...doc.querySelectorAll('form.cw-contact-form, form.cw-product-form')];\n  function field(form, label, value) {\n    const name = `contact[${label}]`;\n    let input = [...form.elements].find(el => el.name === name);\n    if (!input) { input = doc.createElement('input'); input.type = 'hidden'; input.name = name; form.append(input); }\n    input.value = value;\n  }\n  forms.forEach(form => {\n    if (form.dataset.cwContextReady) return;\n    form.dataset.cwContextReady = 'true';\n    const reference = [...form.elements].find(el => el.name === 'contact[Reference]')?.value;\n    const fixed = reference && own(catalogue, reference);\n    let selected = fixed ? [reference] : selection(root.location.search, catalogue);\n    if (!fixed && selectionNotice(root.location.search, catalogue)) {\n      const notice = doc.createElement('p'); notice.setAttribute('role', 'status');\n      notice.textContent = 'Some work references could not be loaded. Please include them in your message.';\n      form.prepend(notice);\n    }\n    const box = doc.createElement('div'); box.className = 'cw-enquiry-selection'; box.setAttribute('aria-label', 'Selected works');\n    const title = doc.createElement('p'); title.textContent = 'Your selected works';\n    const list = doc.createElement('ul');\n    const status = doc.createElement('p'); status.setAttribute('role', 'status'); status.className = 'cw-visually-hidden';\n    box.append(title, list, status); form.prepend(box);\n    function render() {\n      box.hidden = !selected.length; list.replaceChildren();\n      for (const sku of selected) {\n        const li = doc.createElement('li'); const label = doc.createElement('span');\n        label.textContent = `${sku} \u2014 ${catalogue[sku].title}`; li.append(label);\n        if (!fixed) {\n          const remove = doc.createElement('button'); remove.type = 'button'; remove.textContent = 'Remove';\n          remove.setAttribute('aria-label', `Remove ${sku}`);\n          remove.addEventListener('click', () => {\n            selected = selected.filter(s => s !== sku); render();\n            const url = new URL(root.location.href); url.searchParams.delete('sku'); url.searchParams.delete('shortlist');\n            if (selected.length) url.searchParams.set('shortlist', selected.join(','));\n            root.history.replaceState(null, '', url);\n            status.textContent = `${sku} removed.`;\n            (list.querySelector('button') || form.querySelector('input:not([type=\"hidden\"])'))?.focus();\n          }); li.append(remove);\n        }\n        list.append(li);\n      }\n      field(form, 'Selected works', selected.map(s => `${s} | ${catalogue[s].title} | ${catalogue[s].url || '/collections/works'}`).join('\\n'));\n    }\n    render();\n    field(form, 'Enquiry page', root.location.pathname);\n    field(form, 'Request ID', root.crypto?.randomUUID?.() || `cw-${Date.now()}-${Math.random().toString(36).slice(2,10)}`);\n    const topic = new URLSearchParams(root.location.search).get('topic');\n    if (requestTopics.has(topic)) field(form, 'Request topic', topic);\n    // Native Shopify validation, submission and success handling remain in control.\n    form.addEventListener('submit', () => { render(); syncAttribution(); });\n  });\n  function allowed() {\n    try { const p = root.Shopify?.customerPrivacy; return p?.analyticsProcessingAllowed() === true && p?.marketingAllowed() === true; } catch (_) { return false; }\n  }\n  function syncAttribution() {\n    let prior = null;\n    const permit = allowed();\n    try { if (permit) prior = JSON.parse(root.sessionStorage.getItem(KEY) || 'null'); else root.sessionStorage.removeItem(KEY); } catch (_) {}\n    const next = attribution(prior, touch(root.location.href, doc.referrer), permit, Date.now());\n    try { if (next) root.sessionStorage.setItem(KEY, JSON.stringify(next)); } catch (_) {}\n    forms.forEach(form => {\n      field(form, 'Attribution status', permit ? 'allowed' : 'unavailable or not allowed');\n      field(form, 'First touch', next ? JSON.stringify(next.first) : '');\n      field(form, 'Last touch', next ? JSON.stringify(next.last) : '');\n    });\n  }\n  syncAttribution();\n  doc.addEventListener('visitorConsentCollected', syncAttribution);\n  if (!root.Shopify?.customerPrivacy && typeof root.Shopify?.loadFeatures === 'function') {\n    root.Shopify.loadFeatures([{ name: 'consent-tracking-api', version: '0.1' }], error => { if (!error) syncAttribution(); });\n  }\n})(typeof window !== 'undefined' ? window : globalThis);\n"],
  "mappings": "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",
  "names": ["catalogue", "allowed"]
}
