{"ast":null,"code":"import * as React from 'react';\nimport Animated from \"react-native-web/dist/exports/Animated\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport View from \"react-native-web/dist/exports/View\";\nimport Icon, { isEqualIcon, isValidIcon } from \"./Icon\";\nimport { useInternalTheme } from \"../core/theming\";\nconst CrossFadeIcon = ({\n  color,\n  size,\n  source,\n  theme: themeOverrides,\n  testID = 'cross-fade-icon'\n}) => {\n  const theme = useInternalTheme(themeOverrides);\n  const [currentIcon, setCurrentIcon] = React.useState(() => source);\n  const [previousIcon, setPreviousIcon] = React.useState(null);\n  const {\n    current: fade\n  } = React.useRef(new Animated.Value(1));\n  const {\n    scale\n  } = theme.animation;\n  if (currentIcon !== source) {\n    setPreviousIcon(() => currentIcon);\n    setCurrentIcon(() => source);\n  }\n  React.useEffect(() => {\n    if (isValidIcon(previousIcon) && !isEqualIcon(previousIcon, currentIcon)) {\n      fade.setValue(1);\n      Animated.timing(fade, {\n        duration: scale * 200,\n        toValue: 0,\n        useNativeDriver: true\n      }).start();\n    }\n  }, [currentIcon, previousIcon, fade, scale]);\n  const opacityPrev = fade;\n  const opacityNext = previousIcon ? fade.interpolate({\n    inputRange: [0, 1],\n    outputRange: [1, 0]\n  }) : 1;\n  const rotatePrev = fade.interpolate({\n    inputRange: [0, 1],\n    outputRange: ['-90deg', '0deg']\n  });\n  const rotateNext = previousIcon ? fade.interpolate({\n    inputRange: [0, 1],\n    outputRange: ['0deg', '-180deg']\n  }) : '0deg';\n  return React.createElement(View, {\n    style: [styles.content, {\n      height: size,\n      width: size\n    }]\n  }, previousIcon ? React.createElement(Animated.View, {\n    style: [styles.icon, {\n      opacity: opacityPrev,\n      transform: [{\n        rotate: rotatePrev\n      }]\n    }],\n    testID: `${testID}-previous`\n  }, React.createElement(Icon, {\n    source: previousIcon,\n    size: size,\n    color: color,\n    theme: theme\n  })) : null, React.createElement(Animated.View, {\n    style: [styles.icon, {\n      opacity: opacityNext,\n      transform: [{\n        rotate: rotateNext\n      }]\n    }],\n    testID: `${testID}-current`\n  }, React.createElement(Icon, {\n    source: currentIcon,\n    size: size,\n    color: color,\n    theme: theme\n  })));\n};\nexport default CrossFadeIcon;\nconst styles = StyleSheet.create({\n  content: {\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  icon: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0\n  }\n});","map":{"version":3,"names":["React","Animated","StyleSheet","View","Icon","isEqualIcon","isValidIcon","useInternalTheme","CrossFadeIcon","color","size","source","theme","themeOverrides","testID","currentIcon","setCurrentIcon","useState","previousIcon","setPreviousIcon","current","fade","useRef","Value","scale","animation","useEffect","setValue","timing","duration","toValue","useNativeDriver","start","opacityPrev","opacityNext","interpolate","inputRange","outputRange","rotatePrev","rotateNext","createElement","style","styles","content","height","width","icon","opacity","transform","rotate","create","alignItems","justifyContent","position","top","left","right","bottom"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/react-native-paper/src/components/CrossFadeIcon.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Animated, StyleSheet, View } from 'react-native';\n\nimport Icon, { IconSource, isEqualIcon, isValidIcon } from './Icon';\nimport { useInternalTheme } from '../core/theming';\nimport type { ThemeProp } from '../types';\n\ntype Props = {\n  /**\n   * Icon to display for the `CrossFadeIcon`.\n   */\n  source: IconSource;\n  /**\n   * Color of the icon.\n   */\n  color: string;\n  /**\n   * Size of the icon.\n   */\n  size: number;\n  /**\n   * TestID used for testing purposes\n   */\n  testID?: string;\n  /**\n   * @optional\n   */\n  theme?: ThemeProp;\n};\n\nconst CrossFadeIcon = ({\n  color,\n  size,\n  source,\n  theme: themeOverrides,\n  testID = 'cross-fade-icon',\n}: Props) => {\n  const theme = useInternalTheme(themeOverrides);\n  const [currentIcon, setCurrentIcon] = React.useState<IconSource>(\n    () => source\n  );\n  const [previousIcon, setPreviousIcon] = React.useState<IconSource | null>(\n    null\n  );\n  const { current: fade } = React.useRef<Animated.Value>(new Animated.Value(1));\n\n  const { scale } = theme.animation;\n\n  if (currentIcon !== source) {\n    setPreviousIcon(() => currentIcon);\n    setCurrentIcon(() => source);\n  }\n\n  React.useEffect(() => {\n    if (isValidIcon(previousIcon) && !isEqualIcon(previousIcon, currentIcon)) {\n      fade.setValue(1);\n\n      Animated.timing(fade, {\n        duration: scale * 200,\n        toValue: 0,\n        useNativeDriver: true,\n      }).start();\n    }\n  }, [currentIcon, previousIcon, fade, scale]);\n\n  const opacityPrev = fade;\n  const opacityNext = previousIcon\n    ? fade.interpolate({\n        inputRange: [0, 1],\n        outputRange: [1, 0],\n      })\n    : 1;\n\n  const rotatePrev = fade.interpolate({\n    inputRange: [0, 1],\n    outputRange: ['-90deg', '0deg'],\n  });\n\n  const rotateNext = previousIcon\n    ? fade.interpolate({\n        inputRange: [0, 1],\n        outputRange: ['0deg', '-180deg'],\n      })\n    : '0deg';\n\n  return (\n    <View\n      style={[\n        styles.content,\n        {\n          height: size,\n          width: size,\n        },\n      ]}\n    >\n      {previousIcon ? (\n        <Animated.View\n          style={[\n            styles.icon,\n            {\n              opacity: opacityPrev,\n              transform: [{ rotate: rotatePrev }],\n            },\n          ]}\n          testID={`${testID}-previous`}\n        >\n          <Icon source={previousIcon} size={size} color={color} theme={theme} />\n        </Animated.View>\n      ) : null}\n      <Animated.View\n        style={[\n          styles.icon,\n          {\n            opacity: opacityNext,\n            transform: [{ rotate: rotateNext }],\n          },\n        ]}\n        testID={`${testID}-current`}\n      >\n        <Icon source={currentIcon} size={size} color={color} theme={theme} />\n      </Animated.View>\n    </View>\n  );\n};\n\nexport default CrossFadeIcon;\n\nconst styles = StyleSheet.create({\n  content: {\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  icon: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n  },\n});\n"],"mappings":"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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}