@epic-web/workshop-app 6.10.0 → 6.11.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root-Bdn7esAN.js","sources":["../../../../../node_modules/tween-functions/index.js","../../../../../node_modules/confetti-react/dist/confetti-react.esm.js","../../../../../node_modules/remix-utils/build/react/client-only.js","../../../app/components/confetti.tsx","../../../app/components/exercise-warning-banner.tsx","../../../app/components/toaster.tsx","../../../app/components/update-repo.tsx","../../../app/routes/admin+/notifications.tsx","../../../app/styles/app.css?url","../../../app/styles/tailwind.css?url","../../../app/root.tsx"],"sourcesContent":["'use strict';\n\n// t: current time, b: beginning value, _c: final value, d: total duration\nvar tweenFunctions = {\n linear: function(t, b, _c, d) {\n var c = _c - b;\n return c * t / d + b;\n },\n easeInQuad: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n },\n easeOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n },\n easeInOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d / 2) === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;\n }\n },\n easeInBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n v = tweenFunctions.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n },\n easeInOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n if (t < d / 2) {\n v = tweenFunctions.easeInBounce(t * 2, 0, c, d);\n return v * 0.5 + b;\n } else {\n v = tweenFunctions.easeOutBounce(t * 2 - d, 0, c, d);\n return v * 0.5 + c * 0.5 + b;\n }\n }\n};\n\nmodule.exports = tweenFunctions;\n","import React, { Component } from 'react';\nimport tweens from 'tween-functions';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction degreesToRads(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction randomRange(min, max) {\n return min + Math.random() * (max - min);\n}\nfunction randomInt(min, max) {\n return Math.floor(min + Math.random() * (max - min + 1));\n}\n\nvar ParticleShape;\n\n(function (ParticleShape) {\n ParticleShape[ParticleShape[\"Circle\"] = 0] = \"Circle\";\n ParticleShape[ParticleShape[\"Square\"] = 1] = \"Square\";\n ParticleShape[ParticleShape[\"Strip\"] = 2] = \"Strip\";\n})(ParticleShape || (ParticleShape = {}));\n\nvar RotationDirection;\n\n(function (RotationDirection) {\n RotationDirection[RotationDirection[\"Positive\"] = 1] = \"Positive\";\n RotationDirection[RotationDirection[\"Negative\"] = -1] = \"Negative\";\n})(RotationDirection || (RotationDirection = {}));\n\nvar Particle = /*#__PURE__*/function () {\n function Particle(context, getOptions, x, y) {\n this.getOptions = getOptions;\n\n var _this$getOptions = this.getOptions(),\n colors = _this$getOptions.colors,\n initialVelocityX = _this$getOptions.initialVelocityX,\n initialVelocityY = _this$getOptions.initialVelocityY;\n\n this.context = context;\n this.x = x;\n this.y = y;\n this.w = randomRange(5, 20);\n this.h = randomRange(5, 20);\n this.radius = randomRange(5, 10);\n this.vx = randomRange(-initialVelocityX, initialVelocityX);\n this.vy = randomRange(-initialVelocityY, 0);\n this.shape = randomInt(0, 2);\n this.angle = degreesToRads(randomRange(0, 360));\n this.angularSpin = randomRange(-0.2, 0.2);\n this.color = colors[Math.floor(Math.random() * colors.length)];\n this.rotateY = randomRange(0, 1);\n this.rotationDirection = randomRange(0, 1) ? RotationDirection.Positive : RotationDirection.Negative;\n }\n\n var _proto = Particle.prototype;\n\n _proto.update = function update() {\n var _this$getOptions2 = this.getOptions(),\n gravity = _this$getOptions2.gravity,\n wind = _this$getOptions2.wind,\n friction = _this$getOptions2.friction,\n opacity = _this$getOptions2.opacity,\n drawShape = _this$getOptions2.drawShape;\n\n this.x += this.vx;\n this.y += this.vy;\n this.vy += gravity;\n this.vx += wind;\n this.vx *= friction;\n this.vy *= friction;\n\n if (this.rotateY >= 1 && this.rotationDirection === RotationDirection.Positive) {\n this.rotationDirection = RotationDirection.Negative;\n } else if (this.rotateY <= -1 && this.rotationDirection === RotationDirection.Negative) {\n this.rotationDirection = RotationDirection.Positive;\n }\n\n var rotateDelta = 0.1 * this.rotationDirection;\n this.rotateY += rotateDelta;\n this.angle += this.angularSpin;\n this.context.save();\n this.context.translate(this.x, this.y);\n this.context.rotate(this.angle);\n this.context.scale(1, this.rotateY);\n this.context.rotate(this.angle);\n this.context.beginPath();\n this.context.fillStyle = this.color;\n this.context.strokeStyle = this.color;\n this.context.globalAlpha = opacity;\n this.context.lineCap = 'round';\n this.context.lineWidth = 2;\n\n if (drawShape && typeof drawShape === 'function') {\n drawShape.call(this, this.context);\n } else {\n switch (this.shape) {\n case ParticleShape.Circle:\n {\n this.context.beginPath();\n this.context.arc(0, 0, this.radius, 0, 2 * Math.PI);\n this.context.fill();\n break;\n }\n\n case ParticleShape.Square:\n {\n this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);\n break;\n }\n\n case ParticleShape.Strip:\n {\n this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);\n break;\n }\n\n default:\n {\n throw new Error('Unknown type in Particle.ts');\n }\n }\n }\n\n this.context.closePath();\n this.context.restore();\n };\n\n return Particle;\n}();\n\nvar ParticleGeneratorClass = function ParticleGeneratorClass(canvas, getOptions) {\n var _this = this;\n\n this.x = 0;\n this.y = 0;\n this.w = 0;\n this.h = 0;\n this.lastNumberOfPieces = 0;\n this.tweenInitTime = Date.now();\n this.particles = [];\n this.particlesGenerated = 0;\n\n this.removeParticleAt = function (i) {\n _this.particles.splice(i, 1);\n };\n\n this.getParticle = function () {\n var newParticleX = randomRange(_this.x, _this.w + _this.x);\n var newParticleY = randomRange(_this.y, _this.h + _this.y);\n return new Particle(_this.context, _this.getOptions, newParticleX, newParticleY);\n };\n\n this.animate = function () {\n var canvas = _this.canvas,\n context = _this.context,\n particlesGenerated = _this.particlesGenerated,\n lastNumberOfPieces = _this.lastNumberOfPieces;\n\n var _this$getOptions = _this.getOptions(),\n run = _this$getOptions.run,\n recycle = _this$getOptions.recycle,\n numberOfPieces = _this$getOptions.numberOfPieces,\n debug = _this$getOptions.debug,\n tweenFunction = _this$getOptions.tweenFunction,\n tweenDuration = _this$getOptions.tweenDuration;\n\n if (!run) {\n return false;\n }\n\n var nP = _this.particles.length;\n var activeCount = recycle ? nP : particlesGenerated;\n var now = Date.now(); // Initial population\n\n if (activeCount < numberOfPieces) {\n // Use the numberOfPieces prop as a key to reset the easing timing\n if (lastNumberOfPieces !== numberOfPieces) {\n _this.tweenInitTime = now;\n _this.lastNumberOfPieces = numberOfPieces;\n }\n\n var tweenInitTime = _this.tweenInitTime; // Add more than one piece per loop, otherwise the number of pieces would\n // be limitted by the RAF framerate\n\n var progressTime = now - tweenInitTime > tweenDuration ? tweenDuration : Math.max(0, now - tweenInitTime);\n var tweenedVal = tweenFunction(progressTime, activeCount, numberOfPieces, tweenDuration);\n var numToAdd = Math.round(tweenedVal - activeCount);\n\n for (var i = 0; i < numToAdd; i += 1) {\n _this.particles.push(_this.getParticle());\n }\n\n _this.particlesGenerated += numToAdd;\n }\n\n if (debug) {\n // Draw debug text\n context.font = '12px sans-serif';\n context.fillStyle = '#333';\n context.textAlign = 'right';\n context.fillText(\"Particles: \" + nP, canvas.width - 10, canvas.height - 20);\n } // Maintain the population\n\n\n _this.particles.forEach(function (p, i) {\n // Update each particle's position\n p.update(); // Prune the off-canvas particles\n\n if (p.y > canvas.height || p.y < -100 || p.x > canvas.width + 100 || p.x < -100) {\n if (recycle && activeCount <= numberOfPieces) {\n // Replace the particle with a brand new one\n _this.particles[i] = _this.getParticle();\n } else {\n _this.removeParticleAt(i);\n }\n }\n });\n\n return nP > 0 || activeCount < numberOfPieces;\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.getOptions = getOptions;\n};\n\nvar confettiDefaults = {\n width: typeof window !== 'undefined' ? window.innerWidth : 300,\n height: typeof window !== 'undefined' ? window.innerHeight : 200,\n numberOfPieces: 200,\n friction: 0.99,\n wind: 0,\n gravity: 0.1,\n initialVelocityX: 4,\n initialVelocityY: 10,\n colors: ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548'],\n opacity: 1.0,\n debug: false,\n tweenFunction: tweens.easeInOutQuad,\n tweenDuration: 5000,\n recycle: true,\n run: true\n};\nvar Confetti = /*#__PURE__*/function () {\n function Confetti(canvas, opts) {\n var _this = this;\n\n this.setOptionsWithDefaults = function (opts) {\n var computedConfettiDefaults = {\n confettiSource: {\n x: 0,\n y: 0,\n w: _this.canvas.width,\n h: 0\n }\n };\n _this._options = _extends({}, computedConfettiDefaults, confettiDefaults, opts);\n Object.assign(_this, opts.confettiSource);\n };\n\n this.update = function () {\n var _this$options = _this.options,\n run = _this$options.run,\n onConfettiComplete = _this$options.onConfettiComplete,\n canvas = _this.canvas,\n context = _this.context;\n\n if (run) {\n context.fillStyle = 'white';\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n if (_this.generator.animate()) {\n _this.rafId = requestAnimationFrame(_this.update);\n } else {\n if (onConfettiComplete && typeof onConfettiComplete === 'function' && _this.generator.particlesGenerated > 0) {\n onConfettiComplete.call(_this, _this);\n }\n\n _this._options.run = false;\n }\n };\n\n this.reset = function () {\n if (_this.generator && _this.generator.particlesGenerated > 0) {\n _this.generator.particlesGenerated = 0;\n _this.generator.particles = [];\n _this.generator.lastNumberOfPieces = 0;\n }\n };\n\n this.stop = function () {\n _this.options = {\n run: false\n };\n\n if (_this.rafId) {\n cancelAnimationFrame(_this.rafId);\n _this.rafId = undefined;\n }\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.generator = new ParticleGeneratorClass(this.canvas, function () {\n return _this.options;\n });\n this.options = opts;\n this.update();\n }\n\n _createClass(Confetti, [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(opts) {\n var lastRunState = this._options && this._options.run;\n var lastRecycleState = this._options && this._options.recycle;\n this.setOptionsWithDefaults(opts);\n\n if (this.generator) {\n Object.assign(this.generator, this.options.confettiSource);\n\n if (typeof opts.recycle === 'boolean' && opts.recycle && lastRecycleState === false) {\n this.generator.lastNumberOfPieces = this.generator.particles.length;\n }\n }\n\n if (typeof opts.run === 'boolean' && opts.run && lastRunState === false) {\n this.update();\n }\n }\n }]);\n\n return Confetti;\n}();\n\nvar ref = /*#__PURE__*/React.createRef();\n\nfunction extractCanvasProps(props) {\n var confettiOptions = {};\n var refs = {};\n var rest = {};\n var confettiOptionKeys = [].concat(Object.keys(confettiDefaults), ['confettiSource', 'drawShape', 'onConfettiComplete']);\n var refProps = ['canvasRef'];\n Object.keys(props).forEach(function (prop) {\n var val = props[prop];\n\n if (confettiOptionKeys.includes(prop)) {\n confettiOptions[prop] = val;\n } else if (refProps.includes(prop)) {\n refProps[prop] = val;\n } else {\n rest[prop] = val;\n }\n });\n return [confettiOptions, rest, refs];\n}\n\nvar ConfettiReactInternal = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ConfettiReactInternal, _Component);\n\n function ConfettiReactInternal(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.canvas = React.createRef();\n _this.canvas = props.canvasRef || ref;\n return _this;\n }\n\n var _proto = ConfettiReactInternal.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.canvas.current) {\n var opts = extractCanvasProps(this.props)[0];\n this.confetti = new Confetti(this.canvas.current, opts);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var confettiOptions = extractCanvasProps(this.props)[0];\n\n if (this.confetti) {\n this.confetti.options = confettiOptions;\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.confetti) {\n this.confetti.stop();\n }\n\n this.confetti = undefined;\n };\n\n _proto.render = function render() {\n var _extractCanvasProps = extractCanvasProps(this.props),\n confettiOptions = _extractCanvasProps[0],\n passedProps = _extractCanvasProps[1];\n\n var canvasStyles = _extends({\n zIndex: 2,\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }, passedProps.style);\n\n return React.createElement(\"canvas\", Object.assign({\n width: confettiOptions.width,\n height: confettiOptions.height,\n ref: this.canvas\n }, passedProps, {\n style: canvasStyles\n }));\n };\n\n return ConfettiReactInternal;\n}(Component);\n\nConfettiReactInternal.defaultProps = /*#__PURE__*/_extends({}, confettiDefaults);\nConfettiReactInternal.displayName = 'ConfettiReact'; // eslint-disable-next-line react/display-name\n\nvar Index = /*#__PURE__*/React.forwardRef(function (props, _ref) {\n return React.createElement(ConfettiReactInternal, Object.assign({\n canvasRef: ref\n }, props));\n});\n\nexport default Index;\nexport { Index };\n//# sourceMappingURL=confetti-react.esm.js.map\n","import { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { useHydrated } from \"./use-hydrated.js\";\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * Example: Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * {() => <Chart />}\n * </ClientOnly>\n * );\n * ```\n */\nexport function ClientOnly({ children, fallback = null }) {\n return useHydrated() ? _jsx(_Fragment, { children: children() }) : _jsx(_Fragment, { children: fallback });\n}\n//# sourceMappingURL=client-only.js.map","import { Index as ConfettiShower } from 'confetti-react'\nimport { ClientOnly } from 'remix-utils/client-only'\n\nexport function Confetti({ id }: { id?: string | null }) {\n\tif (!id) return null\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<ConfettiShower\n\t\t\t\t\tkey={id}\n\t\t\t\t\trun={Boolean(id)}\n\t\t\t\t\trecycle={false}\n\t\t\t\t\tnumberOfPieces={800}\n\t\t\t\t\twidth={window.innerWidth}\n\t\t\t\t\theight={window.innerHeight}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t)\n}\n","import { Link } from 'react-router'\nimport { Icon } from './icons.tsx'\n\nexport function ExerciseWarningBanner() {\n\treturn (\n\t\t<div className=\"fixed left-0 right-0 top-0 z-50 border-b border-destructive bg-destructive\">\n\t\t\t<div className=\"relative w-full p-4\">\n\t\t\t\t{/* Full-banner clickable link, visually hidden but covers the banner */}\n\t\t\t\t<Link\n\t\t\t\t\tto=\"/workspace-structure\"\n\t\t\t\t\tclassName=\"absolute inset-0 z-10 block h-full w-full\"\n\t\t\t\t\taria-label=\"Learn more about workspace structure\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"container relative z-0 flex items-center justify-between\">\n\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"Error\"\n\t\t\t\t\t\t\tclassName=\"h-5 w-5 text-destructive-foreground\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h3 className=\"text-sm font-semibold text-destructive-foreground\">\n\t\t\t\t\t\t\t\tWarning: Changes detected in exercises directory\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"text-xs text-destructive-foreground/80\">\n\t\t\t\t\t\t\t\tYou should typically work in the playground directory, not the\n\t\t\t\t\t\t\t\texercises directory.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex items-center gap-2 text-xs text-destructive-foreground\">\n\t\t\t\t\t\t<span>Learn more</span>\n\t\t\t\t\t\t<Icon name=\"ArrowRight\" className=\"h-3 w-3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { useEffect } from 'react'\nimport { Toaster, toast as showToast } from 'sonner'\nimport { type Toast } from '#app/utils/toast.server.ts'\n\nexport function EpicToaster({ toast }: { toast?: Toast | null }) {\n\treturn (\n\t\t<>\n\t\t\t<Toaster closeButton position=\"top-center\" />\n\t\t\t{toast ? <ShowToast toast={toast} /> : null}\n\t\t</>\n\t)\n}\n\nfunction ShowToast({ toast }: { toast: Toast }) {\n\tconst { id, type, title, description } = toast\n\tuseEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\tshowToast[type](title, { id, description })\n\t\t}, 0)\n\t}, [description, id, title, type])\n\treturn null\n}\n","import { type checkForUpdatesCached } from '@epic-web/workshop-utils/git.server'\nimport { useEffect, useRef } from 'react'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\nimport { useFetcher } from 'react-router'\n\nexport function UpdateToast({\n\trepoUpdates,\n}: {\n\trepoUpdates: Awaited<ReturnType<typeof checkForUpdatesCached>>\n}) {\n\tconst { updatesAvailable } = repoUpdates\n\tconst diffLink = 'diffLink' in repoUpdates ? repoUpdates.diffLink : null\n\tconst remoteCommit = 'remoteCommit' in repoUpdates ? repoUpdates.remoteCommit : undefined\n\tconst fetcher = useFetcher()\n\n\t// Track the in-progress toast id and update notification id\n\tconst inProgressToastId = useRef<ReturnType<typeof toast.loading> | null>(\n\t\tnull,\n\t)\n\tconst updateNotificationId = useRef<ReturnType<typeof toast.info> | null>(\n\t\tnull,\n\t)\n\tconst updateInProgress = useRef(false)\n\n\tuseEffect(() => {\n\t\tif (updatesAvailable && remoteCommit) {\n\t\t\tconst id = toast.info('New workshop updates available', {\n\t\t\t\tduration: Infinity,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{`Get the latest updates by clicking the update button. `}\n\t\t\t\t\t\t{diffLink ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={diffLink}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tView changes\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tonDismiss: () => {\n\t\t\t\t\t// No-op for now, could call a dismiss endpoint if needed\n\t\t\t\t},\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Update',\n\t\t\t\t\tonClick: async () => {\n\t\t\t\t\t\t// Dismiss the update notification immediately\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Show in-progress toast\n\t\t\t\t\t\tif (!inProgressToastId.current) {\n\t\t\t\t\t\t\tinProgressToastId.current = toast.loading('Update in progress...')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateInProgress.current) return\n\t\t\t\t\t\tupdateInProgress.current = true\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { EPICSHOP_PARENT_PORT, EPICSHOP_PARENT_TOKEN } =\n\t\t\t\t\t\t\t\twindow.ENV || {}\n\t\t\t\t\t\t\tif (!EPICSHOP_PARENT_PORT || !EPICSHOP_PARENT_TOKEN) {\n\t\t\t\t\t\t\t\tthrow new Error('Update API not available')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst res = await fetch(\n\t\t\t\t\t\t\t\t`http://localhost:${EPICSHOP_PARENT_PORT}/__epicshop-restart`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'x-epicshop-token': EPICSHOP_PARENT_TOKEN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Request to update workshop failed: ${res.statusText}`,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst data = await res.json().catch(() => ({}))\n\t\t\t\t\t\t\tconst schema = z.object({\n\t\t\t\t\t\t\t\tstatus: z.enum(['ok', 'error']),\n\t\t\t\t\t\t\t\tmessage: z.string().optional(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tconst parsed = schema.safeParse(data)\n\t\t\t\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t\t\t\tconsole.error('Invalid response from update API', data)\n\t\t\t\t\t\t\t\tthrow new Error('Invalid response from update API')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { status, message } = parsed.data\n\t\t\t\t\t\t\tif (status === 'ok') {\n\t\t\t\t\t\t\t\tlet reloaded = false\n\t\t\t\t\t\t\t\ttoast.success('Workshop updated', {\n\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t'Reloading in 2 seconds... You can reload now if you prefer.',\n\t\t\t\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\tlabel: 'Reload now',\n\t\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\t\treloaded = true\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonAutoClose: () => {\n\t\t\t\t\t\t\t\t\t\tif (!reloaded) {\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\t\tdescription: message || 'Unknown error',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\tdescription: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tupdateInProgress.current = false\n\t\t\t\t\t\t\tif (inProgressToastId.current) {\n\t\t\t\t\t\t\t\ttoast.dismiss(inProgressToastId.current)\n\t\t\t\t\t\t\t\tinProgressToastId.current = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcancel: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t// Dismiss the notification toast\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mute the notification persistently\n\t\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: `update-repo-${remoteCommit}` },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tupdateNotificationId.current = id\n\t\t}\n\t}, [updatesAvailable, diffLink, remoteCommit])\n\n\treturn null\n}","import { muteNotification } from '@epic-web/workshop-utils/db.server'\nimport { type getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { useEffect, useRef } from 'react'\nimport { data, type ActionFunctionArgs, useFetcher } from 'react-router'\nimport { toast } from 'sonner'\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tconst id = formData.get('id')\n\tif (typeof id !== 'string') {\n\t\treturn data({ error: 'Invalid notification id' }, { status: 400 })\n\t}\n\tif (intent === 'mute') {\n\t\tawait muteNotification(id)\n\t\treturn data({ success: true })\n\t}\n\treturn data({ error: 'Invalid intent' }, { status: 400 })\n}\n\nexport function Notifications({\n\tunmutedNotifications,\n}: {\n\tunmutedNotifications: Awaited<ReturnType<typeof getUnmutedNotifications>>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst fetcherRef = useRef(fetcher)\n\tconst toastedIds = useRef<Set<string>>(new Set())\n\n\tuseEffect(() => {\n\t\tfor (const notification of unmutedNotifications) {\n\t\t\tif (toastedIds.current.has(notification.id)) continue\n\t\t\ttoastedIds.current.add(notification.id)\n\n\t\t\ttoast.info(notification.title, {\n\t\t\t\tid: notification.id,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{notification.message}</p>\n\t\t\t\t\t\t{notification.link && (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={notification.link}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLearn more\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tduration: Infinity,\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tvoid fetcherRef.current.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: notification.id },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}, [unmutedNotifications])\n\n\treturn null\n}\n","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/app.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f6170702e6373733f7472616e73666f726d2d6f6e6c79__\"","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/tailwind.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f7461696c77696e642e6373733f7472616e73666f726d2d6f6e6c79__\"","import path from 'node:path'\nimport { getPresentUsers } from '@epic-web/workshop-presence/presence.server'\nimport { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tgetPreferences,\n\treadOnboardingData,\n\tgetMutedNotifications,\n} from '@epic-web/workshop-utils/db.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport {\n\tgetProgress,\n\tgetUserInfo,\n\tuserHasAccessToWorkshop,\n} from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcheckForUpdatesCached,\n\tcheckForExerciseChanges,\n} from '@epic-web/workshop-utils/git.server'\nimport { getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport {\n\tgetSetClientIdCookieHeader,\n\tgetUserId,\n} from '@epic-web/workshop-utils/user.server'\nimport { checkConnectionCached } from '@epic-web/workshop-utils/utils.server'\n\nimport {\n\tdata,\n\tredirect,\n\ttype LinksFunction,\n\tLinks,\n\tMeta,\n\tOutlet,\n\tScripts,\n\tScrollRestoration,\n\tuseLoaderData,\n\tuseNavigation,\n} from 'react-router'\nimport { promiseHash } from 'remix-utils/promise'\nimport { useSpinDelay } from 'spin-delay'\nimport { type Route } from './+types/root.tsx'\nimport { Confetti } from './components/confetti'\nimport { GeneralErrorBoundary } from './components/error-boundary'\nimport { ExerciseWarningBanner } from './components/exercise-warning-banner'\nimport { EpicProgress } from './components/progress-bar'\nimport { EpicToaster } from './components/toaster'\nimport { TooltipProvider } from './components/ui/tooltip'\nimport { UpdateToast } from './components/update-repo'\nimport { Notifications } from './routes/admin+/notifications'\nimport { useTheme } from './routes/theme/index'\nimport { getTheme } from './routes/theme/theme-session.server'\nimport appStylesheetUrl from './styles/app.css?url'\nimport tailwindStylesheetUrl from './styles/tailwind.css?url'\nimport { ClientHintCheck, getHints } from './utils/client-hints'\nimport { getConfetti } from './utils/confetti.server'\nimport { cn, combineHeaders, getDomainUrl, useAltDown } from './utils/misc'\nimport { Presence } from './utils/presence'\nimport { getSeoMetaTags } from './utils/seo'\nimport { getToast } from './utils/toast.server'\n\nexport const links: LinksFunction = () => {\n\treturn [\n\t\t{ rel: 'stylesheet', href: '/neogrotesk-font.css' },\n\t\t{\n\t\t\trel: 'stylesheet',\n\t\t\thref: 'https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap',\n\t\t},\n\t\t{ rel: 'stylesheet', href: tailwindStylesheetUrl },\n\t\t{ rel: 'stylesheet', href: appStylesheetUrl },\n\t\t{\n\t\t\trel: 'icon',\n\t\t\thref: '/favicon.ico',\n\t\t\tsizes: '48x48',\n\t\t},\n\t\t{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },\n\t]\n}\n\nexport const meta: Route.MetaFunction = ({ data }) => {\n\tif (!data) return []\n\n\treturn getSeoMetaTags({\n\t\tinstructor: data.instructor,\n\t\ttitle: data.workshopTitle,\n\t\tdescription: data.workshopSubtitle,\n\t\trequestInfo: data.requestInfo,\n\t})\n}\n\nexport type RootLoaderData = Route.ComponentProps['loaderData']\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('rootLoader')\n\tconst workshopConfig = getWorkshopConfig()\n\tconst {\n\t\ttitle: workshopTitle,\n\t\tsubtitle: workshopSubtitle,\n\t\tinstructor,\n\t\tonboardingVideo,\n\t} = workshopConfig\n\n\tconst onboarding = await readOnboardingData()\n\tif (\n\t\t!ENV.EPICSHOP_DEPLOYED &&\n\t\t!onboarding?.tourVideosWatched.includes(onboardingVideo)\n\t) {\n\t\tif (new URL(request.url).pathname !== '/onboarding') {\n\t\t\tthrow redirect('/onboarding')\n\t\t}\n\t}\n\tconst theme = getTheme(request)\n\tconst { confettiId, headers: confettiHeaders } = getConfetti(request)\n\tconst { toast, headers: toastHeaders } = await getToast(request)\n\tconst isOnlinePromise = checkConnectionCached({ request, timings })\n\n\tconst asyncStuff = await promiseHash({\n\t\tuserId: getUserId({ request }),\n\t\tpreferences: getPreferences(),\n\t\tprogress: getProgress({ timings }).catch((e) => {\n\t\t\tconsole.error('Failed to get progress', e)\n\t\t\tconst emptyProgress: Awaited<ReturnType<typeof getProgress>> = []\n\t\t\treturn emptyProgress\n\t\t}),\n\t\tuser: getUserInfo(),\n\t\tuserHasAccess: userHasAccessToWorkshop({ request, timings }),\n\t\tapps: getApps({ request, timings }),\n\t\trepoUpdates: checkForUpdatesCached(),\n\t\tunmutedNotifications: getUnmutedNotifications(),\n\t\texerciseChanges: checkForExerciseChanges(),\n\t})\n\n\tconst presentUsers = await getPresentUsers({\n\t\trequest,\n\t\ttimings,\n\t})\n\n\t// Filter out repoUpdates if muted\n\tconst mutedNotifications = await getMutedNotifications()\n\tlet repoUpdates = asyncStuff.repoUpdates\n\tif (\n\t\trepoUpdates &&\n\t\t'remoteCommit' in repoUpdates &&\n\t\trepoUpdates.remoteCommit &&\n\t\tmutedNotifications.includes(`update-repo-${repoUpdates.remoteCommit}`)\n\t) {\n\t\trepoUpdates = { ...repoUpdates, updatesAvailable: false }\n\t}\n\n\treturn data(\n\t\t{\n\t\t\t...asyncStuff,\n\t\t\tworkshopConfig,\n\t\t\tworkshopTitle,\n\t\t\tworkshopSubtitle,\n\t\t\tinstructor,\n\t\t\tapps: asyncStuff.apps.map(({ name, fullPath, relativePath }) => ({\n\t\t\t\tname,\n\t\t\t\tfullPath,\n\t\t\t\trelativePath,\n\t\t\t})),\n\t\t\tENV: getEnv(),\n\t\t\trequestInfo: {\n\t\t\t\tprotocol: new URL(request.url).protocol,\n\t\t\t\thostname: new URL(request.url).hostname,\n\t\t\t\tport: new URL(request.url).port,\n\t\t\t\torigin: new URL(request.url).origin,\n\t\t\t\tdomain: getDomainUrl(request),\n\t\t\t\thints: getHints(request),\n\t\t\t\tpath: new URL(request.url).pathname,\n\t\t\t\tsession: { theme },\n\t\t\t\tseparator: path.sep,\n\t\t\t\tonline: await isOnlinePromise,\n\t\t\t},\n\t\t\ttoast,\n\t\t\tconfettiId,\n\t\t\tpresence: {\n\t\t\t\tusers: presentUsers,\n\t\t\t},\n\t\t\trepoUpdates,\n\t\t\texerciseChanges: asyncStuff.exerciseChanges,\n\t\t},\n\t\t{\n\t\t\theaders: combineHeaders(\n\t\t\t\ttoastHeaders,\n\t\t\t\tconfettiHeaders,\n\t\t\t\t{ 'Server-Timing': timings.toString() },\n\t\t\t\tasyncStuff.userId?.type === 'cookie.randomId'\n\t\t\t\t\t? { 'Set-Cookie': getSetClientIdCookieHeader(asyncStuff.userId.id) }\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t},\n\t)\n}\n\nfunction Document({\n\tchildren,\n\tenv = {},\n\tclassName,\n\tstyle,\n}: {\n\tchildren: React.ReactNode\n\tenv?: Record<string, unknown>\n\tclassName: string\n\tstyle?: React.CSSProperties\n}) {\n\treturn (\n\t\t<html lang=\"en\" className={className} style={style}>\n\t\t\t<head>\n\t\t\t\t<ClientHintCheck />\n\t\t\t\t<Meta />\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n\t\t\t\t<Links />\n\t\t\t\t<script\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `window.ENV = ${JSON.stringify(env)}`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</head>\n\t\t\t<body className=\"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe\">\n\t\t\t\t{children}\n\t\t\t\t<ScrollRestoration />\n\t\t\t\t<Scripts />\n\t\t\t</body>\n\t\t</html>\n\t)\n}\n\nfunction App() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst showSpinner = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 400,\n\t\tminDuration: 200,\n\t})\n\tconst altDown = useAltDown()\n\n\tconst theme = useTheme()\n\treturn (\n\t\t<Document\n\t\t\tstyle={\n\t\t\t\tdata.preferences?.fontSize\n\t\t\t\t\t? { fontSize: `${data.preferences?.fontSize}px` }\n\t\t\t\t\t: {}\n\t\t\t}\n\t\t\tclassName={cn(\n\t\t\t\t'antialiased h-screen-safe',\n\t\t\t\ttheme,\n\t\t\t\t{ 'cursor-progress': showSpinner },\n\t\t\t\taltDown ? 'alt-down' : null,\n\t\t\t)}\n\t\t\tenv={data.ENV}\n\t\t>\n\t\t\t{data.exerciseChanges &&\n\t\t\t\t!data.preferences?.exerciseWarning?.dismissed && (\n\t\t\t\t\t<ExerciseWarningBanner />\n\t\t\t\t)}\n\t\t\t<Outlet />\n\t\t\t<Confetti id={data.confettiId} />\n\t\t\t<EpicToaster toast={data.toast} />\n\t\t\t<UpdateToast repoUpdates={data.repoUpdates} />\n\t\t\t<EpicProgress />\n\t\t\t<Notifications unmutedNotifications={data.unmutedNotifications} />\n\t\t</Document>\n\t)\n}\n\nexport default function AppWithProviders() {\n\tconst { user } = useLoaderData<typeof loader>()\n\treturn (\n\t\t<Presence user={user}>\n\t\t\t<TooltipProvider>\n\t\t\t\t<App />\n\t\t\t</TooltipProvider>\n\t\t</Presence>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<Document className=\"h-screen-safe\">\n\t\t\t<GeneralErrorBoundary />\n\t\t</Document>\n\t)\n}\n"],"names":["tweenFunctions","t","b","_c","d","c","p","s","v","tweenFunctions_1","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_extends","source","key","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","degreesToRads","degrees","randomRange","min","max","randomInt","ParticleShape","RotationDirection","Particle","context","getOptions","x","y","_this$getOptions","colors","initialVelocityX","initialVelocityY","_proto","_this$getOptions2","gravity","wind","friction","opacity","drawShape","rotateDelta","ParticleGeneratorClass","canvas","_this","newParticleX","newParticleY","particlesGenerated","lastNumberOfPieces","run","recycle","numberOfPieces","debug","tweenFunction","tweenDuration","nP","activeCount","now","tweenInitTime","progressTime","tweenedVal","numToAdd","ctx","confettiDefaults","tweens","Confetti","opts","computedConfettiDefaults","_this$options","onConfettiComplete","lastRunState","lastRecycleState","ref","React","extractCanvasProps","confettiOptions","refs","rest","confettiOptionKeys","refProps","prop","val","ConfettiReactInternal","_Component","_extractCanvasProps","passedProps","canvasStyles","Component","Index","_ref","ClientOnly","children","fallback","useHydrated","_jsx","_Fragment","id","jsx","ConfettiShower","ExerciseWarningBanner","jsxs","Link","Icon","EpicToaster","toast","Fragment","Toaster","ShowToast","type","title","description","useEffect","showToast","UpdateToast","repoUpdates","updatesAvailable","diffLink","remoteCommit","fetcher","useFetcher","inProgressToastId","useRef","updateNotificationId","updateInProgress","EPICSHOP_PARENT_PORT","EPICSHOP_PARENT_TOKEN","res","data","parsed","z.object","z.enum","z.string","status","message","reloaded","err","Notifications","unmutedNotifications","fetcherRef","toastedIds","Set","notification","current","has","add","info","link","href","className","duration","Infinity","action","label","onClick","submit","intent","method","appStylesheetUrl","tailwindStylesheetUrl","links","rel","sizes","meta","getSeoMetaTags","instructor","workshopTitle","workshopSubtitle","requestInfo","Document","env","style","lang","ClientHintCheck","Meta","charSet","name","content","Links","dangerouslySetInnerHTML","__html","JSON","stringify","ScrollRestoration","Scripts","App","useLoaderData","navigation","useNavigation","showSpinner","useSpinDelay","state","delay","minDuration","altDown","useAltDown","theme","useTheme","preferences","fontSize","cn","ENV","exerciseChanges","exerciseWarning","dismissed","Outlet","confettiId","EpicProgress","root","_UNSAFE_withComponentProps","user","Presence","TooltipProvider","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"root-Bdn7esAN.js","sources":["../../../../../node_modules/tween-functions/index.js","../../../../../node_modules/confetti-react/dist/confetti-react.esm.js","../../../../../node_modules/remix-utils/build/react/client-only.js","../../../app/components/confetti.tsx","../../../app/components/exercise-warning-banner.tsx","../../../app/components/toaster.tsx","../../../app/components/update-repo.tsx","../../../app/routes/admin+/notifications.tsx","../../../app/styles/app.css?url","../../../app/styles/tailwind.css?url","../../../app/root.tsx"],"sourcesContent":["'use strict';\n\n// t: current time, b: beginning value, _c: final value, d: total duration\nvar tweenFunctions = {\n linear: function(t, b, _c, d) {\n var c = _c - b;\n return c * t / d + b;\n },\n easeInQuad: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t + b;\n },\n easeOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t + b;\n } else {\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n }\n },\n easeInCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n },\n easeInQuart: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t + b;\n } else {\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n },\n easeInQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return c / 2 * t * t * t * t * t + b;\n } else {\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n },\n easeInSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n },\n easeOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n },\n easeInOutSine: function(t, b, _c, d) {\n var c = _c - b;\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n },\n easeInExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n },\n easeOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n },\n easeInOutExpo: function(t, b, _c, d) {\n var c = _c - b;\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n } else {\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n },\n easeInCirc: function(t, b, _c, d) {\n var c = _c - b;\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d / 2) < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n } else {\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n },\n easeInElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n },\n easeOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d) === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n },\n easeInOutElastic: function(t, b, _c, d) {\n var c = _c - b;\n var a, p, s;\n s = 1.70158;\n p = 0;\n a = c;\n if (t === 0) {\n return b;\n } else if ((t /= d / 2) === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n } else {\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;\n }\n },\n easeInBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack: function(t, b, _c, d, s) {\n var c = _c - b;\n if (s === void 0) {\n s = 1.70158;\n }\n if ((t /= d / 2) < 1) {\n return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n } else {\n return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n }\n },\n easeInBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n v = tweenFunctions.easeOutBounce(d - t, 0, c, d);\n return c - v + b;\n },\n easeOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n },\n easeInOutBounce: function(t, b, _c, d) {\n var c = _c - b;\n var v;\n if (t < d / 2) {\n v = tweenFunctions.easeInBounce(t * 2, 0, c, d);\n return v * 0.5 + b;\n } else {\n v = tweenFunctions.easeOutBounce(t * 2 - d, 0, c, d);\n return v * 0.5 + c * 0.5 + b;\n }\n }\n};\n\nmodule.exports = tweenFunctions;\n","import React, { Component } from 'react';\nimport tweens from 'tween-functions';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction degreesToRads(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction randomRange(min, max) {\n return min + Math.random() * (max - min);\n}\nfunction randomInt(min, max) {\n return Math.floor(min + Math.random() * (max - min + 1));\n}\n\nvar ParticleShape;\n\n(function (ParticleShape) {\n ParticleShape[ParticleShape[\"Circle\"] = 0] = \"Circle\";\n ParticleShape[ParticleShape[\"Square\"] = 1] = \"Square\";\n ParticleShape[ParticleShape[\"Strip\"] = 2] = \"Strip\";\n})(ParticleShape || (ParticleShape = {}));\n\nvar RotationDirection;\n\n(function (RotationDirection) {\n RotationDirection[RotationDirection[\"Positive\"] = 1] = \"Positive\";\n RotationDirection[RotationDirection[\"Negative\"] = -1] = \"Negative\";\n})(RotationDirection || (RotationDirection = {}));\n\nvar Particle = /*#__PURE__*/function () {\n function Particle(context, getOptions, x, y) {\n this.getOptions = getOptions;\n\n var _this$getOptions = this.getOptions(),\n colors = _this$getOptions.colors,\n initialVelocityX = _this$getOptions.initialVelocityX,\n initialVelocityY = _this$getOptions.initialVelocityY;\n\n this.context = context;\n this.x = x;\n this.y = y;\n this.w = randomRange(5, 20);\n this.h = randomRange(5, 20);\n this.radius = randomRange(5, 10);\n this.vx = randomRange(-initialVelocityX, initialVelocityX);\n this.vy = randomRange(-initialVelocityY, 0);\n this.shape = randomInt(0, 2);\n this.angle = degreesToRads(randomRange(0, 360));\n this.angularSpin = randomRange(-0.2, 0.2);\n this.color = colors[Math.floor(Math.random() * colors.length)];\n this.rotateY = randomRange(0, 1);\n this.rotationDirection = randomRange(0, 1) ? RotationDirection.Positive : RotationDirection.Negative;\n }\n\n var _proto = Particle.prototype;\n\n _proto.update = function update() {\n var _this$getOptions2 = this.getOptions(),\n gravity = _this$getOptions2.gravity,\n wind = _this$getOptions2.wind,\n friction = _this$getOptions2.friction,\n opacity = _this$getOptions2.opacity,\n drawShape = _this$getOptions2.drawShape;\n\n this.x += this.vx;\n this.y += this.vy;\n this.vy += gravity;\n this.vx += wind;\n this.vx *= friction;\n this.vy *= friction;\n\n if (this.rotateY >= 1 && this.rotationDirection === RotationDirection.Positive) {\n this.rotationDirection = RotationDirection.Negative;\n } else if (this.rotateY <= -1 && this.rotationDirection === RotationDirection.Negative) {\n this.rotationDirection = RotationDirection.Positive;\n }\n\n var rotateDelta = 0.1 * this.rotationDirection;\n this.rotateY += rotateDelta;\n this.angle += this.angularSpin;\n this.context.save();\n this.context.translate(this.x, this.y);\n this.context.rotate(this.angle);\n this.context.scale(1, this.rotateY);\n this.context.rotate(this.angle);\n this.context.beginPath();\n this.context.fillStyle = this.color;\n this.context.strokeStyle = this.color;\n this.context.globalAlpha = opacity;\n this.context.lineCap = 'round';\n this.context.lineWidth = 2;\n\n if (drawShape && typeof drawShape === 'function') {\n drawShape.call(this, this.context);\n } else {\n switch (this.shape) {\n case ParticleShape.Circle:\n {\n this.context.beginPath();\n this.context.arc(0, 0, this.radius, 0, 2 * Math.PI);\n this.context.fill();\n break;\n }\n\n case ParticleShape.Square:\n {\n this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);\n break;\n }\n\n case ParticleShape.Strip:\n {\n this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);\n break;\n }\n\n default:\n {\n throw new Error('Unknown type in Particle.ts');\n }\n }\n }\n\n this.context.closePath();\n this.context.restore();\n };\n\n return Particle;\n}();\n\nvar ParticleGeneratorClass = function ParticleGeneratorClass(canvas, getOptions) {\n var _this = this;\n\n this.x = 0;\n this.y = 0;\n this.w = 0;\n this.h = 0;\n this.lastNumberOfPieces = 0;\n this.tweenInitTime = Date.now();\n this.particles = [];\n this.particlesGenerated = 0;\n\n this.removeParticleAt = function (i) {\n _this.particles.splice(i, 1);\n };\n\n this.getParticle = function () {\n var newParticleX = randomRange(_this.x, _this.w + _this.x);\n var newParticleY = randomRange(_this.y, _this.h + _this.y);\n return new Particle(_this.context, _this.getOptions, newParticleX, newParticleY);\n };\n\n this.animate = function () {\n var canvas = _this.canvas,\n context = _this.context,\n particlesGenerated = _this.particlesGenerated,\n lastNumberOfPieces = _this.lastNumberOfPieces;\n\n var _this$getOptions = _this.getOptions(),\n run = _this$getOptions.run,\n recycle = _this$getOptions.recycle,\n numberOfPieces = _this$getOptions.numberOfPieces,\n debug = _this$getOptions.debug,\n tweenFunction = _this$getOptions.tweenFunction,\n tweenDuration = _this$getOptions.tweenDuration;\n\n if (!run) {\n return false;\n }\n\n var nP = _this.particles.length;\n var activeCount = recycle ? nP : particlesGenerated;\n var now = Date.now(); // Initial population\n\n if (activeCount < numberOfPieces) {\n // Use the numberOfPieces prop as a key to reset the easing timing\n if (lastNumberOfPieces !== numberOfPieces) {\n _this.tweenInitTime = now;\n _this.lastNumberOfPieces = numberOfPieces;\n }\n\n var tweenInitTime = _this.tweenInitTime; // Add more than one piece per loop, otherwise the number of pieces would\n // be limitted by the RAF framerate\n\n var progressTime = now - tweenInitTime > tweenDuration ? tweenDuration : Math.max(0, now - tweenInitTime);\n var tweenedVal = tweenFunction(progressTime, activeCount, numberOfPieces, tweenDuration);\n var numToAdd = Math.round(tweenedVal - activeCount);\n\n for (var i = 0; i < numToAdd; i += 1) {\n _this.particles.push(_this.getParticle());\n }\n\n _this.particlesGenerated += numToAdd;\n }\n\n if (debug) {\n // Draw debug text\n context.font = '12px sans-serif';\n context.fillStyle = '#333';\n context.textAlign = 'right';\n context.fillText(\"Particles: \" + nP, canvas.width - 10, canvas.height - 20);\n } // Maintain the population\n\n\n _this.particles.forEach(function (p, i) {\n // Update each particle's position\n p.update(); // Prune the off-canvas particles\n\n if (p.y > canvas.height || p.y < -100 || p.x > canvas.width + 100 || p.x < -100) {\n if (recycle && activeCount <= numberOfPieces) {\n // Replace the particle with a brand new one\n _this.particles[i] = _this.getParticle();\n } else {\n _this.removeParticleAt(i);\n }\n }\n });\n\n return nP > 0 || activeCount < numberOfPieces;\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.getOptions = getOptions;\n};\n\nvar confettiDefaults = {\n width: typeof window !== 'undefined' ? window.innerWidth : 300,\n height: typeof window !== 'undefined' ? window.innerHeight : 200,\n numberOfPieces: 200,\n friction: 0.99,\n wind: 0,\n gravity: 0.1,\n initialVelocityX: 4,\n initialVelocityY: 10,\n colors: ['#f44336', '#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548'],\n opacity: 1.0,\n debug: false,\n tweenFunction: tweens.easeInOutQuad,\n tweenDuration: 5000,\n recycle: true,\n run: true\n};\nvar Confetti = /*#__PURE__*/function () {\n function Confetti(canvas, opts) {\n var _this = this;\n\n this.setOptionsWithDefaults = function (opts) {\n var computedConfettiDefaults = {\n confettiSource: {\n x: 0,\n y: 0,\n w: _this.canvas.width,\n h: 0\n }\n };\n _this._options = _extends({}, computedConfettiDefaults, confettiDefaults, opts);\n Object.assign(_this, opts.confettiSource);\n };\n\n this.update = function () {\n var _this$options = _this.options,\n run = _this$options.run,\n onConfettiComplete = _this$options.onConfettiComplete,\n canvas = _this.canvas,\n context = _this.context;\n\n if (run) {\n context.fillStyle = 'white';\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n if (_this.generator.animate()) {\n _this.rafId = requestAnimationFrame(_this.update);\n } else {\n if (onConfettiComplete && typeof onConfettiComplete === 'function' && _this.generator.particlesGenerated > 0) {\n onConfettiComplete.call(_this, _this);\n }\n\n _this._options.run = false;\n }\n };\n\n this.reset = function () {\n if (_this.generator && _this.generator.particlesGenerated > 0) {\n _this.generator.particlesGenerated = 0;\n _this.generator.particles = [];\n _this.generator.lastNumberOfPieces = 0;\n }\n };\n\n this.stop = function () {\n _this.options = {\n run: false\n };\n\n if (_this.rafId) {\n cancelAnimationFrame(_this.rafId);\n _this.rafId = undefined;\n }\n };\n\n this.canvas = canvas;\n var ctx = this.canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Could not get canvas context');\n }\n\n this.context = ctx;\n this.generator = new ParticleGeneratorClass(this.canvas, function () {\n return _this.options;\n });\n this.options = opts;\n this.update();\n }\n\n _createClass(Confetti, [{\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(opts) {\n var lastRunState = this._options && this._options.run;\n var lastRecycleState = this._options && this._options.recycle;\n this.setOptionsWithDefaults(opts);\n\n if (this.generator) {\n Object.assign(this.generator, this.options.confettiSource);\n\n if (typeof opts.recycle === 'boolean' && opts.recycle && lastRecycleState === false) {\n this.generator.lastNumberOfPieces = this.generator.particles.length;\n }\n }\n\n if (typeof opts.run === 'boolean' && opts.run && lastRunState === false) {\n this.update();\n }\n }\n }]);\n\n return Confetti;\n}();\n\nvar ref = /*#__PURE__*/React.createRef();\n\nfunction extractCanvasProps(props) {\n var confettiOptions = {};\n var refs = {};\n var rest = {};\n var confettiOptionKeys = [].concat(Object.keys(confettiDefaults), ['confettiSource', 'drawShape', 'onConfettiComplete']);\n var refProps = ['canvasRef'];\n Object.keys(props).forEach(function (prop) {\n var val = props[prop];\n\n if (confettiOptionKeys.includes(prop)) {\n confettiOptions[prop] = val;\n } else if (refProps.includes(prop)) {\n refProps[prop] = val;\n } else {\n rest[prop] = val;\n }\n });\n return [confettiOptions, rest, refs];\n}\n\nvar ConfettiReactInternal = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ConfettiReactInternal, _Component);\n\n function ConfettiReactInternal(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.canvas = React.createRef();\n _this.canvas = props.canvasRef || ref;\n return _this;\n }\n\n var _proto = ConfettiReactInternal.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.canvas.current) {\n var opts = extractCanvasProps(this.props)[0];\n this.confetti = new Confetti(this.canvas.current, opts);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var confettiOptions = extractCanvasProps(this.props)[0];\n\n if (this.confetti) {\n this.confetti.options = confettiOptions;\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.confetti) {\n this.confetti.stop();\n }\n\n this.confetti = undefined;\n };\n\n _proto.render = function render() {\n var _extractCanvasProps = extractCanvasProps(this.props),\n confettiOptions = _extractCanvasProps[0],\n passedProps = _extractCanvasProps[1];\n\n var canvasStyles = _extends({\n zIndex: 2,\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n }, passedProps.style);\n\n return React.createElement(\"canvas\", Object.assign({\n width: confettiOptions.width,\n height: confettiOptions.height,\n ref: this.canvas\n }, passedProps, {\n style: canvasStyles\n }));\n };\n\n return ConfettiReactInternal;\n}(Component);\n\nConfettiReactInternal.defaultProps = /*#__PURE__*/_extends({}, confettiDefaults);\nConfettiReactInternal.displayName = 'ConfettiReact'; // eslint-disable-next-line react/display-name\n\nvar Index = /*#__PURE__*/React.forwardRef(function (props, _ref) {\n return React.createElement(ConfettiReactInternal, Object.assign({\n canvasRef: ref\n }, props));\n});\n\nexport default Index;\nexport { Index };\n//# sourceMappingURL=confetti-react.esm.js.map\n","import { Fragment as _Fragment, jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { useHydrated } from \"./use-hydrated.js\";\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * Example: Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * {() => <Chart />}\n * </ClientOnly>\n * );\n * ```\n */\nexport function ClientOnly({ children, fallback = null }) {\n return useHydrated() ? _jsx(_Fragment, { children: children() }) : _jsx(_Fragment, { children: fallback });\n}\n//# sourceMappingURL=client-only.js.map","import { Index as ConfettiShower } from 'confetti-react'\nimport { ClientOnly } from 'remix-utils/client-only'\n\nexport function Confetti({ id }: { id?: string | null }) {\n\tif (!id) return null\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<ConfettiShower\n\t\t\t\t\tkey={id}\n\t\t\t\t\trun={Boolean(id)}\n\t\t\t\t\trecycle={false}\n\t\t\t\t\tnumberOfPieces={800}\n\t\t\t\t\twidth={window.innerWidth}\n\t\t\t\t\theight={window.innerHeight}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t)\n}\n","import { Link } from 'react-router'\nimport { Icon } from './icons.tsx'\n\nexport function ExerciseWarningBanner() {\n\treturn (\n\t\t<div className=\"fixed left-0 right-0 top-0 z-50 border-b border-destructive bg-destructive\">\n\t\t\t<div className=\"relative w-full p-4\">\n\t\t\t\t{/* Full-banner clickable link, visually hidden but covers the banner */}\n\t\t\t\t<Link\n\t\t\t\t\tto=\"/workspace-structure\"\n\t\t\t\t\tclassName=\"absolute inset-0 z-10 block h-full w-full\"\n\t\t\t\t\taria-label=\"Learn more about workspace structure\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"container relative z-0 flex items-center justify-between\">\n\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"Error\"\n\t\t\t\t\t\t\tclassName=\"h-5 w-5 text-destructive-foreground\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h3 className=\"text-sm font-semibold text-destructive-foreground\">\n\t\t\t\t\t\t\t\tWarning: Changes detected in exercises directory\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<p className=\"text-xs text-destructive-foreground/80\">\n\t\t\t\t\t\t\t\tYou should typically work in the playground directory, not the\n\t\t\t\t\t\t\t\texercises directory.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex items-center gap-2 text-xs text-destructive-foreground\">\n\t\t\t\t\t\t<span>Learn more</span>\n\t\t\t\t\t\t<Icon name=\"ArrowRight\" className=\"h-3 w-3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import { useEffect } from 'react'\nimport { Toaster, toast as showToast } from 'sonner'\nimport { type Toast } from '#app/utils/toast.server.ts'\n\nexport function EpicToaster({ toast }: { toast?: Toast | null }) {\n\treturn (\n\t\t<>\n\t\t\t<Toaster closeButton position=\"top-center\" />\n\t\t\t{toast ? <ShowToast toast={toast} /> : null}\n\t\t</>\n\t)\n}\n\nfunction ShowToast({ toast }: { toast: Toast }) {\n\tconst { id, type, title, description } = toast\n\tuseEffect(() => {\n\t\tsetTimeout(() => {\n\t\t\tshowToast[type](title, { id, description })\n\t\t}, 0)\n\t}, [description, id, title, type])\n\treturn null\n}\n","import { type checkForUpdatesCached } from '@epic-web/workshop-utils/git.server'\nimport { useEffect, useRef } from 'react'\nimport { useFetcher } from 'react-router'\nimport { toast } from 'sonner'\nimport { z } from 'zod'\n\nexport function UpdateToast({\n\trepoUpdates,\n}: {\n\trepoUpdates: Awaited<ReturnType<typeof checkForUpdatesCached>>\n}) {\n\tconst { updatesAvailable } = repoUpdates\n\tconst diffLink = 'diffLink' in repoUpdates ? repoUpdates.diffLink : null\n\tconst remoteCommit =\n\t\t'remoteCommit' in repoUpdates ? repoUpdates.remoteCommit : undefined\n\tconst fetcher = useFetcher()\n\n\t// Track the in-progress toast id and update notification id\n\tconst inProgressToastId = useRef<ReturnType<typeof toast.loading> | null>(\n\t\tnull,\n\t)\n\tconst updateNotificationId = useRef<ReturnType<typeof toast.info> | null>(\n\t\tnull,\n\t)\n\tconst updateInProgress = useRef(false)\n\n\tuseEffect(() => {\n\t\tif (updatesAvailable && remoteCommit) {\n\t\t\tconst id = toast.info('New workshop updates available', {\n\t\t\t\tduration: Infinity,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{`Get the latest updates by clicking the update button. `}\n\t\t\t\t\t\t{diffLink ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={diffLink}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tView changes\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tonDismiss: () => {\n\t\t\t\t\t// No-op for now, could call a dismiss endpoint if needed\n\t\t\t\t},\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Update',\n\t\t\t\t\tonClick: async () => {\n\t\t\t\t\t\t// Dismiss the update notification immediately\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Show in-progress toast\n\t\t\t\t\t\tif (!inProgressToastId.current) {\n\t\t\t\t\t\t\tinProgressToastId.current = toast.loading('Update in progress...')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (updateInProgress.current) return\n\t\t\t\t\t\tupdateInProgress.current = true\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { EPICSHOP_PARENT_PORT, EPICSHOP_PARENT_TOKEN } =\n\t\t\t\t\t\t\t\twindow.ENV || {}\n\t\t\t\t\t\t\tif (!EPICSHOP_PARENT_PORT || !EPICSHOP_PARENT_TOKEN) {\n\t\t\t\t\t\t\t\tthrow new Error('Update API not available')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst res = await fetch(\n\t\t\t\t\t\t\t\t`http://localhost:${EPICSHOP_PARENT_PORT}/__epicshop-restart`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'x-epicshop-token': EPICSHOP_PARENT_TOKEN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Request to update workshop failed: ${res.statusText}`,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst data = await res.json().catch(() => ({}))\n\t\t\t\t\t\t\tconst schema = z.object({\n\t\t\t\t\t\t\t\tstatus: z.enum(['ok', 'error']),\n\t\t\t\t\t\t\t\tmessage: z.string().optional(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tconst parsed = schema.safeParse(data)\n\t\t\t\t\t\t\tif (!parsed.success) {\n\t\t\t\t\t\t\t\tconsole.error('Invalid response from update API', data)\n\t\t\t\t\t\t\t\tthrow new Error('Invalid response from update API')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { status, message } = parsed.data\n\t\t\t\t\t\t\tif (status === 'ok') {\n\t\t\t\t\t\t\t\tlet reloaded = false\n\t\t\t\t\t\t\t\ttoast.success('Workshop updated', {\n\t\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\t'Reloading in 2 seconds... You can reload now if you prefer.',\n\t\t\t\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\tlabel: 'Reload now',\n\t\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\t\treloaded = true\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonAutoClose: () => {\n\t\t\t\t\t\t\t\t\t\tif (!reloaded) {\n\t\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\t\tdescription: message || 'Unknown error',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\ttoast.error('Failed to update workshop', {\n\t\t\t\t\t\t\t\tdescription: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tupdateInProgress.current = false\n\t\t\t\t\t\t\tif (inProgressToastId.current) {\n\t\t\t\t\t\t\t\ttoast.dismiss(inProgressToastId.current)\n\t\t\t\t\t\t\t\tinProgressToastId.current = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tcancel: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t// Dismiss the notification toast\n\t\t\t\t\t\tif (updateNotificationId.current) {\n\t\t\t\t\t\t\ttoast.dismiss(updateNotificationId.current)\n\t\t\t\t\t\t\tupdateNotificationId.current = null\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Mute the notification persistently\n\t\t\t\t\t\tvoid fetcher.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: `update-repo-${remoteCommit}` },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tupdateNotificationId.current = id\n\t\t}\n\t}, [updatesAvailable, diffLink, remoteCommit])\n\n\treturn null\n}\n","import { muteNotification } from '@epic-web/workshop-utils/db.server'\nimport { type getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { useEffect, useRef } from 'react'\nimport { data, type ActionFunctionArgs, useFetcher } from 'react-router'\nimport { toast } from 'sonner'\n\nexport async function action({ request }: ActionFunctionArgs) {\n\tconst formData = await request.formData()\n\tconst intent = formData.get('intent')\n\tconst id = formData.get('id')\n\tif (typeof id !== 'string') {\n\t\treturn data({ error: 'Invalid notification id' }, { status: 400 })\n\t}\n\tif (intent === 'mute') {\n\t\tawait muteNotification(id)\n\t\treturn data({ success: true })\n\t}\n\treturn data({ error: 'Invalid intent' }, { status: 400 })\n}\n\nexport function Notifications({\n\tunmutedNotifications,\n}: {\n\tunmutedNotifications: Awaited<ReturnType<typeof getUnmutedNotifications>>\n}) {\n\tconst fetcher = useFetcher<typeof action>()\n\tconst fetcherRef = useRef(fetcher)\n\tconst toastedIds = useRef<Set<string>>(new Set())\n\n\tuseEffect(() => {\n\t\tfor (const notification of unmutedNotifications) {\n\t\t\tif (toastedIds.current.has(notification.id)) continue\n\t\t\ttoastedIds.current.add(notification.id)\n\n\t\t\ttoast.info(notification.title, {\n\t\t\t\tid: notification.id,\n\t\t\t\tdescription: (\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{notification.message}</p>\n\t\t\t\t\t\t{notification.link && (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={notification.link}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\tclassName=\"text-xs underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLearn more\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t),\n\t\t\t\tduration: Infinity,\n\t\t\t\taction: {\n\t\t\t\t\tlabel: 'Dismiss',\n\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\tvoid fetcherRef.current.submit(\n\t\t\t\t\t\t\t{ intent: 'mute', id: notification.id },\n\t\t\t\t\t\t\t{ method: 'post', action: '/admin/notifications' },\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}, [unmutedNotifications])\n\n\treturn null\n}\n","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/app.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f6170702e6373733f7472616e73666f726d2d6f6e6c79__\"","import \"/home/runner/work/epicshop/epicshop/packages/workshop-app/app/styles/tailwind.css?transform-only\";export default \"__VITE_CSS_URL__2f686f6d652f72756e6e65722f776f726b2f6570696373686f702f6570696373686f702f7061636b616765732f776f726b73686f702d6170702f6170702f7374796c65732f7461696c77696e642e6373733f7472616e73666f726d2d6f6e6c79__\"","import path from 'node:path'\nimport { getPresentUsers } from '@epic-web/workshop-presence/presence.server'\nimport { getApps } from '@epic-web/workshop-utils/apps.server'\nimport { getWorkshopConfig } from '@epic-web/workshop-utils/config.server'\nimport {\n\tgetPreferences,\n\treadOnboardingData,\n\tgetMutedNotifications,\n} from '@epic-web/workshop-utils/db.server'\nimport { getEnv } from '@epic-web/workshop-utils/env.server'\nimport {\n\tgetProgress,\n\tgetUserInfo,\n\tuserHasAccessToWorkshop,\n} from '@epic-web/workshop-utils/epic-api.server'\nimport {\n\tcheckForUpdatesCached,\n\tcheckForExerciseChanges,\n} from '@epic-web/workshop-utils/git.server'\nimport { getUnmutedNotifications } from '@epic-web/workshop-utils/notifications.server'\nimport { makeTimings } from '@epic-web/workshop-utils/timing.server'\nimport {\n\tgetSetClientIdCookieHeader,\n\tgetUserId,\n} from '@epic-web/workshop-utils/user.server'\nimport { checkConnectionCached } from '@epic-web/workshop-utils/utils.server'\n\nimport {\n\tdata,\n\tredirect,\n\ttype LinksFunction,\n\tLinks,\n\tMeta,\n\tOutlet,\n\tScripts,\n\tScrollRestoration,\n\tuseLoaderData,\n\tuseNavigation,\n} from 'react-router'\nimport { promiseHash } from 'remix-utils/promise'\nimport { useSpinDelay } from 'spin-delay'\nimport { type Route } from './+types/root.tsx'\nimport { Confetti } from './components/confetti'\nimport { GeneralErrorBoundary } from './components/error-boundary'\nimport { ExerciseWarningBanner } from './components/exercise-warning-banner'\nimport { EpicProgress } from './components/progress-bar'\nimport { EpicToaster } from './components/toaster'\nimport { TooltipProvider } from './components/ui/tooltip'\nimport { UpdateToast } from './components/update-repo'\nimport { Notifications } from './routes/admin+/notifications'\nimport { useTheme } from './routes/theme/index'\nimport { getTheme } from './routes/theme/theme-session.server'\nimport appStylesheetUrl from './styles/app.css?url'\nimport tailwindStylesheetUrl from './styles/tailwind.css?url'\nimport { ClientHintCheck, getHints } from './utils/client-hints'\nimport { getConfetti } from './utils/confetti.server'\nimport { cn, combineHeaders, getDomainUrl, useAltDown } from './utils/misc'\nimport { Presence } from './utils/presence'\nimport { getSeoMetaTags } from './utils/seo'\nimport { getToast } from './utils/toast.server'\n\nexport const links: LinksFunction = () => {\n\treturn [\n\t\t{ rel: 'stylesheet', href: '/neogrotesk-font.css' },\n\t\t{\n\t\t\trel: 'stylesheet',\n\t\t\thref: 'https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,200;0,300;0,400;0,500;0,600;1,700&display=swap',\n\t\t},\n\t\t{ rel: 'stylesheet', href: tailwindStylesheetUrl },\n\t\t{ rel: 'stylesheet', href: appStylesheetUrl },\n\t\t{\n\t\t\trel: 'icon',\n\t\t\thref: '/favicon.ico',\n\t\t\tsizes: '48x48',\n\t\t},\n\t\t{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },\n\t]\n}\n\nexport const meta: Route.MetaFunction = ({ data }) => {\n\tif (!data) return []\n\n\treturn getSeoMetaTags({\n\t\tinstructor: data.instructor,\n\t\ttitle: data.workshopTitle,\n\t\tdescription: data.workshopSubtitle,\n\t\trequestInfo: data.requestInfo,\n\t})\n}\n\nexport type RootLoaderData = Route.ComponentProps['loaderData']\n\nexport async function loader({ request }: Route.LoaderArgs) {\n\tconst timings = makeTimings('rootLoader')\n\tconst workshopConfig = getWorkshopConfig()\n\tconst {\n\t\ttitle: workshopTitle,\n\t\tsubtitle: workshopSubtitle,\n\t\tinstructor,\n\t\tonboardingVideo,\n\t} = workshopConfig\n\n\tconst onboarding = await readOnboardingData()\n\tif (\n\t\t!ENV.EPICSHOP_DEPLOYED &&\n\t\t!onboarding?.tourVideosWatched.includes(onboardingVideo)\n\t) {\n\t\tif (new URL(request.url).pathname !== '/onboarding') {\n\t\t\tthrow redirect('/onboarding')\n\t\t}\n\t}\n\tconst theme = getTheme(request)\n\tconst { confettiId, headers: confettiHeaders } = getConfetti(request)\n\tconst { toast, headers: toastHeaders } = await getToast(request)\n\tconst isOnlinePromise = checkConnectionCached({ request, timings })\n\n\tconst asyncStuff = await promiseHash({\n\t\tuserId: getUserId({ request }),\n\t\tpreferences: getPreferences(),\n\t\tprogress: getProgress({ timings }).catch((e) => {\n\t\t\tconsole.error('Failed to get progress', e)\n\t\t\tconst emptyProgress: Awaited<ReturnType<typeof getProgress>> = []\n\t\t\treturn emptyProgress\n\t\t}),\n\t\tuser: getUserInfo(),\n\t\tuserHasAccess: userHasAccessToWorkshop({ request, timings }),\n\t\tapps: getApps({ request, timings }),\n\t\trepoUpdates: checkForUpdatesCached(),\n\t\tunmutedNotifications: getUnmutedNotifications(),\n\t\texerciseChanges: checkForExerciseChanges(),\n\t})\n\n\tconst presentUsers = await getPresentUsers({\n\t\trequest,\n\t\ttimings,\n\t})\n\n\t// Filter out repoUpdates if muted\n\tconst mutedNotifications = await getMutedNotifications()\n\tlet repoUpdates = asyncStuff.repoUpdates\n\tif (\n\t\trepoUpdates &&\n\t\t'remoteCommit' in repoUpdates &&\n\t\trepoUpdates.remoteCommit &&\n\t\tmutedNotifications.includes(`update-repo-${repoUpdates.remoteCommit}`)\n\t) {\n\t\trepoUpdates = { ...repoUpdates, updatesAvailable: false }\n\t}\n\n\treturn data(\n\t\t{\n\t\t\t...asyncStuff,\n\t\t\tworkshopConfig,\n\t\t\tworkshopTitle,\n\t\t\tworkshopSubtitle,\n\t\t\tinstructor,\n\t\t\tapps: asyncStuff.apps.map(({ name, fullPath, relativePath }) => ({\n\t\t\t\tname,\n\t\t\t\tfullPath,\n\t\t\t\trelativePath,\n\t\t\t})),\n\t\t\tENV: getEnv(),\n\t\t\trequestInfo: {\n\t\t\t\tprotocol: new URL(request.url).protocol,\n\t\t\t\thostname: new URL(request.url).hostname,\n\t\t\t\tport: new URL(request.url).port,\n\t\t\t\torigin: new URL(request.url).origin,\n\t\t\t\tdomain: getDomainUrl(request),\n\t\t\t\thints: getHints(request),\n\t\t\t\tpath: new URL(request.url).pathname,\n\t\t\t\tsession: { theme },\n\t\t\t\tseparator: path.sep,\n\t\t\t\tonline: await isOnlinePromise,\n\t\t\t},\n\t\t\ttoast,\n\t\t\tconfettiId,\n\t\t\tpresence: {\n\t\t\t\tusers: presentUsers,\n\t\t\t},\n\t\t\trepoUpdates,\n\t\t\texerciseChanges: asyncStuff.exerciseChanges,\n\t\t},\n\t\t{\n\t\t\theaders: combineHeaders(\n\t\t\t\ttoastHeaders,\n\t\t\t\tconfettiHeaders,\n\t\t\t\t{ 'Server-Timing': timings.toString() },\n\t\t\t\tasyncStuff.userId?.type === 'cookie.randomId'\n\t\t\t\t\t? { 'Set-Cookie': getSetClientIdCookieHeader(asyncStuff.userId.id) }\n\t\t\t\t\t: undefined,\n\t\t\t),\n\t\t},\n\t)\n}\n\nfunction Document({\n\tchildren,\n\tenv = {},\n\tclassName,\n\tstyle,\n}: {\n\tchildren: React.ReactNode\n\tenv?: Record<string, unknown>\n\tclassName: string\n\tstyle?: React.CSSProperties\n}) {\n\treturn (\n\t\t<html lang=\"en\" className={className} style={style}>\n\t\t\t<head>\n\t\t\t\t<ClientHintCheck />\n\t\t\t\t<Meta />\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n\t\t\t\t<Links />\n\t\t\t\t<script\n\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t__html: `window.ENV = ${JSON.stringify(env)}`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</head>\n\t\t\t<body className=\"bg-background text-foreground scrollbar-thin scrollbar-thumb-scrollbar h-screen-safe\">\n\t\t\t\t{children}\n\t\t\t\t<ScrollRestoration />\n\t\t\t\t<Scripts />\n\t\t\t</body>\n\t\t</html>\n\t)\n}\n\nfunction App() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst navigation = useNavigation()\n\tconst showSpinner = useSpinDelay(navigation.state !== 'idle', {\n\t\tdelay: 400,\n\t\tminDuration: 200,\n\t})\n\tconst altDown = useAltDown()\n\n\tconst theme = useTheme()\n\treturn (\n\t\t<Document\n\t\t\tstyle={\n\t\t\t\tdata.preferences?.fontSize\n\t\t\t\t\t? { fontSize: `${data.preferences?.fontSize}px` }\n\t\t\t\t\t: {}\n\t\t\t}\n\t\t\tclassName={cn(\n\t\t\t\t'antialiased h-screen-safe',\n\t\t\t\ttheme,\n\t\t\t\t{ 'cursor-progress': showSpinner },\n\t\t\t\taltDown ? 'alt-down' : null,\n\t\t\t)}\n\t\t\tenv={data.ENV}\n\t\t>\n\t\t\t{data.exerciseChanges &&\n\t\t\t\t!data.preferences?.exerciseWarning?.dismissed && (\n\t\t\t\t\t<ExerciseWarningBanner />\n\t\t\t\t)}\n\t\t\t<Outlet />\n\t\t\t<Confetti id={data.confettiId} />\n\t\t\t<EpicToaster toast={data.toast} />\n\t\t\t<UpdateToast repoUpdates={data.repoUpdates} />\n\t\t\t<EpicProgress />\n\t\t\t<Notifications unmutedNotifications={data.unmutedNotifications} />\n\t\t</Document>\n\t)\n}\n\nexport default function AppWithProviders() {\n\tconst { user } = useLoaderData<typeof loader>()\n\treturn (\n\t\t<Presence user={user}>\n\t\t\t<TooltipProvider>\n\t\t\t\t<App />\n\t\t\t</TooltipProvider>\n\t\t</Presence>\n\t)\n}\n\nexport function ErrorBoundary() {\n\treturn (\n\t\t<Document className=\"h-screen-safe\">\n\t\t\t<GeneralErrorBoundary />\n\t\t</Document>\n\t)\n}\n"],"names":["tweenFunctions","t","b","_c","d","c","p","s","v","tweenFunctions_1","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","_extends","source","key","_inheritsLoose","subClass","superClass","_setPrototypeOf","o","degreesToRads","degrees","randomRange","min","max","randomInt","ParticleShape","RotationDirection","Particle","context","getOptions","x","y","_this$getOptions","colors","initialVelocityX","initialVelocityY","_proto","_this$getOptions2","gravity","wind","friction","opacity","drawShape","rotateDelta","ParticleGeneratorClass","canvas","_this","newParticleX","newParticleY","particlesGenerated","lastNumberOfPieces","run","recycle","numberOfPieces","debug","tweenFunction","tweenDuration","nP","activeCount","now","tweenInitTime","progressTime","tweenedVal","numToAdd","ctx","confettiDefaults","tweens","Confetti","opts","computedConfettiDefaults","_this$options","onConfettiComplete","lastRunState","lastRecycleState","ref","React","extractCanvasProps","confettiOptions","refs","rest","confettiOptionKeys","refProps","prop","val","ConfettiReactInternal","_Component","_extractCanvasProps","passedProps","canvasStyles","Component","Index","_ref","ClientOnly","children","fallback","useHydrated","_jsx","_Fragment","id","jsx","ConfettiShower","ExerciseWarningBanner","jsxs","Link","Icon","EpicToaster","toast","Fragment","Toaster","ShowToast","type","title","description","useEffect","showToast","UpdateToast","repoUpdates","updatesAvailable","diffLink","remoteCommit","fetcher","useFetcher","inProgressToastId","useRef","updateNotificationId","updateInProgress","EPICSHOP_PARENT_PORT","EPICSHOP_PARENT_TOKEN","res","data","parsed","z.object","z.enum","z.string","status","message","reloaded","err","Notifications","unmutedNotifications","fetcherRef","toastedIds","Set","notification","current","has","add","info","link","href","className","duration","Infinity","action","label","onClick","submit","intent","method","appStylesheetUrl","tailwindStylesheetUrl","links","rel","sizes","meta","getSeoMetaTags","instructor","workshopTitle","workshopSubtitle","requestInfo","Document","env","style","lang","ClientHintCheck","Meta","charSet","name","content","Links","dangerouslySetInnerHTML","__html","JSON","stringify","ScrollRestoration","Scripts","App","useLoaderData","navigation","useNavigation","showSpinner","useSpinDelay","state","delay","minDuration","altDown","useAltDown","theme","useTheme","preferences","fontSize","cn","ENV","exerciseChanges","exerciseWarning","dismissed","Outlet","confettiId","EpicProgress","root","_UNSAFE_withComponentProps","user","Presence","TooltipProvider","ErrorBoundary","_UNSAFE_withErrorBoundaryProps","GeneralErrorBoundary"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|