{"version":3,"sources":["jsdelivr-header.js","/npm/canvas-confetti@0.4.0/dist/confetti.browser.js"],"names":[],"mappings":"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","file":"/npm/canvas-confetti@0.4.0/dist/confetti.browser.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v3.14.1.\n * Original file: /npm/canvas-confetti@0.4.0/dist/confetti.browser.js\n * \n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// canvas-confetti v0.4.0 built on 2019-08-05T22:54:55.707Z\n!(function (window, module) {\n// source content\n(function () {\n  var frame, cancel;\n  (function(){\n    if (window.requestAnimationFrame && window.cancelAnimationFrame) {\n      frame = window.requestAnimationFrame;\n      cancel = window.cancelAnimationFrame;\n    } else {\n      ['webkit', 'moz', 'o', 'ms'].forEach(function (name) {\n        if (frame && cancel) {\n          return;\n        }\n\n        var framename = name + 'RequestAnimationFrame';\n        var cancelname = name + 'CancelAnimationFrame';\n\n        if (window[framename] && window[cancelname]) {\n          frame = window[framename];\n          cancel = window[cancelname];\n        }\n      });\n    }\n\n    if (!(frame && cancel)) {\n      frame = function (cb) {\n        return window.setTimeout(cb, 1000 / 60);\n      };\n      cancel = function (timer) {\n        return window.clearTimeout(timer);\n      };\n    }\n  }());\n\n  var defaults = {\n    particleCount: 50,\n    angle: 90,\n    spread: 45,\n    startVelocity: 45,\n    decay: 0.9,\n    ticks: 200,\n    x: 0.5,\n    y: 0.5,\n    shapes: ['square', 'circle'],\n    zIndex: 100,\n    colors: [\n      '#26ccff',\n      '#a25afd',\n      '#ff5e7e',\n      '#88ff5a',\n      '#fcff42',\n      '#ffa62d',\n      '#ff36ff'\n    ]\n  };\n\n  function noop() {}\n\n  // create a promise if it exists, otherwise, just\n  // call the function directly\n  function promise(func) {\n    if (module.exports.Promise) {\n      return new module.exports.Promise(func);\n    }\n\n    func(noop, noop);\n\n    return null;\n  }\n\n  function convert(val, transform) {\n    return transform ? transform(val) : val;\n  }\n\n  function isOk(val) {\n    return !(val === null || val === undefined);\n  }\n\n  function prop(options, name, transform) {\n    return convert(\n      options && isOk(options[name]) ? options[name] : defaults[name],\n      transform\n    );\n  }\n\n  function randomInt(min, max) {\n    // [min, max)\n    return Math.floor(Math.random() * (max - min)) + min;\n  }\n\n  function toDecimal(str) {\n    return parseInt(str, 16);\n  }\n\n  function hexToRgb(str) {\n    var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n    if (val.length < 6) {\n        val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2];\n    }\n\n    return {\n      r: toDecimal(val.substring(0,2)),\n      g: toDecimal(val.substring(2,4)),\n      b: toDecimal(val.substring(4,6))\n    };\n  }\n\n  function getOrigin(options) {\n    var origin = prop(options, 'origin', Object);\n    origin.x = prop(origin, 'x', Number);\n    origin.y = prop(origin, 'y', Number);\n\n    return origin;\n  }\n\n  function setCanvasWindowSize(canvas) {\n    canvas.width = document.documentElement.clientWidth;\n    canvas.height = document.documentElement.clientHeight;\n  }\n\n  function setCanvasRectSize(canvas) {\n    var rect = canvas.getBoundingClientRect();\n    canvas.width = rect.width;\n    canvas.height = rect.height;\n  }\n\n  function getCanvas(zIndex) {\n    var canvas = document.createElement('canvas');\n\n    setCanvasWindowSize(canvas);\n\n    canvas.style.position = 'fixed';\n    canvas.style.top = '0px';\n    canvas.style.left = '0px';\n    canvas.style.pointerEvents = 'none';\n    canvas.style.zIndex = zIndex;\n\n    return canvas;\n  }\n\n  function randomPhysics(opts) {\n    var radAngle = opts.angle * (Math.PI / 180);\n    var radSpread = opts.spread * (Math.PI / 180);\n\n    return {\n      x: opts.x,\n      y: opts.y,\n      wobble: Math.random() * 10,\n      velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n      angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n      tiltAngle: Math.random() * Math.PI,\n      color: hexToRgb(opts.color),\n      shape: opts.shape,\n      tick: 0,\n      totalTicks: opts.ticks,\n      decay: opts.decay,\n      random: Math.random() + 5,\n      tiltSin: 0,\n      tiltCos: 0,\n      wobbleX: 0,\n      wobbleY: 0\n    };\n  }\n\n  function updateFetti(context, fetti) {\n    fetti.x += Math.cos(fetti.angle2D) * fetti.velocity;\n    fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + 3; // + gravity\n    fetti.wobble += 0.1;\n    fetti.velocity *= fetti.decay;\n    fetti.tiltAngle += 0.1;\n    fetti.tiltSin = Math.sin(fetti.tiltAngle);\n    fetti.tiltCos = Math.cos(fetti.tiltAngle);\n    fetti.random = Math.random() + 5;\n    fetti.wobbleX = fetti.x + (10 * Math.cos(fetti.wobble));\n    fetti.wobbleY = fetti.y + (10 * Math.sin(fetti.wobble));\n\n    var progress = (fetti.tick++) / fetti.totalTicks;\n\n    var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n    var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n    var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n    var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n    context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n    context.beginPath();\n\n    if (fetti.shape === 'circle') {\n      context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * 0.6, Math.abs(y2 - y1) * 0.6, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n    } else {\n      context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n      context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n      context.lineTo(Math.floor(x2), Math.floor(y2));\n      context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n    }\n\n    context.closePath();\n    context.fill();\n\n    return fetti.tick < fetti.totalTicks;\n  }\n\n  function animate(canvas, fettis, isLibCanvas, allowResize, done) {\n    var animatingFettis = fettis.slice();\n    var context = canvas.getContext('2d');\n    var width = canvas.width;\n    var height = canvas.height;\n    var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n    var animationFrame;\n    var destroy;\n\n    function onResize() {\n      // don't actually query the size here, since this\n      // can execute frequently and rapidly\n      width = height = null;\n    }\n\n    var prom = promise(function (resolve) {\n      function onDone() {\n        animationFrame = destroy = null;\n\n        if (allowResize) {\n          window.removeEventListener('resize', onResize);\n        }\n\n        context.clearRect(0, 0, width, height);\n\n        done();\n        resolve();\n      }\n\n      function update() {\n        if (!width && !height) {\n          resizer(canvas);\n          width = canvas.width;\n          height = canvas.height;\n        }\n\n        context.clearRect(0, 0, width, height);\n\n        animatingFettis = animatingFettis.filter(function (fetti) {\n          return updateFetti(context, fetti);\n        });\n\n        if (animatingFettis.length) {\n          animationFrame = frame(update);\n        } else {\n          onDone();\n        }\n      }\n\n      animationFrame = frame(update);\n      destroy = onDone;\n    });\n\n    if (allowResize) {\n      window.addEventListener('resize', onResize, false);\n    }\n\n    return {\n      addFettis: function (fettis) {\n        animatingFettis = animatingFettis.concat(fettis);\n\n        return prom;\n      },\n      canvas: canvas,\n      promise: prom,\n      reset: function () {\n        if (animationFrame) {\n          cancel(animationFrame);\n        }\n\n        if (destroy) {\n          destroy();\n        }\n      }\n    };\n  }\n\n  function confettiCannon(canvas, globalOpts) {\n    var isLibCanvas = !canvas;\n    var allowResize = !!prop(globalOpts || {}, 'resize');\n    var resized = false;\n    var animationObj;\n\n    function fire(options) {\n      var particleCount = prop(options, 'particleCount', Math.floor);\n      var angle = prop(options, 'angle', Number);\n      var spread = prop(options, 'spread', Number);\n      var startVelocity = prop(options, 'startVelocity', Number);\n      var decay = prop(options, 'decay', Number);\n      var colors = prop(options, 'colors');\n      var ticks = prop(options, 'ticks', Number);\n      var zIndex = prop(options, 'zIndex', Number);\n      var shapes = prop(options, 'shapes');\n      var origin = getOrigin(options);\n\n      var temp = particleCount;\n      var fettis = [];\n\n      if (isLibCanvas) {\n        canvas = animationObj ? animationObj.canvas : getCanvas(zIndex);\n      } else if (allowResize && !resized) {\n        // initialize the size of a user-supplied canvas\n        setCanvasRectSize(canvas);\n        resized = true;\n      }\n\n      var startX = canvas.width * origin.x;\n      var startY = canvas.height * origin.y;\n\n      while (temp--) {\n        fettis.push(\n          randomPhysics({\n            x: startX,\n            y: startY,\n            angle: angle,\n            spread: spread,\n            startVelocity: startVelocity,\n            color: colors[temp % colors.length],\n            shape: shapes[randomInt(0, shapes.length)],\n            ticks: ticks,\n            decay: decay\n          })\n        );\n      }\n\n      // if we have a previous canvas already animating,\n      // add to it\n      if (animationObj) {\n        return animationObj.addFettis(fettis);\n      }\n\n      if (isLibCanvas) {\n        document.body.appendChild(canvas);\n      }\n\n      animationObj = animate(canvas, fettis, isLibCanvas, (isLibCanvas || allowResize), function () {\n        animationObj = null;\n\n        if (isLibCanvas) {\n          document.body.removeChild(canvas);\n        }\n      });\n\n      return animationObj.promise;\n    }\n\n    fire.reset = function () {\n      if (animationObj) {\n        animationObj.reset();\n      }\n    };\n\n    return fire;\n  }\n\n  module.exports = confettiCannon();\n  module.exports.create = confettiCannon;\n  module.exports.Promise = window.Promise || null;\n}());\n\n// end source content\n\n  window.confetti = module.exports;\n}(window, {}));\n"]}