@fountain-ui/core 2.0.0-beta.24 → 2.0.0-beta.25
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.
- package/build/commonjs/ButtonBase/ButtonBase.js +2 -2
- package/build/commonjs/ButtonBase/ButtonBase.js.map +1 -1
- package/build/commonjs/CircularProgress/CircularProgress.js +3 -1
- package/build/commonjs/CircularProgress/CircularProgress.js.map +1 -1
- package/build/commonjs/ImageCore/ImageCoreNative.js +3 -1
- package/build/commonjs/ImageCore/ImageCoreNative.js.map +1 -1
- package/build/commonjs/Radio/Radio.js +0 -1
- package/build/commonjs/Radio/Radio.js.map +1 -1
- package/build/commonjs/Tabs/TabIndicator.js +4 -2
- package/build/commonjs/Tabs/TabIndicator.js.map +1 -1
- package/build/commonjs/TextField/TextField.js +6 -6
- package/build/commonjs/TextField/TextField.js.map +1 -1
- package/build/commonjs/hooks/index.js +8 -0
- package/build/commonjs/hooks/index.js.map +1 -1
- package/build/commonjs/hooks/useAnimatedValue.js +31 -0
- package/build/commonjs/hooks/useAnimatedValue.js.map +1 -0
- package/build/commonjs/hooks/useSyncAnimatedValue.js +8 -6
- package/build/commonjs/hooks/useSyncAnimatedValue.js.map +1 -1
- package/build/module/ButtonBase/ButtonBase.js +4 -4
- package/build/module/ButtonBase/ButtonBase.js.map +1 -1
- package/build/module/CircularProgress/CircularProgress.js +3 -2
- package/build/module/CircularProgress/CircularProgress.js.map +1 -1
- package/build/module/ImageCore/ImageCoreNative.js +3 -2
- package/build/module/ImageCore/ImageCoreNative.js.map +1 -1
- package/build/module/Radio/Radio.js +1 -2
- package/build/module/Radio/Radio.js.map +1 -1
- package/build/module/Tabs/TabIndicator.js +4 -3
- package/build/module/Tabs/TabIndicator.js.map +1 -1
- package/build/module/TextField/TextField.js +4 -3
- package/build/module/TextField/TextField.js.map +1 -1
- package/build/module/hooks/index.js +1 -0
- package/build/module/hooks/index.js.map +1 -1
- package/build/module/hooks/useAnimatedValue.js +22 -0
- package/build/module/hooks/useAnimatedValue.js.map +1 -0
- package/build/module/hooks/useSyncAnimatedValue.js +6 -6
- package/build/module/hooks/useSyncAnimatedValue.js.map +1 -1
- package/build/typescript/CircularProgress/CircularProgress.d.ts +1 -1
- package/build/typescript/hooks/index.d.ts +1 -0
- package/build/typescript/hooks/useAnimatedValue.d.ts +2 -0
- package/package.json +2 -2
- package/src/ButtonBase/ButtonBase.tsx +4 -4
- package/src/CircularProgress/CircularProgress.tsx +4 -3
- package/src/ImageCore/ImageCoreNative.tsx +3 -2
- package/src/Radio/Radio.tsx +1 -3
- package/src/Tabs/TabIndicator.tsx +4 -3
- package/src/TextField/TextField.tsx +4 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useAnimatedValue.ts +21 -0
- package/src/hooks/useSyncAnimatedValue.ts +6 -6
|
@@ -54,8 +54,8 @@ function ButtonBase(props) {
|
|
|
54
54
|
periodMillis: disableThrottle ? 0 : throttleMillis,
|
|
55
55
|
callback: onPress
|
|
56
56
|
});
|
|
57
|
-
const opacity = (0,
|
|
58
|
-
const scale = (0,
|
|
57
|
+
const opacity = (0, _hooks.useAnimatedValue)(ORIGINAL_OPACITY);
|
|
58
|
+
const scale = (0, _hooks.useAnimatedValue)(ORIGINAL_SCALE);
|
|
59
59
|
(0, _react.useEffect)(() => {
|
|
60
60
|
opacity.setValue(disabled ? DISABLED_OPACITY : ORIGINAL_OPACITY);
|
|
61
61
|
}, [disabled]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ORIGINAL_OPACITY","DISABLED_OPACITY","ACTIVE_OPACITY","ORIGINAL_SCALE","MINIFIED_SCALE","SCALE_EFFECT_PRESS_IN_DELAY","startTimingAnimationWithDefaults","value","toValue","Animated","timing","duration","useNativeDriver","start","ButtonBase","props","children","disabled","disableThrottle","onPress","pressEffect","style","styleProp","throttleMillis","otherProps","handlePress","useThrottle","periodMillis","callback","opacity","
|
|
1
|
+
{"version":3,"names":["ORIGINAL_OPACITY","DISABLED_OPACITY","ACTIVE_OPACITY","ORIGINAL_SCALE","MINIFIED_SCALE","SCALE_EFFECT_PRESS_IN_DELAY","startTimingAnimationWithDefaults","value","toValue","Animated","timing","duration","useNativeDriver","start","ButtonBase","props","children","disabled","disableThrottle","onPress","pressEffect","style","styleProp","throttleMillis","otherProps","handlePress","useThrottle","periodMillis","callback","opacity","useAnimatedValue","scale","useEffect","setValue","startScaleAnimation","useCallback","pressIn","isHover","startOpacityAnimation","startPressAnimation","handlePressIn","handlePressOut","animatedStyle","transform","pressDelay","hovered","undefined"],"sources":["ButtonBase.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { Animated } from 'react-native';\nimport { useAnimatedValue, 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 SCALE_EFFECT_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 = useAnimatedValue(ORIGINAL_OPACITY);\n const scale = useAnimatedValue(ORIGINAL_SCALE);\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 const pressDelay = pressEffect === 'scale'\n ? SCALE_EFFECT_PRESS_IN_DELAY\n : 0;\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={pressDelay}\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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"}
|
|
@@ -11,6 +11,8 @@ var _reactNative = require("react-native");
|
|
|
11
11
|
|
|
12
12
|
var _icons = require("../internal/icons");
|
|
13
13
|
|
|
14
|
+
var _hooks = require("../hooks");
|
|
15
|
+
|
|
14
16
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
17
|
|
|
16
18
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -32,7 +34,7 @@ function CircularProgress(props) {
|
|
|
32
34
|
style: styleProp
|
|
33
35
|
} = props;
|
|
34
36
|
const styles = useStyles();
|
|
35
|
-
const rotate = (0,
|
|
37
|
+
const rotate = (0, _hooks.useAnimatedValue)(MIN_ROTATE_DEGREE);
|
|
36
38
|
const animatedStyle = {
|
|
37
39
|
transform: [{
|
|
38
40
|
rotate: rotate.interpolate({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MIN_ROTATE_DEGREE","MAX_ROTATE_DEGREE","useStyles","root","alignItems","justifyContent","CircularProgress","props","style","styleProp","styles","rotate","
|
|
1
|
+
{"version":3,"names":["MIN_ROTATE_DEGREE","MAX_ROTATE_DEGREE","useStyles","root","alignItems","justifyContent","CircularProgress","props","style","styleProp","styles","rotate","useAnimatedValue","animatedStyle","transform","interpolate","inputRange","outputRange","useEffect","Animated","loop","timing","toValue","duration","easing","Easing","linear","useNativeDriver","start"],"sources":["CircularProgress.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport type { ViewProps } from 'react-native';\nimport { Animated, Easing } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { CircularProgress as CircularProgressIcon } from '../internal/icons';\nimport type { OverridableComponentProps } from '../types';\nimport { useAnimatedValue } from '../hooks';\n\ntype CircularProgressStyles = NamedStylesStringUnion<'root'>;\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 = useAnimatedValue(MIN_ROTATE_DEGREE);\n\n const animatedStyle = {\n transform: [{\n rotate: rotate.interpolate({\n inputRange: [MIN_ROTATE_DEGREE, MAX_ROTATE_DEGREE],\n outputRange: [`${MIN_ROTATE_DEGREE}deg`, `${MAX_ROTATE_DEGREE}deg`],\n }),\n }],\n };\n\n useEffect(() => {\n Animated.loop(\n Animated.timing(\n rotate,\n {\n toValue: MAX_ROTATE_DEGREE,\n duration: 900,\n easing: Easing.linear,\n useNativeDriver: true,\n },\n ),\n ).start();\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;;AAEA;;AAEA;;AAEA;;;;;;AAIA,MAAMA,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;;AASe,SAASC,gBAAT,CAA0BC,KAA1B,EAAuE;EAClF,MAAM;IAAEC,KAAK,EAAEC;EAAT,IAAuBF,KAA7B;EAEA,MAAMG,MAAM,GAAGR,SAAS,EAAxB;EAEA,MAAMS,MAAM,GAAG,IAAAC,uBAAA,EAAiBZ,iBAAjB,CAAf;EAEA,MAAMa,aAAa,GAAG;IAClBC,SAAS,EAAE,CAAC;MACRH,MAAM,EAAEA,MAAM,CAACI,WAAP,CAAmB;QACvBC,UAAU,EAAE,CAAChB,iBAAD,EAAoBC,iBAApB,CADW;QAEvBgB,WAAW,EAAE,CAAE,GAAEjB,iBAAkB,KAAtB,EAA6B,GAAEC,iBAAkB,KAAjD;MAFU,CAAnB;IADA,CAAD;EADO,CAAtB;EASA,IAAAiB,gBAAA,EAAU,MAAM;IACZC,qBAAA,CAASC,IAAT,CACID,qBAAA,CAASE,MAAT,CACIV,MADJ,EAEI;MACIW,OAAO,EAAErB,iBADb;MAEIsB,QAAQ,EAAE,GAFd;MAGIC,MAAM,EAAEC,mBAAA,CAAOC,MAHnB;MAIIC,eAAe,EAAE;IAJrB,CAFJ,CADJ,EAUEC,KAVF;EAWH,CAZD,EAYG,EAZH;EAcA,oBACI,6BAAC,qBAAD,CAAU,IAAV;IACI,QAAQ,eAAE,6BAAC,uBAAD,OADd;IAEI,KAAK,EAAE,CACHf,aADG,EAEHH,MAAM,CAACP,IAFJ,EAGHM,SAHG;EAFX,EADJ;AAUH;;AAAA"}
|
|
@@ -11,6 +11,8 @@ var _reactNative = require("react-native");
|
|
|
11
11
|
|
|
12
12
|
var _reactNativeFastImage = _interopRequireDefault(require("react-native-fast-image"));
|
|
13
13
|
|
|
14
|
+
var _hooks = require("../hooks");
|
|
15
|
+
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
|
|
16
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -33,7 +35,7 @@ function ImageCore(props) {
|
|
|
33
35
|
source,
|
|
34
36
|
width
|
|
35
37
|
} = props;
|
|
36
|
-
const opacity = (0,
|
|
38
|
+
const opacity = (0, _hooks.useAnimatedValue)(INITIAL_OPACITY);
|
|
37
39
|
const handleLoad = (0, _react.useCallback)(() => {
|
|
38
40
|
_reactNative.Animated.timing(opacity, {
|
|
39
41
|
toValue: LOADED_OPACITY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AnimatedFastImage","Animated","createAnimatedComponent","FastImage","INITIAL_OPACITY","LOADED_OPACITY","ANIMATION_DURATION","ImageCore","props","height","onError","onLoad","resizeMode","source","width","opacity","
|
|
1
|
+
{"version":3,"names":["AnimatedFastImage","Animated","createAnimatedComponent","FastImage","INITIAL_OPACITY","LOADED_OPACITY","ANIMATION_DURATION","ImageCore","props","height","onError","onLoad","resizeMode","source","width","opacity","useAnimatedValue","handleLoad","useCallback","timing","toValue","duration","useNativeDriver","start","uri"],"sources":["ImageCoreNative.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Animated } from 'react-native';\nimport FastImage from 'react-native-fast-image';\nimport { useAnimatedValue } from '../hooks';\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 = useAnimatedValue(INITIAL_OPACITY);\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;;AACA;;AACA;;AACA;;;;;;;;AAGA;AACA,MAAMA,iBAAiB,GAAGC,qBAAA,CAASC,uBAAT,CAAiCC,6BAAjC,CAA1B;;AAEA,MAAMC,eAAe,GAAG,CAAxB;AACA,MAAMC,cAAc,GAAG,CAAvB;AAEA,MAAMC,kBAAkB,GAAG,GAA3B;;AAEe,SAASC,SAAT,CAAmBC,KAAnB,EAA0C;EACrD,MAAM;IACFC,MADE;IAEFC,OAFE;IAGFC,MAHE;IAIFC,UAJE;IAKFC,MALE;IAMFC;EANE,IAOFN,KAPJ;EASA,MAAMO,OAAO,GAAG,IAAAC,uBAAA,EAAiBZ,eAAjB,CAAhB;EAEA,MAAMa,UAAU,GAAG,IAAAC,kBAAA,EAAY,MAAM;IACjCjB,qBAAA,CAASkB,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,CARkB,EAQhB,CAACA,MAAD,CARgB,CAAnB;EAUA,oBACI,6BAAC,iBAAD;IACI,OAAO,EAAED,OADb;IAEI,MAAM,EAAEO,UAFZ;IAGI,UAAU,EAAEL,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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ICON_SIZE","useStyles","root","alignItems","flexDirection","Radio","props","checked","children","disabled","onChange","onChangeProp","style","value","otherProps","styles","
|
|
1
|
+
{"version":3,"names":["ICON_SIZE","useStyles","root","alignItems","flexDirection","Radio","props","checked","children","disabled","onChange","onChangeProp","style","value","otherProps","styles","context","React","useContext","RadioContext","handlePress","isChecked","icon","rootStyle","css"],"sources":["Radio.tsx"],"sourcesContent":["import React from 'react';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport ButtonBase from '../ButtonBase';\nimport { Radio as RadioIcon, RadioChecked as RadioCheckedIcon } from '../internal';\nimport { css } from '../styles';\nimport { RadioContext } from '../RadioGroup/RadioContextProvider';\nimport type RadioProps from './RadioProps';\n\ntype RadioStyles = NamedStylesStringUnion<'root'>;\n\nconst ICON_SIZE = 20;\n\nconst useStyles: UseStyles<RadioStyles> = function (): RadioStyles {\n return {\n root: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n };\n};\n\nexport default function Radio(props: RadioProps) {\n const {\n checked = false,\n children,\n disabled = false,\n onChange: onChangeProp,\n style,\n value,\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const context = React.useContext(RadioContext);\n\n const handlePress = () => {\n const onChange = context?.onChange ?? onChangeProp;\n if (onChange) {\n onChange(value);\n }\n };\n\n const isChecked = context?.value === value ?? checked;\n\n const icon = isChecked\n ? <RadioCheckedIcon width={ICON_SIZE} height={ICON_SIZE} color={'primary'}/>\n : <RadioIcon width={ICON_SIZE} height={ICON_SIZE} color={'tertiary'}/>;\n\n const rootStyle = css([\n styles.root,\n style,\n ]);\n\n return (\n <ButtonBase\n disabled={disabled}\n onPress={handlePress}\n style={rootStyle}\n {...otherProps}\n >\n {icon}\n\n {children ? children : null}\n </ButtonBase>\n );\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;AACA;;;;;;AAKA,MAAMA,SAAS,GAAG,EAAlB;;AAEA,MAAMC,SAAiC,GAAG,YAAyB;EAC/D,OAAO;IACHC,IAAI,EAAE;MACFC,UAAU,EAAE,QADV;MAEFC,aAAa,EAAE;IAFb;EADH,CAAP;AAMH,CAPD;;AASe,SAASC,KAAT,CAAeC,KAAf,EAAkC;EAC7C,MAAM;IACFC,OAAO,GAAG,KADR;IAEFC,QAFE;IAGFC,QAAQ,GAAG,KAHT;IAIFC,QAAQ,EAAEC,YAJR;IAKFC,KALE;IAMFC,KANE;IAOF,GAAGC;EAPD,IAQFR,KARJ;EAUA,MAAMS,MAAM,GAAGd,SAAS,EAAxB;;EAEA,MAAMe,OAAO,GAAGC,cAAA,CAAMC,UAAN,CAAiBC,kCAAjB,CAAhB;;EAEA,MAAMC,WAAW,GAAG,MAAM;IACtB,MAAMV,QAAQ,GAAG,CAAAM,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEN,QAAT,KAAqBC,YAAtC;;IACA,IAAID,QAAJ,EAAc;MACVA,QAAQ,CAACG,KAAD,CAAR;IACH;EACJ,CALD;;EAOA,MAAMQ,SAAS,GAAG,CAAAL,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEH,KAAT,MAAmBA,KAAnB,IAA4BN,OAA9C;EAEA,MAAMe,IAAI,GAAGD,SAAS,gBAChB,6BAAC,sBAAD;IAAkB,KAAK,EAAErB,SAAzB;IAAoC,MAAM,EAAEA,SAA5C;IAAuD,KAAK,EAAE;EAA9D,EADgB,gBAEhB,6BAAC,eAAD;IAAW,KAAK,EAAEA,SAAlB;IAA6B,MAAM,EAAEA,SAArC;IAAgD,KAAK,EAAE;EAAvD,EAFN;EAIA,MAAMuB,SAAS,GAAG,IAAAC,WAAA,EAAI,CAClBT,MAAM,CAACb,IADW,EAElBU,KAFkB,CAAJ,CAAlB;EAKA,oBACI,6BAAC,mBAAD;IACI,QAAQ,EAAEH,QADd;IAEI,OAAO,EAAEW,WAFb;IAGI,KAAK,EAAEG;EAHX,GAIQT,UAJR,GAMKQ,IANL,EAQKd,QAAQ,GAAGA,QAAH,GAAc,IAR3B,CADJ;AAYH;;AAAA"}
|
|
@@ -11,6 +11,8 @@ var _reactNative = require("react-native");
|
|
|
11
11
|
|
|
12
12
|
var _styles = require("../styles");
|
|
13
13
|
|
|
14
|
+
var _hooks = require("../hooks");
|
|
15
|
+
|
|
14
16
|
var _TabCoordinate = require("./TabCoordinate");
|
|
15
17
|
|
|
16
18
|
var _InternalContext = _interopRequireDefault(require("./InternalContext"));
|
|
@@ -81,8 +83,8 @@ function TabIndicator(props) {
|
|
|
81
83
|
tx: initialTx,
|
|
82
84
|
sx: initialSx
|
|
83
85
|
} = computeAnimationValues(initialIndex);
|
|
84
|
-
const translateX = (0,
|
|
85
|
-
const scaleX = (0,
|
|
86
|
+
const translateX = (0, _hooks.useAnimatedValue)(initialTx);
|
|
87
|
+
const scaleX = (0, _hooks.useAnimatedValue)(initialSx);
|
|
86
88
|
const {
|
|
87
89
|
indexStore
|
|
88
90
|
} = (0, _react.useContext)(_InternalContext.default);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["INDICATOR_WIDTH","INDICATOR_HEIGHT","SCROLLABLE_TABS_INSET","useStyles","theme","useTheme","root","backgroundColor","palette","secondary","main","left","bottom","width","height","position","disabled","startAnimation","value","toValue","Animated","timing","duration","easing","Easing","bezier","useNativeDriver","start","TabIndicator","props","coordinates","initialIndex","scrollable","style","otherProps","styles","computeAnimationValues","useCallback","currentIndex","x1","x2","defaultCoordinate","tabWidth","nextTranslateX","inset","nextScaleX","tx","sx","initialTx","initialSx","translateX","
|
|
1
|
+
{"version":3,"names":["INDICATOR_WIDTH","INDICATOR_HEIGHT","SCROLLABLE_TABS_INSET","useStyles","theme","useTheme","root","backgroundColor","palette","secondary","main","left","bottom","width","height","position","disabled","startAnimation","value","toValue","Animated","timing","duration","easing","Easing","bezier","useNativeDriver","start","TabIndicator","props","coordinates","initialIndex","scrollable","style","otherProps","styles","computeAnimationValues","useCallback","currentIndex","x1","x2","defaultCoordinate","tabWidth","nextTranslateX","inset","nextScaleX","tx","sx","initialTx","initialSx","translateX","useAnimatedValue","scaleX","indexStore","useContext","InternalContext","useEffect","subscribe","undefined","transform"],"sources":["TabIndicator.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { useTheme } from '../styles';\nimport { useAnimatedValue } from '../hooks';\nimport type TabIndicatorProps from './TabIndicatorProps';\nimport { defaultCoordinate } from './TabCoordinate';\nimport InternalContext from './InternalContext';\n\ntype TabIndicatorStyles = NamedStylesStringUnion<'root' | 'disabled'>;\n\nconst INDICATOR_WIDTH = 10;\nconst INDICATOR_HEIGHT = 4;\n\nconst SCROLLABLE_TABS_INSET = 12 * 2;\n\nconst useStyles: UseStyles<TabIndicatorStyles> = function (): TabIndicatorStyles {\n const theme = useTheme();\n\n return {\n root: {\n backgroundColor: theme.palette.secondary.main,\n left: 0,\n bottom: 0,\n width: INDICATOR_WIDTH,\n height: INDICATOR_HEIGHT,\n position: 'absolute',\n },\n disabled: {\n height: 0,\n },\n };\n};\n\nconst startAnimation = (value: Animated.Value, toValue: number) => {\n Animated.timing(value, {\n toValue: toValue,\n duration: 300,\n easing: Easing.bezier(0.25, 1, 0.5, 1),\n useNativeDriver: true,\n }).start();\n};\n\nexport default function TabIndicator(props: TabIndicatorProps) {\n const {\n coordinates,\n disabled,\n initialIndex,\n scrollable,\n style,\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const computeAnimationValues = useCallback((currentIndex: number) => {\n const { x1, x2 } = coordinates[currentIndex] ?? defaultCoordinate;\n\n const tabWidth = x2 - x1;\n\n const nextTranslateX = x1 + (tabWidth - INDICATOR_WIDTH) / 2;\n\n const inset = scrollable ? SCROLLABLE_TABS_INSET : 0;\n const nextScaleX = (tabWidth - inset) / INDICATOR_WIDTH;\n\n return { tx: nextTranslateX, sx: nextScaleX };\n }, [coordinates, scrollable]);\n\n const {\n tx: initialTx,\n sx: initialSx,\n } = computeAnimationValues(initialIndex);\n\n const translateX = useAnimatedValue(initialTx);\n const scaleX = useAnimatedValue(initialSx);\n\n const { indexStore } = useContext(InternalContext);\n\n useEffect(() => {\n return indexStore.subscribe(currentIndex => {\n const { tx, sx } = computeAnimationValues(currentIndex);\n\n startAnimation(translateX, tx);\n startAnimation(scaleX, sx);\n });\n }, [indexStore, computeAnimationValues]);\n\n return (\n <Animated.View\n style={[\n styles.root,\n disabled ? styles.disabled : undefined,\n { transform: [{ translateX }, { scaleX }] },\n style,\n ]}\n {...otherProps}\n />\n );\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAEA;;AACA;;;;;;;;;;AAIA,MAAMA,eAAe,GAAG,EAAxB;AACA,MAAMC,gBAAgB,GAAG,CAAzB;AAEA,MAAMC,qBAAqB,GAAG,KAAK,CAAnC;;AAEA,MAAMC,SAAwC,GAAG,YAAgC;EAC7E,MAAMC,KAAK,GAAG,IAAAC,gBAAA,GAAd;EAEA,OAAO;IACHC,IAAI,EAAE;MACFC,eAAe,EAAEH,KAAK,CAACI,OAAN,CAAcC,SAAd,CAAwBC,IADvC;MAEFC,IAAI,EAAE,CAFJ;MAGFC,MAAM,EAAE,CAHN;MAIFC,KAAK,EAAEb,eAJL;MAKFc,MAAM,EAAEb,gBALN;MAMFc,QAAQ,EAAE;IANR,CADH;IASHC,QAAQ,EAAE;MACNF,MAAM,EAAE;IADF;EATP,CAAP;AAaH,CAhBD;;AAkBA,MAAMG,cAAc,GAAG,CAACC,KAAD,EAAwBC,OAAxB,KAA4C;EAC/DC,qBAAA,CAASC,MAAT,CAAgBH,KAAhB,EAAuB;IACnBC,OAAO,EAAEA,OADU;IAEnBG,QAAQ,EAAE,GAFS;IAGnBC,MAAM,EAAEC,mBAAA,CAAOC,MAAP,CAAc,IAAd,EAAoB,CAApB,EAAuB,GAAvB,EAA4B,CAA5B,CAHW;IAInBC,eAAe,EAAE;EAJE,CAAvB,EAKGC,KALH;AAMH,CAPD;;AASe,SAASC,YAAT,CAAsBC,KAAtB,EAAgD;EAC3D,MAAM;IACFC,WADE;IAEFd,QAFE;IAGFe,YAHE;IAIFC,UAJE;IAKFC,KALE;IAMF,GAAGC;EAND,IAOFL,KAPJ;EASA,MAAMM,MAAM,GAAGhC,SAAS,EAAxB;EAEA,MAAMiC,sBAAsB,GAAG,IAAAC,kBAAA,EAAaC,YAAD,IAA0B;IACjE,MAAM;MAAEC,EAAF;MAAMC;IAAN,IAAaV,WAAW,CAACQ,YAAD,CAAX,IAA6BG,gCAAhD;IAEA,MAAMC,QAAQ,GAAGF,EAAE,GAAGD,EAAtB;IAEA,MAAMI,cAAc,GAAGJ,EAAE,GAAG,CAACG,QAAQ,GAAG1C,eAAZ,IAA+B,CAA3D;IAEA,MAAM4C,KAAK,GAAGZ,UAAU,GAAG9B,qBAAH,GAA2B,CAAnD;IACA,MAAM2C,UAAU,GAAG,CAACH,QAAQ,GAAGE,KAAZ,IAAqB5C,eAAxC;IAEA,OAAO;MAAE8C,EAAE,EAAEH,cAAN;MAAsBI,EAAE,EAAEF;IAA1B,CAAP;EACH,CAX8B,EAW5B,CAACf,WAAD,EAAcE,UAAd,CAX4B,CAA/B;EAaA,MAAM;IACFc,EAAE,EAAEE,SADF;IAEFD,EAAE,EAAEE;EAFF,IAGFb,sBAAsB,CAACL,YAAD,CAH1B;EAKA,MAAMmB,UAAU,GAAG,IAAAC,uBAAA,EAAiBH,SAAjB,CAAnB;EACA,MAAMI,MAAM,GAAG,IAAAD,uBAAA,EAAiBF,SAAjB,CAAf;EAEA,MAAM;IAAEI;EAAF,IAAiB,IAAAC,iBAAA,EAAWC,wBAAX,CAAvB;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACZ,OAAOH,UAAU,CAACI,SAAX,CAAqBnB,YAAY,IAAI;MACxC,MAAM;QAAEQ,EAAF;QAAMC;MAAN,IAAaX,sBAAsB,CAACE,YAAD,CAAzC;MAEArB,cAAc,CAACiC,UAAD,EAAaJ,EAAb,CAAd;MACA7B,cAAc,CAACmC,MAAD,EAASL,EAAT,CAAd;IACH,CALM,CAAP;EAMH,CAPD,EAOG,CAACM,UAAD,EAAajB,sBAAb,CAPH;EASA,oBACI,6BAAC,qBAAD,CAAU,IAAV;IACI,KAAK,EAAE,CACHD,MAAM,CAAC7B,IADJ,EAEHU,QAAQ,GAAGmB,MAAM,CAACnB,QAAV,GAAqB0C,SAF1B,EAGH;MAAEC,SAAS,EAAE,CAAC;QAAET;MAAF,CAAD,EAAiB;QAAEE;MAAF,CAAjB;IAAb,CAHG,EAIHnB,KAJG;EADX,GAOQC,UAPR,EADJ;AAWH;;AAAA"}
|
|
@@ -9,12 +9,14 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
|
|
12
|
+
var _styles = require("../styles");
|
|
13
|
+
|
|
14
|
+
var _hooks = require("../hooks");
|
|
15
|
+
|
|
12
16
|
var _OutlinedTextField = _interopRequireDefault(require("./OutlinedTextField"));
|
|
13
17
|
|
|
14
18
|
var _utils = require("./utils");
|
|
15
19
|
|
|
16
|
-
var _styles = require("../styles");
|
|
17
|
-
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
|
|
20
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -61,10 +63,8 @@ const TextField = /*#__PURE__*/_react.default.forwardRef(function TextField(prop
|
|
|
61
63
|
(_innerRef$current3 = innerRef.current) === null || _innerRef$current3 === void 0 ? void 0 : _innerRef$current3.blur();
|
|
62
64
|
}
|
|
63
65
|
}));
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const [animatedError] = _react.default.useState(() => new _reactNative.Animated.Value(error ? 1 : 0));
|
|
66
|
+
const animatedLabel = (0, _hooks.useAnimatedValue)(value ? 0 : 1);
|
|
67
|
+
const animatedError = (0, _hooks.useAnimatedValue)(error ? 1 : 0);
|
|
68
68
|
|
|
69
69
|
const [focused, setFocused] = _react.default.useState(false);
|
|
70
70
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TextField","React","forwardRef","props","ref","disabled","error","keyboardType","icon","label","onBlur","onChangeText","onFocus","onIconPress","onSubmitEditing","placeholder","placeholderProp","secureTextEntry","value","style","styleProp","innerRef","useRef","useImperativeHandle","focus","current","isFocused","clear","blur","animatedLabel","
|
|
1
|
+
{"version":3,"names":["TextField","React","forwardRef","props","ref","disabled","error","keyboardType","icon","label","onBlur","onChangeText","onFocus","onIconPress","onSubmitEditing","placeholder","placeholderProp","secureTextEntry","value","style","styleProp","innerRef","useRef","useImperativeHandle","focus","current","isFocused","clear","blur","animatedLabel","useAnimatedValue","animatedError","focused","setFocused","useState","setPlaceholder","labelLayout","setLabelLayout","measured","width","height","minimizeLabel","Animated","timing","toValue","duration","blurAnimationDuration","useNativeDriver","start","restoreLabel","focusAnimationDuration","showError","hideError","showPlaceholder","hidePlaceholder","useEffect","handleFocus","event","handleBlur","css","opacity","handleLayoutAnimatedText","nativeEvent","layout","forceFocus"],"sources":["TextField.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef } from 'react';\nimport { Animated, LayoutChangeEvent, NativeSyntheticEvent, TargetedEvent, TextInput } from 'react-native';\nimport { css } from '../styles';\nimport { useAnimatedValue } from '../hooks';\nimport OutlinedTextField from './OutlinedTextField';\nimport TextFieldProps from './TextFieldProps';\nimport { blurAnimationDuration, focusAnimationDuration } from './utils';\n\nconst TextField = React.forwardRef<TextInput, TextFieldProps>(function TextField(props, ref) {\n const {\n disabled = false,\n error = false,\n keyboardType = 'default',\n icon,\n label,\n onBlur,\n onChangeText,\n onFocus,\n onIconPress,\n onSubmitEditing,\n placeholder: placeholderProp,\n secureTextEntry = false,\n value,\n style: styleProp,\n } = props;\n\n const innerRef = useRef<TextInput | null>(null);\n //@ts-ignore\n useImperativeHandle(ref, () => ({\n focus: () => {\n innerRef.current?.focus();\n },\n isFocused: () => {\n const current = innerRef.current;\n return current ? current.isFocused() : false;\n },\n clear: () => {\n innerRef.current?.clear();\n },\n blur: () => {\n innerRef.current?.blur();\n },\n }));\n\n const animatedLabel = useAnimatedValue(value ? 0 : 1);\n const animatedError = useAnimatedValue(error ? 1 : 0);\n const [focused, setFocused] = React.useState(false);\n const [placeholder, setPlaceholder] = React.useState('');\n const [labelLayout, setLabelLayout] = React.useState({\n measured: false,\n width: 0,\n height: 0,\n });\n\n const minimizeLabel = () => {\n Animated.timing(animatedLabel, {\n toValue: 0,\n duration: blurAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const restoreLabel = () => {\n Animated.timing(animatedLabel, {\n toValue: 1,\n duration: focusAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const showError = () => {\n Animated.timing(animatedError, {\n toValue: 1,\n duration: focusAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const hideError = () => {\n Animated.timing(animatedError, {\n toValue: 0,\n duration: blurAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const showPlaceholder = () => {\n placeholderProp && setPlaceholder(placeholderProp);\n };\n\n const hidePlaceholder = () => setPlaceholder('');\n\n React.useEffect(() => {\n value || focused ? minimizeLabel() : restoreLabel();\n }, [focused, value, labelLayout]);\n\n React.useEffect(() => {\n animatedError ? showError() : hideError();\n }, [animatedError]);\n\n React.useEffect(() => {\n focused || !label ? showPlaceholder() : hidePlaceholder();\n }, [focused, label]);\n\n const handleFocus = (event: NativeSyntheticEvent<TargetedEvent>) => {\n if (disabled) {\n return;\n }\n\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: NativeSyntheticEvent<TargetedEvent>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n const style = css([\n { opacity: disabled ? 0.3 : 1 },\n styleProp,\n ]);\n\n const handleLayoutAnimatedText = (event: LayoutChangeEvent) => {\n setLabelLayout({\n width: event.nativeEvent.layout.width,\n height: event.nativeEvent.layout.height,\n measured: true,\n });\n };\n\n const forceFocus = () => {\n innerRef.current?.focus();\n };\n\n return (\n <OutlinedTextField\n animatedError={animatedError}\n animatedLabel={animatedLabel}\n disabled={disabled}\n error={error}\n focused={focused}\n forceFocus={forceFocus}\n icon={icon}\n keyboardType={keyboardType}\n label={label}\n labelLayout={labelLayout}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChangeText={onChangeText}\n onIconPress={onIconPress}\n onLayoutAnimatedText={handleLayoutAnimatedText}\n onSubmitEditing={onSubmitEditing}\n placeholder={placeholder}\n ref={innerRef}\n secureTextEntry={secureTextEntry}\n style={style}\n value={value}\n />\n );\n});\n\nexport default TextField;\n"],"mappings":"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"}
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "useAnimatedValue", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useAnimatedValue.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "useBreakpointUp", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -58,6 +64,8 @@ Object.defineProperty(exports, "useValidWindowDimensions", {
|
|
|
58
64
|
}
|
|
59
65
|
});
|
|
60
66
|
|
|
67
|
+
var _useAnimatedValue = _interopRequireDefault(require("./useAnimatedValue"));
|
|
68
|
+
|
|
61
69
|
var _useBreakpointUp = _interopRequireDefault(require("./useBreakpointUp"));
|
|
62
70
|
|
|
63
71
|
var _useCollapsibleAppBar = _interopRequireDefault(require("./useCollapsibleAppBar"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as useBreakpointUp } from './useBreakpointUp';\nexport { default as useCollapsibleAppBar } from './useCollapsibleAppBar';\nexport { default as useContentContainerStyle } from './useContentContainerStyle';\nexport { default as useElevationStyle } from './useElevationStyle';\nexport { default as useFadeInAppBar } from './useFadeInAppBar';\nexport { default as useImperativeState } from './useImperativeState';\nexport { default as useSyncAnimatedValue } from './useSyncAnimatedValue';\nexport { default as useThrottle } from './useThrottle';\nexport { default as useValidWindowDimensions } from './useValidWindowDimensions';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as useAnimatedValue } from './useAnimatedValue';\nexport { default as useBreakpointUp } from './useBreakpointUp';\nexport { default as useCollapsibleAppBar } from './useCollapsibleAppBar';\nexport { default as useContentContainerStyle } from './useContentContainerStyle';\nexport { default as useElevationStyle } from './useElevationStyle';\nexport { default as useFadeInAppBar } from './useFadeInAppBar';\nexport { default as useImperativeState } from './useImperativeState';\nexport { default as useSyncAnimatedValue } from './useSyncAnimatedValue';\nexport { default as useThrottle } from './useThrottle';\nexport { default as useValidWindowDimensions } from './useValidWindowDimensions';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useAnimatedValue;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
|
|
12
|
+
function ensureFiniteNumber(value) {
|
|
13
|
+
let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
14
|
+
return Number.isFinite(value) ? value : fallback;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function useAnimatedValue() {
|
|
18
|
+
let initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
19
|
+
|
|
20
|
+
if (__DEV__) {
|
|
21
|
+
if (!Number.isFinite(initialValue)) {
|
|
22
|
+
console.warn(`Initial value: ${initialValue} must be numeric.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const initialAnimatedValue = (0, _react.useMemo)(() => new _reactNative.Animated.Value(ensureFiniteNumber(initialValue)), []);
|
|
27
|
+
return (0, _react.useRef)(initialAnimatedValue).current;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
;
|
|
31
|
+
//# sourceMappingURL=useAnimatedValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ensureFiniteNumber","value","fallback","Number","isFinite","useAnimatedValue","initialValue","__DEV__","console","warn","initialAnimatedValue","useMemo","Animated","Value","useRef","current"],"sources":["useAnimatedValue.ts"],"sourcesContent":["import { useMemo, useRef } from 'react';\nimport { Animated } from 'react-native';\n\nfunction ensureFiniteNumber(value: any, fallback: number = 0): number {\n return Number.isFinite(value) ? value : fallback;\n}\n\nexport default function useAnimatedValue(initialValue: number = 0): Animated.Value {\n if (__DEV__) {\n if (!Number.isFinite(initialValue)) {\n console.warn(`Initial value: ${initialValue} must be numeric.`);\n }\n }\n\n const initialAnimatedValue = useMemo<Animated.Value>(\n () => new Animated.Value(ensureFiniteNumber(initialValue)),\n [],\n );\n\n return useRef<Animated.Value>(initialAnimatedValue).current;\n};\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA,SAASA,kBAAT,CAA4BC,KAA5B,EAAsE;EAAA,IAA9BC,QAA8B,uEAAX,CAAW;EAClE,OAAOC,MAAM,CAACC,QAAP,CAAgBH,KAAhB,IAAyBA,KAAzB,GAAiCC,QAAxC;AACH;;AAEc,SAASG,gBAAT,GAAoE;EAAA,IAA1CC,YAA0C,uEAAnB,CAAmB;;EAC/E,IAAIC,OAAJ,EAAa;IACT,IAAI,CAACJ,MAAM,CAACC,QAAP,CAAgBE,YAAhB,CAAL,EAAoC;MAChCE,OAAO,CAACC,IAAR,CAAc,kBAAiBH,YAAa,mBAA5C;IACH;EACJ;;EAED,MAAMI,oBAAoB,GAAG,IAAAC,cAAA,EACzB,MAAM,IAAIC,qBAAA,CAASC,KAAb,CAAmBb,kBAAkB,CAACM,YAAD,CAArC,CADmB,EAEzB,EAFyB,CAA7B;EAKA,OAAO,IAAAQ,aAAA,EAAuBJ,oBAAvB,EAA6CK,OAApD;AACH;;AAAA"}
|
|
@@ -7,19 +7,21 @@ exports.default = useSyncAnimatedValue;
|
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _useAnimatedValue = _interopRequireDefault(require("./useAnimatedValue"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
13
|
|
|
12
14
|
function useSyncAnimatedValue(config) {
|
|
13
15
|
const {
|
|
14
16
|
initialValue: maybeInitialValue,
|
|
15
17
|
shouldSyncAlways = false
|
|
16
18
|
} = config;
|
|
17
|
-
const initialValue = maybeInitialValue
|
|
18
|
-
const animatedValue = (0,
|
|
19
|
-
const
|
|
19
|
+
const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;
|
|
20
|
+
const animatedValue = (0, _useAnimatedValue.default)(initialValue);
|
|
21
|
+
const valueRef = (0, _react.useRef)(initialValue);
|
|
20
22
|
(0, _react.useEffect)(() => {
|
|
21
23
|
const maybeId = shouldSyncAlways ? animatedValue.addListener(newValue => {
|
|
22
|
-
|
|
24
|
+
valueRef.current = newValue.value;
|
|
23
25
|
}) : undefined;
|
|
24
26
|
return () => {
|
|
25
27
|
if (maybeId != null) {
|
|
@@ -30,7 +32,7 @@ function useSyncAnimatedValue(config) {
|
|
|
30
32
|
return {
|
|
31
33
|
animatedValue,
|
|
32
34
|
initialValue,
|
|
33
|
-
getCurrentValue: () =>
|
|
35
|
+
getCurrentValue: () => valueRef.current
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
38
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useSyncAnimatedValue","config","initialValue","maybeInitialValue","shouldSyncAlways","
|
|
1
|
+
{"version":3,"names":["useSyncAnimatedValue","config","initialValue","maybeInitialValue","shouldSyncAlways","Number","isFinite","animatedValue","useAnimatedValue","valueRef","useRef","useEffect","maybeId","addListener","newValue","current","value","undefined","removeListener","getCurrentValue"],"sources":["useSyncAnimatedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { SyncAnimatedValue } from '../types';\nimport useAnimatedValue from './useAnimatedValue';\n\nexport interface SyncAnimatedValueConfig {\n initialValue: number;\n shouldSyncAlways?: boolean;\n}\n\nexport default function useSyncAnimatedValue(config: SyncAnimatedValueConfig): SyncAnimatedValue {\n const {\n initialValue: maybeInitialValue,\n shouldSyncAlways = false,\n } = config;\n\n const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;\n const animatedValue = useAnimatedValue(initialValue);\n\n const valueRef = useRef<number>(initialValue);\n\n useEffect(() => {\n const maybeId = shouldSyncAlways ? animatedValue.addListener((newValue) => {\n valueRef.current = newValue.value;\n }) : undefined;\n\n return () => {\n if (maybeId != null) {\n animatedValue.removeListener(maybeId);\n }\n };\n }, [shouldSyncAlways]);\n\n return {\n animatedValue,\n initialValue,\n getCurrentValue: () => valueRef.current,\n };\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAOe,SAASA,oBAAT,CAA8BC,MAA9B,EAAkF;EAC7F,MAAM;IACFC,YAAY,EAAEC,iBADZ;IAEFC,gBAAgB,GAAG;EAFjB,IAGFH,MAHJ;EAKA,MAAMC,YAAY,GAAGG,MAAM,CAACC,QAAP,CAAgBH,iBAAhB,IAAqCA,iBAArC,GAAyD,CAA9E;EACA,MAAMI,aAAa,GAAG,IAAAC,yBAAA,EAAiBN,YAAjB,CAAtB;EAEA,MAAMO,QAAQ,GAAG,IAAAC,aAAA,EAAeR,YAAf,CAAjB;EAEA,IAAAS,gBAAA,EAAU,MAAM;IACZ,MAAMC,OAAO,GAAGR,gBAAgB,GAAGG,aAAa,CAACM,WAAd,CAA2BC,QAAD,IAAc;MACvEL,QAAQ,CAACM,OAAT,GAAmBD,QAAQ,CAACE,KAA5B;IACH,CAFkC,CAAH,GAE3BC,SAFL;IAIA,OAAO,MAAM;MACT,IAAIL,OAAO,IAAI,IAAf,EAAqB;QACjBL,aAAa,CAACW,cAAd,CAA6BN,OAA7B;MACH;IACJ,CAJD;EAKH,CAVD,EAUG,CAACR,gBAAD,CAVH;EAYA,OAAO;IACHG,aADG;IAEHL,YAFG;IAGHiB,eAAe,EAAE,MAAMV,QAAQ,CAACM;EAH7B,CAAP;AAKH;;AAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
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, { useCallback, useEffect
|
|
3
|
+
import React, { useCallback, useEffect } from 'react';
|
|
4
4
|
import { Animated } from 'react-native';
|
|
5
|
-
import { useThrottle } from '../hooks';
|
|
5
|
+
import { useAnimatedValue, useThrottle } from '../hooks';
|
|
6
6
|
import { AnimatedPressable } from '../animated';
|
|
7
7
|
export const ORIGINAL_OPACITY = 1;
|
|
8
8
|
export const DISABLED_OPACITY = .3;
|
|
@@ -36,8 +36,8 @@ export default function ButtonBase(props) {
|
|
|
36
36
|
periodMillis: disableThrottle ? 0 : throttleMillis,
|
|
37
37
|
callback: onPress
|
|
38
38
|
});
|
|
39
|
-
const opacity =
|
|
40
|
-
const scale =
|
|
39
|
+
const opacity = useAnimatedValue(ORIGINAL_OPACITY);
|
|
40
|
+
const scale = useAnimatedValue(ORIGINAL_SCALE);
|
|
41
41
|
useEffect(() => {
|
|
42
42
|
opacity.setValue(disabled ? DISABLED_OPACITY : ORIGINAL_OPACITY);
|
|
43
43
|
}, [disabled]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","Animated","useAnimatedValue","useThrottle","AnimatedPressable","ORIGINAL_OPACITY","DISABLED_OPACITY","ACTIVE_OPACITY","ORIGINAL_SCALE","MINIFIED_SCALE","SCALE_EFFECT_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","scale","setValue","startScaleAnimation","pressIn","isHover","startOpacityAnimation","startPressAnimation","handlePressIn","handlePressOut","animatedStyle","transform","pressDelay","hovered","undefined"],"sources":["ButtonBase.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from 'react';\nimport { Animated } from 'react-native';\nimport { useAnimatedValue, 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 SCALE_EFFECT_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 = useAnimatedValue(ORIGINAL_OPACITY);\n const scale = useAnimatedValue(ORIGINAL_SCALE);\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 const pressDelay = pressEffect === 'scale'\n ? SCALE_EFFECT_PRESS_IN_DELAY\n : 0;\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={pressDelay}\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,6 +1,7 @@
|
|
|
1
|
-
import React, { useEffect
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
2
|
import { Animated, Easing } from 'react-native';
|
|
3
3
|
import { CircularProgress as CircularProgressIcon } from '../internal/icons';
|
|
4
|
+
import { useAnimatedValue } from '../hooks';
|
|
4
5
|
const MIN_ROTATE_DEGREE = 0;
|
|
5
6
|
const MAX_ROTATE_DEGREE = 360;
|
|
6
7
|
|
|
@@ -18,7 +19,7 @@ export default function CircularProgress(props) {
|
|
|
18
19
|
style: styleProp
|
|
19
20
|
} = props;
|
|
20
21
|
const styles = useStyles();
|
|
21
|
-
const rotate =
|
|
22
|
+
const rotate = useAnimatedValue(MIN_ROTATE_DEGREE);
|
|
22
23
|
const animatedStyle = {
|
|
23
24
|
transform: [{
|
|
24
25
|
rotate: rotate.interpolate({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","
|
|
1
|
+
{"version":3,"names":["React","useEffect","Animated","Easing","CircularProgress","CircularProgressIcon","useAnimatedValue","MIN_ROTATE_DEGREE","MAX_ROTATE_DEGREE","useStyles","root","alignItems","justifyContent","props","style","styleProp","styles","rotate","animatedStyle","transform","interpolate","inputRange","outputRange","loop","timing","toValue","duration","easing","linear","useNativeDriver","start"],"sources":["CircularProgress.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport type { ViewProps } from 'react-native';\nimport { Animated, Easing } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { CircularProgress as CircularProgressIcon } from '../internal/icons';\nimport type { OverridableComponentProps } from '../types';\nimport { useAnimatedValue } from '../hooks';\n\ntype CircularProgressStyles = NamedStylesStringUnion<'root'>;\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 = useAnimatedValue(MIN_ROTATE_DEGREE);\n\n const animatedStyle = {\n transform: [{\n rotate: rotate.interpolate({\n inputRange: [MIN_ROTATE_DEGREE, MAX_ROTATE_DEGREE],\n outputRange: [`${MIN_ROTATE_DEGREE}deg`, `${MAX_ROTATE_DEGREE}deg`],\n }),\n }],\n };\n\n useEffect(() => {\n Animated.loop(\n Animated.timing(\n rotate,\n {\n toValue: MAX_ROTATE_DEGREE,\n duration: 900,\n easing: Easing.linear,\n useNativeDriver: true,\n },\n ),\n ).start();\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;AAEA,SAASC,QAAT,EAAmBC,MAAnB,QAAiC,cAAjC;AAEA,SAASC,gBAAgB,IAAIC,oBAA7B,QAAyD,mBAAzD;AAEA,SAASC,gBAAT,QAAiC,UAAjC;AAIA,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,SAASR,gBAAT,CAA0BS,KAA1B,EAAuE;EAClF,MAAM;IAAEC,KAAK,EAAEC;EAAT,IAAuBF,KAA7B;EAEA,MAAMG,MAAM,GAAGP,SAAS,EAAxB;EAEA,MAAMQ,MAAM,GAAGX,gBAAgB,CAACC,iBAAD,CAA/B;EAEA,MAAMW,aAAa,GAAG;IAClBC,SAAS,EAAE,CAAC;MACRF,MAAM,EAAEA,MAAM,CAACG,WAAP,CAAmB;QACvBC,UAAU,EAAE,CAACd,iBAAD,EAAoBC,iBAApB,CADW;QAEvBc,WAAW,EAAE,CAAE,GAAEf,iBAAkB,KAAtB,EAA6B,GAAEC,iBAAkB,KAAjD;MAFU,CAAnB;IADA,CAAD;EADO,CAAtB;EASAP,SAAS,CAAC,MAAM;IACZC,QAAQ,CAACqB,IAAT,CACIrB,QAAQ,CAACsB,MAAT,CACIP,MADJ,EAEI;MACIQ,OAAO,EAAEjB,iBADb;MAEIkB,QAAQ,EAAE,GAFd;MAGIC,MAAM,EAAExB,MAAM,CAACyB,MAHnB;MAIIC,eAAe,EAAE;IAJrB,CAFJ,CADJ,EAUEC,KAVF;EAWH,CAZQ,EAYN,EAZM,CAAT;EAcA,oBACI,oBAAC,QAAD,CAAU,IAAV;IACI,QAAQ,eAAE,oBAAC,oBAAD,OADd;IAEI,KAAK,EAAE,CACHZ,aADG,EAEHF,MAAM,CAACN,IAFJ,EAGHK,SAHG;EAFX,EADJ;AAUH;AAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import React, { useCallback
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
2
|
import { Animated } from 'react-native';
|
|
3
3
|
import FastImage from 'react-native-fast-image';
|
|
4
|
+
import { useAnimatedValue } from '../hooks';
|
|
4
5
|
// @ts-ignore
|
|
5
6
|
const AnimatedFastImage = Animated.createAnimatedComponent(FastImage);
|
|
6
7
|
const INITIAL_OPACITY = 0;
|
|
@@ -15,7 +16,7 @@ export default function ImageCore(props) {
|
|
|
15
16
|
source,
|
|
16
17
|
width
|
|
17
18
|
} = props;
|
|
18
|
-
const opacity =
|
|
19
|
+
const opacity = useAnimatedValue(INITIAL_OPACITY);
|
|
19
20
|
const handleLoad = useCallback(() => {
|
|
20
21
|
Animated.timing(opacity, {
|
|
21
22
|
toValue: LOADED_OPACITY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","
|
|
1
|
+
{"version":3,"names":["React","useCallback","Animated","FastImage","useAnimatedValue","AnimatedFastImage","createAnimatedComponent","INITIAL_OPACITY","LOADED_OPACITY","ANIMATION_DURATION","ImageCore","props","height","onError","onLoad","resizeMode","source","width","opacity","handleLoad","timing","toValue","duration","useNativeDriver","start","uri"],"sources":["ImageCoreNative.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Animated } from 'react-native';\nimport FastImage from 'react-native-fast-image';\nimport { useAnimatedValue } from '../hooks';\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 = useAnimatedValue(INITIAL_OPACITY);\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,QAAmC,OAAnC;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,OAAOC,SAAP,MAAsB,yBAAtB;AACA,SAASC,gBAAT,QAAiC,UAAjC;AAGA;AACA,MAAMC,iBAAiB,GAAGH,QAAQ,CAACI,uBAAT,CAAiCH,SAAjC,CAA1B;AAEA,MAAMI,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,GAAGd,gBAAgB,CAACG,eAAD,CAAhC;EAEA,MAAMY,UAAU,GAAGlB,WAAW,CAAC,MAAM;IACjCC,QAAQ,CAACkB,MAAT,CAAgBF,OAAhB,EAAyB;MACrBG,OAAO,EAAEb,cADY;MAErBc,QAAQ,EAAEb,kBAFW;MAGrBc,eAAe,EAAE;IAHI,CAAzB,EAIGC,KAJH;IAMAV,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM;EACT,CAR6B,EAQ3B,CAACA,MAAD,CAR2B,CAA9B;EAUA,oBACI,oBAAC,iBAAD;IACI,OAAO,EAAED,OADb;IAEI,MAAM,EAAEM,UAFZ;IAGI,UAAU,EAAEJ,UAHhB;IAII,MAAM,EAAE;MAAEU,GAAG,EAAET,MAAM,CAACS;IAAd,CAJZ;IAKI,KAAK,EAAE,CACH;MAAEP;IAAF,CADG,EAEH;MAAED,KAAF;MAASL;IAAT,CAFG;EALX,EADJ;AAYH;AAAA"}
|
|
@@ -3,7 +3,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import ButtonBase from '../ButtonBase';
|
|
5
5
|
import { Radio as RadioIcon, RadioChecked as RadioCheckedIcon } from '../internal';
|
|
6
|
-
import { css
|
|
6
|
+
import { css } from '../styles';
|
|
7
7
|
import { RadioContext } from '../RadioGroup/RadioContextProvider';
|
|
8
8
|
const ICON_SIZE = 20;
|
|
9
9
|
|
|
@@ -27,7 +27,6 @@ export default function Radio(props) {
|
|
|
27
27
|
...otherProps
|
|
28
28
|
} = props;
|
|
29
29
|
const styles = useStyles();
|
|
30
|
-
const theme = useTheme();
|
|
31
30
|
const context = React.useContext(RadioContext);
|
|
32
31
|
|
|
33
32
|
const handlePress = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ButtonBase","Radio","RadioIcon","RadioChecked","RadioCheckedIcon","css","
|
|
1
|
+
{"version":3,"names":["React","ButtonBase","Radio","RadioIcon","RadioChecked","RadioCheckedIcon","css","RadioContext","ICON_SIZE","useStyles","root","alignItems","flexDirection","props","checked","children","disabled","onChange","onChangeProp","style","value","otherProps","styles","context","useContext","handlePress","isChecked","icon","rootStyle"],"sources":["Radio.tsx"],"sourcesContent":["import React from 'react';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport ButtonBase from '../ButtonBase';\nimport { Radio as RadioIcon, RadioChecked as RadioCheckedIcon } from '../internal';\nimport { css } from '../styles';\nimport { RadioContext } from '../RadioGroup/RadioContextProvider';\nimport type RadioProps from './RadioProps';\n\ntype RadioStyles = NamedStylesStringUnion<'root'>;\n\nconst ICON_SIZE = 20;\n\nconst useStyles: UseStyles<RadioStyles> = function (): RadioStyles {\n return {\n root: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n };\n};\n\nexport default function Radio(props: RadioProps) {\n const {\n checked = false,\n children,\n disabled = false,\n onChange: onChangeProp,\n style,\n value,\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const context = React.useContext(RadioContext);\n\n const handlePress = () => {\n const onChange = context?.onChange ?? onChangeProp;\n if (onChange) {\n onChange(value);\n }\n };\n\n const isChecked = context?.value === value ?? checked;\n\n const icon = isChecked\n ? <RadioCheckedIcon width={ICON_SIZE} height={ICON_SIZE} color={'primary'}/>\n : <RadioIcon width={ICON_SIZE} height={ICON_SIZE} color={'tertiary'}/>;\n\n const rootStyle = css([\n styles.root,\n style,\n ]);\n\n return (\n <ButtonBase\n disabled={disabled}\n onPress={handlePress}\n style={rootStyle}\n {...otherProps}\n >\n {icon}\n\n {children ? children : null}\n </ButtonBase>\n );\n};\n"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,OAAOC,UAAP,MAAuB,eAAvB;AACA,SAASC,KAAK,IAAIC,SAAlB,EAA6BC,YAAY,IAAIC,gBAA7C,QAAqE,aAArE;AACA,SAASC,GAAT,QAAoB,WAApB;AACA,SAASC,YAAT,QAA6B,oCAA7B;AAKA,MAAMC,SAAS,GAAG,EAAlB;;AAEA,MAAMC,SAAiC,GAAG,YAAyB;EAC/D,OAAO;IACHC,IAAI,EAAE;MACFC,UAAU,EAAE,QADV;MAEFC,aAAa,EAAE;IAFb;EADH,CAAP;AAMH,CAPD;;AASA,eAAe,SAASV,KAAT,CAAeW,KAAf,EAAkC;EAC7C,MAAM;IACFC,OAAO,GAAG,KADR;IAEFC,QAFE;IAGFC,QAAQ,GAAG,KAHT;IAIFC,QAAQ,EAAEC,YAJR;IAKFC,KALE;IAMFC,KANE;IAOF,GAAGC;EAPD,IAQFR,KARJ;EAUA,MAAMS,MAAM,GAAGb,SAAS,EAAxB;EAEA,MAAMc,OAAO,GAAGvB,KAAK,CAACwB,UAAN,CAAiBjB,YAAjB,CAAhB;;EAEA,MAAMkB,WAAW,GAAG,MAAM;IACtB,MAAMR,QAAQ,GAAG,CAAAM,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEN,QAAT,KAAqBC,YAAtC;;IACA,IAAID,QAAJ,EAAc;MACVA,QAAQ,CAACG,KAAD,CAAR;IACH;EACJ,CALD;;EAOA,MAAMM,SAAS,GAAG,CAAAH,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEH,KAAT,MAAmBA,KAAnB,IAA4BN,OAA9C;EAEA,MAAMa,IAAI,GAAGD,SAAS,gBAChB,oBAAC,gBAAD;IAAkB,KAAK,EAAElB,SAAzB;IAAoC,MAAM,EAAEA,SAA5C;IAAuD,KAAK,EAAE;EAA9D,EADgB,gBAEhB,oBAAC,SAAD;IAAW,KAAK,EAAEA,SAAlB;IAA6B,MAAM,EAAEA,SAArC;IAAgD,KAAK,EAAE;EAAvD,EAFN;EAIA,MAAMoB,SAAS,GAAGtB,GAAG,CAAC,CAClBgB,MAAM,CAACZ,IADW,EAElBS,KAFkB,CAAD,CAArB;EAKA,oBACI,oBAAC,UAAD;IACI,QAAQ,EAAEH,QADd;IAEI,OAAO,EAAES,WAFb;IAGI,KAAK,EAAEG;EAHX,GAIQP,UAJR,GAMKM,IANL,EAQKZ,QAAQ,GAAGA,QAAH,GAAc,IAR3B,CADJ;AAYH;AAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
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, { useCallback, useContext, useEffect
|
|
3
|
+
import React, { useCallback, useContext, useEffect } from 'react';
|
|
4
4
|
import { Animated, Easing } from 'react-native';
|
|
5
5
|
import { useTheme } from '../styles';
|
|
6
|
+
import { useAnimatedValue } from '../hooks';
|
|
6
7
|
import { defaultCoordinate } from './TabCoordinate';
|
|
7
8
|
import InternalContext from './InternalContext';
|
|
8
9
|
const INDICATOR_WIDTH = 10;
|
|
@@ -63,8 +64,8 @@ export default function TabIndicator(props) {
|
|
|
63
64
|
tx: initialTx,
|
|
64
65
|
sx: initialSx
|
|
65
66
|
} = computeAnimationValues(initialIndex);
|
|
66
|
-
const translateX =
|
|
67
|
-
const scaleX =
|
|
67
|
+
const translateX = useAnimatedValue(initialTx);
|
|
68
|
+
const scaleX = useAnimatedValue(initialSx);
|
|
68
69
|
const {
|
|
69
70
|
indexStore
|
|
70
71
|
} = useContext(InternalContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useContext","useEffect","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useContext","useEffect","Animated","Easing","useTheme","useAnimatedValue","defaultCoordinate","InternalContext","INDICATOR_WIDTH","INDICATOR_HEIGHT","SCROLLABLE_TABS_INSET","useStyles","theme","root","backgroundColor","palette","secondary","main","left","bottom","width","height","position","disabled","startAnimation","value","toValue","timing","duration","easing","bezier","useNativeDriver","start","TabIndicator","props","coordinates","initialIndex","scrollable","style","otherProps","styles","computeAnimationValues","currentIndex","x1","x2","tabWidth","nextTranslateX","inset","nextScaleX","tx","sx","initialTx","initialSx","translateX","scaleX","indexStore","subscribe","undefined","transform"],"sources":["TabIndicator.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect } from 'react';\nimport { Animated, Easing } from 'react-native';\nimport { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\nimport { useTheme } from '../styles';\nimport { useAnimatedValue } from '../hooks';\nimport type TabIndicatorProps from './TabIndicatorProps';\nimport { defaultCoordinate } from './TabCoordinate';\nimport InternalContext from './InternalContext';\n\ntype TabIndicatorStyles = NamedStylesStringUnion<'root' | 'disabled'>;\n\nconst INDICATOR_WIDTH = 10;\nconst INDICATOR_HEIGHT = 4;\n\nconst SCROLLABLE_TABS_INSET = 12 * 2;\n\nconst useStyles: UseStyles<TabIndicatorStyles> = function (): TabIndicatorStyles {\n const theme = useTheme();\n\n return {\n root: {\n backgroundColor: theme.palette.secondary.main,\n left: 0,\n bottom: 0,\n width: INDICATOR_WIDTH,\n height: INDICATOR_HEIGHT,\n position: 'absolute',\n },\n disabled: {\n height: 0,\n },\n };\n};\n\nconst startAnimation = (value: Animated.Value, toValue: number) => {\n Animated.timing(value, {\n toValue: toValue,\n duration: 300,\n easing: Easing.bezier(0.25, 1, 0.5, 1),\n useNativeDriver: true,\n }).start();\n};\n\nexport default function TabIndicator(props: TabIndicatorProps) {\n const {\n coordinates,\n disabled,\n initialIndex,\n scrollable,\n style,\n ...otherProps\n } = props;\n\n const styles = useStyles();\n\n const computeAnimationValues = useCallback((currentIndex: number) => {\n const { x1, x2 } = coordinates[currentIndex] ?? defaultCoordinate;\n\n const tabWidth = x2 - x1;\n\n const nextTranslateX = x1 + (tabWidth - INDICATOR_WIDTH) / 2;\n\n const inset = scrollable ? SCROLLABLE_TABS_INSET : 0;\n const nextScaleX = (tabWidth - inset) / INDICATOR_WIDTH;\n\n return { tx: nextTranslateX, sx: nextScaleX };\n }, [coordinates, scrollable]);\n\n const {\n tx: initialTx,\n sx: initialSx,\n } = computeAnimationValues(initialIndex);\n\n const translateX = useAnimatedValue(initialTx);\n const scaleX = useAnimatedValue(initialSx);\n\n const { indexStore } = useContext(InternalContext);\n\n useEffect(() => {\n return indexStore.subscribe(currentIndex => {\n const { tx, sx } = computeAnimationValues(currentIndex);\n\n startAnimation(translateX, tx);\n startAnimation(scaleX, sx);\n });\n }, [indexStore, computeAnimationValues]);\n\n return (\n <Animated.View\n style={[\n styles.root,\n disabled ? styles.disabled : undefined,\n { transform: [{ translateX }, { scaleX }] },\n style,\n ]}\n {...otherProps}\n />\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React, { useImperativeHandle, useRef } from 'react';
|
|
2
2
|
import { Animated } from 'react-native';
|
|
3
|
+
import { css } from '../styles';
|
|
4
|
+
import { useAnimatedValue } from '../hooks';
|
|
3
5
|
import OutlinedTextField from './OutlinedTextField';
|
|
4
6
|
import { blurAnimationDuration, focusAnimationDuration } from './utils';
|
|
5
|
-
import { css } from '../styles';
|
|
6
7
|
const TextField = /*#__PURE__*/React.forwardRef(function TextField(props, ref) {
|
|
7
8
|
const {
|
|
8
9
|
disabled = false,
|
|
@@ -43,8 +44,8 @@ const TextField = /*#__PURE__*/React.forwardRef(function TextField(props, ref) {
|
|
|
43
44
|
(_innerRef$current3 = innerRef.current) === null || _innerRef$current3 === void 0 ? void 0 : _innerRef$current3.blur();
|
|
44
45
|
}
|
|
45
46
|
}));
|
|
46
|
-
const
|
|
47
|
-
const
|
|
47
|
+
const animatedLabel = useAnimatedValue(value ? 0 : 1);
|
|
48
|
+
const animatedError = useAnimatedValue(error ? 1 : 0);
|
|
48
49
|
const [focused, setFocused] = React.useState(false);
|
|
49
50
|
const [placeholder, setPlaceholder] = React.useState('');
|
|
50
51
|
const [labelLayout, setLabelLayout] = React.useState({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useImperativeHandle","useRef","Animated","OutlinedTextField","blurAnimationDuration","focusAnimationDuration","
|
|
1
|
+
{"version":3,"names":["React","useImperativeHandle","useRef","Animated","css","useAnimatedValue","OutlinedTextField","blurAnimationDuration","focusAnimationDuration","TextField","forwardRef","props","ref","disabled","error","keyboardType","icon","label","onBlur","onChangeText","onFocus","onIconPress","onSubmitEditing","placeholder","placeholderProp","secureTextEntry","value","style","styleProp","innerRef","focus","current","isFocused","clear","blur","animatedLabel","animatedError","focused","setFocused","useState","setPlaceholder","labelLayout","setLabelLayout","measured","width","height","minimizeLabel","timing","toValue","duration","useNativeDriver","start","restoreLabel","showError","hideError","showPlaceholder","hidePlaceholder","useEffect","handleFocus","event","handleBlur","opacity","handleLayoutAnimatedText","nativeEvent","layout","forceFocus"],"sources":["TextField.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef } from 'react';\nimport { Animated, LayoutChangeEvent, NativeSyntheticEvent, TargetedEvent, TextInput } from 'react-native';\nimport { css } from '../styles';\nimport { useAnimatedValue } from '../hooks';\nimport OutlinedTextField from './OutlinedTextField';\nimport TextFieldProps from './TextFieldProps';\nimport { blurAnimationDuration, focusAnimationDuration } from './utils';\n\nconst TextField = React.forwardRef<TextInput, TextFieldProps>(function TextField(props, ref) {\n const {\n disabled = false,\n error = false,\n keyboardType = 'default',\n icon,\n label,\n onBlur,\n onChangeText,\n onFocus,\n onIconPress,\n onSubmitEditing,\n placeholder: placeholderProp,\n secureTextEntry = false,\n value,\n style: styleProp,\n } = props;\n\n const innerRef = useRef<TextInput | null>(null);\n //@ts-ignore\n useImperativeHandle(ref, () => ({\n focus: () => {\n innerRef.current?.focus();\n },\n isFocused: () => {\n const current = innerRef.current;\n return current ? current.isFocused() : false;\n },\n clear: () => {\n innerRef.current?.clear();\n },\n blur: () => {\n innerRef.current?.blur();\n },\n }));\n\n const animatedLabel = useAnimatedValue(value ? 0 : 1);\n const animatedError = useAnimatedValue(error ? 1 : 0);\n const [focused, setFocused] = React.useState(false);\n const [placeholder, setPlaceholder] = React.useState('');\n const [labelLayout, setLabelLayout] = React.useState({\n measured: false,\n width: 0,\n height: 0,\n });\n\n const minimizeLabel = () => {\n Animated.timing(animatedLabel, {\n toValue: 0,\n duration: blurAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const restoreLabel = () => {\n Animated.timing(animatedLabel, {\n toValue: 1,\n duration: focusAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const showError = () => {\n Animated.timing(animatedError, {\n toValue: 1,\n duration: focusAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const hideError = () => {\n Animated.timing(animatedError, {\n toValue: 0,\n duration: blurAnimationDuration,\n useNativeDriver: false,\n }).start();\n };\n\n const showPlaceholder = () => {\n placeholderProp && setPlaceholder(placeholderProp);\n };\n\n const hidePlaceholder = () => setPlaceholder('');\n\n React.useEffect(() => {\n value || focused ? minimizeLabel() : restoreLabel();\n }, [focused, value, labelLayout]);\n\n React.useEffect(() => {\n animatedError ? showError() : hideError();\n }, [animatedError]);\n\n React.useEffect(() => {\n focused || !label ? showPlaceholder() : hidePlaceholder();\n }, [focused, label]);\n\n const handleFocus = (event: NativeSyntheticEvent<TargetedEvent>) => {\n if (disabled) {\n return;\n }\n\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: NativeSyntheticEvent<TargetedEvent>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n const style = css([\n { opacity: disabled ? 0.3 : 1 },\n styleProp,\n ]);\n\n const handleLayoutAnimatedText = (event: LayoutChangeEvent) => {\n setLabelLayout({\n width: event.nativeEvent.layout.width,\n height: event.nativeEvent.layout.height,\n measured: true,\n });\n };\n\n const forceFocus = () => {\n innerRef.current?.focus();\n };\n\n return (\n <OutlinedTextField\n animatedError={animatedError}\n animatedLabel={animatedLabel}\n disabled={disabled}\n error={error}\n focused={focused}\n forceFocus={forceFocus}\n icon={icon}\n keyboardType={keyboardType}\n label={label}\n labelLayout={labelLayout}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChangeText={onChangeText}\n onIconPress={onIconPress}\n onLayoutAnimatedText={handleLayoutAnimatedText}\n onSubmitEditing={onSubmitEditing}\n placeholder={placeholder}\n ref={innerRef}\n secureTextEntry={secureTextEntry}\n style={style}\n value={value}\n />\n );\n});\n\nexport default TextField;\n"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as useAnimatedValue } from './useAnimatedValue';
|
|
1
2
|
export { default as useBreakpointUp } from './useBreakpointUp';
|
|
2
3
|
export { default as useCollapsibleAppBar } from './useCollapsibleAppBar';
|
|
3
4
|
export { default as useContentContainerStyle } from './useContentContainerStyle';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","useBreakpointUp","useCollapsibleAppBar","useContentContainerStyle","useElevationStyle","useFadeInAppBar","useImperativeState","useSyncAnimatedValue","useThrottle","useValidWindowDimensions"],"sources":["index.ts"],"sourcesContent":["export { default as useBreakpointUp } from './useBreakpointUp';\nexport { default as useCollapsibleAppBar } from './useCollapsibleAppBar';\nexport { default as useContentContainerStyle } from './useContentContainerStyle';\nexport { default as useElevationStyle } from './useElevationStyle';\nexport { default as useFadeInAppBar } from './useFadeInAppBar';\nexport { default as useImperativeState } from './useImperativeState';\nexport { default as useSyncAnimatedValue } from './useSyncAnimatedValue';\nexport { default as useThrottle } from './useThrottle';\nexport { default as useValidWindowDimensions } from './useValidWindowDimensions';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,eAApB,QAA2C,mBAA3C;AACA,
|
|
1
|
+
{"version":3,"names":["default","useAnimatedValue","useBreakpointUp","useCollapsibleAppBar","useContentContainerStyle","useElevationStyle","useFadeInAppBar","useImperativeState","useSyncAnimatedValue","useThrottle","useValidWindowDimensions"],"sources":["index.ts"],"sourcesContent":["export { default as useAnimatedValue } from './useAnimatedValue';\nexport { default as useBreakpointUp } from './useBreakpointUp';\nexport { default as useCollapsibleAppBar } from './useCollapsibleAppBar';\nexport { default as useContentContainerStyle } from './useContentContainerStyle';\nexport { default as useElevationStyle } from './useElevationStyle';\nexport { default as useFadeInAppBar } from './useFadeInAppBar';\nexport { default as useImperativeState } from './useImperativeState';\nexport { default as useSyncAnimatedValue } from './useSyncAnimatedValue';\nexport { default as useThrottle } from './useThrottle';\nexport { default as useValidWindowDimensions } from './useValidWindowDimensions';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,gBAApB,QAA4C,oBAA5C;AACA,SAASD,OAAO,IAAIE,eAApB,QAA2C,mBAA3C;AACA,SAASF,OAAO,IAAIG,oBAApB,QAAgD,wBAAhD;AACA,SAASH,OAAO,IAAII,wBAApB,QAAoD,4BAApD;AACA,SAASJ,OAAO,IAAIK,iBAApB,QAA6C,qBAA7C;AACA,SAASL,OAAO,IAAIM,eAApB,QAA2C,mBAA3C;AACA,SAASN,OAAO,IAAIO,kBAApB,QAA8C,sBAA9C;AACA,SAASP,OAAO,IAAIQ,oBAApB,QAAgD,wBAAhD;AACA,SAASR,OAAO,IAAIS,WAApB,QAAuC,eAAvC;AACA,SAAST,OAAO,IAAIU,wBAApB,QAAoD,4BAApD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useMemo, useRef } from 'react';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
|
|
4
|
+
function ensureFiniteNumber(value) {
|
|
5
|
+
let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
6
|
+
return Number.isFinite(value) ? value : fallback;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default function useAnimatedValue() {
|
|
10
|
+
let initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
11
|
+
|
|
12
|
+
if (__DEV__) {
|
|
13
|
+
if (!Number.isFinite(initialValue)) {
|
|
14
|
+
console.warn(`Initial value: ${initialValue} must be numeric.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const initialAnimatedValue = useMemo(() => new Animated.Value(ensureFiniteNumber(initialValue)), []);
|
|
19
|
+
return useRef(initialAnimatedValue).current;
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
//# sourceMappingURL=useAnimatedValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useRef","Animated","ensureFiniteNumber","value","fallback","Number","isFinite","useAnimatedValue","initialValue","__DEV__","console","warn","initialAnimatedValue","Value","current"],"sources":["useAnimatedValue.ts"],"sourcesContent":["import { useMemo, useRef } from 'react';\nimport { Animated } from 'react-native';\n\nfunction ensureFiniteNumber(value: any, fallback: number = 0): number {\n return Number.isFinite(value) ? value : fallback;\n}\n\nexport default function useAnimatedValue(initialValue: number = 0): Animated.Value {\n if (__DEV__) {\n if (!Number.isFinite(initialValue)) {\n console.warn(`Initial value: ${initialValue} must be numeric.`);\n }\n }\n\n const initialAnimatedValue = useMemo<Animated.Value>(\n () => new Animated.Value(ensureFiniteNumber(initialValue)),\n [],\n );\n\n return useRef<Animated.Value>(initialAnimatedValue).current;\n};\n"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,QAAgC,OAAhC;AACA,SAASC,QAAT,QAAyB,cAAzB;;AAEA,SAASC,kBAAT,CAA4BC,KAA5B,EAAsE;EAAA,IAA9BC,QAA8B,uEAAX,CAAW;EAClE,OAAOC,MAAM,CAACC,QAAP,CAAgBH,KAAhB,IAAyBA,KAAzB,GAAiCC,QAAxC;AACH;;AAED,eAAe,SAASG,gBAAT,GAAoE;EAAA,IAA1CC,YAA0C,uEAAnB,CAAmB;;EAC/E,IAAIC,OAAJ,EAAa;IACT,IAAI,CAACJ,MAAM,CAACC,QAAP,CAAgBE,YAAhB,CAAL,EAAoC;MAChCE,OAAO,CAACC,IAAR,CAAc,kBAAiBH,YAAa,mBAA5C;IACH;EACJ;;EAED,MAAMI,oBAAoB,GAAGb,OAAO,CAChC,MAAM,IAAIE,QAAQ,CAACY,KAAb,CAAmBX,kBAAkB,CAACM,YAAD,CAArC,CAD0B,EAEhC,EAFgC,CAApC;EAKA,OAAOR,MAAM,CAAiBY,oBAAjB,CAAN,CAA6CE,OAApD;AACH;AAAA"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
import
|
|
2
|
+
import useAnimatedValue from './useAnimatedValue';
|
|
3
3
|
export default function useSyncAnimatedValue(config) {
|
|
4
4
|
const {
|
|
5
5
|
initialValue: maybeInitialValue,
|
|
6
6
|
shouldSyncAlways = false
|
|
7
7
|
} = config;
|
|
8
|
-
const initialValue = maybeInitialValue
|
|
9
|
-
const animatedValue =
|
|
10
|
-
const
|
|
8
|
+
const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;
|
|
9
|
+
const animatedValue = useAnimatedValue(initialValue);
|
|
10
|
+
const valueRef = useRef(initialValue);
|
|
11
11
|
useEffect(() => {
|
|
12
12
|
const maybeId = shouldSyncAlways ? animatedValue.addListener(newValue => {
|
|
13
|
-
|
|
13
|
+
valueRef.current = newValue.value;
|
|
14
14
|
}) : undefined;
|
|
15
15
|
return () => {
|
|
16
16
|
if (maybeId != null) {
|
|
@@ -21,7 +21,7 @@ export default function useSyncAnimatedValue(config) {
|
|
|
21
21
|
return {
|
|
22
22
|
animatedValue,
|
|
23
23
|
initialValue,
|
|
24
|
-
getCurrentValue: () =>
|
|
24
|
+
getCurrentValue: () => valueRef.current
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useAnimatedValue","useSyncAnimatedValue","config","initialValue","maybeInitialValue","shouldSyncAlways","Number","isFinite","animatedValue","valueRef","maybeId","addListener","newValue","current","value","undefined","removeListener","getCurrentValue"],"sources":["useSyncAnimatedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { SyncAnimatedValue } from '../types';\nimport useAnimatedValue from './useAnimatedValue';\n\nexport interface SyncAnimatedValueConfig {\n initialValue: number;\n shouldSyncAlways?: boolean;\n}\n\nexport default function useSyncAnimatedValue(config: SyncAnimatedValueConfig): SyncAnimatedValue {\n const {\n initialValue: maybeInitialValue,\n shouldSyncAlways = false,\n } = config;\n\n const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;\n const animatedValue = useAnimatedValue(initialValue);\n\n const valueRef = useRef<number>(initialValue);\n\n useEffect(() => {\n const maybeId = shouldSyncAlways ? animatedValue.addListener((newValue) => {\n valueRef.current = newValue.value;\n }) : undefined;\n\n return () => {\n if (maybeId != null) {\n animatedValue.removeListener(maybeId);\n }\n };\n }, [shouldSyncAlways]);\n\n return {\n animatedValue,\n initialValue,\n getCurrentValue: () => valueRef.current,\n };\n};\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AAEA,OAAOC,gBAAP,MAA6B,oBAA7B;AAOA,eAAe,SAASC,oBAAT,CAA8BC,MAA9B,EAAkF;EAC7F,MAAM;IACFC,YAAY,EAAEC,iBADZ;IAEFC,gBAAgB,GAAG;EAFjB,IAGFH,MAHJ;EAKA,MAAMC,YAAY,GAAGG,MAAM,CAACC,QAAP,CAAgBH,iBAAhB,IAAqCA,iBAArC,GAAyD,CAA9E;EACA,MAAMI,aAAa,GAAGR,gBAAgB,CAACG,YAAD,CAAtC;EAEA,MAAMM,QAAQ,GAAGV,MAAM,CAASI,YAAT,CAAvB;EAEAL,SAAS,CAAC,MAAM;IACZ,MAAMY,OAAO,GAAGL,gBAAgB,GAAGG,aAAa,CAACG,WAAd,CAA2BC,QAAD,IAAc;MACvEH,QAAQ,CAACI,OAAT,GAAmBD,QAAQ,CAACE,KAA5B;IACH,CAFkC,CAAH,GAE3BC,SAFL;IAIA,OAAO,MAAM;MACT,IAAIL,OAAO,IAAI,IAAf,EAAqB;QACjBF,aAAa,CAACQ,cAAd,CAA6BN,OAA7B;MACH;IACJ,CAJD;EAKH,CAVQ,EAUN,CAACL,gBAAD,CAVM,CAAT;EAYA,OAAO;IACHG,aADG;IAEHL,YAFG;IAGHc,eAAe,EAAE,MAAMR,QAAQ,CAACI;EAH7B,CAAP;AAKH;AAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as useAnimatedValue } from './useAnimatedValue';
|
|
1
2
|
export { default as useBreakpointUp } from './useBreakpointUp';
|
|
2
3
|
export { default as useCollapsibleAppBar } from './useCollapsibleAppBar';
|
|
3
4
|
export { default as useContentContainerStyle } from './useContentContainerStyle';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fountain-ui/core",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.25",
|
|
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": "
|
|
70
|
+
"gitHead": "805d26b064563fc5c1a9ce7944d6aac676d0a0cb"
|
|
71
71
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, { useCallback, useEffect
|
|
1
|
+
import React, { useCallback, useEffect } from 'react';
|
|
2
2
|
import { Animated } from 'react-native';
|
|
3
|
-
import { useThrottle } from '../hooks';
|
|
3
|
+
import { useAnimatedValue, useThrottle } from '../hooks';
|
|
4
4
|
import { AnimatedPressable } from '../animated';
|
|
5
5
|
import type ButtonBaseProps from './ButtonBaseProps';
|
|
6
6
|
|
|
@@ -50,8 +50,8 @@ export default function ButtonBase(props: ButtonBaseProps) {
|
|
|
50
50
|
callback: onPress,
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
const opacity =
|
|
54
|
-
const scale =
|
|
53
|
+
const opacity = useAnimatedValue(ORIGINAL_OPACITY);
|
|
54
|
+
const scale = useAnimatedValue(ORIGINAL_SCALE);
|
|
55
55
|
|
|
56
56
|
useEffect(() => {
|
|
57
57
|
opacity.setValue(disabled ? DISABLED_OPACITY : ORIGINAL_OPACITY);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import React, { useEffect
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
2
|
import type { ViewProps } from 'react-native';
|
|
3
3
|
import { Animated, Easing } from 'react-native';
|
|
4
4
|
import { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';
|
|
5
5
|
import { CircularProgress as CircularProgressIcon } from '../internal/icons';
|
|
6
|
-
import { OverridableComponentProps } from '../types';
|
|
6
|
+
import type { OverridableComponentProps } from '../types';
|
|
7
|
+
import { useAnimatedValue } from '../hooks';
|
|
7
8
|
|
|
8
9
|
type CircularProgressStyles = NamedStylesStringUnion<'root'>;
|
|
9
10
|
|
|
@@ -24,7 +25,7 @@ export default function CircularProgress(props: OverridableComponentProps<ViewPr
|
|
|
24
25
|
|
|
25
26
|
const styles = useStyles();
|
|
26
27
|
|
|
27
|
-
const rotate =
|
|
28
|
+
const rotate = useAnimatedValue(MIN_ROTATE_DEGREE);
|
|
28
29
|
|
|
29
30
|
const animatedStyle = {
|
|
30
31
|
transform: [{
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import React, { useCallback
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
2
|
import { Animated } from 'react-native';
|
|
3
3
|
import FastImage from 'react-native-fast-image';
|
|
4
|
+
import { useAnimatedValue } from '../hooks';
|
|
4
5
|
import type ImageCoreProps from './ImageCoreProps';
|
|
5
6
|
|
|
6
7
|
// @ts-ignore
|
|
@@ -21,7 +22,7 @@ export default function ImageCore(props: ImageCoreProps) {
|
|
|
21
22
|
width,
|
|
22
23
|
} = props;
|
|
23
24
|
|
|
24
|
-
const opacity =
|
|
25
|
+
const opacity = useAnimatedValue(INITIAL_OPACITY);
|
|
25
26
|
|
|
26
27
|
const handleLoad = useCallback(() => {
|
|
27
28
|
Animated.timing(opacity, {
|
package/src/Radio/Radio.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';
|
|
3
3
|
import ButtonBase from '../ButtonBase';
|
|
4
4
|
import { Radio as RadioIcon, RadioChecked as RadioCheckedIcon } from '../internal';
|
|
5
|
-
import { css
|
|
5
|
+
import { css } from '../styles';
|
|
6
6
|
import { RadioContext } from '../RadioGroup/RadioContextProvider';
|
|
7
7
|
import type RadioProps from './RadioProps';
|
|
8
8
|
|
|
@@ -32,8 +32,6 @@ export default function Radio(props: RadioProps) {
|
|
|
32
32
|
|
|
33
33
|
const styles = useStyles();
|
|
34
34
|
|
|
35
|
-
const theme = useTheme();
|
|
36
|
-
|
|
37
35
|
const context = React.useContext(RadioContext);
|
|
38
36
|
|
|
39
37
|
const handlePress = () => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React, { useCallback, useContext, useEffect
|
|
1
|
+
import React, { useCallback, useContext, useEffect } from 'react';
|
|
2
2
|
import { Animated, Easing } from 'react-native';
|
|
3
3
|
import { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';
|
|
4
4
|
import { useTheme } from '../styles';
|
|
5
|
+
import { useAnimatedValue } from '../hooks';
|
|
5
6
|
import type TabIndicatorProps from './TabIndicatorProps';
|
|
6
7
|
import { defaultCoordinate } from './TabCoordinate';
|
|
7
8
|
import InternalContext from './InternalContext';
|
|
@@ -70,8 +71,8 @@ export default function TabIndicator(props: TabIndicatorProps) {
|
|
|
70
71
|
sx: initialSx,
|
|
71
72
|
} = computeAnimationValues(initialIndex);
|
|
72
73
|
|
|
73
|
-
const translateX =
|
|
74
|
-
const scaleX =
|
|
74
|
+
const translateX = useAnimatedValue(initialTx);
|
|
75
|
+
const scaleX = useAnimatedValue(initialSx);
|
|
75
76
|
|
|
76
77
|
const { indexStore } = useContext(InternalContext);
|
|
77
78
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React, { useImperativeHandle, useRef } from 'react';
|
|
2
2
|
import { Animated, LayoutChangeEvent, NativeSyntheticEvent, TargetedEvent, TextInput } from 'react-native';
|
|
3
|
+
import { css } from '../styles';
|
|
4
|
+
import { useAnimatedValue } from '../hooks';
|
|
3
5
|
import OutlinedTextField from './OutlinedTextField';
|
|
4
6
|
import TextFieldProps from './TextFieldProps';
|
|
5
7
|
import { blurAnimationDuration, focusAnimationDuration } from './utils';
|
|
6
|
-
import { css } from '../styles';
|
|
7
8
|
|
|
8
9
|
const TextField = React.forwardRef<TextInput, TextFieldProps>(function TextField(props, ref) {
|
|
9
10
|
const {
|
|
@@ -41,8 +42,8 @@ const TextField = React.forwardRef<TextInput, TextFieldProps>(function TextField
|
|
|
41
42
|
},
|
|
42
43
|
}));
|
|
43
44
|
|
|
44
|
-
const
|
|
45
|
-
const
|
|
45
|
+
const animatedLabel = useAnimatedValue(value ? 0 : 1);
|
|
46
|
+
const animatedError = useAnimatedValue(error ? 1 : 0);
|
|
46
47
|
const [focused, setFocused] = React.useState(false);
|
|
47
48
|
const [placeholder, setPlaceholder] = React.useState('');
|
|
48
49
|
const [labelLayout, setLabelLayout] = React.useState({
|
package/src/hooks/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as useAnimatedValue } from './useAnimatedValue';
|
|
1
2
|
export { default as useBreakpointUp } from './useBreakpointUp';
|
|
2
3
|
export { default as useCollapsibleAppBar } from './useCollapsibleAppBar';
|
|
3
4
|
export { default as useContentContainerStyle } from './useContentContainerStyle';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useMemo, useRef } from 'react';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
|
|
4
|
+
function ensureFiniteNumber(value: any, fallback: number = 0): number {
|
|
5
|
+
return Number.isFinite(value) ? value : fallback;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default function useAnimatedValue(initialValue: number = 0): Animated.Value {
|
|
9
|
+
if (__DEV__) {
|
|
10
|
+
if (!Number.isFinite(initialValue)) {
|
|
11
|
+
console.warn(`Initial value: ${initialValue} must be numeric.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const initialAnimatedValue = useMemo<Animated.Value>(
|
|
16
|
+
() => new Animated.Value(ensureFiniteNumber(initialValue)),
|
|
17
|
+
[],
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
return useRef<Animated.Value>(initialAnimatedValue).current;
|
|
21
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
import { Animated } from 'react-native';
|
|
3
2
|
import type { SyncAnimatedValue } from '../types';
|
|
3
|
+
import useAnimatedValue from './useAnimatedValue';
|
|
4
4
|
|
|
5
5
|
export interface SyncAnimatedValueConfig {
|
|
6
6
|
initialValue: number;
|
|
@@ -13,14 +13,14 @@ export default function useSyncAnimatedValue(config: SyncAnimatedValueConfig): S
|
|
|
13
13
|
shouldSyncAlways = false,
|
|
14
14
|
} = config;
|
|
15
15
|
|
|
16
|
-
const initialValue = maybeInitialValue
|
|
17
|
-
const animatedValue =
|
|
16
|
+
const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;
|
|
17
|
+
const animatedValue = useAnimatedValue(initialValue);
|
|
18
18
|
|
|
19
|
-
const
|
|
19
|
+
const valueRef = useRef<number>(initialValue);
|
|
20
20
|
|
|
21
21
|
useEffect(() => {
|
|
22
22
|
const maybeId = shouldSyncAlways ? animatedValue.addListener((newValue) => {
|
|
23
|
-
|
|
23
|
+
valueRef.current = newValue.value;
|
|
24
24
|
}) : undefined;
|
|
25
25
|
|
|
26
26
|
return () => {
|
|
@@ -33,6 +33,6 @@ export default function useSyncAnimatedValue(config: SyncAnimatedValueConfig): S
|
|
|
33
33
|
return {
|
|
34
34
|
animatedValue,
|
|
35
35
|
initialValue,
|
|
36
|
-
getCurrentValue: () =>
|
|
36
|
+
getCurrentValue: () => valueRef.current,
|
|
37
37
|
};
|
|
38
38
|
};
|