@erikwatson/snowfall 3.1.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,366 @@
1
+ /*
2
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
3
+ * This devtool is neither made for production nor for readable output files.
4
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
5
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6
+ * or disable the default devtool with "devtool: false".
7
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
+ */
9
+ (function webpackUniversalModuleDefinition(root, factory) {
10
+ if(typeof exports === 'object' && typeof module === 'object')
11
+ module.exports = factory();
12
+ else if(typeof define === 'function' && define.amd)
13
+ define([], factory);
14
+ else if(typeof exports === 'object')
15
+ exports["snowfall"] = factory();
16
+ else
17
+ root["snowfall"] = factory();
18
+ })(this, () => {
19
+ return /******/ (() => { // webpackBootstrap
20
+ /******/ var __webpack_modules__ = ({
21
+
22
+ /***/ "./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js":
23
+ /*!*******************************************************************************************************!*\
24
+ !*** ./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js ***!
25
+ \*******************************************************************************************************/
26
+ /***/ ((module) => {
27
+
28
+ eval("(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_539__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_539__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_539__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_539__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__nested_webpack_require_539__.d = function(exports, name, getter) {\n/******/ \t\tif(!__nested_webpack_require_539__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__nested_webpack_require_539__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__nested_webpack_require_539__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __nested_webpack_require_539__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__nested_webpack_require_539__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __nested_webpack_require_539__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__nested_webpack_require_539__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__nested_webpack_require_539__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__nested_webpack_require_539__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_539__.p = \"/js/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_539__(__nested_webpack_require_539__.s = \"./src/bramble.ts\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./src/assets.ts\":\n/*!***********************!*\\\n !*** ./src/assets.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadAllTerrain = exports.loadTerrain = exports.loadAllImages = exports.loadImage = exports.loadAllText = exports.loadText = void 0;\nfunction loadText(path) {\n return new Promise(function (resolve, reject) {\n var request = new XMLHttpRequest();\n request.addEventListener('load', function (_) {\n resolve(request.responseText);\n });\n request.addEventListener('error', function (event) {\n reject(event);\n });\n request.open('GET', path);\n request.send();\n });\n}\nexports.loadText = loadText;\nfunction loadAllText(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadText(x); }));\n}\nexports.loadAllText = loadAllText;\nfunction loadImage(path) {\n return new Promise(function (resolve, reject) {\n var img = new Image();\n img.addEventListener('load', function (_) {\n resolve(img);\n });\n img.addEventListener('error', function (err) {\n reject(err);\n });\n img.src = path;\n });\n}\nexports.loadImage = loadImage;\nfunction loadAllImages(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadImage(x); }));\n}\nexports.loadAllImages = loadAllImages;\n// Downloads a Terrain file,\n// reads it,\n// downloads the related image file,\n// returns a new Terrain object\nfunction loadTerrain(path) {\n var description;\n return loadText(path)\n .then(function (json) {\n description = JSON.parse(json);\n return loadImage(description.path);\n })\n .then(function (image) { return ({\n name: description.name,\n type: description.type,\n image: image,\n tiles: description.tiles\n }); });\n}\nexports.loadTerrain = loadTerrain;\nfunction loadAllTerrain(paths) {\n if (paths === void 0) { paths = []; }\n return Promise.all(paths.map(function (x) { return loadTerrain(x); }));\n}\nexports.loadAllTerrain = loadAllTerrain;\nexports.default = {\n loadImage: loadImage,\n loadText: loadText,\n loadAllText: loadAllText,\n loadAllImages: loadAllImages,\n loadTerrain: loadTerrain,\n loadAllTerrain: loadAllTerrain\n};\n\n\n/***/ }),\n\n/***/ \"./src/bramble.ts\":\n/*!************************!*\\\n !*** ./src/bramble.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_6669__) {\n\n\"use strict\";\n\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.collisions = exports.load = exports.save = exports.vec2 = exports.sprite = exports.mouse = exports.keyboard = exports.graphics = exports.grid = exports.game = exports.assets = void 0;\nvar assets_1 = __nested_webpack_require_6669__(/*! ./assets */ \"./src/assets.ts\");\nObject.defineProperty(exports, \"assets\", { enumerable: true, get: function () { return assets_1.default; } });\nvar game_1 = __nested_webpack_require_6669__(/*! ./game */ \"./src/game.ts\");\nObject.defineProperty(exports, \"game\", { enumerable: true, get: function () { return game_1.default; } });\nvar grid_1 = __nested_webpack_require_6669__(/*! ./grid */ \"./src/grid.ts\");\nObject.defineProperty(exports, \"grid\", { enumerable: true, get: function () { return grid_1.default; } });\nvar graphics_1 = __nested_webpack_require_6669__(/*! ./graphics */ \"./src/graphics.ts\");\nObject.defineProperty(exports, \"graphics\", { enumerable: true, get: function () { return graphics_1.default; } });\nvar input_1 = __nested_webpack_require_6669__(/*! ./input */ \"./src/input.ts\");\nObject.defineProperty(exports, \"keyboard\", { enumerable: true, get: function () { return input_1.keyboard; } });\nObject.defineProperty(exports, \"mouse\", { enumerable: true, get: function () { return input_1.mouse; } });\nvar sprite_1 = __nested_webpack_require_6669__(/*! ./sprite */ \"./src/sprite.ts\");\nObject.defineProperty(exports, \"sprite\", { enumerable: true, get: function () { return sprite_1.default; } });\nvar vec2_1 = __nested_webpack_require_6669__(/*! ./vec2 */ \"./src/vec2.ts\");\nObject.defineProperty(exports, \"vec2\", { enumerable: true, get: function () { return vec2_1.default; } });\nvar storage_1 = __nested_webpack_require_6669__(/*! ./storage */ \"./src/storage.ts\");\nObject.defineProperty(exports, \"save\", { enumerable: true, get: function () { return storage_1.save; } });\nObject.defineProperty(exports, \"load\", { enumerable: true, get: function () { return storage_1.load; } });\nvar collision_1 = __nested_webpack_require_6669__(/*! ./collision */ \"./src/collision.ts\");\nObject.defineProperty(exports, \"collisions\", { enumerable: true, get: function () { return collision_1.default; } });\n__exportStar(__nested_webpack_require_6669__(/*! ./types */ \"./src/types.ts\"), exports);\n\n\n/***/ }),\n\n/***/ \"./src/collision.ts\":\n/*!**************************!*\\\n !*** ./src/collision.ts ***!\n \\**************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_9766__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bramble_1 = __nested_webpack_require_9766__(/*! ./bramble */ \"./src/bramble.ts\");\n// works\nfunction pointVsRect(point, rect) {\n return (point.x >= rect.x &&\n point.y >= rect.y &&\n point.x < rect.x + rect.width &&\n point.y < rect.y + rect.height);\n}\n// works\nfunction rectVsRect(rectA, rectB) {\n return (rectA.x < rectB.x + rectB.width &&\n rectA.x + rectA.width > rectB.x &&\n rectA.y < rectB.y + rectB.height &&\n rectA.y + rectA.height > rectB.y);\n}\n// works\n// returns false if no collision occurred, otherwise it returns an object\n// containing the results of the collision\n// { near, far, normal }\nfunction lineVsRect(line, rect) {\n var from = bramble_1.vec2.create(line.from.x, line.from.y);\n var to = bramble_1.vec2.create(line.to.x, line.to.y);\n var dir = bramble_1.vec2.clone(to);\n dir.subtract(from);\n var invdir = {\n x: 1.0 / dir.x,\n y: 1.0 / dir.y\n };\n var timeNear = {\n x: (rect.x - line.from.x) * invdir.x,\n y: (rect.y - line.from.y) * invdir.y\n };\n var timeFar = {\n x: (rect.x + rect.width - line.from.x) * invdir.x,\n y: (rect.y + rect.height - line.from.y) * invdir.y\n };\n if (isNaN(timeNear.x) || isNaN(timeNear.y)) {\n return false;\n }\n if (isNaN(timeFar.x) || isNaN(timeFar.y)) {\n return false;\n }\n // sort the distances\n var tempNear = __assign({}, timeNear);\n var tempFar = __assign({}, timeFar);\n if (tempNear.x > tempFar.x) {\n timeNear.x = tempFar.x;\n timeFar.x = tempNear.x;\n }\n tempNear = __assign({}, timeNear);\n tempFar = __assign({}, timeFar);\n if (tempNear.y > tempFar.y) {\n timeNear.y = tempFar.y;\n timeFar.y = tempNear.y;\n }\n // no collision detected\n if (timeNear.x > timeFar.y || timeNear.y > timeFar.x) {\n return false;\n }\n var hitNear = Math.max(timeNear.x, timeNear.y);\n var hitFar = Math.min(timeFar.x, timeFar.y);\n // abort if ray is facing away from our object\n if (hitFar < 0) {\n return false;\n }\n // abort if the ray does not reach the object\n if (hitNear > 1) {\n return false;\n }\n // abort if the ray's first collision is behind us\n if (hitNear < 0) {\n return false;\n }\n // construct a vector to hold the normal of the surface\n var normal = bramble_1.vec2.create(0, 0);\n if (timeNear.x > timeNear.y) {\n if (invdir.x < 0) {\n normal.x = 1;\n normal.y = 0;\n }\n else {\n normal.x = -1;\n normal.y = 0;\n }\n }\n else if (timeNear.x < timeNear.y) {\n if (invdir.y < 0) {\n normal.x = 0;\n normal.y = 1;\n }\n else {\n normal.x = 0;\n normal.y = -1;\n }\n }\n else if (timeNear.x === timeNear.y) {\n if (invdir.x < 0 && invdir.y < 0) {\n normal.x = -1;\n normal.y = 1;\n }\n else if (invdir.x > 0 && invdir.y < 0) {\n normal.x = 1;\n normal.y = 1;\n }\n else if (invdir.x < 0 && invdir.y > 0) {\n normal.x = -1;\n normal.y = -1;\n }\n else if (invdir.x > 0 && invdir.y > 0) {\n normal.x = 1;\n normal.y = -1;\n }\n }\n // collided with the object!\n return {\n normal: normal,\n near: bramble_1.vec2.create(from.x + hitNear * dir.x, from.y + hitNear * dir.y),\n far: bramble_1.vec2.create(from.x + hitFar * dir.x, from.y + hitFar * dir.y),\n timeOfCollision: hitNear\n };\n}\n// a dynamic rect is one that can move - has a velocity\n// static rect doesn't move\nfunction dynamicRectVsStaticRect(dynamicRect, staticRect) {\n // assume no collision if the dynamic rect is not moving\n // avoiding using length here because it calculates a square root\n if (dynamicRect.velocity.x === 0 && dynamicRect.velocity.y === 0) {\n return false;\n }\n var halfWidth = dynamicRect.width / 2;\n var halfHeight = dynamicRect.height / 2;\n var clone = bramble_1.vec2.clone(dynamicRect.position);\n clone.add(dynamicRect.velocity);\n clone.x += dynamicRect.width / 2;\n clone.y += dynamicRect.height / 2;\n var line = {\n from: {\n x: dynamicRect.position.x + halfWidth,\n y: dynamicRect.position.y + halfHeight\n },\n to: clone\n };\n var rect = {\n x: staticRect.position.x - halfWidth,\n y: staticRect.position.y - halfHeight,\n width: staticRect.width + dynamicRect.width,\n height: staticRect.height + dynamicRect.height\n };\n return lineVsRect(line, rect);\n}\n// Compute the value of a point on a cubic Bezier curve at parameter t\nfunction cubicBezierPoint(P0, P1, P2, P3, t) {\n var x = (1 - t) * (1 - t) * (1 - t) * P0.x +\n 3 * (1 - t) * (1 - t) * t * P1.x +\n 3 * (1 - t) * t * t * P2.x +\n t * t * t * P3.x;\n var y = (1 - t) * (1 - t) * (1 - t) * P0.y +\n 3 * (1 - t) * (1 - t) * t * P1.y +\n 3 * (1 - t) * t * t * P2.y +\n t * t * t * P3.y;\n return bramble_1.vec2.create(x, y);\n}\n// Compute the tangent of the curve at parameter t\nfunction cubicBezierTangent(P0, P1, P2, P3, t) {\n var x = 3 * (1 - t) * (1 - t) * (P1.x - P0.x) +\n 6 * (1 - t) * t * (P2.x - P1.x) +\n 3 * t * t * (P3.x - P2.x);\n var y = 3 * (1 - t) * (1 - t) * (P1.y - P0.y) +\n 6 * (1 - t) * t * (P2.y - P1.y) +\n 3 * t * t * (P3.y - P2.y);\n return bramble_1.vec2.create(x, y);\n}\n// Helper function to find the roots of a cubic polynomial using Cardano's formula\nfunction findCubicRoots(A, B, C, D) {\n if (Math.abs(A) < 1e-10) {\n return findQuadraticRoots(B, C, D);\n }\n var a = B / A;\n var b = C / A;\n var c = D / A;\n var p = (3 * b - a * a) / 3;\n var q = (2 * a * a * a - 9 * a * b + 27 * c) / 27;\n var discriminant = (q * q) / 4 + (p * p * p) / 27;\n var roots = [];\n if (discriminant > 0) {\n var u = Math.cbrt(-q / 2 + Math.sqrt(discriminant));\n var v = Math.cbrt(-q / 2 - Math.sqrt(discriminant));\n roots.push(u + v - a / 3);\n }\n else if (discriminant === 0) {\n var u = Math.cbrt(-q / 2);\n roots.push(2 * u - a / 3);\n roots.push(-u - a / 3);\n }\n else {\n var r = Math.sqrt((-p * p * p) / 27);\n var phi = Math.acos(-q / (2 * r));\n roots.push(2 * Math.cbrt(r) * Math.cos(phi / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 2 * Math.PI) / 3) - a / 3);\n roots.push(2 * Math.cbrt(r) * Math.cos((phi + 4 * Math.PI) / 3) - a / 3);\n }\n return roots.filter(function (t) { return t >= 0 && t <= 1; });\n}\n// Helper function to find the roots of a quadratic polynomial\nfunction findQuadraticRoots(A, B, C) {\n var discriminant = B * B - 4 * A * C;\n if (discriminant < 0) {\n return [];\n }\n else if (discriminant === 0) {\n return [-B / (2 * A)];\n }\n else {\n var sqrtDiscriminant = Math.sqrt(discriminant);\n return [\n (-B + sqrtDiscriminant) / (2 * A),\n (-B - sqrtDiscriminant) / (2 * A)\n ];\n }\n}\n// Find intersection between a ray (defined by two points) and a cubic Bezier curve\nfunction lineVsCubicBezierCurve(P0, P1, P2, P3, R0, R1) {\n var intersections = [];\n // Coefficients of the cubic Bezier curve\n var ax = -P0.x + 3 * P1.x - 3 * P2.x + P3.x;\n var ay = -P0.y + 3 * P1.y - 3 * P2.y + P3.y;\n var bx = 3 * P0.x - 6 * P1.x + 3 * P2.x;\n var by = 3 * P0.y - 6 * P1.y + 3 * P2.y;\n var cx = -3 * P0.x + 3 * P1.x;\n var cy = -3 * P0.y + 3 * P1.y;\n var dx = P0.x;\n var dy = P0.y;\n // Coefficients of the ray\n var rx = R1.x - R0.x;\n var ry = R1.y - R0.y;\n var ex = R0.x;\n var ey = R0.y;\n // Construct the cubic equation: At^3 + Bt^2 + Ct + D = 0\n var A = ax * ry - ay * rx;\n var B = bx * ry - by * rx;\n var C = cx * ry - cy * rx;\n var D = (dx - ex) * ry - (dy - ey) * rx;\n var roots = findCubicRoots(A, B, C, D);\n // Check valid t values and compute intersections\n roots.forEach(function (t) {\n var intersection = cubicBezierPoint(P0, P1, P2, P3, t);\n var tangent = cubicBezierTangent(P0, P1, P2, P3, t);\n var angleRadians = Math.atan2(tangent.y, tangent.x);\n var angleDegrees = angleRadians * (180 / Math.PI);\n var tempvec = bramble_1.vec2.fromDegrees(angleDegrees);\n var normal = bramble_1.vec2.create(tempvec.y, -tempvec.x);\n // Calculate the distance along the ray\n var dx = intersection.x - R0.x;\n var dy = intersection.y - R0.y;\n var distanceToIntersection = Math.sqrt(dx * dx + dy * dy);\n var rayLength = Math.sqrt(rx * rx + ry * ry);\n var remainderLength = rayLength - distanceToIntersection;\n // Ensure the intersection point lies within the ray segment\n var rayParam = (intersection.x - ex) / rx;\n var rayParamY = (intersection.y - ey) / ry;\n if ((rayParam >= 0 && rayParam <= 1) ||\n (rayParamY >= 0 && rayParamY <= 1)) {\n intersections.push({\n point: bramble_1.vec2.create(intersection.x, intersection.y),\n distance: distanceToIntersection,\n remainderLength: remainderLength,\n angleRadians: angleRadians,\n angleDegrees: angleDegrees,\n direction: bramble_1.vec2.fromDegrees(angleDegrees),\n normal: normal\n });\n }\n });\n return intersections;\n}\nexports.default = {\n dynamicRectVsStaticRect: dynamicRectVsStaticRect,\n rectVsRect: rectVsRect,\n lineVsRect: lineVsRect,\n pointVsRect: pointVsRect,\n lineVsCubicBezierCurve: lineVsCubicBezierCurve\n};\n\n\n/***/ }),\n\n/***/ \"./src/game.ts\":\n/*!*********************!*\\\n !*** ./src/game.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_20176__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar graphics_1 = __nested_webpack_require_20176__(/*! ./graphics */ \"./src/graphics.ts\");\nvar input_1 = __nested_webpack_require_20176__(/*! ./input */ \"./src/input.ts\");\nvar create = function () {\n var backgroundColor = null;\n var update = null;\n var render = null;\n // used for calculating the Delta Time for the Frame\n var prevTime = 0;\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n var graphics = graphics_1.default.create(ctx);\n canvas.id = 'bramble-game';\n var mouseInput = input_1.mouse.create(canvas);\n var keyboardInput = input_1.keyboard.create(canvas);\n var setBackgroundColor = function (color) {\n backgroundColor = color;\n };\n var attachTo = function (element) {\n element.appendChild(canvas);\n };\n var setUpdate = function (callback) {\n update = callback;\n };\n var setRender = function (callback) {\n render = callback;\n };\n var inputState = {\n keyboard: keyboardInput.getState(),\n mouse: mouseInput.getState(),\n };\n var step = function () {\n if (update) {\n inputState.keyboard = keyboardInput.getState();\n inputState.mouse = mouseInput.getState();\n update((performance.now() - prevTime) / 1000, inputState);\n }\n if (render) {\n if (backgroundColor) {\n graphics.clear(backgroundColor);\n }\n render(graphics);\n }\n mouseInput.update();\n keyboardInput.update();\n window.requestAnimationFrame(step);\n prevTime = performance.now();\n };\n var start = function () {\n mouseInput.start();\n keyboardInput.start();\n window.requestAnimationFrame(step);\n };\n var setSize = function (width, height) {\n canvas.width = width;\n canvas.height = height;\n };\n // Smoothing must be re-applied if any of the following is called\n // - setSize\n var setSmoothing = function (to) {\n if (to === void 0) { to = true; }\n ctx.imageSmoothingEnabled = to;\n };\n var disableContextMenu = function () {\n canvas.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n };\n return {\n attachTo: attachTo,\n setSize: setSize,\n setUpdate: setUpdate,\n setRender: setRender,\n setBackgroundColor: setBackgroundColor,\n canvas: canvas,\n disableContextMenu: disableContextMenu,\n setSmoothing: setSmoothing,\n start: start\n };\n};\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/graphics.ts\":\n/*!*************************!*\\\n !*** ./src/graphics.ts ***!\n \\*************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_23059__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar number_1 = __nested_webpack_require_23059__(/*! ./utils/number */ \"./src/utils/number.ts\");\nvar object_1 = __nested_webpack_require_23059__(/*! ./utils/object */ \"./src/utils/object.ts\");\nfunction freshContext(ctx, callback) {\n ctx.save();\n callback();\n ctx.restore();\n}\nfunction clear(ctx, colour) {\n if (!colour) {\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n }\n else {\n rect(ctx, { x: 0, y: 0, width: ctx.canvas.width, height: ctx.canvas.height }, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nfunction clearRect(ctx, rectangle, colour) {\n if (!colour) {\n ctx.clearRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n }\n else {\n rect(ctx, rectangle, {\n fill: { colour: colour },\n line: { width: 0 }\n });\n }\n}\nfunction square(ctx, position, size, options) {\n if (options === void 0) { options = defaultRect; }\n rect(ctx, { x: position.x, y: position.y, width: size, height: size }, options);\n}\nvar defaultRect = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n }\n};\nfunction rect(ctx, rectangle, options) {\n if (options === void 0) { options = defaultRect; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultRect, options);\n ctx.globalAlpha = options.fill.opacity;\n ctx.fillStyle = options.fill.colour;\n ctx.fillRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n ctx.globalAlpha = 1;\n if (options.line.width !== 0) {\n ctx.globalAlpha = options.line.opacity;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.strokeRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n ctx.globalAlpha = 1;\n }\n });\n}\nvar defaultLine = {\n width: 1,\n colour: '#FFFFFF',\n opacity: 1\n};\nfunction line(ctx, from, to, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.lineTo(to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction bezier(ctx, from, to, cp1, cp2, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.bezierCurveTo(cp1.x, cp1.y, cp2.x, cp2.y, to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction quadratic(ctx, from, to, cp, options) {\n if (options === void 0) { options = defaultLine; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultLine, options);\n ctx.globalAlpha = options.opacity;\n ctx.strokeStyle = options.colour;\n ctx.lineWidth = options.width;\n ctx.beginPath();\n ctx.moveTo(from.x, from.y);\n ctx.quadraticCurveTo(cp.x, cp.y, to.x, to.y);\n ctx.stroke();\n ctx.globalAlpha = 1;\n ctx.closePath();\n });\n}\nfunction curve(ctx, from, to, controlPoints, options) {\n if (options === void 0) { options = defaultLine; }\n if (controlPoints.cp1 && controlPoints.cp2) {\n bezier(ctx, from, to, controlPoints.cp1, controlPoints.cp2, options);\n }\n else if (controlPoints.cp1 && !controlPoints.cp2) {\n quadratic(ctx, from, to, controlPoints.cp1, options);\n }\n else {\n line(ctx, from, to, options);\n }\n}\nvar defaultCircle = {\n fill: {\n colour: '#000000',\n opacity: 1\n },\n line: {\n colour: '#FFFFFF',\n opacity: 1,\n width: 1\n }\n};\nfunction circle(ctx, position, radius, options) {\n if (options === void 0) { options = defaultCircle; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultCircle, options);\n ctx.globalAlpha = options.fill.opacity;\n ctx.fillStyle = options.fill.colour;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.fill();\n ctx.globalAlpha = 1;\n if (options.line.width !== 0) {\n ctx.globalAlpha = options.line.opacity;\n ctx.strokeStyle = options.line.colour;\n ctx.lineWidth = options.line.width;\n ctx.beginPath();\n ctx.arc(position.x, position.y, radius, 0, 2 * Math.PI);\n ctx.closePath();\n ctx.stroke();\n }\n });\n}\nfunction image(ctx, image, position, size) {\n if (size) {\n ctx.drawImage(image, position.x, position.y, size.width, size.height);\n }\n else {\n ctx.drawImage(image, position.x, position.y, image.width, image.height);\n }\n}\nfunction subImage(ctx, image, position, size, subPosition, subSize) {\n ctx.drawImage(image, subPosition.x, subPosition.y, subSize.width, subSize.height, position.x, position.y, size.width, size.height);\n}\nfunction sprite(ctx, sprite) {\n freshContext(ctx, function () {\n var halfWidth = sprite.size.width / 2;\n var halfHeight = sprite.size.height / 2;\n ctx.translate(sprite.position.x + halfWidth, sprite.position.y + halfHeight);\n ctx.rotate(number_1.default.toRadians(sprite.rotation));\n if (sprite.frames.length > 1) {\n subImage(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n }, {\n x: sprite.frames[sprite.frame].position.x,\n y: sprite.frames[sprite.frame].position.y\n }, {\n width: sprite.frames[sprite.frame].size.width,\n height: sprite.frames[sprite.frame].size.height\n });\n }\n else {\n image(ctx, sprite.texture, {\n x: -halfWidth,\n y: -halfHeight\n }, {\n width: sprite.size.width,\n height: sprite.size.height\n });\n }\n });\n}\nfunction txt(ctx, position, text, colour, font) {\n if (text === void 0) { text = ''; }\n if (colour === void 0) { colour = '#000000'; }\n if (font === void 0) { font = '16pt sans-serif'; }\n freshContext(ctx, function () {\n ctx.fillStyle = colour;\n ctx.font = font;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n ctx.fillText(text, position.x, position.y);\n });\n}\nfunction tile(ctx, position, tilesheet, gridPosition, tilesheetPosition, scale, tileSize) {\n subImage(ctx, tilesheet, {\n x: position.x + scale * (gridPosition.x * tileSize.width),\n y: position.y + scale * (gridPosition.y * tileSize.height)\n }, {\n width: scale * tileSize.width,\n height: scale * tileSize.height\n }, {\n x: tileSize.width * tilesheetPosition.x,\n y: tileSize.height * tilesheetPosition.y\n }, {\n width: tileSize.width,\n height: tileSize.height\n });\n}\n// tilegrid: a 2d array of numbers representing terrain types\n// spritesheets: An object, each key is the value that represents a tile from this sheet\nfunction tiles(ctx, position, tileGrid, spriteSheets, scale) {\n var dirValues = {\n NW: 1,\n N: 2,\n NE: 4,\n E: 8,\n SE: 16,\n S: 32,\n SW: 64,\n W: 128\n };\n var _loop_1 = function (y) {\n var _loop_2 = function (x) {\n if (tileGrid[y][x] === 0) {\n return \"continue\";\n }\n // REAL VALUES\n var tl = y > 0 ? tileGrid[y - 1][x - 1] : 0;\n var tm = y > 0 ? tileGrid[y - 1][x] : 0;\n var tr = y > 0 ? tileGrid[y - 1][x + 1] : 0;\n var ml = tileGrid[y][x - 1];\n var m = tileGrid[y][x];\n var mr = tileGrid[y][x + 1];\n var bl = y < tileGrid.length - 1 ? tileGrid[y + 1][x - 1] : 0;\n var bm = y < tileGrid.length - 1 ? tileGrid[y + 1][x] : 0;\n var br = y < tileGrid.length - 1 ? tileGrid[y + 1][x + 1] : 0;\n // BINARY VALUES\n var n = m === tm ? 1 : 0;\n var e = m === mr ? 1 : 0;\n var s = m === bm ? 1 : 0;\n var w = m === ml ? 1 : 0;\n var nw = m === tm && m === ml ? (m === tl ? 1 : 0) : 0;\n var ne = m === tm && m === mr ? (m === tr ? 1 : 0) : 0;\n var sw = m === bm && m === ml ? (m === bl ? 1 : 0) : 0;\n var se = m === bm && m === mr ? (m === br ? 1 : 0) : 0;\n var sum = dirValues.NW * nw +\n dirValues.N * n +\n dirValues.NE * ne +\n dirValues.E * e +\n dirValues.SE * se +\n dirValues.S * s +\n dirValues.SW * sw +\n dirValues.W * w;\n // Figure out which sheet we're supposed to be drawing from\n var sheet = spriteSheets.filter(function (sheet) {\n return sheet.type === tileGrid[y][x];\n })[0];\n if (!sheet) {\n console.error(\"Sheet \".concat(tileGrid[y][x], \" not found!\"));\n return { value: void 0 };\n }\n var selections = sheet.tiles.filter(function (x) { return x.type === sum; });\n // Note: Just picking a random one of the variants every time we render for now\n var selection = selections[Math.floor(Math.random() * selections.length)];\n if (selection) {\n tile(ctx, position, sheet.image, { x: x, y: y }, selection.position, scale, selection.size);\n }\n else {\n console.error(\"Tile not defined \".concat(sum));\n }\n };\n for (var x = 0; x < tileGrid[y].length; x++) {\n var state_2 = _loop_2(x);\n if (typeof state_2 === \"object\")\n return state_2;\n }\n };\n for (var y = 0; y < tileGrid.length; y++) {\n var state_1 = _loop_1(y);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n}\nvar defaultDropShadow = {\n shadowcolour: '#000000',\n shadowBlur: 6,\n shadowOffsetX: 4,\n shadowOffsetY: 4\n};\nfunction shadow(ctx, drawingOperations, options) {\n if (options === void 0) { options = defaultDropShadow; }\n freshContext(ctx, function () {\n options = (0, object_1.merge)(defaultDropShadow, options);\n ctx.shadowColor = options.shadowcolour;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n drawingOperations();\n });\n}\nfunction dodge(ctx, drawingOperations) {\n freshContext(ctx, function () {\n ctx.globalCompositeOperation = 'color-dodge';\n drawingOperations();\n });\n}\nfunction overlay(ctx, drawingOperations) {\n freshContext(ctx, function () {\n ctx.globalCompositeOperation = 'overlay';\n drawingOperations();\n });\n}\nfunction rotation(ctx, drawingOperations, rotation, around) {\n freshContext(ctx, function () {\n ctx.translate(around.x, around.y);\n ctx.rotate(number_1.default.toRadians(rotation));\n ctx.translate(-around.x, -around.y);\n drawingOperations();\n });\n}\nfunction transparency(ctx, drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n freshContext(ctx, function () {\n ctx.globalAlpha = alpha;\n drawingOperations();\n });\n}\nfunction create(ctx) {\n return {\n circle: function (position, radius, options) {\n if (options === void 0) { options = defaultCircle; }\n circle(ctx, position, radius, options);\n },\n clear: function (colour) {\n clear(ctx, colour);\n },\n clearRect: function (rectangle, colour) {\n clearRect(ctx, rectangle, colour);\n },\n curve: function (from, to, controlPoints, options) {\n curve(ctx, from, to, controlPoints, options);\n },\n square: function (position, size, options) {\n if (options === void 0) { options = defaultRect; }\n square(ctx, position, size, options);\n },\n rect: function (rectangle, options) {\n if (options === void 0) { options = defaultRect; }\n rect(ctx, rectangle, options);\n },\n image: function (img, position, size) {\n image(ctx, img, position, size);\n },\n line: function (from, to, options) {\n if (options === void 0) { options = defaultLine; }\n line(ctx, from, to, options);\n },\n sprite: function (spr) {\n sprite(ctx, spr);\n },\n subImage: function (img, position, size, subPosition, subSize) {\n subImage(ctx, img, position, size, subPosition, subSize);\n },\n text: function (position, text, colour, font) {\n if (position === void 0) { position = { x: 0, y: 0 }; }\n if (text === void 0) { text = ''; }\n if (colour === void 0) { colour = '#000000'; }\n if (font === void 0) { font = '16pt sans-serif'; }\n txt(ctx, position, text, colour, font);\n },\n tiles: function (position, tileGrid, spriteSheets, scale) {\n tiles(ctx, position, tileGrid, spriteSheets, scale);\n },\n shadow: function (drawingOperations, options) {\n if (options === void 0) { options = defaultDropShadow; }\n shadow(ctx, drawingOperations, options);\n },\n dodge: function (drawingOperations) {\n dodge(ctx, drawingOperations);\n },\n overlay: function (drawingOperations) {\n overlay(ctx, drawingOperations);\n },\n transparency: function (drawingOperations, alpha) {\n if (alpha === void 0) { alpha = 0.25; }\n transparency(ctx, drawingOperations, alpha);\n },\n rotation: function (drawingOperations, rotateBy, around) {\n if (rotateBy === void 0) { rotateBy = 0; }\n if (around === void 0) { around = { x: 0, y: 0 }; }\n rotation(ctx, drawingOperations, rotateBy, around);\n // rotation()\n }\n };\n}\nexports.default = {\n circle: circle,\n clear: clear,\n clearRect: clearRect,\n create: create,\n curve: curve,\n dodge: dodge,\n image: image,\n line: line,\n overlay: overlay,\n rotation: rotation,\n rect: rect,\n shadow: shadow,\n sprite: sprite,\n square: square,\n subImage: subImage,\n text: txt,\n tiles: tiles,\n transparency: transparency\n};\n\n\n/***/ }),\n\n/***/ \"./src/grid.ts\":\n/*!*********************!*\\\n !*** ./src/grid.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction make2DArray(width, height, defaultValue) {\n if (width === void 0) { width = 1; }\n if (height === void 0) { height = 1; }\n if (defaultValue === void 0) { defaultValue = null; }\n var result = [];\n for (var y = 0; y < height; y++) {\n var row = [];\n for (var x = 0; x < width; x++) {\n row.push(defaultValue);\n }\n result.push(row);\n }\n return result;\n}\nfunction copyTiles(tiles) {\n return tiles.map(function (arr) { return arr.slice(); });\n}\nvar defaultGrid = {\n pos: { x: 0, y: 0 },\n visible: true,\n divisions: 4,\n tileWidth: 8,\n tileHeight: 8,\n scale: 1\n};\nfunction fill(tiles, position, target, replacement) {\n var gridClone = copyTiles(tiles);\n function floodFill(position, target, replacement) {\n if (target === replacement) {\n return;\n }\n var valueAtPosition = gridClone[position.y][position.x];\n if (valueAtPosition !== target) {\n return;\n }\n var isWithinBounds = position.x < gridClone[position.y].length &&\n position.x >= 0 &&\n position.y < gridClone.length &&\n position.y >= 0;\n if (isWithinBounds) {\n gridClone[position.y][position.x] = replacement;\n if (position.y < gridClone.length - 1) {\n floodFill({ x: position.x, y: position.y + 1 }, target, replacement);\n }\n if (position.y > 0) {\n floodFill({ x: position.x, y: position.y - 1 }, target, replacement);\n }\n if (position.x < gridClone[0].length - 1) {\n floodFill({ x: position.x + 1, y: position.y }, target, replacement);\n }\n if (position.x > 0) {\n floodFill({ x: position.x - 1, y: position.y }, target, replacement);\n }\n }\n return;\n }\n if (true) {\n floodFill(position, target, replacement);\n }\n return gridClone;\n}\nfunction create(size, options) {\n if (options === void 0) { options = defaultGrid; }\n options = __assign(__assign({}, defaultGrid), options);\n var tiles = make2DArray(size.width, size.height, 0);\n var pos = { x: options.pos.x, y: options.pos.y };\n var visible = options.visible;\n var divisions = options.divisions;\n var tileWidth = options.tileWidth;\n var tileHeight = options.tileHeight;\n var tileSize = options.tileWidth;\n var scale = options.scale;\n return {\n divisions: divisions,\n pos: pos,\n tileHeight: tileHeight,\n tiles: tiles,\n tileWidth: tileWidth,\n visible: visible,\n size: size,\n tileSize: tileSize,\n scale: scale\n };\n}\nexports.default = {\n create: create,\n fill: fill,\n copyTiles: copyTiles\n};\n\n\n/***/ }),\n\n/***/ \"./src/input.ts\":\n/*!**********************!*\\\n !*** ./src/input.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_41894__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gamepad = exports.keyboard = exports.mouse = void 0;\nvar mouse_1 = __nested_webpack_require_41894__(/*! ./input/mouse */ \"./src/input/mouse.ts\");\nvar keyboard_1 = __nested_webpack_require_41894__(/*! ./input/keyboard */ \"./src/input/keyboard.ts\");\nvar gamepad_1 = __nested_webpack_require_41894__(/*! ./input/gamepad */ \"./src/input/gamepad.ts\");\nfunction createMouse(canvas) {\n var mouseInput = mouse_1.default.create(canvas);\n return {\n start: function () { return mouseInput.start(); },\n update: function () { return mouseInput.update(); },\n getState: function () { return mouseInput.getState(); }\n };\n}\nfunction createKeyboard(canvas) {\n var keyboardInput = keyboard_1.default.create(canvas);\n return {\n start: function () { return keyboardInput.start(); },\n update: function () { return keyboardInput.update(); },\n getState: function () { return keyboardInput.getState(); }\n };\n}\nfunction createGamepad() {\n var gamepadInput = gamepad_1.default.create();\n return {\n start: function () { return gamepadInput.start(); },\n update: function () { return gamepadInput.update(); },\n getState: function () { return gamepadInput.getState(); }\n };\n}\nexports.mouse = {\n create: createMouse\n};\nexports.keyboard = {\n create: createKeyboard\n};\nexports.gamepad = {\n create: createGamepad\n};\n\n\n/***/ }),\n\n/***/ \"./src/input/gamepad.ts\":\n/*!******************************!*\\\n !*** ./src/input/gamepad.ts ***!\n \\******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create() {\n var gamepad = {};\n var connected = function (e) {\n console.log(e.gamepad);\n };\n var disconnected = function (e) {\n console.log(e.gamepad);\n };\n var start = function () {\n window.addEventListener('gamepadconnected', connected);\n window.addEventListener('gamepaddisconnected', disconnected);\n };\n var update = function () { };\n return {\n getState: function () { return gamepad; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keyboard.ts\":\n/*!*******************************!*\\\n !*** ./src/input/keyboard.ts ***!\n \\*******************************/\n/*! no static exports found */\n/***/ (function(module, exports, __nested_webpack_require_44437__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar keys_1 = __nested_webpack_require_44437__(/*! ./keys */ \"./src/input/keys.ts\");\nvar keys = defaultState();\nfunction defaultState() {\n var defaultState = {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n return keys_1.default.reduce(function (acc, key) {\n var label = key.name;\n delete key['label'];\n acc[label] = __assign(__assign({}, key), defaultState);\n return acc;\n }, {});\n}\nfunction getKey(event, keys) {\n var result = null;\n var objectKeys = Object.keys(keys);\n for (var i = 0; i < objectKeys.length; i++) {\n if (keys[objectKeys[i]].code === event.code) {\n result = keys[objectKeys[i]];\n }\n }\n if (!result) {\n console.error(\"No key definition found for \".concat(event.code));\n }\n return result;\n}\nfunction preventDefaultArrows(event) {\n var keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' '];\n if (keys.includes(event.key)) {\n event.preventDefault();\n }\n}\nfunction down(event) {\n preventDefaultArrows(event);\n var key = getKey(event, keys);\n if (!key.pressed) {\n key.justPressed = true;\n }\n key.pressed = true;\n}\nfunction up(event) {\n var key = getKey(event, keys);\n if (!key.released) {\n key.justReleased = true;\n }\n key.pressed = false;\n key.released = true;\n}\nfunction update() {\n // reset the keys \"just\" properties\n Object.keys(keys).forEach(function (key) {\n keys[key].justPressed = false;\n keys[key].justReleased = false;\n });\n}\nfunction create(canvas) {\n var start = function () {\n // keyboard events\n canvas.addEventListener('keydown', down);\n canvas.addEventListener('keyup', up);\n };\n return {\n start: start,\n update: update,\n getState: function () { return keys; }\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/input/keys.ts\":\n/*!***************************!*\\\n !*** ./src/input/keys.ts ***!\n \\***************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar allKeys = [\n { code: 'Backspace', name: 'backspace' },\n { code: 'Tab', name: 'tab' },\n { code: 'Enter', name: 'enter' },\n { code: 'ShiftLeft', name: 'shift' },\n { code: 'ControlLeft', name: 'ctrl' },\n { code: 'AltLeft', name: 'alt' },\n { code: 'CapsLock', name: 'caps' },\n { code: 'Escape', name: 'escape' },\n { code: 'Space', name: 'space' },\n { code: 'PageUp', name: 'pageUp' },\n { code: 'PageDown', name: 'pageDown' },\n { code: 'End', name: 'end' },\n { code: 'Home', name: 'home' },\n { code: 'ArrowLeft', name: 'left' },\n { code: 'ArrowUp', name: 'up' },\n { code: 'ArrowRight', name: 'right' },\n { code: 'ArrowDown', name: 'down' },\n { code: 'Insert', name: 'insert' },\n { code: 'Delete', name: 'delete' },\n { code: 'Digit0', name: 'zero' },\n { code: 'Digit1', name: 'one' },\n { code: 'Digit2', name: 'two' },\n { code: 'Digit3', name: 'three' },\n { code: 'Digit4', name: 'four' },\n { code: 'Digit5', name: 'five' },\n { code: 'Digit6', name: 'six' },\n { code: 'Digit7', name: 'seven' },\n { code: 'Digit8', name: 'eight' },\n { code: 'Digit9', name: 'nine' },\n { code: 'KeyA', name: 'A' },\n { code: 'KeyB', name: 'B' },\n { code: 'KeyC', name: 'C' },\n { code: 'KeyD', name: 'D' },\n { code: 'KeyE', name: 'E' },\n { code: 'KeyF', name: 'F' },\n { code: 'KeyG', name: 'G' },\n { code: 'KeyH', name: 'H' },\n { code: 'KeyI', name: 'I' },\n { code: 'KeyJ', name: 'J' },\n { code: 'KeyK', name: 'K' },\n { code: 'KeyL', name: 'L' },\n { code: 'KeyM', name: 'M' },\n { code: 'KeyN', name: 'N' },\n { code: 'KeyO', name: 'O' },\n { code: 'KeyP', name: 'P' },\n { code: 'KeyQ', name: 'Q' },\n { code: 'KeyR', name: 'R' },\n { code: 'KeyS', name: 'S' },\n { code: 'KeyT', name: 'T' },\n { code: 'KeyU', name: 'U' },\n { code: 'KeyV', name: 'V' },\n { code: 'KeyW', name: 'W' },\n { code: 'KeyX', name: 'X' },\n { code: 'KeyY', name: 'Y' },\n { code: 'KeyZ', name: 'Z' },\n { code: 'OSLeft', name: 'superLeft' },\n { code: 'OSRight', name: 'superRight' },\n { code: 'ContextMenu', name: 'menu' },\n { code: 'Numpad0', name: 'num0' },\n { code: 'Numpad1', name: 'num1' },\n { code: 'Numpad2', name: 'num2' },\n { code: 'Numpad3', name: 'num3' },\n { code: 'Numpad4', name: 'num4' },\n { code: 'Numpad5', name: 'num5' },\n { code: 'Numpad6', name: 'num6' },\n { code: 'Numpad7', name: 'num7' },\n { code: 'Numpad8', name: 'num8' },\n { code: 'Numpad9', name: 'num9' },\n { code: 'NumpadMultiply', name: 'multiply' },\n { code: 'NumpaddAdd', name: 'add' },\n { code: 'NumpaddDivide', name: 'divide' },\n { code: 'NumpadDecimal', name: 'point' },\n { code: 'NumpadMinus', name: 'minus' },\n { code: 'F1', name: 'F1' },\n { code: 'F2', name: 'F2' },\n { code: 'F3', name: 'F3' },\n { code: 'F4', name: 'F4' },\n { code: 'F5', name: 'F5' },\n { code: 'F6', name: 'F6' },\n { code: 'F7', name: 'F7' },\n { code: 'F8', name: 'F8' },\n { code: 'F9', name: 'F9' },\n { code: 'F10', name: 'F10' },\n { code: 'F11', name: 'F11' },\n { code: 'F12', name: 'F12' },\n { code: 'NumLock', name: 'numLock' },\n { code: 'ScrollLock', name: 'scrollLock' },\n { code: 'Semicolon', name: 'semiColon' },\n { code: 'Equal', name: 'equals' },\n { code: 'Comma', name: 'comma' },\n { code: 'Minus', name: 'dash' },\n { code: 'Period', name: 'dot' },\n { code: 'Slash', name: 'forewardSlash' },\n { code: 'BracketLeft', name: 'openBracket' },\n { code: 'IntlBackslash', name: 'backSlash' },\n { code: 'BracketRight', name: 'closeBracket' },\n { code: 'Quote', name: 'quote' },\n { code: 'MetaLeft', name: 'metaLeft' }\n];\nexports.default = allKeys;\n\n\n/***/ }),\n\n/***/ \"./src/input/mouse.ts\":\n/*!****************************!*\\\n !*** ./src/input/mouse.ts ***!\n \\****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(canvas) {\n var defaultState = function () {\n return {\n position: { x: 0, y: 0 },\n left: defaultButtonState(),\n wheel: defaultWheelState(),\n right: defaultButtonState()\n };\n };\n var defaultButtonState = function () {\n return {\n pressed: false,\n justPressed: false,\n released: false,\n justReleased: false\n };\n };\n var defaultWheelState = function () {\n var buttonState = defaultButtonState();\n return __assign(__assign({}, buttonState), { moved: false, direction: 'up' });\n };\n var prevMouse = defaultState();\n var mouse = defaultState();\n var clone = function (state) {\n return Object.assign({}, state);\n };\n var relative = function (event) {\n var bounds = canvas.getBoundingClientRect();\n return {\n x: event.clientX - bounds.left,\n y: event.clientY - bounds.top\n };\n };\n var move = function (event) {\n var newPos = relative(event);\n mouse.position = newPos;\n };\n var down = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.pressed) {\n mouse.left.justPressed = true;\n }\n mouse.left.pressed = true;\n break;\n case 2:\n if (!mouse.wheel.pressed) {\n mouse.wheel.justPressed = true;\n }\n mouse.wheel.pressed = true;\n break;\n case 3:\n if (!mouse.right.pressed) {\n mouse.right.justPressed = true;\n }\n mouse.right.pressed = true;\n break;\n }\n };\n var up = function (event) {\n switch (event.which) {\n case 1:\n if (!mouse.left.released) {\n mouse.left.justReleased = true;\n }\n mouse.left.released = true;\n mouse.left.pressed = false;\n break;\n case 2:\n if (!mouse.wheel.released) {\n mouse.wheel.justReleased = true;\n }\n mouse.wheel.released = true;\n mouse.wheel.pressed = false;\n break;\n case 3:\n if (!mouse.right.released) {\n mouse.right.justReleased = true;\n }\n mouse.right.released = true;\n mouse.right.pressed = false;\n break;\n }\n };\n var wheel = function (event) {\n mouse.wheel.moved = event.deltaY === 0 ? false : true;\n if (mouse.wheel.moved !== false) {\n mouse.wheel.direction = event.deltaY < 0 ? 'up' : 'down';\n }\n };\n var update = function () {\n mouse.wheel.moved = false;\n mouse.left.justPressed = false;\n mouse.right.justPressed = false;\n mouse.left.justReleased = false;\n mouse.right.justReleased = false;\n mouse.wheel.justPressed = false;\n mouse.wheel.justReleased = false;\n prevMouse = clone(mouse);\n };\n var start = function () {\n // mouse events\n canvas.addEventListener('mousemove', move);\n canvas.addEventListener('mousedown', down);\n canvas.addEventListener('mouseup', up);\n canvas.addEventListener('wheel', wheel);\n // default mouse position, center of screen\n mouse.position.x = canvas.width / 2;\n mouse.position.y = canvas.height / 2;\n };\n return {\n getState: function () { return mouse; },\n start: start,\n update: update\n };\n}\nexports.default = { create: create };\n\n\n/***/ }),\n\n/***/ \"./src/sprite.ts\":\n/*!***********************!*\\\n !*** ./src/sprite.ts ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(position, size, rotation, texture, colour) {\n if (rotation === void 0) { rotation = 0; }\n if (colour === void 0) { colour = '#ffffff'; }\n var frames = [];\n return {\n size: size,\n texture: texture,\n colour: colour,\n frame: 0,\n position: position,\n setFrames: function (newFrames) {\n frames = newFrames;\n },\n addFrame: function (frame) {\n frames.push(frame);\n },\n get frames() {\n return frames;\n },\n get rotation() {\n return rotation;\n },\n set rotation(degrees) {\n rotation = degrees >= 360 ? 360 - degrees : degrees;\n }\n };\n}\nexports.default = {\n create: create\n};\n\n\n/***/ }),\n\n/***/ \"./src/storage.ts\":\n/*!************************!*\\\n !*** ./src/storage.ts ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clear = exports.remove = exports.load = exports.save = void 0;\nfunction save(key, value) {\n localStorage.setItem(key, value);\n}\nexports.save = save;\nfunction load(key) {\n return localStorage.getItem(key);\n}\nexports.load = load;\nfunction remove(key) {\n localStorage.removeItem(key);\n}\nexports.remove = remove;\nfunction clear() {\n localStorage.clear();\n}\nexports.clear = clear;\n\n\n/***/ }),\n\n/***/ \"./src/types.ts\":\n/*!**********************!*\\\n !*** ./src/types.ts ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n\n/***/ }),\n\n/***/ \"./src/utils/number.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/number.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clamp = exports.toDegrees = exports.toRadians = void 0;\nfunction toRadians(degrees) {\n return degrees * (Math.PI / 180);\n}\nexports.toRadians = toRadians;\nfunction toDegrees(radians) {\n return radians * (180 / Math.PI);\n}\nexports.toDegrees = toDegrees;\nfunction clamp(value, min, max) {\n if (min > max) {\n console.error(\"clamp: the minimum (\".concat(min, \") and maximum (\").concat(max, \") have been passed in the wrong order\"));\n return value;\n }\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\nexports.clamp = clamp;\nexports.default = {\n toRadians: toRadians,\n toDegrees: toDegrees\n};\n\n\n/***/ }),\n\n/***/ \"./src/utils/object.ts\":\n/*!*****************************!*\\\n !*** ./src/utils/object.ts ***!\n \\*****************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = exports.clone = void 0;\n// TODO: Handle Arrays\nfunction deepClone(obj) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n switch (typeof obj[key]) {\n case 'object':\n result[key] = deepClone(obj[key]);\n break;\n default:\n result[key] = obj[key];\n }\n });\n return result;\n}\nfunction shallowClone(obj) {\n return __assign({}, obj);\n}\nfunction clone(obj, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepClone(obj) : shallowClone(obj);\n}\nexports.clone = clone;\n// TODO: Handle Arrays\nfunction deepMerge(a, b) {\n var result = {};\n Object.keys(a).forEach(function (key) {\n if (typeof a[key] === 'object') {\n result[key] = b[key] === undefined ? a[key] : merge(a[key], b[key]);\n }\n else {\n result[key] = b[key] === undefined ? a[key] : b[key];\n }\n });\n // values that only exist on b need to be inserted afterwards\n Object.keys(b).forEach(function (key) {\n if (a[key] === undefined) {\n result[key] = b[key];\n }\n });\n return result;\n}\nfunction shallowMerge(a, b) {\n return __assign(__assign({}, a), b);\n}\nfunction merge(a, b, deep) {\n if (deep === void 0) { deep = true; }\n return deep === true ? deepMerge(a, b) : shallowMerge(a, b);\n}\nexports.merge = merge;\nexports.default = {\n merge: merge,\n clone: clone\n};\n\n\n/***/ }),\n\n/***/ \"./src/vec2.ts\":\n/*!*********************!*\\\n !*** ./src/vec2.ts ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction create(_x, _y) {\n var x = _x;\n var y = _y;\n var add = function (v) {\n x += v.x;\n y += v.y;\n };\n var addScalar = function (s) {\n x += s;\n y += s;\n };\n var divide = function (v) {\n x /= v.x;\n y /= v.y;\n };\n var divideScalar = function (s) {\n x /= s;\n y /= s;\n };\n var dot = function (v) {\n return x * v.x + y * v.y;\n };\n var getLength = function () {\n return Math.sqrt(x * x + y * y);\n };\n var getOpposite = function () {\n return create(-x, -y);\n };\n var getPerp = function () {\n return create(-y, x);\n };\n var isEqualTo = function (v) {\n return x == v.x && y == v.y;\n };\n var multiply = function (v) {\n x *= v.x;\n y *= v.y;\n };\n var multiplyScalar = function (s) {\n x *= s;\n y *= s;\n };\n var normalise = function () {\n var l = getLength();\n x = x / l;\n y = y / l;\n };\n var setLength = function (l) {\n normalise();\n multiplyScalar(l);\n };\n var subtract = function (v) {\n x -= v.x;\n y -= v.y;\n };\n var subtractScalar = function (s) {\n x -= s;\n y -= s;\n };\n return {\n add: add,\n addScalar: addScalar,\n clone: clone,\n divide: divide,\n divideScalar: divideScalar,\n dot: dot,\n getLength: getLength,\n getOpposite: getOpposite,\n getPerp: getPerp,\n isEqualTo: isEqualTo,\n multiply: multiply,\n multiplyScalar: multiplyScalar,\n normalise: normalise,\n setLength: setLength,\n subtract: subtract,\n subtractScalar: subtractScalar,\n set x(_x) {\n x = _x;\n },\n get x() {\n return x;\n },\n set y(_y) {\n y = _y;\n },\n get y() {\n return y;\n }\n };\n}\nvar fromDegrees = function (degrees) {\n var rad = degrees * (Math.PI / 180);\n return create(Math.cos(rad), Math.sin(rad));\n};\nvar clone = function (v) {\n return create(v.x, v.y);\n};\nexports.default = {\n clone: clone,\n create: create,\n fromDegrees: fromDegrees\n};\n\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=bramble.js.map\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js?");
29
+
30
+ /***/ }),
31
+
32
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js":
33
+ /*!******************************************************************************!*\
34
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js ***!
35
+ \******************************************************************************/
36
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
37
+
38
+ eval("// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = __webpack_require__(/*! ./lib/alea */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js\");\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = __webpack_require__(/*! ./lib/xor128 */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js\");\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = __webpack_require__(/*! ./lib/xorwow */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js\");\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = __webpack_require__(/*! ./lib/xorshift7 */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js\");\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = __webpack_require__(/*! ./lib/xor4096 */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js\");\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = __webpack_require__(/*! ./lib/tychei */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js\");\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = __webpack_require__(/*! ./seedrandom */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js\");\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js?");
39
+
40
+ /***/ }),
41
+
42
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js":
43
+ /*!*********************************************************************************!*\
44
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js ***!
45
+ \*********************************************************************************/
46
+ /***/ (function(module, exports, __webpack_require__) {
47
+
48
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A port of an algorithm by Johannes Baagøe <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js?");
49
+
50
+ /***/ }),
51
+
52
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js":
53
+ /*!***********************************************************************************!*\
54
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js ***!
55
+ \***********************************************************************************/
56
+ /***/ (function(module, exports, __webpack_require__) {
57
+
58
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js?");
59
+
60
+ /***/ }),
61
+
62
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js":
63
+ /*!***********************************************************************************!*\
64
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js ***!
65
+ \***********************************************************************************/
66
+ /***/ (function(module, exports, __webpack_require__) {
67
+
68
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js?");
69
+
70
+ /***/ }),
71
+
72
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js":
73
+ /*!************************************************************************************!*\
74
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js ***!
75
+ \************************************************************************************/
76
+ /***/ (function(module, exports, __webpack_require__) {
77
+
78
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js?");
79
+
80
+ /***/ }),
81
+
82
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js":
83
+ /*!**************************************************************************************!*\
84
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js ***!
85
+ \**************************************************************************************/
86
+ /***/ (function(module, exports, __webpack_require__) {
87
+
88
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js?");
89
+
90
+ /***/ }),
91
+
92
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js":
93
+ /*!***********************************************************************************!*\
94
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js ***!
95
+ \***********************************************************************************/
96
+ /***/ (function(module, exports, __webpack_require__) {
97
+
98
+ eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (__webpack_require__.amdD && __webpack_require__.amdO) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return impl; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n true && module, // present in node.js\n __webpack_require__.amdD // present with an AMD loader\n);\n\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js?");
99
+
100
+ /***/ }),
101
+
102
+ /***/ "./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js":
103
+ /*!***********************************************************************************!*\
104
+ !*** ./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js ***!
105
+ \***********************************************************************************/
106
+ /***/ (function(module, exports, __webpack_require__) {
107
+
108
+ eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ( true && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = __webpack_require__(/*! crypto */ \"?69c0\");\n } catch (ex) {}\n} else if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { return seedrandom; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n} else {}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js?");
109
+
110
+ /***/ }),
111
+
112
+ /***/ "./src/config.ts":
113
+ /*!***********************!*\
114
+ !*** ./src/config.ts ***!
115
+ \***********************/
116
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
117
+
118
+ "use strict";
119
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ diff: () => (/* binding */ diff),\n/* harmony export */ merge: () => (/* binding */ merge),\n/* harmony export */ merge2: () => (/* binding */ merge2)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\nvar simpleLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = index < _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS.length ? _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS[index] : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n return {\n colour: layer.colour || defaultLayer.colour || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SNOW_COLOR,\n opacity: layer.opacity || defaultLayer.opacity || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY,\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'simple',\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nvar imageLayerConfig = function (layer, index) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15;\n var defaultLayer = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n return {\n density: layer.density || defaultLayer.density || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY,\n mode: 'image',\n image: layer.image || defaultLayer.image || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE,\n opacity: layer.opacity || defaultLayer.opacity || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY,\n rotate: layer.rotate || defaultLayer.rotate || _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ROTATE,\n mass: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS), defaultLayer.mass), layer.mass),\n size: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE), defaultLayer.size), layer.size),\n sway: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY), defaultLayer.sway), layer.sway),\n gravity: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY), defaultLayer.gravity), layer.gravity),\n wind: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND), defaultLayer.wind), layer.wind), { gusts: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS), (_a = defaultLayer.wind) === null || _a === void 0 ? void 0 : _a.gusts), (_b = layer.wind) === null || _b === void 0 ? void 0 : _b.gusts), { in: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN), (_d = (_c = defaultLayer.wind) === null || _c === void 0 ? void 0 : _c.gusts) === null || _d === void 0 ? void 0 : _d.in), (_f = (_e = layer.wind) === null || _e === void 0 ? void 0 : _e.gusts) === null || _f === void 0 ? void 0 : _f.in), { additionalStrength: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH), (_j = (_h = (_g = defaultLayer.wind) === null || _g === void 0 ? void 0 : _g.gusts) === null || _h === void 0 ? void 0 : _h.in) === null || _j === void 0 ? void 0 : _j.additionalStrength), (_m = (_l = (_k = layer.wind) === null || _k === void 0 ? void 0 : _k.gusts) === null || _l === void 0 ? void 0 : _l.in) === null || _m === void 0 ? void 0 : _m.additionalStrength), duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION), (_q = (_p = (_o = defaultLayer.wind) === null || _o === void 0 ? void 0 : _o.gusts) === null || _p === void 0 ? void 0 : _p.in) === null || _q === void 0 ? void 0 : _q.duration), (_t = (_s = (_r = layer.wind) === null || _r === void 0 ? void 0 : _r.gusts) === null || _s === void 0 ? void 0 : _s.in) === null || _t === void 0 ? void 0 : _t.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY), (_w = (_v = (_u = defaultLayer.wind) === null || _u === void 0 ? void 0 : _u.gusts) === null || _v === void 0 ? void 0 : _v.in) === null || _w === void 0 ? void 0 : _w.delay), (_z = (_y = (_x = layer.wind) === null || _x === void 0 ? void 0 : _x.gusts) === null || _y === void 0 ? void 0 : _y.in) === null || _z === void 0 ? void 0 : _z.delay) }), out: __assign(__assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT), (_1 = (_0 = defaultLayer.wind) === null || _0 === void 0 ? void 0 : _0.gusts) === null || _1 === void 0 ? void 0 : _1.out), (_3 = (_2 = layer.wind) === null || _2 === void 0 ? void 0 : _2.gusts) === null || _3 === void 0 ? void 0 : _3.out), { duration: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION), (_6 = (_5 = (_4 = defaultLayer.wind) === null || _4 === void 0 ? void 0 : _4.gusts) === null || _5 === void 0 ? void 0 : _5.out) === null || _6 === void 0 ? void 0 : _6.duration), (_9 = (_8 = (_7 = layer.wind) === null || _7 === void 0 ? void 0 : _7.gusts) === null || _8 === void 0 ? void 0 : _8.out) === null || _9 === void 0 ? void 0 : _9.duration), delay: __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY), (_12 = (_11 = (_10 = defaultLayer.wind) === null || _10 === void 0 ? void 0 : _10.gusts) === null || _11 === void 0 ? void 0 : _11.out) === null || _12 === void 0 ? void 0 : _12.delay), (_15 = (_14 = (_13 = layer.wind) === null || _13 === void 0 ? void 0 : _13.gusts) === null || _14 === void 0 ? void 0 : _14.out) === null || _15 === void 0 ? void 0 : _15.delay) }) }) })\n };\n};\nfunction mergeBaseConfig(config) {\n var _a;\n var result = __assign(__assign(__assign({}, _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_CONFIG), config), { layers: ((_a = config.layers) !== null && _a !== void 0 ? _a : []).map(function (layer, index) {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer)(layer)\n ? simpleLayerConfig(layer, index)\n : imageLayerConfig(layer, index);\n }) });\n return result;\n}\nfunction merge(config) {\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: config.attachTo\n ? (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(config.attachTo)\n : (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getElementOrThrow)(_defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID) });\n}\nfunction merge2(config) {\n var _a;\n var attachTo = config.attachTo, baseConfig = __rest(config, [\"attachTo\"]);\n var basedConfig = mergeBaseConfig(baseConfig);\n return __assign(__assign({}, basedConfig), { attachTo: (_a = config.attachTo) !== null && _a !== void 0 ? _a : _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID });\n}\nfunction isPlainObject(obj) {\n return obj !== null && typeof obj === 'object' && obj.constructor === Object;\n}\nfunction pruneObject(partial, defaultObj) {\n if (!isPlainObject(partial))\n return partial;\n var result = {};\n for (var key in partial) {\n var val = partial[key];\n var defVal = defaultObj[key];\n if (val === defVal)\n continue;\n if (Array.isArray(val)) {\n var prunedArray = pruneArray(val, defaultObj[key] || []);\n if (prunedArray.length > 0)\n result[key] = prunedArray;\n }\n else if (isPlainObject(val)) {\n var pruned = pruneObject(val, defVal || {});\n if (Object.keys(pruned).length > 0)\n result[key] = pruned;\n }\n else {\n result[key] = val;\n }\n }\n return result;\n}\nfunction pruneArray(partialArray, defaultArray) {\n var result = [];\n for (var i = 0; i < partialArray.length; i++) {\n var partialItem = partialArray[i];\n var defaultItem = defaultArray[i] || getDefaultLayer(partialItem);\n var prunedItem = pruneObject(partialItem, defaultItem);\n if (isImageLayerPartial(partialItem) && prunedItem.mode === undefined) {\n prunedItem.mode = 'image';\n }\n result.push(prunedItem);\n }\n return tidyUp(result, defaultArray);\n}\nfunction getDefaultLayer(partialLayer) {\n if (isImageLayerPartial(partialLayer)) {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER;\n }\n else {\n return _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER;\n }\n}\nfunction isImageLayerPartial(partial) {\n return (partial.mode === 'image' ||\n partial.image !== undefined ||\n partial.rotate !== undefined);\n}\nfunction tidyUp(layers, defaultLayers) {\n return layers.filter(function (layer, index) {\n if (layers.length > defaultLayers.length) {\n return true;\n }\n if (Object.keys(layer).length > 0) {\n return true;\n }\n // Check if there are any layers after this one that are not empty\n if (!layers.slice(index).every(function (obj) { return Object.keys(obj).length === 0; })) {\n return true;\n }\n return false;\n });\n}\nfunction diff(config) {\n var defaultConfig = _defaults__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_USER_CONFIG;\n return pruneObject(config, defaultConfig);\n}\n\n\n//# sourceURL=webpack://snowfall/./src/config.ts?");
120
+
121
+ /***/ }),
122
+
123
+ /***/ "./src/defaults.ts":
124
+ /*!*************************!*\
125
+ !*** ./src/defaults.ts ***!
126
+ \*************************/
127
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
128
+
129
+ "use strict";
130
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* binding */ BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* binding */ DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* binding */ DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* binding */ DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* binding */ DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* binding */ DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* binding */ DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* binding */ DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* binding */ DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* binding */ DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* binding */ DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* binding */ DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* binding */ DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* binding */ DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* binding */ DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* binding */ DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* binding */ DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* binding */ DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* binding */ DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* binding */ DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* binding */ DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* binding */ DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* binding */ DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* binding */ DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* binding */ DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* binding */ DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* binding */ DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* binding */ DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* binding */ DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* binding */ DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* binding */ DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* binding */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* binding */ DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* binding */ DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* binding */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* binding */ DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* binding */ DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* binding */ DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* binding */ DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* binding */ DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* binding */ DEFAULT_WIND_STRENGTH),\n/* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\n// Basic\nvar DEFAULT_CONTAINER_ID = 'snowfall';\nvar DEFAULT_SNOW_COLOR = '#ffffff';\nvar DEFAULT_DENSITY = 200;\nvar DEFAULT_MASS_MIN = 1;\nvar DEFAULT_MASS_MAX = 3;\nvar DEFAULT_SIZE_MIN = 1;\nvar DEFAULT_SIZE_MAX = 3;\nvar DEFAULT_ROTATE = false;\nvar DEFAULT_MODE = 'simple';\nvar DEFAULT_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAHdElNRQfpChoFCDEXRwdpAAARX0lEQVR42u1bd1QUd7t+Z/ssuwtb2KU3pVkIEBFRkIiaKCKIikb9NBJNjCamWK7m+6I3iSbRY0xi/GJvsYSooGBBDZao2BBpAkovu/TdpWyb3dmZ3/eH5eaeGAREybnX55w5Z3Z35n2f95l33l9dgJd4iZd4ib4D9vDoUwIvHJu37wONpoU1OWHGAgCAY0d/3S6VyqyLF8x94VxYfSEAAIDCwUmI8/nvPjh3/MVKkq19waNPBKBpChDNxAABAwAA0TRG01RfUHlA4MUD6+J3/2cF+PvgeQrQWxX+ubYUvV4Dlv/zc8jOus7YuHn7u2w2x7e9rS2psaE+VyqTkaPCgrpk4+KNXGjVaNgKR6cgW1vbGRaLpWTp4gU7QkLD6A1ff9GrfHszAzAAwMxmArhcHoPHw4faiSUfu7p7nA0IDN7J4XIjk09m8PLLVACAnnA7grySWkg9+zuPy+VFDn4laKerm/tZsUTyMQ/Hh3J5PKbZTDz205uknwlXswsB0cjeXqFYou/oOO/q7nnBYiZAqayV8fn8SSJb20Q2mzMUABGEiTjX3t62W6tRXy4rvc97I3riZQCAc+knI/38BxJCkWikRCKbx+XxxmEYhlvM5iy9XrdXr9elOjm5tOB8PihrqkcLRKIxLU1N32EMrCViyKBefIY9QHWzHqqadCNUWoKoaGjbjBACr37e8N7iTwAhBGd/vynJuls2o6K+LaNWbTQrNSZTmUqbfi3n3vzyutaS8rrWkqvZhfPK61pPK9VGU63aaC6vaz1/u7B85m9XsiQIIZid+A549fMGhBBUNLRtVmkJoqpJN6K6Wd+3wQMA1LdZoL7NElHfZjFXNXZsQQiBu6fX499nvTUPKhra4GTGVeHN/JLYsjptWk2LwaDUmKwqLWFVaQmrUm0ka1oMhrI67YlbBaVxZy7dELWTCCYnzHhsx93TCxBCUNXYsaW+zWJ+6POZ+fdaEUQIPX6z//heHfp5Nxz6eTcAgO5WQdmJnNtZ513c3IbLFQ7v4Dg/DgCAIIi05qbGXSplzTVPr/7G8aPC/mT/kU300BeG9U4ZeKoAB46kQXNTIxNjMEAms6fmTJ/UY2ehAd6wL+mYsby05HxledndsBEjBwMA3Lx+9UOappsMej1MnzT+mQLafzgVNOoWJk3TIFc4ULOnxXV6faetwIEjaWA0GjnjYuJWR8fE/ejV32egRCrDvtrwQ48Jzp0xGdpaW0Gn6yARIAoBonS6DrKttRUWzZ/dY7vfbNwMvv4DMFc394HjJsRuGhcTt9poNHD2H07tuQAMBgNYLBaTyWD62AiEi1xcXNMv3chdHhgcIkcIQXRsfI8JP8jlPxw9xKSp0wEhBEGvhsiPnvhtuYdX/9MCoeh9BoPhw2KxmQwGs+cC7N7+E4SFjzRVlJcubm3VLkMAtFQqW+frP+BEzr3qqbMT38EtFnPP2T8jLBYLTJoyHc8rqZ3i7euXJpFI1yGEkFajXl5Wcv/DkNAw054d/+65ABczzsIADwXcupGpDujv/J2ytjpab9Bv43C4/vZyxYFXh4Tura6qDLaSJKO3ilJXgGEYWK1WhrK2OmjYiIg9Upn9QTaLPUCn122vqaqMfsXHdeONzMstAd4ucDHjXKe2utQKfPnZCgAA1NLcdC/vTvZHYeERx+zsJMtwPn+qh6fXSIvFcpvJYjEx7EEyPy3teoJHNjEMEEKISVosn7i5eQxlMJlyk9F4QavVbLh25dJlF1d3EgDgmy9Xdc1ud0hMmTAGCMJEsljs80WFBdOamxrfoWnUjvP5sRiGMRGN5EnH00VHTpyDWW/N67Xg585/D5JPZcDRk7+JEEJyDMOYPByPoyiqQ93S/O69orsJPB7vvNFoIKdPGtc9YbtL5ocN34C7hxswmUyaJMlmkrRoAQAoikJsDiduSMiwX61Wa1TwkKHsX4+nP3PwySczIDgklE1R1lFBwSFJHA4njqIoBABAkhatmSCaEADt5+MKP25c3237XRYgdnICIIRg98Ej4uqqmul+/gOPObu4puA4P8hkMp5pbKhfZDDoj+M4HuXo5HwsemL89wpHJ18AwFZ81v0R3Ko16wAAMHu53GfM6+O/Uzg4HefyeKMNBkNqU2PDQpPJmI7j/EBnV7eUAYMGH79fqnxz94EjYoQQjI+J67KfpwowZfosQAjBog+XyvNLlW/39/E7aS9XHORwucPNBJFer1ImFN0tmGa1kttuXc9MVKtb5litZIlQJFzk7uGVnl+q/Dg8MkpWXN0ES1c+/b384ptvoaiyAUZEvCa9W173kZuH1xmRyPZ9i8Vc2tLc9FZu9u25Wo16+52sm9MbGuqmEgRxmsvlDZPJ7A/4Dxp86m553bxFHy2TI4Rg4qSpT/XXaek+dT4TKIriuXt4viUQChfwePgrVqu13WI2n1KrW/aqaqtvyuQKU9TDcf7kaTMg5fAvcO5KloOTk3OiyNZuIZPJdDabiesatfrb/Nw758QSCVGvUgGbzZaMHTfhMgBAxtnTkSRJat3cPaC9rZU36JWg18USyTIOhzuCoqz1ep1ua0111Z7oqOGNsfEJcDI1GQAAkk9lQEd7O89/4OBhUpnsbQ6HG8NisWwJwlRgMhq3VZSV/sxis4mYMeE9ywCJVAoymb2TyNZuJYvFcjHo9TtUyprxqSmH55fcK7q0d+fWx8EDABw7kgQYhkF+TnbjW2/Gr6tXKScYDPq9HA430NHJKSnitaidCgfHoF3bNv9J+IP7dmJyB4egsPCRO+QKhyQ2mx2s1+n2KWtqomdOiVmXm53ViGHY4+ABAKbGjIWjSQeI+8WFv6cmH55fp6od39HRvp3FZDkLBMKV9nKFk0Qq7XkGHDlxDhBCHG8fvzC9Ttd2Lv1EkVRmb13ywbtPTS0AgPSL10GrUXN8/AaMFkuky3g8XiRFUc16nW5byb2i4wGBwYcAAPJysmf6DxwULxSJ3mMwmA5mgrisbmneUFx096JUZm+OeyOyS/42bt4BKmUNK37qmwMFQqFdWen9GxiGWabFvtGl+58LVq5eA7fvlsOx9Avi/FLloqomXYlKS9Dlda3F1U261upmnba8vrVIqTHRlY0dJXklte+fvnBNXNnYDgve/7jviPc2dh04AgCAXbyR61lYUf9DrdporG+zoPo2C6pVG0wFZapNGVezPQEA27LrwAvj9TebFn+GUdHfVYAlKz6D7KJKkEik4vxS5UJPr35n7cSSDy1mc7XFbG6zWMytFoulUiyRLu7n7Xs2r6R2kbun1wt7BTotgsknM8BKWdm+fgPCKYrqyMnOKrC3l5Px0VFdMn76wjXQatQcX/+Bo8USyTIeD39QBPW6bSXFf10ECYK4rOlBETx+5iJo1Gp2YPCQACaTKbpfXJTJYjHJhE6KYKcZwGKxgMPhOApFoh1yhUPGiJGvbXN0dg7fcyiZm3E1G3x8/Z943/rvf4KgV0MwsVgyOCR0+BYHR6cjXC43TK/XJdXWVE14c9L4NU2NDXUPHwDW0txUnzhzylqVUhljNOgPcbncUCcXl6NhIyK2SCTSwQGBwYy1679/oi9fvwFw4XoO7Es6xnVydg0fHhG5Va5wyBCKRDs4XI4ji8XueQYcP3MRDHoDNyAwaIZAIFzIYrNfBQCD0WA4YzDo9+Tn3skMCQ0zDu7vDACddYTM17XqlocdISlRp1L+dUeovY03KCCwSx2h/FIlFBcW8L19/UfY2Ajm2QgE4wHAxmq15ug62rcW5OX+YmNjY548YXTPMiB+fBSUl5WYvfs778vLvROtUbfMJS2WHL6NTbxcrkgdERF52Gq1xh88elJ0p7gKZs2Zx88rqZ3m7eObJpFKv6JpmtRq1EvvF9+NF4ps00ruFxNTJ479a3/RUVBTXUngOH6irOR+fFurdglCYLGzE699MAlTNX3W3Hn8ospGOJx2VkRR1KSgIUN/VTg4ptoIBJNJksxtaW5KLC4siA7wdtlbWJDXafBPzYA/YsOmrTBkaBg0NdaLfPwGjBYIBPN4OD8KwzAGQRCZJpMxlcfDI3Acj6NpmjAaDAcbG+s3jxoWWLpy1Zdo3ZrVj21t2rrniRnw0cK3H1+zes16+HLVCuzyrXxve7lisUAomg0APJPJeMJMEFdwnB/Hw/EIhGjaTJgvtbe37amtqT7v7OLanpZyGL7+4rMuxdWjaZxbBaVw63omPmx4RLidRPKZjY1gJEIIEEKkyWg8r9Vqvr125dJVZxdX8s346D/d3xUBHiH5ZAY01KvYw0aMDLcTi5fhOD4WAGNjGAZ6ve5KW6t2bc7trGvunl7GVSuWwJ3bN7sVS7ebwXXf/Ru4XB54ePZjs9hsFxaLZQ/wYALVoNenZ165NIOyWi/mZGc9MfjuYurEsXDn9i2Sslov3ci8OtOg159mMB7QZrHYci6X5+rs4spycXWH2MkJ3bbfLQFSTp8HPt+GTVosY/wHDj5iL1fsZDCYduqWluMkSZI0TakTZ05pHz8q7NFiSK9g365t8HpkKMyeFttOUbSGJElSo245xmKxbKUy+x1+AwYdNRoNY2xsbNi/Hj/T+wKsXrseAACzt1f4vx4ds0nh6JTC5fEiTUZjsrK2OqamquJbmqat6Llu8/ifXiJN09aqyvKNdSpljMGgP8rD8ZFOTs4pE2In/6hwcPQHAOzT1WueXYCoseOgqKoRQsPCZQXldUtc3d3TBTaC9ywW872W5qbZOdm3EgmTKYfBYNDPL/AnioFhGIM26HU5N69dfVujbvkHaSWLhULhAndPr/T8UuXSsPBI+4IyFUSN7Xwk2KkA8xa8DzevXcX79ffZLBZLvsUAY2g06pWl94pjg/09kg/s3Wl6kdPhT0JqymFToK9bSnlpSZxWq1mJYRgmkco2ePv6/Xj71g387Xc/6LkANE2D1WqlKJoqNeh1W1QqZfSosKANuTm3mzEMg9MnjveMNfYXR08ESD4MGIZBTnZWc0Ls6xuqK8sn6HUdP9E0XWq1ktTTdp91ui4we1ocHDiSZjl7Ku3LR4ujWo0a/rX8456xBYCQ0DBQKByAIAjeI/84zueJxTgMGToMsrO614w9wqdLFwMAIGVtTVFeTvZHXV0cferCyEMDz7yJT+HgCI0N9ZB8MsPWs1//MQKBcD6O4/0QAhgeHrnbZDLu+q9/fX4+IfaNdgdHJ2hqbOiRn4er113m2yvDYdTJ5zFvRANCCLbv/UVaWFE/OzB4SJrCwTEJ5+OjaBphgBDwcHyUVGafFBwSmlZYUT/np137ZQgh+PS/1/YGvecrAIPBACaTSQEAwh4qz2BgkPjOIgAA7MOlKxyLKhveGxQQmC4WS/ZyuJwgk8mYUlVZMYcgTOUmwlRRU10522gwJLPZnCA7sWRPUHBIemFlw8LQsHAnAMA2bdsDDOwhVQwoAIxmMpn0ow7Rs+CZd4hgGAYsFqvCZDRs1Ok6Mk2ggKyCcqhT1Tov+3TVDB4Pn8PlcgdRFKU1GAw/t2o1ezOv/p7Fx/kCZxfXVQAAhfl5F653XE6LGjsuRCgSJfJxfpydnfingFeCFhVWNOxvbKhLupZzT2UAAH1HRzIg1MRiscqhF1qg3mzDMACAJSs+Q8raGvYXX2/YK7K1nWW1UvUGvT5Z19G+PzXlcEE/b1/SaDA8cSwgEAqgsryMPTE+YbBQJJpjYyNIYDGZTu0d7Yc+/+eyRFc3D/K79Wv/uFvmmdGbGyURwIM1+6NJB6h/ff7V2Y72jrK2ttbkX/bvue/t40c9GhFu2rrniQbm/WMaAACpcHTKKS+9nz9jduJOW1vxVNJiqTiadJD64JPlvRb4/3pqLxrdGQ0+b/zNZoVfPF4K0DduURe/e/7ok3+MMBhMwBgMBBjQAAAYg4Gex7aav60AAABNjQ06k9G449G5VCrrKyp9ij7/29xLvMRL/P/GfwC4DUfXnXWOvwAAAABJRU5ErkJggg==';\nvar DEFAULT_OPACITY_MIN = 0;\nvar DEFAULT_OPACITY_MAX = 1;\n// Mass\nvar DEFAULT_MASS = {\n min: DEFAULT_MASS_MIN,\n max: DEFAULT_MASS_MAX\n};\n// Size\nvar DEFAULT_SIZE = {\n min: DEFAULT_SIZE_MIN,\n max: DEFAULT_SIZE_MAX\n};\n// Opacity\nvar DEFAULT_OPACITY = {\n min: DEFAULT_OPACITY_MIN,\n max: DEFAULT_OPACITY_MAX\n};\n// Sway\nvar DEFAULT_AMPLITUDE = 1.0;\nvar DEFAULT_FREQUENCY = 0.02;\nvar DEFAULT_SWAY = {\n frequency: DEFAULT_FREQUENCY,\n amplitude: DEFAULT_AMPLITUDE\n};\n// Gravity\nvar DEFAULT_GRAVITY_ANGLE = 90;\nvar DEFAULT_GRAVITY_STRENGTH = 0.7;\nvar DEFAULT_GRAVITY = {\n angle: DEFAULT_GRAVITY_ANGLE,\n strength: DEFAULT_GRAVITY_STRENGTH\n};\n// Wind\nvar DEFAULT_WIND_ANGLE = 0;\nvar DEFAULT_WIND_STRENGTH = 0;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN = 1;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX = 3;\nvar DEFAULT_WIND_IN_ADDITIONAL_STRENGTH = {\n min: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN,\n max: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX\n};\nvar DEFAULT_WIND_IN_DURATION_MIN = 1000;\nvar DEFAULT_WIND_IN_DURATION_MAX = 3000;\nvar DEFAULT_WIND_IN_DURATION = {\n min: DEFAULT_WIND_IN_DURATION_MIN,\n max: DEFAULT_WIND_IN_DURATION_MAX\n};\nvar DEFAULT_WIND_IN_DELAY_MIN = 1000;\nvar DEFAULT_WIND_IN_DELAY_MAX = 10000;\nvar DEFAULT_WIND_IN_DELAY = {\n min: DEFAULT_WIND_IN_DELAY_MIN,\n max: DEFAULT_WIND_IN_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DELAY_MIN = 5000;\nvar DEFAULT_WIND_OUT_DELAY_MAX = 10000;\nvar DEFAULT_WIND_OUT_DELAY = {\n min: DEFAULT_WIND_OUT_DELAY_MIN,\n max: DEFAULT_WIND_OUT_DELAY_MAX\n};\nvar DEFAULT_WIND_OUT_DURATION_MAX = 10000;\nvar DEFAULT_WIND_OUT_DURATION_MIN = 1000;\nvar DEFAULT_WIND_OUT_DURATION = {\n min: DEFAULT_WIND_OUT_DURATION_MIN,\n max: DEFAULT_WIND_OUT_DURATION_MAX\n};\nvar DEFAULT_WIND_GUSTS_CHANGE_CHANCE = 0.25;\nvar DEFAULT_WIND_GUSTS_ACTIVE = true;\nvar DEFAULT_WIND_GUSTS_OUT = {\n duration: DEFAULT_WIND_OUT_DURATION,\n delay: DEFAULT_WIND_OUT_DELAY\n};\nvar DEFAULT_WIND_GUSTS_IN = {\n additionalStrength: DEFAULT_WIND_IN_ADDITIONAL_STRENGTH,\n duration: DEFAULT_WIND_IN_DURATION,\n delay: DEFAULT_WIND_IN_DELAY\n};\nvar DEFAULT_WIND_GUSTS = {\n active: DEFAULT_WIND_GUSTS_ACTIVE,\n changeChance: DEFAULT_WIND_GUSTS_CHANGE_CHANCE,\n in: DEFAULT_WIND_GUSTS_IN,\n out: DEFAULT_WIND_GUSTS_OUT\n};\nvar DEFAULT_WIND = {\n angle: DEFAULT_WIND_ANGLE,\n strength: DEFAULT_WIND_STRENGTH,\n gusts: DEFAULT_WIND_GUSTS\n};\nvar BASE_LAYER_CONFIG = {\n density: DEFAULT_DENSITY,\n mass: DEFAULT_MASS,\n size: DEFAULT_SIZE,\n sway: DEFAULT_SWAY,\n gravity: DEFAULT_GRAVITY,\n wind: DEFAULT_WIND,\n opacity: DEFAULT_OPACITY\n};\nvar DEFAULT_SIMPLE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { colour: DEFAULT_SNOW_COLOR, mode: 'simple' });\nvar DEFAULT_IMAGE_LAYER = __assign(__assign({}, BASE_LAYER_CONFIG), { mode: 'image', image: DEFAULT_IMAGE, rotate: DEFAULT_ROTATE });\nvar DEFAULT_LAYERS = [];\nvar DEFAULT_BASE_CONFIG = {\n layers: DEFAULT_LAYERS\n};\nfunction getDefaultConfig() {\n return __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getElementOrThrow)(DEFAULT_CONTAINER_ID) });\n}\nvar DEFAULT_USER_CONFIG = __assign(__assign({}, DEFAULT_BASE_CONFIG), { attachTo: DEFAULT_CONTAINER_ID });\n\n\n//# sourceURL=webpack://snowfall/./src/defaults.ts?");
131
+
132
+ /***/ }),
133
+
134
+ /***/ "./src/index.ts":
135
+ /*!**********************!*\
136
+ !*** ./src/index.ts ***!
137
+ \**********************/
138
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
139
+
140
+ "use strict";
141
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_WIND_STRENGTH),\n/* harmony export */ Types: () => (/* reexport module object */ _types__WEBPACK_IMPORTED_MODULE_1__),\n/* harmony export */ clone: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.clone),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ diff: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.diff),\n/* harmony export */ getDefaultConfig: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.getDefaultConfig),\n/* harmony export */ isSimpleLayer: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.isSimpleLayer),\n/* harmony export */ merge2: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_2__.merge2),\n/* harmony export */ restart: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.restart),\n/* harmony export */ schedule: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.schedule),\n/* harmony export */ setAmplitude: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setAmplitude),\n/* harmony export */ setColour: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setColour),\n/* harmony export */ setDensity: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setDensity),\n/* harmony export */ setFrequency: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setFrequency),\n/* harmony export */ setGravity: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setGravity),\n/* harmony export */ setGravityAngle: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setGravityAngle),\n/* harmony export */ setGravityStrength: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setGravityStrength),\n/* harmony export */ setGusts: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setGusts),\n/* harmony export */ setMassMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setMassMax),\n/* harmony export */ setMassMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setMassMin),\n/* harmony export */ setPaused: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setPaused),\n/* harmony export */ setSizeMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setSizeMax),\n/* harmony export */ setSizeMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setSizeMin),\n/* harmony export */ setWind: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWind),\n/* harmony export */ setWindAngle: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindAngle),\n/* harmony export */ setWindInAdditionalStrengthMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInAdditionalStrengthMax),\n/* harmony export */ setWindInAdditionalStrengthMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInAdditionalStrengthMin),\n/* harmony export */ setWindInDelayMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInDelayMax),\n/* harmony export */ setWindInDelayMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInDelayMin),\n/* harmony export */ setWindInDurationMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInDurationMax),\n/* harmony export */ setWindInDurationMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindInDurationMin),\n/* harmony export */ setWindOutChangeChance: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindOutChangeChance),\n/* harmony export */ setWindOutDelayMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindOutDelayMax),\n/* harmony export */ setWindOutDelayMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindOutDelayMin),\n/* harmony export */ setWindOutDurationMax: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindOutDurationMax),\n/* harmony export */ setWindOutDurationMin: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindOutDurationMin),\n/* harmony export */ setWindStrength: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.setWindStrength),\n/* harmony export */ start: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.start),\n/* harmony export */ stop: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.stop),\n/* harmony export */ togglePaused: () => (/* reexport safe */ _snowfall__WEBPACK_IMPORTED_MODULE_0__.togglePaused)\n/* harmony export */ });\n/* harmony import */ var _snowfall__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./snowfall */ \"./src/snowfall.ts\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ \"./src/types.ts\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_snowfall__WEBPACK_IMPORTED_MODULE_0__);\n\n\n\n\n\n//# sourceURL=webpack://snowfall/./src/index.ts?");
142
+
143
+ /***/ }),
144
+
145
+ /***/ "./src/layers/base-layer.ts":
146
+ /*!**********************************!*\
147
+ !*** ./src/layers/base-layer.ts ***!
148
+ \**********************************/
149
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
150
+
151
+ "use strict";
152
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BaseLayer: () => (/* binding */ BaseLayer)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _snowflake__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../snowflake */ \"./src/snowflake/move.ts\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n\n\n\n\n\nvar BaseLayer = /** @class */ (function () {\n function BaseLayer(config, width, height, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance) {\n var _this = this;\n this.snowflakes = [];\n this.paused = false;\n this.originalConfig = config;\n this.config = config;\n this.width = width;\n this.height = height;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var originalWindStrength = this.config.wind.strength;\n if (this.config.wind.gusts.active) {\n this.fadeWindIn = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: strength } }, durationIn)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.InOut)\n .delay(windDelayIn)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n });\n this.fadeWindOut = new _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Tween(config)\n .to({ wind: { strength: originalWindStrength } }, durationOut)\n .easing(_tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.Easing.Quadratic.Out)\n .delay(windDelayOut)\n .onUpdate(function () {\n _this.setWind(_this.config.wind.angle, _this.config.wind.strength);\n })\n .onComplete(function () {\n if (changeChance < _this.config.wind.gusts.changeChance) {\n var angle = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(_this.windVector.getOpposite(_this.windVector));\n _this.setWindAngle(angle);\n }\n });\n }\n }\n BaseLayer.prototype.setAmplitude = function (num) {\n this.config.sway.amplitude = num;\n };\n BaseLayer.prototype.setFrequency = function (freq) {\n this.config.sway.frequency = freq;\n };\n BaseLayer.prototype.setGravity = function (degrees, strength) {\n this.config.gravity.angle = degrees;\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityAngle = function (degrees) {\n this.config.gravity.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.gravityVector.getLength();\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGravityStrength = function (strength) {\n this.config.gravity.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.gravityVector);\n this.gravityVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.gravityVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setPaused = function (pause) {\n this.paused = pause;\n };\n BaseLayer.prototype.setWind = function (degrees, strength) {\n this.config.wind.angle = degrees;\n this.config.wind.strength = strength;\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindAngle = function (degrees) {\n this.config.wind.angle = degrees;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var strength = this.windVector.getLength();\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setWindStrength = function (strength) {\n this.config.wind.strength = strength;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n var degrees = (0,_math__WEBPACK_IMPORTED_MODULE_2__.getDegreesFromVec2)(this.windVector);\n this.windVector = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(degrees);\n this.windVector.multiplyScalar(strength);\n };\n BaseLayer.prototype.setGusts = function (gusts) {\n this.config.wind.gusts.active = gusts;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n this.restart();\n };\n BaseLayer.prototype.togglePaused = function () {\n this.paused = !this.paused;\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMin = function (min) {\n this.config.wind.gusts.in.additionalStrength.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInAdditionalStrengthMax = function (max) {\n this.config.wind.gusts.in.additionalStrength.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMin = function (min) {\n this.config.wind.gusts.in.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDurationMax = function (max) {\n this.config.wind.gusts.in.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMin = function (min) {\n this.config.wind.gusts.in.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindInDelayMax = function (max) {\n this.config.wind.gusts.in.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMin = function (min) {\n this.config.wind.gusts.out.duration.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDurationMax = function (max) {\n this.config.wind.gusts.out.duration.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMin = function (min) {\n this.config.wind.gusts.out.delay.min = min;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutDelayMax = function (max) {\n this.config.wind.gusts.out.delay.max = max;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.setWindOutChangeChance = function (chance) {\n this.config.wind.gusts.changeChance = chance;\n this.originalConfig = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.clone)(this.config);\n };\n BaseLayer.prototype.update = function (dt) {\n var _this = this;\n if (this.paused) {\n return;\n }\n var _a = this.config, sway = _a.sway, gravity = _a.gravity, wind = _a.wind;\n this.snowflakes.forEach(function (snowflake) {\n snowflake.time += dt;\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addWind)(snowflake, wind.angle, wind.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addRotation)(snowflake);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addGravity)(snowflake, gravity.angle, gravity.strength);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.addSwayMotion)(snowflake, gravity, sway);\n (0,_snowflake__WEBPACK_IMPORTED_MODULE_4__.screenWrap)(snowflake, _this.width, _this.height, gravity);\n });\n };\n BaseLayer.prototype.render = function (gfx) {\n // Nothing to render\n };\n BaseLayer.prototype.start = function () {\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n this.setWind(this.config.wind.angle, this.config.wind.strength);\n this.setGravity(this.config.gravity.angle, this.config.gravity.strength);\n // set up wind gusts\n if (this.config.wind.gusts.active) {\n if (this.fadeWindIn && this.fadeWindOut) {\n this.fadeWindIn.chain(this.fadeWindOut);\n this.fadeWindOut.chain(this.fadeWindIn);\n this.fadeWindIn.start();\n }\n }\n };\n BaseLayer.prototype.pause = function () {\n this.paused = true;\n };\n BaseLayer.prototype.resume = function () {\n this.paused = false;\n };\n BaseLayer.prototype.restart = function () {\n var _a, _b, _c;\n (_a = this.fadeWindIn) === null || _a === void 0 ? void 0 : _a.stopChainedTweens();\n (_b = this.fadeWindOut) === null || _b === void 0 ? void 0 : _b.stopChainedTweens();\n this.setWind(this.originalConfig.wind.angle, this.originalConfig.wind.strength);\n if (this.config.wind.gusts.active) {\n (_c = this.fadeWindIn) === null || _c === void 0 ? void 0 : _c.start();\n }\n this.snowflakes = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.makeSnowflakes)((0,_utils__WEBPACK_IMPORTED_MODULE_3__.requiredSnowflakes)(this.width, this.height, this.config.density), this.config, this.width, this.height);\n };\n BaseLayer.prototype.setDensity = function (density) {\n this.config.density = density;\n this.restart();\n };\n BaseLayer.prototype.setMassMin = function (min) {\n this.config.mass.min = min;\n this.restart();\n };\n BaseLayer.prototype.setMassMax = function (max) {\n this.config.mass.max = max;\n this.restart();\n };\n BaseLayer.prototype.setSizeMin = function (min) {\n this.config.size.min = min;\n this.restart();\n };\n BaseLayer.prototype.setSizeMax = function (max) {\n this.config.size.max = max;\n this.restart();\n };\n return BaseLayer;\n}());\n\n\n\n//# sourceURL=webpack://snowfall/./src/layers/base-layer.ts?");
153
+
154
+ /***/ }),
155
+
156
+ /***/ "./src/layers/image-layer.ts":
157
+ /*!***********************************!*\
158
+ !*** ./src/layers/image-layer.ts ***!
159
+ \***********************************/
160
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
161
+
162
+ "use strict";
163
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ImageLayer: () => (/* binding */ ImageLayer)\n/* harmony export */ });\n/* harmony import */ var _base_layer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base-layer */ \"./src/layers/base-layer.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar ImageLayer = /** @class */ (function (_super) {\n __extends(ImageLayer, _super);\n function ImageLayer(config, width, height, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance) {\n var _this = _super.call(this, config, width, height, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance) || this;\n _this.mode = 'image';\n _this.image = new Image();\n _this.image.src = config.image;\n return _this;\n }\n ImageLayer.prototype.setImage = function (image) {\n throw new Error('Method not implemented.');\n };\n ImageLayer.prototype.render = function (gfx) {\n var _this = this;\n this.snowflakes.forEach(function (flake) {\n var size = flake.renderedSize;\n var offset = size / 2;\n if (_this.config.rotate) {\n gfx.rotation(function () {\n gfx.image(_this.image, {\n x: flake.position.x - offset,\n y: flake.position.y - offset\n }, { width: size, height: size });\n }, flake.rotation, flake.position);\n }\n else {\n gfx.image(_this.image, {\n x: flake.position.x - offset,\n y: flake.position.y - offset\n }, { width: size, height: size });\n }\n });\n };\n return ImageLayer;\n}(_base_layer__WEBPACK_IMPORTED_MODULE_0__.BaseLayer));\n\n\n\n//# sourceURL=webpack://snowfall/./src/layers/image-layer.ts?");
164
+
165
+ /***/ }),
166
+
167
+ /***/ "./src/layers/simple-layer.ts":
168
+ /*!************************************!*\
169
+ !*** ./src/layers/simple-layer.ts ***!
170
+ \************************************/
171
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
172
+
173
+ "use strict";
174
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SimpleLayer: () => (/* binding */ SimpleLayer)\n/* harmony export */ });\n/* harmony import */ var _base_layer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base-layer */ \"./src/layers/base-layer.ts\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar SimpleLayer = /** @class */ (function (_super) {\n __extends(SimpleLayer, _super);\n function SimpleLayer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mode = 'simple';\n return _this;\n }\n SimpleLayer.prototype.setColour = function (colour) {\n throw new Error('Method not implemented.');\n };\n SimpleLayer.prototype.render = function (gfx) {\n var _this = this;\n this.snowflakes.forEach(function (flake) {\n gfx.circle(flake.position, flake.renderedSize, {\n fill: {\n colour: _this.config.colour,\n opacity: flake.opacity\n },\n line: {\n width: 0\n }\n });\n });\n };\n return SimpleLayer;\n}(_base_layer__WEBPACK_IMPORTED_MODULE_0__.BaseLayer));\n\n\n\n//# sourceURL=webpack://snowfall/./src/layers/simple-layer.ts?");
175
+
176
+ /***/ }),
177
+
178
+ /***/ "./src/math.ts":
179
+ /*!*********************!*\
180
+ !*** ./src/math.ts ***!
181
+ \*********************/
182
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
183
+
184
+ "use strict";
185
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getDegreesFromVec2: () => (/* binding */ getDegreesFromVec2),\n/* harmony export */ lerp: () => (/* binding */ lerp),\n/* harmony export */ random: () => (/* binding */ random),\n/* harmony export */ rotate: () => (/* binding */ rotate),\n/* harmony export */ seededRandom: () => (/* binding */ seededRandom)\n/* harmony export */ });\n/* harmony import */ var seedrandom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! seedrandom */ \"./node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/index.js\");\n/* harmony import */ var seedrandom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(seedrandom__WEBPACK_IMPORTED_MODULE_0__);\n\nfunction lerp(start, end, alpha) {\n return start * (1 - alpha) + end * alpha;\n}\nfunction random(from, to) {\n if (arguments.length === 1) {\n to = from;\n from = 0;\n }\n if (from === undefined && to === undefined) {\n return Math.random();\n }\n if (from !== undefined && to !== undefined) {\n return from + Math.random() * (to - from);\n }\n // in practice, this return will never be reached\n return 0;\n}\nfunction seededRandom(from, to) {\n var rng = seedrandom__WEBPACK_IMPORTED_MODULE_0___default()('layer');\n if (from === undefined && to === undefined) {\n return rng();\n }\n if (from !== undefined && to !== undefined) {\n return from + rng() * (to - from);\n }\n return 0;\n}\n// TODO: Move this to Vec2 in Bramble\nfunction getDegreesFromVec2(vec) {\n var radians = Math.atan2(vec.x, vec.y);\n var degrees = radians * (180 / Math.PI);\n return degrees;\n}\n// TODO: Move this to Vec2 in Bramble\nfunction rotate(vec, angleDegrees) {\n var angleRadians = angleDegrees * (Math.PI / 180);\n var cos = Math.cos(angleRadians);\n var sin = Math.sin(angleRadians);\n var newX = vec.x * cos - vec.y * sin;\n var newY = vec.x * sin + vec.y * cos;\n vec.x = newX;\n vec.y = newY;\n return vec;\n}\n\n\n//# sourceURL=webpack://snowfall/./src/math.ts?");
186
+
187
+ /***/ }),
188
+
189
+ /***/ "./src/simulation.ts":
190
+ /*!***************************!*\
191
+ !*** ./src/simulation.ts ***!
192
+ \***************************/
193
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
194
+
195
+ "use strict";
196
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tweenjs/tween.js */ \"./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n/* harmony import */ var _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layers/simple-layer */ \"./src/layers/simple-layer.ts\");\n/* harmony import */ var _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./layers/image-layer */ \"./src/layers/image-layer.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n\n\n\n\n\n\n\nfunction create() {\n var config;\n var layers = [];\n var simulation = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.game.create();\n function commonStart(userConfig) {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n makeLayers();\n }\n function makeLayers() {\n layers = [];\n config.layers.forEach(function (layer) {\n var strength = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.strength + layer.wind.gusts.in.additionalStrength.min, layer.wind.strength + layer.wind.gusts.in.additionalStrength.max);\n var durationIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var windDelayIn = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.in.delay.min, layer.wind.gusts.in.delay.max);\n var durationOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.duration.min, layer.wind.gusts.out.duration.max);\n var windDelayOut = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)(layer.wind.gusts.out.delay.min, layer.wind.gusts.out.delay.max);\n var changeChance = (0,_math__WEBPACK_IMPORTED_MODULE_3__.seededRandom)();\n var newLayer;\n if (layer.mode === 'simple') {\n newLayer = new _layers_simple_layer__WEBPACK_IMPORTED_MODULE_4__.SimpleLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n else if (layer.mode === 'image') {\n newLayer = new _layers_image_layer__WEBPACK_IMPORTED_MODULE_5__.ImageLayer(layer, config.attachTo.offsetWidth, config.attachTo.offsetHeight, strength, durationIn, windDelayIn, durationOut, windDelayOut, changeChance);\n }\n if (newLayer) {\n layers.push(newLayer);\n newLayer.start();\n }\n });\n }\n function start(userConfig) {\n if (userConfig === void 0) { userConfig = {}; }\n commonStart(userConfig);\n if (!config.attachTo) {\n console.error('Unable to start the application, the specified container could not be found.');\n return;\n }\n window.onresize = onResize;\n simulation.attachTo(config.attachTo);\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n simulation.setUpdate(function (dt) { return update(dt); });\n simulation.setRender(function (gfx) { return render(gfx); });\n simulation.start();\n }\n function update(dt) {\n _tweenjs_tween_js__WEBPACK_IMPORTED_MODULE_1__.update();\n layers.forEach(function (layer) {\n layer.update(dt);\n });\n }\n function render(gfx) {\n gfx.clear();\n layers.forEach(function (layer) {\n layer.render(gfx);\n });\n }\n function onResize() {\n layers.forEach(function (layer) {\n layer.width = config.attachTo.offsetWidth;\n layer.height = config.attachTo.offsetHeight;\n layer.restart();\n });\n restart();\n }\n function restart(newConfig) {\n simulation.setSize(config.attachTo.offsetWidth, config.attachTo.offsetHeight);\n if (newConfig) {\n makeLayers();\n }\n else {\n layers.forEach(function (layer) { return layer.restart(); });\n }\n }\n function setColour(col, layer) {\n if (layers[layer].mode === 'simple') {\n layers[layer].setColour(col);\n }\n else {\n console.error('attempting to set a colour on a layer that does not have a colour property');\n }\n }\n function setDensity(den, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setDensity(den);\n }\n function setAmplitude(num, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setAmplitude(num);\n }\n function setFrequency(freq, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setFrequency(freq);\n }\n function setPaused(pause, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setPaused(pause);\n }\n function togglePaused(layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.togglePaused();\n }\n function setWind(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWind(degrees, strength);\n }\n function setWindAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindAngle(degrees);\n }\n function setWindStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindStrength(strength);\n }\n function setGusts(shouldGust, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGusts(shouldGust);\n }\n function setGravity(degrees, strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravity(degrees, strength);\n }\n function setGravityAngle(degrees, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityAngle(degrees);\n }\n function setGravityStrength(strength, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setGravityStrength(strength);\n }\n function setWindInAdditionalStrengthMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMin(min);\n }\n function setWindInAdditionalStrengthMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInAdditionalStrengthMax(max);\n }\n function setWindInDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMin(min);\n }\n function setWindInDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDurationMax(max);\n }\n function setWindInDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMin(min);\n }\n function setWindInDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindInDelayMax(max);\n }\n function setWindOutDurationMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMin(min);\n }\n function setWindOutDurationMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDurationMax(max);\n }\n function setWindOutDelayMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMin(min);\n }\n function setWindOutDelayMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutDelayMax(max);\n }\n function setWindOutChangeChance(chance, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setWindOutChangeChance(chance);\n }\n function setMassMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMin(min);\n }\n function setMassMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setMassMax(max);\n }\n function setSizeMin(min, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMin(min);\n }\n function setSizeMax(max, layer) {\n var _a;\n (_a = layers[layer]) === null || _a === void 0 ? void 0 : _a.setSizeMax(max);\n }\n return {\n start: start,\n setAmplitude: setAmplitude,\n setDensity: setDensity,\n setFrequency: setFrequency,\n setGravity: setGravity,\n setGravityAngle: setGravityAngle,\n setGravityStrength: setGravityStrength,\n setPaused: setPaused,\n setWind: setWind,\n setWindAngle: setWindAngle,\n setWindStrength: setWindStrength,\n setGusts: setGusts,\n togglePaused: togglePaused,\n setWindInAdditionalStrengthMin: setWindInAdditionalStrengthMin,\n setWindInAdditionalStrengthMax: setWindInAdditionalStrengthMax,\n setWindInDurationMin: setWindInDurationMin,\n setWindInDurationMax: setWindInDurationMax,\n setWindInDelayMin: setWindInDelayMin,\n setWindInDelayMax: setWindInDelayMax,\n setWindOutDurationMin: setWindOutDurationMin,\n setWindOutDurationMax: setWindOutDurationMax,\n setWindOutDelayMin: setWindOutDelayMin,\n setWindOutDelayMax: setWindOutDelayMax,\n setWindOutChangeChance: setWindOutChangeChance,\n setColour: setColour,\n setMassMin: setMassMin,\n setMassMax: setMassMax,\n setSizeMin: setSizeMin,\n setSizeMax: setSizeMax,\n restart: function (userConfig) {\n var config = userConfig ? (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(userConfig) : userConfig;\n restart(config);\n },\n stop: function () {\n config = (0,_config__WEBPACK_IMPORTED_MODULE_2__.merge)(_defaults__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_USER_CONFIG); // prbably best to wipe the user settings here\n layers = [];\n // simulation.stop()\n simulation.canvas.remove();\n }\n };\n}\n\n\n//# sourceURL=webpack://snowfall/./src/simulation.ts?");
197
+
198
+ /***/ }),
199
+
200
+ /***/ "./src/snowfall.ts":
201
+ /*!*************************!*\
202
+ !*** ./src/snowfall.ts ***!
203
+ \*************************/
204
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
205
+
206
+ "use strict";
207
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BASE_LAYER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.BASE_LAYER_CONFIG),\n/* harmony export */ DEFAULT_AMPLITUDE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_AMPLITUDE),\n/* harmony export */ DEFAULT_BASE_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_BASE_CONFIG),\n/* harmony export */ DEFAULT_CONTAINER_ID: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CONTAINER_ID),\n/* harmony export */ DEFAULT_DENSITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_DENSITY),\n/* harmony export */ DEFAULT_FREQUENCY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FREQUENCY),\n/* harmony export */ DEFAULT_GRAVITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY),\n/* harmony export */ DEFAULT_GRAVITY_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_ANGLE),\n/* harmony export */ DEFAULT_GRAVITY_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_GRAVITY_STRENGTH),\n/* harmony export */ DEFAULT_IMAGE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE),\n/* harmony export */ DEFAULT_IMAGE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_IMAGE_LAYER),\n/* harmony export */ DEFAULT_LAYERS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_LAYERS),\n/* harmony export */ DEFAULT_MASS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS),\n/* harmony export */ DEFAULT_MASS_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MAX),\n/* harmony export */ DEFAULT_MASS_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MASS_MIN),\n/* harmony export */ DEFAULT_MODE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODE),\n/* harmony export */ DEFAULT_OPACITY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY),\n/* harmony export */ DEFAULT_OPACITY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MAX),\n/* harmony export */ DEFAULT_OPACITY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_OPACITY_MIN),\n/* harmony export */ DEFAULT_ROTATE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_ROTATE),\n/* harmony export */ DEFAULT_SIMPLE_LAYER: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIMPLE_LAYER),\n/* harmony export */ DEFAULT_SIZE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE),\n/* harmony export */ DEFAULT_SIZE_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MAX),\n/* harmony export */ DEFAULT_SIZE_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SIZE_MIN),\n/* harmony export */ DEFAULT_SNOW_COLOR: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SNOW_COLOR),\n/* harmony export */ DEFAULT_SWAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_SWAY),\n/* harmony export */ DEFAULT_USER_CONFIG: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_USER_CONFIG),\n/* harmony export */ DEFAULT_WIND: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND),\n/* harmony export */ DEFAULT_WIND_ANGLE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_ANGLE),\n/* harmony export */ DEFAULT_WIND_GUSTS: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS),\n/* harmony export */ DEFAULT_WIND_GUSTS_ACTIVE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_ACTIVE),\n/* harmony export */ DEFAULT_WIND_GUSTS_CHANGE_CHANCE: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_CHANGE_CHANCE),\n/* harmony export */ DEFAULT_WIND_GUSTS_IN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_IN),\n/* harmony export */ DEFAULT_WIND_GUSTS_OUT: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_GUSTS_OUT),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MAX),\n/* harmony export */ DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_ADDITIONAL_STRENGTH_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_IN_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_IN_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_IN_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DELAY_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DELAY_MIN),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MAX: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MAX),\n/* harmony export */ DEFAULT_WIND_OUT_DURATION_MIN: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_OUT_DURATION_MIN),\n/* harmony export */ DEFAULT_WIND_STRENGTH: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_WIND_STRENGTH),\n/* harmony export */ clone: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.clone),\n/* harmony export */ diff: () => (/* reexport safe */ _config__WEBPACK_IMPORTED_MODULE_2__.diff),\n/* harmony export */ getDefaultConfig: () => (/* reexport safe */ _defaults__WEBPACK_IMPORTED_MODULE_3__.getDefaultConfig),\n/* harmony export */ isSimpleLayer: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.isSimpleLayer),\n/* harmony export */ restart: () => (/* binding */ restart),\n/* harmony export */ schedule: () => (/* binding */ schedule),\n/* harmony export */ setAmplitude: () => (/* binding */ setAmplitude),\n/* harmony export */ setColour: () => (/* binding */ setColour),\n/* harmony export */ setDensity: () => (/* binding */ setDensity),\n/* harmony export */ setFrequency: () => (/* binding */ setFrequency),\n/* harmony export */ setGravity: () => (/* binding */ setGravity),\n/* harmony export */ setGravityAngle: () => (/* binding */ setGravityAngle),\n/* harmony export */ setGravityStrength: () => (/* binding */ setGravityStrength),\n/* harmony export */ setGusts: () => (/* binding */ setGusts),\n/* harmony export */ setMassMax: () => (/* binding */ setMassMax),\n/* harmony export */ setMassMin: () => (/* binding */ setMassMin),\n/* harmony export */ setPaused: () => (/* binding */ setPaused),\n/* harmony export */ setSizeMax: () => (/* binding */ setSizeMax),\n/* harmony export */ setSizeMin: () => (/* binding */ setSizeMin),\n/* harmony export */ setWind: () => (/* binding */ setWind),\n/* harmony export */ setWindAngle: () => (/* binding */ setWindAngle),\n/* harmony export */ setWindInAdditionalStrengthMax: () => (/* binding */ setWindInAdditionalStrengthMax),\n/* harmony export */ setWindInAdditionalStrengthMin: () => (/* binding */ setWindInAdditionalStrengthMin),\n/* harmony export */ setWindInDelayMax: () => (/* binding */ setWindInDelayMax),\n/* harmony export */ setWindInDelayMin: () => (/* binding */ setWindInDelayMin),\n/* harmony export */ setWindInDurationMax: () => (/* binding */ setWindInDurationMax),\n/* harmony export */ setWindInDurationMin: () => (/* binding */ setWindInDurationMin),\n/* harmony export */ setWindOutChangeChance: () => (/* binding */ setWindOutChangeChance),\n/* harmony export */ setWindOutDelayMax: () => (/* binding */ setWindOutDelayMax),\n/* harmony export */ setWindOutDelayMin: () => (/* binding */ setWindOutDelayMin),\n/* harmony export */ setWindOutDurationMax: () => (/* binding */ setWindOutDurationMax),\n/* harmony export */ setWindOutDurationMin: () => (/* binding */ setWindOutDurationMin),\n/* harmony export */ setWindStrength: () => (/* binding */ setWindStrength),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ stop: () => (/* binding */ stop),\n/* harmony export */ togglePaused: () => (/* binding */ togglePaused)\n/* harmony export */ });\n/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simulation */ \"./src/simulation.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config */ \"./src/config.ts\");\n/* harmony import */ var _defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./defaults */ \"./src/defaults.ts\");\n/**\n * @module snowfall\n *\n * Lightweight, high-performance snowfall effect for the web.\n * Fully configurable, supports multiple layers, wind, gusts, and scheduled activation.\n *\n * Stay cool ☃️\n */\n\n\nvar simulation;\nfunction ensureRunning() {\n if (!simulation) {\n throw new Error('Snowfall simulation not started. Call snowfall.start() first.');\n }\n}\n/**\n * Starts the Snowfall simulation.\n *\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction start(config) {\n if (config === void 0) { config = {}; }\n try {\n if (!simulation) {\n simulation = _simulation__WEBPACK_IMPORTED_MODULE_0__.create();\n }\n simulation.start(config);\n }\n catch (error) {\n console.error(error);\n }\n}\nfunction restart(config) {\n if (config === void 0) { config = {}; }\n stop();\n start(config);\n}\nfunction stop() {\n simulation === null || simulation === void 0 ? void 0 : simulation.stop();\n simulation = undefined;\n}\n/**\n * Starts the Snowfall simulation when today's date falls within the date range in the schedule.\n *\n * @param {UserSchedule} userSchedule - A schedule config, defining when the simulation should run from, and when the simulation should run to.\n * @param {UserConfig} [config] - A config, possibly from the [Visual Config Editor](https://erikwatson.github.io/snowfall-editor/).\n */\nfunction schedule(userSchedule, config) {\n if (config === void 0) { config = {}; }\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.withinSchedule)(userSchedule)) {\n stop();\n start(config);\n }\n}\n/**\n * Set the colour of the Snowflakes\n * @param {string} colour - The colour to set\n * @param {number} layer - The layer to set the colour for\n */\nfunction setColour(colour, layer) {\n ensureRunning();\n simulation.setColour(colour, layer);\n}\n/**\n * Set the density of the Snowflakes. This is the number of snowflakes on screen\n * at a resolution of 1280 x 1080, but this number is scaled up and down at\n * higher and lower resolutions respectively to give a consistent look when\n * resizing.\n *\n * Setting this restarts the simulation.\n *\n * @param {number} density - A number representing the density of snowflakes.\n * @param {number} layer - The layer to set the density for\n */\nfunction setDensity(density, layer) {\n ensureRunning();\n simulation.setDensity(density, layer);\n}\n/**\n * Set the Amplitude of the sway of the Snowflakes\n *\n * @param {number} amplitude - The Amplitude to set\n * @param {number} layer - The layer to set the amplitude for\n */\nfunction setAmplitude(amplitude, layer) {\n ensureRunning();\n simulation.setAmplitude(amplitude, layer);\n}\n/**\n * Set the Frequency of the sway of the Snowflakes.\n *\n * @param {number} frequency - The frequency to set\n * @param {number} layer - The layer to set the frequency for\n */\nfunction setFrequency(frequency, layer) {\n ensureRunning();\n simulation.setFrequency(frequency, layer);\n}\n/**\n * Pauses or resumes a specific layer.\n *\n * @param {boolean} pause - Pass true to pause the layer, false to resume\n * @param {number} layer - The layer index\n */\nfunction setPaused(pause, layer) {\n ensureRunning();\n simulation.setPaused(pause, layer);\n}\n/**\n * Pause/unpause the snowfall update loop for a specific layer.\n *\n * @param layer - The layer index to toggle\n */\nfunction togglePaused(layer) {\n ensureRunning();\n simulation.togglePaused(layer);\n}\n/**\n * Set the angle and strength of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to set the wind for\n */\nfunction setWind(angle, strength, layer) {\n ensureRunning();\n simulation.setWind(angle, strength, layer);\n}\n/**\n * Set the angle of the wind in the simulation.\n *\n * @param {number} angle - The angle of the wind, in degrees\n * @param {number} layer - The layer to set the wind angle for\n */\nfunction setWindAngle(angle, layer) {\n ensureRunning();\n simulation.setWindAngle(angle, layer);\n}\n/**\n * Set the strength of the wind in the simulation.\n *\n * @param {number} strength - The strength of the wind\n * @param {number} layer - The layer to apply the wind strength to\n */\nfunction setWindStrength(strength, layer) {\n ensureRunning();\n simulation.setWindStrength(strength, layer);\n}\n/**\n * Set the wind gusts in the simulation.\n * This restarts the simulation.\n *\n * @param {boolean} gusts - Should there be gusts in the wind?\n * @param {number} layer - The layer to set the gusts for\n */\nfunction setGusts(gusts, layer) {\n ensureRunning();\n simulation.setGusts(gusts, layer);\n}\n/**\n * Set the angle and strength of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity for\n */\nfunction setGravity(angle, strength, layer) {\n ensureRunning();\n simulation.setGravity(angle, strength, layer);\n}\n/**\n * Set the angle of gravity in the simulation.\n *\n * @param {number} angle - The angle of gravity, in degrees\n * @param {number} layer - The layer to set the gravity angle for\n */\nfunction setGravityAngle(angle, layer) {\n ensureRunning();\n simulation.setGravityAngle(angle, layer);\n}\n/**\n * Set the strength of gravity in the simulation.\n *\n * @param {number} strength - The strength of the gravity\n * @param {number} layer - The layer to set the gravity strength for\n */\nfunction setGravityStrength(strength, layer) {\n ensureRunning();\n simulation.setGravityStrength(strength, layer);\n}\n/**\n * Set the minimum additional strength of the wind when it's coming in.\n *\n * @param {number} min - The minimum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength min for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMin(min, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMin(min, layer);\n}\n/**\n * Set the maximum additional strength of the wind when it's coming in.\n *\n * @param {number} max - The maximum additional strength of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in additional strength max for\n * @returns {void}\n */\nfunction setWindInAdditionalStrengthMax(max, layer) {\n ensureRunning();\n simulation.setWindInAdditionalStrengthMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's coming in.\n *\n * @param {number} min - The minimum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration min for\n * @returns {void}\n */\nfunction setWindInDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindInDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's coming in.\n *\n * @param {number} max - The maximum duration of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in duration max for\n * @returns {void}\n */\nfunction setWindInDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindInDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's coming in.\n *\n * @param {number} min - The minimum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay min for\n * @returns {void}\n */\nfunction setWindInDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindInDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's coming in.\n *\n * @param {number} max - The maximum delay of the wind when it's coming in.\n * @param {number} layer - The layer to set the wind in delay max for\n * @returns {void}\n */\nfunction setWindInDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindInDelayMax(max, layer);\n}\n/**\n * Set the minimum duration of the wind when it's going out.\n *\n * @param {number} min - The minimum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration min for\n * @returns {void}\n */\nfunction setWindOutDurationMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDurationMin(min, layer);\n}\n/**\n * Set the maximum duration of the wind when it's going out.\n *\n * @param {number} max - The maximum duration of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out duration max for\n * @returns {void}\n */\nfunction setWindOutDurationMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDurationMax(max, layer);\n}\n/**\n * Set the minimum delay of the wind when it's going out.\n *\n * @param {number} min - The minimum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay min for\n * @returns {void}\n */\nfunction setWindOutDelayMin(min, layer) {\n ensureRunning();\n simulation.setWindOutDelayMin(min, layer);\n}\n/**\n * Set the maximum delay of the wind when it's going out.\n *\n * @param {number} max - The maximum delay of the wind when it's going out.\n * @param {number} layer - The layer to set the wind out delay max for\n * @returns {void}\n */\nfunction setWindOutDelayMax(max, layer) {\n ensureRunning();\n simulation.setWindOutDelayMax(max, layer);\n}\n/**\n * Set the chance of the wind changing direction after a gust.\n *\n * @param {number} chance - The chance of the wind changing direction after a gust.\n * @param {number} layer - The layer to set the wind out change chance for\n * @returns {void}\n */\nfunction setWindOutChangeChance(chance, layer) {\n ensureRunning();\n simulation.setWindOutChangeChance(chance, layer);\n}\n/**\n * Set the minimum mass of the snowflakes.\n *\n * @param {number} min - The minimum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass min for\n */\nfunction setMassMin(min, layer) {\n ensureRunning();\n simulation.setMassMin(min, layer);\n}\n/**\n * Set the maximum mass of the snowflakes.\n *\n * @param {number} max - The maximum mass of the snowflakes.\n * @param {number} layer - The layer to set the mass max for\n */\nfunction setMassMax(max, layer) {\n ensureRunning();\n simulation.setMassMax(max, layer);\n}\n/**\n * Set the minimum size of the snowflakes.\n *\n * @param {number} min - The minimum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size min for\n */\nfunction setSizeMin(min, layer) {\n ensureRunning();\n simulation.setSizeMin(min, layer);\n}\n/**\n * Set the maximum size of the snowflakes.\n *\n * @param {number} max - The maximum rendered size of the snowflakes.\n * @param {number} layer - The layer to set the rendered size max for\n */\nfunction setSizeMax(max, layer) {\n ensureRunning();\n simulation.setSizeMax(max, layer);\n}\n\n\n\n\n\n\n//# sourceURL=webpack://snowfall/./src/snowfall.ts?");
208
+
209
+ /***/ }),
210
+
211
+ /***/ "./src/snowflake/move.ts":
212
+ /*!*******************************!*\
213
+ !*** ./src/snowflake/move.ts ***!
214
+ \*******************************/
215
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
216
+
217
+ "use strict";
218
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addGravity: () => (/* binding */ addGravity),\n/* harmony export */ addRotation: () => (/* binding */ addRotation),\n/* harmony export */ addSwayMotion: () => (/* binding */ addSwayMotion),\n/* harmony export */ addWind: () => (/* binding */ addWind),\n/* harmony export */ fadeIn: () => (/* binding */ fadeIn),\n/* harmony export */ screenWrap: () => (/* binding */ screenWrap)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ \"./src/math.ts\");\n\n\nfunction addWind(snowflake, angle, strength) {\n var w = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var windVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n windVec.multiplyScalar(strength);\n w.x = windVec.x;\n w.y = windVec.y;\n w.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(w);\n}\nfunction addRotation(snowflake) {\n snowflake.rotation++;\n}\nfunction addGravity(snowflake, angle, strength) {\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(0, 0);\n var gravityVec = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(angle);\n gravityVec.multiplyScalar(strength);\n g.x = gravityVec.x;\n g.y = gravityVec.y;\n g.multiplyScalar(snowflake.mass + snowflake.random);\n snowflake.position.add(g);\n}\nfunction addSwayMotion(snowflake, gravity, sway) {\n // Calculate the sway motion perpendicular to the gravity vector\n var phase = snowflake.time + snowflake.noise;\n var xPos = sway.amplitude * Math.sin(sway.frequency * snowflake.time + phase);\n // Assuming gravity direction starts along the x-axis\n var g = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(1, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(g, gravity.angle);\n // Rotate the sine sway vector by the perpendicular vector's angle\n var sine = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(xPos, 0);\n (0,_math__WEBPACK_IMPORTED_MODULE_1__.rotate)(sine, gravity.angle + 90);\n snowflake.position.add(sine);\n}\nfunction fadeIn(snowflake) {\n if (snowflake.renderedSize < snowflake.mass) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.mass, 0.025);\n }\n}\n// Is the snowflake visible on screen right now?\nfunction isVisible(snowflake, screenWidth, screenHeight) {\n var size = snowflake.size; // ideally the diagonal length of a square of our size\n var inBoundsHorizontal = snowflake.position.x + size >= 0 &&\n snowflake.position.x - size <= screenWidth;\n var inBoundsVertical = snowflake.position.y + size >= 0 &&\n snowflake.position.y - size <= screenHeight;\n return inBoundsHorizontal && inBoundsVertical;\n}\nfunction grow(snowflake, gravity, prevPos) {\n var currentPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n var delta = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(currentPos);\n delta.subtract(prevPos);\n var gravityDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.fromDegrees(gravity.angle);\n var upDir = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(-gravityDir.x, -gravityDir.y);\n var dotProduct = delta.dot(upDir);\n if (dotProduct > 0) {\n snowflake.renderedSize = (0,_math__WEBPACK_IMPORTED_MODULE_1__.lerp)(snowflake.renderedSize, snowflake.size, 0.25);\n }\n}\nfunction moveToTop(snowflake, screenWidth) {\n snowflake.position.y = -snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToBottom(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = screenHeight + snowflake.size;\n snowflake.position.x = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenWidth); // deterministic x\n}\nfunction moveToLeft(snowflake, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = -snowflake.size;\n}\nfunction moveToRight(snowflake, screenWidth, screenHeight) {\n snowflake.position.y = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(screenHeight); // deterministic y\n snowflake.position.x = screenWidth + snowflake.size;\n}\nfunction moveRandom(snowflake, screenWidth, screenHeight, gravity, prevPos) {\n // Determine the side moved from (exit side)\n var from_side;\n if (snowflake.position.y > screenHeight)\n from_side = 'bottom';\n else if (snowflake.position.y < 0)\n from_side = 'top';\n else if (snowflake.position.x < 0)\n from_side = 'left';\n else if (snowflake.position.x > screenWidth)\n from_side = 'right';\n else\n from_side = 'bottom';\n // Compute velocity\n var vel = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(snowflake.position.x - prevPos.x, snowflake.position.y - prevPos.y);\n // Determine moving directions\n var moving_in = [];\n if (vel.x > 0)\n moving_in.push('right');\n if (vel.x < 0)\n moving_in.push('left');\n if (vel.y > 0)\n moving_in.push('bottom');\n if (vel.y < 0)\n moving_in.push('top');\n // Possible sides to move to\n var sides = ['top', 'bottom', 'left', 'right'].filter(function (s) { return s !== from_side && !moving_in.includes(s); });\n // Choose side using seededRandom\n var chosen = sides[Math.floor((0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(0, sides.length))];\n var opposites = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n var up_side = opposites[from_side];\n // Move to chosen side\n if (chosen === 'top')\n moveToTop(snowflake, screenWidth);\n else if (chosen === 'bottom')\n moveToBottom(snowflake, screenWidth, screenHeight);\n else if (chosen === 'left')\n moveToLeft(snowflake, screenHeight);\n else if (chosen === 'right')\n moveToRight(snowflake, screenWidth, screenHeight);\n // Grow if moving to the \"up\" side\n if (chosen === up_side)\n grow(snowflake, gravity, prevPos);\n}\nfunction screenWrap(snowflake, width, height, gravity) {\n var prevPos = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.clone(snowflake.position);\n if (!isVisible(snowflake, width, height)) {\n moveRandom(snowflake, width, height, gravity, prevPos);\n }\n}\n\n\n//# sourceURL=webpack://snowfall/./src/snowflake/move.ts?");
219
+
220
+ /***/ }),
221
+
222
+ /***/ "./src/types.ts":
223
+ /*!**********************!*\
224
+ !*** ./src/types.ts ***!
225
+ \**********************/
226
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
227
+
228
+ "use strict";
229
+ eval("__webpack_require__.r(__webpack_exports__);\n\n\n\n//# sourceURL=webpack://snowfall/./src/types.ts?");
230
+
231
+ /***/ }),
232
+
233
+ /***/ "./src/utils.ts":
234
+ /*!**********************!*\
235
+ !*** ./src/utils.ts ***!
236
+ \**********************/
237
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
238
+
239
+ "use strict";
240
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clone: () => (/* binding */ clone),\n/* harmony export */ getElementOrThrow: () => (/* binding */ getElementOrThrow),\n/* harmony export */ isSimpleLayer: () => (/* binding */ isSimpleLayer),\n/* harmony export */ makeSnowflakes: () => (/* binding */ makeSnowflakes),\n/* harmony export */ requiredSnowflakes: () => (/* binding */ requiredSnowflakes),\n/* harmony export */ withinSchedule: () => (/* binding */ withinSchedule)\n/* harmony export */ });\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @erikwatson/bramble */ \"./node_modules/.pnpm/@erikwatson+bramble@0.8.0/node_modules/@erikwatson/bramble/dist/bramble.js\");\n/* harmony import */ var _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ \"./src/math.ts\");\n\n\nfunction getElementOrThrow(id) {\n var result = document.getElementById(id);\n if (!result) {\n throw new Error(\"Error: Element #\".concat(id, \" not found.\"));\n }\n return result;\n}\nfunction withinSchedule(schedule) {\n // Input validation\n var maxDaysPerMonth = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (schedule.from.month < 1 ||\n schedule.from.month > 12 ||\n schedule.from.day < 1 ||\n schedule.from.day > maxDaysPerMonth[schedule.from.month] ||\n schedule.to.month < 1 ||\n schedule.to.month > 12 ||\n schedule.to.day < 1 ||\n schedule.to.day > maxDaysPerMonth[schedule.to.month]) {\n throw new Error('Invalid date in schedule');\n }\n var today = new Date();\n var todayMonth = today.getUTCMonth() + 1;\n var todayDay = today.getUTCDate();\n var todayMD = todayMonth * 100 + todayDay;\n var fromMD = schedule.from.month * 100 + schedule.from.day;\n var toMD = schedule.to.month * 100 + schedule.to.day;\n var shouldStart;\n if (fromMD <= toMD) {\n shouldStart = todayMD >= fromMD && todayMD <= toMD;\n }\n else {\n shouldStart = todayMD >= fromMD || todayMD <= toMD;\n }\n return shouldStart;\n}\n// This function figures out how many snowflakes we should use for our given\n// canvas size.\n//\n// Just setting a fixed number of snowflakes would give an uneven distribution\n// of snowflakes across different screen sizes, for example.\nfunction requiredSnowflakes(width, height, density) {\n var tenEightyPee = 1920 * 1080;\n var thisScreen = width * height;\n var snowflakeCount = Math.round(density * (thisScreen / tenEightyPee));\n return snowflakeCount;\n}\nfunction clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\nfunction makeSnowflakes(num, config, width, height) {\n var result = Array.from({ length: num }, function () {\n var posX = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(width);\n var posY = (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(height);\n var position = _erikwatson_bramble__WEBPACK_IMPORTED_MODULE_0__.vec2.create(posX, posY);\n var size = config.size.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.size.max - config.mass.min);\n return {\n position: position,\n // size: 3 + random() * 5,\n // size: 1 + random() * 2,\n mass: config.mass.min + (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)() * (config.mass.max - config.mass.min),\n size: size,\n renderedSize: size,\n noise: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(10), // Random value, just to add some uncertainty\n amplitude: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.amplitude),\n frequency: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.sway.frequency),\n random: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(),\n rotation: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(360),\n time: 0,\n opacity: (0,_math__WEBPACK_IMPORTED_MODULE_1__.random)(config.opacity.min, config.opacity.max)\n };\n });\n return result;\n}\nfunction isSimpleLayer(layer) {\n return layer.mode === 'simple' || layer.mode === undefined;\n}\n\n\n//# sourceURL=webpack://snowfall/./src/utils.ts?");
241
+
242
+ /***/ }),
243
+
244
+ /***/ "?69c0":
245
+ /*!************************!*\
246
+ !*** crypto (ignored) ***!
247
+ \************************/
248
+ /***/ (() => {
249
+
250
+ eval("/* (ignored) */\n\n//# sourceURL=webpack://snowfall/crypto_(ignored)?");
251
+
252
+ /***/ }),
253
+
254
+ /***/ "./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js":
255
+ /*!******************************************************************************************************!*\
256
+ !*** ./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js ***!
257
+ \******************************************************************************************************/
258
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
259
+
260
+ "use strict";
261
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Easing: () => (/* binding */ Easing),\n/* harmony export */ Group: () => (/* binding */ Group),\n/* harmony export */ Interpolation: () => (/* binding */ Interpolation),\n/* harmony export */ Sequence: () => (/* binding */ Sequence),\n/* harmony export */ Tween: () => (/* binding */ Tween),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ add: () => (/* binding */ add),\n/* harmony export */ \"default\": () => (/* binding */ exports),\n/* harmony export */ getAll: () => (/* binding */ getAll),\n/* harmony export */ nextId: () => (/* binding */ nextId),\n/* harmony export */ now: () => (/* binding */ now),\n/* harmony export */ remove: () => (/* binding */ remove),\n/* harmony export */ removeAll: () => (/* binding */ removeAll),\n/* harmony export */ update: () => (/* binding */ update)\n/* harmony export */ });\n/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = Object.freeze({\n Linear: Object.freeze({\n None: function (amount) {\n return amount;\n },\n In: function (amount) {\n return amount;\n },\n Out: function (amount) {\n return amount;\n },\n InOut: function (amount) {\n return amount;\n },\n }),\n Quadratic: Object.freeze({\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n },\n }),\n Cubic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n },\n }),\n Quartic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n },\n }),\n Quintic: Object.freeze({\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n },\n }),\n Sinusoidal: Object.freeze({\n In: function (amount) {\n return 1 - Math.sin(((1.0 - amount) * Math.PI) / 2);\n },\n Out: function (amount) {\n return Math.sin((amount * Math.PI) / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.sin(Math.PI * (0.5 - amount)));\n },\n }),\n Exponential: Object.freeze({\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n },\n }),\n Circular: Object.freeze({\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n },\n }),\n Elastic: Object.freeze({\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n },\n }),\n Back: Object.freeze({\n In: function (amount) {\n var s = 1.70158;\n return amount === 1 ? 1 : amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return amount === 0 ? 0 : --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n },\n }),\n Bounce: Object.freeze({\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n }\n else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n }\n else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n }\n else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n },\n }),\n generatePow: function (power) {\n if (power === void 0) { power = 4; }\n power = power < Number.EPSILON ? Number.EPSILON : power;\n power = power > 10000 ? 10000 : power;\n return {\n In: function (amount) {\n return Math.pow(amount, power);\n },\n Out: function (amount) {\n return 1 - Math.pow((1 - amount), power);\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Math.pow((amount * 2), power) / 2;\n }\n return (1 - Math.pow((2 - amount * 2), power)) / 2 + 0.5;\n },\n };\n },\n});\n\nvar now = function () { return performance.now(); };\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) { time = now(); }\n if (preserve === void 0) { preserve = false; }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor((f = m * (1 + k)));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n }\n else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: (function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n })(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n },\n },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n function Sequence() {\n }\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n function Tween(_object, _group) {\n if (_group === void 0) { _group = mainGroup; }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._isDynamic = false;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n // eslint-disable-next-line\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._propertiesAreSetUp = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.getDuration = function () {\n return this._duration;\n };\n Tween.prototype.to = function (target, duration) {\n if (duration === void 0) { duration = 1000; }\n if (this._isPlaying)\n throw new Error('Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.');\n this._valuesEnd = target;\n this._propertiesAreSetUp = false;\n this._duration = duration < 0 ? 0 : duration;\n return this;\n };\n Tween.prototype.duration = function (duration) {\n if (duration === void 0) { duration = 1000; }\n this._duration = duration < 0 ? 0 : duration;\n return this;\n };\n Tween.prototype.dynamic = function (dynamic) {\n if (dynamic === void 0) { dynamic = false; }\n this._isDynamic = dynamic;\n return this;\n };\n Tween.prototype.start = function (time, overrideStartingValues) {\n if (time === void 0) { time = now(); }\n if (overrideStartingValues === void 0) { overrideStartingValues = false; }\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._onEveryStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time;\n this._startTime += this._delayTime;\n if (!this._propertiesAreSetUp || overrideStartingValues) {\n this._propertiesAreSetUp = true;\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in this._valuesEnd)\n tmp[prop] = this._valuesEnd[prop];\n this._valuesEnd = tmp;\n }\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat, overrideStartingValues);\n }\n return this;\n };\n Tween.prototype.startFromCurrentValues = function (time) {\n return this.start(time, true);\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat, overrideStartingValues) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // Handle an array of relative values.\n // Creates a local copy of the Array with the start value at the front\n var temp = [startValue];\n for (var i = 0, l = endValues.length; i < l; i += 1) {\n var value = this._handleRelativeValue(startValue, endValues[i]);\n if (isNaN(value)) {\n isInterpolationList = false;\n console.warn('Found invalid interpolation list. Skipping.');\n break;\n }\n temp.push(value);\n }\n if (isInterpolationList) {\n // if (_valuesStart[property] === undefined) { // handle end values only the first time. NOT NEEDED? setupProperties is now guarded by _propertiesAreSetUp.\n _valuesEnd[property] = temp;\n // }\n }\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n var nestedObject = startValue;\n for (var prop in nestedObject) {\n _valuesStart[property][prop] = nestedObject[prop];\n }\n // TODO? repeat nested values? And yoyo? And array values?\n _valuesStartRepeat[property] = startValueIsArray ? [] : {};\n var endValues = _valuesEnd[property];\n // If dynamic is not enabled, clone the end values instead of using the passed-in end values.\n if (!this._isDynamic) {\n var tmp = {};\n for (var prop in endValues)\n tmp[prop] = endValues[prop];\n _valuesEnd[property] = endValues = tmp;\n }\n this._setupProperties(nestedObject, _valuesStart[property], endValues, _valuesStartRepeat[property], overrideStartingValues);\n }\n else {\n // Save the starting value, but only once unless override is requested.\n if (typeof _valuesStart[property] === 'undefined' || overrideStartingValues) {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n }\n else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) { time = now(); }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) { time = now(); }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n if (group === void 0) { group = mainGroup; }\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n if (amount === void 0) { amount = 0; }\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n if (times === void 0) { times = 0; }\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n if (yoyo === void 0) { yoyo = false; }\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n if (easingFunction === void 0) { easingFunction = Easing.Linear.None; }\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n if (interpolationFunction === void 0) { interpolationFunction = Interpolation.Linear; }\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n // eslint-disable-next-line\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onEveryStart = function (callback) {\n this._onEveryStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n var _this = this;\n var _a;\n if (time === void 0) { time = now(); }\n if (autoStart === void 0) { autoStart = true; }\n if (this._isPaused)\n return true;\n var property;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime)\n return false;\n if (autoStart)\n this.start(time, true);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n if (this._onEveryStartCallbackFired === false) {\n if (this._onEveryStartCallback) {\n this._onEveryStartCallback(this._object);\n }\n this._onEveryStartCallbackFired = true;\n }\n var elapsedTime = time - this._startTime;\n var durationAndDelay = this._duration + ((_a = this._repeatDelayTime) !== null && _a !== void 0 ? _a : this._delayTime);\n var totalTime = this._duration + this._repeat * durationAndDelay;\n var calculateElapsedPortion = function () {\n if (_this._duration === 0)\n return 1;\n if (elapsedTime > totalTime) {\n return 1;\n }\n var timesRepeated = Math.trunc(elapsedTime / durationAndDelay);\n var timeIntoCurrentRepeat = elapsedTime - timesRepeated * durationAndDelay;\n // TODO use %?\n // const timeIntoCurrentRepeat = elapsedTime % durationAndDelay\n var portion = Math.min(timeIntoCurrentRepeat / _this._duration, 1);\n if (portion === 0 && elapsedTime === _this._duration) {\n return 1;\n }\n return portion;\n };\n var elapsed = calculateElapsedPortion();\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (this._duration === 0 || elapsedTime >= this._duration) {\n if (this._repeat > 0) {\n var completeCount = Math.min(Math.trunc((elapsedTime - this._duration) / durationAndDelay) + 1, this._repeat);\n if (isFinite(this._repeat)) {\n this._repeat -= completeCount;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n this._startTime += durationAndDelay * completeCount;\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n this._onEveryStartCallbackFired = false;\n return true;\n }\n else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration, false);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n }\n else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n }\n else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n return parseFloat(end);\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n }\n else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}());\n\nvar VERSION = '23.1.3';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update,\n};\n\n\n\n\n//# sourceURL=webpack://snowfall/./node_modules/.pnpm/@tweenjs+tween.js@23.1.3/node_modules/@tweenjs/tween.js/dist/tween.esm.js?");
262
+
263
+ /***/ })
264
+
265
+ /******/ });
266
+ /************************************************************************/
267
+ /******/ // The module cache
268
+ /******/ var __webpack_module_cache__ = {};
269
+ /******/
270
+ /******/ // The require function
271
+ /******/ function __webpack_require__(moduleId) {
272
+ /******/ // Check if module is in cache
273
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
274
+ /******/ if (cachedModule !== undefined) {
275
+ /******/ return cachedModule.exports;
276
+ /******/ }
277
+ /******/ // Create a new module (and put it into the cache)
278
+ /******/ var module = __webpack_module_cache__[moduleId] = {
279
+ /******/ id: moduleId,
280
+ /******/ loaded: false,
281
+ /******/ exports: {}
282
+ /******/ };
283
+ /******/
284
+ /******/ // Execute the module function
285
+ /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
286
+ /******/
287
+ /******/ // Flag the module as loaded
288
+ /******/ module.loaded = true;
289
+ /******/
290
+ /******/ // Return the exports of the module
291
+ /******/ return module.exports;
292
+ /******/ }
293
+ /******/
294
+ /************************************************************************/
295
+ /******/ /* webpack/runtime/amd define */
296
+ /******/ (() => {
297
+ /******/ __webpack_require__.amdD = function () {
298
+ /******/ throw new Error('define cannot be used indirect');
299
+ /******/ };
300
+ /******/ })();
301
+ /******/
302
+ /******/ /* webpack/runtime/amd options */
303
+ /******/ (() => {
304
+ /******/ __webpack_require__.amdO = {};
305
+ /******/ })();
306
+ /******/
307
+ /******/ /* webpack/runtime/compat get default export */
308
+ /******/ (() => {
309
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
310
+ /******/ __webpack_require__.n = (module) => {
311
+ /******/ var getter = module && module.__esModule ?
312
+ /******/ () => (module['default']) :
313
+ /******/ () => (module);
314
+ /******/ __webpack_require__.d(getter, { a: getter });
315
+ /******/ return getter;
316
+ /******/ };
317
+ /******/ })();
318
+ /******/
319
+ /******/ /* webpack/runtime/define property getters */
320
+ /******/ (() => {
321
+ /******/ // define getter functions for harmony exports
322
+ /******/ __webpack_require__.d = (exports, definition) => {
323
+ /******/ for(var key in definition) {
324
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
325
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
326
+ /******/ }
327
+ /******/ }
328
+ /******/ };
329
+ /******/ })();
330
+ /******/
331
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
332
+ /******/ (() => {
333
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
334
+ /******/ })();
335
+ /******/
336
+ /******/ /* webpack/runtime/make namespace object */
337
+ /******/ (() => {
338
+ /******/ // define __esModule on exports
339
+ /******/ __webpack_require__.r = (exports) => {
340
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
341
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
342
+ /******/ }
343
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
344
+ /******/ };
345
+ /******/ })();
346
+ /******/
347
+ /******/ /* webpack/runtime/node module decorator */
348
+ /******/ (() => {
349
+ /******/ __webpack_require__.nmd = (module) => {
350
+ /******/ module.paths = [];
351
+ /******/ if (!module.children) module.children = [];
352
+ /******/ return module;
353
+ /******/ };
354
+ /******/ })();
355
+ /******/
356
+ /************************************************************************/
357
+ /******/
358
+ /******/ // startup
359
+ /******/ // Load entry module and return exports
360
+ /******/ // This entry module can't be inlined because the eval devtool is used.
361
+ /******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
362
+ /******/
363
+ /******/ return __webpack_exports__;
364
+ /******/ })()
365
+ ;
366
+ });