{ "version": 3, "sources": ["../../../snow/snow.ts"], "sourcesContent": ["// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT\nconst snow = document.getElementById(\"snow\") as HTMLDivElement;\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nlet snowflakesCount = 200;\n\nlet bodyHeightPx: number;\nlet pageHeightVh: number;\n\nfunction setHeightVariables(): void {\n bodyHeightPx = document.documentElement.getBoundingClientRect().height;\n pageHeightVh = 100 * Math.max(bodyHeightPx / innerHeight, 1);\n}\n\nfunction getSnowAttributes(): void {\n snowflakesCount = Number(\n // @ts-expect-error TS2339\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n snow.attributes.count?.value ?? snowflakesCount,\n );\n}\n\n// This function allows you to turn the snow on and off\nexport function showSnow(value: boolean): void {\n if (value) {\n snow.style.display = \"block\";\n } else {\n snow.style.display = \"none\";\n }\n}\n\n// Creating snowflakes\nfunction spawnSnow(snowDensity = 200): void {\n for (let i = 1; i <= snowDensity; i++) {\n const flake = document.createElement(\"p\");\n snow.appendChild(flake);\n }\n}\n\n// Append style for each snowflake to the head\nfunction addCss(rule: string): void {\n const css = document.createElement(\"style\");\n css.appendChild(document.createTextNode(rule)); // Support for the rest\n // @ts-expect-error TS2532\n document.getElementsByTagName(\"head\")[0].appendChild(css);\n}\n\n// Math\nfunction randomInt(value = 100): number {\n return Math.floor(Math.random() * value) + 1;\n}\n\nfunction randomIntRange(min: number, max: number): number {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction getRandomArbitrary(min: number, max: number): number {\n return Math.random() * (max - min) + min;\n}\n\n// Create style for snowflake\nfunction spawnSnowCSS(snowDensity = 200): void {\n let rule = \"\";\n\n for (let i = 1; i <= snowDensity; i++) {\n const randomX = Math.random() * 100; // vw\n const randomOffset = Math.random() * 10; // vw\n const randomXEnd = randomX + randomOffset;\n const randomXEndYoyo = randomX + (randomOffset / 2);\n const randomYoyoTime = getRandomArbitrary(0.3, 0.8);\n const randomYoyoY = randomYoyoTime * 100; // vh\n const randomScale = Math.random();\n const fallDuration = randomIntRange(10, 30); // s\n const fallDelay = randomInt(30) * -1; // s\n const opacity = Math.random();\n\n rule +=\n `#snow p:nth-child(${i}){opacity:${opacity};transform:translate(${randomX}vw,-10px) scale(${randomScale});animation:fall-${i} ${fallDuration}s ${fallDelay}s linear infinite}@keyframes fall-${i}{${\n randomYoyoTime * 100\n }%{transform:translate(${randomXEnd}vw,${randomYoyoY}vh) scale(${randomScale})}to{transform:translate(${randomXEndYoyo}vw,100vh) scale(${randomScale})}}`;\n }\n addCss(rule);\n}\n\n// Load the rules and execute after the DOM loads\nexport function createSnow(): void {\n // setHeightVariables();\n // getSnowAttributes();\n spawnSnowCSS(snowflakesCount);\n // if (!snow.firstElementChild) {\n // spawnSnow(snowflakesCount);\n // }\n}\n\n// TODO add option to easily re-render scenery. For example when window resizes.\n// this should be easy as CSS rerenders after display block -> none -> block;\n// TODO add progress bar for slower clients\n"], "mappings": "AAAA;AACA,IAAMA,EAAO,SAAS,eAAe,MAAM,EAGvCC,EAAkB,IAElBC,EACAC,EAEJ,SAASC,GAA2B,CAChCF,EAAe,SAAS,gBAAgB,sBAAsB,EAAE,OAChEC,EAAe,IAAM,KAAK,IAAID,EAAe,YAAa,CAAC,CAC/D,CAEA,SAASG,GAA0B,CAdnC,IAAAC,EAAAC,EAeIN,EAAkB,QAGdM,GAAAD,EAAAN,EAAK,WAAW,QAAhB,YAAAM,EAAuB,QAAvB,KAAAC,EAAgCN,CACpC,CACJ,CAGO,SAASO,EAASC,EAAsB,CACvCA,EACAT,EAAK,MAAM,QAAU,QAErBA,EAAK,MAAM,QAAU,MAE7B,CAGA,SAASU,EAAUC,EAAc,IAAW,CACxC,QAASC,EAAI,EAAGA,GAAKD,EAAaC,IAAK,CACnC,IAAMC,EAAQ,SAAS,cAAc,GAAG,EACxCb,EAAK,YAAYa,CAAK,CAC1B,CACJ,CAGA,SAASC,EAAOC,EAAoB,CAChC,IAAMC,EAAM,SAAS,cAAc,OAAO,EAC1CA,EAAI,YAAY,SAAS,eAAeD,CAAI,CAAC,EAE7C,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAAE,YAAYC,CAAG,CAC5D,CAGA,SAASC,EAAUR,EAAQ,IAAa,CACpC,OAAO,KAAK,MAAM,KAAK,OAAO,EAAIA,CAAK,EAAI,CAC/C,CAEA,SAASS,EAAeC,EAAaC,EAAqB,CACtD,OAAAD,EAAM,KAAK,KAAKA,CAAG,EACnBC,EAAM,KAAK,MAAMA,CAAG,EACb,KAAK,MAAM,KAAK,OAAO,GAAKA,EAAMD,EAAM,EAAE,EAAIA,CACzD,CAEA,SAASE,EAAmBF,EAAaC,EAAqB,CAC1D,OAAO,KAAK,OAAO,GAAKA,EAAMD,GAAOA,CACzC,CAGA,SAASG,EAAaX,EAAc,IAAW,CAC3C,IAAII,EAAO,GAEX,QAASH,EAAI,EAAGA,GAAKD,EAAaC,IAAK,CACnC,IAAMW,EAAU,KAAK,OAAO,EAAI,IAC1BC,EAAe,KAAK,OAAO,EAAI,GAC/BC,EAAaF,EAAUC,EACvBE,EAAiBH,EAAWC,EAAe,EAC3CG,EAAiBN,EAAmB,GAAK,EAAG,EAC5CO,EAAcD,EAAiB,IAC/BE,EAAc,KAAK,OAAO,EAC1BC,EAAeZ,EAAe,GAAI,EAAE,EACpCa,EAAYd,EAAU,EAAE,EAAI,GAC5Be,EAAU,KAAK,OAAO,EAE5BjB,GACI,qBAAqB,OAAAH,EAAC,cAAa,OAAAoB,EAAO,yBAAwB,OAAAT,EAAO,oBAAmB,OAAAM,EAAW,qBAAoB,OAAAjB,EAAC,KAAI,OAAAkB,EAAY,MAAK,OAAAC,EAAS,sCAAqC,OAAAnB,EAAC,KAC5L,OAAAe,EAAiB,IACrB,0BAAyB,OAAAF,EAAU,OAAM,OAAAG,EAAW,cAAa,OAAAC,EAAW,6BAA4B,OAAAH,EAAc,oBAAmB,OAAAG,EAAW,MAC5J,CACAf,EAAOC,CAAI,CACf,CAGO,SAASkB,GAAmB,CAG/BX,EAAarB,CAAe,CAIhC", "names": ["snow", "snowflakesCount", "bodyHeightPx", "pageHeightVh", "setHeightVariables", "getSnowAttributes", "_a", "_b", "showSnow", "value", "spawnSnow", "snowDensity", "i", "flake", "addCss", "rule", "css", "randomInt", "randomIntRange", "min", "max", "getRandomArbitrary", "spawnSnowCSS", "randomX", "randomOffset", "randomXEnd", "randomXEndYoyo", "randomYoyoTime", "randomYoyoY", "randomScale", "fallDuration", "fallDelay", "opacity", "createSnow"] }