UNPKG

matrix-react-sdk

Version:
102 lines (99 loc) 17 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.DefaultOptions = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _arrays = require("../../utils/arrays"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2020-2023 The Matrix.org Foundation C.I.C. Copyright 2021 Josias Allestad SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const DefaultOptions = exports.DefaultOptions = { maxCount: 600, speed: 12 }; const KEY_FRAME_INTERVAL = 15; class Rainfall { constructor(options) { (0, _defineProperty2.default)(this, "options", void 0); (0, _defineProperty2.default)(this, "context", null); (0, _defineProperty2.default)(this, "particles", []); (0, _defineProperty2.default)(this, "lastAnimationTime", 0); (0, _defineProperty2.default)(this, "isRunning", false); (0, _defineProperty2.default)(this, "start", async (canvas, timeout = 3000) => { if (!canvas) { return; } this.context = canvas.getContext("2d"); this.particles = []; const count = this.options.maxCount; while (this.particles.length < count) { this.particles.push(this.resetParticle({}, canvas.width, canvas.height)); } this.isRunning = true; requestAnimationFrame(this.renderLoop); if (timeout) { window.setTimeout(this.stop, timeout); } }); (0, _defineProperty2.default)(this, "stop", async () => { this.isRunning = false; }); (0, _defineProperty2.default)(this, "resetParticle", (particle, width, height) => { particle.x = Math.random() * width; particle.y = Math.random() * -height; particle.width = Math.random() * 1.5; particle.height = particle.width * 15 + 4; particle.speed = Math.random() * this.options.speed * 4 / 5 + this.options.speed; return particle; }); (0, _defineProperty2.default)(this, "renderLoop", () => { if (!this.context || !this.context.canvas) { return; } if (this.particles.length === 0) { this.context.clearRect(0, 0, this.context.canvas.width, this.context.canvas.height); } else { const timeDelta = Date.now() - this.lastAnimationTime; if (timeDelta >= KEY_FRAME_INTERVAL || !this.lastAnimationTime) { // Clear the screen first this.context.clearRect(0, 0, this.context.canvas.width, this.context.canvas.height); this.lastAnimationTime = Date.now(); this.animateAndRenderRaindrops(); } requestAnimationFrame(this.renderLoop); } }); (0, _defineProperty2.default)(this, "animateAndRenderRaindrops", () => { if (!this.context || !this.context.canvas) { return; } const height = this.context.canvas.height; for (const particle of (0, _arrays.arrayFastClone)(this.particles)) { particle.y += particle.speed; this.context.save(); this.context.beginPath(); this.context.rect(particle.x, particle.y, particle.width, particle.height); this.context.fillStyle = "#5dadec"; // light blue this.context.fill(); this.context.closePath(); this.context.restore(); // Remove dead raindrops const maxBounds = height * 2; if (particle.y > height + maxBounds) { const idx = this.particles.indexOf(particle); this.particles.splice(idx, 1); } } }); this.options = _objectSpread(_objectSpread({}, DefaultOptions), options); } } exports.default = Rainfall; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXJyYXlzIiwicmVxdWlyZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkRlZmF1bHRPcHRpb25zIiwiZXhwb3J0cyIsIm1heENvdW50Iiwic3BlZWQiLCJLRVlfRlJBTUVfSU5URVJWQUwiLCJSYWluZmFsbCIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNhbnZhcyIsInRpbWVvdXQiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInBhcnRpY2xlcyIsImNvdW50IiwicmVzZXRQYXJ0aWNsZSIsIndpZHRoIiwiaGVpZ2h0IiwiaXNSdW5uaW5nIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVuZGVyTG9vcCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJzdG9wIiwicGFydGljbGUiLCJ4IiwiTWF0aCIsInJhbmRvbSIsInkiLCJjbGVhclJlY3QiLCJ0aW1lRGVsdGEiLCJEYXRlIiwibm93IiwibGFzdEFuaW1hdGlvblRpbWUiLCJhbmltYXRlQW5kUmVuZGVyUmFpbmRyb3BzIiwiYXJyYXlGYXN0Q2xvbmUiLCJzYXZlIiwiYmVnaW5QYXRoIiwicmVjdCIsImZpbGxTdHlsZSIsImZpbGwiLCJjbG9zZVBhdGgiLCJyZXN0b3JlIiwibWF4Qm91bmRzIiwiaWR4IiwiaW5kZXhPZiIsInNwbGljZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZmZlY3RzL3JhaW5mYWxsL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwLTIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDIxIEpvc2lhcyBBbGxlc3RhZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4gKi9cbmltcG9ydCBJQ2FudmFzRWZmZWN0IGZyb20gXCIuLi9JQ2FudmFzRWZmZWN0XCI7XG5pbXBvcnQgeyBhcnJheUZhc3RDbG9uZSB9IGZyb20gXCIuLi8uLi91dGlscy9hcnJheXNcIjtcblxuZXhwb3J0IHR5cGUgUmFpbmZhbGxPcHRpb25zID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByYWluZHJvcHMgdG8gcmVuZGVyIGF0IGEgZ2l2ZW4gdGltZVxuICAgICAqL1xuICAgIG1heENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHNwZWVkIG9mIHRoZSByYWluZHJvcHNcbiAgICAgKi9cbiAgICBzcGVlZDogbnVtYmVyO1xufTtcblxudHlwZSBSYWluZHJvcCA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgc3BlZWQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0T3B0aW9uczogUmFpbmZhbGxPcHRpb25zID0ge1xuICAgIG1heENvdW50OiA2MDAsXG4gICAgc3BlZWQ6IDEyLFxufTtcblxuY29uc3QgS0VZX0ZSQU1FX0lOVEVSVkFMID0gMTU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhaW5mYWxsIGltcGxlbWVudHMgSUNhbnZhc0VmZmVjdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSYWluZmFsbE9wdGlvbnM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLkRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIHBhcnRpY2xlczogQXJyYXk8UmFpbmRyb3A+ID0gW107XG4gICAgcHJpdmF0ZSBsYXN0QW5pbWF0aW9uVGltZSA9IDA7XG5cbiAgICBwdWJsaWMgaXNSdW5uaW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc3RhcnQgPSBhc3luYyAoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgdGltZW91dCA9IDMwMDApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKCFjYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICB0aGlzLnBhcnRpY2xlcyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMub3B0aW9ucy5tYXhDb3VudDtcbiAgICAgICAgd2hpbGUgKHRoaXMucGFydGljbGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcnRpY2xlcy5wdXNoKHRoaXMucmVzZXRQYXJ0aWNsZSh7fSBhcyBSYWluZHJvcCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXJMb29wKTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc3RvcCwgdGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIHN0b3AgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVzZXRQYXJ0aWNsZSA9IChwYXJ0aWNsZTogUmFpbmRyb3AsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUmFpbmRyb3AgPT4ge1xuICAgICAgICBwYXJ0aWNsZS54ID0gTWF0aC5yYW5kb20oKSAqIHdpZHRoO1xuICAgICAgICBwYXJ0aWNsZS55ID0gTWF0aC5yYW5kb20oKSAqIC1oZWlnaHQ7XG4gICAgICAgIHBhcnRpY2xlLndpZHRoID0gTWF0aC5yYW5kb20oKSAqIDEuNTtcbiAgICAgICAgcGFydGljbGUuaGVpZ2h0ID0gcGFydGljbGUud2lkdGggKiAxNSArIDQ7XG4gICAgICAgIHBhcnRpY2xlLnNwZWVkID0gKE1hdGgucmFuZG9tKCkgKiB0aGlzLm9wdGlvbnMuc3BlZWQgKiA0KSAvIDUgKyB0aGlzLm9wdGlvbnMuc3BlZWQ7XG4gICAgICAgIHJldHVybiBwYXJ0aWNsZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZW5kZXJMb29wID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5jb250ZXh0LmNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcnRpY2xlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCwgdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEFuaW1hdGlvblRpbWU7XG4gICAgICAgICAgICBpZiAodGltZURlbHRhID49IEtFWV9GUkFNRV9JTlRFUlZBTCB8fCAhdGhpcy5sYXN0QW5pbWF0aW9uVGltZSkge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBzY3JlZW4gZmlyc3RcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIHRoaXMuY29udGV4dC5jYW52YXMud2lkdGgsIHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RBbmltYXRpb25UaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGVBbmRSZW5kZXJSYWluZHJvcHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnJlbmRlckxvb3ApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgYW5pbWF0ZUFuZFJlbmRlclJhaW5kcm9wcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQgfHwgIXRoaXMuY29udGV4dC5jYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRleHQuY2FudmFzLmhlaWdodDtcbiAgICAgICAgZm9yIChjb25zdCBwYXJ0aWNsZSBvZiBhcnJheUZhc3RDbG9uZSh0aGlzLnBhcnRpY2xlcykpIHtcbiAgICAgICAgICAgIHBhcnRpY2xlLnkgKz0gcGFydGljbGUuc3BlZWQ7XG5cbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVjdChwYXJ0aWNsZS54LCBwYXJ0aWNsZS55LCBwYXJ0aWNsZS53aWR0aCwgcGFydGljbGUuaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBcIiM1ZGFkZWNcIjsgLy8gbGlnaHQgYmx1ZVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBkZWFkIHJhaW5kcm9wc1xuICAgICAgICAgICAgY29uc3QgbWF4Qm91bmRzID0gaGVpZ2h0ICogMjtcbiAgICAgICAgICAgIGlmIChwYXJ0aWNsZS55ID4gaGVpZ2h0ICsgbWF4Qm91bmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5wYXJ0aWNsZXMuaW5kZXhPZihwYXJ0aWNsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUFvRCxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEs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