@0610studio/zs-ui 0.0.37 → 0.0.38
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.
|
@@ -25,7 +25,7 @@ function Modality({ modalityComponent, onModalityClosed }) {
|
|
|
25
25
|
backTranslateY.value = withDelay(400, withTiming(insets.top, { duration: 300 }));
|
|
26
26
|
backBorderRadius.value = withDelay(200, withTiming(16, { duration: 300 }));
|
|
27
27
|
mainTranslateY.value = withDelay(300, withTiming(10 + insets.top, { duration: 300 }));
|
|
28
|
-
backgroundOpacity.value = withTiming(1, { duration:
|
|
28
|
+
backgroundOpacity.value = withTiming(1, { duration: 600 });
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
31
31
|
// 모달이 닫히는 애니메이션 (역순)
|
|
@@ -33,7 +33,7 @@ function Modality({ modalityComponent, onModalityClosed }) {
|
|
|
33
33
|
backTranslateY.value = withTiming(0, { duration: 100 });
|
|
34
34
|
backBorderRadius.value = withTiming(0, { duration: 100 });
|
|
35
35
|
mainTranslateY.value = withTiming(height, { duration: 200 });
|
|
36
|
-
backgroundOpacity.value = withTiming(0, { duration:
|
|
36
|
+
backgroundOpacity.value = withTiming(0, { duration: 300 });
|
|
37
37
|
setTimeout(() => {
|
|
38
38
|
setLocalVisible(false);
|
|
39
39
|
}, 500);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Dimensions, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport Animated, {\n FadeOut,\n useAnimatedStyle,\n withTiming,\n withDelay,\n useSharedValue\n} from 'react-native-reanimated';\nimport { useOverlay } from '../../model/useOverlay';\nimport { ScrollViewAtom } from '../../ui';\nimport { useTheme } from '../../model';\n\nconst { width, height } = Dimensions.get('window');\n\nfunction Modality({\n modalityComponent,\n onModalityClosed\n}: {\n modalityComponent?: React.ReactNode;\n onModalityClosed?: () => void;\n}) {\n const [localVisible, setLocalVisible] = useState(false);\n const { modalityVisible } = useOverlay();\n const insets = useSafeAreaInsets();\n const { palette } = useTheme();\n\n const backScale = useSharedValue(1);\n const backTranslateY = useSharedValue(0);\n const backBorderRadius = useSharedValue(0);\n const mainTranslateY = useSharedValue(height);\n const backgroundOpacity = useSharedValue(1);\n\n // 애니메이션 트리거\n useEffect(() => {\n if (modalityVisible) {\n // 모달이 열리는 애니메이션\n setLocalVisible(true);\n backScale.value = withDelay(200, withTiming(0.92, { duration: 300 }));\n backTranslateY.value = withDelay(400, withTiming(insets.top, { duration: 300 }));\n backBorderRadius.value = withDelay(200, withTiming(16, { duration: 300 }));\n mainTranslateY.value = withDelay(300, withTiming(10 + insets.top, { duration: 300 }));\n backgroundOpacity.value = withTiming(1, { duration:
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Dimensions, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport Animated, {\n FadeOut,\n useAnimatedStyle,\n withTiming,\n withDelay,\n useSharedValue\n} from 'react-native-reanimated';\nimport { useOverlay } from '../../model/useOverlay';\nimport { ScrollViewAtom } from '../../ui';\nimport { useTheme } from '../../model';\n\nconst { width, height } = Dimensions.get('window');\n\nfunction Modality({\n modalityComponent,\n onModalityClosed\n}: {\n modalityComponent?: React.ReactNode;\n onModalityClosed?: () => void;\n}) {\n const [localVisible, setLocalVisible] = useState(false);\n const { modalityVisible } = useOverlay();\n const insets = useSafeAreaInsets();\n const { palette } = useTheme();\n\n const backScale = useSharedValue(1);\n const backTranslateY = useSharedValue(0);\n const backBorderRadius = useSharedValue(0);\n const mainTranslateY = useSharedValue(height);\n const backgroundOpacity = useSharedValue(1);\n\n // 애니메이션 트리거\n useEffect(() => {\n if (modalityVisible) {\n // 모달이 열리는 애니메이션\n setLocalVisible(true);\n backScale.value = withDelay(200, withTiming(0.92, { duration: 300 }));\n backTranslateY.value = withDelay(400, withTiming(insets.top, { duration: 300 }));\n backBorderRadius.value = withDelay(200, withTiming(16, { duration: 300 }));\n mainTranslateY.value = withDelay(300, withTiming(10 + insets.top, { duration: 300 }));\n backgroundOpacity.value = withTiming(1, { duration: 600 });\n } else {\n // 모달이 닫히는 애니메이션 (역순)\n backScale.value = withTiming(1, { duration: 100 });\n backTranslateY.value = withTiming(0, { duration: 100 });\n backBorderRadius.value = withTiming(0, { duration: 100 });\n mainTranslateY.value = withTiming(height, { duration: 200 });\n backgroundOpacity.value = withTiming(0, { duration: 300 });\n setTimeout(() => {\n setLocalVisible(false);\n }, 500);\n }\n }, [modalityVisible, insets.top, onModalityClosed]);\n\n // 부모 스크린\n const backScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { scaleX: backScale.value },\n { translateY: backTranslateY.value }\n ],\n borderRadius: backBorderRadius.value\n };\n });\n\n // 아래에서 등장하는 Modality 화면\n const mainScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { translateY: mainTranslateY.value }\n ]\n };\n });\n\n // 배경 불투명도 스타일\n const backgroundAnimatedStyle = useAnimatedStyle(() => {\n return {\n opacity: backgroundOpacity.value\n };\n });\n\n if (!localVisible) return null;\n\n return (\n <Animated.View\n style={[\n styles.animatedBackground,\n {backgroundColor: palette.background.neutral},\n backgroundAnimatedStyle\n ]}\n >\n <Animated.View\n exiting={FadeOut.duration(300)}\n style={[\n styles.backScreen,\n { backgroundColor: palette.background.layer2 },\n backScreenAnimatedStyle\n ]}\n />\n\n <Animated.View\n style={[\n {\n height: height - (10 + insets.top),\n paddingBottom: insets.bottom,\n backgroundColor: palette.background.base\n },\n styles.mainScreen,\n mainScreenAnimatedStyle\n ]}\n >\n <ScrollViewAtom\n style={styles.scrollStyle}\n bounces={false}\n contentContainerStyle={styles.scrollContainerStyle}\n keyboardShouldPersistTaps=\"handled\"\n automaticallyAdjustKeyboardInsets={true}\n >\n {modalityComponent}\n </ScrollViewAtom>\n </Animated.View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n scrollStyle: {\n flex: 1,\n width: width,\n },\n scrollContainerStyle: {\n flexGrow: 1,\n alignItems: 'center',\n width: width,\n paddingTop: 10,\n },\n animatedBackground: {\n width,\n height,\n position: 'absolute',\n },\n backScreen: {\n position: 'absolute',\n width,\n height,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 8000,\n },\n mainScreen: {\n width,\n position: 'absolute',\n borderRadius: 16,\n zIndex: 8002,\n overflow: 'hidden',\n },\n});\n\nexport default Modality;\n"]}
|