{
  "version": 3,
  "sources": ["/cdn/shop/t/58/assets/sb-glitter-bar.js?x=1793736083339"],
  "sourcesContent": ["/*\n * The set bar's pixel glitter, shared by the cart's set card (sb-cart.js, snippets/sb-cart-set-pool.liquid) and any other place\n * that shows the same bar (his 3 Nov about the collection's set section: \u201Eto powinien by\u0107 taki sam pasek, tylko troch\u0119 wi\u0119kszy\u201D).\n * Markup: snippets/sb-glitter-bar.liquid (the canvas, the marks and the badge). The canvas says how big the squares are:\n * data-scale (1 = the cart), or data-cell (px, default 3), data-gap (px, default 1), data-rows (default 4); data-palette=\"gliter\"\n * for GLITER's colours; data-first / data-top are the set's steps. Outside a cart a bar starts itself (SBGlitterBar.mount, the\n * 'sb:glitter' event, see the end of this file); by hand: const bar = new SBGlitterBar(id); bar.attach(canvas); bar.set(n, top, flash).\n * The fill is kept per id for the browser tab (sessionStorage sb-bar-<id>), so a bar with the cart's id starts where the cart's was.\n */\n(() => {\n  if (window.SBGlitterBar) return;\n  const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const live = new Set();\n\n  /* The pixel-glitter bar on the set card (his 2 Nov: \u201Epasek post\u0119pu \u2026 pikselowym z\u0142otym brokatem \u2026 kwadraciki \u2026 cyfrowy brokat,\n     kt\u00F3ry si\u0119 mieni \u2026 im wi\u0119cej jest posypek, tym on si\u0119 nasila \u2026 \u017Ceby ludzie chcieli do\u0142o\u017Cy\u0107\u201D): one canvas per card, squares of\n     3 px that twinkle, coloured along the bar (barStops); a short flash when the cart really\n     reaches a step. It keeps its fill between renders of the cart, draws about 30 times a second only while\n     on screen, and stands still with reduced motion. The prices under the jars fade in when the card turns from \u201Eprzeliczam\u201D to\n     priced. */\n  function bezier(x1, y1, x2, y2) {\n    const cx = 3 * x1;\n    const bx = 3 * (x2 - x1) - cx;\n    const ax = 1 - cx - bx;\n    const cy = 3 * y1;\n    const by = 3 * (y2 - y1) - cy;\n    const ay = 1 - cy - by;\n    return (x) => {\n      let t = x;\n      for (let i = 0; i < 8; i += 1) {\n        const e = ((ax * t + bx) * t + cx) * t - x;\n        const d = (3 * ax * t + 2 * bx) * t + cx;\n        if (Math.abs(e) < 1e-5 || !d) break;\n        t -= e / d;\n      }\n      t = Math.min(1, Math.max(0, t));\n      return ((ay * t + by) * t + cy) * t;\n    };\n  }\n  const easeOut = bezier(0.23, 1, 0.32, 1);\n\n  /* The bar's colours along its length (his 3 Nov: \u201Edla posypek b\u0119dzie przechodzi\u0142o z r\u00F3\u017Cu do srebra i do z\u0142ota (tak jak s\u0105\n     sloty srebrne i z\u0142ote) a dla gliter\u00F3w \u2026 ten gradient tylko chyba zgubi\u0142e\u015B tam turkus\u201D). Mixes: brand pink, blending into the set\n     places' silver at the first step and into their gold at the end.\n     Glitters: GLITER's own gradient from the old store (assets/gliter.css --gl-grad), turquoise first, as it is. */\n  const BAR_PINK = [242, 150, 150]; // --sb-sp2\n  const BAR_SILVER = [185, 190, 199]; // --sb-silver-edge\n  const BAR_GOLD = [215, 166, 64]; // --sb-gold-edge\n  // glitters keep GLITER's own colour run (his 3 Nov: \u201Ew gliterach jest ten kolorowy gradient, wi\u0119c tam inaczej pasek dzia\u0142a\u201D)\n  const BAR_GLITER = [\n    [0, [57, 223, 226]],\n    [0.3, [70, 95, 233]],\n    [0.7, [242, 120, 174]],\n    [1, [250, 201, 112]],\n  ];\n  // Mixes: one long blend (his \u201Ew posypkach nie ma gradientu, tylko twarde odci\u0119cia\u201D) that lands on the marks (his \u201Ena 6 posypce kolor\n  // ju\u017C 100% srebrny, a na 8 100% z\u0142oty\u201D): the first step's colour pure under its mark, the last step's from its mark to the end.\n  // `cell` is one column of squares as a share of the squares' length (not the canvas: the squares end a few px short of it), so the\n  // columns either side of a step's boundary are pure whichever way the pixels fall, and so are the last two.\n  function barStops(palette, first, top, cell) {\n    if (palette === 'gliter') return BAR_GLITER;\n    const small = Math.min(1, first / top);\n    const end = Math.max(small, 1 - 1.5 * cell);\n    return [\n      [0, BAR_PINK],\n      [small * 0.4, BAR_PINK],\n      [Math.max(0, small - cell), BAR_SILVER],\n      [Math.min(end, small + cell), BAR_SILVER],\n      [end, BAR_GOLD],\n      [1, BAR_GOLD],\n    ];\n  }\n  function barColour(stops, pos) {\n    let i = 1;\n    while (i < stops.length - 1 && stops[i][0] < pos) i += 1;\n    const [p0, c0] = stops[i - 1];\n    const [p1, c1] = stops[i];\n    const k = Math.min(1, Math.max(0, (pos - p0) / (p1 - p0 || 1)));\n    return c0.map((v, j) => v + (c1[j] - v) * k);\n  }\n  // a square of that colour: lit by b, a sparkle mixing in white\n  function barSquare(rgb, b, sparkle) {\n    const lit = 0.78 + 0.3 * Math.min(1.3, b);\n    const w = Math.min(0.75, sparkle);\n    const c = rgb.map((v) => Math.round(Math.min(255, v * lit * (1 - w) + 255 * w)));\n    return `rgb(${c[0]}, ${c[1]}, ${c[2]})`;\n  }\n\n  class GlitterBar {\n    constructor(id) {\n      this.id = id;\n      this.n = null;\n      this.dur = 450;\n      this.size = 3; // CSS px per square\n      this.pitch = 4; // square + 1 px gap\n      this.rows = 4;\n      this.fill = 0;\n      this.from = 0;\n      this.to = 0;\n      this.t0 = 0;\n      this.flash = null;\n      this.visible = false;\n      this.raf = 0;\n      this.last = 0;\n      this.cols = 0;\n      this.cells = [];\n    }\n    attach(canvas) {\n      // the cart keeps its canvas across re-renders (it moves it into the new card), but the tokens around it are new\n      const row = canvas.parentElement;\n      if (row !== this.row) carry(this.row, row);\n      this.row = row;\n      if (this.c === canvas) {\n        this.fitRow();\n        return;\n      }\n      if (this.ro) this.ro.disconnect();\n      if (this.io) this.io.disconnect();\n      this.c = canvas;\n      // the squares' size, gap and rows come with the canvas: data-scale (1 = the cart's card: 3 px squares, 1 px gap, 4 rows;\n      // 2 = twice as big), or data-cell / data-gap / data-rows for anything else\n      const scale = Number(canvas.dataset.scale) || 1;\n      this.size = Number(canvas.dataset.cell) || 3 * scale;\n      this.pitch = this.size + (canvas.dataset.gap !== undefined ? Number(canvas.dataset.gap) : scale);\n      this.rows = Number(canvas.dataset.rows) || 4;\n      live.add(this);\n      this.palette = canvas.dataset.palette || '';\n      this.top = Number(canvas.dataset.top) || 1;\n      this.first = Number(canvas.dataset.first) || this.top;\n      this.ctx = canvas.getContext('2d');\n      this.resize();\n      this.ro = new ResizeObserver(() => {\n        this.resize();\n        this.kick();\n      });\n      this.ro.observe(canvas);\n      this.io = new IntersectionObserver((es) => {\n        this.visible = es[0].isIntersecting;\n        this.kick();\n      });\n      this.io.observe(canvas);\n    }\n    resize() {\n      const w = this.c.clientWidth;\n      if (!w) return;\n      const h = this.rows * this.pitch - (this.pitch - this.size);\n      this.c.style.height = `${h}px`;\n      this.dpr = Math.min(2, window.devicePixelRatio || 1);\n      // setting a canvas's width wipes it even when the size is the same, and a resting bar (no fill moving, nothing lit) is not\n      // redrawn on its own: so the bitmap is reset only when its size really changes, and the next frame always draws (3 Nov: at 0\n      // jars a ResizeObserver call right after the first paint left the section's bar blank in 1 run out of 4)\n      const cw = Math.round(w * this.dpr);\n      const ch = Math.round(h * this.dpr);\n      if (this.c.width !== cw) this.c.width = cw;\n      if (this.c.height !== ch) this.c.height = ch;\n      this.last = 0;\n      // the last token is centred on the bar's end, so the squares stop half a token (and its \u2713) short of the canvas: the token\n      // ends where the row of places ends instead of running into the card's edge\n      const end = this.row && this.row.querySelector('.sb-pool__token.is-end');\n      const ok = end && end.querySelector('.sb-pool__token-ok');\n      const room = end ? end.offsetWidth / 2 + (ok ? Math.max(0, -parseFloat(getComputedStyle(ok).right) || 0) : 0) : 0;\n      const cols = Math.floor((w - room + this.pitch - this.size) / this.pitch);\n      this.w = w;\n      // the bar's length (the steps, the colours, the tokens) is the squares'\n      this.gw = cols * this.pitch - (this.pitch - this.size);\n      this.stops = barStops(this.palette, this.first, this.top, this.pitch / this.gw);\n      if (cols !== this.cols || this.cells.length !== cols * this.rows) {\n        this.cols = cols;\n        this.cells = Array.from({ length: cols * this.rows }, () => ({ b: 0.3 + Math.random() * 0.45, s: 0, hue: Math.random(), at: Math.random(), d: Math.random() }));\n      }\n      this.fitRow();\n    }\n    // the token row ends where the squares end (sb-cart.css .sb-pool__ticks), so a step's token, its line and the boundary between\n    // its jar and the next are one axis (his 3 Nov: \u201Eznaczniki s\u0105 inaczej rozmieszczone na pasku\u201D)\n    fitRow() {\n      if (this.row && this.gw) this.row.style.setProperty('--sb-grid-end', `${Math.max(0, this.w - this.gw)}px`);\n    }\n    // n jars of `top`; flash = the cart has just reached a step. His 3 Nov (\u201Ep\u0142ynnie zape\u0142nia\u0107 kolejne piksele, wolniej\u201D): about\n    // a second per jar, steady, the squares at the edge lighting one by one; a new page starts where the last one ended.\n    set(n, top, flash) {\n      const to = Math.min(n, top) / top;\n      if (this.n === null) {\n        let last = null;\n        try {\n          last = JSON.parse(sessionStorage.getItem(`sb-bar-${this.id}`) || 'null');\n        } catch (e) {}\n        if (last && last.top === top) {\n          this.fill = this.from = this.to = Math.min(last.n, top) / top;\n          this.n = last.n;\n        }\n      }\n      const prev = this.n; // the count before this change (null the first time, with nothing kept)\n      if (to !== this.to) {\n        this.from = this.fill;\n        this.to = to;\n        this.t0 = performance.now();\n        this.dur = Math.min(1600, 600 + 450 * Math.max(1, Math.abs(n - (this.n === null ? 0 : this.n))));\n      }\n      this.n = n;\n      try {\n        sessionStorage.setItem(`sb-bar-${this.id}`, JSON.stringify({ n, top }));\n      } catch (e) {}\n      if (flash && !reduceMotion) this.flash = { t0: performance.now() };\n      this.kick();\n      this.arrive(prev, n, top);\n    }\n    // how long until the fill gets to share f of the bar (0 when it is there already or not moving)\n    delayTo(f) {\n      const span = this.to - this.from;\n      if (!span || reduceMotion) return 0;\n      const k = Math.min(1, Math.max(0, (f - this.from) / span));\n      return Math.max(0, this.t0 + this.dur * k - performance.now());\n    }\n    // a step's token reached on the way up (his pick B, 3 Nov): it stays as it was until the fill gets there, then fills and pops\n    // with a few green bubbles, so the token and the bar move together; going down nothing plays\n    arrive(prev, n, top) {\n      const row = this.c && this.c.parentElement;\n      if (!row || reduceMotion || prev === null || n <= prev) return;\n      row.querySelectorAll('.sb-pool__token[data-step]').forEach((tok) => {\n        const step = Number(tok.dataset.step);\n        if (!(step > prev && step <= n)) return;\n        tok.classList.add('is-wait');\n        clearTimeout(tok.sbTimer);\n        const wait = this.delayTo(Math.min(step, top) / top);\n        tok.sbDue = performance.now() + wait;\n        tok.sbTimer = setTimeout(() => popToken(tok), wait);\n      });\n    }\n    kick() {\n      if (!this.raf && this.c) this.raf = requestAnimationFrame((t) => this.frame(t));\n    }\n    // the card is gone (no jars of this set left): the next one starts from empty, here and on the next page\n    forget() {\n      this.gone = true;\n      try {\n        sessionStorage.removeItem(`sb-bar-${this.id}`);\n      } catch (e) {}\n    }\n    reset() {\n      this.gone = false;\n      this.fill = this.from = this.to = 0;\n      this.n = 0;\n    }\n    frame(t) {\n      this.raf = 0;\n      if (!this.c || !this.c.isConnected) return;\n      if (!this.cols) this.resize(); // attached while its card had no width yet\n      if (!this.cols) return;\n      const k = reduceMotion ? 1 : Math.min(1, (t - this.t0) / this.dur);\n      const moving = k < 1 || !!this.flash;\n      const live = this.visible && !document.hidden && this.fill > 0 && !reduceMotion;\n      if (!moving && this.last && t - this.last < 33) {\n        if (live) this.kick();\n        return;\n      }\n      this.last = t;\n      this.fill = this.from + (this.to - this.from) * k;\n      this.draw(t);\n      if (moving || live) this.kick();\n    }\n    draw(t) {\n      const { ctx, dpr } = this;\n      const P = this.pitch * dpr;\n      const S = this.size * dpr;\n      ctx.clearRect(0, 0, this.c.width, this.c.height);\n      // the fill ends on the boundary after its last jar (fill \u00D7 the squares' length), the same px as that step's token: a column\n      // lights square by square once the boundary has passed its middle, so at rest no square crosses a token's line\n      const edge = this.fill * this.gw;\n      const filled = edge / this.pitch;\n      let fx = -99;\n      let fw = 0;\n      if (this.flash) {\n        const k = (t - this.flash.t0) / 700;\n        if (k >= 1) this.flash = null;\n        else {\n          fx = easeOut(k) * (filled + 8) - 4;\n          fw = 3 + this.cols * 0.08;\n        }\n      }\n      // his 3 Nov (\u201Ewr\u00F3\u0107 po prostu do jednej intensywno\u015Bci\u201D): the same density and twinkle everywhere; only the colour changes along\n      // the bar (barStops). The fill uncovers the colours, it does not stretch them.\n      const spark = reduceMotion ? 0 : 0.03;\n      for (let x = 0; x < this.cols; x += 1) {\n        const part = Math.min(1, Math.max(0, (edge - x * this.pitch - this.size / 2) / (this.size / 2)));\n        const pos = Math.min(1, (x * this.pitch + this.size / 2) / this.gw); // the column's middle, as a share of the squares' length\n        const rgb = barColour(this.stops, pos);\n        for (let y = 0; y < this.rows; y += 1) {\n          const cell = this.cells[x * this.rows + y];\n          // the column at the edge fills square by square, in its own random order\n          const inFill = part >= 1 || (part > 0 && cell.at < part);\n          if (!inFill) {\n            // the empty track: a calm warm grey, 1,67 : 1 on white (3 Nov: the empty bar on a white card was almost invisible\n            // at 1,13 : 1), so at 0 jars the bar to fill is plain to see; grey, not a set colour, so it never reads as filled\n            ctx.fillStyle = 'rgb(207, 199, 195)';\n          } else if (cell.d >= 0.62) {\n            // filled but not lit: the colour, light\n            ctx.fillStyle = barSquare(rgb, 1, 0.68);\n          } else {\n            if (Math.random() < spark) cell.s = 1;\n            cell.s *= 0.84;\n            let b = cell.b + cell.s * 0.9;\n            if (fx > -99) {\n              const dist = Math.abs(x - fx);\n              if (dist < fw) b += (1 - dist / fw) * 1.1;\n            }\n            ctx.fillStyle = barSquare(rgb, b, cell.s * 0.6);\n          }\n          ctx.fillRect(Math.round(x * P), Math.round(y * P), Math.ceil(S), Math.ceil(S));\n        }\n      }\n    }\n  }\n\n  // since / was: the pop goes on from `since` ms in, with the bubbles of the token it replaces (carry)\n  function popToken(tok, since = 0, was = null) {\n    tok.classList.remove('is-wait');\n    if (!tok.isConnected) return;\n    tok.sbPopAt = performance.now() - since;\n    if (since < 460) {\n      const a = tok.animate([{ scale: '0.7' }, { scale: '1.18', offset: 0.55 }, { scale: '1' }], { duration: 460, easing: 'cubic-bezier(0.23, 1, 0.32, 1)' });\n      a.currentTime = since;\n    }\n    let fx;\n    if (was) {\n      fx = was.cloneNode(true);\n      fx.querySelectorAll('i').forEach((b) => (b.style.animationDelay = `${parseFloat(b.style.getPropertyValue('--d')) - since}ms`));\n    } else {\n      fx = document.createElement('span');\n      fx.className = 'sb-pool__bubbles';\n      fx.setAttribute('aria-hidden', 'true');\n      for (let i = 0; i < 7; i += 1) {\n        const a = (i / 7) * Math.PI * 2 + Math.random() * 0.5;\n        const d = 14 + Math.random() * 12;\n        const b = document.createElement('i');\n        b.style.cssText = `--x:${Math.cos(a) * d}px;--y:${Math.sin(a) * d - 6}px;--s:${4 + Math.random() * 4}px;--t:${620 + Math.random() * 280}ms;--d:${Math.random() * 90}ms`;\n        fx.appendChild(b);\n      }\n    }\n    tok.sbFx = fx;\n    tok.appendChild(fx);\n    setTimeout(() => fx.remove(), 1200 - since);\n  }\n  GlitterBar.popToken = popToken;\n\n  // A re-render swaps the tokens for new ones (the cart folds a just-added jar into its set line about a second after adding it):\n  // a pop still waiting for the fill, or still playing, goes on on the new token instead of being cut short.\n  function carry(from, to) {\n    if (!from || !to || from === to) return;\n    const now = performance.now();\n    from.querySelectorAll('.sb-pool__token[data-step]').forEach((old) => {\n      clearTimeout(old.sbTimer);\n      const tok = to.querySelector(`.sb-pool__token[data-step=\"${old.dataset.step}\"]`);\n      if (!tok || !tok.classList.contains('is-hit')) return;\n      if (old.classList.contains('is-wait') && old.sbDue) {\n        tok.classList.add('is-wait');\n        tok.sbDue = old.sbDue;\n        tok.sbTimer = setTimeout(() => popToken(tok), Math.max(0, old.sbDue - now));\n      } else if (old.sbPopAt && now - old.sbPopAt < 1200) {\n        popToken(tok, now - old.sbPopAt, old.sbFx);\n      }\n    });\n  }\n\n  // back on the tab: the bars on screen start again (they stop while the tab is hidden)\n  document.addEventListener('visibilitychange', () =>\n    live.forEach((g) => {\n      if (g.c && !g.c.isConnected) live.delete(g);\n      else g.kick();\n    })\n  );\n  // Bars outside a cart start themselves: on load, and again whenever a page re-renders its part and says so with\n  // document.dispatchEvent(new CustomEvent('sb:glitter', { detail: { root } })) \u2014 or calls SBGlitterBar.mount(root). One drawing per\n  // id, kept across re-renders, so the fill moves on from where it was. Bars inside [data-sb-cart] belong to sb-cart.js.\n  const mounted = new Map();\n  function mount(root) {\n    (root || document).querySelectorAll('[data-sb-glitter]').forEach((canvas) => {\n      if (canvas.closest('[data-sb-cart]')) return;\n      const id = canvas.dataset.sbGlitter;\n      let g = mounted.get(id);\n      if (!g) mounted.set(id, (g = new GlitterBar(id)));\n      g.attach(canvas);\n      g.set(Number(canvas.dataset.n) || 0, Number(canvas.dataset.top) || 1, false);\n    });\n  }\n  GlitterBar.mount = mount;\n  document.addEventListener('sb:glitter', (e) => mount(e.detail && e.detail.root));\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', () => mount());\n  else mount();\n\n  window.SBGlitterBar = GlitterBar;\n})();\n"],
  "mappings": "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",
  "names": ["live"]
}
