{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/mlineart-customer-ux.js?ux=20261008-polish1"],
  "sourcesContent": ["(() => {\n  if (window.__mlineartCustomerUxLoaded) return;\n  window.__mlineartCustomerUxLoaded = true;\n\n  const parseConfig = (script) => {\n    try {\n      return JSON.parse(script.textContent);\n    } catch (error) {\n      console.error('MLineart customer UX config could not be parsed.', error);\n      return null;\n    }\n  };\n\n  const formatWithDelimiters = (number, precision = 2, thousands = ',', decimal = '.') => {\n    if (Number.isNaN(number) || number == null) return '0';\n    const fixed = (number / 100).toFixed(precision);\n    const [integer, fraction] = fixed.split('.');\n    return integer.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, `$1${thousands}`) + (fraction ? decimal + fraction : '');\n  };\n\n  const formatMoney = (cents, format) => {\n    const template = format || '{{amount}}';\n    const match = template.match(/{{\\s*(\\w+)\\s*}}/);\n    const placeholder = match?.[1] || 'amount';\n    let value;\n\n    switch (placeholder) {\n      case 'amount_no_decimals':\n        value = formatWithDelimiters(cents, 0);\n        break;\n      case 'amount_with_comma_separator':\n        value = formatWithDelimiters(cents, 2, '.', ',');\n        break;\n      case 'amount_no_decimals_with_comma_separator':\n        value = formatWithDelimiters(cents, 0, '.', ',');\n        break;\n      case 'amount_with_apostrophe_separator':\n        value = formatWithDelimiters(cents, 2, \"'\", '.');\n        break;\n      default:\n        value = formatWithDelimiters(cents, 2);\n    }\n\n    return template.replace(match?.[0] || '{{amount}}', value);\n  };\n\n  const setPriceText = (element, value) => {\n    if (!element) return;\n    const accessibility = element.querySelector('.sr-only')?.outerHTML || '';\n    element.innerHTML = `${accessibility}${value}`;\n  };\n\n  const formatLocalizedMoney = (cents, format, locale, currency) => {\n    const value = formatMoney(cents, format);\n    if (currency === 'EUR' && /^de(?:-|$)/i.test(locale || '')) {\n      return value.replace(/\u20AC\\s*/g, '\u20AC ');\n    }\n    return value;\n  };\n\n  const contextForForm = (formId) => {\n    const script = document.querySelector(`[data-mlineart-customer-ux-config][data-product-form-id=\"${CSS.escape(formId)}\"]`);\n    if (!script) return null;\n    const config = parseConfig(script);\n    const info = document.querySelector(`[data-mlineart-product-info][data-product-form-id=\"${CSS.escape(formId)}\"]`);\n    const form = document.getElementById(formId);\n    return config && info && form ? { config, info, form } : null;\n  };\n\n  const selectedVariantId = (form) => Number(form.querySelector('input[name=\"id\"]')?.value || 0);\n  const formIdOf = (form) => form?.getAttribute?.('id') || '';\n\n  const selectedVariantFromPicker = (form) => {\n    const script = document.querySelector(`variant-picker[form-id=\"${CSS.escape(formIdOf(form))}\"] script[data-variant]`);\n    return script ? parseConfig(script) : null;\n  };\n\n  const formForTarget = (target) => {\n    const closestForm = target?.closest?.('form');\n    if (closestForm) return closestForm;\n    const formId = target?.getAttribute?.('form') || target?.closest?.('[data-mlineart-product-info]')?.dataset.productFormId;\n    return formId ? document.getElementById(formId) : null;\n  };\n\n  const refreshContext = (formId, eventVariant = null) => {\n    const render = () => {\n      const context = contextForForm(formId);\n      if (!context) return;\n      renderQuantityPrice(context, eventVariant);\n      renderPrintFinish(context, eventVariant);\n    };\n\n    window.requestAnimationFrame(() => {\n      render();\n      window.setTimeout(render, 80);\n    });\n  };\n\n  const renderQuantityPrice = (context, eventVariant = null) => {\n    const { config, info, form } = context;\n    const root = info.querySelector('[data-mlineart-quantity-price]');\n    if (!root) return;\n    const variant = eventVariant || config.variants.find((item) => Number(item.id) === selectedVariantId(form)) || selectedVariantFromPicker(form);\n    if (!variant) return;\n\n    const quantityInput = form.querySelector('input[name=\"quantity\"]') || info.querySelector('input[name=\"quantity\"]');\n    const quantity = Math.max(1, Number.parseInt(quantityInput?.value || '1', 10) || 1);\n    const format = root.dataset.currencyCodeEnabled === 'true' ? root.dataset.moneyWithCurrencyFormat : root.dataset.moneyFormat;\n    const salePrice = root.querySelector('.price-list--product sale-price');\n    const compareAtPrice = root.querySelector('.price-list--product compare-at-price');\n    const note = root.querySelector('[data-mlineart-unit-price-note]');\n\n    const total = formatLocalizedMoney(Number(variant.price) * quantity, format, config.locale, config.currency);\n    const unit = formatLocalizedMoney(Number(variant.price), format, config.locale, config.currency);\n\n    setPriceText(salePrice, total);\n    if (compareAtPrice && Number(variant.compareAtPrice) > Number(variant.price)) {\n      setPriceText(compareAtPrice, formatLocalizedMoney(Number(variant.compareAtPrice) * quantity, format, config.locale, config.currency));\n    }\n\n    if (note) {\n      note.hidden = quantity === 1;\n      note.textContent = quantity === 1 ? '' : `(${quantity} \u00D7 ${unit})`;\n    }\n  };\n\n  const renderPrintFinish = (context, eventVariant = null) => {\n    const { config, info, form } = context;\n    const print = config.printFinish;\n    if (!print?.position) return;\n    const hint = info.querySelector('[data-mlineart-print-finish]');\n    if (!hint) return;\n    const variant = eventVariant || config.variants.find((item) => Number(item.id) === selectedVariantId(form)) || selectedVariantFromPicker(form);\n    const selected = variant?.options?.[Number(print.position) - 1];\n    const luxTouch = selected === print.luxTouchValue;\n    hint.querySelector('[data-mlineart-print-title]').textContent = luxTouch ? print.luxTouchTitle : print.standardTitle;\n    hint.querySelector('[data-mlineart-print-copy]').textContent = luxTouch ? print.luxTouchCopy : print.standardCopy;\n  };\n\n  const initialize = () => {\n    document.querySelectorAll('[data-mlineart-customer-ux-config]').forEach((script) => {\n      const context = contextForForm(script.dataset.productFormId);\n      if (!context) return;\n      renderQuantityPrice(context);\n      renderPrintFinish(context);\n    });\n  };\n\n  const selectGalleryMedia = (mediaId) => {\n    const gallery = document.querySelector('product-gallery');\n    if (!gallery) return;\n    const cell = Array.from(gallery.querySelectorAll('.product-gallery__media')).find((item) => (item.dataset.mediaId || '').endsWith(mediaId));\n    if (!cell) return;\n    const index = gallery.carousel?.cells?.indexOf(cell) ?? -1;\n    if (index >= 0 && gallery.carousel?.isScrollable) {\n      gallery.carousel.select(index, { instant: true });\n    } else {\n      cell.scrollIntoView({ block: 'start', behavior: 'smooth' });\n    }\n    const thumbnail = Array.from(gallery.querySelectorAll('.product-gallery__thumbnail')).find((item) => (item.dataset.mediaId || '').endsWith(mediaId));\n    thumbnail?.click();\n  };\n\n  const handleInputChange = (event) => {\n    const form = formForTarget(event.target);\n    const formId = formIdOf(form);\n    if (!formId) return;\n    refreshContext(formId);\n  };\n\n  document.addEventListener('input', handleInputChange, true);\n  document.addEventListener('change', handleInputChange, true);\n\n  document.addEventListener('variant:change', (event) => {\n    const formId = event.detail?.formId || formIdOf(formForTarget(event.target));\n    if (!formId) return;\n    refreshContext(formId, event.detail?.variant);\n  }, true);\n\n  document.addEventListener('product:rerender', () => window.setTimeout(initialize, 0), true);\n\n  document.addEventListener('click', (event) => {\n    const quantityInput = event.target.closest('quantity-selector')?.querySelector('input[name=\"quantity\"]');\n    const quantityForm = quantityInput && formForTarget(quantityInput);\n    const quantityFormId = formIdOf(quantityForm);\n    if (quantityFormId) {\n      refreshContext(quantityFormId);\n    }\n\n    const item = event.target.closest('.po-select-listItem');\n    const option = item?.closest('[data-option-id]');\n    if (!item || !option) return;\n    const script = document.querySelector('[data-mlineart-customer-ux-config]');\n    const config = script && parseConfig(script);\n    if (!config?.zodiac || option.dataset.optionId !== config.zodiac.optionId) return;\n    const label = item.textContent.trim();\n    const mediaId = config.zodiac.valuesA.includes(label) ? config.zodiac.mediaA : config.zodiac.valuesB.includes(label) ? config.zodiac.mediaB : null;\n    if (mediaId) window.setTimeout(() => selectGalleryMedia(mediaId), 0);\n  }, true);\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initialize, { once: true });\n  } else {\n    initialize();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
