UNPKG

matrix-react-sdk

Version:
73 lines (70 loc) 12.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useSmoothAnimation = useSmoothAnimation; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _react = require("react"); var _SettingsStore = _interopRequireDefault(require("../settings/SettingsStore")); var _useAnimation = require("./useAnimation"); 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 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const debuglog = (...args) => { if (_SettingsStore.default.getValue("debug_animation")) { _logger.logger.log.call(console, "Animation debuglog:", ...args); } }; /** * Utility function to smoothly animate to a certain target value * @param initialValue Initial value to be used as initial starting point * @param targetValue Desired value to animate to (can be changed repeatedly to whatever is current at that time) * @param duration Duration that each animation should take, specify 0 to skip animating */ function useSmoothAnimation(initialValue, targetValue, duration) { const state = (0, _react.useRef)({ timestamp: null, value: initialValue }); const [currentValue, setCurrentValue] = (0, _react.useState)(initialValue); const [currentStepSize, setCurrentStepSize] = (0, _react.useState)(0); (0, _react.useEffect)(() => { const totalDelta = targetValue - state.current.value; setCurrentStepSize(totalDelta / duration); state.current = _objectSpread(_objectSpread({}, state.current), {}, { timestamp: null }); }, [duration, targetValue]); const update = (0, _react.useCallback)(timestamp => { if (!state.current.timestamp) { state.current = _objectSpread(_objectSpread({}, state.current), {}, { timestamp }); return true; } if (Math.abs(currentStepSize) < Number.EPSILON) { return false; } const timeDelta = timestamp - state.current.timestamp; const valueDelta = currentStepSize * timeDelta; const maxValueDelta = targetValue - state.current.value; const clampedValueDelta = Math.sign(valueDelta) * Math.min(Math.abs(maxValueDelta), Math.abs(valueDelta)); const value = state.current.value + clampedValueDelta; debuglog(`Animating to ${targetValue} at ${value} timeDelta=${timeDelta}, valueDelta=${valueDelta}`); setCurrentValue(value); state.current = { value, timestamp }; return Math.abs(maxValueDelta) > Number.EPSILON; }, [currentStepSize, targetValue]); (0, _useAnimation.useAnimation)(duration > 0, update); return duration > 0 ? currentValue : targetValue; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9TZXR0aW5nc1N0b3JlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VBbmltYXRpb24iLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZWJ1Z2xvZyIsImFyZ3MiLCJTZXR0aW5nc1N0b3JlIiwiZ2V0VmFsdWUiLCJsb2dnZXIiLCJsb2ciLCJjYWxsIiwiY29uc29sZSIsInVzZVNtb290aEFuaW1hdGlvbiIsImluaXRpYWxWYWx1ZSIsInRhcmdldFZhbHVlIiwiZHVyYXRpb24iLCJzdGF0ZSIsInVzZVJlZiIsInRpbWVzdGFtcCIsInZhbHVlIiwiY3VycmVudFZhbHVlIiwic2V0Q3VycmVudFZhbHVlIiwidXNlU3RhdGUiLCJjdXJyZW50U3RlcFNpemUiLCJzZXRDdXJyZW50U3RlcFNpemUiLCJ1c2VFZmZlY3QiLCJ0b3RhbERlbHRhIiwiY3VycmVudCIsInVwZGF0ZSIsInVzZUNhbGxiYWNrIiwiTWF0aCIsImFicyIsIk51bWJlciIsIkVQU0lMT04iLCJ0aW1lRGVsdGEiLCJ2YWx1ZURlbHRhIiwibWF4VmFsdWVEZWx0YSIsImNsYW1wZWRWYWx1ZURlbHRhIiwic2lnbiIsIm1pbiIsInVzZUFuaW1hdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VTbW9vdGhBbmltYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IHsgdXNlQW5pbWF0aW9uIH0gZnJvbSBcIi4vdXNlQW5pbWF0aW9uXCI7XG5cbmNvbnN0IGRlYnVnbG9nID0gKC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgaWYgKFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoXCJkZWJ1Z19hbmltYXRpb25cIikpIHtcbiAgICAgICAgbG9nZ2VyLmxvZy5jYWxsKGNvbnNvbGUsIFwiQW5pbWF0aW9uIGRlYnVnbG9nOlwiLCAuLi5hcmdzKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gc21vb3RobHkgYW5pbWF0ZSB0byBhIGNlcnRhaW4gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIEluaXRpYWwgdmFsdWUgdG8gYmUgdXNlZCBhcyBpbml0aWFsIHN0YXJ0aW5nIHBvaW50XG4gKiBAcGFyYW0gdGFyZ2V0VmFsdWUgRGVzaXJlZCB2YWx1ZSB0byBhbmltYXRlIHRvIChjYW4gYmUgY2hhbmdlZCByZXBlYXRlZGx5IHRvIHdoYXRldmVyIGlzIGN1cnJlbnQgYXQgdGhhdCB0aW1lKVxuICogQHBhcmFtIGR1cmF0aW9uIER1cmF0aW9uIHRoYXQgZWFjaCBhbmltYXRpb24gc2hvdWxkIHRha2UsIHNwZWNpZnkgMCB0byBza2lwIGFuaW1hdGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21vb3RoQW5pbWF0aW9uKGluaXRpYWxWYWx1ZTogbnVtYmVyLCB0YXJnZXRWYWx1ZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZVJlZjx7IHRpbWVzdGFtcDogRE9NSGlnaFJlc1RpbWVTdGFtcCB8IG51bGw7IHZhbHVlOiBudW1iZXIgfT4oe1xuICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3QgW2N1cnJlbnRWYWx1ZSwgc2V0Q3VycmVudFZhbHVlXSA9IHVzZVN0YXRlPG51bWJlcj4oaW5pdGlhbFZhbHVlKTtcbiAgICBjb25zdCBbY3VycmVudFN0ZXBTaXplLCBzZXRDdXJyZW50U3RlcFNpemVdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsRGVsdGEgPSB0YXJnZXRWYWx1ZSAtIHN0YXRlLmN1cnJlbnQudmFsdWU7XG4gICAgICAgIHNldEN1cnJlbnRTdGVwU2l6ZSh0b3RhbERlbHRhIC8gZHVyYXRpb24pO1xuICAgICAgICBzdGF0ZS5jdXJyZW50ID0geyAuLi5zdGF0ZS5jdXJyZW50LCB0aW1lc3RhbXA6IG51bGwgfTtcbiAgICB9LCBbZHVyYXRpb24sIHRhcmdldFZhbHVlXSk7XG5cbiAgICBjb25zdCB1cGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHRpbWVzdGFtcDogRE9NSGlnaFJlc1RpbWVTdGFtcCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5jdXJyZW50LnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnQgPSB7IC4uLnN0YXRlLmN1cnJlbnQsIHRpbWVzdGFtcCB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoY3VycmVudFN0ZXBTaXplKSA8IE51bWJlci5FUFNJTE9OKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSB0aW1lc3RhbXAgLSBzdGF0ZS5jdXJyZW50LnRpbWVzdGFtcDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRGVsdGEgPSBjdXJyZW50U3RlcFNpemUgKiB0aW1lRGVsdGE7XG4gICAgICAgICAgICBjb25zdCBtYXhWYWx1ZURlbHRhID0gdGFyZ2V0VmFsdWUgLSBzdGF0ZS5jdXJyZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY2xhbXBlZFZhbHVlRGVsdGEgPSBNYXRoLnNpZ24odmFsdWVEZWx0YSkgKiBNYXRoLm1pbihNYXRoLmFicyhtYXhWYWx1ZURlbHRhKSwgTWF0aC5hYnModmFsdWVEZWx0YSkpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5jdXJyZW50LnZhbHVlICsgY2xhbXBlZFZhbHVlRGVsdGE7XG5cbiAgICAgICAgICAgIGRlYnVnbG9nKGBBbmltYXRpbmcgdG8gJHt0YXJnZXRWYWx1ZX0gYXQgJHt2YWx1ZX0gdGltZURlbHRhPSR7dGltZURlbHRhfSwgdmFsdWVEZWx0YT0ke3ZhbHVlRGVsdGF9YCk7XG5cbiAgICAgICAgICAgIHNldEN1cnJlbnRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBzdGF0ZS5jdXJyZW50ID0geyB2YWx1ZSwgdGltZXN0YW1wIH07XG5cbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhtYXhWYWx1ZURlbHRhKSA+IE51bWJlci5FUFNJTE9OO1xuICAgICAgICB9LFxuICAgICAgICBbY3VycmVudFN0ZXBTaXplLCB0YXJnZXRWYWx1ZV0sXG4gICAgKTtcblxuICAgIHVzZUFuaW1hdGlvbihkdXJhdGlvbiA+IDAsIHVwZGF0ZSk7XG5cbiAgICByZXR1cm4gZHVyYXRpb24gPiAwID8gY3VycmVudFZhbHVlIDogdGFyZ2V0VmFsdWU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBQThDLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsQ0FBQUMsT0FBQSxFQUFBakIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFlLHlCQUFBLEdBQUFmLE1BQUEsQ0FBQWdCLGdCQUFBLENBQUFuQixDQUFBLEVB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