motifySvg()
import { motifySvg } from 'moti/svg'
A higher-order component that turns any React Native SVG component into an animated moti component. It's the same as motify, but for SVG elements.
import { motifySvg } from 'moti/svg'
import { Svg, Rect } from 'react-native-svg'
const MotiRect = motifySvg(Rect)()
You can now pass any SVG props to the animate property, and they will animate there:
<MotiRect
  animate={{
    // height sequence animation
    height: [50, 100],
    x: visible ? 0 : 10,
  }}
  transition={{
    // default all to timing
    type: 'timing',
    x: {
      // override the transition for x
    },
  }}
/>
This functionality is compatible with all Moti features, including hooks like useDynamicAnimation:
import { Rect } from 'react-native-svg'
import { motifySvg } from 'moti/svg'
import { useDynamicAnimation } from 'moti'
const MotiRect = motifySvg(Rect)()
export default function App() {
  const animation = useDynamicAnimation<ComponentProps<typeof Rect>>(() => ({
    x: 0,
  }))
  return <MotiRect state={animation} />
}
How it works
Under the hood, motifySvg runs Animated.createAnimatedComponent for you, so don't call that yourself.
Instead, just pass a normal View (or its equivalent).
Notice that motifySvg() returns a function. At the moment, the function it returns doesn't take any arguments. But I like this composition pattern, so I built the API this way to account for using the returned function in the future.