{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/neckle-ownprint-bridge.js?rev=20260901-1"],
  "sourcesContent": ["/*\n * Mostek zgodnosci dla bledu Buyer Personalization OwnPrint.\n *\n * TO JEST OBEJSCIE BLEDU, NIE ARCHITEKTURA PERSONALIZACJI.\n * Szczegoly bledu: neckle/OWNPRINT_BUG_KAFLE_CHECKBOX_2026-08-22.md\n *\n * Aplikacja OwnPrint renderuje trzy typy kontrolek, ale w wydanym\n * personalization.js obsluguje tylko swatche. data-ownprint-tile\n * i data-ownprint-checkbox nie maja ZADNEJ obslugi - klikanie ich nic nie robi,\n * wiec klient nie moze wybrac kamienia ani grawerunku, a wariant Shopify\n * i cena zostaja na wartosciach domyslnych.\n *\n * Mostek ustawia wartosc na ukrytym inpucie OwnPrint i wysyla 'change'. Cala\n * reszta - rozwiazanie wariantu, przeliczenie ceny, odsloniecie pola\n * warunkowego - dzieje sie w ICH wlasnym kodzie. Dodatkowo duza siatka\n * birthstone jest progresywnie chowana w dostepnym akordeonie. Nie znamy\n * i nie wymyslamy nazw wariantow: wartosci i etykiety czytamy z DOM OwnPrint.\n *\n * Samowylaczanie: mostek dziala jako WYPELNIACZ LUKI, nie jako przechwytywacz.\n * Po kliknieciu czeka jeden tick i dziala tylko wtedy, gdy nikt nie zmienil\n * wartosci. Gdy OwnPrint naprawi swoj handler, mostek po prostu nigdy nie\n * wejdzie w akcje - bez sprawdzania wersji skryptu, ktore byloby kruche.\n */\n(() => {\n  const root = document.querySelector('[data-ownprint-personalization]');\n  if (!root) return;\n\n  // Ten mostek na biezaco podmienia tekst w tym korzeniu (patrz nizej). Jesli\n  // przegladarka gosc rownolegle wlaczy wlasne auto-tlumaczenie (np. Chrome\n  // Translate na PL stronie dla gosc z EN), oba mechanizmy walcza o ten sam\n  // DOM - migotanie albo hybrydowy tekst. Wylaczamy auto-tlumaczenie tylko\n  // tutaj, nie na calej stronie - reszta motywu (w tym przyszle EN) ma dzialac\n  // normalnie z natywnymi tlumaczeniami Shopify Markets.\n  root.setAttribute('translate', 'no');\n  root.classList.add('notranslate');\n\n  const POLE = '.ownprint-personalization__field';\n\n  const i18nNode = document.querySelector('[data-neckle-product-i18n]');\n  let i18n = {};\n  try { i18n = i18nNode ? JSON.parse(i18nNode.textContent) : {}; } catch (error) { i18n = {}; }\n  const tekst = (key, fallback) => i18n[key] || fallback;\n  const wstaw = (template, token, value) => template.replace(token, value);\n  const isEnglish = (document.documentElement.lang || '').toLowerCase().startsWith('en');\n\n  // T\u0142umaczymy wy\u0142\u0105cznie widoczne w\u0119z\u0142y tekstowe. Warto\u015Bci input\u00F3w, nazwy\n  // opcji, warianty i line-item properties pozostaj\u0105 dok\u0142adnie takie, jak\n  // zwraca je OwnPrint \u2014 dzi\u0119ki temu copy jest polskie bez naruszania kontraktu.\n  const tlumaczeniaWidocznegoTekstu = isEnglish ? [\n    [/Tekst (?:graweru|napisu) z ty\u0142u/gi, 'Back engraving text'],\n    [/bez graweru z ty\u0142u/gi, 'Without back engraving'],\n    [/z grawerem z ty\u0142u/gi, 'With back engraving'],\n    [/(?:Grawer|Napis) z ty\u0142u/gi, 'Back engraving'],\n    [/Kamie\u0144 urodzeniowy/gi, 'Birthstone'],\n    [/Zdj\u0119cie pupila/gi, 'Pet photo'],\n    [/Imi\u0119 pupila/gi, 'Pet name'],\n    [/Wyko\u0144czenie|Plating/gi, 'Finish'],\n    [/Pasek/gi, 'Band color'],\n    [/18k R\u00F3\u017Cowe|R\u00F3\u017Cowe z\u0142oto 18K|18K Rose Gold Plated/gi, '18k Rose Gold Plated'],\n    [/18k Z\u0142ote|Z\u0142ote 18K/gi, '18k Gold Plated'],\n    [/Srebrna Stal|Srebne|Silver Steel/gi, 'Silver'],\n    [/Br\u0105zowy pasek|Brown Leather/gi, 'Brown'],\n    [/Czarny pasek|Black Leather/gi, 'Black'],\n    [/Opcjonalnie/gi, 'Optional'],\n    [/^\\s*Tak\\s*$/gi, 'Yes'],\n    [/Stycze\u0144/gi, 'January'],\n    [/Luty/gi, 'February'],\n    [/Marzec/gi, 'March'],\n    [/Kwiecie\u0144/gi, 'April'],\n    [/Maj/gi, 'May'],\n    [/Czerwiec/gi, 'June'],\n    [/Lipiec/gi, 'July'],\n    [/Sierpie\u0144/gi, 'August'],\n    [/Wrzesie\u0144/gi, 'September'],\n    [/Pa\u017Adziernik/gi, 'October'],\n    [/Listopad/gi, 'November'],\n    [/Grudzie\u0144/gi, 'December'],\n  ] : [\n    [/Pet name/gi, 'Imi\\u0119 pupila'],\n    [/18K Rose Gold Plated/gi, 'R\u00F3\u017Cowe z\u0142oto 18K'],\n    [/18k Gold Plated/gi, 'Z\u0142ote 18K'],\n    [/Silver Steel/gi, 'Srebrna stal'],\n    [/Without back engraving/gi, 'Bez graweru z ty\u0142u'],\n    [/With back engraving/gi, 'Z grawerem z ty\u0142u'],\n    [/Back engraving/gi, 'Grawer z ty\u0142u'],\n    [/Birthstone/gi, 'Kamie\u0144 urodzeniowy'],\n    [/Pet photo/gi, 'Zdj\u0119cie pupila'],\n    [/Plating/gi, 'Wyko\u0144czenie'],\n    [/Optional/gi, 'Opcjonalnie'],\n    [/^\\s*Yes\\s*$/gi, 'Tak'],\n  ];\n\n  const przetlumaczWidoczneTeksty = () => {\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    let node = walker.nextNode();\n    while (node) {\n      const parent = node.parentElement;\n      if (parent && !parent.closest('script,style,select,option')) {\n        let tekst = node.nodeValue;\n        tlumaczeniaWidocznegoTekstu.forEach(([wzorzec, zamiana]) => { tekst = tekst.replace(wzorzec, zamiana); });\n        if (tekst !== node.nodeValue) node.nodeValue = tekst;\n      }\n      node = walker.nextNode();\n    }\n  };\n\n  // Ukryty input OwnPrint sterujacy opcja wariantu dla danego pola. Ten sam\n  // element niesie data-ownprint-option-name oraz wartosci on/off checkboxa,\n  // wiec nie trzeba zgadywac powiazania grupa -> opcja.\n  const inputOpcji = (el) => el.closest(POLE)?.querySelector('[data-ownprint-option-name]') || null;\n\n  const ustaw = (input, wartosc) => {\n    if (!input || input.value === wartosc) return false;\n    input.value = wartosc;\n    // Pod 'change' podpiete sa ich apply() (wariant + cena) i evaluate()\n    // (pola warunkowe). To jedyne, czego mostek potrzebuje.\n    input.dispatchEvent(new Event('change', { bubbles: true }));\n    return true;\n  };\n\n  // Uzupelnij dopiero, gdy okaze sie, ze OwnPrint tego nie zrobil.\n  const uzupelnijGdyLuka = (input, oczekiwana) => {\n    if (!input) return;\n    const przed = input.value;\n    window.setTimeout(() => {\n      if (input.value !== przed) return; // OwnPrint zadzialal sam - nie wchodzimy\n      ustaw(input, oczekiwana);\n    }, 0);\n  };\n\n  const podepnijKafle = () => {\n    root.querySelectorAll('[data-ownprint-tile]').forEach((kafel) => {\n      if (kafel.dataset.neckleBridge) return;\n      kafel.dataset.neckleBridge = '1';\n      kafel.addEventListener('click', () => {\n        const wartosc = kafel.getAttribute('data-ownprint-tile');\n        if (!wartosc) return;\n        const grupa = kafel.closest('[data-ownprint-tile-group]');\n        uzupelnijGdyLuka(inputOpcji(kafel), wartosc);\n        // Stan wizualny grupy - OwnPrint tez go nie ustawia.\n        window.setTimeout(() => {\n          if (!grupa) return;\n          grupa.querySelectorAll('[data-ownprint-tile]').forEach((k) => {\n            const aktywny = k === kafel;\n            k.setAttribute('aria-checked', String(aktywny));\n            k.classList.toggle('is-selected', aktywny);\n          });\n        }, 0);\n      });\n    });\n  };\n\n  const podepnijAkordeonKamieni = () => {\n    root.querySelectorAll('[data-ownprint-tile-group]').forEach((grupa) => {\n      if (grupa.closest('[data-neckle-birthstone-accordion]')) return;\n      const input = inputOpcji(grupa);\n      if (input?.getAttribute('data-ownprint-option-name')?.toLowerCase() !== 'birthstone') return;\n\n      const kafle = [...grupa.querySelectorAll('[data-ownprint-tile]')];\n      if (!kafle.length) return;\n\n      const pole = grupa.closest(POLE);\n      const etykieta = pole?.querySelector('.ownprint-personalization__label');\n      if (!pole || !etykieta) return;\n\n      const akordeon = document.createElement('details');\n      akordeon.className = 'neckle-birthstone-accordion';\n      akordeon.setAttribute('data-neckle-birthstone-accordion', '');\n\n      const naglowek = document.createElement('summary');\n      naglowek.className = 'neckle-birthstone-accordion__summary';\n      const tytul = document.createElement('span');\n      tytul.className = 'neckle-birthstone-accordion__title';\n      tytul.textContent = etykieta.textContent.replace(/\\s+/g, ' ').trim();\n      const wybor = document.createElement('span');\n      wybor.className = 'neckle-birthstone-accordion__value';\n      wybor.setAttribute('data-neckle-birthstone-value', '');\n      wybor.setAttribute('role', 'status');\n      wybor.setAttribute('aria-live', 'polite');\n      const miniatura = document.createElement('img');\n      miniatura.className = 'neckle-birthstone-accordion__thumbnail';\n      miniatura.alt = '';\n      miniatura.width = 28;\n      miniatura.height = 28;\n      miniatura.hidden = true;\n      const wyborTekst = document.createElement('span');\n      wybor.append(miniatura, wyborTekst);\n      naglowek.append(tytul, wybor);\n      akordeon.appendChild(naglowek);\n\n      const pokazWybor = () => {\n        kafle.forEach((kafel) => {\n          const aktywny = kafel.getAttribute('data-ownprint-tile') === input.value;\n          kafel.setAttribute('aria-checked', String(aktywny));\n          kafel.classList.toggle('is-selected', aktywny);\n          if (aktywny) {\n            const nazwa = kafel.getAttribute('title')\n              || kafel.querySelector('.ownprint-personalization__tile-name')?.textContent?.trim()\n              || input.value;\n            const potwierdzony = akordeon.dataset.neckleConfirmed === 'true';\n            const grafika = kafel.querySelector('.ownprint-personalization__tile-img');\n            wyborTekst.textContent = potwierdzony\n              ? wstaw(tekst('selected', 'Wybrano: __VALUE__'), '__VALUE__', nazwa)\n              : nazwa;\n            if (potwierdzony && grafika?.src) {\n              miniatura.src = grafika.src;\n              miniatura.hidden = false;\n            } else {\n              miniatura.removeAttribute('src');\n              miniatura.hidden = true;\n            }\n          }\n        });\n      };\n\n      input.addEventListener('change', pokazWybor);\n      grupa.addEventListener('click', (event) => {\n        if (!(event.target instanceof Element) || !event.target.closest('[data-ownprint-tile]')) return;\n        window.setTimeout(() => {\n          akordeon.dataset.neckleConfirmed = 'true';\n          akordeon.classList.add('is-confirmed');\n          pokazWybor();\n          akordeon.open = false;\n        }, 0);\n      });\n\n      pole.before(akordeon);\n      akordeon.appendChild(pole);\n      pokazWybor();\n    });\n  };\n\n  const odswiezStanGraweru = (cb) => {\n    const pole = cb.closest('.neckle-engraving-field');\n    if (!pole) return;\n    const stan = pole.querySelector('[data-neckle-engraving-state]');\n    pole.classList.toggle('is-enabled', cb.checked);\n    const tekstStanu = cb.checked ? tekst('added', 'Dodano') : tekst('optional', 'Opcjonalnie');\n    if (stan && stan.textContent !== tekstStanu) stan.textContent = tekstStanu;\n  };\n\n  const polaczPoleGraweru = (cb) => {\n    const pole = cb.closest(POLE);\n    const input = inputOpcji(cb);\n    const nazwaOpcji = input?.getAttribute('data-ownprint-option-name')?.trim().toLowerCase();\n    if (!pole || !nazwaOpcji) return;\n\n    // OwnPrint nie musi renderowac pola warunkowego obok checkboxa. Laczymy je\n    // po kontrakcie opcji, a nie po polozeniu w drzewie DOM.\n    const poleWarunkowe = [...root.querySelectorAll('[data-ownprint-conditional]')].find((kandydat) => (\n      kandydat.getAttribute('data-ownprint-when-option')?.trim().toLowerCase() === nazwaOpcji\n    ));\n    if (!poleWarunkowe) return;\n\n    pole.classList.add('neckle-engraving-field');\n    poleWarunkowe.classList.add('neckle-engraving-field__conditional');\n    if (poleWarunkowe.parentElement !== pole) pole.appendChild(poleWarunkowe);\n\n    const etykieta = cb.closest('.ownprint-personalization__check')\n      ?.querySelector('.ownprint-personalization__check-label');\n    if (['tak', 'yes'].includes(etykieta?.textContent.trim().toLowerCase())) {\n      etykieta.textContent = tekst('addEngraving', 'Dodaj grawer');\n    }\n\n    let stan = pole.querySelector('[data-neckle-engraving-state]');\n    if (!stan) {\n      stan = document.createElement('span');\n      stan.className = 'neckle-engraving-field__state';\n      stan.setAttribute('data-neckle-engraving-state', '');\n      stan.setAttribute('aria-live', 'polite');\n      cb.closest('.ownprint-personalization__check')?.appendChild(stan);\n    }\n    odswiezStanGraweru(cb);\n  };\n\n  const podepnijCheckboxy = () => {\n    root.querySelectorAll('[data-ownprint-checkbox]').forEach((cb) => {\n      polaczPoleGraweru(cb);\n      if (cb.dataset.neckleBridge) return;\n      cb.dataset.neckleBridge = '1';\n      cb.addEventListener('change', () => {\n        odswiezStanGraweru(cb);\n        const input = inputOpcji(cb);\n        if (!input) return;\n        const wartosc = cb.checked\n          ? input.getAttribute('data-ownprint-checkbox-on')\n          : input.getAttribute('data-ownprint-checkbox-off');\n        if (wartosc == null) return;\n        uzupelnijGdyLuka(input, wartosc);\n      });\n    });\n  };\n\n  const skanuj = () => { przetlumaczWidoczneTeksty(); podepnijKafle(); podepnijAkordeonKamieni(); podepnijCheckboxy(); };\n  skanuj();\n  new MutationObserver(skanuj).observe(root, { childList: true, subtree: true });\n\n  /* ---------------- Walidacja przed dodaniem do koszyka (fail closed) ----------------\n     Nasz motyw przechwytuje submit na window w fazie capture ze\n     stopImmediatePropagation(), wiec initCartSubmit OwnPrint - a w nim ICH\n     walidacja data-ownprint-required - nigdy sie nie wykonuje. Bez tego mostek\n     odslonilby pole graweru, klient moglby zostawic je puste, a zamowienie\n     przeszloby z wariantem \"With back engraving\" i pustym tekstem. To byloby\n     gorsze niz blad, ktory naprawiamy. */\n\n  const daneWariantow = () => {\n    try {\n      const node = root.querySelector('[data-ownprint-variant-data]');\n      return node ? JSON.parse(node.textContent) : null;\n    } catch (e) { return null; }\n  };\n\n  const widoczne = (el) => !!(el.offsetParent || el.getClientRects().length);\n\n  // OwnPrint oznacza \"wymagane\" niespojnie miedzy polami: pole graweru dostaje\n  // ich wlasny atrybut data-ownprint-required, ale np. zdjecie pupila i imie\n  // pupila maja tylko natywny HTML required. Ich input nie jest w naszym\n  // <form> (jest osobnym elementem w buy-boxie), wiec natywna walidacja\n  // przegladarki i tak by go nie zlapala - musimy sprawdzic oba warianty sami.\n  const WYMAGANE_SELEKTOR = '[data-ownprint-required], [required]';\n\n  // Pole graweru rozpoznajemy po kontrakcie opcji OwnPrint (data-ownprint-when-option\n  // zawiera \"engraving\"), a nie po klasie dodawanej przez polaczPoleGraweru - dzieki\n  // temu komunikat dziala nawet, gdyby kolejnosc laczenia pol kiedys sie zmienila.\n  const jestPoleGraweru = (pole) => {\n    const opcja = pole.closest('[data-ownprint-conditional]')\n      ?.getAttribute('data-ownprint-when-option')?.trim().toLowerCase();\n    return !!opcja && opcja.includes('engraving');\n  };\n\n  const wiadomoscDlaPola = (pole) => {\n    if (pole.type === 'file') return tekst('addPhoto', 'Dodaj zdj\u0119cie pupila.');\n    if (jestPoleGraweru(pole)) return tekst('enterBackEngraving', 'Wpisz tekst graweru z ty\u0142u.');\n    const etykieta = pole.closest(POLE)?.querySelector('.ownprint-personalization__label')?.textContent;\n    return wstaw(\n      tekst('completeField', 'Uzupe\u0142nij pole: __FIELD__.'),\n      '__FIELD__',\n      (etykieta || tekst('required', 'wymagane')).replace('*', '').trim(),\n    );\n  };\n\n  const problemy = () => {\n    const lista = [];\n\n    // 1) Pola wymagane, ktore sa realnie widoczne dla klienta.\n    root.querySelectorAll(WYMAGANE_SELEKTOR).forEach((pole) => {\n      if (!widoczne(pole)) return;\n      const pusty = pole.type === 'file' ? !(pole.files && pole.files.length) : !String(pole.value || '').trim();\n      if (pusty) lista.push({ pole, wiadomosc: wiadomoscDlaPola(pole) });\n    });\n\n    // 2) Wybrana kombinacja musi odpowiadac istniejacemu wariantowi Shopify.\n    const dane = daneWariantow();\n    const idInput = document.querySelector('form[action*=\"/cart/add\"] [name=\"id\"]');\n    if (dane && Array.isArray(dane.variants) && idInput) {\n      const istnieje = dane.variants.some((v) => String(v.id) === String(idInput.value));\n      if (!istnieje) lista.push({\n        pole: null,\n        wiadomosc: tekst('combinationUnavailable', 'Wybrana kombinacja opcji jest niedost\u0119pna.'),\n      });\n    }\n    return lista;\n  };\n\n  // Czerwone oznaczenie brakujacego pola - dokladamy je do calego wrappera\n  // OwnPrint (etykieta + input), zeby bylo widoczne niezaleznie od typu pola.\n  const oznaczBledy = (lista) => {\n    const bledne = new Set(lista.map((problem) => problem.pole).filter(Boolean));\n    root.querySelectorAll(WYMAGANE_SELEKTOR).forEach((pole) => {\n      const bledny = bledne.has(pole);\n      const wrapper = pole.closest(POLE) || pole.closest('[data-ownprint-conditional]');\n      wrapper?.classList.toggle('is-invalid', bledny);\n      pole.classList.toggle('is-invalid', bledny);\n      // Pole zdjecia jest wizualnie ukryte pod dropzone'em (neckle-dropzone.js) -\n      // czerwone oznaczenie musi trafic na widoczny trigger, nie na sam input.\n      pole.closest('.neckle-dropzone')?.querySelector('.neckle-dropzone__trigger')\n        ?.classList.toggle('is-invalid', bledny);\n      if (bledny) pole.setAttribute('aria-invalid', 'true');\n      else pole.removeAttribute('aria-invalid');\n    });\n  };\n\n  const pokazBledy = (lista) => {\n    oznaczBledy(lista);\n\n    let box = root.querySelector('[data-neckle-bridge-error]');\n    if (!box) {\n      box = document.createElement('p');\n      box.setAttribute('data-neckle-bridge-error', '');\n      box.setAttribute('role', 'alert');\n      box.className = 'neckle-bridge-error';\n      root.appendChild(box);\n    }\n    const tekst = lista.map((problem) => problem.wiadomosc).join(' ');\n    box.textContent = tekst;\n    box.hidden = !tekst;\n\n    // Przewin i ustaw fokus na pierwszym brakujacym polu; gdy blokuje tylko\n    // niedostepna kombinacja wariantu (bez konkretnego pola), przewin do komunikatu.\n    const pierwszePole = lista.find((problem) => problem.pole)?.pole;\n    if (pierwszePole) {\n      pierwszePole.scrollIntoView({ block: 'center', behavior: 'smooth' });\n      pierwszePole.focus({ preventScroll: true });\n    } else if (tekst) {\n      box.scrollIntoView({ block: 'center', behavior: 'smooth' });\n    }\n  };\n\n  // Po pierwszej zablokowanej probie wysylki sledzimy uzupelnianie pol na biezaco,\n  // zeby komunikat i czerwone oznaczenie znikaly same, gdy klient poprawi dane -\n  // bez czekania na kolejne klikni\u0119cie \"Dodaj do koszyka\".\n  let probowanoWyslac = false;\n  const przewalidujNaZywo = () => {\n    if (!probowanoWyslac) return;\n    pokazBledy(problemy());\n  };\n  root.addEventListener('input', przewalidujNaZywo);\n  root.addEventListener('change', przewalidujNaZywo);\n\n  const strazSubmitu = (event) => {\n    const cel = event.target;\n    if (!(cel instanceof Element)) return;\n    const dotyczyZakupu = cel.closest('[data-add-to-cart]') || cel.matches('form[action*=\"/cart/add\"]');\n    if (!dotyczyZakupu) return;\n\n    const lista = problemy();\n    if (!lista.length) { pokazBledy([]); return; }\n\n    // Fail closed: blokujemy zakup zamiast dopuscic bledne zamowienie.\n    probowanoWyslac = true;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    pokazBledy(lista);\n  };\n\n  // Capture na window i wczesniejsza rejestracja niz neckle-product.js sprawiaja,\n  // ze straz ma szanse zatrzymac submit, zanim motyw wykona wlasny POST.\n  window.addEventListener('click', strazSubmitu, true);\n  window.addEventListener('submit', strazSubmitu, true);\n})();\n"],
  "mappings": "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",
  "names": ["tekst"]
}
