{
  "version": 3,
  "sources": ["/cdn/shop/t/26/assets/giclee-pdp-emergency-fix.js?giclee_v=emergency-pdp-20260623-2308"],
  "sourcesContent": ["// @ts-nocheck\r\n(function () {\r\n  if (window.__GICLEE_PDP_EMERGENCY_FIX__) return;\r\n  window.__GICLEE_PDP_EMERGENCY_FIX__ = true;\r\n\r\n  const STRIKE =\r\n    '<svg viewBox=\"0 0 100 46\" preserveAspectRatio=\"xMidYMid slice\" class=\"variant-option__strikethrough\" aria-hidden=\"true\"><line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"46\" vector-effect=\"non-scaling-stroke\"></line><line x1=\"100\" y1=\"0\" x2=\"0\" y2=\"46\" vector-effect=\"non-scaling-stroke\"></line></svg>';\r\n\r\n  let productPromise = null;\r\n\r\n  function norm(value) {\r\n    return String(value || \"\")\r\n      .normalize(\"NFC\")\r\n      .trim()\r\n      .toLowerCase()\r\n      .replace(/\u0105/g, \"a\")\r\n      .replace(/\u0119/g, \"e\")\r\n      .replace(/\u00F3/g, \"o\")\r\n      .replace(/\u0142/g, \"l\")\r\n      .replace(/\u0144/g, \"n\")\r\n      .replace(/\u015B/g, \"s\")\r\n      .replace(/\u017A/g, \"z\")\r\n      .replace(/\u017C/g, \"z\");\r\n  }\r\n\r\n  function kind(name) {\r\n    const n = norm(name);\r\n    if (n.includes(\"passe\")) return \"skip\";\r\n    if (n.includes(\"kolor\")) return \"color\";\r\n    if (n.includes(\"rozmiar\")) return \"size\";\r\n    if (n.includes(\"drewn\")) return \"wood\";\r\n    return \"other\";\r\n  }\r\n\r\n  function productHandlePath() {\r\n    const match = window.location.pathname.match(/^(.*\\/products\\/[^/?#]+)\\/?$/);\r\n    return match ? match[1] : null;\r\n  }\r\n\r\n  async function loadProduct() {\r\n    if (window.__GICLEE_PDP_PRODUCT__?.variants?.length) return window.__GICLEE_PDP_PRODUCT__;\r\n    if (productPromise) return productPromise;\r\n\r\n    const path = productHandlePath();\r\n    if (!path) return null;\r\n\r\n    productPromise = fetch(path + \".js\", { headers: { Accept: \"application/json\" } })\r\n      .then((response) => {\r\n        if (!response.ok) throw new Error(\"Product JSON unavailable\");\r\n        return response.json();\r\n      })\r\n      .then((product) => {\r\n        const normalized = {\r\n          id: product.id,\r\n          optionNames: product.options || [],\r\n          variants: (product.variants || []).map((variant) => ({\r\n            id: variant.id,\r\n            available: variant.available,\r\n            price: variant.price,\r\n            compare_at_price: variant.compare_at_price,\r\n            options: [variant.option1, variant.option2, variant.option3].filter(Boolean),\r\n          })),\r\n        };\r\n        window.__GICLEE_PDP_PRODUCT__ = normalized;\r\n        return normalized;\r\n      })\r\n      .catch((err) => {\r\n        console.warn(\"giclee emergency PDP fix: product fetch failed\", err);\r\n        return null;\r\n      });\r\n\r\n    return productPromise;\r\n  }\r\n\r\n  function patchVariantPickerClass() {\r\n    const VariantPicker = customElements.get(\"variant-picker\");\r\n    if (!VariantPicker || VariantPicker.prototype.__gicleePatched) return;\r\n\r\n    Object.defineProperty(VariantPicker.prototype, \"__gicleePatched\", { value: true });\r\n    Object.defineProperty(VariantPicker.prototype, \"selectedOption\", {\r\n      get() {\r\n        const selected = this.querySelector(\r\n          'select option[selected], fieldset[data-fieldset-index] input:checked'\r\n        );\r\n        return selected instanceof HTMLInputElement || selected instanceof HTMLOptionElement ? selected : undefined;\r\n      },\r\n    });\r\n    Object.defineProperty(VariantPicker.prototype, \"selectedOptionId\", {\r\n      get() {\r\n        return this.selectedOption?.dataset?.optionValueId;\r\n      },\r\n    });\r\n    Object.defineProperty(VariantPicker.prototype, \"selectedOptionsValues\", {\r\n      get() {\r\n        return Array.from(\r\n          this.querySelectorAll('select option[selected], fieldset[data-fieldset-index] input:checked')\r\n        )\r\n          .map((option) => option.dataset.optionValueId)\r\n          .filter(Boolean);\r\n      },\r\n    });\r\n  }\r\n\r\n  function optionKindForFieldset(fieldset, data) {\r\n    const index = Number.parseInt(fieldset.getAttribute(\"data-fieldset-index\") || \"\", 10);\r\n    const byIndex = Number.isNaN(index) ? \"\" : data.optionNames?.[index] || \"\";\r\n    const legend = fieldset.querySelector(\"legend\")?.textContent || \"\";\r\n    return kind(byIndex || legend);\r\n  }\r\n\r\n  function readSelection(picker, data) {\r\n    const out = { color: null, size: null, wood: null };\r\n    picker.querySelectorAll(\"fieldset[data-fieldset-index]\").forEach((fieldset) => {\r\n      const k = optionKindForFieldset(fieldset, data);\r\n      const checked = fieldset.querySelector(\"input[type='radio']:checked\");\r\n      if (!checked || k === \"skip\" || k === \"other\") return;\r\n      out[k] = checked.value;\r\n    });\r\n    return out;\r\n  }\r\n\r\n  function resolveVariant(data, selected) {\r\n    if (!selected.color || !selected.size || !selected.wood) return null;\r\n    return data.variants.find((variant) => {\r\n      if (variant.available === false) return false;\r\n      return (variant.options || []).every((value, index) => {\r\n        const k = kind(data.optionNames?.[index] || \"\");\r\n        if (k === \"skip\" || k === \"other\") return true;\r\n        if (k === \"color\") return norm(value) === norm(selected.color);\r\n        if (k === \"size\") return norm(value) === norm(selected.size);\r\n        if (k === \"wood\") return norm(value) === norm(selected.wood);\r\n        return true;\r\n      });\r\n    });\r\n  }\r\n\r\n  function setAvailable(input, available) {\r\n    const label = input.closest(\"label\");\r\n    input.dataset.optionAvailable = available ? \"true\" : \"false\";\r\n    if (available) {\r\n      input.removeAttribute(\"aria-disabled\");\r\n      label?.style.removeProperty(\"pointer-events\");\r\n      label?.querySelector(\".variant-option__strikethrough\")?.remove();\r\n      return;\r\n    }\r\n\r\n    input.setAttribute(\"aria-disabled\", \"true\");\r\n    if (label) {\r\n      label.style.pointerEvents = \"none\";\r\n      if (!label.querySelector(\".variant-option__strikethrough\")) {\r\n        label.insertAdjacentHTML(\"beforeend\", STRIKE);\r\n      }\r\n    }\r\n    input.checked = false;\r\n  }\r\n\r\n  function syncColors(picker, data, selected) {\r\n    const colorFieldset = Array.from(picker.querySelectorAll(\"fieldset[data-fieldset-index]\")).find(\r\n      (fieldset) => optionKindForFieldset(fieldset, data) === \"color\"\r\n    );\r\n    if (!colorFieldset) return selected;\r\n\r\n    const pine = norm(selected.wood).includes(\"sosna\");\r\n    colorFieldset.querySelectorAll(\"input[type='radio']\").forEach((input) => {\r\n      const available = pine\r\n        ? norm(input.value) === \"czarny\"\r\n        : Boolean(resolveVariant(data, { color: input.value, size: selected.size, wood: selected.wood }));\r\n      setAvailable(input, available);\r\n    });\r\n\r\n    if (pine && norm(selected.color) !== \"czarny\") {\r\n      const black = colorFieldset.querySelector(\"input[value='Czarny'], input[value='czarny']\");\r\n      if (black) {\r\n        black.checked = true;\r\n        selected = { ...selected, color: black.value };\r\n      }\r\n    }\r\n\r\n    return selected;\r\n  }\r\n\r\n  function money(cents) {\r\n    if (cents == null || !Number.isFinite(cents)) return \"\";\r\n    if (window.Shopify?.formatMoney) return window.Shopify.formatMoney(cents);\r\n    return (cents / 100).toLocaleString(\"pl-PL\", {\r\n      style: \"currency\",\r\n      currency: \"PLN\",\r\n      minimumFractionDigits: 0,\r\n      maximumFractionDigits: 2,\r\n    });\r\n  }\r\n\r\n  function updatePrice(variant, productId) {\r\n    const formatted = money(variant.price);\r\n    const roots = document.querySelectorAll(\r\n      `product-price[data-product-id=\"${productId}\"] [ref=\"priceContainer\"], .product-details [ref=\"priceContainer\"]`\r\n    );\r\n    roots.forEach((container) => {\r\n      const regular = container.querySelector(\".price__regular .price\");\r\n      if (regular) regular.textContent = formatted;\r\n      const lone = container.querySelector(\":scope > .price\");\r\n      if (lone && !regular) lone.textContent = formatted;\r\n    });\r\n  }\r\n\r\n  function updateVariantId(variant) {\r\n    document.querySelectorAll('product-form-component input[name=\"id\"], form input[name=\"id\"]').forEach((input) => {\r\n      input.value = String(variant.id);\r\n    });\r\n  }\r\n\r\n  async function syncPicker(picker) {\r\n    const data = await loadProduct();\r\n    if (!data?.variants?.length) return;\r\n\r\n    let selected = readSelection(picker, data);\r\n    selected = syncColors(picker, data, selected);\r\n    const variant = resolveVariant(data, selected);\r\n    if (!variant) return;\r\n\r\n    updatePrice(variant, data.id);\r\n    updateVariantId(variant);\r\n    const url = new URL(window.location.href);\r\n    url.searchParams.set(\"variant\", String(variant.id));\r\n    if (url.href !== window.location.href) history.replaceState({}, \"\", url.toString());\r\n  }\r\n\r\n  function bind() {\r\n    patchVariantPickerClass();\r\n    document.querySelectorAll(\"variant-picker\").forEach((picker) => syncPicker(picker));\r\n  }\r\n\r\n  customElements.whenDefined(\"variant-picker\").then(bind).catch(function () {});\r\n  document.addEventListener(\r\n    \"change\",\r\n    (event) => {\r\n      const target = event.target;\r\n      if (!(target instanceof HTMLElement)) return;\r\n      if (target.closest(\"[data-giclee-passepartout-picker]\")) return;\r\n      const picker = target.closest(\"variant-picker\");\r\n      if (picker) requestAnimationFrame(() => syncPicker(picker));\r\n    },\r\n    true\r\n  );\r\n\r\n  document.addEventListener(\r\n    \"click\",\r\n    (event) => {\r\n      const label = event.target instanceof Element ? event.target.closest(\"label\") : null;\r\n      const input = label?.querySelector(\"input[type='radio']\");\r\n      if (input?.getAttribute(\"aria-disabled\") === \"true\") {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        event.stopImmediatePropagation();\r\n      }\r\n    },\r\n    true\r\n  );\r\n  window.addEventListener(\"load\", bind);\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
