{
  "version": 3,
  "sources": ["/cdn/shop/t/56/assets/wallpaper-unit-toggle.js?cb=1867661846"],
  "sourcesContent": ["/*\n * wallpaper-unit-toggle.js \u2014 \"Ft + In\" / \"Inches\" switch for the three places a\n * shopper enters a wall size:\n *   1. the PDP buy-box card  (\"Enter Wall Size\",   #bb-wallsize-card)\n *   2. the editor/configurator card (\"Enter Your Dimensions\", .dimensions-card)\n *   3. the large-file upload form (\"Wall Dimensions\", /pages/upload-your-own-image)\n *\n * A shopper working from a tape measure in plain inches (\"that wall is 137\n * inches\") should not have to divide by 12 before they can get a price.\n *\n * How it works \u2014 feet + inches stay canonical:\n *   Inches mode does NOT repurpose the existing inches box. It hides the native\n *   ft/in pair and shows an injected \"total inches\" box that writes straight back\n *   into them (137 -> 11 ft, 5 in) and fires the same input/change events typing\n *   would. So every existing consumer is untouched: the configurator's own\n *   validation and clamps (inches <= 11, feet <= 999, 6\" minimum, area cap), the\n *   sqft/price math, wallpaper-buybox.js's validation and its push into the\n *   editor, the saved-state manager, and the cart's Dimensions line-item property\n *   (still `11'5.0\" x 8'0.0\"`, which the print scripts already parse).\n *\n *   That is also why this file is self-contained \u2014 markup, styles and behavior in\n *   one asset. Nothing else in the theme had to change except the script tag that\n *   loads it.\n *\n * The chosen unit is shared by both cards and remembered in localStorage.\n */\n(function () {\n  if (window.ACUnitToggle) return;\n\n  var STORAGE_KEY = 'ac_wallpaper_units';\n  var FTIN = 'ftin';\n  var IN = 'in';\n  // The feet boxes cap at 100 ft, so inches-only caps at the same wall length.\n  var MAX_TOTAL_INCHES = 1200;\n\n  /* Each card: where to hang the toggle, and the input pairs it owns. The class\n     names mirror the card's own markup so the injected box looks native. */\n  var CARDS = [\n    {\n      key: 'buybox',\n      card: '#bb-wallsize-card',\n      mountIn: '.bb-wallsize__head',\n      rowSelector: '.bb-wallsize__inputs',\n      inputClass: 'bb-wallsize__input',\n      fieldClass: 'bb-wallsize__field',\n      suffixClass: 'bb-wallsize__suffix',\n      invalidClass: 'bb-wallsize__input--invalid',\n      rows: [\n        { label: 'Width', ft: 'bb-width-feet', in: 'bb-width-inches' },\n        { label: 'Height', ft: 'bb-height-feet', in: 'bb-height-inches' }\n      ]\n    },\n    {\n      key: 'editor',\n      card: '.dimensions-card',\n      mountBefore: '.dimensions-inputs',\n      mountLabel: 'Units',\n      rowSelector: '.dimension-row',\n      inputClass: 'dimension-input',\n      unitClass: 'dimension-unit',\n      rows: [\n        { label: 'Width', ft: 'width-feet', in: 'width-inches' },\n        { label: 'Height', ft: 'height-feet', in: 'height-inches' }\n      ]\n    },\n    {\n      // Same card/row classes as the editor, different input ids \u2014 the cards are\n      // told apart by their inputs, not by the selector.\n      key: 'upload',\n      card: '.dimensions-card',\n      mountBefore: '.dimensions-inputs',\n      mountLabel: 'Units',\n      rowSelector: '.dimension-row',\n      inputClass: 'dimension-input',\n      unitClass: 'dimension-unit',\n      rows: [\n        { label: 'Width', ft: 'wall-width-feet', in: 'wall-width-inches' },\n        { label: 'Height', ft: 'wall-height-feet', in: 'wall-height-inches' }\n      ]\n    }\n  ];\n\n  /* Methods that repaint the ft/in boxes from internal state without firing\n     events \u2014 wrap them so the inches box follows. [element, method] */\n  var HOOKS = [\n    ['wallpaper-configurator', 'updateDimensionDisplay'],  // editor restoring saved state\n    ['large-file-upload-form', 'reset']                    // upload form clearing after submit\n  ];\n\n  var STYLES = [\n    '.acu-toggle{display:inline-flex;align-items:center;gap:2px;padding:2px;',\n    'border:1px solid #e0e0e0;border-radius:999px;background:#f6f6f6;}',\n    '.acu-toggle__btn{-webkit-appearance:none;appearance:none;border:0;margin:0;',\n    'padding:5px 12px;border-radius:999px;background:transparent;color:#666;',\n    'font-size:12px;font-weight:600;line-height:1.2;white-space:nowrap;cursor:pointer;',\n    'transition:background .15s ease,color .15s ease;}',\n    '.acu-toggle__btn:hover{color:#1897aa;}',\n    '.acu-toggle__btn.is-active{background:#1897aa;color:#fff;}',\n    '.acu-toggle__btn:focus-visible{outline:2px solid #1897aa;outline-offset:2px;}',\n    '.acu-row{display:flex;align-items:center;justify-content:space-between;',\n    'gap:12px;margin-bottom:14px;}',\n    '.acu-row__label{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#666;}',\n    '[data-acu-unit=\"ftin\"] .acu-total-part{display:none !important;}',\n    '[data-acu-unit=\"in\"] .acu-native-part{display:none !important;}',\n    '[data-acu-unit=\"in\"] .bb-wallsize__input{width:92px;}',\n    '[data-acu-unit=\"in\"] .dimension-input{width:88px;}',\n    '@media (max-width:480px){.bb-wallsize__head{flex-wrap:wrap;}}'\n  ].join('');\n\n  var unit = FTIN;\n  var pairs = [];      // { ft, in, total, invalidClass }\n  var mirroring = false;\n\n  // ---- helpers ----\n  function $(sel, root) { return (root || document).querySelector(sel); }\n  function byId(id) { return document.getElementById(id); }\n  function num(el) { var v = parseFloat(el && el.value); return isNaN(v) ? 0 : v; }\n  function blank(el) { return !el || String(el.value).trim() === ''; }\n  function tidy(n) { return Math.round(n * 100) / 100; }  // kill 12ths float dust\n\n  function fire(el) {\n    el.dispatchEvent(new Event('input', { bubbles: true }));\n    el.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n\n  function readStoredUnit() {\n    // Default to plain inches for first-time visitors; a shopper who has explicitly\n    // switched to Ft + In before (persisted here) keeps seeing Ft + In on return.\n    try { return localStorage.getItem(STORAGE_KEY) === FTIN ? FTIN : IN; } catch (e) { return IN; }\n  }\n  function storeUnit(v) {\n    try { localStorage.setItem(STORAGE_KEY, v); } catch (e) { /* private mode */ }\n  }\n\n  function injectStyles() {\n    if (byId('acu-styles')) return;\n    var style = document.createElement('style');\n    style.id = 'acu-styles';\n    style.textContent = STYLES;\n    document.head.appendChild(style);\n  }\n\n  // ---- build ----\n  function buildToggle() {\n    var wrap = document.createElement('div');\n    wrap.className = 'acu-toggle';\n    wrap.setAttribute('role', 'group');\n    wrap.setAttribute('aria-label', 'Measurement units');\n    [[IN, 'Inches'], [FTIN, 'Ft + In']].forEach(function (opt) {\n      var btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'acu-toggle__btn';\n      btn.setAttribute('data-acu-value', opt[0]);\n      btn.textContent = opt[1];\n      wrap.appendChild(btn);\n    });\n    return wrap;\n  }\n\n  // Add the inches-only box to one width/height row, styled like its neighbours.\n  function buildTotalBox(cfg, row, rowEl, inEl) {\n    var input = document.createElement('input');\n    input.type = 'number';\n    input.className = cfg.inputClass + ' acu-total-input';\n    input.min = 0;\n    input.max = MAX_TOTAL_INCHES;\n    input.step = 0.1;\n    input.setAttribute('inputmode', 'decimal');\n    input.placeholder = '0';\n    input.setAttribute('aria-label', row.label + ' in inches');\n\n    if (cfg.fieldClass) {\n      // Buy box: input + suffix share a positioned wrapper.\n      var field = document.createElement('span');\n      field.className = cfg.fieldClass + ' acu-total-part';\n      var suffix = document.createElement('span');\n      suffix.className = cfg.suffixClass;\n      suffix.textContent = 'in';\n      field.appendChild(input);\n      field.appendChild(suffix);\n      rowEl.appendChild(field);\n    } else {\n      // Editor: input and unit label are siblings in the row.\n      input.classList.add('acu-total-part');\n      var unitEl = document.createElement('span');\n      unitEl.className = cfg.unitClass + ' acu-total-part';\n      unitEl.textContent = 'in';\n      rowEl.appendChild(input);\n      rowEl.appendChild(unitEl);\n    }\n    return input;\n  }\n\n  function buildCard(cfg) {\n    // Every row must be present before we touch the card.\n    var found = cfg.rows.map(function (row) {\n      var ftEl = byId(row.ft);\n      var inEl = byId(row.in);\n      var rowEl = inEl && inEl.closest(cfg.rowSelector);\n      return ftEl && inEl && rowEl ? { row: row, ft: ftEl, in: inEl, rowEl: rowEl } : null;\n    });\n    if (found.some(function (f) { return !f; })) return false;\n\n    // Resolve the card from its own inputs, not by querying the class \u2014 the\n    // editor and the upload form both use .dimensions-card.\n    var card = found[0].ft.closest(cfg.card);\n    if (!card || card.hasAttribute('data-acu-unit')) return false;\n\n    found.forEach(function (f) {\n      // Tag what was already there so the stylesheet can swap the two views.\n      Array.prototype.forEach.call(f.rowEl.children, function (child) {\n        child.classList.add('acu-native-part');\n      });\n      var total = buildTotalBox(cfg, f.row, f.rowEl, f.in);\n      pairs.push({ ft: f.ft, in: f.in, total: total, invalidClass: cfg.invalidClass });\n    });\n\n    var toggle = buildToggle();\n    if (cfg.mountIn && $(cfg.mountIn, card)) {\n      $(cfg.mountIn, card).appendChild(toggle);\n    } else {\n      // Give the toggle its own labelled row above the inputs.\n      var line = document.createElement('div');\n      line.className = 'acu-row';\n      var label = document.createElement('span');\n      label.className = 'acu-row__label';\n      label.textContent = cfg.mountLabel || 'Units';\n      line.appendChild(label);\n      line.appendChild(toggle);\n      var anchor = cfg.mountBefore && $(cfg.mountBefore, card);\n      if (anchor) card.insertBefore(line, anchor);\n      else card.appendChild(line);\n    }\n\n    card.setAttribute('data-acu-unit', unit);\n    return true;\n  }\n\n  // ---- value plumbing ----\n  // ft/in are the source of truth; the total box is a view of them.\n  function mirrorPair(pair) {\n    // Don't repaint the box mid-keystroke (e.g. \"25.\" while typing a decimal).\n    if (pair.total === document.activeElement && pair.total.validity && pair.total.validity.badInput) return;\n    var next;\n    if (blank(pair.ft) && blank(pair.in)) {\n      next = '';\n    } else {\n      next = String(tidy(num(pair.ft) * 12 + num(pair.in)));\n    }\n    // Assigning .value replaces the box's editing text and throws the caret to\n    // the front. Chrome sanitizes a half-typed \"8.\" to value \"8\" with badInput\n    // false, so the guard above can't catch it \u2014 the echo repaint from our own\n    // fire() would eat the decimal point the shopper just typed (and scramble\n    // the next digit). Only write when the number actually changed; while the\n    // box is focused, numerically-equal also counts as unchanged so editing\n    // states like \"8.\" and \"8.0\" survive.\n    var cur = String(pair.total.value);\n    var unchanged = cur === next ||\n      (pair.total === document.activeElement && cur !== '' && next !== '' &&\n        parseFloat(cur) === parseFloat(next));\n    if (!unchanged) pair.total.value = next;\n    if (pair.invalidClass) {\n      var bad = pair.ft.classList.contains(pair.invalidClass) ||\n        pair.in.classList.contains(pair.invalidClass);\n      pair.total.classList.toggle(pair.invalidClass, bad);\n    }\n  }\n\n  function mirrorAll() {\n    if (mirroring) return;\n    mirroring = true;\n    pairs.forEach(mirrorPair);\n    mirroring = false;\n  }\n\n  // Split a typed inches value back into the native pair.\n  function pushTotal(pair) {\n    // A half-typed decimal like \"25.\" reads as value:\"\" with badInput:true \u2014\n    // leave everything alone until the number is complete, otherwise the\n    // mirror wipes the box the shopper is typing in.\n    if (pair.total.validity && pair.total.validity.badInput) return;\n    var raw = String(pair.total.value).trim();\n    mirroring = true;\n    if (raw === '') {\n      pair.ft.value = '';\n      pair.in.value = '';\n    } else {\n      var total = parseFloat(raw);\n      if (isNaN(total) || total < 0) total = 0;\n      if (total > MAX_TOTAL_INCHES) {\n        total = MAX_TOTAL_INCHES;\n        pair.total.value = total;\n      }\n      var feet = Math.floor(total / 12);\n      pair.ft.value = feet;\n      pair.in.value = tidy(total - feet * 12);\n    }\n    mirroring = false;\n\n    fire(pair.ft);\n    fire(pair.in);\n\n    // The configurator may have corrected what we just wrote (6\" minimum, feet\n    // cap). Show the corrected figure rather than the rejected one.\n    if (raw !== '') {\n      var settled = tidy(num(pair.ft) * 12 + num(pair.in));\n      if (settled !== parseFloat(raw)) pair.total.value = settled;\n    }\n  }\n\n  function setUnit(target) {\n    unit = target === IN ? IN : FTIN;\n    storeUnit(unit);\n    document.querySelectorAll('[data-acu-unit]').forEach(function (card) {\n      card.setAttribute('data-acu-unit', unit);\n      card.querySelectorAll('.acu-toggle__btn').forEach(function (btn) {\n        var on = btn.getAttribute('data-acu-value') === unit;\n        btn.classList.toggle('is-active', on);\n        btn.setAttribute('aria-pressed', on ? 'true' : 'false');\n      });\n    });\n    // Nothing to convert \u2014 ft/in never stopped being the real value.\n    mirrorAll();\n  }\n\n  // ---- wiring ----\n  function bindPair(pair) {\n    ['input', 'change'].forEach(function (evt) {\n      pair.total.addEventListener(evt, function () {\n        if (mirroring) return;\n        pushTotal(pair);\n      });\n      [pair.ft, pair.in].forEach(function (el) {\n        el.addEventListener(evt, function () { if (!mirroring) mirrorPair(pair); });\n      });\n    });\n\n    // wallpaper-buybox.js flags an empty wall size by adding a class to the ft/in\n    // boxes \u2014 carry that onto the box the shopper can actually see.\n    if (pair.invalidClass && window.MutationObserver) {\n      var observer = new MutationObserver(function () { if (!mirroring) mirrorPair(pair); });\n      [pair.ft, pair.in].forEach(function (el) {\n        observer.observe(el, { attributes: true, attributeFilter: ['class'] });\n      });\n    }\n  }\n\n  /*\n   * Some hosts rewrite the ft/in boxes from internal state without firing events\n   * (the editor restoring a cart in progress; the upload form clearing itself\n   * after a submit), which would leave the inches box showing a stale figure.\n   * Wrap those methods so the mirror runs straight after. Falls back to the\n   * delayed mirror at the bottom of this file if an element never defines.\n   */\n  function patchHosts() {\n    if (!window.customElements || !customElements.whenDefined) return;\n    HOOKS.forEach(function (hook) {\n      var tag = hook[0], method = hook[1];\n      customElements.whenDefined(tag).then(function (Ctor) {\n        var C = Ctor || customElements.get(tag);\n        var proto = C && C.prototype;\n        var flag = '__acuPatched_' + method;\n        if (!proto || typeof proto[method] !== 'function' || proto[flag]) return;\n        proto[flag] = true;\n        var original = proto[method];\n        proto[method] = function () {\n          var result = original.apply(this, arguments);\n          try { mirrorAll(); } catch (e) { /* never break the host over a mirror */ }\n          return result;\n        };\n      })['catch'](function () { /* noop */ });\n    });\n  }\n\n  function onToggleClick(e) {\n    var btn = e.target && e.target.closest && e.target.closest('.acu-toggle__btn');\n    if (!btn) return;\n    e.preventDefault();\n    var target = btn.getAttribute('data-acu-value') === IN ? IN : FTIN;\n    if (target !== unit) setUnit(target);\n  }\n\n  function init() {\n    var built = false;\n    CARDS.forEach(function (cfg) { if (buildCard(cfg)) built = true; });\n    if (!built) return;\n\n    injectStyles();\n    pairs.forEach(function (pair) { if (!pair.bound) { pair.bound = true; bindPair(pair); } });\n\n    if (!window.__acuBound) {\n      window.__acuBound = true;\n      document.addEventListener('click', onToggleClick);\n      patchHosts();\n    }\n    setUnit(readStoredUnit());\n  }\n\n  window.ACUnitToggle = {\n    get: function () { return unit; },\n    set: setUnit,\n    sync: mirrorAll\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n  // The buy box and the editor can render late on some templates; re-run cheaply.\n  setTimeout(init, 600);\n  setTimeout(mirrorAll, 1500);\n})();\n"],
  "mappings": "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",
  "names": []
}
