{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/neckle-product.js?rev=20260914-2"],
  "sourcesContent": ["(() => {\n  const section = document.querySelector('[data-product-section]');\n  const variantsNode = document.querySelector('[data-product-variants]');\n  if (!section || !variantsNode || section.dataset.initialized) return;\n  section.dataset.initialized = 'true';\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\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const variants = JSON.parse(variantsNode.textContent);\n  const form = section.querySelector('.neckle-pdp__form');\n  const variantInput = form?.querySelector('[data-variant-id]');\n  const price = section.querySelector('[data-product-price]');\n  const stickyPrice = document.querySelector('[data-sticky-price]');\n  const addButton = form?.querySelector('[data-add-to-cart]');\n  const addLabel = form?.querySelector('[data-add-to-cart-label]');\n  const addPrice = form?.querySelector('[data-add-to-cart-price]');\n  const stickyBar = document.querySelector('[data-mobile-atc]');\n  // OwnPrint nie renderuje formularza wewnatrz naszego data-ownprint-slot.\n  // Faktyczny widget jest wstrzykiwany jako osobny element w buy-boxie.\n  const personalizationRoot = document.querySelector('[data-ownprint-personalization]');\n  const personalizationMedallion = section.querySelector('[data-personalization-medallion]');\n  const currency = window.Shopify?.currency?.active || 'PLN';\n  let activeVariantAvailable = !addButton?.disabled;\n  let purchaseFeedbackActive = false;\n  let confirmationTimer;\n  let syncVariantMedia = () => {};\n  // OwnPrint can emit several DOM mutations after a selection. Keep the last\n  // handled variant separately so those follow-up events do not reset a\n  // customer's manual gallery position.\n  let activeVariantId = String(variantInput?.value || '');\n\n  const formatMoney = (cents) => new Intl.NumberFormat(document.documentElement.lang || 'pl-PL', {\n    style: 'currency',\n    currency,\n  }).format(cents / 100);\n\n  const updateVariantUI = (variant, updateUrl = true) => {\n    if (!variant || !variantInput) return;\n    const nextVariantId = String(variant.id);\n    const variantChanged = nextVariantId !== activeVariantId;\n    variantInput.value = variant.id;\n    activeVariantId = nextVariantId;\n    activeVariantAvailable = variant.available;\n    if (price) price.textContent = formatMoney(variant.price);\n    if (stickyPrice) stickyPrice.textContent = formatMoney(variant.price);\n    if (addPrice) addPrice.textContent = formatMoney(variant.price);\n    if (variantChanged) syncVariantMedia(variant);\n\n    if (updateUrl && variantChanged) {\n      const url = new URL(window.location.href);\n      url.searchParams.set('variant', variant.id);\n      window.history.replaceState({}, '', url);\n    }\n  };\n\n  const getVariantByInput = () => variants.find((variant) => String(variant.id) === String(variantInput?.value));\n\n  const syncNativeVariant = () => {\n    const selectedValues = [...section.querySelectorAll('[data-option-position].is-selected')]\n      .sort((first, second) => Number(first.dataset.optionPosition) - Number(second.dataset.optionPosition))\n      .map((button) => button.dataset.optionValue);\n    const variant = variants.find((item) => item.options.every((value, index) => value === selectedValues[index]));\n    if (!variant) return;\n    updateVariantUI(variant);\n    updatePurchaseState();\n  };\n\n  function updatePurchaseState() {\n    if (!addButton || !addLabel) return;\n    if (purchaseFeedbackActive) return;\n    addButton.disabled = !activeVariantAvailable;\n\n    if (!activeVariantAvailable) {\n      addLabel.textContent = tekst('unavailable', 'Chwilowo niedost\u0119pny');\n    } else {\n      addLabel.textContent = tekst('addToCart', 'Dodaj do koszyka');\n    }\n  }\n\n  section.querySelectorAll('[data-option-position]').forEach((button) => {\n    button.addEventListener('click', () => {\n      const position = button.dataset.optionPosition;\n      section.querySelectorAll(`[data-option-position=\"${position}\"]`).forEach((item) => {\n        item.classList.remove('is-selected');\n        item.setAttribute('aria-pressed', 'false');\n      });\n      button.classList.add('is-selected');\n      button.setAttribute('aria-pressed', 'true');\n      syncNativeVariant();\n    });\n  });\n\n  if (personalizationRoot) {\n    const syncPersonalizationConfirmations = () => {\n      personalizationRoot.querySelectorAll('.ownprint-personalization__input').forEach((input) => {\n        if (!(input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement)) return;\n        if (input instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'email'].includes(input.type)) return;\n        const field = input.closest('.ownprint-personalization__field');\n        if (!field) return;\n        const fieldName = field.querySelector('.ownprint-personalization__label')\n          ?.textContent?.replace('*', '').replace(/\\s+/g, ' ').trim() || tekst('textField', 'tekst');\n\n        let actions = field.querySelector('[data-neckle-field-actions]');\n        if (!actions) {\n          actions = document.createElement('div');\n          actions.className = 'neckle-personalization-actions';\n          actions.setAttribute('data-neckle-field-actions', '');\n\n          const action = document.createElement('button');\n          action.type = 'button';\n          action.className = 'neckle-personalization-action';\n          action.setAttribute('data-neckle-field-action', '');\n          action.textContent = tekst('save', 'Zapisz');\n\n          const confirmation = document.createElement('p');\n          confirmation.className = 'neckle-personalization-confirmation';\n          confirmation.setAttribute('data-neckle-field-confirmation', '');\n          confirmation.setAttribute('role', 'status');\n          confirmation.textContent = tekst('savedConfirmation', 'Zapisano \u2014 tekst zostanie dodany do zam\u00F3wienia.');\n          confirmation.hidden = true;\n\n          actions.append(action, confirmation);\n          field.appendChild(actions);\n        }\n\n        const action = actions.querySelector('[data-neckle-field-action]');\n        const confirmation = actions.querySelector('[data-neckle-field-confirmation]');\n        if (!(action instanceof HTMLButtonElement) || !confirmation) return;\n\n        // KAZDY zapis tutaj jest obserwowany przez nasz wlasny MutationObserver\n        // ponizej (childList + `hidden` w poddrzewie widgetu), a on wywoluje\n        // ta funkcje ponownie. Bezwarunkowe pisanie robilo z tego petle\n        // sprzezenia zwrotnego: ~1150 mutacji/s bez zadnej interakcji, ktora\n        // nigdy nie wygasala (zmierzone 2026-09-14 na zywym PDP). Kosztowala\n        // 2,5 s CPU w neckle-product.js i drugie 2,6 s w neckle-dropzone.js,\n        // ktorego obserwator lapal te sama kanonade.\n        //\n        // Dlatego kazdy zapis jest warunkowy: gdy nic sie nie zmienia, nie\n        // powstaje zadna mutacja i petla nie ma czym sie napedzac.\n        const renderSavedState = () => {\n          const saved = !field.hidden && input.dataset.neckleSaved === 'true';\n          if (field.classList.contains('is-complete') !== saved) field.classList.toggle('is-complete', saved);\n          if (input.readOnly !== saved) input.readOnly = saved;\n          const actionLabel = saved ? tekst('edit', 'Edytuj') : tekst('save', 'Zapisz');\n          if (action.textContent !== actionLabel) action.textContent = actionLabel;\n          if (confirmation.hidden !== !saved) confirmation.hidden = !saved;\n          if (field.hidden || saved || !input.value.trim()) input.setCustomValidity('');\n          else input.setCustomValidity(wstaw(\n            tekst('saveRequired', 'Kliknij \u201EZapisz\u201D, aby zatwierdzi\u0107 pole: __FIELD__.'),\n            '__FIELD__',\n            fieldName,\n          ));\n        };\n\n        if (!input.dataset.neckleConfirmationReady) {\n          input.dataset.neckleConfirmationReady = 'true';\n          input.addEventListener('input', () => {\n            input.dataset.neckleSaved = 'false';\n            renderSavedState();\n          });\n          action.addEventListener('click', () => {\n            if (input.dataset.neckleSaved === 'true') {\n              input.dataset.neckleSaved = 'false';\n              renderSavedState();\n              input.focus();\n              return;\n            }\n\n            input.setCustomValidity('');\n            if (!input.value.trim()) input.setCustomValidity(wstaw(\n              tekst('completeField', 'Uzupe\u0142nij pole: __FIELD__.'),\n              '__FIELD__',\n              fieldName,\n            ));\n            if (!input.checkValidity()) {\n              input.reportValidity();\n              return;\n            }\n\n            input.dataset.neckleSaved = 'true';\n            renderSavedState();\n          });\n        }\n\n        if (field.hidden && input.dataset.neckleSaved === 'true') input.dataset.neckleSaved = 'false';\n        renderSavedState();\n      });\n    };\n\n    // Jedno przejscie na tick. OwnPrint potrafi wyslac kilkadziesiat zdarzen i\n    // mutacji na jedno klikniecie, a kazde z nich kolejkowalo osobny setTimeout\n    // z pelnym przeskanowaniem widgetu.\n    let syncScheduled = false;\n    const syncPersonalization = () => {\n      if (syncScheduled) return;\n      syncScheduled = true;\n      window.setTimeout(() => {\n        syncScheduled = false;\n        const selectedVariant = getVariantByInput();\n        if (selectedVariant) updateVariantUI(selectedVariant);\n        syncPersonalizationConfirmations();\n        updatePurchaseState();\n      }, 0);\n    };\n\n    personalizationRoot.addEventListener('click', syncPersonalization);\n    personalizationRoot.addEventListener('change', syncPersonalization);\n    personalizationRoot.addEventListener('input', syncPersonalization);\n\n    const personalizationObserver = new MutationObserver(syncPersonalization);\n    personalizationObserver.observe(personalizationRoot, {\n      attributes: true,\n      attributeFilter: ['hidden', 'aria-checked', 'value'],\n      childList: true,\n      subtree: true,\n    });\n\n    // OwnPrint zapisuje prawdziwy wariant do naszego `variantInput` asynchronicznie,\n    // czasem po tym jak powyzszy debounce juz przeczytal (i odrzucil jako bez zmian)\n    // stan sprzed zapisu. Efekt: galeria i URL zamrazaja sie na poprzednim wariancie\n    // do najblizszego kolejnego klikniecia w widget - zglaszane jako \"trzeba kliknac\n    // dwa razy\" (2026-09-16). `variantInput` zyje poza `personalizationRoot`, wiec\n    // powyzsze nasluchy tego nie widza - trzeba nasluchiwac zrodla prawdy wprost.\n    if (variantInput) {\n      variantInput.addEventListener('change', syncPersonalization);\n      variantInput.addEventListener('input', syncPersonalization);\n      new MutationObserver(syncPersonalization).observe(variantInput, {\n        attributes: true,\n        attributeFilter: ['value'],\n      });\n    }\n    syncPersonalizationConfirmations();\n\n    if (section.dataset.productHandle === 'coin-bracelet' && personalizationMedallion) {\n      personalizationRoot.addEventListener('change', (event) => {\n        const input = event.target;\n        if (!(input instanceof HTMLInputElement) || input.type !== 'file' || !input.files?.length || reducedMotion) return;\n        personalizationMedallion.classList.remove('is-pulsing');\n        requestAnimationFrame(() => personalizationMedallion.classList.add('is-pulsing'));\n      });\n      personalizationMedallion.addEventListener('animationend', () => personalizationMedallion.classList.remove('is-pulsing'));\n    }\n  }\n\n  const stage = section.querySelector('[data-gallery-stage]');\n  const mainImage = section.querySelector('.neckle-pdp__main-image');\n  const mediaButtons = [...section.querySelectorAll('[data-product-media]')];\n  const mediaDots = [...section.querySelectorAll('[data-gallery-dot]')];\n  const currentCounter = section.querySelector('[data-gallery-current]');\n  let activeMediaIndex = Math.max(0, mediaButtons.findIndex((button) => button.classList.contains('is-active')));\n\n  const setZoom = (enabled) => {\n    if (!stage) return;\n    stage.classList.toggle('is-zoomed', enabled);\n    const zoomButton = section.querySelector('[data-gallery-zoom]');\n    zoomButton?.setAttribute('aria-expanded', String(enabled));\n    zoomButton?.setAttribute(\n      'aria-label',\n      enabled ? tekst('zoomOut', 'Zmniejsz zdj\u0119cie') : tekst('zoomIn', 'Powi\u0119ksz zdj\u0119cie'),\n    );\n  };\n\n  // Miniaturki niosa URL w wariancie 1800 px, bo przy kliknieciu klienta zdjecie\n  // moze byc duze. Poprawka na starcie nie moze tak obciazac LCP, a wtedy znamy\n  // juz realna szerokosc elementu, wiec prosimy CDN dokladnie o tyle, ile trzeba.\n  const urlNaSzerokoscEkranu = (url) => {\n    const potrzebna = (mainImage?.clientWidth || 0) * (window.devicePixelRatio || 1);\n    if (!potrzebna) return url;\n    const zaokraglona = Math.min(1800, Math.max(400, Math.ceil(potrzebna / 100) * 100));\n    return url.replace(/([?&])width=\\d+/, `$1width=${zaokraglona}`);\n  };\n\n  // `immediate` obsluguje jedyny przypadek, w ktorym zdjecie zmienia sie bez\n  // udzialu klienta - uzgodnienie galerii z wariantem OwnPrintu przy starcie.\n  // Przejscie z wygaszeniem byloby wtedy mignieciem na juz namalowanym obrazku.\n  const activateMedia = (nextIndex, immediate = false) => {\n    if (!mainImage || !mediaButtons.length) return;\n    activeMediaIndex = (nextIndex + mediaButtons.length) % mediaButtons.length;\n    const activeButton = mediaButtons[activeMediaIndex];\n    if (!immediate) stage?.classList.add('is-changing');\n    setZoom(false);\n\n    const podmien = () => {\n      mainImage.removeAttribute('srcset');\n      mainImage.removeAttribute('sizes');\n      mainImage.src = immediate\n        ? urlNaSzerokoscEkranu(activeButton.dataset.productMedia)\n        : activeButton.dataset.productMedia;\n      mainImage.alt = activeButton.dataset.mediaAlt || '';\n      mediaButtons.forEach((button, index) => {\n        const active = index === activeMediaIndex;\n        button.classList.toggle('is-active', active);\n        button.setAttribute('aria-current', String(active));\n      });\n      mediaDots.forEach((dot, index) => dot.classList.toggle('is-active', index === activeMediaIndex));\n      const thumbnailRail = activeButton.parentElement;\n      if (thumbnailRail) {\n        const targetLeft = activeButton.offsetLeft - ((thumbnailRail.clientWidth - activeButton.clientWidth) / 2);\n        thumbnailRail.scrollTo({ left: targetLeft, behavior: reducedMotion || immediate ? 'auto' : 'smooth' });\n      }\n      if (currentCounter) currentCounter.textContent = String(activeMediaIndex + 1).padStart(2, '0');\n      if (!immediate) requestAnimationFrame(() => stage?.classList.remove('is-changing'));\n    };\n\n    if (immediate) podmien();\n    else window.setTimeout(podmien, reducedMotion ? 0 : 130);\n  };\n\n  syncVariantMedia = (variant, immediate = false) => {\n    const mediaId = variant?.featured_media?.id;\n    if (!mediaId) return;\n    const nextIndex = mediaButtons.findIndex((button) => String(button.dataset.mediaId) === String(mediaId));\n    if (nextIndex !== -1 && nextIndex !== activeMediaIndex) activateMedia(nextIndex, immediate);\n  };\n\n  mediaButtons.forEach((button, index) => button.addEventListener('click', () => activateMedia(index)));\n  section.querySelector('[data-gallery-previous]')?.addEventListener('click', () => activateMedia(activeMediaIndex - 1));\n  section.querySelector('[data-gallery-next]')?.addEventListener('click', () => activateMedia(activeMediaIndex + 1));\n  section.querySelector('[data-gallery-zoom]')?.addEventListener('click', () => setZoom(!stage?.classList.contains('is-zoomed')));\n\n  stage?.addEventListener('keydown', (event) => {\n    if (event.key === 'ArrowLeft') activateMedia(activeMediaIndex - 1);\n    if (event.key === 'ArrowRight') activateMedia(activeMediaIndex + 1);\n    if (event.key === 'Escape') setZoom(false);\n  });\n\n  stage?.addEventListener('pointermove', (event) => {\n    if (!stage.classList.contains('is-zoomed')) return;\n    const bounds = stage.getBoundingClientRect();\n    stage.style.setProperty('--zoom-x', `${((event.clientX - bounds.left) / bounds.width) * 100}%`);\n    stage.style.setProperty('--zoom-y', `${((event.clientY - bounds.top) / bounds.height) * 100}%`);\n  }, { passive: true });\n\n  let touchStartX = null;\n  stage?.addEventListener('touchstart', (event) => {\n    touchStartX = event.touches[0]?.clientX ?? null;\n  }, { passive: true });\n  stage?.addEventListener('touchend', (event) => {\n    const touchEndX = event.changedTouches[0]?.clientX;\n    if (touchStartX === null || touchEndX === undefined) return;\n    const distance = touchEndX - touchStartX;\n    touchStartX = null;\n    if (Math.abs(distance) < 42) return;\n    activateMedia(distance < 0 ? activeMediaIndex + 1 : activeMediaIndex - 1);\n  }, { passive: true });\n\n  document.querySelector('[data-scroll-to-product-form]')?.addEventListener('click', () => {\n    form?.scrollIntoView({ behavior: reducedMotion ? 'auto' : 'smooth', block: 'center' });\n  });\n\n  if (form && stickyBar) {\n    const mobileViewport = window.matchMedia('(max-width: 749px)');\n    let stickyFrame;\n    const updateStickyBar = () => {\n      stickyFrame = undefined;\n      stickyBar.hidden = !mobileViewport.matches || form.getBoundingClientRect().bottom >= 0;\n    };\n    const scheduleStickyUpdate = () => {\n      if (stickyFrame) return;\n      stickyFrame = window.requestAnimationFrame(updateStickyBar);\n    };\n\n    // Pasek pomaga wr\u00F3ci\u0107 do personalizacji dopiero po mini\u0119ciu przycisku\n    // formularza. Scroll jest tu pewniejszy od IntersectionObserver, poniewa\u017C\n    // OwnPrint przenosi sw\u00F3j widget w DOM ju\u017C po pierwszym renderze.\n    window.addEventListener('scroll', scheduleStickyUpdate, { passive: true });\n    window.addEventListener('resize', scheduleStickyUpdate);\n    mobileViewport.addEventListener?.('change', scheduleStickyUpdate);\n    updateStickyBar();\n  }\n\n  const updateCartCount = (count) => {\n    document.querySelectorAll('[data-cart-count]').forEach((node) => { node.textContent = String(count); });\n    document.querySelectorAll('[data-cart-link]').forEach((node) => node.setAttribute(\n      'aria-label',\n      count\n        ? wstaw(tekst('cartCount', 'Koszyk, __COUNT__'), '__COUNT__', count)\n        : tekst('cart', 'Koszyk'),\n    ));\n  };\n\n  let addRequestInFlight = false;\n  const cartFormData = () => {\n    const data = new FormData(form);\n    if (!personalizationRoot) return data;\n\n    personalizationRoot.querySelectorAll('input[name], select[name], textarea[name]').forEach((control) => {\n      if (!(control instanceof HTMLInputElement || control instanceof HTMLSelectElement || control instanceof HTMLTextAreaElement)) return;\n      if (control.disabled || control.form === form) return;\n\n      const type = control instanceof HTMLInputElement ? control.type.toLowerCase() : '';\n      if ((type === 'checkbox' || type === 'radio') && !control.checked) return;\n      if (type === 'file') {\n        [...control.files].forEach((file) => data.append(control.name, file, file.name));\n        return;\n      }\n      data.append(control.name, control.value);\n    });\n    return data;\n  };\n\n  const addToCart = async () => {\n    if (addRequestInFlight) return;\n    if (!addButton || addButton.disabled || !form.reportValidity()) return;\n\n    addRequestInFlight = true;\n    purchaseFeedbackActive = true;\n    addButton.classList.remove('is-confirmed');\n    addButton.classList.add('is-loading');\n    addButton.disabled = true;\n    if (addLabel) addLabel.textContent = tekst('adding', 'Dodaj\u0119\u2026');\n\n    try {\n      const root = window.Shopify?.routes?.root || '/';\n      const addResponse = await fetch(`${root}cart/add.js`, { method: 'POST', headers: { Accept: 'application/json' }, body: cartFormData() });\n      if (!addResponse.ok) throw new Error('cart_add_failed');\n      const cartResponse = await fetch(`${root}cart.js`, { headers: { Accept: 'application/json' } });\n      if (!cartResponse.ok) throw new Error('cart_read_failed');\n      const cart = await cartResponse.json();\n      updateCartCount(cart.item_count);\n      addButton.classList.remove('is-loading');\n      addButton.classList.add('is-confirmed');\n      if (addLabel) addLabel.textContent = tekst('addedCheck', 'Dodano \u2713');\n      window.clearTimeout(confirmationTimer);\n      confirmationTimer = window.setTimeout(() => {\n        addRequestInFlight = false;\n        purchaseFeedbackActive = false;\n        addButton.classList.remove('is-confirmed');\n        updatePurchaseState();\n      }, 2000);\n    } catch (error) {\n      addRequestInFlight = false;\n      purchaseFeedbackActive = false;\n      addButton.classList.remove('is-loading', 'is-confirmed');\n      activeVariantAvailable = false;\n      updatePurchaseState();\n    }\n  };\n\n  // OwnPrint binds its own document-capture handler and redirects to /cart after the upload.\n  // Capturing on window runs first, preserves the same FormData (including its real file input),\n  // and keeps this PDP's approved AJAX feedback on the current page.\n  const interceptAddToCart = (event) => {\n    const target = event.target;\n    const isThisForm = target === form;\n    const isThisButton = target instanceof Element && target.closest('[data-add-to-cart]') === addButton;\n    if (!isThisForm && !isThisButton) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    addToCart();\n  };\n  window.addEventListener('submit', interceptAddToCart, true);\n  window.addEventListener('click', interceptAddToCart, true);\n\n  // OwnPrint ustawia swoj wlasny domyslny wariant i ignoruje `?variant=` z\n  // adresu, wiec link do konkretnego wykonczenia ladowal zawsze na zlotym:\n  // sprawdzone 2026-09-15 na 3 produktach, kazdy link (srebro, roz) konczyl sie\n  // na \"18k Gold Plated\". Dotyczy reklam, linkow wysylanych klientom, Google\n  // Shopping i katalogu Meta - klient klika srebro, dostaje zloto.\n  //\n  // Nie da sie tego ustawic przez ukryty input: OwnPrint trzyma wlasny stan i\n  // nadpisze go przy najblizszej mutacji. Jedyne trwale wyjscie to wysterowac\n  // widget tak, jak zrobilby to klient - klikajac jego kontrolki.\n  // Wartosci opcji sa w tym sklepie unikalne miedzy opcjami (wykonczenia,\n  // miesiace, kolory paska), wiec szukamy kontrolki po samej wartosci - bez\n  // zalozen o kolejnosci opcji, ktora rozni sie miedzy produktami.\n  // `wymus` pomija sprawdzanie `aria-checked`. Przy przywracaniu wyboru klienta\n  // widget potrafi miec juz zaznaczone jego wykonczenie, podczas gdy wariant\n  // pokazuje nasze - wtedy zaufanie `aria-checked` zostawialoby klienta z cudza\n  // opcja. Ponowny klik w zaznaczony swatch jest nieszkodliwy.\n  const ustawWartoscOpcji = (wartosc, wymus = false) => {\n      if (!personalizationRoot) return false;\n      const escaped = wartosc.replace(/\"/g, '\\\\\"');\n\n      const przycisk = personalizationRoot.querySelector(\n        `[data-ownprint-swatch=\"${escaped}\"], [data-ownprint-tile=\"${escaped}\"]`,\n      );\n      if (przycisk) {\n        if (wymus || przycisk.getAttribute('aria-checked') !== 'true') przycisk.click();\n        return true;\n      }\n\n      const lista = [...personalizationRoot.querySelectorAll('select[data-ownprint-option-name]')]\n        .find((select) => [...select.options].some((option) => option.value === wartosc));\n      if (lista) {\n        if (lista.value !== wartosc) {\n          lista.value = wartosc;\n          lista.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n        return true;\n      }\n\n      const przelacznik = [...personalizationRoot.querySelectorAll('input[data-ownprint-checkbox]')]\n        .find((input) => {\n          const pole = input.closest('[data-ownprint-option-name]')\n            || personalizationRoot.querySelector(`[data-ownprint-checkbox-on=\"${escaped}\"], [data-ownprint-checkbox-off=\"${escaped}\"]`);\n          return pole && (pole.getAttribute('data-ownprint-checkbox-on') === wartosc\n            || pole.getAttribute('data-ownprint-checkbox-off') === wartosc);\n        });\n      if (przelacznik) {\n        const pole = personalizationRoot.querySelector(`[data-ownprint-checkbox-on=\"${escaped}\"], [data-ownprint-checkbox-off=\"${escaped}\"]`);\n        const chceWlaczony = pole?.getAttribute('data-ownprint-checkbox-on') === wartosc;\n        if (przelacznik.checked !== chceWlaczony) przelacznik.click();\n        return true;\n      }\n\n      return false;\n  };\n\n  const wymusWariantZAdresu = () => {\n    const zadany = new URL(window.location.href).searchParams.get('variant');\n    if (!zadany) return;\n    const wariant = variants.find((item) => String(item.id) === String(zadany));\n    if (!wariant) return;\n    wariant.options.forEach(ustawWartoscOpcji);\n  };\n\n  // OwnPrint renderuje sie asynchronicznie i po pierwszym malowaniu potrafi\n  // jeszcze raz ustawic swoj domyslny wariant. Probujemy wiec kilka razy, az\n  // ukryty input zgodzi sie z adresem, i odpuszczamy po `limitProb` - zeby przy\n  // rozjezdzie konfiguracji (np. polskie wartosci swatchy na pionowej\n  // zawieszce) nie zapetlic sie na zawsze.\n  const pilnujWariantuZAdresu = () => {\n    const zadany = new URL(window.location.href).searchParams.get('variant');\n    if (!zadany || !personalizationRoot) return;\n    if (String(variantInput?.value || '') === String(zadany)) return;\n\n    // Klient jest wazniejszy niz adres - pierwsze dotkniecie strony odwoluje\n    // wymuszanie. Nasluch idzie na `document` w fazie przechwytywania, bo\n    // OwnPrint przerenderowuje swoje poddrzewo i listener wpiety w sam widget\n    // znikalby razem ze starym wezlem.\n    //\n    let przerwane = false;\n    const przerwij = () => { przerwane = true; };\n    document.addEventListener('pointerdown', przerwij, true);\n    document.addEventListener('keydown', przerwij, true);\n    const odepnij = () => {\n      document.removeEventListener('pointerdown', przerwij, true);\n      document.removeEventListener('keydown', przerwij, true);\n    };\n\n    // Klikamy DOKLADNIE RAZ, wczesnie, i nigdy pozniej nie wracamy do tematu.\n    //\n    // Pierwsza wersja ponawiala co 250 ms przez 2 s i przegrywala z klientem:\n    // nasze klikniecie bylo juz wyslane, docieralo do widgetu po jego\n    // kliknieciu i cofalo wybor - stad zgloszone \"trzeba kliknac dwa razy\"\n    // (2026-09-15). Proba arbitrazu (zapamietaj co kliknal klient i przywroc)\n    // dawala wyniki niepowtarzalne miedzy przebiegami, bo przesuwala wyscig\n    // zamiast go usunac. Zostaje wersja przewidywalna: jedno wymuszenie zaraz\n    // po tym, jak widget ucichnie, czyli zanim czlowiek zdazy cokolwiek\n    // przeczytac i kliknac.\n    let timerCiszy;\n    let zakonczone = false;\n    const obserwator = new MutationObserver(() => zaplanuj());\n\n    const wykonaj = () => {\n      if (zakonczone) return;\n      zakonczone = true;\n      window.clearTimeout(timerCiszy);\n      obserwator.disconnect();\n      if (przerwane || String(variantInput?.value || '') === String(zadany)) { odepnij(); return; }\n      wymusWariantZAdresu();\n      odepnij();\n    };\n\n    const zaplanuj = () => {\n      if (zakonczone || przerwane) return;\n      window.clearTimeout(timerCiszy);\n      timerCiszy = window.setTimeout(wykonaj, 120);\n    };\n\n    obserwator.observe(personalizationRoot, {\n      attributes: true,\n      attributeFilter: ['aria-checked', 'value', 'hidden'],\n      childList: true,\n      subtree: true,\n    });\n    zaplanuj();\n    // Bezpiecznik na wypadek widgetu, ktory nie przestaje mutowac. Celowo\n    // krotki: im pozniej wymuszamy, tym wieksza szansa, ze trafimy w moment,\n    // w ktorym klient juz klika.\n    window.setTimeout(wykonaj, 800);\n  };\n\n  const initialVariant = getVariantByInput();\n  if (initialVariant) updateVariantUI(initialVariant, false);\n  // OwnPrint ustawia swoj domyslny wariant w ukrytym inpucie, zanim ten skrypt\n  // wystartuje, wiec `activeVariantId` czyta juz jego wartosc i `variantChanged`\n  // nigdy nie zobaczy tego pierwszego rozjazdu. Galeria zostawala wtedy na\n  // zdjeciu z `selected_or_first_available_variant` z Liquida - czyli innym\n  // wykonczeniu niz zaznaczone (2026-09-14: 6 z 9 produktow, np. wybrane\n  // \"18k Gold Plated\" przy zdjeciu wersji srebrno-rozowej).\n  //\n  // Sync jest tu bezwarunkowy, bo przy starcie nie ma jeszcze recznego wyboru\n  // klienta, ktory mozna by nadpisac. Guard `if (variantChanged)` w\n  // updateVariantUI zostaje - to on chroni reczny wybor zdjecia przed\n  // powtarzanymi zdarzeniami OwnPrintu.\n  if (initialVariant) syncVariantMedia(initialVariant, true);\n  updatePurchaseState();\n  pilnujWariantuZAdresu();\n})();\n"],
  "mappings": "CAAC,IAAM,CACL,MAAM,QAAU,SAAS,cAAc,wBAAwB,EACzD,aAAe,SAAS,cAAc,yBAAyB,EACrE,GAAI,CAAC,SAAW,CAAC,cAAgB,QAAQ,QAAQ,YAAa,OAC9D,QAAQ,QAAQ,YAAc,OAE9B,MAAM,SAAW,SAAS,cAAc,4BAA4B,EACpE,IAAI,KAAO,CAAC,EACZ,GAAI,CAAE,KAAO,SAAW,KAAK,MAAM,SAAS,WAAW,EAAI,CAAC,CAAG,MAAgB,CAAE,KAAO,CAAC,CAAG,CAC5F,MAAM,MAAQ,CAAC,IAAK,WAAa,KAAK,GAAG,GAAK,SACxC,MAAQ,CAAC,SAAU,MAAO,QAAU,SAAS,QAAQ,MAAO,KAAK,EAEjE,cAAgB,OAAO,WAAW,kCAAkC,EAAE,QACtE,SAAW,KAAK,MAAM,aAAa,WAAW,EAC9C,KAAO,QAAQ,cAAc,mBAAmB,EAChD,aAAe,MAAM,cAAc,mBAAmB,EACtD,MAAQ,QAAQ,cAAc,sBAAsB,EACpD,YAAc,SAAS,cAAc,qBAAqB,EAC1D,UAAY,MAAM,cAAc,oBAAoB,EACpD,SAAW,MAAM,cAAc,0BAA0B,EACzD,SAAW,MAAM,cAAc,0BAA0B,EACzD,UAAY,SAAS,cAAc,mBAAmB,EAGtD,oBAAsB,SAAS,cAAc,iCAAiC,EAC9E,yBAA2B,QAAQ,cAAc,kCAAkC,EACnF,SAAW,OAAO,SAAS,UAAU,QAAU,MACrD,IAAI,uBAAyB,CAAC,WAAW,SACrC,uBAAyB,GACzB,kBACA,iBAAmB,IAAM,CAAC,EAI1B,gBAAkB,OAAO,cAAc,OAAS,EAAE,EAEtD,MAAM,YAAe,OAAU,IAAI,KAAK,aAAa,SAAS,gBAAgB,MAAQ,QAAS,CAC7F,MAAO,WACP,QACF,CAAC,EAAE,OAAO,MAAQ,GAAG,EAEf,gBAAkB,CAAC,QAAS,UAAY,KAAS,CACrD,GAAI,CAAC,SAAW,CAAC,aAAc,OAC/B,MAAM,cAAgB,OAAO,QAAQ,EAAE,EACjC,eAAiB,gBAAkB,gBASzC,GARA,aAAa,MAAQ,QAAQ,GAC7B,gBAAkB,cAClB,uBAAyB,QAAQ,UAC7B,QAAO,MAAM,YAAc,YAAY,QAAQ,KAAK,GACpD,cAAa,YAAY,YAAc,YAAY,QAAQ,KAAK,GAChE,WAAU,SAAS,YAAc,YAAY,QAAQ,KAAK,GAC1D,gBAAgB,iBAAiB,OAAO,EAExC,WAAa,eAAgB,CAC/B,MAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EACxC,IAAI,aAAa,IAAI,UAAW,QAAQ,EAAE,EAC1C,OAAO,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAG,CACzC,CACF,EAEM,kBAAoB,IAAM,SAAS,KAAM,SAAY,OAAO,QAAQ,EAAE,IAAM,OAAO,cAAc,KAAK,CAAC,EAEvG,kBAAoB,IAAM,CAC9B,MAAM,eAAiB,CAAC,GAAG,QAAQ,iBAAiB,oCAAoC,CAAC,EACtF,KAAK,CAAC,MAAO,SAAW,OAAO,MAAM,QAAQ,cAAc,EAAI,OAAO,OAAO,QAAQ,cAAc,CAAC,EACpG,IAAK,QAAW,OAAO,QAAQ,WAAW,EACvC,QAAU,SAAS,KAAM,MAAS,KAAK,QAAQ,MAAM,CAAC,MAAO,QAAU,QAAU,eAAe,KAAK,CAAC,CAAC,EACxG,UACL,gBAAgB,OAAO,EACvB,oBAAoB,EACtB,EAEA,SAAS,qBAAsB,CACzB,CAAC,WAAa,CAAC,UACf,yBACJ,UAAU,SAAW,CAAC,uBAEjB,uBAGH,SAAS,YAAc,MAAM,YAAa,kBAAkB,EAF5D,SAAS,YAAc,MAAM,cAAe,2BAAsB,EAItE,CAeA,GAbA,QAAQ,iBAAiB,wBAAwB,EAAE,QAAS,QAAW,CACrE,OAAO,iBAAiB,QAAS,IAAM,CACrC,MAAM,SAAW,OAAO,QAAQ,eAChC,QAAQ,iBAAiB,0BAA0B,QAAQ,IAAI,EAAE,QAAS,MAAS,CACjF,KAAK,UAAU,OAAO,aAAa,EACnC,KAAK,aAAa,eAAgB,OAAO,CAC3C,CAAC,EACD,OAAO,UAAU,IAAI,aAAa,EAClC,OAAO,aAAa,eAAgB,MAAM,EAC1C,kBAAkB,CACpB,CAAC,CACH,CAAC,EAEG,oBAAqB,CACvB,MAAM,iCAAmC,IAAM,CAC7C,oBAAoB,iBAAiB,kCAAkC,EAAE,QAAS,OAAU,CAE1F,GADI,EAAE,iBAAiB,kBAAoB,iBAAiB,sBACxD,iBAAiB,kBAAoB,CAAC,CAAC,OAAQ,SAAU,MAAO,MAAO,OAAO,EAAE,SAAS,MAAM,IAAI,EAAG,OAC1G,MAAM,MAAQ,MAAM,QAAQ,kCAAkC,EAC9D,GAAI,CAAC,MAAO,OACZ,MAAM,UAAY,MAAM,cAAc,kCAAkC,GACpE,aAAa,QAAQ,IAAK,EAAE,EAAE,QAAQ,OAAQ,GAAG,EAAE,KAAK,GAAK,MAAM,YAAa,OAAO,EAE3F,IAAI,QAAU,MAAM,cAAc,6BAA6B,EAC/D,GAAI,CAAC,QAAS,CACZ,QAAU,SAAS,cAAc,KAAK,EACtC,QAAQ,UAAY,iCACpB,QAAQ,aAAa,4BAA6B,EAAE,EAEpD,MAAMA,QAAS,SAAS,cAAc,QAAQ,EAC9CA,QAAO,KAAO,SACdA,QAAO,UAAY,gCACnBA,QAAO,aAAa,2BAA4B,EAAE,EAClDA,QAAO,YAAc,MAAM,OAAQ,QAAQ,EAE3C,MAAMC,cAAe,SAAS,cAAc,GAAG,EAC/CA,cAAa,UAAY,sCACzBA,cAAa,aAAa,iCAAkC,EAAE,EAC9DA,cAAa,aAAa,OAAQ,QAAQ,EAC1CA,cAAa,YAAc,MAAM,oBAAqB,yDAAiD,EACvGA,cAAa,OAAS,GAEtB,QAAQ,OAAOD,QAAQC,aAAY,EACnC,MAAM,YAAY,OAAO,CAC3B,CAEA,MAAM,OAAS,QAAQ,cAAc,4BAA4B,EAC3D,aAAe,QAAQ,cAAc,kCAAkC,EAC7E,GAAI,EAAE,kBAAkB,oBAAsB,CAAC,aAAc,OAY7D,MAAM,iBAAmB,IAAM,CAC7B,MAAM,MAAQ,CAAC,MAAM,QAAU,MAAM,QAAQ,cAAgB,OACzD,MAAM,UAAU,SAAS,aAAa,IAAM,OAAO,MAAM,UAAU,OAAO,cAAe,KAAK,EAC9F,MAAM,WAAa,QAAO,MAAM,SAAW,OAC/C,MAAM,YAAc,MAAQ,MAAM,OAAQ,QAAQ,EAAI,MAAM,OAAQ,QAAQ,EACxE,OAAO,cAAgB,cAAa,OAAO,YAAc,aACzD,aAAa,SAAW,CAAC,QAAO,aAAa,OAAS,CAAC,OACvD,MAAM,QAAU,OAAS,CAAC,MAAM,MAAM,KAAK,EAAG,MAAM,kBAAkB,EAAE,EACvE,MAAM,kBAAkB,MAC3B,MAAM,eAAgB,mEAAoD,EAC1E,YACA,SACF,CAAC,CACH,EAEK,MAAM,QAAQ,0BACjB,MAAM,QAAQ,wBAA0B,OACxC,MAAM,iBAAiB,QAAS,IAAM,CACpC,MAAM,QAAQ,YAAc,QAC5B,iBAAiB,CACnB,CAAC,EACD,OAAO,iBAAiB,QAAS,IAAM,CACrC,GAAI,MAAM,QAAQ,cAAgB,OAAQ,CACxC,MAAM,QAAQ,YAAc,QAC5B,iBAAiB,EACjB,MAAM,MAAM,EACZ,MACF,CAQA,GANA,MAAM,kBAAkB,EAAE,EACrB,MAAM,MAAM,KAAK,GAAG,MAAM,kBAAkB,MAC/C,MAAM,gBAAiB,iCAA4B,EACnD,YACA,SACF,CAAC,EACG,CAAC,MAAM,cAAc,EAAG,CAC1B,MAAM,eAAe,EACrB,MACF,CAEA,MAAM,QAAQ,YAAc,OAC5B,iBAAiB,CACnB,CAAC,GAGC,MAAM,QAAU,MAAM,QAAQ,cAAgB,SAAQ,MAAM,QAAQ,YAAc,SACtF,iBAAiB,CACnB,CAAC,CACH,EAKA,IAAI,cAAgB,GACpB,MAAM,oBAAsB,IAAM,CAC5B,gBACJ,cAAgB,GAChB,OAAO,WAAW,IAAM,CACtB,cAAgB,GAChB,MAAM,gBAAkB,kBAAkB,EACtC,iBAAiB,gBAAgB,eAAe,EACpD,iCAAiC,EACjC,oBAAoB,CACtB,EAAG,CAAC,EACN,EAEA,oBAAoB,iBAAiB,QAAS,mBAAmB,EACjE,oBAAoB,iBAAiB,SAAU,mBAAmB,EAClE,oBAAoB,iBAAiB,QAAS,mBAAmB,EAEjC,IAAI,iBAAiB,mBAAmB,EAChD,QAAQ,oBAAqB,CACnD,WAAY,GACZ,gBAAiB,CAAC,SAAU,eAAgB,OAAO,EACnD,UAAW,GACX,QAAS,EACX,CAAC,EAQG,eACF,aAAa,iBAAiB,SAAU,mBAAmB,EAC3D,aAAa,iBAAiB,QAAS,mBAAmB,EAC1D,IAAI,iBAAiB,mBAAmB,EAAE,QAAQ,aAAc,CAC9D,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC3B,CAAC,GAEH,iCAAiC,EAE7B,QAAQ,QAAQ,gBAAkB,iBAAmB,2BACvD,oBAAoB,iBAAiB,SAAW,OAAU,CACxD,MAAM,MAAQ,MAAM,OAChB,EAAE,iBAAiB,mBAAqB,MAAM,OAAS,QAAU,CAAC,MAAM,OAAO,QAAU,gBAC7F,yBAAyB,UAAU,OAAO,YAAY,EACtD,sBAAsB,IAAM,yBAAyB,UAAU,IAAI,YAAY,CAAC,EAClF,CAAC,EACD,yBAAyB,iBAAiB,eAAgB,IAAM,yBAAyB,UAAU,OAAO,YAAY,CAAC,EAE3H,CAEA,MAAM,MAAQ,QAAQ,cAAc,sBAAsB,EACpD,UAAY,QAAQ,cAAc,yBAAyB,EAC3D,aAAe,CAAC,GAAG,QAAQ,iBAAiB,sBAAsB,CAAC,EACnE,UAAY,CAAC,GAAG,QAAQ,iBAAiB,oBAAoB,CAAC,EAC9D,eAAiB,QAAQ,cAAc,wBAAwB,EACrE,IAAI,iBAAmB,KAAK,IAAI,EAAG,aAAa,UAAW,QAAW,OAAO,UAAU,SAAS,WAAW,CAAC,CAAC,EAE7G,MAAM,QAAW,SAAY,CAC3B,GAAI,CAAC,MAAO,OACZ,MAAM,UAAU,OAAO,YAAa,OAAO,EAC3C,MAAM,WAAa,QAAQ,cAAc,qBAAqB,EAC9D,YAAY,aAAa,gBAAiB,OAAO,OAAO,CAAC,EACzD,YAAY,aACV,aACA,QAAU,MAAM,UAAW,uBAAkB,EAAI,MAAM,SAAU,4BAAkB,CACrF,CACF,EAKM,qBAAwB,KAAQ,CACpC,MAAM,WAAa,WAAW,aAAe,IAAM,OAAO,kBAAoB,GAC9E,GAAI,CAAC,UAAW,OAAO,IACvB,MAAM,YAAc,KAAK,IAAI,KAAM,KAAK,IAAI,IAAK,KAAK,KAAK,UAAY,GAAG,EAAI,GAAG,CAAC,EAClF,OAAO,IAAI,QAAQ,kBAAmB,WAAW,WAAW,EAAE,CAChE,EAKM,cAAgB,CAAC,UAAW,UAAY,KAAU,CACtD,GAAI,CAAC,WAAa,CAAC,aAAa,OAAQ,OACxC,kBAAoB,UAAY,aAAa,QAAU,aAAa,OACpE,MAAM,aAAe,aAAa,gBAAgB,EAC7C,WAAW,OAAO,UAAU,IAAI,aAAa,EAClD,QAAQ,EAAK,EAEb,MAAM,QAAU,IAAM,CACpB,UAAU,gBAAgB,QAAQ,EAClC,UAAU,gBAAgB,OAAO,EACjC,UAAU,IAAM,UACZ,qBAAqB,aAAa,QAAQ,YAAY,EACtD,aAAa,QAAQ,aACzB,UAAU,IAAM,aAAa,QAAQ,UAAY,GACjD,aAAa,QAAQ,CAAC,OAAQ,QAAU,CACtC,MAAM,OAAS,QAAU,iBACzB,OAAO,UAAU,OAAO,YAAa,MAAM,EAC3C,OAAO,aAAa,eAAgB,OAAO,MAAM,CAAC,CACpD,CAAC,EACD,UAAU,QAAQ,CAAC,IAAK,QAAU,IAAI,UAAU,OAAO,YAAa,QAAU,gBAAgB,CAAC,EAC/F,MAAM,cAAgB,aAAa,cACnC,GAAI,cAAe,CACjB,MAAM,WAAa,aAAa,YAAe,cAAc,YAAc,aAAa,aAAe,EACvG,cAAc,SAAS,CAAE,KAAM,WAAY,SAAU,eAAiB,UAAY,OAAS,QAAS,CAAC,CACvG,CACI,iBAAgB,eAAe,YAAc,OAAO,iBAAmB,CAAC,EAAE,SAAS,EAAG,GAAG,GACxF,WAAW,sBAAsB,IAAM,OAAO,UAAU,OAAO,aAAa,CAAC,CACpF,EAEI,UAAW,QAAQ,EAClB,OAAO,WAAW,QAAS,cAAgB,EAAI,GAAG,CACzD,EAEA,iBAAmB,CAAC,QAAS,UAAY,KAAU,CACjD,MAAM,QAAU,SAAS,gBAAgB,GACzC,GAAI,CAAC,QAAS,OACd,MAAM,UAAY,aAAa,UAAW,QAAW,OAAO,OAAO,QAAQ,OAAO,IAAM,OAAO,OAAO,CAAC,EACnG,YAAc,IAAM,YAAc,kBAAkB,cAAc,UAAW,SAAS,CAC5F,EAEA,aAAa,QAAQ,CAAC,OAAQ,QAAU,OAAO,iBAAiB,QAAS,IAAM,cAAc,KAAK,CAAC,CAAC,EACpG,QAAQ,cAAc,yBAAyB,GAAG,iBAAiB,QAAS,IAAM,cAAc,iBAAmB,CAAC,CAAC,EACrH,QAAQ,cAAc,qBAAqB,GAAG,iBAAiB,QAAS,IAAM,cAAc,iBAAmB,CAAC,CAAC,EACjH,QAAQ,cAAc,qBAAqB,GAAG,iBAAiB,QAAS,IAAM,QAAQ,CAAC,OAAO,UAAU,SAAS,WAAW,CAAC,CAAC,EAE9H,OAAO,iBAAiB,UAAY,OAAU,CACxC,MAAM,MAAQ,aAAa,cAAc,iBAAmB,CAAC,EAC7D,MAAM,MAAQ,cAAc,cAAc,iBAAmB,CAAC,EAC9D,MAAM,MAAQ,UAAU,QAAQ,EAAK,CAC3C,CAAC,EAED,OAAO,iBAAiB,cAAgB,OAAU,CAChD,GAAI,CAAC,MAAM,UAAU,SAAS,WAAW,EAAG,OAC5C,MAAM,OAAS,MAAM,sBAAsB,EAC3C,MAAM,MAAM,YAAY,WAAY,IAAK,MAAM,QAAU,OAAO,MAAQ,OAAO,MAAS,GAAG,GAAG,EAC9F,MAAM,MAAM,YAAY,WAAY,IAAK,MAAM,QAAU,OAAO,KAAO,OAAO,OAAU,GAAG,GAAG,CAChG,EAAG,CAAE,QAAS,EAAK,CAAC,EAEpB,IAAI,YAAc,KAiBlB,GAhBA,OAAO,iBAAiB,aAAe,OAAU,CAC/C,YAAc,MAAM,QAAQ,CAAC,GAAG,SAAW,IAC7C,EAAG,CAAE,QAAS,EAAK,CAAC,EACpB,OAAO,iBAAiB,WAAa,OAAU,CAC7C,MAAM,UAAY,MAAM,eAAe,CAAC,GAAG,QAC3C,GAAI,cAAgB,MAAQ,YAAc,OAAW,OACrD,MAAM,SAAW,UAAY,YAC7B,YAAc,KACV,OAAK,IAAI,QAAQ,EAAI,KACzB,cAAc,SAAW,EAAI,iBAAmB,EAAI,iBAAmB,CAAC,CAC1E,EAAG,CAAE,QAAS,EAAK,CAAC,EAEpB,SAAS,cAAc,+BAA+B,GAAG,iBAAiB,QAAS,IAAM,CACvF,MAAM,eAAe,CAAE,SAAU,cAAgB,OAAS,SAAU,MAAO,QAAS,CAAC,CACvF,CAAC,EAEG,MAAQ,UAAW,CACrB,MAAM,eAAiB,OAAO,WAAW,oBAAoB,EAC7D,IAAI,YACJ,MAAM,gBAAkB,IAAM,CAC5B,YAAc,OACd,UAAU,OAAS,CAAC,eAAe,SAAW,KAAK,sBAAsB,EAAE,QAAU,CACvF,EACM,qBAAuB,IAAM,CAC7B,cACJ,YAAc,OAAO,sBAAsB,eAAe,EAC5D,EAKA,OAAO,iBAAiB,SAAU,qBAAsB,CAAE,QAAS,EAAK,CAAC,EACzE,OAAO,iBAAiB,SAAU,oBAAoB,EACtD,eAAe,mBAAmB,SAAU,oBAAoB,EAChE,gBAAgB,CAClB,CAEA,MAAM,gBAAmB,OAAU,CACjC,SAAS,iBAAiB,mBAAmB,EAAE,QAAS,MAAS,CAAE,KAAK,YAAc,OAAO,KAAK,CAAG,CAAC,EACtG,SAAS,iBAAiB,kBAAkB,EAAE,QAAS,MAAS,KAAK,aACnE,aACA,MACI,MAAM,MAAM,YAAa,mBAAmB,EAAG,YAAa,KAAK,EACjE,MAAM,OAAQ,QAAQ,CAC5B,CAAC,CACH,EAEA,IAAI,mBAAqB,GACzB,MAAM,aAAe,IAAM,CACzB,MAAM,KAAO,IAAI,SAAS,IAAI,EAC9B,OAAK,qBAEL,oBAAoB,iBAAiB,2CAA2C,EAAE,QAAS,SAAY,CAErG,GADI,EAAE,mBAAmB,kBAAoB,mBAAmB,mBAAqB,mBAAmB,sBACpG,QAAQ,UAAY,QAAQ,OAAS,KAAM,OAE/C,MAAM,KAAO,mBAAmB,iBAAmB,QAAQ,KAAK,YAAY,EAAI,GAChF,GAAK,UAAS,YAAc,OAAS,UAAY,CAAC,QAAQ,SAC1D,IAAI,OAAS,OAAQ,CACnB,CAAC,GAAG,QAAQ,KAAK,EAAE,QAAS,MAAS,KAAK,OAAO,QAAQ,KAAM,KAAM,KAAK,IAAI,CAAC,EAC/E,MACF,CACA,KAAK,OAAO,QAAQ,KAAM,QAAQ,KAAK,EACzC,CAAC,EACM,IACT,EAEM,UAAY,SAAY,CAC5B,GAAI,qBACA,GAAC,WAAa,UAAU,UAAY,CAAC,KAAK,eAAe,GAE7D,oBAAqB,GACrB,uBAAyB,GACzB,UAAU,UAAU,OAAO,cAAc,EACzC,UAAU,UAAU,IAAI,YAAY,EACpC,UAAU,SAAW,GACjB,WAAU,SAAS,YAAc,MAAM,SAAU,mBAAS,GAE9D,GAAI,CACF,MAAM,KAAO,OAAO,SAAS,QAAQ,MAAQ,IAE7C,GAAI,EADgB,MAAM,MAAM,GAAG,IAAI,cAAe,CAAE,OAAQ,OAAQ,QAAS,CAAE,OAAQ,kBAAmB,EAAG,KAAM,aAAa,CAAE,CAAC,GACtH,GAAI,MAAM,IAAI,MAAM,iBAAiB,EACtD,MAAM,aAAe,MAAM,MAAM,GAAG,IAAI,UAAW,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EAC9F,GAAI,CAAC,aAAa,GAAI,MAAM,IAAI,MAAM,kBAAkB,EACxD,MAAM,KAAO,MAAM,aAAa,KAAK,EACrC,gBAAgB,KAAK,UAAU,EAC/B,UAAU,UAAU,OAAO,YAAY,EACvC,UAAU,UAAU,IAAI,cAAc,EAClC,WAAU,SAAS,YAAc,MAAM,aAAc,eAAU,GACnE,OAAO,aAAa,iBAAiB,EACrC,kBAAoB,OAAO,WAAW,IAAM,CAC1C,mBAAqB,GACrB,uBAAyB,GACzB,UAAU,UAAU,OAAO,cAAc,EACzC,oBAAoB,CACtB,EAAG,GAAI,CACT,MAAgB,CACd,mBAAqB,GACrB,uBAAyB,GACzB,UAAU,UAAU,OAAO,aAAc,cAAc,EACvD,uBAAyB,GACzB,oBAAoB,CACtB,EACF,EAKM,mBAAsB,OAAU,CACpC,MAAM,OAAS,MAAM,OACf,WAAa,SAAW,KACxB,aAAe,kBAAkB,SAAW,OAAO,QAAQ,oBAAoB,IAAM,UACvF,CAAC,YAAc,CAAC,eACpB,MAAM,eAAe,EACrB,MAAM,yBAAyB,EAC/B,UAAU,EACZ,EACA,OAAO,iBAAiB,SAAU,mBAAoB,EAAI,EAC1D,OAAO,iBAAiB,QAAS,mBAAoB,EAAI,EAkBzD,MAAM,kBAAoB,CAAC,QAAS,MAAQ,KAAU,CAClD,GAAI,CAAC,oBAAqB,MAAO,GACjC,MAAM,QAAU,QAAQ,QAAQ,KAAM,KAAK,EAErC,SAAW,oBAAoB,cACnC,0BAA0B,OAAO,4BAA4B,OAAO,IACtE,EACA,GAAI,SACF,OAAI,OAAS,SAAS,aAAa,cAAc,IAAM,SAAQ,SAAS,MAAM,EACvE,GAGT,MAAM,MAAQ,CAAC,GAAG,oBAAoB,iBAAiB,mCAAmC,CAAC,EACxF,KAAM,QAAW,CAAC,GAAG,OAAO,OAAO,EAAE,KAAM,QAAW,OAAO,QAAU,OAAO,CAAC,EAClF,GAAI,MACF,OAAI,MAAM,QAAU,UAClB,MAAM,MAAQ,QACd,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,GAErD,GAGT,MAAM,YAAc,CAAC,GAAG,oBAAoB,iBAAiB,+BAA+B,CAAC,EAC1F,KAAM,OAAU,CACf,MAAM,KAAO,MAAM,QAAQ,6BAA6B,GACnD,oBAAoB,cAAc,+BAA+B,OAAO,oCAAoC,OAAO,IAAI,EAC5H,OAAO,OAAS,KAAK,aAAa,2BAA2B,IAAM,SAC9D,KAAK,aAAa,4BAA4B,IAAM,QAC3D,CAAC,EACH,GAAI,YAAa,CAEf,MAAM,aADO,oBAAoB,cAAc,+BAA+B,OAAO,oCAAoC,OAAO,IAAI,GACzG,aAAa,2BAA2B,IAAM,QACzE,OAAI,YAAY,UAAY,cAAc,YAAY,MAAM,EACrD,EACT,CAEA,MAAO,EACX,EAEM,oBAAsB,IAAM,CAChC,MAAM,OAAS,IAAI,IAAI,OAAO,SAAS,IAAI,EAAE,aAAa,IAAI,SAAS,EACvE,GAAI,CAAC,OAAQ,OACb,MAAM,QAAU,SAAS,KAAM,MAAS,OAAO,KAAK,EAAE,IAAM,OAAO,MAAM,CAAC,EACrE,SACL,QAAQ,QAAQ,QAAQ,iBAAiB,CAC3C,EAOM,sBAAwB,IAAM,CAClC,MAAM,OAAS,IAAI,IAAI,OAAO,SAAS,IAAI,EAAE,aAAa,IAAI,SAAS,EAEvE,GADI,CAAC,QAAU,CAAC,qBACZ,OAAO,cAAc,OAAS,EAAE,IAAM,OAAO,MAAM,EAAG,OAO1D,IAAI,UAAY,GAChB,MAAM,SAAW,IAAM,CAAE,UAAY,EAAM,EAC3C,SAAS,iBAAiB,cAAe,SAAU,EAAI,EACvD,SAAS,iBAAiB,UAAW,SAAU,EAAI,EACnD,MAAM,QAAU,IAAM,CACpB,SAAS,oBAAoB,cAAe,SAAU,EAAI,EAC1D,SAAS,oBAAoB,UAAW,SAAU,EAAI,CACxD,EAYA,IAAI,WACA,WAAa,GACjB,MAAM,WAAa,IAAI,iBAAiB,IAAM,SAAS,CAAC,EAElD,QAAU,IAAM,CACpB,GAAI,YAIJ,IAHA,WAAa,GACb,OAAO,aAAa,UAAU,EAC9B,WAAW,WAAW,EAClB,WAAa,OAAO,cAAc,OAAS,EAAE,IAAM,OAAO,MAAM,EAAG,CAAE,QAAQ,EAAG,MAAQ,CAC5F,oBAAoB,EACpB,QAAQ,EACV,EAEM,SAAW,IAAM,CACjB,YAAc,YAClB,OAAO,aAAa,UAAU,EAC9B,WAAa,OAAO,WAAW,QAAS,GAAG,EAC7C,EAEA,WAAW,QAAQ,oBAAqB,CACtC,WAAY,GACZ,gBAAiB,CAAC,eAAgB,QAAS,QAAQ,EACnD,UAAW,GACX,QAAS,EACX,CAAC,EACD,SAAS,EAIT,OAAO,WAAW,QAAS,GAAG,CAChC,EAEM,eAAiB,kBAAkB,EACrC,gBAAgB,gBAAgB,eAAgB,EAAK,EAYrD,gBAAgB,iBAAiB,eAAgB,EAAI,EACzD,oBAAoB,EACpB,sBAAsB,CACxB,GAAG",
  "names": ["action", "confirmation"]
}
