{"version":3,"sources":["jsdelivr-header.js","/npm/canvas-confetti@1.5.1/dist/confetti.browser.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,CCLE,SAAU,EAAQ,IAEnB,SAAS,EAAK,EAAQ,EAAQ,EAAU,GACvC,IAAI,KACF,EAAO,QACP,EAAO,MACP,EAAO,SACP,EAAO,iBACP,EAAO,mCACP,EAAO,mBACP,EAAO,kBAAkB,UAAU,4BACnC,EAAO,KACP,EAAO,IAAI,iBAEb,SAAS,IAAQ,CAIjB,SAAS,EAAQ,GACf,IAAI,EAAgB,EAAO,QAAQ,QAC/B,OAAyB,IAAlB,EAA2B,EAAgB,EAAO,QAE7D,MAAoB,mBAAT,EACF,IAAI,EAAK,IAGlB,EAAK,EAAM,GAEJ,KACT,CAEA,IAEM,EAAO,EADP,EAEA,EACA,EAqCA,EACA,EACA,EA4fF,EAviBA,GACE,EAAO,KAAK,MAAM,IAAO,IAEzB,EAAS,CAAC,EACV,EAAgB,EAEiB,mBAA1B,uBAAwE,mBAAzB,sBACxD,EAAQ,SAAU,GAChB,IAAI,EAAK,KAAK,SAad,OAXA,EAAO,GAAM,uBAAsB,SAAS,EAAQ,GAC9C,IAAkB,GAAQ,EAAgB,EAAO,EAAI,GACvD,EAAgB,SACT,EAAO,GAEd,KAEA,EAAO,GAAM,sBAAsB,EAEvC,IAEO,CACT,EACA,EAAS,SAAU,GACb,EAAO,IACT,qBAAqB,EAAO,GAEhC,IAEA,EAAQ,SAAU,GAChB,OAAO,WAAW,EAAI,EACxB,EACA,EAAS,SAAU,GACjB,OAAO,aAAa,EACtB,GAGK,CAAE,MAAO,EAAO,OAAQ,IAG7B,GAGE,EAAW,CAAC,EAoDT,WACL,GAAI,EACF,OAAO,EAGT,IAAK,GAAY,EAAc,CAC7B,IAAI,EAAO,CACT,wCACA,IAAM,EAAK,WAAa,+BACxB,8BACA,4BACA,oDACA,iCACA,wDACA,UACA,UACA,iCACA,wBACA,kCACA,0CACA,4CACA,kCACA,0CACA,4CACA,yDACA,MACA,KACA,KAAK,MACP,IACE,EAAS,IAAI,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,KACpD,CAAE,MAAO,GAIP,YAFmB,WAAZ,SAAiD,mBAAjB,QAAQ,MAAsB,QAAQ,KAAK,2BAA4B,GAEvG,IACT,EArFJ,SAAkB,GAChB,SAAS,EAAQ,EAAS,GACxB,EAAO,YAAY,CAAE,QAAS,GAAW,CAAC,EAAG,SAAU,GACzD,CACA,EAAO,KAAO,SAAoB,GAChC,IAAI,EAAY,EAAO,6BACvB,EAAO,YAAY,CAAE,OAAQ,GAAa,CAAC,GAC7C,EAEA,EAAO,KAAO,SAAoB,EAAS,EAAM,GAC/C,GAAI,EAEF,OADA,EAAQ,EAAS,MACV,EAGT,IAAI,EAAK,KAAK,SAAS,SAAS,IAAI,MAAM,GAsB1C,OApBA,EAAO,GAAQ,SAAU,GACvB,SAAS,EAAW,GACd,EAAI,KAAK,WAAa,WAInB,EAAS,GAChB,EAAO,oBAAoB,UAAW,GAEtC,EAAO,KACP,IACA,IACF,CAEA,EAAO,iBAAiB,UAAW,GACnC,EAAQ,EAAS,GAEjB,EAAS,GAAM,EAAW,KAAK,KAAM,CAAE,KAAM,CAAE,SAAU,IAC3D,GAGF,EAEA,EAAO,MAAQ,WAGb,IAAK,IAAI,KAFT,EAAO,YAAY,CAAE,OAAO,IAEb,EACb,EAAS,YACF,EAAS,EAEpB,CACF,CAuCI,CAAS,EACX,CAEA,OAAO,CACT,GAGE,EAAW,CACb,cAAe,GACf,MAAO,GACP,OAAQ,GACR,cAAe,GACf,MAAO,GACP,QAAS,EACT,MAAO,EACP,MAAO,IACP,EAAG,GACH,EAAG,GACH,OAAQ,CAAC,SAAU,UACnB,OAAQ,IACR,OAAQ,CACN,UACA,UACA,UACA,UACA,UACA,UACA,WAGF,yBAAyB,EACzB,OAAQ,GAWV,SAAS,EAAK,EAAS,EAAM,GAC3B,OATF,SAAiB,EAAK,GACpB,OAAO,EAAY,EAAU,GAAO,CACtC,CAOS,CACL,GALM,MAKU,EAAQ,GAAS,EAAQ,GAAQ,EAAS,GAC1D,EAEJ,CAEA,SAAS,EAAgB,GACvB,OAAO,EAAS,EAAI,EAAI,KAAK,MAAM,EACrC,CAOA,SAAS,EAAU,GACjB,OAAO,SAAS,EAAK,GACvB,CAEA,SAAS,EAAY,GACnB,OAAO,EAAO,IAAI,EACpB,CAEA,SAAS,EAAS,GAChB,IAAI,EAAM,OAAO,GAAK,QAAQ,cAAe,IAM7C,OAJI,EAAI,OAAS,IACb,EAAM,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,IAG1C,CACL,EAAG,EAAU,EAAI,UAAU,EAAE,IAC7B,EAAG,EAAU,EAAI,UAAU,EAAE,IAC7B,EAAG,EAAU,EAAI,UAAU,EAAE,IAEjC,CAUA,SAAS,EAAoB,GAC3B,EAAO,MAAQ,SAAS,gBAAgB,YACxC,EAAO,OAAS,SAAS,gBAAgB,YAC3C,CAEA,SAAS,EAAkB,GACzB,IAAI,EAAO,EAAO,wBAClB,EAAO,MAAQ,EAAK,MACpB,EAAO,OAAS,EAAK,MACvB,CA2FA,SAAS,EAAQ,EAAQ,EAAQ,EAAS,EAAM,GAC9C,IAEI,EACA,EAHA,EAAkB,EAAO,QACzB,EAAU,EAAO,WAAW,MAI5B,EAAO,GAAQ,SAAU,GAC3B,SAAS,IACP,EAAiB,EAAU,KAE3B,EAAQ,UAAU,EAAG,EAAG,EAAK,MAAO,EAAK,QAEzC,IACA,GACF,CA2BA,EAAiB,EAAI,OAzBrB,SAAS,KACH,GAAc,EAAK,QAAU,EAAW,OAAS,EAAK,SAAW,EAAW,SAC9E,EAAK,MAAQ,EAAO,MAAQ,EAAW,MACvC,EAAK,OAAS,EAAO,OAAS,EAAW,QAGtC,EAAK,OAAU,EAAK,SACvB,EAAQ,GACR,EAAK,MAAQ,EAAO,MACpB,EAAK,OAAS,EAAO,QAGvB,EAAQ,UAAU,EAAG,EAAG,EAAK,MAAO,EAAK,QAEzC,EAAkB,EAAgB,QAAO,SAAU,GACjD,OAtER,SAAqB,EAAS,GAC5B,EAAM,GAAK,KAAK,IAAI,EAAM,SAAW,EAAM,SAAW,EAAM,MAC5D,EAAM,GAAK,KAAK,IAAI,EAAM,SAAW,EAAM,SAAW,EAAM,QAC5D,EAAM,QAAU,EAAM,YACtB,EAAM,UAAY,EAAM,MACxB,EAAM,WAAa,GACnB,EAAM,QAAU,KAAK,IAAI,EAAM,WAC/B,EAAM,QAAU,KAAK,IAAI,EAAM,WAC/B,EAAM,OAAS,KAAK,SAAW,EAC/B,EAAM,QAAU,EAAM,EAAM,GAAK,EAAM,OAAU,KAAK,IAAI,EAAM,QAChE,EAAM,QAAU,EAAM,EAAM,GAAK,EAAM,OAAU,KAAK,IAAI,EAAM,QAEhE,IAAI,EAAY,EAAM,OAAU,EAAM,WAElC,EAAK,EAAM,EAAK,EAAM,OAAS,EAAM,QACrC,EAAK,EAAM,EAAK,EAAM,OAAS,EAAM,QACrC,EAAK,EAAM,QAAW,EAAM,OAAS,EAAM,QAC3C,EAAK,EAAM,QAAW,EAAM,OAAS,EAAM,QAmB/C,OAjBA,EAAQ,UAAY,QAAU,EAAM,MAAM,EAAI,KAAO,EAAM,MAAM,EAAI,KAAO,EAAM,MAAM,EAAI,MAAQ,EAAI,GAAY,IACpH,EAAQ,YAEY,WAAhB,EAAM,MACR,EAAQ,QACN,EAAQ,QAAQ,EAAM,EAAG,EAAM,EAAG,KAAK,IAAI,EAAK,GAAM,EAAM,WAAY,KAAK,IAAI,EAAK,GAAM,EAAM,WAAY,KAAK,GAAK,GAAK,EAAM,OAAQ,EAAG,EAAI,KAAK,IA9D7J,SAAiB,EAAS,EAAG,EAAG,EAAS,EAAS,EAAU,EAAY,EAAU,GAChF,EAAQ,OACR,EAAQ,UAAU,EAAG,GACrB,EAAQ,OAAO,GACf,EAAQ,MAAM,EAAS,GACvB,EAAQ,IAAI,EAAG,EAAG,EAAG,EAAY,EAAU,GAC3C,EAAQ,SACV,CAwDM,CAAQ,EAAS,EAAM,EAAG,EAAM,EAAG,KAAK,IAAI,EAAK,GAAM,EAAM,WAAY,KAAK,IAAI,EAAK,GAAM,EAAM,WAAY,KAAK,GAAK,GAAK,EAAM,OAAQ,EAAG,EAAI,KAAK,KAE1J,EAAQ,OAAO,KAAK,MAAM,EAAM,GAAI,KAAK,MAAM,EAAM,IACrD,EAAQ,OAAO,KAAK,MAAM,EAAM,SAAU,KAAK,MAAM,IACrD,EAAQ,OAAO,KAAK,MAAM,GAAK,KAAK,MAAM,IAC1C,EAAQ,OAAO,KAAK,MAAM,GAAK,KAAK,MAAM,EAAM,WAGlD,EAAQ,YACR,EAAQ,OAED,EAAM,KAAO,EAAM,UAC5B,CAiCe,CAAY,EAAS,EAC9B,IAEI,EAAgB,OAClB,EAAiB,EAAI,MAAM,GAE3B,GAEJ,IAGA,EAAU,CACZ,IAEA,MAAO,CACL,UAAW,SAAU,GAGnB,OAFA,EAAkB,EAAgB,OAAO,GAElC,CACT,EACA,OAAQ,EACR,QAAS,EACT,MAAO,WACD,GACF,EAAI,OAAO,GAGT,GACF,GAEJ,EAEJ,CAEA,SAAS,EAAe,EAAQ,GAC9B,IAQI,EARA,GAAe,EACf,IAAgB,EAAK,GAAc,CAAC,EAAG,UACvC,EAAgC,EAAK,EAAY,0BAA2B,SAE5E,EADkB,KAAkB,EAAK,GAAc,CAAC,EAAG,aAChC,IAAc,KACzC,EAAU,EAAc,EAAsB,EAC9C,KAAe,IAAU,MAAY,EAAO,uBAC5C,EAAyC,mBAAf,YAA6B,WAAW,4BAA4B,QAGlG,SAAS,EAAU,EAAS,EAAM,GAoBhC,IAnBA,IAjJmB,EACjB,EACA,EArEa,EAAK,EAoNhB,EAAgB,EAAK,EAAS,gBAAiB,GAC/C,EAAQ,EAAK,EAAS,QAAS,QAC/B,EAAS,EAAK,EAAS,SAAU,QACjC,EAAgB,EAAK,EAAS,gBAAiB,QAC/C,EAAQ,EAAK,EAAS,QAAS,QAC/B,EAAU,EAAK,EAAS,UAAW,QACnC,EAAQ,EAAK,EAAS,QAAS,QAC/B,EAAS,EAAK,EAAS,SAAU,GACjC,EAAQ,EAAK,EAAS,QAAS,QAC/B,EAAS,EAAK,EAAS,UACvB,EAAS,EAAK,EAAS,UACvB,EApMR,SAAmB,GACjB,IAAI,EAAS,EAAK,EAAS,SAAU,QAIrC,OAHA,EAAO,EAAI,EAAK,EAAQ,IAAK,QAC7B,EAAO,EAAI,EAAK,EAAQ,IAAK,QAEtB,CACT,CA8LiB,CAAU,GAEnB,EAAO,EACP,EAAS,GAET,EAAS,EAAO,MAAQ,EAAO,EAC/B,EAAS,EAAO,OAAS,EAAO,EAE7B,KACL,EAAO,MArKU,EAsKD,CACZ,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,EACR,cAAe,EACf,MAAO,EAAO,EAAO,EAAO,QAC5B,MAAO,GAhPE,EAgPe,EAhPV,EAgPa,EAAO,OA9OnC,KAAK,MAAM,KAAK,UAAY,EAAM,IAAQ,IA+OzC,MAAO,EACP,MAAO,EACP,QAAS,EACT,MAAO,EACP,OAAQ,GAjLZ,SACA,SADA,EAAW,EAAK,OAAS,KAAK,GAAK,KACnC,EAAY,EAAK,QAAU,KAAK,GAAK,KAElC,CACL,EAAG,EAAK,EACR,EAAG,EAAK,EACR,OAAwB,GAAhB,KAAK,SACb,YAAa,KAAK,IAAI,IAAsB,GAAhB,KAAK,SAAiB,KAClD,SAAgC,GAArB,EAAK,cAAwB,KAAK,SAAW,EAAK,cAC7D,SAAU,GAAa,GAAM,EAAc,KAAK,SAAW,GAC3D,WAA4B,GAAhB,KAAK,SAA2B,KAAQ,KAAK,GACzD,MAAO,EAAK,MACZ,MAAO,EAAK,MACZ,KAAM,EACN,WAAY,EAAK,MACjB,MAAO,EAAK,MACZ,MAAO,EAAK,MACZ,OAAQ,KAAK,SAAW,EACxB,QAAS,EACT,QAAS,EACT,QAAS,EACT,QAAS,EACT,QAAwB,EAAf,EAAK,QACd,WAAY,GACZ,OAAQ,EAAK,UAgKb,OAAI,EACK,EAAa,UAAU,IAGhC,EAAe,EAAQ,EAAQ,EAAQ,EAAS,EAAO,IAEnC,OACtB,CAEA,SAAS,EAAK,GACZ,IAAI,EAA0B,GAAiC,EAAK,EAAS,0BAA2B,SACpG,EAAS,EAAK,EAAS,SAAU,QAErC,GAAI,GAA2B,EAC7B,OAAO,GAAQ,SAAU,GACvB,GACF,IAGE,GAAe,EAEjB,EAAS,EAAa,OACb,IAAgB,IAEzB,EAtON,SAAmB,GACjB,IAAI,EAAS,SAAS,cAAc,UAQpC,OANA,EAAO,MAAM,SAAW,QACxB,EAAO,MAAM,IAAM,MACnB,EAAO,MAAM,KAAO,MACpB,EAAO,MAAM,cAAgB,OAC7B,EAAO,MAAM,OAAS,EAEf,CACT,CA4Ne,CAAU,GACnB,SAAS,KAAK,YAAY,IAGxB,IAAgB,GAElB,EAAQ,GAGV,IAAI,EAAO,CACT,MAAO,EAAO,MACd,OAAQ,EAAO,QAajB,SAAS,IACP,GAAI,EAAQ,CAEV,IAAI,EAAM,CACR,sBAAuB,WACrB,IAAK,EACH,OAAO,EAAO,uBAElB,GAWF,OARA,EAAQ,QAER,EAAO,YAAY,CACjB,OAAQ,CACN,MAAO,EAAI,MACX,OAAQ,EAAI,SAIlB,CAIA,EAAK,MAAQ,EAAK,OAAS,IAC7B,CAEA,SAAS,IACP,EAAe,KAEX,GACF,EAAO,oBAAoB,SAAU,GAGnC,GAAe,IACjB,SAAS,KAAK,YAAY,GAC1B,EAAS,KACT,GAAc,EAElB,CAMA,OAvDI,IAAW,GACb,EAAO,KAAK,GAGd,GAAc,EAEV,IACF,EAAO,wBAAyB,GA4C9B,GACF,EAAO,iBAAiB,SAAU,GAAU,GAG1C,EACK,EAAO,KAAK,EAAS,EAAM,GAG7B,EAAU,EAAS,EAAM,EAClC,CAYA,OAVA,EAAK,MAAQ,WACP,GACF,EAAO,QAGL,GACF,EAAa,OAEjB,EAEO,CACT,CAIA,SAAS,IAIP,OAHK,IACH,EAAc,EAAe,KAAM,CAAE,WAAW,EAAM,QAAQ,KAEzD,CACT,CAEA,EAAO,QAAU,WACf,OAAO,IAAiB,MAAM,KAAM,UACtC,EACA,EAAO,QAAQ,MAAQ,WACrB,IAAiB,OACnB,EACA,EAAO,QAAQ,OAAS,CAC1B,CAnlBA,CAmlBE,WACA,YAAsB,IAAX,EACF,EAGW,oBAAT,KACF,KAGF,MAAQ,CAAC,CACjB,CAVC,GAUI,GAAQ,GAIZ,EAAO,SAAW,EAAO,OAC3B,CApmBC,CAomBC,OAAQ,CAAC","file":"/npm/canvas-confetti@1.5.1/dist/confetti.browser.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/canvas-confetti@1.5.1/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 v1.5.1 built on 2022-02-08T22:20:40.944Z\n!(function (window, module) {\n// source content\n(function main(global, module, isWorker, workerSize) {\n var canUseWorker = !!(\n global.Worker &&\n global.Blob &&\n global.Promise &&\n global.OffscreenCanvas &&\n global.OffscreenCanvasRenderingContext2D &&\n global.HTMLCanvasElement &&\n global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n global.URL &&\n global.URL.createObjectURL);\n\n function noop() {}\n\n // create a promise if it exists, otherwise, just\n // call the function directly\n function promise(func) {\n var ModulePromise = module.exports.Promise;\n var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n if (typeof Prom === 'function') {\n return new Prom(func);\n }\n\n func(noop, noop);\n\n return null;\n }\n\n var raf = (function () {\n var TIME = Math.floor(1000 / 60);\n var frame, cancel;\n var frames = {};\n var lastFrameTime = 0;\n\n if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n frame = function (cb) {\n var id = Math.random();\n\n frames[id] = requestAnimationFrame(function onFrame(time) {\n if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n lastFrameTime = time;\n delete frames[id];\n\n cb();\n } else {\n frames[id] = requestAnimationFrame(onFrame);\n }\n });\n\n return id;\n };\n cancel = function (id) {\n if (frames[id]) {\n cancelAnimationFrame(frames[id]);\n }\n };\n } else {\n frame = function (cb) {\n return setTimeout(cb, TIME);\n };\n cancel = function (timer) {\n return clearTimeout(timer);\n };\n }\n\n return { frame: frame, cancel: cancel };\n }());\n\n var getWorker = (function () {\n var worker;\n var prom;\n var resolves = {};\n\n function decorate(worker) {\n function execute(options, callback) {\n worker.postMessage({ options: options || {}, callback: callback });\n }\n worker.init = function initWorker(canvas) {\n var offscreen = canvas.transferControlToOffscreen();\n worker.postMessage({ canvas: offscreen }, [offscreen]);\n };\n\n worker.fire = function fireWorker(options, size, done) {\n if (prom) {\n execute(options, null);\n return prom;\n }\n\n var id = Math.random().toString(36).slice(2);\n\n prom = promise(function (resolve) {\n function workerDone(msg) {\n if (msg.data.callback !== id) {\n return;\n }\n\n delete resolves[id];\n worker.removeEventListener('message', workerDone);\n\n prom = null;\n done();\n resolve();\n }\n\n worker.addEventListener('message', workerDone);\n execute(options, id);\n\n resolves[id] = workerDone.bind(null, { data: { callback: id }});\n });\n\n return prom;\n };\n\n worker.reset = function resetWorker() {\n worker.postMessage({ reset: true });\n\n for (var id in resolves) {\n resolves[id]();\n delete resolves[id];\n }\n };\n }\n\n return function () {\n if (worker) {\n return worker;\n }\n\n if (!isWorker && canUseWorker) {\n var code = [\n 'var CONFETTI, SIZE = {}, module = {};',\n '(' + main.toString() + ')(this, module, true, SIZE);',\n 'onmessage = function(msg) {',\n ' if (msg.data.options) {',\n ' CONFETTI(msg.data.options).then(function () {',\n ' if (msg.data.callback) {',\n ' postMessage({ callback: msg.data.callback });',\n ' }',\n ' });',\n ' } else if (msg.data.reset) {',\n ' CONFETTI.reset();',\n ' } else if (msg.data.resize) {',\n ' SIZE.width = msg.data.resize.width;',\n ' SIZE.height = msg.data.resize.height;',\n ' } else if (msg.data.canvas) {',\n ' SIZE.width = msg.data.canvas.width;',\n ' SIZE.height = msg.data.canvas.height;',\n ' CONFETTI = module.exports.create(msg.data.canvas);',\n ' }',\n '}',\n ].join('\\n');\n try {\n worker = new Worker(URL.createObjectURL(new Blob([code])));\n } catch (e) {\n // eslint-disable-next-line no-console\n typeof console !== undefined && typeof console.warn === 'function' ? console.warn('🎊 Could not load worker', e) : null;\n\n return null;\n }\n\n decorate(worker);\n }\n\n return worker;\n };\n })();\n\n var defaults = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\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 // probably should be true, but back-compat\n disableForReducedMotion: false,\n scalar: 1\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 onlyPositiveInt(number){\n return number < 0 ? 0 : Math.floor(number);\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 colorsToRgb(colors) {\n return colors.map(hexToRgb);\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 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 ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n context.save();\n context.translate(x, y);\n context.rotate(rotation);\n context.scale(radiusX, radiusY);\n context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n context.restore();\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 wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n color: opts.color,\n shape: opts.shape,\n tick: 0,\n totalTicks: opts.ticks,\n decay: opts.decay,\n drift: opts.drift,\n random: Math.random() + 2,\n tiltSin: 0,\n tiltCos: 0,\n wobbleX: 0,\n wobbleY: 0,\n gravity: opts.gravity * 3,\n ovalScalar: 0.6,\n scalar: opts.scalar\n };\n }\n\n function updateFetti(context, fetti) {\n fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n fetti.wobble += fetti.wobbleSpeed;\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() + 2;\n fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * 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 ?\n context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, 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, resizer, size, done) {\n var animatingFettis = fettis.slice();\n var context = canvas.getContext('2d');\n var animationFrame;\n var destroy;\n\n var prom = promise(function (resolve) {\n function onDone() {\n animationFrame = destroy = null;\n\n context.clearRect(0, 0, size.width, size.height);\n\n done();\n resolve();\n }\n\n function update() {\n if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n size.width = canvas.width = workerSize.width;\n size.height = canvas.height = workerSize.height;\n }\n\n if (!size.width && !size.height) {\n resizer(canvas);\n size.width = canvas.width;\n size.height = canvas.height;\n }\n\n context.clearRect(0, 0, size.width, size.height);\n\n animatingFettis = animatingFettis.filter(function (fetti) {\n return updateFetti(context, fetti);\n });\n\n if (animatingFettis.length) {\n animationFrame = raf.frame(update);\n } else {\n onDone();\n }\n }\n\n animationFrame = raf.frame(update);\n destroy = onDone;\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 raf.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 globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n var worker = shouldUseWorker ? getWorker() : null;\n var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n var animationObj;\n\n function fireLocal(options, size, done) {\n var particleCount = prop(options, 'particleCount', onlyPositiveInt);\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 gravity = prop(options, 'gravity', Number);\n var drift = prop(options, 'drift', Number);\n var colors = prop(options, 'colors', colorsToRgb);\n var ticks = prop(options, 'ticks', Number);\n var shapes = prop(options, 'shapes');\n var scalar = prop(options, 'scalar');\n var origin = getOrigin(options);\n\n var temp = particleCount;\n var fettis = [];\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 gravity: gravity,\n drift: drift,\n scalar: scalar\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 animationObj = animate(canvas, fettis, resizer, size , done);\n\n return animationObj.promise;\n }\n\n function fire(options) {\n var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n var zIndex = prop(options, 'zIndex', Number);\n\n if (disableForReducedMotion && preferLessMotion) {\n return promise(function (resolve) {\n resolve();\n });\n }\n\n if (isLibCanvas && animationObj) {\n // use existing canvas from in-progress animation\n canvas = animationObj.canvas;\n } else if (isLibCanvas && !canvas) {\n // create and initialize a new canvas\n canvas = getCanvas(zIndex);\n document.body.appendChild(canvas);\n }\n\n if (allowResize && !initialized) {\n // initialize the size of a user-supplied canvas\n resizer(canvas);\n }\n\n var size = {\n width: canvas.width,\n height: canvas.height\n };\n\n if (worker && !initialized) {\n worker.init(canvas);\n }\n\n initialized = true;\n\n if (worker) {\n canvas.__confetti_initialized = true;\n }\n\n function onResize() {\n if (worker) {\n // TODO this really shouldn't be immediate, because it is expensive\n var obj = {\n getBoundingClientRect: function () {\n if (!isLibCanvas) {\n return canvas.getBoundingClientRect();\n }\n }\n };\n\n resizer(obj);\n\n worker.postMessage({\n resize: {\n width: obj.width,\n height: obj.height\n }\n });\n return;\n }\n\n // don't actually query the size here, since this\n // can execute frequently and rapidly\n size.width = size.height = null;\n }\n\n function done() {\n animationObj = null;\n\n if (allowResize) {\n global.removeEventListener('resize', onResize);\n }\n\n if (isLibCanvas && canvas) {\n document.body.removeChild(canvas);\n canvas = null;\n initialized = false;\n }\n }\n\n if (allowResize) {\n global.addEventListener('resize', onResize, false);\n }\n\n if (worker) {\n return worker.fire(options, size, done);\n }\n\n return fireLocal(options, size, done);\n }\n\n fire.reset = function () {\n if (worker) {\n worker.reset();\n }\n\n if (animationObj) {\n animationObj.reset();\n }\n };\n\n return fire;\n }\n\n // Make default export lazy to defer worker creation until called.\n var defaultFire;\n function getDefaultFire() {\n if (!defaultFire) {\n defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n }\n return defaultFire;\n }\n\n module.exports = function() {\n return getDefaultFire().apply(this, arguments);\n };\n module.exports.reset = function() {\n getDefaultFire().reset();\n };\n module.exports.create = confettiCannon;\n}((function () {\n if (typeof window !== 'undefined') {\n return window;\n }\n\n if (typeof self !== 'undefined') {\n return self;\n }\n\n return this || {};\n})(), module, false));\n\n// end source content\n\n window.confetti = module.exports;\n}(window, {}));\n"]}