UNPKG

@shopify/react-native-skia

Version:

High-performance React Native Graphics using Skia

56 lines (40 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useVectorInterpolation = exports.usePathInterpolation = exports.useClock = exports.notifyChange = void 0; var _react = require("react"); var _animation = require("../../animation"); var _skia = require("../../skia"); var _moduleWrapper = require("./moduleWrapper"); const notifyChange = value => { "worklet"; // eslint-disable-next-line @typescript-eslint/no-explicit-any value._value = value.value; }; exports.notifyChange = notifyChange; const useClock = () => { const clock = (0, _moduleWrapper.useSharedValue)(0); (0, _moduleWrapper.useFrameCallback)(info => { clock.value = info.timeSinceFirstFrame; }); return clock; }; /** * @worklet */ exports.useClock = useClock; const useInterpolator = (factory, value, interpolator, input, output, options) => { // eslint-disable-next-line react-hooks/exhaustive-deps const init = (0, _react.useMemo)(() => factory(), []); const result = (0, _moduleWrapper.useSharedValue)(init); (0, _moduleWrapper.useAnimatedReaction)(() => value.value, val => { result.value = interpolator(val, input, output, options, result.value); notifyChange(result); }, [input, output, options]); return result; }; const usePathInterpolation = (value, input, outputRange, options) => useInterpolator(() => _skia.Skia.Path.Make(), value, _animation.interpolatePaths, input, outputRange, options); exports.usePathInterpolation = usePathInterpolation; const useVectorInterpolation = (value, input, outputRange, options) => useInterpolator(() => _skia.Skia.Point(0, 0), value, _animation.interpolateVector, input, outputRange, options); exports.useVectorInterpolation = useVectorInterpolation; //# sourceMappingURL=interpolators.js.map