{
  "version": 3,
  "sources": ["/cdn/shop/t/47/assets/wf-photo-quantity.js?cb=20261015b"],
  "sourcesContent": ["/* =====================================================================\n   wf-photo-quantity.js \u2014 one photo per locket side for \"Photo Quantity\" products\n   ---------------------------------------------------------------------\n   Markup: snippets/photo-quantity-upload.liquid (product tag photo-quantity-upload).\n\n   - The selected \"Photo Quantity\" value (read from that option's own inputs, by\n     the option index Liquid found by NAME) picks the mode. 1 = the theme's single\n     uploader, untouched. 2+ = one slot per photo; the single uploader is parked\n     (.wf-pq-off) and its properties[photo] input disabled.\n   - Each slot opens Pintura in a theme modal with a square crop and the factory\n     die (svg-overlay-<value> tag -> Cloudinary <VALUE>.svg) drawn fit-inside and\n     centered: the same box Cloudinary fl_cutter (w_1.0 / h_1.0, g_center) cuts in\n     production. The square JPEG goes to Cloudinary and its URL to\n     properties[photoN].\n   - Only the active mode's inputs are enabled, so switching variants never sends\n     a stale photo: the form is serialized by theme.AjaxProduct (vendor.js), which\n     skips disabled inputs.\n   - Add to Cart (capture phase, ahead of the theme's handlers) is held until every\n     active slot has a photo. When they all do, the button briefly carries\n     .skip-upload so 1r-theme.js initUploader doesn't open its \"Before you add to\n     cart\" single-photo prompt (it keys off the empty single #upload-preview).\n   ===================================================================== */\n(function () {\n  'use strict';\n\n  var CLOUD = 'dgwldii6i';\n  var PRESET = 'ml_unsigned';\n  var UPLOAD_URL = 'https://api.cloudinary.com/v1_1/' + CLOUD + '/image/upload';\n  var DIE_URL = 'https://res.cloudinary.com/' + CLOUD + '/image/upload/';\n  var SVG_NS = 'http://www.w3.org/2000/svg';\n  var uid = 0;\n\n  /* ---------------------------------------------------------------\n     Die shapes: fetched once per page, sampled for the editor outline\n     --------------------------------------------------------------- */\n  var dieCache = {};\n\n  function toPathD(el) {\n    var tag = el.tagName.toLowerCase();\n    var n = function (a, dflt) { var v = parseFloat(el.getAttribute(a)); return isFinite(v) ? v : (dflt || 0); };\n    if (tag === 'path') return el.getAttribute('d') || '';\n    if (tag === 'polygon') {\n      var raw = (el.getAttribute('points') || '').trim().split(/[\\s,]+/).map(parseFloat);\n      var out = [];\n      for (var i = 0; i + 1 < raw.length; i += 2) out.push((i ? 'L' : 'M') + raw[i] + ',' + raw[i + 1]);\n      return out.length ? out.join('') + 'Z' : '';\n    }\n    if (tag === 'ellipse' || tag === 'circle') {\n      var cx = n('cx'), cy = n('cy');\n      var rx = tag === 'circle' ? n('r') : n('rx'), ry = tag === 'circle' ? n('r') : n('ry');\n      return 'M' + (cx - rx) + ',' + cy + 'A' + rx + ',' + ry + ' 0 1 0 ' + (cx + rx) + ',' + cy +\n        'A' + rx + ',' + ry + ' 0 1 0 ' + (cx - rx) + ',' + cy + 'Z';\n    }\n    if (tag === 'rect') {\n      var x = n('x'), y = n('y'), w = n('width'), h = n('height');\n      return 'M' + x + ',' + y + 'h' + w + 'v' + h + 'h' + (-w) + 'Z';\n    }\n    return '';\n  }\n\n  function parseDie(text) {\n    var doc = new DOMParser().parseFromString(text, 'image/svg+xml');\n    var el = doc.querySelector('path, polygon, ellipse, circle, rect');\n    var d = el ? toPathD(el) : '';\n    if (!d) return null;\n    // measure in the live document (getBBox / getPointAtLength need a rendered element)\n    var svg = document.createElementNS(SVG_NS, 'svg');\n    svg.setAttribute('aria-hidden', 'true');\n    svg.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden;visibility:hidden;pointer-events:none';\n    var p = document.createElementNS(SVG_NS, 'path');\n    p.setAttribute('d', d);\n    svg.appendChild(p);\n    document.body.appendChild(svg);\n    try {\n      var bb = p.getBBox();\n      var len = p.getTotalLength();\n      var pts = [];\n      var N = 240;\n      for (var i = 0; i < N; i++) {\n        var pt = p.getPointAtLength(len * i / N);\n        pts.push([pt.x, pt.y]);\n      }\n      if (!(bb.width > 0 && bb.height > 0)) return null;\n      return { d: d, x: bb.x, y: bb.y, w: bb.width, h: bb.height, pts: pts };\n    } catch (e) {\n      return null;\n    } finally {\n      svg.parentNode.removeChild(svg);\n    }\n  }\n\n  function loadDie(id) {\n    if (!/^wf-[a-z0-9-]+$/.test(id || '')) return Promise.resolve(null);\n    if (!dieCache[id]) {\n      dieCache[id] = fetch(DIE_URL + id.toUpperCase() + '.svg')\n        .then(function (r) { if (!r.ok) throw new Error('die ' + r.status); return r.text(); })\n        .then(parseDie)\n        .then(function (die) { if (!die) throw new Error('die unreadable'); return die; })\n        .catch(function () { delete dieCache[id]; return null; });   // a later open retries\n    }\n    return dieCache[id];\n  }\n\n  // the die fit inside an S x S square at (sx, sy), centered \u2014 fl_cutter's box\n  function fitDie(die, sx, sy, S) {\n    var k = Math.min(S / die.w, S / die.h);\n    return { k: k, ox: sx + (S - die.w * k) / 2, oy: sy + (S - die.h * k) / 2 };\n  }\n\n  // white wash over everything outside the die (the theme's shaped lockets use the same look)\n  function washUrl(die) {\n    if (die.wash) return die.wash;\n    var f = fitDie(die, 0, 0, 1000);\n    var tf = 'translate(' + f.ox + ' ' + f.oy + ') scale(' + f.k + ') translate(' + (-die.x) + ' ' + (-die.y) + ')';\n    var svg = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1000\" height=\"1000\" viewBox=\"0 0 1000 1000\">' +\n      '<defs><mask id=\"m\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1000\" height=\"1000\">' +\n      '<rect width=\"1000\" height=\"1000\" fill=\"#fff\"/><path d=\"' + die.d + '\" transform=\"' + tf + '\" fill=\"#000\"/>' +\n      '</mask></defs><rect width=\"1000\" height=\"1000\" fill=\"#fff\" mask=\"url(#m)\"/></svg>';\n    die.wash = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg);\n    return die.wash;\n  }\n\n  // slot tile: the die with the photo inside it, or the empty die with an image glyph\n  function shapeSvg(die, imgUrl, clipId) {\n    if (!die) {\n      return imgUrl\n        ? '<svg viewBox=\"0 0 64 64\"><image href=\"' + imgUrl + '\" x=\"0\" y=\"0\" width=\"64\" height=\"64\" preserveAspectRatio=\"xMidYMid slice\"/></svg>'\n        : '<svg viewBox=\"0 0 64 64\"><rect x=\"1\" y=\"1\" width=\"62\" height=\"62\" fill=\"#f3ead8\" stroke=\"#d4af6e\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\" vector-effect=\"non-scaling-stroke\"/>' + glyph(32, 32, 26) + '</svg>';\n    }\n    var side = Math.max(die.w, die.h);\n    var pad = side * 0.04;\n    var vb = (die.x - pad) + ' ' + (die.y - pad) + ' ' + (die.w + pad * 2) + ' ' + (die.h + pad * 2);\n    var cx = die.x + die.w / 2, cy = die.y + die.h / 2;\n    if (imgUrl) {\n      var ix = die.x - (side - die.w) / 2, iy = die.y - (side - die.h) / 2;\n      return '<svg viewBox=\"' + vb + '\"><defs><clipPath id=\"' + clipId + '\"><path d=\"' + die.d + '\"/></clipPath></defs>' +\n        '<image href=\"' + imgUrl + '\" x=\"' + ix + '\" y=\"' + iy + '\" width=\"' + side + '\" height=\"' + side +\n        '\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#' + clipId + ')\"/>' +\n        '<path d=\"' + die.d + '\" fill=\"none\" stroke=\"#d6d6d1\" stroke-width=\"1\" vector-effect=\"non-scaling-stroke\"/></svg>';\n    }\n    return '<svg viewBox=\"' + vb + '\"><path d=\"' + die.d + '\" fill=\"#f3ead8\" stroke=\"#d4af6e\" stroke-width=\"1.5\" stroke-dasharray=\"4 3\" vector-effect=\"non-scaling-stroke\"/>' +\n      glyph(cx, cy + die.h * 0.04, Math.min(die.w, die.h) * 0.42) + '</svg>';\n  }\n\n  // the dropzone's image icon (pdp-personalizer.css), centered at (cx, cy), size s\n  function glyph(cx, cy, s) {\n    var k = s / 24;\n    return '<g transform=\"translate(' + (cx - s / 2) + ' ' + (cy - s / 2) + ') scale(' + k + ')\" fill=\"none\" stroke=\"#a87f47\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' +\n      '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></g>';\n  }\n\n  /* ---------------------------------------------------------------\n     One uploader per product form\n     --------------------------------------------------------------- */\n  function init(root) {\n    if (root.getAttribute('data-wf-pq-ready') === '1') return;\n    root.setAttribute('data-wf-pq-ready', '1');\n    var form = root.closest('form');\n    if (!form) return;\n    var optionIndex = root.getAttribute('data-option-index') || '';\n    var dieId = (root.getAttribute('data-die') || '').trim().toLowerCase();\n    var errorEl = root.querySelector('[data-wf-pq-error]');\n    var statusEl = root.querySelector('[data-wf-pq-status]');\n    var dieInput = root.querySelector('[data-wf-pq-die]');\n    var modalEl = form.querySelector('[data-wf-pq-modal]') || document.querySelector('[data-wf-pq-modal]');\n    var myUid = ++uid;\n    var die = null;\n    var mode = 1;\n\n    var slots = [].slice.call(root.querySelectorAll('[data-wf-pq-slot]')).map(function (el) {\n      var n = parseInt(el.getAttribute('data-wf-pq-slot'), 10);\n      var value = el.querySelector('[data-wf-pq-value]');\n      value.value = '';                         // nothing survives a reload: the slots live in memory\n      return {\n        n: n, el: el, value: value,\n        file: el.querySelector('[data-wf-pq-file]'),\n        shape: el.querySelector('[data-wf-pq-shape]'),\n        sub: el.querySelector('[data-wf-pq-sub]'),\n        url: '', thumb: ''\n      };\n    });\n\n    function announce(msg) {\n      if (!statusEl) return;\n      statusEl.textContent = '';\n      setTimeout(function () { statusEl.textContent = msg; }, 60);\n    }\n\n    function activeSlots() { return slots.filter(function (s) { return s.n <= mode; }); }\n    function missingSlots() { return activeSlots().filter(function (s) { return !s.url; }); }\n    function missingMessage() {\n      var missing = missingSlots(), all = activeSlots().length;\n      return missing.length === all\n        ? 'Please add your ' + all + ' photos before adding to cart.'\n        : 'Please add ' + missing.map(function (s) { return 'Photo ' + s.n; }).join(' and ') + ' before adding to cart.';\n    }\n\n    function renderSlot(s) {\n      s.el.classList.toggle('is-filled', !!s.url);\n      s.shape.innerHTML = shapeSvg(die, s.url ? (s.thumb || s.url) : '', 'WfPqClip' + myUid + '-' + s.n);\n      s.sub.textContent = s.url ? 'Added \u00B7 tap to change' : 'Tap to upload';\n      s.file.setAttribute('aria-label', s.url ? 'Photo ' + s.n + ' added. Choose a different photo ' + s.n : 'Upload photo ' + s.n);\n    }\n\n    function syncInputs() {\n      var on = mode >= 2;\n      slots.forEach(function (s) {\n        var active = on && s.n <= mode;\n        s.el.hidden = !active;\n        s.file.disabled = !active;\n        s.value.value = s.url;\n        s.value.disabled = !active || !s.url;\n      });\n      if (dieInput) dieInput.disabled = !on || !dieId;\n      var complete = on && activeSlots().every(function (s) { return !!s.url; });\n      root.setAttribute('data-wf-pq-complete', complete ? '1' : '0');\n    }\n\n    function singleUpload() {\n      var picker = form.querySelector('#upload-file');\n      return picker ? picker.closest('.upload') : null;\n    }\n\n    function readQty() {\n      if (!optionIndex) return 1;\n      var els = form.querySelectorAll('input[data-index=\"' + optionIndex + '\"], select[data-index=\"' + optionIndex + '\"]');\n      for (var i = 0; i < els.length; i++) {\n        var el = els[i];\n        if (el.tagName === 'SELECT' || ((el.type === 'radio' || el.type === 'checkbox') && el.checked)) {\n          var q = parseInt(el.value, 10);\n          return q > 0 ? q : 1;\n        }\n      }\n      return 1;\n    }\n\n    function clearError() {\n      if (errorEl) { errorEl.hidden = true; errorEl.textContent = ''; }\n      slots.forEach(function (s) { s.el.classList.remove('is-missing'); });\n    }\n\n    function setMode() {\n      var q = readQty();\n      var next = q >= 2 ? Math.min(q, slots.length) : 1;\n      var changed = next !== mode;\n      mode = next;\n      var on = mode >= 2;\n      root.hidden = !on;\n      root.classList.toggle('is-on', on);\n      var up = singleUpload();\n      if (up) up.classList.toggle('wf-pq-off', on);\n      var single = form.querySelector('#upload-unedited-property');   // properties[photo]\n      if (single) single.disabled = on;\n      if (changed) clearError();\n      syncInputs();\n      if (on) loadDie(dieId).then(function (d) { if (d && d !== die) { die = d; slots.forEach(renderSlot); } });\n    }\n\n    /* ---- the editor modal ---- */\n    var modal = null, editor = null, editingSlot = null, xhr = null, uploading = false;\n    var editorBox = modalEl && modalEl.querySelector('[data-wf-pq-editor]');\n    var saveBtn = modalEl && modalEl.querySelector('[data-wf-pq-save]');\n    var modalTitle = modalEl && modalEl.querySelector('[data-wf-pq-modal-title]');\n    var modalError = modalEl && modalEl.querySelector('[data-wf-pq-modal-error]');\n\n    function ensureModal() {\n      if (modal || !modalEl || !window.theme || !theme.Modals) return modal;\n      modal = new theme.Modals(modalEl.id, modalEl.id, { solid: true });\n      // X, Escape or a click outside: drop the half-done edit\n      jQuery('body').on('modalClose.' + modalEl.id, function () {\n        if (xhr && uploading) { try { xhr.abort(); } catch (e) {} }\n        teardown();\n      });\n      return modal;\n    }\n\n    function teardown() {\n      uploading = false;\n      xhr = null;\n      if (editor && editor.destroy) { try { editor.destroy(); } catch (e) {} }\n      editor = null;\n      editingSlot = null;\n      if (editorBox) editorBox.innerHTML = '';\n      resetSave();\n    }\n\n    function modalErr(msg) {\n      if (!modalError) return;\n      modalError.textContent = msg || '';\n      modalError.hidden = !msg;\n    }\n\n    function resetSave() {\n      if (!saveBtn) return;\n      saveBtn.textContent = 'Save Photo';\n      saveBtn.disabled = !editor;\n    }\n\n    function guideShapes(shapes, state) {\n      var vis = state.utilVisibility, r = state.selectionRect;\n      if (!vis || vis.crop <= 0 || !r) return shapes;\n      var add = [];\n      if (die) {\n        var f = fitDie(die, r.x, r.y, Math.min(r.width, r.height));\n        var pts = die.pts.map(function (p) { return { x: f.ox + (p[0] - die.x) * f.k, y: f.oy + (p[1] - die.y) * f.k }; });\n        add.push({ x: r.x, y: r.y, width: r.width, height: r.height, opacity: vis.crop * 0.6,\n          backgroundSize: 'contain', backgroundImage: washUrl(die) });\n        add.push({ points: pts, pathClose: true, opacity: vis.crop, strokeWidth: 4, strokeColor: [0, 0, 0, 0.35] });\n        add.push({ points: pts, pathClose: true, opacity: vis.crop, strokeWidth: 2, strokeColor: [1, 1, 1] });\n      }\n      return Object.assign({}, shapes, { interfaceShapes: add.concat(shapes.interfaceShapes || []) });\n    }\n\n    function openEditor(s, file) {\n      if (!ensureModal() || !editorBox) return;\n      if (typeof pintura === 'undefined' || !pintura.appendDefaultEditor) {\n        showError('The photo editor is still loading. Please try again in a moment.');\n        return;\n      }\n      teardown();\n      editingSlot = s;\n      if (modalTitle) modalTitle.textContent = 'Edit Photo ' + s.n;\n      modalErr('');\n      modal.open();\n      editor = pintura.appendDefaultEditor(editorBox, {\n        src: file,\n        imageCropAspectRatio: 1,\n        cropEnableButtonFlipHorizontal: false,\n        cropEnableButtonFlipVertical: false,\n        imageCropLimitToImage: true,\n        willRenderCanvas: guideShapes,\n        imageWriter: pintura.createDefaultImageWriter({\n          mimeType: 'image/jpeg',\n          quality: 0.85,\n          targetSize: { width: 1000, height: 1000, fit: 'contain', upscale: false }\n        })\n      });\n      resetSave();\n      if (saveBtn) saveBtn.disabled = true;\n      if (editor && editor.on) {\n        editor.on('load', function () { if (saveBtn && !uploading) saveBtn.disabled = false; });\n        editor.on('loaderror', function () {\n          modalErr(\"We couldn't open that photo. Please choose a JPG or PNG.\");\n          if (saveBtn) saveBtn.disabled = true;\n        });\n      }\n      // a die that was still on its way: the outline appears on the next frame\n      loadDie(dieId).then(function (d) { if (d) die = d; });\n    }\n\n    function upload(blob, onProgress) {\n      return new Promise(function (resolve, reject) {\n        var fd = new FormData();\n        fd.append('file', blob, 'photo.jpg');\n        fd.append('upload_preset', PRESET);\n        xhr = new XMLHttpRequest();\n        var req = xhr;\n        req.open('POST', UPLOAD_URL, true);\n        req.timeout = 60000;\n        if (req.upload) {\n          req.upload.onprogress = function (e) { if (e.lengthComputable) onProgress(Math.round(e.loaded / e.total * 100)); };\n        }\n        req.onload = function () {\n          var data = null;\n          try { data = JSON.parse(req.responseText); } catch (e) {}\n          var url = data && (data.secure_url || (data.url || '').replace(/^http:/, 'https:'));\n          if (req.status >= 200 && req.status < 300 && url) resolve(url);\n          else reject(new Error('upload ' + req.status));\n        };\n        req.onerror = function () { reject(new Error('network')); };\n        req.ontimeout = function () { reject(new Error('timeout')); };\n        req.onabort = function () { reject(new Error('aborted')); };\n        req.send(fd);\n      });\n    }\n\n    if (saveBtn) {\n      saveBtn.addEventListener('click', function () {\n        var s = editingSlot, ed = editor;\n        if (!s || !ed || uploading) return;\n        uploading = true;\n        modalErr('');\n        saveBtn.disabled = true;\n        saveBtn.textContent = 'Saving\u2026';\n        var blob = null;\n        ed.processImage().then(function (res) {\n          if (editingSlot !== s) throw new Error('aborted');   // closed while the crop was rendering\n          blob = res && res.dest;\n          if (!blob) throw new Error('no image');\n          saveBtn.textContent = 'Uploading\u2026';\n          return upload(blob, function (pct) { saveBtn.textContent = 'Uploading\u2026 ' + pct + '%'; });\n        }).then(function (url) {\n          if (editingSlot !== s) return;        // closed mid-upload\n          if (s.thumb) { try { URL.revokeObjectURL(s.thumb); } catch (e) {} }\n          s.url = url;\n          s.thumb = URL.createObjectURL(blob);\n          uploading = false;\n          renderSlot(s);\n          syncInputs();\n          s.el.classList.remove('is-missing');\n          if (!missingSlots().length) clearError();\n          else if (errorEl && !errorEl.hidden) showError(missingMessage());   // what is still left\n          modal.close();                        // focus goes back to the slot\n          announce('Photo ' + s.n + ' added.');\n        }).catch(function (err) {\n          uploading = false;\n          if (editingSlot !== s) return;\n          modalErr(err && err.message === 'timeout'\n            ? 'The upload timed out. Check your connection and try again.'\n            : 'Upload failed. Please try again, or email your photo to support@wearfelicity.com.');\n          resetSave();\n        });\n      });\n    }\n\n    /* ---- slot file pickers ---- */\n    form.addEventListener('change', function (e) {\n      var t = e.target;\n      if (t && t.hasAttribute && t.hasAttribute('data-wf-pq-file')) {\n        var s = slots.filter(function (x) { return x.file === t; })[0];\n        var file = t.files && t.files[0];\n        t.value = '';                            // picking the same file again re-opens the editor\n        if (s && file && mode >= 2) openEditor(s, file);\n        return;\n      }\n      if (t && t.getAttribute && t.getAttribute('data-index') === optionIndex) setMode();\n    });\n\n    /* ---- Add to Cart gate ---- */\n    function showError(msg) {\n      if (!errorEl) return;\n      errorEl.textContent = '';\n      errorEl.hidden = false;\n      setTimeout(function () { errorEl.textContent = msg; }, 30);   // re-announced on every click\n    }\n\n    document.addEventListener('click', function (e) {\n      var btn = e.target && e.target.closest && e.target.closest('.add-to-cart-btn, button.add-to-cart');\n      if (!btn || !form.contains(btn) || mode < 2) return;\n      var missing = missingSlots();\n      if (missing.length) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        slots.forEach(function (s) { s.el.classList.toggle('is-missing', missing.indexOf(s) > -1); });\n        showError(missingMessage());\n        missing[0].file.focus({ preventScroll: true });\n        root.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        return;\n      }\n      syncInputs();\n      var marked = [].filter.call(form.querySelectorAll('button.add-to-cart'), function (b) {\n        return !b.classList.contains('skip-upload');\n      });\n      marked.forEach(function (b) { b.classList.add('skip-upload'); });\n      setTimeout(function () { marked.forEach(function (b) { b.classList.remove('skip-upload'); }); }, 0);\n    }, true);\n\n    setMode();\n    slots.forEach(renderSlot);\n    if (dieId) loadDie(dieId).then(function (d) { if (d) { die = d; slots.forEach(renderSlot); } });\n  }\n\n  function boot() {\n    [].forEach.call(document.querySelectorAll('[data-wf-pq]'), init);\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n})();\n"],
  "mappings": "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",
  "names": []
}
