{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/lead-time.js?ltv=20261022-5"],
  "sourcesContent": ["/*\n * Lead times (Theme settings > Lead times): keeps the hidden `_Lead time` property, the visible\n * `Pre-order` property, the lead-time note and the Pre-order button label in line with the\n * selected variant AND quantity, on the PDP, in the quick-add modal and on product-card quick-add forms.\n *\n * Server side (snippets/lead-time.liquid) renders the lead time for the cart quantity + the minimum\n * quantity, plus data for this check in [data-lead-time-slot]:\n *   data-lt      {\"k\": \"stock\"|\"pre\", \"d\": days, \"sd\": stockDays, \"pd\": preorderDays, \"s\": stock,\n *                 \"o\": overCanSwitch, \"c\": inCartAtRender}\n *   data-lt-map  same per variant id (card forms whose variant can change through swatches)\n *   data-lt-preorder-tpl  pre-order note with [days]\n * Rule: when \"o\" is true (tracked, continue selling, stock > 0, not forced) and\n * cart quantity + selected quantity > stock, the whole line becomes a pre-order with the variant's\n * pre-order days (metafield, else 35). Never split. `_Lead time` = the number of days.\n */\n(() => {\n  if (window.LeadTime) return;\n\n  const parse = (s) => {\n    try {\n      return s ? JSON.parse(s) : null;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  /** @param {Element} slot @param {HTMLFormElement | null} form */\n  function dataFor(slot, form) {\n    let d = parse(slot.getAttribute('data-lt'));\n    const map = parse(slot.getAttribute('data-lt-map'));\n    const id = form?.querySelector('input[name=\"id\"]')?.value;\n    if (map && id && map[id]) d = map[id];\n    return d;\n  }\n\n  /** @param {Element} root @param {number} [override] */\n  function selectedQty(root, override) {\n    if (override) return Math.max(1, Number(override) || 1);\n    const input = root.querySelector('input[name=\"quantity\"]');\n    return Math.max(1, Number(input?.value) || 1);\n  }\n\n  // Cart quantities per variant id (all lines of that variant added up), from /cart.js. Refreshed on\n  // load and after every cart change, so the check always uses the selected variant's quantity in the\n  // cart (Horizon's own data-cart-quantity is not refreshed on variant change and counts one line only).\n  /** @type {Record<string, number> | null} */\n  let cartMap = null;\n  let cartSeq = 0;\n  function refreshCart() {\n    const seq = ++cartSeq;\n    return fetch('/cart.js', { headers: { Accept: 'application/json' }, credentials: 'same-origin' })\n      .then((r) => (r.ok ? r.json() : null))\n      .then((cart) => {\n        if (!cart || seq !== cartSeq) return;\n        /** @type {Record<string, number>} */\n        const map = {};\n        for (const item of cart.items || []) {\n          const k = String(item.variant_id);\n          map[k] = (map[k] || 0) + (Number(item.quantity) || 0);\n        }\n        cartMap = map;\n        schedule();\n      })\n      .catch(() => {});\n  }\n\n  /** @param {Element} root @param {any} d */\n  function cartQty(root, d) {\n    const id = String(root.querySelector('input[name=\"id\"]')?.value || '');\n    if (cartMap && id) return cartMap[id] || 0;\n    if (d && (!d.v || String(d.v) === id)) return Number(d.c) || 0;\n    return 0;\n  }\n\n  /** Returns { slot, kind: 'stock'|'pre'|'', days } for this form root right now. */\n  function tierFor(root, overrideQty) {\n    const slot = root.querySelector('[data-lead-time-slot]');\n    if (!slot) return null;\n    const d = dataFor(slot, root.querySelector('form'));\n    if (!d || !d.k) return { slot, kind: '', days: '', pd: '' };\n    let kind = String(d.k);\n    let days = String(d.d);\n    // Safety: data must belong to the variant in the form. If not (stale markup), never switch on\n    // quantity; keep the server-rendered kind for that data.\n    const formId = root.querySelector('form input[name=\"id\"]')?.value || root.querySelector('input[name=\"id\"]')?.value;\n    const sameVariant = !d.v || !formId || String(d.v) === String(formId);\n    if (!sameVariant) console.warn('[lead-time] stale lead-time data', d.v, 'for variant', formId);\n    if (d.o && sameVariant) {\n      const total = cartQty(root, d) + selectedQty(root, overrideQty);\n      if (total > Number(d.s)) {\n        kind = 'pre';\n        days = String(d.pd);\n      } else {\n        kind = 'stock';\n        days = String(d.sd);\n      }\n    }\n    return { slot, kind, days, pd: String(d.pd) };\n  }\n\n  function apply(root, overrideQty) {\n    const res = tierFor(root, overrideQty);\n    if (!res) return null;\n    const { slot, kind, days } = res;\n    const preorderOn = slot.getAttribute('data-lt-preorder') === 'true';\n\n    let input = slot.querySelector('[data-lt-input]');\n    if (kind) {\n      if (!input) {\n        input = document.createElement('input');\n        input.type = 'hidden';\n        input.name = 'properties[_Lead time]';\n        input.setAttribute('data-lt-input', '');\n        slot.prepend(input);\n      }\n      if (input.value !== days) input.value = days;\n    } else if (input) {\n      input.remove();\n    }\n\n    let po = slot.querySelector('[data-lt-preorder-input]');\n    const wantPo = kind === 'pre' && preorderOn;\n    if (wantPo) {\n      if (!po) {\n        po = document.createElement('input');\n        po.type = 'hidden';\n        po.name = 'properties[Pre-order]';\n        po.setAttribute('data-lt-preorder-input', '');\n        slot.append(po);\n      }\n      const tpl = slot.getAttribute('data-lt-preorder-tpl');\n      const note = tpl ? tpl.replace(/\\[days\\]/g, days) : slot.getAttribute('data-lt-preorder-note') || 'Pre-order';\n      if (po.value !== note) po.value = note;\n    } else if (po) {\n      po.remove();\n    }\n\n    // Visible note / tooltip (only states rendered by the server exist).\n    const states = root.querySelectorAll('[data-preorder-info] [data-lt-state]');\n    if (states.length > 1 && kind) {\n      states.forEach((el) => {\n        const show = el.getAttribute('data-lt-state') === kind;\n        if (el.hidden === show) el.hidden = !show;\n      });\n    }\n\n    // Button label: swap only on buttons that carry both labels.\n    root.querySelectorAll('.add-to-cart-text__content').forEach((content) => {\n      const poLabel = content.querySelector('.add-to-cart-text__po');\n      const std = content.querySelector('.add-to-cart-text__std');\n      if (!poLabel || !std) return;\n      const poDisplay = wantPo ? '' : 'none';\n      const stdDisplay = wantPo ? 'none' : '';\n      if (poLabel.style.display !== poDisplay) poLabel.style.display = poDisplay;\n      if (std.style.display !== stdDisplay) std.style.display = stdDisplay;\n    });\n\n    syncSticky(root, wantPo);\n    root.toggleAttribute('data-lt-preorder-active', wantPo);\n    return { kind, days };\n  }\n\n  /**\n   * PDP sticky add-to-cart bar (sections/product-information.liquid): its label is rendered as\n   * \"Add to cart\" by Horizon and never knows about pre-orders. Mirror the main button: \"Pre-order\"\n   * while the selection is a pre-order, the original label otherwise. Its click goes through the main\n   * form, so the line properties are already right.\n   * @param {Element} root @param {boolean} wantPo\n   */\n  function syncSticky(root, wantPo) {\n    if (root.closest('#quick-add-modal-content, quick-add-component, product-card')) return;\n    const productId = root.getAttribute('data-product-id');\n    if (!productId) return;\n    const sticky = document.querySelector(`sticky-add-to-cart[data-product-id=\"${productId}\"]`);\n    const label = sticky?.querySelector('.sticky-add-to-cart__button .add-to-cart-text__content > span:first-child');\n    if (!label) return;\n    if (!label.hasAttribute('data-lt-std')) label.setAttribute('data-lt-std', label.textContent.trim());\n    const poText =\n      root.querySelector('.add-to-cart-text__po')?.textContent.trim() ||\n      root.querySelector('[data-lead-time-slot]')?.getAttribute('data-lt-po-label') ||\n      'Pre-order';\n    const want = wantPo ? poText : label.getAttribute('data-lt-std') || '';\n    if (want && label.textContent.trim() !== want) label.textContent = want;\n  }\n\n  function applyAll() {\n    document.querySelectorAll('[data-lead-time-slot]').forEach((slot) => {\n      const root = slot.closest('product-form-component') || slot.closest('form');\n      if (root) apply(root);\n    });\n  }\n\n  let queued = false;\n  const schedule = () => {\n    if (queued) return;\n    queued = true;\n    requestAnimationFrame(() => {\n      queued = false;\n      applyAll();\n    });\n  };\n\n  // Quantity: Horizon's quantity-selector-component sets input.value from code on +/- and on blur,\n  // without input/change events; it dispatches 'quantity-selector:update' (bubbles) instead.\n  // All listeners are delegated on document (capture), so they survive the variant-change morph.\n  const isQty = (t) => t instanceof HTMLInputElement && t.name === 'quantity';\n  const now = () => {\n    try {\n      applyAll();\n    } catch (e) {\n      console.warn('[lead-time] update failed', e);\n    }\n  };\n  document.addEventListener('quantity-selector:update', now, true);\n  document.addEventListener('input', (e) => {\n    if (isQty(e.target)) now();\n  }, true);\n  document.addEventListener('change', (e) => {\n    if (isQty(e.target) || (e.target instanceof HTMLInputElement && e.target.name === 'id')) schedule();\n  }, true);\n  document.addEventListener('focusout', (e) => {\n    if (isQty(e.target)) setTimeout(now, 0);\n  }, true);\n  document.addEventListener('click', (e) => {\n    if (e.target instanceof Element && e.target.closest('quantity-selector-component')) {\n      setTimeout(now, 0);\n      schedule();\n    }\n  }, true);\n  // Safari restores form values (and whole pages from the back/forward cache) after our first run.\n  window.addEventListener('pageshow', schedule);\n  window.addEventListener('load', schedule);\n\n  const start = () => {\n    applyAll();\n    new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        if (m.type === 'attributes') return schedule();\n        // Sticky add-to-cart bar re-rendered (variant change morph): re-apply its label.\n        if (m.target instanceof Element && m.target.closest('sticky-add-to-cart')) {\n          if (!(m.target.closest('.add-to-cart-text__content > span:first-child'))) return schedule();\n        }\n        for (const n of m.addedNodes) {\n          if (n instanceof Element && (n.matches('[data-lead-time-slot], [data-preorder-info]') || n.querySelector('[data-lead-time-slot]'))) {\n            return schedule();\n          }\n        }\n      }\n    }).observe(document.body, {\n      subtree: true,\n      childList: true,\n      attributes: true,\n      attributeFilter: ['data-lt', 'data-lt-map', 'data-cart-quantity'],\n    });\n  };\n  refreshCart();\n  import('@shopify/events')\n    .then(({ StandardEvents }) => {\n      document.addEventListener(StandardEvents.cartLinesUpdate, (event) => {\n        const p = /** @type {any} */ (event).promise;\n        if (p && typeof p.finally === 'function') p.finally(() => refreshCart());\n        else setTimeout(refreshCart, 300);\n      });\n    })\n    .catch(() => {});\n  window.addEventListener('pageshow', (e) => {\n    if (e.persisted) refreshCart();\n  });\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start);\n  else start();\n\n  window.LeadTime = {\n    /** Called by product-form.js right before the add-to-cart FormData is built. */\n    prepare(root, overrideQty) {\n      try {\n        return apply(root, overrideQty);\n      } catch (e) {\n        console.warn('[lead-time] prepare failed', e);\n        return null;\n      }\n    },\n    tierFor,\n    applyAll,\n    refreshCart,\n    version: '2026-10-22.5',\n  };\n})();\n"],
  "mappings": "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",
  "names": []
}
