@fountain-ui/core 2.0.0-beta.12 → 2.0.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/build/commonjs/ButtonBase/ButtonBase.js +56 -52
  2. package/build/commonjs/ButtonBase/ButtonBase.js.map +1 -1
  3. package/build/commonjs/CircularProgress/CircularProgress.js +10 -12
  4. package/build/commonjs/CircularProgress/CircularProgress.js.map +1 -1
  5. package/build/commonjs/ImageCore/ImageCoreNative.js +24 -26
  6. package/build/commonjs/ImageCore/ImageCoreNative.js.map +1 -1
  7. package/build/commonjs/Tooltip/Tooltip.js +14 -18
  8. package/build/commonjs/Tooltip/Tooltip.js.map +1 -1
  9. package/build/commonjs/animated/AnimatedPressable.js +2 -3
  10. package/build/commonjs/animated/AnimatedPressable.js.map +1 -1
  11. package/build/commonjs/hooks/useThrottle.js +3 -7
  12. package/build/commonjs/hooks/useThrottle.js.map +1 -1
  13. package/build/commonjs/internal/hooks/useHeight.js +2 -6
  14. package/build/commonjs/internal/hooks/useHeight.js.map +1 -1
  15. package/build/module/ButtonBase/ButtonBase.js +54 -48
  16. package/build/module/ButtonBase/ButtonBase.js.map +1 -1
  17. package/build/module/CircularProgress/CircularProgress.js +10 -11
  18. package/build/module/CircularProgress/CircularProgress.js.map +1 -1
  19. package/build/module/ImageCore/ImageCoreNative.js +20 -23
  20. package/build/module/ImageCore/ImageCoreNative.js.map +1 -1
  21. package/build/module/Tooltip/Tooltip.js +11 -11
  22. package/build/module/Tooltip/Tooltip.js.map +1 -1
  23. package/build/module/animated/AnimatedPressable.js +2 -3
  24. package/build/module/animated/AnimatedPressable.js.map +1 -1
  25. package/build/module/hooks/useThrottle.js +3 -3
  26. package/build/module/hooks/useThrottle.js.map +1 -1
  27. package/build/module/internal/hooks/useHeight.js +2 -2
  28. package/build/module/internal/hooks/useHeight.js.map +1 -1
  29. package/build/typescript/animated/AnimatedPressable.d.ts +2 -2
  30. package/package.json +2 -2
  31. package/src/ButtonBase/ButtonBase.tsx +65 -43
  32. package/src/CircularProgress/CircularProgress.tsx +15 -16
  33. package/src/ImageCore/ImageCoreNative.tsx +17 -19
  34. package/src/Tooltip/Tooltip.tsx +12 -12
  35. package/src/animated/AnimatedPressable.tsx +1 -2
  36. package/src/hooks/useThrottle.ts +3 -3
  37. package/src/internal/hooks/useHeight.ts +2 -2
  38. package/build/commonjs/ButtonBase/ButtonBase.ios.js +0 -101
  39. package/build/commonjs/ButtonBase/ButtonBase.ios.js.map +0 -1
  40. package/build/commonjs/ButtonBase/useDisabledReaction/index.js +0 -21
  41. package/build/commonjs/ButtonBase/useDisabledReaction/index.js.map +0 -1
  42. package/build/commonjs/ButtonBase/useDisabledReaction/index.native.js +0 -9
  43. package/build/commonjs/ButtonBase/useDisabledReaction/index.native.js.map +0 -1
  44. package/build/commonjs/ImageCore/ImageCoreNative.ios.js +0 -60
  45. package/build/commonjs/ImageCore/ImageCoreNative.ios.js.map +0 -1
  46. package/build/module/ButtonBase/ButtonBase.ios.js +0 -82
  47. package/build/module/ButtonBase/ButtonBase.ios.js.map +0 -1
  48. package/build/module/ButtonBase/useDisabledReaction/index.js +0 -12
  49. package/build/module/ButtonBase/useDisabledReaction/index.js.map +0 -1
  50. package/build/module/ButtonBase/useDisabledReaction/index.native.js +0 -2
  51. package/build/module/ButtonBase/useDisabledReaction/index.native.js.map +0 -1
  52. package/build/module/ImageCore/ImageCoreNative.ios.js +0 -45
  53. package/build/module/ImageCore/ImageCoreNative.ios.js.map +0 -1
  54. package/build/typescript/ButtonBase/ButtonBase.ios.d.ts +0 -2
  55. package/build/typescript/ButtonBase/useDisabledReaction/index.d.ts +0 -2
  56. package/build/typescript/ButtonBase/useDisabledReaction/index.native.d.ts +0 -2
  57. package/build/typescript/ImageCore/ImageCoreNative.ios.d.ts +0 -2
  58. package/src/ButtonBase/ButtonBase.ios.tsx +0 -95
  59. package/src/ButtonBase/useDisabledReaction/index.native.ts +0 -4
  60. package/src/ButtonBase/useDisabledReaction/index.ts +0 -17
  61. package/src/ImageCore/ImageCoreNative.ios.tsx +0 -46
@@ -1,27 +1,26 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import React from 'react';
4
- import { useAnimatedStyle, useSharedValue, withDelay, withTiming } from 'react-native-reanimated';
3
+ import React, { useCallback, useEffect, useRef } from 'react';
4
+ import { Animated } from 'react-native';
5
5
  import { useThrottle } from '../hooks';
6
6
  import { AnimatedPressable } from '../animated';
7
- import { StyleSheet } from '../styles';
8
- import useDisabledReaction from './useDisabledReaction';
9
7
  export const ORIGINAL_OPACITY = 1;
10
8
  export const DISABLED_OPACITY = .3;
11
9
  const ACTIVE_OPACITY = .65;
12
10
  const ORIGINAL_SCALE = 1;
13
- const MINIFIED_SCALE = .96;
14
- const ANIMATION_CONFIG = {
15
- duration: 150
11
+ const MINIFIED_SCALE = .96; // at "node_modules/react-native/Libraries/Pressability.js"
12
+ // const DEFAULT_MIN_PRESS_DURATION = 130;
13
+
14
+ const PRESS_IN_DELAY = 130;
15
+
16
+ const startTimingAnimationWithDefaults = (value, toValue) => {
17
+ Animated.timing(value, {
18
+ toValue,
19
+ duration: 150,
20
+ useNativeDriver: true
21
+ }).start();
16
22
  };
17
- const styles = StyleSheet.create({
18
- disabled: {
19
- opacity: DISABLED_OPACITY,
20
- transform: [{
21
- scale: ORIGINAL_SCALE
22
- }]
23
- }
24
- });
23
+
25
24
  export default function ButtonBase(props) {
26
25
  const {
27
26
  children,
@@ -29,7 +28,7 @@ export default function ButtonBase(props) {
29
28
  disableThrottle = false,
30
29
  onPress,
31
30
  pressEffect = 'opacity',
32
- style,
31
+ style: styleProp,
33
32
  throttleMillis = 650,
34
33
  ...otherProps
35
34
  } = props;
@@ -37,51 +36,58 @@ export default function ButtonBase(props) {
37
36
  periodMillis: disableThrottle ? 0 : throttleMillis,
38
37
  callback: onPress
39
38
  });
40
- const opacity = useSharedValue(ORIGINAL_OPACITY);
41
- const scale = useSharedValue(ORIGINAL_SCALE);
42
- const animatedStyle = useAnimatedStyle(() => ({
43
- opacity: opacity.value,
44
- transform: [{
45
- scale: scale.value
46
- }]
47
- }), []);
48
- useDisabledReaction(disabled, opacity);
49
-
50
- const startAnimation = function (pressIn) {
51
- let isHovered = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
52
-
53
- if (pressEffect === 'none') {
54
- return;
39
+ const opacity = useRef(new Animated.Value(ORIGINAL_OPACITY)).current;
40
+ const scale = useRef(new Animated.Value(ORIGINAL_SCALE)).current;
41
+ useEffect(() => {
42
+ opacity.setValue(disabled ? DISABLED_OPACITY : ORIGINAL_OPACITY);
43
+ }, [disabled]);
44
+ const startScaleAnimation = useCallback((pressIn, isHover) => {
45
+ if (!isHover) {
46
+ startTimingAnimationWithDefaults(scale, pressIn ? MINIFIED_SCALE : ORIGINAL_SCALE);
47
+ }
48
+ }, []);
49
+ const startOpacityAnimation = useCallback(pressIn => {
50
+ if (pressIn) {
51
+ opacity.setValue(ACTIVE_OPACITY);
52
+ } else {
53
+ startTimingAnimationWithDefaults(opacity, ORIGINAL_OPACITY);
55
54
  }
55
+ }, []);
56
+ const startPressAnimation = useCallback(function (pressIn) {
57
+ let isHover = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
56
58
 
57
- if (pressEffect === 'opacity') {
58
- if (pressIn) {
59
- opacity.value = ACTIVE_OPACITY;
60
- } else {
61
- opacity.value = withTiming(ORIGINAL_OPACITY, ANIMATION_CONFIG);
62
- }
63
- } else if (!isHovered) {
64
- if (pressIn) {
65
- scale.value = withDelay(100, withTiming(MINIFIED_SCALE, ANIMATION_CONFIG));
66
- } else {
67
- scale.value = withTiming(ORIGINAL_SCALE, ANIMATION_CONFIG);
68
- }
59
+ if (pressEffect === 'scale') {
60
+ startScaleAnimation(pressIn, isHover);
61
+ } else if (pressEffect === 'opacity') {
62
+ startOpacityAnimation(pressIn, isHover);
69
63
  }
64
+ }, [pressEffect]);
65
+ const handlePressIn = useCallback(() => {
66
+ startPressAnimation(true, false);
67
+ }, [startPressAnimation]);
68
+ const handlePressOut = useCallback(() => {
69
+ startPressAnimation(false, false);
70
+ }, [startPressAnimation]);
71
+ const animatedStyle = {
72
+ opacity,
73
+ transform: [{
74
+ scale
75
+ }]
70
76
  };
71
-
72
77
  return /*#__PURE__*/React.createElement(AnimatedPressable, _extends({
73
78
  disabled: disabled,
74
79
  onPress: handlePress,
75
- onPressIn: () => startAnimation(true),
76
- onPressOut: () => startAnimation(false),
77
- style: [animatedStyle, disabled ? styles.disabled : undefined, style]
80
+ onPressIn: handlePressIn,
81
+ onPressOut: handlePressOut,
82
+ style: [animatedStyle, styleProp],
83
+ unstable_pressDelay: PRESS_IN_DELAY
78
84
  }, otherProps), typeof children !== 'function' ? _ref => {
79
85
  let {
80
86
  hovered
81
87
  } = _ref;
82
88
 
83
89
  if (hovered !== undefined && !disabled) {
84
- startAnimation(hovered, true);
90
+ startPressAnimation(hovered, true);
85
91
  }
86
92
 
87
93
  return children;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useAnimatedStyle","useSharedValue","withDelay","withTiming","useThrottle","AnimatedPressable","StyleSheet","useDisabledReaction","ORIGINAL_OPACITY","DISABLED_OPACITY","ACTIVE_OPACITY","ORIGINAL_SCALE","MINIFIED_SCALE","ANIMATION_CONFIG","duration","styles","create","disabled","opacity","transform","scale","ButtonBase","props","children","disableThrottle","onPress","pressEffect","style","throttleMillis","otherProps","handlePress","periodMillis","callback","animatedStyle","value","startAnimation","pressIn","isHovered","undefined","hovered"],"sources":["ButtonBase.tsx"],"sourcesContent":["import React from 'react';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport { useAnimatedStyle, useSharedValue, withDelay, withTiming } from 'react-native-reanimated';\nimport { useThrottle } from '../hooks';\nimport { AnimatedPressable } from '../animated';\nimport { StyleSheet } from '../styles';\nimport type ButtonBaseProps from './ButtonBaseProps';\nimport useDisabledReaction from './useDisabledReaction';\n\nexport const ORIGINAL_OPACITY = 1;\nexport const DISABLED_OPACITY = .3;\nconst ACTIVE_OPACITY = .65;\n\nconst ORIGINAL_SCALE = 1;\nconst MINIFIED_SCALE = .96;\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 150 };\n\nconst styles = StyleSheet.create({\n disabled: {\n opacity: DISABLED_OPACITY,\n transform: [{ scale: ORIGINAL_SCALE }],\n },\n});\n\nexport default function ButtonBase(props: ButtonBaseProps) {\n const {\n children,\n disabled = false,\n disableThrottle = false,\n onPress,\n pressEffect = 'opacity',\n style,\n throttleMillis = 650,\n ...otherProps\n } = props;\n\n const handlePress = useThrottle({\n periodMillis: disableThrottle ? 0 : throttleMillis,\n callback: onPress,\n });\n\n const opacity = useSharedValue(ORIGINAL_OPACITY);\n const scale = useSharedValue(ORIGINAL_SCALE);\n\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.value,\n transform: [{ scale: scale.value }],\n }), []);\n\n useDisabledReaction(disabled, opacity);\n\n const startAnimation = (pressIn: boolean, isHovered: boolean = false) => {\n if (pressEffect === 'none') {\n return;\n }\n\n if (pressEffect === 'opacity') {\n if (pressIn) {\n opacity.value = ACTIVE_OPACITY;\n } else {\n opacity.value = withTiming(ORIGINAL_OPACITY, ANIMATION_CONFIG);\n }\n } else if (!isHovered) {\n if (pressIn) {\n scale.value = withDelay(\n 100,\n withTiming(MINIFIED_SCALE, ANIMATION_CONFIG),\n );\n } else {\n scale.value = withTiming(ORIGINAL_SCALE, ANIMATION_CONFIG);\n }\n }\n };\n\n return (\n <AnimatedPressable\n disabled={disabled}\n onPress={handlePress}\n onPressIn={() => startAnimation(true)}\n onPressOut={() => startAnimation(false)}\n style={[\n animatedStyle,\n disabled ? styles.disabled : undefined,\n style,\n ]}\n {...otherProps}\n >\n {typeof children !== 'function' ? (\n ({ hovered }) => {\n if (hovered !== undefined && !disabled) {\n startAnimation(hovered, true);\n }\n\n return children;\n }\n ) : children}\n </AnimatedPressable>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","Animated","useThrottle","AnimatedPressable","ORIGINAL_OPACITY","DISABLED_OPACITY","ACTIVE_OPACITY","ORIGINAL_SCALE","MINIFIED_SCALE","PRESS_IN_DELAY","startTimingAnimationWithDefaults","value","toValue","timing","duration","useNativeDriver","start","ButtonBase","props","children","disabled","disableThrottle","onPress","pressEffect","style","styleProp","throttleMillis","otherProps","handlePress","periodMillis","callback","opacity","Value","current","scale","setValue","startScaleAnimation","pressIn","isHover","startOpacityAnimation","startPressAnimation","handlePressIn","handlePressOut","animatedStyle","transform","hovered","undefined"],"sources":["ButtonBase.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport { Animated } from 'react-native';\nimport { useThrottle } from '../hooks';\nimport { AnimatedPressable } from '../animated';\nimport type ButtonBaseProps from './ButtonBaseProps';\n\ninterface StartPressAnimation {\n (pressIn: boolean, isHover: boolean): void;\n}\n\nexport const ORIGINAL_OPACITY = 1;\nexport const DISABLED_OPACITY = .3;\nconst ACTIVE_OPACITY = .65;\n\nconst ORIGINAL_SCALE = 1;\nconst MINIFIED_SCALE = .96;\n\n// at \"node_modules/react-native/Libraries/Pressability.js\"\n// const DEFAULT_MIN_PRESS_DURATION = 130;\nconst PRESS_IN_DELAY = 130;\n\ntype TimingAnimationValue = Animated.Value | Animated.ValueXY;\ntype TimingAnimationToValue = Animated.TimingAnimationConfig['toValue'];\n\nconst startTimingAnimationWithDefaults = (\n value: TimingAnimationValue,\n toValue: TimingAnimationToValue,\n) => {\n Animated.timing(value, {\n toValue,\n duration: 150,\n useNativeDriver: true,\n }).start();\n};\n\nexport default function ButtonBase(props: ButtonBaseProps) {\n const {\n children,\n disabled = false,\n disableThrottle = false,\n onPress,\n pressEffect = 'opacity',\n style: styleProp,\n throttleMillis = 650,\n ...otherProps\n } = props;\n\n const handlePress = useThrottle({\n periodMillis: disableThrottle ? 0 : throttleMillis,\n callback: onPress,\n });\n\n const opacity = useRef<Animated.Value>(new Animated.Value(ORIGINAL_OPACITY)).current;\n const scale = useRef<Animated.Value>(new Animated.Value(ORIGINAL_SCALE)).current;\n\n useEffect(() => {\n opacity.setValue(disabled ? DISABLED_OPACITY : ORIGINAL_OPACITY);\n }, [disabled]);\n\n const startScaleAnimation = useCallback<StartPressAnimation>((pressIn, isHover) => {\n if (!isHover) {\n startTimingAnimationWithDefaults(\n scale,\n pressIn ? MINIFIED_SCALE : ORIGINAL_SCALE,\n );\n }\n }, []);\n\n const startOpacityAnimation = useCallback<StartPressAnimation>((pressIn) => {\n if (pressIn) {\n opacity.setValue(ACTIVE_OPACITY);\n } else {\n startTimingAnimationWithDefaults(opacity, ORIGINAL_OPACITY);\n }\n }, []);\n\n const startPressAnimation = useCallback<StartPressAnimation>((pressIn, isHover = false) => {\n if (pressEffect === 'scale') {\n startScaleAnimation(pressIn, isHover);\n } else if (pressEffect === 'opacity') {\n startOpacityAnimation(pressIn, isHover);\n }\n }, [pressEffect]);\n\n const handlePressIn = useCallback(() => {\n startPressAnimation(true, false);\n }, [startPressAnimation]);\n\n const handlePressOut = useCallback(() => {\n startPressAnimation(false, false);\n }, [startPressAnimation]);\n\n const animatedStyle = {\n opacity,\n transform: [{ scale }],\n };\n\n return (\n <AnimatedPressable\n disabled={disabled}\n onPress={handlePress}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n style={[\n animatedStyle,\n styleProp,\n ]}\n unstable_pressDelay={PRESS_IN_DELAY}\n {...otherProps}\n >\n {typeof children !== 'function' ? (\n ({ hovered }) => {\n if (hovered !== undefined && !disabled) {\n startPressAnimation(hovered, true);\n }\n\n return children;\n }\n ) : children}\n </AnimatedPressable>\n );\n};\n"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming } from 'react-native-reanimated';
3
3
  import { CircularProgress as CircularProgressIcon } from '../internal/icons';
4
- import { css } from '../styles';
5
4
  const ANIMATION_CONFIG = {
6
5
  duration: 900,
7
6
  easing: Easing.linear
8
7
  };
9
- const MIN_ROTATE = 0;
10
- const MAX_ROTATE = 360;
8
+ const MIN_ROTATE_DEGREE = 0;
9
+ const MAX_ROTATE_DEGREE = 360;
11
10
 
12
11
  const useStyles = function () {
13
12
  return {
@@ -20,22 +19,22 @@ const useStyles = function () {
20
19
 
21
20
  export default function CircularProgress(props) {
22
21
  const {
23
- style
22
+ style: styleProp
24
23
  } = props;
25
24
  const styles = useStyles();
26
- const rootStyle = css([styles.root, style]);
27
- const rotate = useSharedValue(MIN_ROTATE);
28
- const spinStyle = useAnimatedStyle(() => ({
25
+ const rotate = useSharedValue(MIN_ROTATE_DEGREE);
26
+ const animatedStyle = useAnimatedStyle(() => ({
29
27
  transform: [{
30
- rotate: `${rotate}deg`
28
+ rotate: `${rotate.value}deg`
31
29
  }]
32
30
  }), []);
33
31
  useEffect(() => {
34
- rotate.value = withRepeat(withTiming(MAX_ROTATE, ANIMATION_CONFIG), -1, false);
32
+ rotate.value = withRepeat(withTiming(MAX_ROTATE_DEGREE, ANIMATION_CONFIG), -1, false);
35
33
  }, []);
36
34
  return /*#__PURE__*/React.createElement(Animated.View, {
37
- style: [spinStyle, rootStyle]
38
- }, /*#__PURE__*/React.createElement(CircularProgressIcon, null));
35
+ children: /*#__PURE__*/React.createElement(CircularProgressIcon, null),
36
+ style: [animatedStyle, styles.root, styleProp]
37
+ });
39
38
  }
40
39
  ;
41
40
  //# sourceMappingURL=CircularProgress.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","Animated","Easing","useAnimatedStyle","useSharedValue","withRepeat","withTiming","CircularProgress","CircularProgressIcon","css","ANIMATION_CONFIG","duration","easing","linear","MIN_ROTATE","MAX_ROTATE","useStyles","root","alignItems","justifyContent","props","style","styles","rootStyle","rotate","spinStyle","transform","value"],"sources":["CircularProgress.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ViewProps } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming } from 'react-native-reanimated';\nimport { CircularProgress as CircularProgressIcon } from '../internal/icons';\nimport { css } from '../styles';\nimport { OverridableComponentProps } from '../types';\n\ntype CircularProgressStyles = NamedStylesStringUnion<'root'>;\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 900, easing: Easing.linear };\n\nconst MIN_ROTATE = 0;\nconst MAX_ROTATE = 360;\n\nconst useStyles: UseStyles<CircularProgressStyles> = function (): CircularProgressStyles {\n return {\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n };\n};\n\nexport default function CircularProgress(props: OverridableComponentProps<ViewProps>) {\n const { style } = props;\n\n const styles = useStyles();\n\n const rootStyle = css([\n styles.root,\n style,\n ]);\n\n const rotate = useSharedValue(MIN_ROTATE);\n\n const spinStyle = useAnimatedStyle(() => ({\n transform: [{ rotate: `${rotate}deg` }],\n }), []);\n\n useEffect(() => {\n rotate.value = withRepeat(\n withTiming(MAX_ROTATE, ANIMATION_CONFIG),\n -1,\n false,\n );\n }, []);\n\n return (\n <Animated.View style={[spinStyle, rootStyle]}>\n <CircularProgressIcon/>\n </Animated.View>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AAIA,OAAOC,QAAP,IAAmBC,MAAnB,EAA2BC,gBAA3B,EAA6CC,cAA7C,EAA6DC,UAA7D,EAAyEC,UAAzE,QAA2F,yBAA3F;AACA,SAASC,gBAAgB,IAAIC,oBAA7B,QAAyD,mBAAzD;AACA,SAASC,GAAT,QAAoB,WAApB;AAKA,MAAMC,gBAA4C,GAAG;EAAEC,QAAQ,EAAE,GAAZ;EAAiBC,MAAM,EAAEV,MAAM,CAACW;AAAhC,CAArD;AAEA,MAAMC,UAAU,GAAG,CAAnB;AACA,MAAMC,UAAU,GAAG,GAAnB;;AAEA,MAAMC,SAA4C,GAAG,YAAoC;EACrF,OAAO;IACHC,IAAI,EAAE;MACFC,UAAU,EAAE,QADV;MAEFC,cAAc,EAAE;IAFd;EADH,CAAP;AAMH,CAPD;;AASA,eAAe,SAASZ,gBAAT,CAA0Ba,KAA1B,EAAuE;EAClF,MAAM;IAAEC;EAAF,IAAYD,KAAlB;EAEA,MAAME,MAAM,GAAGN,SAAS,EAAxB;EAEA,MAAMO,SAAS,GAAGd,GAAG,CAAC,CAClBa,MAAM,CAACL,IADW,EAElBI,KAFkB,CAAD,CAArB;EAKA,MAAMG,MAAM,GAAGpB,cAAc,CAACU,UAAD,CAA7B;EAEA,MAAMW,SAAS,GAAGtB,gBAAgB,CAAC,OAAO;IACtCuB,SAAS,EAAE,CAAC;MAAEF,MAAM,EAAG,GAAEA,MAAO;IAApB,CAAD;EAD2B,CAAP,CAAD,EAE9B,EAF8B,CAAlC;EAIAxB,SAAS,CAAC,MAAM;IACZwB,MAAM,CAACG,KAAP,GAAetB,UAAU,CACrBC,UAAU,CAACS,UAAD,EAAaL,gBAAb,CADW,EAErB,CAAC,CAFoB,EAGrB,KAHqB,CAAzB;EAKH,CANQ,EAMN,EANM,CAAT;EAQA,oBACI,oBAAC,QAAD,CAAU,IAAV;IAAe,KAAK,EAAE,CAACe,SAAD,EAAYF,SAAZ;EAAtB,gBACI,oBAAC,oBAAD,OADJ,CADJ;AAKH;AAAA"}
1
+ {"version":3,"names":["React","useEffect","Animated","Easing","useAnimatedStyle","useSharedValue","withRepeat","withTiming","CircularProgress","CircularProgressIcon","ANIMATION_CONFIG","duration","easing","linear","MIN_ROTATE_DEGREE","MAX_ROTATE_DEGREE","useStyles","root","alignItems","justifyContent","props","style","styleProp","styles","rotate","animatedStyle","transform","value"],"sources":["CircularProgress.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { ViewProps } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport Animated, { Easing, useAnimatedStyle, useSharedValue, withRepeat, withTiming } from 'react-native-reanimated';\nimport { CircularProgress as CircularProgressIcon } from '../internal/icons';\nimport { OverridableComponentProps } from '../types';\n\ntype CircularProgressStyles = NamedStylesStringUnion<'root'>;\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 900, easing: Easing.linear };\n\nconst MIN_ROTATE_DEGREE = 0;\nconst MAX_ROTATE_DEGREE = 360;\n\nconst useStyles: UseStyles<CircularProgressStyles> = function (): CircularProgressStyles {\n return {\n root: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n };\n};\n\nexport default function CircularProgress(props: OverridableComponentProps<ViewProps>) {\n const { style: styleProp } = props;\n\n const styles = useStyles();\n\n const rotate = useSharedValue(MIN_ROTATE_DEGREE);\n\n const animatedStyle = useAnimatedStyle(() => ({\n transform: [{ rotate: `${rotate.value}deg` }],\n }), []);\n\n useEffect(() => {\n rotate.value = withRepeat(\n withTiming(MAX_ROTATE_DEGREE, ANIMATION_CONFIG),\n -1,\n false,\n );\n }, []);\n\n return (\n <Animated.View\n children={<CircularProgressIcon/>}\n style={[\n animatedStyle,\n styles.root,\n styleProp,\n ]}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AAIA,OAAOC,QAAP,IAAmBC,MAAnB,EAA2BC,gBAA3B,EAA6CC,cAA7C,EAA6DC,UAA7D,EAAyEC,UAAzE,QAA2F,yBAA3F;AACA,SAASC,gBAAgB,IAAIC,oBAA7B,QAAyD,mBAAzD;AAKA,MAAMC,gBAA4C,GAAG;EAAEC,QAAQ,EAAE,GAAZ;EAAiBC,MAAM,EAAET,MAAM,CAACU;AAAhC,CAArD;AAEA,MAAMC,iBAAiB,GAAG,CAA1B;AACA,MAAMC,iBAAiB,GAAG,GAA1B;;AAEA,MAAMC,SAA4C,GAAG,YAAoC;EACrF,OAAO;IACHC,IAAI,EAAE;MACFC,UAAU,EAAE,QADV;MAEFC,cAAc,EAAE;IAFd;EADH,CAAP;AAMH,CAPD;;AASA,eAAe,SAASX,gBAAT,CAA0BY,KAA1B,EAAuE;EAClF,MAAM;IAAEC,KAAK,EAAEC;EAAT,IAAuBF,KAA7B;EAEA,MAAMG,MAAM,GAAGP,SAAS,EAAxB;EAEA,MAAMQ,MAAM,GAAGnB,cAAc,CAACS,iBAAD,CAA7B;EAEA,MAAMW,aAAa,GAAGrB,gBAAgB,CAAC,OAAO;IAC1CsB,SAAS,EAAE,CAAC;MAAEF,MAAM,EAAG,GAAEA,MAAM,CAACG,KAAM;IAA1B,CAAD;EAD+B,CAAP,CAAD,EAElC,EAFkC,CAAtC;EAIA1B,SAAS,CAAC,MAAM;IACZuB,MAAM,CAACG,KAAP,GAAerB,UAAU,CACrBC,UAAU,CAACQ,iBAAD,EAAoBL,gBAApB,CADW,EAErB,CAAC,CAFoB,EAGrB,KAHqB,CAAzB;EAKH,CANQ,EAMN,EANM,CAAT;EAQA,oBACI,oBAAC,QAAD,CAAU,IAAV;IACI,QAAQ,eAAE,oBAAC,oBAAD,OADd;IAEI,KAAK,EAAE,CACHe,aADG,EAEHF,MAAM,CAACN,IAFJ,EAGHK,SAHG;EAFX,EADJ;AAUH;AAAA"}
@@ -1,11 +1,11 @@
1
- import React from 'react';
2
- import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
1
+ import React, { useCallback, useRef } from 'react';
2
+ import { Animated } from 'react-native';
3
3
  import FastImage from 'react-native-fast-image';
4
4
  // @ts-ignore
5
5
  const AnimatedFastImage = Animated.createAnimatedComponent(FastImage);
6
- const ANIMATION_CONFIG = {
7
- duration: 150
8
- };
6
+ const INITIAL_OPACITY = 0;
7
+ const LOADED_OPACITY = 1;
8
+ const ANIMATION_DURATION = 200;
9
9
  export default function ImageCore(props) {
10
10
  const {
11
11
  height,
@@ -15,23 +15,15 @@ export default function ImageCore(props) {
15
15
  source,
16
16
  width
17
17
  } = props;
18
- const style = {
19
- width,
20
- height
21
- };
22
- const opacity = useSharedValue(0);
23
- const animatedStyle = useAnimatedStyle(() => ({
24
- opacity: opacity.value
25
- }), []);
26
-
27
- const handleLoad = () => {
28
- opacity.value = withTiming(1, ANIMATION_CONFIG);
29
-
30
- if (onLoad) {
31
- onLoad();
32
- }
33
- };
34
-
18
+ const opacity = useRef(new Animated.Value(INITIAL_OPACITY)).current;
19
+ const handleLoad = useCallback(() => {
20
+ Animated.timing(opacity, {
21
+ toValue: LOADED_OPACITY,
22
+ duration: ANIMATION_DURATION,
23
+ useNativeDriver: true
24
+ }).start();
25
+ onLoad === null || onLoad === void 0 ? void 0 : onLoad();
26
+ }, [onLoad]);
35
27
  return /*#__PURE__*/React.createElement(AnimatedFastImage, {
36
28
  onError: onError,
37
29
  onLoad: handleLoad,
@@ -39,7 +31,12 @@ export default function ImageCore(props) {
39
31
  source: {
40
32
  uri: source.uri
41
33
  },
42
- style: [animatedStyle, style]
34
+ style: [{
35
+ opacity
36
+ }, {
37
+ width,
38
+ height
39
+ }]
43
40
  });
44
41
  }
45
42
  ;
@@ -1 +1 @@
1
- {"version":3,"names":["React","Animated","useAnimatedStyle","useSharedValue","withTiming","FastImage","AnimatedFastImage","createAnimatedComponent","ANIMATION_CONFIG","duration","ImageCore","props","height","onError","onLoad","resizeMode","source","width","style","opacity","animatedStyle","value","handleLoad","uri"],"sources":["ImageCoreNative.tsx"],"sourcesContent":["import React from 'react';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';\nimport FastImage from 'react-native-fast-image';\nimport type ImageCoreProps from './ImageCoreProps';\n\n// @ts-ignore\nconst AnimatedFastImage = Animated.createAnimatedComponent(FastImage);\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 150 };\n\nexport default function ImageCore(props: ImageCoreProps) {\n const {\n height,\n onError,\n onLoad,\n resizeMode,\n source,\n width,\n } = props;\n\n const style = { width, height };\n\n const opacity = useSharedValue(0);\n\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.value,\n }), []);\n\n const handleLoad = () => {\n opacity.value = withTiming(1, ANIMATION_CONFIG);\n\n if (onLoad) {\n onLoad();\n }\n };\n\n return (\n <AnimatedFastImage\n onError={onError}\n onLoad={handleLoad}\n resizeMode={resizeMode}\n source={{ uri: source.uri }}\n style={[\n animatedStyle,\n style,\n ]}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,OAAOC,QAAP,IAAmBC,gBAAnB,EAAqCC,cAArC,EAAqDC,UAArD,QAAuE,yBAAvE;AACA,OAAOC,SAAP,MAAsB,yBAAtB;AAGA;AACA,MAAMC,iBAAiB,GAAGL,QAAQ,CAACM,uBAAT,CAAiCF,SAAjC,CAA1B;AAEA,MAAMG,gBAA4C,GAAG;EAAEC,QAAQ,EAAE;AAAZ,CAArD;AAEA,eAAe,SAASC,SAAT,CAAmBC,KAAnB,EAA0C;EACrD,MAAM;IACFC,MADE;IAEFC,OAFE;IAGFC,MAHE;IAIFC,UAJE;IAKFC,MALE;IAMFC;EANE,IAOFN,KAPJ;EASA,MAAMO,KAAK,GAAG;IAAED,KAAF;IAASL;EAAT,CAAd;EAEA,MAAMO,OAAO,GAAGhB,cAAc,CAAC,CAAD,CAA9B;EAEA,MAAMiB,aAAa,GAAGlB,gBAAgB,CAAC,OAAO;IAC1CiB,OAAO,EAAEA,OAAO,CAACE;EADyB,CAAP,CAAD,EAElC,EAFkC,CAAtC;;EAIA,MAAMC,UAAU,GAAG,MAAM;IACrBH,OAAO,CAACE,KAAR,GAAgBjB,UAAU,CAAC,CAAD,EAAII,gBAAJ,CAA1B;;IAEA,IAAIM,MAAJ,EAAY;MACRA,MAAM;IACT;EACJ,CAND;;EAQA,oBACI,oBAAC,iBAAD;IACI,OAAO,EAAED,OADb;IAEI,MAAM,EAAES,UAFZ;IAGI,UAAU,EAAEP,UAHhB;IAII,MAAM,EAAE;MAAEQ,GAAG,EAAEP,MAAM,CAACO;IAAd,CAJZ;IAKI,KAAK,EAAE,CACHH,aADG,EAEHF,KAFG;EALX,EADJ;AAYH;AAAA"}
1
+ {"version":3,"names":["React","useCallback","useRef","Animated","FastImage","AnimatedFastImage","createAnimatedComponent","INITIAL_OPACITY","LOADED_OPACITY","ANIMATION_DURATION","ImageCore","props","height","onError","onLoad","resizeMode","source","width","opacity","Value","current","handleLoad","timing","toValue","duration","useNativeDriver","start","uri"],"sources":["ImageCoreNative.tsx"],"sourcesContent":["import React, { useCallback, useRef } from 'react';\nimport { Animated } from 'react-native';\nimport FastImage from 'react-native-fast-image';\nimport type ImageCoreProps from './ImageCoreProps';\n\n// @ts-ignore\nconst AnimatedFastImage = Animated.createAnimatedComponent(FastImage);\n\nconst INITIAL_OPACITY = 0;\nconst LOADED_OPACITY = 1;\n\nconst ANIMATION_DURATION = 200;\n\nexport default function ImageCore(props: ImageCoreProps) {\n const {\n height,\n onError,\n onLoad,\n resizeMode,\n source,\n width,\n } = props;\n\n const opacity = useRef<Animated.Value>(new Animated.Value(INITIAL_OPACITY)).current;\n\n const handleLoad = useCallback(() => {\n Animated.timing(opacity, {\n toValue: LOADED_OPACITY,\n duration: ANIMATION_DURATION,\n useNativeDriver: true,\n }).start();\n\n onLoad?.();\n }, [onLoad]);\n\n return (\n <AnimatedFastImage\n onError={onError}\n onLoad={handleLoad}\n resizeMode={resizeMode}\n source={{ uri: source.uri }}\n style={[\n { opacity },\n { width, height },\n ]}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,MAA7B,QAA2C,OAA3C;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,OAAOC,SAAP,MAAsB,yBAAtB;AAGA;AACA,MAAMC,iBAAiB,GAAGF,QAAQ,CAACG,uBAAT,CAAiCF,SAAjC,CAA1B;AAEA,MAAMG,eAAe,GAAG,CAAxB;AACA,MAAMC,cAAc,GAAG,CAAvB;AAEA,MAAMC,kBAAkB,GAAG,GAA3B;AAEA,eAAe,SAASC,SAAT,CAAmBC,KAAnB,EAA0C;EACrD,MAAM;IACFC,MADE;IAEFC,OAFE;IAGFC,MAHE;IAIFC,UAJE;IAKFC,MALE;IAMFC;EANE,IAOFN,KAPJ;EASA,MAAMO,OAAO,GAAGhB,MAAM,CAAiB,IAAIC,QAAQ,CAACgB,KAAb,CAAmBZ,eAAnB,CAAjB,CAAN,CAA4Da,OAA5E;EAEA,MAAMC,UAAU,GAAGpB,WAAW,CAAC,MAAM;IACjCE,QAAQ,CAACmB,MAAT,CAAgBJ,OAAhB,EAAyB;MACrBK,OAAO,EAAEf,cADY;MAErBgB,QAAQ,EAAEf,kBAFW;MAGrBgB,eAAe,EAAE;IAHI,CAAzB,EAIGC,KAJH;IAMAZ,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM;EACT,CAR6B,EAQ3B,CAACA,MAAD,CAR2B,CAA9B;EAUA,oBACI,oBAAC,iBAAD;IACI,OAAO,EAAED,OADb;IAEI,MAAM,EAAEQ,UAFZ;IAGI,UAAU,EAAEN,UAHhB;IAII,MAAM,EAAE;MAAEY,GAAG,EAAEX,MAAM,CAACW;IAAd,CAJZ;IAKI,KAAK,EAAE,CACH;MAAET;IAAF,CADG,EAEH;MAAED,KAAF;MAASL;IAAT,CAFG;EALX,EADJ;AAYH;AAAA"}
@@ -1,12 +1,12 @@
1
- import React from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import { Text, View } from 'react-native';
3
- import { TouchableWithoutFeedback } from 'react-native-gesture-handler';
4
3
  import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
5
4
  import { rgb } from '@fountain-ui/utils';
5
+ import ButtonBase from '../ButtonBase';
6
6
  import { createFontStyle, css, useTheme } from '../styles';
7
7
  import { Close as CloseIcon } from '../internal/icons';
8
8
  import UpArrow from './UpArrow';
9
- const defaultOpacity = 0.8;
9
+ const DEFAULT_OPACITY = 0.8;
10
10
  const initialLayout = {
11
11
  width: 0,
12
12
  height: 0,
@@ -30,9 +30,9 @@ export default function Tooltip(props) {
30
30
  visible = false
31
31
  } = props;
32
32
  const theme = useTheme();
33
- const [layout, setLayout] = React.useState(initialLayout);
33
+ const [layout, setLayout] = useState(initialLayout);
34
34
  const scale = useSharedValue(0);
35
- const tooltipAnimatedStyle = useAnimatedStyle(() => ({
35
+ const animatedStyle = useAnimatedStyle(() => ({
36
36
  transform: [{
37
37
  scale: scale.value
38
38
  }]
@@ -50,13 +50,13 @@ export default function Tooltip(props) {
50
50
  height: visible ? undefined : 0,
51
51
  overflow: visible ? undefined : 'hidden'
52
52
  };
53
- React.useEffect(() => {
53
+ useEffect(() => {
54
54
  const nextScaleValue = visible ? 1 : 0;
55
55
  scale.value = withTiming(nextScaleValue, ANIMATION_CONFIG);
56
56
  }, [visible]);
57
57
  const touchableStyle = {
58
58
  alignItems: 'center',
59
- backgroundColor: `rgba(${r}, ${g}, ${b}, ${defaultOpacity})`,
59
+ backgroundColor: `rgba(${r}, ${g}, ${b}, ${DEFAULT_OPACITY})`,
60
60
  borderRadius: theme.shape.roundness,
61
61
  flexDirection: 'row',
62
62
  padding: theme.spacing(2)
@@ -68,8 +68,8 @@ export default function Tooltip(props) {
68
68
  const textStyle = css([fontStyle, {
69
69
  marginRight: theme.spacing(2)
70
70
  }]);
71
- const buttonElem = /*#__PURE__*/React.createElement(TouchableWithoutFeedback, {
72
- disallowInterruption: true,
71
+ const buttonElem = /*#__PURE__*/React.createElement(ButtonBase, {
72
+ pressEffect: 'none',
73
73
  onPress: onClose
74
74
  }, /*#__PURE__*/React.createElement(View, {
75
75
  style: css(touchableStyle)
@@ -86,13 +86,13 @@ export default function Tooltip(props) {
86
86
  const arrowElem = /*#__PURE__*/React.createElement(UpArrow, {
87
87
  upsideDown: placement === 'top',
88
88
  fill: theme.palette.primary.main,
89
- opacity: defaultOpacity
89
+ opacity: DEFAULT_OPACITY
90
90
  });
91
91
  return /*#__PURE__*/React.createElement(View, {
92
92
  style: style
93
93
  }, children, /*#__PURE__*/React.createElement(Animated.View, {
94
94
  onLayout: event => setLayout(event.nativeEvent.layout),
95
- style: [tooltipAnimatedStyle, tooltipLayoutStyle, tooltipStyle]
95
+ style: [animatedStyle, tooltipLayoutStyle, tooltipStyle]
96
96
  }, placement === 'top' ? /*#__PURE__*/React.createElement(React.Fragment, null, buttonElem, arrowElem) : /*#__PURE__*/React.createElement(React.Fragment, null, arrowElem, buttonElem)));
97
97
  }
98
98
  ;
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","View","TouchableWithoutFeedback","Animated","useAnimatedStyle","useSharedValue","withTiming","rgb","createFontStyle","css","useTheme","Close","CloseIcon","UpArrow","defaultOpacity","initialLayout","width","height","x","y","ANIMATION_CONFIG","duration","Tooltip","props","children","left","onClose","placement","right","style","title","tooltipStyle","verticalOffset","visible","theme","layout","setLayout","useState","scale","tooltipAnimatedStyle","transform","value","r","g","b","palette","primary","main","totalVerticalOffset","tooltipLayoutStyle","alignItems","bottom","undefined","position","top","zIndex","tooltip","overflow","useEffect","nextScaleValue","touchableStyle","backgroundColor","borderRadius","shape","roundness","flexDirection","padding","spacing","fontStyle","selector","typo","caption2","color","contrastTextColor","textStyle","marginRight","buttonElem","arrowElem","event","nativeEvent"],"sources":["Tooltip.tsx"],"sourcesContent":["import React from 'react';\nimport { Text, View, ViewProps } from 'react-native';\nimport { TouchableWithoutFeedback } from 'react-native-gesture-handler';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';\nimport { rgb } from '@fountain-ui/utils';\nimport { createFontStyle, css, useTheme } from '../styles';\nimport { Close as CloseIcon } from '../internal/icons';\nimport type TooltipProps from './TooltipProps';\nimport UpArrow from './UpArrow';\n\nconst defaultOpacity = 0.8;\nconst initialLayout = { width: 0, height: 0, x: 0, y: 0 };\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 150 };\n\nexport default function Tooltip(props: TooltipProps) {\n const {\n children,\n left,\n onClose,\n placement = 'top',\n right,\n style,\n title,\n tooltipStyle,\n verticalOffset = 4,\n visible = false,\n } = props;\n\n const theme = useTheme();\n\n const [layout, setLayout] = React.useState(initialLayout);\n\n const scale = useSharedValue(0);\n\n const tooltipAnimatedStyle = useAnimatedStyle(() => ({\n transform: [{ scale: scale.value }],\n }), []);\n\n const [r, g, b] = rgb(theme.palette.primary.main);\n\n const totalVerticalOffset = -(layout.height + verticalOffset);\n const tooltipLayoutStyle: ViewProps['style'] = {\n alignItems: 'center',\n bottom: placement === 'bottom' ? totalVerticalOffset : undefined,\n left,\n position: 'absolute',\n right,\n top: placement === 'top' ? totalVerticalOffset : undefined,\n zIndex: theme.zIndex.tooltip,\n height: visible ? undefined : 0,\n overflow: visible ? undefined : 'hidden',\n };\n\n React.useEffect(() => {\n const nextScaleValue = visible ? 1 : 0;\n\n scale.value = withTiming(nextScaleValue, ANIMATION_CONFIG);\n }, [visible]);\n\n const touchableStyle: ViewProps['style'] = {\n alignItems: 'center',\n backgroundColor: `rgba(${r}, ${g}, ${b}, ${defaultOpacity})`,\n borderRadius: theme.shape.roundness,\n flexDirection: 'row',\n padding: theme.spacing(2),\n };\n\n const fontStyle = createFontStyle(theme, {\n selector: (typo) => typo.caption2,\n color: theme.palette.primary.contrastTextColor,\n });\n\n const textStyle = css([\n fontStyle,\n { marginRight: theme.spacing(2) },\n ]);\n\n const buttonElem = (\n <TouchableWithoutFeedback\n disallowInterruption={true}\n onPress={onClose}\n >\n <View style={css(touchableStyle)}>\n <Text\n children={title}\n // TODO: Should we provide text prop customization?\n numberOfLines={1}\n style={textStyle}\n />\n <CloseIcon\n fill={theme.palette.primary.contrastTextColor}\n width={20}\n height={20}\n />\n </View>\n </TouchableWithoutFeedback>\n );\n\n const arrowElem = (\n <UpArrow\n upsideDown={placement === 'top'}\n fill={theme.palette.primary.main}\n opacity={defaultOpacity}\n />\n );\n\n return (\n <View style={style}>\n {children}\n\n <Animated.View\n onLayout={(event) => setLayout(event.nativeEvent.layout)}\n style={[\n tooltipAnimatedStyle,\n tooltipLayoutStyle,\n tooltipStyle,\n ]}\n >\n {placement === 'top' ? (\n <React.Fragment>\n {buttonElem}\n {arrowElem}\n </React.Fragment>\n ) : (\n <React.Fragment>\n {arrowElem}\n {buttonElem}\n </React.Fragment>\n )}\n </Animated.View>\n </View>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,EAAeC,IAAf,QAAsC,cAAtC;AACA,SAASC,wBAAT,QAAyC,8BAAzC;AAEA,OAAOC,QAAP,IAAmBC,gBAAnB,EAAqCC,cAArC,EAAqDC,UAArD,QAAuE,yBAAvE;AACA,SAASC,GAAT,QAAoB,oBAApB;AACA,SAASC,eAAT,EAA0BC,GAA1B,EAA+BC,QAA/B,QAA+C,WAA/C;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,mBAAnC;AAEA,OAAOC,OAAP,MAAoB,WAApB;AAEA,MAAMC,cAAc,GAAG,GAAvB;AACA,MAAMC,aAAa,GAAG;EAAEC,KAAK,EAAE,CAAT;EAAYC,MAAM,EAAE,CAApB;EAAuBC,CAAC,EAAE,CAA1B;EAA6BC,CAAC,EAAE;AAAhC,CAAtB;AAEA,MAAMC,gBAA4C,GAAG;EAAEC,QAAQ,EAAE;AAAZ,CAArD;AAEA,eAAe,SAASC,OAAT,CAAiBC,KAAjB,EAAsC;EACjD,MAAM;IACFC,QADE;IAEFC,IAFE;IAGFC,OAHE;IAIFC,SAAS,GAAG,KAJV;IAKFC,KALE;IAMFC,KANE;IAOFC,KAPE;IAQFC,YARE;IASFC,cAAc,GAAG,CATf;IAUFC,OAAO,GAAG;EAVR,IAWFV,KAXJ;EAaA,MAAMW,KAAK,GAAGxB,QAAQ,EAAtB;EAEA,MAAM,CAACyB,MAAD,EAASC,SAAT,IAAsBrC,KAAK,CAACsC,QAAN,CAAetB,aAAf,CAA5B;EAEA,MAAMuB,KAAK,GAAGjC,cAAc,CAAC,CAAD,CAA5B;EAEA,MAAMkC,oBAAoB,GAAGnC,gBAAgB,CAAC,OAAO;IACjDoC,SAAS,EAAE,CAAC;MAAEF,KAAK,EAAEA,KAAK,CAACG;IAAf,CAAD;EADsC,CAAP,CAAD,EAEzC,EAFyC,CAA7C;EAIA,MAAM,CAACC,CAAD,EAAIC,CAAJ,EAAOC,CAAP,IAAYrC,GAAG,CAAC2B,KAAK,CAACW,OAAN,CAAcC,OAAd,CAAsBC,IAAvB,CAArB;EAEA,MAAMC,mBAAmB,GAAG,EAAEb,MAAM,CAAClB,MAAP,GAAgBe,cAAlB,CAA5B;EACA,MAAMiB,kBAAsC,GAAG;IAC3CC,UAAU,EAAE,QAD+B;IAE3CC,MAAM,EAAExB,SAAS,KAAK,QAAd,GAAyBqB,mBAAzB,GAA+CI,SAFZ;IAG3C3B,IAH2C;IAI3C4B,QAAQ,EAAE,UAJiC;IAK3CzB,KAL2C;IAM3C0B,GAAG,EAAE3B,SAAS,KAAK,KAAd,GAAsBqB,mBAAtB,GAA4CI,SANN;IAO3CG,MAAM,EAAErB,KAAK,CAACqB,MAAN,CAAaC,OAPsB;IAQ3CvC,MAAM,EAAEgB,OAAO,GAAGmB,SAAH,GAAe,CARa;IAS3CK,QAAQ,EAAExB,OAAO,GAAGmB,SAAH,GAAe;EATW,CAA/C;EAYArD,KAAK,CAAC2D,SAAN,CAAgB,MAAM;IAClB,MAAMC,cAAc,GAAG1B,OAAO,GAAG,CAAH,GAAO,CAArC;IAEAK,KAAK,CAACG,KAAN,GAAcnC,UAAU,CAACqD,cAAD,EAAiBvC,gBAAjB,CAAxB;EACH,CAJD,EAIG,CAACa,OAAD,CAJH;EAMA,MAAM2B,cAAkC,GAAG;IACvCV,UAAU,EAAE,QAD2B;IAEvCW,eAAe,EAAG,QAAOnB,CAAE,KAAIC,CAAE,KAAIC,CAAE,KAAI9B,cAAe,GAFnB;IAGvCgD,YAAY,EAAE5B,KAAK,CAAC6B,KAAN,CAAYC,SAHa;IAIvCC,aAAa,EAAE,KAJwB;IAKvCC,OAAO,EAAEhC,KAAK,CAACiC,OAAN,CAAc,CAAd;EAL8B,CAA3C;EAQA,MAAMC,SAAS,GAAG5D,eAAe,CAAC0B,KAAD,EAAQ;IACrCmC,QAAQ,EAAGC,IAAD,IAAUA,IAAI,CAACC,QADY;IAErCC,KAAK,EAAEtC,KAAK,CAACW,OAAN,CAAcC,OAAd,CAAsB2B;EAFQ,CAAR,CAAjC;EAKA,MAAMC,SAAS,GAAGjE,GAAG,CAAC,CAClB2D,SADkB,EAElB;IAAEO,WAAW,EAAEzC,KAAK,CAACiC,OAAN,CAAc,CAAd;EAAf,CAFkB,CAAD,CAArB;EAKA,MAAMS,UAAU,gBACZ,oBAAC,wBAAD;IACI,oBAAoB,EAAE,IAD1B;IAEI,OAAO,EAAElD;EAFb,gBAII,oBAAC,IAAD;IAAM,KAAK,EAAEjB,GAAG,CAACmD,cAAD;EAAhB,gBACI,oBAAC,IAAD;IACI,QAAQ,EAAE9B,KADd,CAEI;IAFJ;IAGI,aAAa,EAAE,CAHnB;IAII,KAAK,EAAE4C;EAJX,EADJ,eAOI,oBAAC,SAAD;IACI,IAAI,EAAExC,KAAK,CAACW,OAAN,CAAcC,OAAd,CAAsB2B,iBADhC;IAEI,KAAK,EAAE,EAFX;IAGI,MAAM,EAAE;EAHZ,EAPJ,CAJJ,CADJ;EAqBA,MAAMI,SAAS,gBACX,oBAAC,OAAD;IACI,UAAU,EAAElD,SAAS,KAAK,KAD9B;IAEI,IAAI,EAAEO,KAAK,CAACW,OAAN,CAAcC,OAAd,CAAsBC,IAFhC;IAGI,OAAO,EAAEjC;EAHb,EADJ;EAQA,oBACI,oBAAC,IAAD;IAAM,KAAK,EAAEe;EAAb,GACKL,QADL,eAGI,oBAAC,QAAD,CAAU,IAAV;IACI,QAAQ,EAAGsD,KAAD,IAAW1C,SAAS,CAAC0C,KAAK,CAACC,WAAN,CAAkB5C,MAAnB,CADlC;IAEI,KAAK,EAAE,CACHI,oBADG,EAEHU,kBAFG,EAGHlB,YAHG;EAFX,GAQKJ,SAAS,KAAK,KAAd,gBACG,oBAAC,KAAD,CAAO,QAAP,QACKiD,UADL,EAEKC,SAFL,CADH,gBAMG,oBAAC,KAAD,CAAO,QAAP,QACKA,SADL,EAEKD,UAFL,CAdR,CAHJ,CADJ;AA0BH;AAAA"}
1
+ {"version":3,"names":["React","useEffect","useState","Text","View","Animated","useAnimatedStyle","useSharedValue","withTiming","rgb","ButtonBase","createFontStyle","css","useTheme","Close","CloseIcon","UpArrow","DEFAULT_OPACITY","initialLayout","width","height","x","y","ANIMATION_CONFIG","duration","Tooltip","props","children","left","onClose","placement","right","style","title","tooltipStyle","verticalOffset","visible","theme","layout","setLayout","scale","animatedStyle","transform","value","r","g","b","palette","primary","main","totalVerticalOffset","tooltipLayoutStyle","alignItems","bottom","undefined","position","top","zIndex","tooltip","overflow","nextScaleValue","touchableStyle","backgroundColor","borderRadius","shape","roundness","flexDirection","padding","spacing","fontStyle","selector","typo","caption2","color","contrastTextColor","textStyle","marginRight","buttonElem","arrowElem","event","nativeEvent"],"sources":["Tooltip.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Text, View, ViewProps } from 'react-native';\nimport type { WithTimingConfig } from 'react-native-reanimated';\nimport Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';\nimport { rgb } from '@fountain-ui/utils';\nimport ButtonBase from '../ButtonBase';\nimport { createFontStyle, css, useTheme } from '../styles';\nimport { Close as CloseIcon } from '../internal/icons';\nimport type TooltipProps from './TooltipProps';\nimport UpArrow from './UpArrow';\n\nconst DEFAULT_OPACITY = 0.8;\nconst initialLayout = { width: 0, height: 0, x: 0, y: 0 };\n\nconst ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 150 };\n\nexport default function Tooltip(props: TooltipProps) {\n const {\n children,\n left,\n onClose,\n placement = 'top',\n right,\n style,\n title,\n tooltipStyle,\n verticalOffset = 4,\n visible = false,\n } = props;\n\n const theme = useTheme();\n\n const [layout, setLayout] = useState(initialLayout);\n\n const scale = useSharedValue(0);\n\n const animatedStyle = useAnimatedStyle(() => ({\n transform: [{ scale: scale.value }],\n }), []);\n\n const [r, g, b] = rgb(theme.palette.primary.main);\n\n const totalVerticalOffset = -(layout.height + verticalOffset);\n const tooltipLayoutStyle: ViewProps['style'] = {\n alignItems: 'center',\n bottom: placement === 'bottom' ? totalVerticalOffset : undefined,\n left,\n position: 'absolute',\n right,\n top: placement === 'top' ? totalVerticalOffset : undefined,\n zIndex: theme.zIndex.tooltip,\n height: visible ? undefined : 0,\n overflow: visible ? undefined : 'hidden',\n };\n\n useEffect(() => {\n const nextScaleValue = visible ? 1 : 0;\n\n scale.value = withTiming(nextScaleValue, ANIMATION_CONFIG);\n }, [visible]);\n\n const touchableStyle: ViewProps['style'] = {\n alignItems: 'center',\n backgroundColor: `rgba(${r}, ${g}, ${b}, ${DEFAULT_OPACITY})`,\n borderRadius: theme.shape.roundness,\n flexDirection: 'row',\n padding: theme.spacing(2),\n };\n\n const fontStyle = createFontStyle(theme, {\n selector: (typo) => typo.caption2,\n color: theme.palette.primary.contrastTextColor,\n });\n\n const textStyle = css([\n fontStyle,\n { marginRight: theme.spacing(2) },\n ]);\n\n const buttonElem = (\n <ButtonBase\n pressEffect={'none'}\n onPress={onClose}\n >\n <View style={css(touchableStyle)}>\n <Text\n children={title}\n // TODO: Should we provide text prop customization?\n numberOfLines={1}\n style={textStyle}\n />\n <CloseIcon\n fill={theme.palette.primary.contrastTextColor}\n width={20}\n height={20}\n />\n </View>\n </ButtonBase>\n );\n\n const arrowElem = (\n <UpArrow\n upsideDown={placement === 'top'}\n fill={theme.palette.primary.main}\n opacity={DEFAULT_OPACITY}\n />\n );\n\n return (\n <View style={style}>\n {children}\n\n <Animated.View\n onLayout={(event) => setLayout(event.nativeEvent.layout)}\n style={[\n animatedStyle,\n tooltipLayoutStyle,\n tooltipStyle,\n ]}\n >\n {placement === 'top' ? (\n <React.Fragment>\n {buttonElem}\n {arrowElem}\n </React.Fragment>\n ) : (\n <React.Fragment>\n {arrowElem}\n {buttonElem}\n </React.Fragment>\n )}\n </Animated.View>\n </View>\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import Animated from 'react-native-reanimated';
2
- import Pressable from '../Pressable'; // @ts-ignore
3
-
1
+ import { Animated } from 'react-native';
2
+ import Pressable from '../Pressable';
4
3
  export default Animated.createAnimatedComponent(Pressable);
5
4
  //# sourceMappingURL=AnimatedPressable.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Animated","Pressable","createAnimatedComponent"],"sources":["AnimatedPressable.tsx"],"sourcesContent":["import React from 'react';\nimport Animated from 'react-native-reanimated';\nimport Pressable from '../Pressable';\n\n// @ts-ignore\nexport default Animated.createAnimatedComponent(Pressable);\n"],"mappings":"AACA,OAAOA,QAAP,MAAqB,yBAArB;AACA,OAAOC,SAAP,MAAsB,cAAtB,C,CAEA;;AACA,eAAeD,QAAQ,CAACE,uBAAT,CAAiCD,SAAjC,CAAf"}
1
+ {"version":3,"names":["Animated","Pressable","createAnimatedComponent"],"sources":["AnimatedPressable.tsx"],"sourcesContent":["import React from 'react';\nimport { Animated } from 'react-native';\nimport Pressable from '../Pressable';\n\nexport default Animated.createAnimatedComponent(Pressable);\n"],"mappings":"AACA,SAASA,QAAT,QAAyB,cAAzB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,eAAeD,QAAQ,CAACE,uBAAT,CAAiCD,SAAjC,CAAf"}
@@ -1,11 +1,11 @@
1
- import React from 'react';
1
+ import { useCallback, useRef } from 'react';
2
2
  export default function useThrottle(options) {
3
3
  const {
4
4
  periodMillis,
5
5
  callback
6
6
  } = options;
7
- const lastExecMillisRef = React.useRef(0);
8
- return React.useCallback(function () {
7
+ const lastExecMillisRef = useRef(0);
8
+ return useCallback(function () {
9
9
  const now = Date.now();
10
10
  const millisAfterExecuted = now - lastExecMillisRef.current;
11
11
  lastExecMillisRef.current = now;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useThrottle","options","periodMillis","callback","lastExecMillisRef","useRef","useCallback","now","Date","millisAfterExecuted","current"],"sources":["useThrottle.ts"],"sourcesContent":["import React from 'react';\n\nexport interface ThrottleOptions {\n periodMillis: number;\n callback?: (args?: any) => void;\n}\n\nexport default function useThrottle(options: ThrottleOptions) {\n const { periodMillis, callback } = options;\n\n const lastExecMillisRef = React.useRef(0);\n\n return React.useCallback((...args: any[]) => {\n const now = Date.now();\n const millisAfterExecuted = now - lastExecMillisRef.current;\n lastExecMillisRef.current = now;\n\n if (millisAfterExecuted > periodMillis || periodMillis <= 0) {\n if (callback) {\n callback(...args);\n }\n }\n }, [callback, periodMillis]);\n}\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAOA,eAAe,SAASC,WAAT,CAAqBC,OAArB,EAA+C;EAC1D,MAAM;IAAEC,YAAF;IAAgBC;EAAhB,IAA6BF,OAAnC;EAEA,MAAMG,iBAAiB,GAAGL,KAAK,CAACM,MAAN,CAAa,CAAb,CAA1B;EAEA,OAAON,KAAK,CAACO,WAAN,CAAkB,YAAoB;IACzC,MAAMC,GAAG,GAAGC,IAAI,CAACD,GAAL,EAAZ;IACA,MAAME,mBAAmB,GAAGF,GAAG,GAAGH,iBAAiB,CAACM,OAApD;IACAN,iBAAiB,CAACM,OAAlB,GAA4BH,GAA5B;;IAEA,IAAIE,mBAAmB,GAAGP,YAAtB,IAAsCA,YAAY,IAAI,CAA1D,EAA6D;MACzD,IAAIC,QAAJ,EAAc;QACVA,QAAQ,CAAC,YAAD,CAAR;MACH;IACJ;EACJ,CAVM,EAUJ,CAACA,QAAD,EAAWD,YAAX,CAVI,CAAP;AAWH"}
1
+ {"version":3,"names":["useCallback","useRef","useThrottle","options","periodMillis","callback","lastExecMillisRef","now","Date","millisAfterExecuted","current"],"sources":["useThrottle.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nexport interface ThrottleOptions {\n periodMillis: number;\n callback?: (args?: any) => void;\n}\n\nexport default function useThrottle(options: ThrottleOptions) {\n const { periodMillis, callback } = options;\n\n const lastExecMillisRef = useRef(0);\n\n return useCallback((...args: any[]) => {\n const now = Date.now();\n const millisAfterExecuted = now - lastExecMillisRef.current;\n lastExecMillisRef.current = now;\n\n if (millisAfterExecuted > periodMillis || periodMillis <= 0) {\n if (callback) {\n callback(...args);\n }\n }\n }, [callback, periodMillis]);\n}\n"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,MAAtB,QAAoC,OAApC;AAOA,eAAe,SAASC,WAAT,CAAqBC,OAArB,EAA+C;EAC1D,MAAM;IAAEC,YAAF;IAAgBC;EAAhB,IAA6BF,OAAnC;EAEA,MAAMG,iBAAiB,GAAGL,MAAM,CAAC,CAAD,CAAhC;EAEA,OAAOD,WAAW,CAAC,YAAoB;IACnC,MAAMO,GAAG,GAAGC,IAAI,CAACD,GAAL,EAAZ;IACA,MAAME,mBAAmB,GAAGF,GAAG,GAAGD,iBAAiB,CAACI,OAApD;IACAJ,iBAAiB,CAACI,OAAlB,GAA4BH,GAA5B;;IAEA,IAAIE,mBAAmB,GAAGL,YAAtB,IAAsCA,YAAY,IAAI,CAA1D,EAA6D;MACzD,IAAIC,QAAJ,EAAc;QACVA,QAAQ,CAAC,YAAD,CAAR;MACH;IACJ;EACJ,CAViB,EAUf,CAACA,QAAD,EAAWD,YAAX,CAVe,CAAlB;AAWH"}
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import { useState } from 'react';
2
2
  import { useWorkletCallback } from 'react-native-reanimated';
3
3
  export default function useHeight() {
4
4
  let initialHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
5
- const [height, setHeight] = React.useState(initialHeight);
5
+ const [height, setHeight] = useState(initialHeight);
6
6
  const onLayout = useWorkletCallback(e => {
7
7
  setHeight(e.nativeEvent.layout.height);
8
8
  }, []);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useWorkletCallback","useHeight","initialHeight","height","setHeight","useState","onLayout","e","nativeEvent","layout"],"sources":["useHeight.ts"],"sourcesContent":["import React from 'react';\nimport { ViewProps } from 'react-native';\nimport { useWorkletCallback } from 'react-native-reanimated';\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {\n const [height, setHeight] = React.useState<number>(initialHeight);\n\n const onLayout = useWorkletCallback((e) => {\n setHeight(e.nativeEvent.layout.height);\n }, []);\n\n return [height, onLayout];\n};\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,kBAAT,QAAmC,yBAAnC;AAIA,eAAe,SAASC,SAAT,GAAkE;EAAA,IAA/CC,aAA+C,uEAA/B,CAA+B;EAC7E,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBL,KAAK,CAACM,QAAN,CAAuBH,aAAvB,CAA5B;EAEA,MAAMI,QAAQ,GAAGN,kBAAkB,CAAEO,CAAD,IAAO;IACvCH,SAAS,CAACG,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBN,MAAtB,CAAT;EACH,CAFkC,EAEhC,EAFgC,CAAnC;EAIA,OAAO,CAACA,MAAD,EAASG,QAAT,CAAP;AACH;AAAA"}
1
+ {"version":3,"names":["useState","useWorkletCallback","useHeight","initialHeight","height","setHeight","onLayout","e","nativeEvent","layout"],"sources":["useHeight.ts"],"sourcesContent":["import { useState } from 'react';\nimport { ViewProps } from 'react-native';\nimport { useWorkletCallback } from 'react-native-reanimated';\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {\n const [height, setHeight] = useState<number>(initialHeight);\n\n const onLayout = useWorkletCallback((e) => {\n setHeight(e.nativeEvent.layout.height);\n }, []);\n\n return [height, onLayout];\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAASC,kBAAT,QAAmC,yBAAnC;AAIA,eAAe,SAASC,SAAT,GAAkE;EAAA,IAA/CC,aAA+C,uEAA/B,CAA+B;EAC7E,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBL,QAAQ,CAASG,aAAT,CAApC;EAEA,MAAMG,QAAQ,GAAGL,kBAAkB,CAAEM,CAAD,IAAO;IACvCF,SAAS,CAACE,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBL,MAAtB,CAAT;EACH,CAFkC,EAEhC,EAFgC,CAAnC;EAIA,OAAO,CAACA,MAAD,EAASE,QAAT,CAAP;AACH;AAAA"}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import Animated from 'react-native-reanimated';
3
- declare const _default: React.ComponentClass<Animated.AnimateProps<import("../Pressable").PressableProps>, any>;
2
+ import { Animated } from 'react-native';
3
+ declare const _default: Animated.AnimatedComponent<React.ComponentType<import("../Pressable").PressableProps>>;
4
4
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fountain-ui/core",
3
- "version": "2.0.0-beta.12",
3
+ "version": "2.0.0-beta.13",
4
4
  "author": "Fountain-UI Team",
5
5
  "description": "React components that implement Tappytoon's Fountain Design.",
6
6
  "license": "MIT",
@@ -67,5 +67,5 @@
67
67
  "publishConfig": {
68
68
  "access": "public"
69
69
  },
70
- "gitHead": "319e9f913cea57c5570e8b09a9ce410b3914d4f7"
70
+ "gitHead": "0ac49f4ca5f910fc8b5edad2593300d796b2d914"
71
71
  }