{
  "version": 3,
  "sources": ["/cdn/shop/t/15/assets/customily-photo-upload.js?t=1789575126044"],
  "sourcesContent": ["/*\n  Customily \u4E0A\u4F20\u7167\u7247\u533A\u589E\u5F3A\uFF1A\u53EA\u5728\u4EA7\u54C1\u6709\u300C\u4E0A\u4F20\u7167\u7247\u300D\u9009\u9879\u65F6\u751F\u6548\u3002\n  - \u7ED9\u5B9A\u5236\u533A\u5916\u6846\u6253 has-photo-upload \u7C7B\uFF0C\u6837\u5F0F\u89C1 customily-photo-upload.css\n  - \u5728\u6BCF\u4E2A\u4E0A\u4F20\u9009\u9879\u7684\u6807\u9898\u65C1\u63D2\u5165\u300CView Photo Guide\u300D\uFF0C\u70B9\u5F00\u5171\u7528\u7684\u7167\u7247\u6307\u5357\u5F39\u7A97\n\n  \u4E3A\u4EC0\u4E48\u7528 MutationObserver \u800C\u4E0D\u662F\u7B49\u67D0\u4E2A\u4E8B\u4EF6\uFF1A\n  Customily \u7684\u9009\u9879\u662F Vue \u5F02\u6B65\u6E32\u67D3\u7684\uFF0C\u5207\u6362\u53D8\u4F53\u3001\u6761\u4EF6\u9009\u9879\u663E\u9690\u65F6\u6574\u5757\u4F1A\u91CD\u5EFA\uFF0C\n  \u63D2\u5165\u7684\u94FE\u63A5\u53EF\u80FD\u88AB\u51B2\u6389\u3002\u6BCF\u6B21 DOM \u53D8\u5316\u90FD\u5E42\u7B49\u5730\u8865\u4E00\u904D\u6700\u7A33\u3002\n\n  \u4E3A\u4EC0\u4E48\u53EA\u5F80 label \u672B\u5C3E\u8FFD\u52A0\u8282\u70B9\u3001\u4E0D\u6539\u91CC\u9762\u7684\u6587\u5B57\uFF1A\n  \u6539 Vue \u7BA1\u7406\u7684\u6587\u672C\u8282\u70B9\u4F1A\u5728\u5B83\u4E0B\u4E00\u6B21\u8865\u4E01\u65F6\u9519\u4E71\uFF1B\u672B\u5C3E\u8FFD\u52A0\u7684\u5916\u6765\u8282\u70B9 Vue \u4E0D\u4F1A\u53BB\u52A8\u3002\n\n  \u8054\u7CFB\u9875\u5730\u5740\u7531 theme.liquid \u901A\u8FC7 data-contact-url \u4F20\u5165\uFF08\u4E24\u5E97\u9875\u9762 handle \u4E0D\u540C\uFF09\u3002\n*/\n(function () {\n  'use strict';\n\n  var CONTAINER_SELECTOR = '.gradette-personalized-container';\n  var UPLOAD_SELECTOR = '.customily-file-input';\n  var LINK_CLASS = 'photo-guide-link';\n  var HAS_UPLOAD_CLASS = 'has-photo-upload';\n\n  var scriptEl = document.currentScript;\n  var contactUrl = (scriptEl && scriptEl.dataset.contactUrl) || '/';\n\n  // \u4E0E\u9884\u89C8\u56FE\u4E0B\u65B9 Customily \u8C03\u6574\u6309\u94AE\u540C\u987A\u5E8F\uFF1A\u653E\u5927\u3001\u7F29\u5C0F\u3001\u65CB\u8F6C\u3001\u4E0A\u3001\u4E0B\u3001\u5DE6\u3001\u53F3\n  var GUIDE_ICON_PATHS = [\n    '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-4-4M11 8v6M8 11h6\"/>',\n    '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-4-4M8 11h6\"/>',\n    '<path d=\"M3 12a9 9 0 1 0 3-6.7L3 8\"/><path d=\"M3 3v5h5\"/>',\n    '<path d=\"M12 19V5M5 12l7-7 7 7\"/>',\n    '<path d=\"M12 5v14M19 12l-7 7-7-7\"/>',\n    '<path d=\"M19 12H5M12 19l-7-7 7-7\"/>',\n    '<path d=\"M5 12h14M12 5l7 7-7 7\"/>'\n  ];\n  var GUIDE_ICONS = GUIDE_ICON_PATHS.map(function (d) {\n    return '<svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' + d + '</svg>';\n  }).join('');\n\n  var modal = null;\n  var lastTrigger = null;\n\n  function buildModal() {\n    var el = document.createElement('div');\n    el.className = 'photo-guide-modal';\n    el.hidden = true;\n    el.innerHTML =\n      '<div class=\"photo-guide-modal__dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"photo-guide-title\">' +\n        '<button type=\"button\" class=\"photo-guide-modal__close\" aria-label=\"Close\">&times;</button>' +\n        '<h2 class=\"photo-guide-modal__title\" id=\"photo-guide-title\">Photo Guide</h2>' +\n        '<ol class=\"photo-guide-modal__steps\">' +\n          '<li>Pick a clear, well-lit photo and crop it close to the subject before uploading. Larger, high-resolution photos print best.</li>' +\n          '<li>Tap <strong>Select Photo</strong> to upload. Want a different one? Tap <strong>Replace</strong>.</li>' +\n          '<li>Use the buttons under the preview to zoom, rotate or move your photo (or tap <strong>Crop</strong> to reframe it), then tap <strong>Preview Your Design</strong> to check everything before adding to cart.' +\n            '<div class=\"photo-guide-modal__icons\" aria-hidden=\"true\">' + GUIDE_ICONS + '</div></li>' +\n          '<li>Processing a photo can take 20&ndash;30 seconds. If it still won\\'t upload, go ahead and check out, then send us your order number and photo through our <a class=\"photo-guide-modal__contact\">Contact page</a> and we\\'ll finish your order by hand.</li>' +\n        '</ol>' +\n      '</div>';\n    el.querySelector('.photo-guide-modal__contact').href = contactUrl;\n\n    el.addEventListener('click', function (e) {\n      // \u70B9\u906E\u7F69\u6216\u5173\u95ED\u6309\u94AE\u90FD\u5173\u95ED\uFF1B\u70B9\u5BF9\u8BDD\u6846\u5185\u90E8\u4E0D\u5173\n      if (e.target === el || e.target.closest('.photo-guide-modal__close')) closeModal();\n    });\n    document.body.appendChild(el);\n    return el;\n  }\n\n  function onKeydown(e) {\n    if (e.key === 'Escape') closeModal();\n  }\n\n  function openModal(trigger) {\n    modal = modal || buildModal();\n    lastTrigger = trigger;\n    modal.hidden = false;\n    document.body.classList.add('photo-guide-open');\n    document.addEventListener('keydown', onKeydown);\n    modal.querySelector('.photo-guide-modal__close').focus();\n  }\n\n  function closeModal() {\n    if (!modal || modal.hidden) return;\n    modal.hidden = true;\n    document.body.classList.remove('photo-guide-open');\n    document.removeEventListener('keydown', onKeydown);\n    // \u5F39\u7A97\u6253\u5F00\u671F\u95F4 Vue \u53EF\u80FD\u91CD\u5EFA\u4E86\u9009\u9879\uFF0C\u539F\u6309\u94AE\u5DF2\u4E0D\u5728\u9875\u9762\u4E0A\uFF0C\u5C31\u628A\u7126\u70B9\u4EA4\u7ED9\u73B0\u6709\u7684\u90A3\u4E2A\n    var target = lastTrigger && lastTrigger.isConnected ? lastTrigger : document.querySelector('.' + LINK_CLASS);\n    if (target) target.focus();\n  }\n\n  function createLink() {\n    var btn = document.createElement('button');\n    btn.type = 'button';\n    btn.className = LINK_CLASS;\n    btn.setAttribute('aria-label', 'View Photo Guide');\n    btn.innerHTML = '<i class=\"photo-guide-link__icon\" aria-hidden=\"true\">i</i><span>View Photo Guide</span>';\n    btn.addEventListener('click', function (e) {\n      // label \u81EA\u8EAB\u662F Customily \u7684\u6298\u53E0\u89E6\u53D1\u5668\uFF0C\u963B\u6B62\u5192\u6CE1\u907F\u514D\u8FDE\u5E26\u5C55\u5F00/\u6536\u8D77\n      e.preventDefault();\n      e.stopPropagation();\n      openModal(btn);\n    });\n    return btn;\n  }\n\n  function enhance() {\n    var containers = document.querySelectorAll(CONTAINER_SELECTOR);\n    for (var i = 0; i < containers.length; i++) {\n      var container = containers[i];\n      var uploads = container.querySelectorAll(UPLOAD_SELECTOR);\n      // \u4E0A\u4F20\u4F4D\u88AB\u6761\u4EF6\u9009\u9879\u79FB\u9664\uFF08v-if\uFF09\u65F6\u7C7B\u540D\u8DDF\u7740\u64A4\u6389\uFF0C\u5916\u89C2\u56DE\u5230\u9ED8\u8BA4\n      container.classList.toggle(HAS_UPLOAD_CLASS, uploads.length > 0);\n\n      for (var j = 0; j < uploads.length; j++) {\n        var option = uploads[j].closest('.customily_option');\n        var label = option && option.querySelector(':scope > label');\n        if (label && !label.querySelector('.' + LINK_CLASS)) label.appendChild(createLink());\n      }\n    }\n  }\n\n  var scheduled = false;\n  function scheduleEnhance() {\n    if (scheduled) return;\n    scheduled = true;\n    requestAnimationFrame(function () {\n      scheduled = false;\n      enhance();\n    });\n  }\n\n  new MutationObserver(scheduleEnhance).observe(document.body, { childList: true, subtree: true });\n  scheduleEnhance();\n})();\n"],
  "mappings": "CAcC,UAAY,CACX,aAEA,IAAI,mBAAqB,mCACrB,gBAAkB,wBAClB,WAAa,mBACb,iBAAmB,mBAEnB,SAAW,SAAS,cACpB,WAAc,UAAY,SAAS,QAAQ,YAAe,IAG1D,iBAAmB,CACrB,sEACA,+DACA,4DACA,oCACA,sCACA,sCACA,mCACF,EACI,YAAc,iBAAiB,IAAI,SAAU,EAAG,CAClD,MAAO,uJAAyJ,EAAI,QACtK,CAAC,EAAE,KAAK,EAAE,EAEN,MAAQ,KACR,YAAc,KAElB,SAAS,YAAa,CACpB,IAAI,GAAK,SAAS,cAAc,KAAK,EACrC,UAAG,UAAY,oBACf,GAAG,OAAS,GACZ,GAAG,UACD,6yBAOoE,YAAc,uRAIpF,GAAG,cAAc,6BAA6B,EAAE,KAAO,WAEvD,GAAG,iBAAiB,QAAS,SAAU,EAAG,EAEpC,EAAE,SAAW,IAAM,EAAE,OAAO,QAAQ,2BAA2B,IAAG,WAAW,CACnF,CAAC,EACD,SAAS,KAAK,YAAY,EAAE,EACrB,EACT,CAEA,SAAS,UAAU,EAAG,CAChB,EAAE,MAAQ,UAAU,WAAW,CACrC,CAEA,SAAS,UAAU,QAAS,CAC1B,MAAQ,OAAS,WAAW,EAC5B,YAAc,QACd,MAAM,OAAS,GACf,SAAS,KAAK,UAAU,IAAI,kBAAkB,EAC9C,SAAS,iBAAiB,UAAW,SAAS,EAC9C,MAAM,cAAc,2BAA2B,EAAE,MAAM,CACzD,CAEA,SAAS,YAAa,CACpB,GAAI,GAAC,OAAS,MAAM,QACpB,OAAM,OAAS,GACf,SAAS,KAAK,UAAU,OAAO,kBAAkB,EACjD,SAAS,oBAAoB,UAAW,SAAS,EAEjD,IAAI,OAAS,aAAe,YAAY,YAAc,YAAc,SAAS,cAAc,IAAM,UAAU,EACvG,QAAQ,OAAO,MAAM,EAC3B,CAEA,SAAS,YAAa,CACpB,IAAI,IAAM,SAAS,cAAc,QAAQ,EACzC,WAAI,KAAO,SACX,IAAI,UAAY,WAChB,IAAI,aAAa,aAAc,kBAAkB,EACjD,IAAI,UAAY,0FAChB,IAAI,iBAAiB,QAAS,SAAU,EAAG,CAEzC,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,UAAU,GAAG,CACf,CAAC,EACM,GACT,CAEA,SAAS,SAAU,CAEjB,QADI,WAAa,SAAS,iBAAiB,kBAAkB,EACpD,EAAI,EAAG,EAAI,WAAW,OAAQ,IAAK,CAC1C,IAAI,UAAY,WAAW,CAAC,EACxB,QAAU,UAAU,iBAAiB,eAAe,EAExD,UAAU,UAAU,OAAO,iBAAkB,QAAQ,OAAS,CAAC,EAE/D,QAAS,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAAK,CACvC,IAAI,OAAS,QAAQ,CAAC,EAAE,QAAQ,mBAAmB,EAC/C,MAAQ,QAAU,OAAO,cAAc,gBAAgB,EACvD,OAAS,CAAC,MAAM,cAAc,IAAM,UAAU,GAAG,MAAM,YAAY,WAAW,CAAC,CACrF,CACF,CACF,CAEA,IAAI,UAAY,GAChB,SAAS,iBAAkB,CACrB,YACJ,UAAY,GACZ,sBAAsB,UAAY,CAChC,UAAY,GACZ,QAAQ,CACV,CAAC,EACH,CAEA,IAAI,iBAAiB,eAAe,EAAE,QAAQ,SAAS,KAAM,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,EAC/F,gBAAgB,CAClB,GAAG",
  "names": []
}
