UNPKG

react-native-fiesta

Version:

A set of celebration animations powered by Skia. Engage more with your users by celebrating in your React Native application.

64 lines (63 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Confetti = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNativeSkia = require("@shopify/react-native-skia"); var _reactNativeReanimated = require("react-native-reanimated"); var _dimensions = require("../constants/dimensions"); var _confettis = require("../utils/confettis"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const Confetti = exports.Confetti = /*#__PURE__*/(0, _react.memo)(({ initialPosition = { x: 0, y: 0 }, color = '#fff', index = 0, size = 30, duration = _confettis.DEFAULT_ANIMATION_DURATION }) => { const randomDuration = (0, _react.useMemo)(() => (0, _confettis.randomIntFromInterval)(duration, duration * 1.5), [duration]); const yPosition = (0, _reactNativeReanimated.useSharedValue)(-_dimensions.screenHeight / 2 + initialPosition.y); const xOrigin = (0, _reactNativeReanimated.useSharedValue)(initialPosition.x); const rotateValue = (0, _reactNativeReanimated.useSharedValue)(0); const scaleYValue = (0, _reactNativeReanimated.useSharedValue)(Math.random() < 0.5 ? -0.5 : 0.5); (0, _react.useEffect)(() => { yPosition.value = (0, _reactNativeReanimated.withTiming)(_dimensions.screenHeight + 300, { duration: randomDuration }); xOrigin.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(initialPosition.x + (0, _confettis.randomIntFromInterval)(100, 50), { duration: randomDuration }), -1, true); rotateValue.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)((0, _confettis.degreesToRadians)(Math.random() < 0.5 ? -360 : 360), { duration: randomDuration / 2 }), -1, true); scaleYValue.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(0, { duration: randomDuration / 2 }), -1, true); }, [initialPosition.x, randomDuration, rotateValue, scaleYValue, xOrigin, yPosition]); const origin = (0, _reactNativeReanimated.useDerivedValue)(() => (0, _reactNativeSkia.vec)(xOrigin.value, yPosition.value), [yPosition, xOrigin]); const matrix = (0, _reactNativeReanimated.useDerivedValue)(() => [{ scaleY: scaleYValue.value }, { rotate: rotateValue.value }, { skewX: scaleYValue.value / 2 }, { skewY: -scaleYValue.value / 2 }]); return /*#__PURE__*/_react.default.createElement(_reactNativeSkia.Rect, { x: initialPosition.x, y: yPosition, width: size / 3, height: size, color: color, origin: origin, transform: matrix, key: index }); }); //# sourceMappingURL=Confetti.js.map