···11import React from 'react'
22import Animated, {
33 Easing,
44- useSharedValue,
54 useAnimatedStyle,
55+ useSharedValue,
66 withRepeat,
77 withTiming,
88} from 'react-native-reanimated'
991010-import {atoms as a, useTheme, flatten} from '#/alf'
1010+import {atoms as a, flatten, useTheme} from '#/alf'
1111import {Props, useCommonSVGProps} from '#/components/icons/common'
1212import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
1313
+34
src/components/Loader.web.tsx
···11+import React from 'react'
22+import {View} from 'react-native'
33+44+import {atoms as a, flatten, useTheme} from '#/alf'
55+import {Props, useCommonSVGProps} from '#/components/icons/common'
66+import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
77+88+export function Loader(props: Props) {
99+ const t = useTheme()
1010+ const common = useCommonSVGProps(props)
1111+1212+ return (
1313+ <View
1414+ style={[
1515+ a.relative,
1616+ a.justify_center,
1717+ a.align_center,
1818+ {width: common.size, height: common.size},
1919+ ]}>
2020+ {/* css rotation animation - /bskyweb/templates/base.html */}
2121+ <div className="rotate-500ms">
2222+ <Icon
2323+ {...props}
2424+ style={[
2525+ a.absolute,
2626+ a.inset_0,
2727+ t.atoms.text_contrast_high,
2828+ flatten(props.style),
2929+ ]}
3030+ />
3131+ </div>
3232+ </View>
3333+ )
3434+}