{
  "version": 3,
  "sources": ["/cdn/shop/t/27/assets/scroll-shadow.js?glv=1792798980"],
  "sourcesContent": ["const template = `\n  <style>\n  :host {\n    display: inline-block;\n    position: relative;\n  }\n  :host([hidden]) {\n    display: none;\n  }\n  s {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    pointer-events: none;\n\t\tz-index: 5;\n\t\tborder-radius: var(--scroll-shadow-radius);\n    background:\n      var(--scroll-shadow-top, radial-gradient(farthest-side at 50% 0%, rgba(0,0,0,.2), rgba(0,0,0,0))) top/100% var(--top),\n      var(--scroll-shadow-bottom, radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.2), rgba(0,0,0,0))) bottom/100% var(--bottom),\n      var(--scroll-shadow-left, radial-gradient(farthest-side at 0%, rgba(0,0,0,.2), rgba(0,0,0,0))) left/var(--left) 100%,\n      var(--scroll-shadow-right, radial-gradient(farthest-side at 100%, rgba(0,0,0,.2), rgba(0,0,0,0))) right/var(--right) 100%;\n    background-repeat: no-repeat;\n  }\n  </style>\n  <slot></slot>\n  <s></s>\n`\n\nconst updaters = new WeakMap()\n\nexport class ScrollShadowElement extends HTMLElement {\n  static get observedAttributes() {\n    return ['el']\n  }\n\n  get el() {\n    return this.getAttribute('el')\n  }\n\n  set el(value) {\n    this.setAttribute('el', value)\n  }\n\n  constructor() {\n    super()\n    this.attachShadow({ mode: 'open' }).innerHTML = template\n    updaters.set(this, new Updater(this.shadowRoot.lastElementChild))\n  }\n\n  connectedCallback() {\n    this.shadowRoot.querySelector('slot').addEventListener('slotchange', () => this.start())\n    this.start()\n  }\n\n  disconnectedCallback() {\n    updaters.get(this).stop()\n  }\n\n  attributeChangedCallback(_name, oldValue, newValue) {\n    if (oldValue !== newValue) {\n      this.scrollEl = newValue ? this.querySelector(newValue) : null\n      this.start()\n    }\n  }\n\n  start() {\n    const el = this.scrollEl || this.firstElementChild\n    updaters.get(this).start(el, this.scrollEl ? this.firstElementChild : null)\n  }\n}\n\nclass Updater {\n  constructor(targetElement) {\n    const update = this.update.bind(this, targetElement, getComputedStyle(targetElement))\n\n    this.handleScroll = throttle(update)\n    this.resizeObserver = new ResizeObserver(update)\n  }\n\n  start(element, rootElement) {\n    if (this.el) this.stop()\n    if (element) {\n      element.addEventListener('scroll', this.handleScroll)\n      this.resizeObserver.observe(element)\n      this.el = element\n    }\n    if (rootElement) {\n      this.resizeObserver.observe(rootElement)\n      this.rootEl = rootElement\n    }\n  }\n\n  stop() {\n    if (!this.el) return\n    this.el.removeEventListener('scroll', this.handleScroll)\n    this.resizeObserver.disconnect()\n    this.el = null\n    this.rootEl = null\n  }\n\n  update(targetElement, computedStyle) {\n    const { el, rootEl } = this\n    if (!el) return\n\n    const maxSize = Number(computedStyle.getPropertyValue('--scroll-shadow-size') || 14)\n    const style = {\n      '--top': clamp(el.scrollTop, 0, maxSize),\n      '--bottom': clamp(el.scrollHeight - el.offsetHeight - el.scrollTop, 0, maxSize),\n      '--left': clamp(el.scrollLeft, 0, maxSize),\n      '--right': clamp(el.scrollWidth - el.offsetWidth - el.scrollLeft, 0, maxSize),\n    }\n\n    if (rootEl) {\n      const clientRect = el.getBoundingClientRect()\n      const rootClientRect = rootEl.getBoundingClientRect()\n\n      Object.assign(style, {\n        top: clamp(clientRect.top - rootClientRect.top),\n        bottom: clamp(rootClientRect.bottom - clientRect.bottom),\n        left: clamp(clientRect.left - rootClientRect.left),\n        right: clamp(rootClientRect.right - clientRect.right),\n      })\n    }\n\n    for (const key in style) {\n      targetElement.style.setProperty(key, `${style[key]}px`)\n    }\n  }\n}\n\nfunction clamp(num, min = 0, max) {\n  if (num < min) return min\n  if (num > max) return max\n  return num\n}\n\nfunction throttle(callback) {\n  let id = null\n  return () => {\n    if (id) return\n    id = requestAnimationFrame(() => {\n      callback()\n      id = null\n    })\n  }\n}\n\nif ('customElements' in window && 'ResizeObserver' in window) {\n  customElements.define('scroll-shadow', ScrollShadowElement)\n}\n"],
  "mappings": "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",
  "names": []
}
