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
JavaScript
;
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