import React from 'react'; import { Box } from '../../primitives'; import { usePropsConfig } from '../../../theme'; import { Animated } from 'react-native'; import type { ISkeletonProps } from './props'; const Bones = (allProps: ISkeletonProps & { circle?: boolean }) => { const { circle, children, ...props } = allProps; const newProps = usePropsConfig('Skeleton', props); const { style, skeletonColor, baseColor } = newProps; const blinkAnim = React.useRef(new Animated.Value(0)).current; React.useEffect(() => { const blink = Animated.sequence([ Animated.timing(blinkAnim, { toValue: 1, duration: 1000, useNativeDriver: true, }), Animated.timing(blinkAnim, { toValue: 0, duration: 1000, useNativeDriver: true, }), ]); Animated.loop(blink).start(); }, [blinkAnim]); const skeletonStyle = { skeleton: { position: 'absolute', top: 0, bottom: 0, left: 0, right: 0, borderRadius: circle ? 999 : 3, backgroundColor: skeletonColor, opacity: blinkAnim, // Bind opacity to animated value }, base: { borderRadius: circle ? 999 : 3, backgroundColor: baseColor, }, }; const AnimationViewSetter = () => { if (children) { if (children.length) { return [, ...children]; } return [, children]; } return ; }; return ( {AnimationViewSetter()} ); }; export default Bones;