{
  "version": 3,
  "sources": ["../../assets/js/variant-selector.js"],
  "sourcesContent": ["/**\n * Variant selector for art prints.\n *\n * Reads variant data from a JSON script block in the template,\n * then updates the displayed price and cart form action when the\n * user selects a size/frame combination.\n */\n\nfunction initVariantSelector() {\n    const el = document.getElementById('variant-data');\n    if (!el) return;\n\n    const variants = JSON.parse(el.textContent);\n    const sizeButtons = document.querySelectorAll('.variant-size-btn');\n    const frameButtons = document.querySelectorAll('.variant-frame-btn');\n    const priceDisplay = document.getElementById('variant-price');\n    const cartForm = document.getElementById('variant-cart-form');\n    const cartButton = document.getElementById('variant-cart-button');\n    const stockNote = document.getElementById('variant-stock-note');\n\n    let selectedSize = null;\n    let selectedFrame = null;\n\n    // Pre-select first available size and frame\n    if (sizeButtons.length > 0) {\n        sizeButtons[0].classList.add('active');\n        selectedSize = sizeButtons[0].dataset.value;\n    }\n    if (frameButtons.length > 0) {\n        frameButtons[0].classList.add('active');\n        selectedFrame = frameButtons[0].dataset.value;\n    }\n\n    function getVariant() {\n        if (!selectedSize || !selectedFrame) return null;\n        return variants.find(v => v.size === selectedSize && v.frame === selectedFrame) || null;\n    }\n\n    function updateAvailability() {\n        // Disable frame buttons that have no variant with the selected size\n        if (selectedSize) {\n            const availableFrames = new Set(\n                variants.filter(v => v.size === selectedSize).map(v => v.frame)\n            );\n            frameButtons.forEach(btn => {\n                btn.disabled = !availableFrames.has(btn.dataset.value);\n            });\n            // If the selected frame is now disabled, auto-select the first enabled frame\n            if (selectedFrame && !availableFrames.has(selectedFrame)) {\n                const firstEnabled = Array.from(frameButtons).find(b => !b.disabled);\n                frameButtons.forEach(b => b.classList.remove('active'));\n                if (firstEnabled) {\n                    firstEnabled.classList.add('active');\n                    selectedFrame = firstEnabled.dataset.value;\n                } else {\n                    selectedFrame = null;\n                }\n            }\n        }\n\n        // Disable size buttons that have no variant with the selected frame\n        if (selectedFrame) {\n            const availableSizes = new Set(\n                variants.filter(v => v.frame === selectedFrame).map(v => v.size)\n            );\n            sizeButtons.forEach(btn => {\n                btn.disabled = !availableSizes.has(btn.dataset.value);\n            });\n            // If the selected size is now disabled, auto-select the first enabled size\n            if (selectedSize && !availableSizes.has(selectedSize)) {\n                const firstEnabled = Array.from(sizeButtons).find(b => !b.disabled);\n                sizeButtons.forEach(b => b.classList.remove('active'));\n                if (firstEnabled) {\n                    firstEnabled.classList.add('active');\n                    selectedSize = firstEnabled.dataset.value;\n                } else {\n                    selectedSize = null;\n                }\n            }\n        }\n    }\n\n    function updateDisplay() {\n        const variant = getVariant();\n\n        if (!variant) {\n            priceDisplay.textContent = 'Not available';\n            cartButton.disabled = true;\n            cartButton.textContent = 'Unavailable';\n            if (stockNote) stockNote.textContent = '';\n            return;\n        }\n\n        priceDisplay.textContent = variant.price_display;\n        cartForm.action = variant.add_url;\n\n        if (variant.in_cart) {\n            cartButton.disabled = false;\n            cartButton.textContent = 'Added To Cart';\n            cartButton.className = 'btn btn-secondary btn-block';\n            cartForm.action = variant.remove_url;\n        } else if (variant.stock > 0) {\n            cartButton.disabled = false;\n            cartButton.textContent = 'Add to Cart';\n            cartButton.className = 'btn btn-primary btn-block';\n        } else {\n            cartButton.disabled = true;\n            cartButton.textContent = 'Out of Stock';\n            cartButton.className = 'btn btn-secondary btn-block';\n        }\n\n        if (stockNote) {\n            if (variant.stock > 0 && variant.stock <= 3) {\n                stockNote.textContent = `Only ${variant.stock} left`;\n            } else {\n                stockNote.textContent = '';\n            }\n        }\n\n        const unframedWarning = document.getElementById('unframed-warning');\n        if (unframedWarning) {\n            const activeFrameBtn = document.querySelector('.variant-frame-btn.active');\n            const isUnframed = activeFrameBtn && activeFrameBtn.dataset.unframed === 'true';\n            unframedWarning.style.display = isUnframed ? '' : 'none';\n        }\n    }\n\n    sizeButtons.forEach(btn => {\n        btn.addEventListener('click', () => {\n            if (btn.disabled) return;\n            sizeButtons.forEach(b => b.classList.remove('active'));\n            btn.classList.add('active');\n            selectedSize = btn.dataset.value;\n            updateAvailability();\n            updateDisplay();\n        });\n    });\n\n    frameButtons.forEach(btn => {\n        btn.addEventListener('click', () => {\n            if (btn.disabled) return;\n            frameButtons.forEach(b => b.classList.remove('active'));\n            btn.classList.add('active');\n            selectedFrame = btn.dataset.value;\n            updateAvailability();\n            updateDisplay();\n        });\n    });\n\n    updateAvailability();\n    updateDisplay();\n}\n\nif (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initVariantSelector);\n} else {\n    initVariantSelector();\n}\n"],
  "mappings": "MAQA,SAASA,GAAsB,CAC3B,IAAMC,EAAK,SAAS,eAAe,cAAc,EACjD,GAAI,CAACA,EAAI,OAET,IAAMC,EAAW,KAAK,MAAMD,EAAG,WAAW,EACpCE,EAAc,SAAS,iBAAiB,mBAAmB,EAC3DC,EAAe,SAAS,iBAAiB,oBAAoB,EAC7DC,EAAe,SAAS,eAAe,eAAe,EACtDC,EAAW,SAAS,eAAe,mBAAmB,EACtDC,EAAa,SAAS,eAAe,qBAAqB,EAC1DC,EAAY,SAAS,eAAe,oBAAoB,EAE1DC,EAAe,KACfC,EAAgB,KAGhBP,EAAY,OAAS,IACrBA,EAAY,CAAC,EAAE,UAAU,IAAI,QAAQ,EACrCM,EAAeN,EAAY,CAAC,EAAE,QAAQ,OAEtCC,EAAa,OAAS,IACtBA,EAAa,CAAC,EAAE,UAAU,IAAI,QAAQ,EACtCM,EAAgBN,EAAa,CAAC,EAAE,QAAQ,OAG5C,SAASO,GAAa,CAClB,MAAI,CAACF,GAAgB,CAACC,EAAsB,KACrCR,EAAS,KAAKU,GAAKA,EAAE,OAASH,GAAgBG,EAAE,QAAUF,CAAa,GAAK,IACvF,CAEA,SAASG,GAAqB,CAE1B,GAAIJ,EAAc,CACd,IAAMK,EAAkB,IAAI,IACxBZ,EAAS,OAAOU,GAAKA,EAAE,OAASH,CAAY,EAAE,IAAIG,GAAKA,EAAE,KAAK,CAClE,EAKA,GAJAR,EAAa,QAAQW,GAAO,CACxBA,EAAI,SAAW,CAACD,EAAgB,IAAIC,EAAI,QAAQ,KAAK,CACzD,CAAC,EAEGL,GAAiB,CAACI,EAAgB,IAAIJ,CAAa,EAAG,CACtD,IAAMM,EAAe,MAAM,KAAKZ,CAAY,EAAE,KAAKa,GAAK,CAACA,EAAE,QAAQ,EACnEb,EAAa,QAAQa,GAAKA,EAAE,UAAU,OAAO,QAAQ,CAAC,EAClDD,GACAA,EAAa,UAAU,IAAI,QAAQ,EACnCN,EAAgBM,EAAa,QAAQ,OAErCN,EAAgB,IAExB,CACJ,CAGA,GAAIA,EAAe,CACf,IAAMQ,EAAiB,IAAI,IACvBhB,EAAS,OAAOU,GAAKA,EAAE,QAAUF,CAAa,EAAE,IAAIE,GAAKA,EAAE,IAAI,CACnE,EAKA,GAJAT,EAAY,QAAQY,GAAO,CACvBA,EAAI,SAAW,CAACG,EAAe,IAAIH,EAAI,QAAQ,KAAK,CACxD,CAAC,EAEGN,GAAgB,CAACS,EAAe,IAAIT,CAAY,EAAG,CACnD,IAAMO,EAAe,MAAM,KAAKb,CAAW,EAAE,KAAKc,GAAK,CAACA,EAAE,QAAQ,EAClEd,EAAY,QAAQc,GAAKA,EAAE,UAAU,OAAO,QAAQ,CAAC,EACjDD,GACAA,EAAa,UAAU,IAAI,QAAQ,EACnCP,EAAeO,EAAa,QAAQ,OAEpCP,EAAe,IAEvB,CACJ,CACJ,CAEA,SAASU,GAAgB,CACrB,IAAMC,EAAUT,EAAW,EAE3B,GAAI,CAACS,EAAS,CACVf,EAAa,YAAc,gBAC3BE,EAAW,SAAW,GACtBA,EAAW,YAAc,cACrBC,IAAWA,EAAU,YAAc,IACvC,MACJ,CAEAH,EAAa,YAAce,EAAQ,cACnCd,EAAS,OAASc,EAAQ,QAEtBA,EAAQ,SACRb,EAAW,SAAW,GACtBA,EAAW,YAAc,gBACzBA,EAAW,UAAY,8BACvBD,EAAS,OAASc,EAAQ,YACnBA,EAAQ,MAAQ,GACvBb,EAAW,SAAW,GACtBA,EAAW,YAAc,cACzBA,EAAW,UAAY,8BAEvBA,EAAW,SAAW,GACtBA,EAAW,YAAc,eACzBA,EAAW,UAAY,+BAGvBC,IACIY,EAAQ,MAAQ,GAAKA,EAAQ,OAAS,EACtCZ,EAAU,YAAc,QAAQY,EAAQ,KAAK,QAE7CZ,EAAU,YAAc,IAIhC,IAAMa,EAAkB,SAAS,eAAe,kBAAkB,EAClE,GAAIA,EAAiB,CACjB,IAAMC,EAAiB,SAAS,cAAc,2BAA2B,EACnEC,EAAaD,GAAkBA,EAAe,QAAQ,WAAa,OACzED,EAAgB,MAAM,QAAUE,EAAa,GAAK,MACtD,CACJ,CAEApB,EAAY,QAAQY,GAAO,CACvBA,EAAI,iBAAiB,QAAS,IAAM,CAC5BA,EAAI,WACRZ,EAAY,QAAQc,GAAKA,EAAE,UAAU,OAAO,QAAQ,CAAC,EACrDF,EAAI,UAAU,IAAI,QAAQ,EAC1BN,EAAeM,EAAI,QAAQ,MAC3BF,EAAmB,EACnBM,EAAc,EAClB,CAAC,CACL,CAAC,EAEDf,EAAa,QAAQW,GAAO,CACxBA,EAAI,iBAAiB,QAAS,IAAM,CAC5BA,EAAI,WACRX,EAAa,QAAQa,GAAKA,EAAE,UAAU,OAAO,QAAQ,CAAC,EACtDF,EAAI,UAAU,IAAI,QAAQ,EAC1BL,EAAgBK,EAAI,QAAQ,MAC5BF,EAAmB,EACnBM,EAAc,EAClB,CAAC,CACL,CAAC,EAEDN,EAAmB,EACnBM,EAAc,CAClB,CAEI,SAAS,aAAe,UACxB,SAAS,iBAAiB,mBAAoBnB,CAAmB,EAEjEA,EAAoB",
  "names": ["initVariantSelector", "el", "variants", "sizeButtons", "frameButtons", "priceDisplay", "cartForm", "cartButton", "stockNote", "selectedSize", "selectedFrame", "getVariant", "v", "updateAvailability", "availableFrames", "btn", "firstEnabled", "b", "availableSizes", "updateDisplay", "variant", "unframedWarning", "activeFrameBtn", "isUnframed"]
}
