@0610studio/zs-ui 0.17.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/android/build.gradle +3 -3
  2. package/build/ZsUiView.js +2 -2
  3. package/build/ZsUiView.js.map +1 -1
  4. package/build/ZsUiView.web.js +2 -4
  5. package/build/ZsUiView.web.js.map +1 -1
  6. package/build/assets/SvgCheck.js +2 -4
  7. package/build/assets/SvgCheck.js.map +1 -1
  8. package/build/assets/SvgExclamation.js +2 -9
  9. package/build/assets/SvgExclamation.js.map +1 -1
  10. package/build/assets/SvgX.js +3 -5
  11. package/build/assets/SvgX.js.map +1 -1
  12. package/build/context/OverlayContext.js +2 -29
  13. package/build/context/OverlayContext.js.map +1 -1
  14. package/build/context/ThemeContext.d.ts.map +1 -1
  15. package/build/context/ThemeContext.js +5 -8
  16. package/build/context/ThemeContext.js.map +1 -1
  17. package/build/overlay/AlertOverlay/index.js +8 -25
  18. package/build/overlay/AlertOverlay/index.js.map +1 -1
  19. package/build/overlay/BottomSheetOverlay/index.js +3 -17
  20. package/build/overlay/BottomSheetOverlay/index.js.map +1 -1
  21. package/build/overlay/LoadingNotify/index.js +4 -5
  22. package/build/overlay/LoadingNotify/index.js.map +1 -1
  23. package/build/overlay/Modality/index.js +20 -29
  24. package/build/overlay/Modality/index.js.map +1 -1
  25. package/build/overlay/PopOver/PopOverButton.js +3 -6
  26. package/build/overlay/PopOver/PopOverButton.js.map +1 -1
  27. package/build/overlay/PopOver/PopOverMenu.js +7 -12
  28. package/build/overlay/PopOver/PopOverMenu.js.map +1 -1
  29. package/build/overlay/SnackbarNotify/index.js +4 -6
  30. package/build/overlay/SnackbarNotify/index.js.map +1 -1
  31. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js +6 -13
  32. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js.map +1 -1
  33. package/build/overlay/ZSPortal/index.js +3 -7
  34. package/build/overlay/ZSPortal/index.js.map +1 -1
  35. package/build/overlay/ui/ModalBackground.js +5 -9
  36. package/build/overlay/ui/ModalBackground.js.map +1 -1
  37. package/build/ui/ZSAboveKeyboard/index.js +2 -5
  38. package/build/ui/ZSAboveKeyboard/index.js.map +1 -1
  39. package/build/ui/ZSBlockButton/index.js +13 -17
  40. package/build/ui/ZSBlockButton/index.js.map +1 -1
  41. package/build/ui/ZSContainer/index.js +3 -36
  42. package/build/ui/ZSContainer/index.js.map +1 -1
  43. package/build/ui/ZSPressable/index.js +2 -9
  44. package/build/ui/ZSPressable/index.js.map +1 -1
  45. package/build/ui/ZSRadioGroup/index.js +41 -64
  46. package/build/ui/ZSRadioGroup/index.js.map +1 -1
  47. package/build/ui/ZSSkeleton/index.js +3 -12
  48. package/build/ui/ZSSkeleton/index.js.map +1 -1
  49. package/build/ui/ZSSkeletonBox/index.js +9 -16
  50. package/build/ui/ZSSkeletonBox/index.js.map +1 -1
  51. package/build/ui/ZSSwitch/index.js +2 -6
  52. package/build/ui/ZSSwitch/index.js.map +1 -1
  53. package/build/ui/ZSText/index.js +2 -2
  54. package/build/ui/ZSText/index.js.map +1 -1
  55. package/build/ui/ZSTextField/index.js +2 -15
  56. package/build/ui/ZSTextField/index.js.map +1 -1
  57. package/build/ui/ZSTextField/ui/ButtonClose.js +2 -3
  58. package/build/ui/ZSTextField/ui/ButtonClose.js.map +1 -1
  59. package/build/ui/ZSTextField/ui/ErrorComponent.js +2 -7
  60. package/build/ui/ZSTextField/ui/ErrorComponent.js.map +1 -1
  61. package/build/ui/ZSView/index.js +3 -4
  62. package/build/ui/ZSView/index.js.map +1 -1
  63. package/build/ui/atoms/AnimatedWrapper.js +4 -5
  64. package/build/ui/atoms/AnimatedWrapper.js.map +1 -1
  65. package/build/ui/atoms/TextAtom.js +2 -4
  66. package/build/ui/atoms/TextAtom.js.map +1 -1
  67. package/build/ui/atoms/ViewAtom.js +2 -4
  68. package/build/ui/atoms/ViewAtom.js.map +1 -1
  69. package/ios/ZsUi.podspec +1 -1
  70. package/package.json +30 -28
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/BottomSheetOverlay/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState, useCallback, useMemo, useRef } from 'react';\nimport { StyleSheet, View, PanResponder, Keyboard, Platform, type KeyboardEvent, type LayoutChangeEvent, type PanResponderGestureState, type GestureResponderEvent, useWindowDimensions, type ViewStyle } from 'react-native';\nimport { useBottomSheet } from '../../model/useOverlay';\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';\nimport ModalBackground from '../ui/ModalBackground';\nimport { useTheme } from '../../context/ThemeContext';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { ShowBottomSheetProps } from '../../model/types';\nimport { MAX_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';\nimport useKeyboard from '../../model/useKeyboard';\nimport useFoldingState from '../../model/useFoldingState';\n\nconst IS_IOS = Platform.OS === 'ios';\n\nconst ANIMATION_CONFIG = {\n keyboard: {\n show: { duration: 250 },\n hide: { duration: 150 },\n },\n spring: {\n damping: 50,\n stiffness: 300,\n mass: 0.7,\n velocity: 100,\n restDisplacementThreshold: 0.2,\n },\n close: { duration: 150 },\n scale: { duration: 200 },\n scaleRestore: {\n damping: 15,\n stiffness: 300,\n },\n} as const;\n\nconst GESTURE_CONSTANTS = {\n scaleAmount: 0.985,\n horizontalDamping: 18,\n verticalUpDamping: 18,\n verticalDownDamping: 1.5,\n closeVelocityThreshold: 0.5,\n closeDistanceRatio: 1 / 3,\n minimumCloseDistance: 80,\n hideDelay: 200,\n moveThreshold: 10, // 드래그로 인식하기 위한 최소 이동 거리 (px)\n} as const;\n\nconst getSafeFiniteNumber = (value: number, fallback: number) =>\n Number.isFinite(value) ? value : fallback;\n\nfunction BottomSheetOverlay({\n headerComponent,\n component,\n options = {},\n}: ShowBottomSheetProps) {\n const {\n foldableSingleScreen = false,\n isBackgroundTouchClose = true,\n marginHorizontal = 10,\n marginBottom = 10,\n padding = 14,\n } = options;\n const { height: windowHeight } = useWindowDimensions();\n const { width: windowWidth } = useFoldingState();\n const { palette } = useTheme();\n const { bottomSheetVisible, setBottomSheetVisible, height, maxHeight } = useBottomSheet();\n const { bottom: bottomInsets, top: topInsets } = useSafeAreaInsets();\n const [sheetHeight, setSheetHeight] = useState(0);\n const isAutoHeight = height === 'auto';\n\n const viewportMaxHeight = useMemo(() =>\n Math.max(\n windowHeight - 30 - bottomInsets - topInsets,\n 0\n ),\n [bottomInsets, topInsets, windowHeight]\n );\n\n const constrainedMaxHeight = useMemo(() => {\n const maxHeightLimit = Math.max(getSafeFiniteNumber(maxHeight, viewportMaxHeight), 0);\n\n if (isAutoHeight) {\n return Math.min(viewportMaxHeight, maxHeightLimit);\n }\n\n return Math.min(viewportMaxHeight, maxHeightLimit, Math.max(getSafeFiniteNumber(height, 0), 0));\n }, [height, isAutoHeight, maxHeight, viewportMaxHeight]);\n\n const translateY = useSharedValue(0);\n const translateX = useSharedValue(0);\n const scale = useSharedValue(1);\n const startX = useSharedValue(0);\n const startY = useSharedValue(0);\n const isGesturing = useSharedValue(false);\n\n const [localVisible, setLocalVisible] = useState(false);\n const latestCloseOffsetRef = useRef(constrainedMaxHeight + 100);\n const closingOffsetRef = useRef(constrainedMaxHeight + 100);\n\n useEffect(() => {\n latestCloseOffsetRef.current = sheetHeight > 0 ? sheetHeight + 100 : constrainedMaxHeight + 100;\n }, [constrainedMaxHeight, sheetHeight]);\n\n const handleKeyboardShow = useCallback((event: KeyboardEvent) => {\n if (!isGesturing.value) {\n const targetY = -event.endCoordinates.height + (IS_IOS ? bottomInsets : 0);\n translateY.value = withTiming(targetY, ANIMATION_CONFIG.keyboard.show);\n }\n }, [bottomInsets]);\n\n const handleKeyboardHide = useCallback(() => {\n if (!isGesturing.value) {\n translateY.value = withTiming(0, ANIMATION_CONFIG.keyboard.hide);\n }\n }, []);\n\n useKeyboard({\n handleKeyboardShow,\n handleKeyboardHide,\n });\n\n // BottomSheet 표시/숨김 애니메이션 처리\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n if (bottomSheetVisible) {\n closingOffsetRef.current = latestCloseOffsetRef.current;\n Keyboard.dismiss();\n setLocalVisible(true);\n translateY.value = withSpring(0, ANIMATION_CONFIG.spring);\n } else {\n const targetCloseOffset = closingOffsetRef.current || latestCloseOffsetRef.current;\n closingOffsetRef.current = targetCloseOffset;\n translateY.value = withTiming(targetCloseOffset, ANIMATION_CONFIG.close);\n timeoutId = setTimeout(() => {\n setLocalVisible(false);\n }, GESTURE_CONSTANTS.hideDelay);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, [bottomSheetVisible]);\n\n const animatedStyles = useAnimatedStyle(() => {\n return {\n transform: [\n { translateY: translateY.value },\n { translateX: translateX.value },\n { scale: scale.value }\n ],\n };\n });\n\n const dismissKeyboard = useCallback(() => {\n Keyboard.dismiss();\n }, []);\n\n const closeBottomSheet = useCallback(() => {\n setBottomSheetVisible(false);\n }, [setBottomSheetVisible]);\n\n const handleSheetLayout = useCallback((event: LayoutChangeEvent) => {\n const nextHeight = Math.round(event.nativeEvent.layout.height);\n\n if (nextHeight > 0) {\n const nextCloseOffset = nextHeight + 100;\n latestCloseOffsetRef.current = nextCloseOffset;\n if (bottomSheetVisible) {\n closingOffsetRef.current = nextCloseOffset;\n }\n }\n\n setSheetHeight((prevHeight) => {\n if (Math.abs(prevHeight - nextHeight) <= 1) {\n return prevHeight;\n }\n\n return nextHeight;\n });\n }, [bottomSheetVisible]);\n\n const handlePanResponderGrant = useCallback(() => {\n dismissKeyboard();\n isGesturing.value = true;\n startX.value = translateX.value;\n startY.value = translateY.value;\n scale.value = withTiming(GESTURE_CONSTANTS.scaleAmount, ANIMATION_CONFIG.scale);\n }, [dismissKeyboard]);\n\n const handlePanResponderMove = useCallback((_: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n const newTranslateX = (startX.value + gestureState.dx) / GESTURE_CONSTANTS.horizontalDamping;\n translateX.value = newTranslateX;\n\n const newTranslateY = startY.value + gestureState.dy;\n if (newTranslateY < 0) {\n translateY.value = newTranslateY / GESTURE_CONSTANTS.verticalUpDamping;\n } else {\n translateY.value = newTranslateY / GESTURE_CONSTANTS.verticalDownDamping;\n }\n }, []);\n\n const handlePanResponderRelease = useCallback((_: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n isGesturing.value = false;\n translateX.value = withTiming(0, { duration: 100 });\n\n const dismissThresholdHeight = sheetHeight > 0 ? sheetHeight : constrainedMaxHeight;\n const dismissDistanceThreshold = Math.max(\n dismissThresholdHeight * GESTURE_CONSTANTS.closeDistanceRatio,\n GESTURE_CONSTANTS.minimumCloseDistance\n );\n const shouldClose = gestureState.vy > GESTURE_CONSTANTS.closeVelocityThreshold ||\n translateY.value > dismissDistanceThreshold;\n\n if (shouldClose) {\n const targetCloseOffset = latestCloseOffsetRef.current;\n closingOffsetRef.current = targetCloseOffset;\n translateY.value = withTiming(targetCloseOffset, ANIMATION_CONFIG.close);\n closeBottomSheet();\n } else {\n translateY.value = withTiming(0, ANIMATION_CONFIG.close);\n }\n\n scale.value = withSpring(1, ANIMATION_CONFIG.scaleRestore);\n }, [closeBottomSheet, constrainedMaxHeight, sheetHeight]);\n\n const panResponder = useMemo(\n () => PanResponder.create({\n onStartShouldSetPanResponder: () => false,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: (_, gestureState) => {\n // 일정 거리 이상 이동했을 때만 PanResponder가 응답 (탭과 드래그 구분)\n const { dx, dy } = gestureState;\n return Math.abs(dx) > GESTURE_CONSTANTS.moveThreshold || Math.abs(dy) > GESTURE_CONSTANTS.moveThreshold;\n },\n onMoveShouldSetPanResponderCapture: () => false,\n onPanResponderGrant: handlePanResponderGrant,\n onPanResponderMove: handlePanResponderMove,\n onPanResponderRelease: handlePanResponderRelease,\n }),\n [handlePanResponderGrant, handlePanResponderMove, handlePanResponderRelease]\n );\n\n // 배경 터치 핸들러\n const handleBackgroundPress = useCallback(() => {\n if (isBackgroundTouchClose) setBottomSheetVisible(false);\n }, [isBackgroundTouchClose, setBottomSheetVisible]);\n\n const containerHeightStyle = useMemo<ViewStyle>(() => {\n if (isAutoHeight) {\n return { maxHeight: constrainedMaxHeight };\n }\n\n return {\n height: constrainedMaxHeight,\n maxHeight: constrainedMaxHeight,\n };\n }, [constrainedMaxHeight, isAutoHeight]);\n\n const containerStyle = [\n styles.container,\n containerHeightStyle,\n {\n width: options.type === 'fixed' ? '100%' : windowWidth - marginHorizontal * 2,\n maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',\n marginHorizontal: options.type === 'fixed' ? 0 : marginHorizontal,\n bottom: options.type === 'fixed' ? 0 : marginBottom + bottomInsets,\n paddingBottom: options.type === 'fixed' ? bottomInsets : 0,\n backgroundColor: palette.background.base,\n ... (options.type === 'fixed' ? { borderTopLeftRadius: 26, borderTopRightRadius: 26, borderBottomLeftRadius: 0, borderBottomRightRadius: 0 } : { borderRadius: 26 }),\n },\n animatedStyles,\n ] as ViewStyle[];\n\n const pressableViewStyle = [\n styles.pressableView,\n { paddingHorizontal: padding, paddingBottom: padding },\n isAutoHeight ? styles.pressableViewAuto : styles.pressableViewFill,\n ];\n\n const contentWrapperStyle = [\n styles.contentWrapper,\n isAutoHeight ? styles.contentWrapperAuto : styles.contentWrapperFill,\n ];\n\n const gestureBarContainerStyle = [\n styles.gestureBarContainer,\n { paddingBottom: padding }\n ];\n\n const gestureBarStyle = [\n styles.gestureBar,\n { backgroundColor: palette.grey[60] }\n ];\n\n if (!localVisible) {\n return null;\n }\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.BOTTOM_SHEET1}\n key={localVisible ? 'visiblebs' : 'hiddenbs'}\n modalBgColor={palette.modalBgColor}\n onPress={handleBackgroundPress}\n >\n <Animated.View style={containerStyle} onLayout={handleSheetLayout}>\n <View style={pressableViewStyle}>\n <View {...panResponder.panHandlers}>\n <View style={gestureBarContainerStyle}>\n <View style={gestureBarStyle} />\n </View>\n {headerComponent}\n </View>\n\n <View style={contentWrapperStyle}>\n {component}\n </View>\n </View>\n </Animated.View>\n </ModalBackground>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n borderRadius: 26,\n overflow: 'hidden',\n zIndex: Z_INDEX_VALUE.BOTTOM_SHEET2,\n },\n pressableView: {\n width: '100%',\n maxHeight: '100%',\n },\n pressableViewFill: {\n height: '100%',\n },\n pressableViewAuto: {\n flexShrink: 1,\n },\n contentWrapper: {\n minHeight: 0,\n },\n contentWrapperFill: {\n flex: 1,\n },\n contentWrapperAuto: {\n flexShrink: 1,\n maxHeight: '100%',\n },\n gestureBarContainer: {\n width: '100%',\n paddingTop: 10,\n justifyContent: 'center',\n alignItems: 'center',\n },\n gestureBar: {\n width: 45,\n height: 3,\n borderRadius: 2,\n },\n});\n\nexport default BottomSheetOverlay;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/BottomSheetOverlay/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAyG,mBAAmB,EAAkB,MAAM,cAAc,CAAC;AAC9N,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,QAAQ,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAE1D,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;AAErC,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;QACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;KACxB;IACD,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,GAAG;QACd,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,GAAG;QACb,yBAAyB,EAAE,GAAG;KAC/B;IACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;IACxB,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;IACxB,YAAY,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,GAAG;KACf;CACO,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACxB,WAAW,EAAE,KAAK;IAClB,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,GAAG;IACxB,sBAAsB,EAAE,GAAG;IAC3B,kBAAkB,EAAE,CAAC,GAAG,CAAC;IACzB,oBAAoB,EAAE,EAAE;IACxB,SAAS,EAAE,GAAG;IACd,aAAa,EAAE,EAAE,EAAE,6BAA6B;CACxC,CAAC;AAEX,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,EAAE,CAC9D,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAE5C,SAAS,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,EACT,OAAO,GAAG,EAAE,GACS;IACrB,MAAM,EACJ,oBAAoB,GAAG,KAAK,EAC5B,sBAAsB,GAAG,IAAI,EAC7B,gBAAgB,GAAG,EAAE,EACrB,YAAY,GAAG,EAAE,EACjB,OAAO,GAAG,EAAE,GACb,GAAG,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACvD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAAC;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1F,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACrE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,KAAK,MAAM,CAAC;IAEvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,CACrC,IAAI,CAAC,GAAG,CACN,YAAY,GAAG,EAAE,GAAG,YAAY,GAAG,SAAS,EAC5C,CAAC,CACF,EACD,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,CAAC,CACxC,CAAC;IAEF,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB,CAAC,OAAO,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,oBAAoB,GAAG,GAAG,CAAC;IAClG,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;IAExC,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAAoB,EAAE,EAAE;QAC9D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,WAAW,CAAC;QACV,kBAAkB;QAClB,kBAAkB;KACnB,CAAC,CAAC;IAEH,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAwC,CAAC;QAE7C,IAAI,kBAAkB,EAAE,CAAC;YACvB,gBAAgB,CAAC,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC;YACxD,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC;YACnF,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC;YAC7C,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACzE,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,EAAE;QAC3C,OAAO;YACL,SAAS,EAAE;gBACT,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE;gBAChC,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE;gBAChC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;aACvB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAwB,EAAE,EAAE;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/D,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,eAAe,GAAG,UAAU,GAAG,GAAG,CAAC;YACzC,oBAAoB,CAAC,OAAO,GAAG,eAAe,CAAC;YAC/C,IAAI,kBAAkB,EAAE,CAAC;gBACvB,gBAAgB,CAAC,OAAO,GAAG,eAAe,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,cAAc,CAAC,CAAC,UAAU,EAAE,EAAE;YAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO,UAAU,CAAC;YACpB,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/C,eAAe,EAAE,CAAC;QAClB,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAChC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,CAAwB,EAAE,YAAsC,EAAE,EAAE;QAC9G,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;QAC7F,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QAEjC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC;QACrD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,UAAU,CAAC,KAAK,GAAG,aAAa,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,GAAG,aAAa,GAAG,iBAAiB,CAAC,mBAAmB,CAAC;QAC3E,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,yBAAyB,GAAG,WAAW,CAAC,CAAC,CAAwB,EAAE,YAAsC,EAAE,EAAE;QACjH,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAEpD,MAAM,sBAAsB,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACpF,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CACvC,sBAAsB,GAAG,iBAAiB,CAAC,kBAAkB,EAC7D,iBAAiB,CAAC,oBAAoB,CACvC,CAAC;QACF,MAAM,WAAW,GAAG,YAAY,CAAC,EAAE,GAAG,iBAAiB,CAAC,sBAAsB;YAC5E,UAAU,CAAC,KAAK,GAAG,wBAAwB,CAAC;QAE9C,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC;YACvD,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC;YAC7C,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACzE,gBAAgB,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;QACxB,4BAA4B,EAAE,GAAG,EAAE,CAAC,KAAK;QACzC,mCAAmC,EAAE,GAAG,EAAE,CAAC,KAAK;QAChD,2BAA2B,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE;YAC/C,gDAAgD;YAChD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,YAAY,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,aAAa,CAAC;QAC1G,CAAC;QACD,kCAAkC,EAAE,GAAG,EAAE,CAAC,KAAK;QAC/C,mBAAmB,EAAE,uBAAuB;QAC5C,kBAAkB,EAAE,sBAAsB;QAC1C,qBAAqB,EAAE,yBAAyB;KACjD,CAAC,EACF,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAC7E,CAAC;IAEF,YAAY;IACZ,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,IAAI,sBAAsB;YAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEpD,MAAM,oBAAoB,GAAG,OAAO,CAAY,GAAG,EAAE;QACnD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,MAAM,EAAE,oBAAoB;YAC5B,SAAS,EAAE,oBAAoB;SAChC,CAAC;IACJ,CAAC,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG;QACrB,MAAM,CAAC,SAAS;QAChB,oBAAoB;QACpB;YACE,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,GAAG,gBAAgB,GAAG,CAAC;YAC7E,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM;YACnE,gBAAgB,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;YACjE,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,YAAY;YAClE,aAAa,EAAE,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1D,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;YACxC,GAAI,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,oBAAoB,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;SACrK;QACD,cAAc;KACA,CAAC;IAEjB,MAAM,kBAAkB,GAAG;QACzB,MAAM,CAAC,aAAa;QACpB,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;QACtD,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB;KACnE,CAAC;IAEF,MAAM,mBAAmB,GAAG;QAC1B,MAAM,CAAC,cAAc;QACrB,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB;KACrE,CAAC;IAEF,MAAM,wBAAwB,GAAG;QAC/B,MAAM,CAAC,mBAAmB;QAC1B,EAAE,aAAa,EAAE,OAAO,EAAE;KAC3B,CAAC;IAEF,MAAM,eAAe,GAAG;QACtB,MAAM,CAAC,UAAU;QACjB,EAAE,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;KACtC,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,aAAa,CAAC,aAAa,EAEnC,YAAY,EAAE,OAAO,CAAC,YAAY,EAClC,OAAO,EAAE,qBAAqB,YAE9B,KAAC,QAAQ,CAAC,IAAI,IAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB,YAC/D,MAAC,IAAI,IAAC,KAAK,EAAE,kBAAkB,aAC7B,MAAC,IAAI,OAAK,YAAY,CAAC,WAAW,aAChC,KAAC,IAAI,IAAC,KAAK,EAAE,wBAAwB,YACnC,KAAC,IAAI,IAAC,KAAK,EAAE,eAAe,GAAI,GAC3B,EACN,eAAe,IACX,EAEP,KAAC,IAAI,IAAC,KAAK,EAAE,mBAAmB,YAC7B,SAAS,GACL,IACF,GACO,IAjBX,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAkB5B,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,QAAQ,EAAE,UAAU;QACpB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,aAAa,CAAC,aAAa;KACpC;IACD,aAAa,EAAE;QACb,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,MAAM;KAClB;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,MAAM;KACf;IACD,iBAAiB,EAAE;QACjB,UAAU,EAAE,CAAC;KACd;IACD,cAAc,EAAE;QACd,SAAS,EAAE,CAAC;KACb;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,CAAC;KACR;IACD,kBAAkB,EAAE;QAClB,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,MAAM;KAClB;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;KACrB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;KAChB;CACF,CAAC,CAAC;AAEH,eAAe,kBAAkB,CAAC","sourcesContent":["import React, { useEffect, useState, useCallback, useMemo, useRef } from 'react';\nimport { StyleSheet, View, PanResponder, Keyboard, Platform, type KeyboardEvent, type LayoutChangeEvent, type PanResponderGestureState, type GestureResponderEvent, useWindowDimensions, type ViewStyle } from 'react-native';\nimport { useBottomSheet } from '../../model/useOverlay';\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';\nimport ModalBackground from '../ui/ModalBackground';\nimport { useTheme } from '../../context/ThemeContext';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { ShowBottomSheetProps } from '../../model/types';\nimport { MAX_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';\nimport useKeyboard from '../../model/useKeyboard';\nimport useFoldingState from '../../model/useFoldingState';\n\nconst IS_IOS = Platform.OS === 'ios';\n\nconst ANIMATION_CONFIG = {\n keyboard: {\n show: { duration: 250 },\n hide: { duration: 150 },\n },\n spring: {\n damping: 50,\n stiffness: 300,\n mass: 0.7,\n velocity: 100,\n restDisplacementThreshold: 0.2,\n },\n close: { duration: 150 },\n scale: { duration: 200 },\n scaleRestore: {\n damping: 15,\n stiffness: 300,\n },\n} as const;\n\nconst GESTURE_CONSTANTS = {\n scaleAmount: 0.985,\n horizontalDamping: 18,\n verticalUpDamping: 18,\n verticalDownDamping: 1.5,\n closeVelocityThreshold: 0.5,\n closeDistanceRatio: 1 / 3,\n minimumCloseDistance: 80,\n hideDelay: 200,\n moveThreshold: 10, // 드래그로 인식하기 위한 최소 이동 거리 (px)\n} as const;\n\nconst getSafeFiniteNumber = (value: number, fallback: number) =>\n Number.isFinite(value) ? value : fallback;\n\nfunction BottomSheetOverlay({\n headerComponent,\n component,\n options = {},\n}: ShowBottomSheetProps) {\n const {\n foldableSingleScreen = false,\n isBackgroundTouchClose = true,\n marginHorizontal = 10,\n marginBottom = 10,\n padding = 14,\n } = options;\n const { height: windowHeight } = useWindowDimensions();\n const { width: windowWidth } = useFoldingState();\n const { palette } = useTheme();\n const { bottomSheetVisible, setBottomSheetVisible, height, maxHeight } = useBottomSheet();\n const { bottom: bottomInsets, top: topInsets } = useSafeAreaInsets();\n const [sheetHeight, setSheetHeight] = useState(0);\n const isAutoHeight = height === 'auto';\n\n const viewportMaxHeight = useMemo(() =>\n Math.max(\n windowHeight - 30 - bottomInsets - topInsets,\n 0\n ),\n [bottomInsets, topInsets, windowHeight]\n );\n\n const constrainedMaxHeight = useMemo(() => {\n const maxHeightLimit = Math.max(getSafeFiniteNumber(maxHeight, viewportMaxHeight), 0);\n\n if (isAutoHeight) {\n return Math.min(viewportMaxHeight, maxHeightLimit);\n }\n\n return Math.min(viewportMaxHeight, maxHeightLimit, Math.max(getSafeFiniteNumber(height, 0), 0));\n }, [height, isAutoHeight, maxHeight, viewportMaxHeight]);\n\n const translateY = useSharedValue(0);\n const translateX = useSharedValue(0);\n const scale = useSharedValue(1);\n const startX = useSharedValue(0);\n const startY = useSharedValue(0);\n const isGesturing = useSharedValue(false);\n\n const [localVisible, setLocalVisible] = useState(false);\n const latestCloseOffsetRef = useRef(constrainedMaxHeight + 100);\n const closingOffsetRef = useRef(constrainedMaxHeight + 100);\n\n useEffect(() => {\n latestCloseOffsetRef.current = sheetHeight > 0 ? sheetHeight + 100 : constrainedMaxHeight + 100;\n }, [constrainedMaxHeight, sheetHeight]);\n\n const handleKeyboardShow = useCallback((event: KeyboardEvent) => {\n if (!isGesturing.value) {\n const targetY = -event.endCoordinates.height + (IS_IOS ? bottomInsets : 0);\n translateY.value = withTiming(targetY, ANIMATION_CONFIG.keyboard.show);\n }\n }, [bottomInsets]);\n\n const handleKeyboardHide = useCallback(() => {\n if (!isGesturing.value) {\n translateY.value = withTiming(0, ANIMATION_CONFIG.keyboard.hide);\n }\n }, []);\n\n useKeyboard({\n handleKeyboardShow,\n handleKeyboardHide,\n });\n\n // BottomSheet 표시/숨김 애니메이션 처리\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n if (bottomSheetVisible) {\n closingOffsetRef.current = latestCloseOffsetRef.current;\n Keyboard.dismiss();\n setLocalVisible(true);\n translateY.value = withSpring(0, ANIMATION_CONFIG.spring);\n } else {\n const targetCloseOffset = closingOffsetRef.current || latestCloseOffsetRef.current;\n closingOffsetRef.current = targetCloseOffset;\n translateY.value = withTiming(targetCloseOffset, ANIMATION_CONFIG.close);\n timeoutId = setTimeout(() => {\n setLocalVisible(false);\n }, GESTURE_CONSTANTS.hideDelay);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, [bottomSheetVisible]);\n\n const animatedStyles = useAnimatedStyle(() => {\n return {\n transform: [\n { translateY: translateY.value },\n { translateX: translateX.value },\n { scale: scale.value }\n ],\n };\n });\n\n const dismissKeyboard = useCallback(() => {\n Keyboard.dismiss();\n }, []);\n\n const closeBottomSheet = useCallback(() => {\n setBottomSheetVisible(false);\n }, [setBottomSheetVisible]);\n\n const handleSheetLayout = useCallback((event: LayoutChangeEvent) => {\n const nextHeight = Math.round(event.nativeEvent.layout.height);\n\n if (nextHeight > 0) {\n const nextCloseOffset = nextHeight + 100;\n latestCloseOffsetRef.current = nextCloseOffset;\n if (bottomSheetVisible) {\n closingOffsetRef.current = nextCloseOffset;\n }\n }\n\n setSheetHeight((prevHeight) => {\n if (Math.abs(prevHeight - nextHeight) <= 1) {\n return prevHeight;\n }\n\n return nextHeight;\n });\n }, [bottomSheetVisible]);\n\n const handlePanResponderGrant = useCallback(() => {\n dismissKeyboard();\n isGesturing.value = true;\n startX.value = translateX.value;\n startY.value = translateY.value;\n scale.value = withTiming(GESTURE_CONSTANTS.scaleAmount, ANIMATION_CONFIG.scale);\n }, [dismissKeyboard]);\n\n const handlePanResponderMove = useCallback((_: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n const newTranslateX = (startX.value + gestureState.dx) / GESTURE_CONSTANTS.horizontalDamping;\n translateX.value = newTranslateX;\n\n const newTranslateY = startY.value + gestureState.dy;\n if (newTranslateY < 0) {\n translateY.value = newTranslateY / GESTURE_CONSTANTS.verticalUpDamping;\n } else {\n translateY.value = newTranslateY / GESTURE_CONSTANTS.verticalDownDamping;\n }\n }, []);\n\n const handlePanResponderRelease = useCallback((_: GestureResponderEvent, gestureState: PanResponderGestureState) => {\n isGesturing.value = false;\n translateX.value = withTiming(0, { duration: 100 });\n\n const dismissThresholdHeight = sheetHeight > 0 ? sheetHeight : constrainedMaxHeight;\n const dismissDistanceThreshold = Math.max(\n dismissThresholdHeight * GESTURE_CONSTANTS.closeDistanceRatio,\n GESTURE_CONSTANTS.minimumCloseDistance\n );\n const shouldClose = gestureState.vy > GESTURE_CONSTANTS.closeVelocityThreshold ||\n translateY.value > dismissDistanceThreshold;\n\n if (shouldClose) {\n const targetCloseOffset = latestCloseOffsetRef.current;\n closingOffsetRef.current = targetCloseOffset;\n translateY.value = withTiming(targetCloseOffset, ANIMATION_CONFIG.close);\n closeBottomSheet();\n } else {\n translateY.value = withTiming(0, ANIMATION_CONFIG.close);\n }\n\n scale.value = withSpring(1, ANIMATION_CONFIG.scaleRestore);\n }, [closeBottomSheet, constrainedMaxHeight, sheetHeight]);\n\n const panResponder = useMemo(\n () => PanResponder.create({\n onStartShouldSetPanResponder: () => false,\n onStartShouldSetPanResponderCapture: () => false,\n onMoveShouldSetPanResponder: (_, gestureState) => {\n // 일정 거리 이상 이동했을 때만 PanResponder가 응답 (탭과 드래그 구분)\n const { dx, dy } = gestureState;\n return Math.abs(dx) > GESTURE_CONSTANTS.moveThreshold || Math.abs(dy) > GESTURE_CONSTANTS.moveThreshold;\n },\n onMoveShouldSetPanResponderCapture: () => false,\n onPanResponderGrant: handlePanResponderGrant,\n onPanResponderMove: handlePanResponderMove,\n onPanResponderRelease: handlePanResponderRelease,\n }),\n [handlePanResponderGrant, handlePanResponderMove, handlePanResponderRelease]\n );\n\n // 배경 터치 핸들러\n const handleBackgroundPress = useCallback(() => {\n if (isBackgroundTouchClose) setBottomSheetVisible(false);\n }, [isBackgroundTouchClose, setBottomSheetVisible]);\n\n const containerHeightStyle = useMemo<ViewStyle>(() => {\n if (isAutoHeight) {\n return { maxHeight: constrainedMaxHeight };\n }\n\n return {\n height: constrainedMaxHeight,\n maxHeight: constrainedMaxHeight,\n };\n }, [constrainedMaxHeight, isAutoHeight]);\n\n const containerStyle = [\n styles.container,\n containerHeightStyle,\n {\n width: options.type === 'fixed' ? '100%' : windowWidth - marginHorizontal * 2,\n maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',\n marginHorizontal: options.type === 'fixed' ? 0 : marginHorizontal,\n bottom: options.type === 'fixed' ? 0 : marginBottom + bottomInsets,\n paddingBottom: options.type === 'fixed' ? bottomInsets : 0,\n backgroundColor: palette.background.base,\n ... (options.type === 'fixed' ? { borderTopLeftRadius: 26, borderTopRightRadius: 26, borderBottomLeftRadius: 0, borderBottomRightRadius: 0 } : { borderRadius: 26 }),\n },\n animatedStyles,\n ] as ViewStyle[];\n\n const pressableViewStyle = [\n styles.pressableView,\n { paddingHorizontal: padding, paddingBottom: padding },\n isAutoHeight ? styles.pressableViewAuto : styles.pressableViewFill,\n ];\n\n const contentWrapperStyle = [\n styles.contentWrapper,\n isAutoHeight ? styles.contentWrapperAuto : styles.contentWrapperFill,\n ];\n\n const gestureBarContainerStyle = [\n styles.gestureBarContainer,\n { paddingBottom: padding }\n ];\n\n const gestureBarStyle = [\n styles.gestureBar,\n { backgroundColor: palette.grey[60] }\n ];\n\n if (!localVisible) {\n return null;\n }\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.BOTTOM_SHEET1}\n key={localVisible ? 'visiblebs' : 'hiddenbs'}\n modalBgColor={palette.modalBgColor}\n onPress={handleBackgroundPress}\n >\n <Animated.View style={containerStyle} onLayout={handleSheetLayout}>\n <View style={pressableViewStyle}>\n <View {...panResponder.panHandlers}>\n <View style={gestureBarContainerStyle}>\n <View style={gestureBarStyle} />\n </View>\n {headerComponent}\n </View>\n\n <View style={contentWrapperStyle}>\n {component}\n </View>\n </View>\n </Animated.View>\n </ModalBackground>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n position: 'absolute',\n borderRadius: 26,\n overflow: 'hidden',\n zIndex: Z_INDEX_VALUE.BOTTOM_SHEET2,\n },\n pressableView: {\n width: '100%',\n maxHeight: '100%',\n },\n pressableViewFill: {\n height: '100%',\n },\n pressableViewAuto: {\n flexShrink: 1,\n },\n contentWrapper: {\n minHeight: 0,\n },\n contentWrapperFill: {\n flex: 1,\n },\n contentWrapperAuto: {\n flexShrink: 1,\n maxHeight: '100%',\n },\n gestureBarContainer: {\n width: '100%',\n paddingTop: 10,\n justifyContent: 'center',\n alignItems: 'center',\n },\n gestureBar: {\n width: 45,\n height: 3,\n borderRadius: 2,\n },\n});\n\nexport default BottomSheetOverlay;\n"]}
@@ -1,5 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import { ActivityIndicator } from "react-native";
2
- import React, { useCallback } from "react";
3
+ import { useCallback } from "react";
3
4
  import { useLoader } from "../../model/useOverlay";
4
5
  import ModalBackground from "../ui/ModalBackground";
5
6
  import { useTheme } from "../../context/ThemeContext";
@@ -8,13 +9,11 @@ function LoadingNotify({ loaderComponent, }) {
8
9
  const { loaderVisible } = useLoader();
9
10
  const { palette } = useTheme();
10
11
  const renderLoader = useCallback(() => {
11
- return loaderComponent ? (loaderComponent()) : (<ActivityIndicator size="large" color="#fff"/>);
12
+ return loaderComponent ? (loaderComponent()) : (_jsx(ActivityIndicator, { size: "large", color: "#fff" }));
12
13
  }, [loaderComponent]);
13
14
  if (!loaderVisible)
14
15
  return null;
15
- return (<ModalBackground zIndex={Z_INDEX_VALUE.LOADING} key={loaderVisible ? 'visibleln' : 'hiddenln'} modalBgColor={palette.modalBgColor}>
16
- {renderLoader()}
17
- </ModalBackground>);
16
+ return (_jsx(ModalBackground, { zIndex: Z_INDEX_VALUE.LOADING, modalBgColor: palette.modalBgColor, children: renderLoader() }, loaderVisible ? 'visibleln' : 'hiddenln'));
18
17
  }
19
18
  export default LoadingNotify;
20
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/LoadingNotify/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,EAAa,WAAW,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,SAAS,aAAa,CAAC,EACrB,eAAe,GAGhB;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,OAAO,eAAe,CAAC,CAAC,CAAC,CACvB,eAAe,EAAE,CAClB,CAAC,CAAC,CAAC,CACF,CAAC,iBAAiB,CAChB,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,MAAM,EACZ,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,CAAC,eAAe,CACd,MAAM,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAC9B,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAC9C,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAEnC;MAAA,CAAC,YAAY,EAAE,CACjB;IAAA,EAAE,eAAe,CAAC,CACnB,CAAA;AACH,CAAC;AAED,eAAe,aAAa,CAAC","sourcesContent":["import { ActivityIndicator } from \"react-native\";\nimport React, { ReactNode, useCallback } from \"react\";\nimport { useLoader } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\nimport { useTheme } from \"../../context/ThemeContext\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nfunction LoadingNotify({\n loaderComponent,\n}: {\n loaderComponent?: () => ReactNode;\n}) {\n const { loaderVisible } = useLoader();\n const { palette } = useTheme();\n\n const renderLoader = useCallback(() => {\n return loaderComponent ? (\n loaderComponent()\n ) : (\n <ActivityIndicator\n size=\"large\"\n color=\"#fff\"\n />\n );\n }, [loaderComponent]);\n\n if (!loaderVisible) return null;\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.LOADING}\n key={loaderVisible ? 'visibleln' : 'hiddenln'}\n modalBgColor={palette.modalBgColor}\n >\n {renderLoader()}\n </ModalBackground>\n )\n}\n\nexport default LoadingNotify;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/LoadingNotify/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAc,EAAa,WAAW,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,SAAS,aAAa,CAAC,EACrB,eAAe,GAGhB;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,OAAO,eAAe,CAAC,CAAC,CAAC,CACvB,eAAe,EAAE,CAClB,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAChB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,MAAM,GACZ,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,eAAe,IACd,MAAM,EAAE,aAAa,CAAC,OAAO,EAE7B,YAAY,EAAE,OAAO,CAAC,YAAY,YAEjC,YAAY,EAAE,IAHV,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAI7B,CACnB,CAAA;AACH,CAAC;AAED,eAAe,aAAa,CAAC","sourcesContent":["import { ActivityIndicator } from \"react-native\";\nimport React, { ReactNode, useCallback } from \"react\";\nimport { useLoader } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\nimport { useTheme } from \"../../context/ThemeContext\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nfunction LoadingNotify({\n loaderComponent,\n}: {\n loaderComponent?: () => ReactNode;\n}) {\n const { loaderVisible } = useLoader();\n const { palette } = useTheme();\n\n const renderLoader = useCallback(() => {\n return loaderComponent ? (\n loaderComponent()\n ) : (\n <ActivityIndicator\n size=\"large\"\n color=\"#fff\"\n />\n );\n }, [loaderComponent]);\n\n if (!loaderVisible) return null;\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.LOADING}\n key={loaderVisible ? 'visibleln' : 'hiddenln'}\n modalBgColor={palette.modalBgColor}\n >\n {renderLoader()}\n </ModalBackground>\n )\n}\n\nexport default LoadingNotify;\n"]}
@@ -1,4 +1,5 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
2
3
  import { Dimensions, StatusBar, StyleSheet } from 'react-native';
3
4
  import { useSafeAreaInsets, initialWindowMetrics } from 'react-native-safe-area-context';
4
5
  import Animated, { FadeOut, useAnimatedStyle, withTiming, withDelay, useSharedValue } from 'react-native-reanimated';
@@ -74,36 +75,26 @@ function Modality({ foldableSingleScreen, modalityComponent, }) {
74
75
  };
75
76
  });
76
77
  return (!localVisible ? null :
77
- <Animated.View key={localVisible ? 'visiblemd' : 'hiddenmd'} style={[
78
+ _jsxs(Animated.View, { style: [
78
79
  styles.animatedBackground,
79
80
  { backgroundColor: palette.background.neutral },
80
81
  backgroundAnimatedStyle
81
- ]}>
82
- <StatusBar backgroundColor={modalityVisible ? palette.background.neutral : palette.background.base}/>
83
-
84
- <Animated.View exiting={FadeOut.duration(300)} style={[
85
- styles.backScreen,
86
- { backgroundColor: palette.background.layer2, width: '100%', height: windowHeight, maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%' },
87
- backScreenAnimatedStyle
88
- ]}/>
89
-
90
- <Animated.View style={[
91
- {
92
- height: windowHeight - mainScreenMargin,
93
- paddingBottom: mainScrrenPadding,
94
- backgroundColor: palette.background.base,
95
- width: '100%',
96
- maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',
97
- alignSelf: 'center',
98
- },
99
- styles.mainScreen,
100
- mainScreenAnimatedStyle
101
- ]}>
102
- <ZSView style={[styles.contents, { width: '100%' }]}>
103
- {modalityComponent}
104
- </ZSView>
105
- </Animated.View>
106
- </Animated.View>);
82
+ ], children: [_jsx(StatusBar, { backgroundColor: modalityVisible ? palette.background.neutral : palette.background.base }), _jsx(Animated.View, { exiting: FadeOut.duration(300), style: [
83
+ styles.backScreen,
84
+ { backgroundColor: palette.background.layer2, width: '100%', height: windowHeight, maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%' },
85
+ backScreenAnimatedStyle
86
+ ] }), _jsx(Animated.View, { style: [
87
+ {
88
+ height: windowHeight - mainScreenMargin,
89
+ paddingBottom: mainScrrenPadding,
90
+ backgroundColor: palette.background.base,
91
+ width: '100%',
92
+ maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',
93
+ alignSelf: 'center',
94
+ },
95
+ styles.mainScreen,
96
+ mainScreenAnimatedStyle
97
+ ], children: _jsx(ZSView, { style: [styles.contents, { width: '100%' }], children: modalityComponent }) })] }, localVisible ? 'visiblemd' : 'hiddenmd'));
107
98
  }
108
99
  const styles = StyleSheet.create({
109
100
  contents: {
@@ -112,7 +103,7 @@ const styles = StyleSheet.create({
112
103
  zIndex: Z_INDEX_VALUE.MODAL4,
113
104
  },
114
105
  animatedBackground: {
115
- ...StyleSheet.absoluteFillObject,
106
+ ...StyleSheet.absoluteFill,
116
107
  zIndex: Z_INDEX_VALUE.MODAL1,
117
108
  alignSelf: 'center',
118
109
  },
@@ -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, StatusBar, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets, initialWindowMetrics } from 'react-native-safe-area-context';\nimport Animated, { FadeOut, useAnimatedStyle, withTiming, withDelay, useSharedValue } from 'react-native-reanimated';\nimport { useModality } from '../../model/useOverlay';\nimport { MAX_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';\nimport ZSView from '../../ui/ZSView';\nimport { useTheme } from '../../context/ThemeContext';\n\nconst windowHeight = Dimensions.get('window').height;\n\nfunction Modality({\n foldableSingleScreen,\n modalityComponent,\n}: {\n modalityComponent: React.ReactNode;\n foldableSingleScreen: boolean;\n}) {\n const { palette } = useTheme();\n const [localVisible, setLocalVisible] = useState(false);\n const { modalityVisible } = useModality();\n const insets = useSafeAreaInsets();\n const backScale = useSharedValue(1);\n const backTranslateY = useSharedValue(0);\n const backBorderRadius = useSharedValue(0);\n const mainTranslateY = useSharedValue(windowHeight);\n const backgroundOpacity = useSharedValue(1);\n const overrideMargin = 10;\n const mainScreenMargin = insets.top;\n const mainScrrenPadding = (initialWindowMetrics?.insets.bottom || insets.bottom);\n\n // 애니메이션 트리거\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n \n if (modalityVisible) {\n // 모달이 열리는 애니메이션\n setLocalVisible(true);\n backScale.value = withDelay(100, withTiming(0.92, { duration: 200 }));\n backTranslateY.value = withDelay(300, withTiming(insets.top, { duration: 200 }));\n backBorderRadius.value = withDelay(100, withTiming(12, { duration: 200 }));\n mainTranslateY.value = withDelay(200, withTiming(overrideMargin + insets.top, { duration: 200 }));\n backgroundOpacity.value = withTiming(1, { duration: 500 });\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(windowHeight, { duration: 200 });\n backgroundOpacity.value = withTiming(0, { duration: 300 });\n timeoutId = setTimeout(() => {\n setLocalVisible(false);\n }, 500);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, [modalityVisible, insets.top]);\n\n // 부모 스크린\n const backScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { scaleX: backScale.value },\n { translateY: backTranslateY.value }\n ],\n borderTopLeftRadius: backBorderRadius.value,\n borderTopRightRadius: 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 return (\n !localVisible ? null :\n <Animated.View\n key={localVisible ? 'visiblemd' : 'hiddenmd'}\n style={[\n styles.animatedBackground,\n { backgroundColor: palette.background.neutral },\n backgroundAnimatedStyle\n ]}\n >\n <StatusBar backgroundColor={modalityVisible ? palette.background.neutral : palette.background.base} />\n\n <Animated.View\n exiting={FadeOut.duration(300)}\n style={[\n styles.backScreen,\n { backgroundColor: palette.background.layer2, width: '100%', height: windowHeight, maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%' },\n backScreenAnimatedStyle\n ]}\n />\n\n <Animated.View\n style={[\n {\n height: windowHeight - mainScreenMargin,\n paddingBottom: mainScrrenPadding,\n backgroundColor: palette.background.base,\n width: '100%',\n maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',\n alignSelf: 'center',\n },\n styles.mainScreen,\n mainScreenAnimatedStyle\n ]}\n >\n <ZSView style={[styles.contents, { width: '100%'}]}>\n {modalityComponent}\n </ZSView>\n </Animated.View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n contents: {\n flex: 1,\n paddingTop: 10,\n zIndex: Z_INDEX_VALUE.MODAL4,\n },\n animatedBackground: {\n ...StyleSheet.absoluteFillObject,\n zIndex: Z_INDEX_VALUE.MODAL1,\n alignSelf: 'center',\n },\n backScreen: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n alignSelf: 'center',\n zIndex: Z_INDEX_VALUE.MODAL2,\n },\n mainScreen: {\n position: 'absolute',\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n zIndex: Z_INDEX_VALUE.MODAL3,\n overflow: 'hidden',\n },\n});\n\nexport default Modality;\n"]}
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, StatusBar, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets, initialWindowMetrics } from 'react-native-safe-area-context';\nimport Animated, { FadeOut, useAnimatedStyle, withTiming, withDelay, useSharedValue } from 'react-native-reanimated';\nimport { useModality } from '../../model/useOverlay';\nimport { MAX_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';\nimport ZSView from '../../ui/ZSView';\nimport { useTheme } from '../../context/ThemeContext';\n\nconst windowHeight = Dimensions.get('window').height;\n\nfunction Modality({\n foldableSingleScreen,\n modalityComponent,\n}: {\n modalityComponent: React.ReactNode;\n foldableSingleScreen: boolean;\n}) {\n const { palette } = useTheme();\n const [localVisible, setLocalVisible] = useState(false);\n const { modalityVisible } = useModality();\n const insets = useSafeAreaInsets();\n const backScale = useSharedValue(1);\n const backTranslateY = useSharedValue(0);\n const backBorderRadius = useSharedValue(0);\n const mainTranslateY = useSharedValue(windowHeight);\n const backgroundOpacity = useSharedValue(1);\n const overrideMargin = 10;\n const mainScreenMargin = insets.top;\n const mainScrrenPadding = (initialWindowMetrics?.insets.bottom || insets.bottom);\n\n // 애니메이션 트리거\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n \n if (modalityVisible) {\n // 모달이 열리는 애니메이션\n setLocalVisible(true);\n backScale.value = withDelay(100, withTiming(0.92, { duration: 200 }));\n backTranslateY.value = withDelay(300, withTiming(insets.top, { duration: 200 }));\n backBorderRadius.value = withDelay(100, withTiming(12, { duration: 200 }));\n mainTranslateY.value = withDelay(200, withTiming(overrideMargin + insets.top, { duration: 200 }));\n backgroundOpacity.value = withTiming(1, { duration: 500 });\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(windowHeight, { duration: 200 });\n backgroundOpacity.value = withTiming(0, { duration: 300 });\n timeoutId = setTimeout(() => {\n setLocalVisible(false);\n }, 500);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, [modalityVisible, insets.top]);\n\n // 부모 스크린\n const backScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { scaleX: backScale.value },\n { translateY: backTranslateY.value }\n ],\n borderTopLeftRadius: backBorderRadius.value,\n borderTopRightRadius: 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 return (\n !localVisible ? null :\n <Animated.View\n key={localVisible ? 'visiblemd' : 'hiddenmd'}\n style={[\n styles.animatedBackground,\n { backgroundColor: palette.background.neutral },\n backgroundAnimatedStyle\n ]}\n >\n <StatusBar backgroundColor={modalityVisible ? palette.background.neutral : palette.background.base} />\n\n <Animated.View\n exiting={FadeOut.duration(300)}\n style={[\n styles.backScreen,\n { backgroundColor: palette.background.layer2, width: '100%', height: windowHeight, maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%' },\n backScreenAnimatedStyle\n ]}\n />\n\n <Animated.View\n style={[\n {\n height: windowHeight - mainScreenMargin,\n paddingBottom: mainScrrenPadding,\n backgroundColor: palette.background.base,\n width: '100%',\n maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',\n alignSelf: 'center',\n },\n styles.mainScreen,\n mainScreenAnimatedStyle\n ]}\n >\n <ZSView style={[styles.contents, { width: '100%'}]}>\n {modalityComponent}\n </ZSView>\n </Animated.View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n contents: {\n flex: 1,\n paddingTop: 10,\n zIndex: Z_INDEX_VALUE.MODAL4,\n },\n animatedBackground: {\n ...StyleSheet.absoluteFill,\n zIndex: Z_INDEX_VALUE.MODAL1,\n alignSelf: 'center',\n },\n backScreen: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n alignSelf: 'center',\n zIndex: Z_INDEX_VALUE.MODAL2,\n },\n mainScreen: {\n position: 'absolute',\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n zIndex: Z_INDEX_VALUE.MODAL3,\n overflow: 'hidden',\n },\n});\n\nexport default Modality;\n"]}
@@ -1,4 +1,5 @@
1
- import React, { useRef, useCallback } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef, useCallback } from 'react';
2
3
  import { View, StyleSheet } from 'react-native';
3
4
  import { useOverlay } from '../../model/useOverlay';
4
5
  import ZSPressable from '../../ui/ZSPressable';
@@ -14,11 +15,7 @@ const PopOverButton = ({ width, height, backgroundColor = 'transparent', popOver
14
15
  }
15
16
  });
16
17
  }, [showPopOverMenu, popOverMenuComponent]);
17
- return (<ZSPressable isAnimation={false} onPress={handlePress} style={styles.pressable}>
18
- <View ref={buttonRef} style={[styles.button, { width, height, backgroundColor }]} {...props}>
19
- {children}
20
- </View>
21
- </ZSPressable>);
18
+ return (_jsx(ZSPressable, { isAnimation: false, onPress: handlePress, style: styles.pressable, children: _jsx(View, { ref: buttonRef, style: [styles.button, { width, height, backgroundColor }], ...props, children: children }) }));
22
19
  };
23
20
  const styles = StyleSheet.create({
24
21
  pressable: {
@@ -1 +1 @@
1
- {"version":3,"file":"PopOverButton.js","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAa,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAS/C,MAAM,aAAa,GAAiC,CAAC,EACnD,KAAK,EACL,MAAM,EACN,eAAe,GAAG,aAAa,EAC/B,oBAAoB,EACpB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,CAAO,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IAEzC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACjF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,KAAK,GAAG,aAAa,CAAC;gBAClC,MAAM,GAAG,GAAG,KAAK,GAAG,cAAc,CAAC;gBAEnC,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC7E;MAAA,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,SAAS,CAAC,CACf,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAC3D,IAAI,KAAK,CAAC,CAEV;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,WAAW,CAAC,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,YAAY;KACzB;IACD,MAAM,EAAE;QACN,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC","sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport { View, ViewProps, StyleSheet } from 'react-native';\nimport { useOverlay } from '../../model/useOverlay';\nimport ZSPressable from '../../ui/ZSPressable';\n\ninterface PopOverButtonProps extends ViewProps {\n width: number;\n height: number;\n backgroundColor?: string;\n popOverMenuComponent: React.ReactNode;\n}\n\nconst PopOverButton: React.FC<PopOverButtonProps> = ({\n width,\n height,\n backgroundColor = 'transparent',\n popOverMenuComponent,\n children,\n ...props\n}) => {\n const buttonRef = useRef<View>(null);\n const { showPopOverMenu } = useOverlay();\n\n const handlePress = useCallback(() => {\n buttonRef.current?.measure((fx, fy, measuredWidth, measuredHeight, pageX, pageY) => {\n if (pageX !== undefined && pageY !== undefined) {\n const rbX = pageX + measuredWidth;\n const rbY = pageY + measuredHeight;\n\n showPopOverMenu({ px: rbX, py: rbY, component: popOverMenuComponent });\n }\n });\n }, [showPopOverMenu, popOverMenuComponent]);\n\n return (\n <ZSPressable isAnimation={false} onPress={handlePress} style={styles.pressable}>\n <View\n ref={buttonRef}\n style={[styles.button, { width, height, backgroundColor }]}\n {...props}\n >\n {children}\n </View>\n </ZSPressable>\n );\n};\n\nconst styles = StyleSheet.create({\n pressable: {\n alignItems: 'flex-start',\n },\n button: {\n justifyContent: 'center',\n },\n});\n\nexport default PopOverButton;\n"]}
1
+ {"version":3,"file":"PopOverButton.js","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverButton.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,IAAI,EAAa,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAS/C,MAAM,aAAa,GAAiC,CAAC,EACnD,KAAK,EACL,MAAM,EACN,eAAe,GAAG,aAAa,EAC/B,oBAAoB,EACpB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,CAAO,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IAEzC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACjF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,KAAK,GAAG,aAAa,CAAC;gBAClC,MAAM,GAAG,GAAG,KAAK,GAAG,cAAc,CAAC;gBAEnC,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,KAAC,WAAW,IAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,YAC5E,KAAC,IAAI,IACH,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,KACtD,KAAK,YAER,QAAQ,GACJ,GACK,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,UAAU,EAAE,YAAY;KACzB;IACD,MAAM,EAAE;QACN,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC","sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport { View, ViewProps, StyleSheet } from 'react-native';\nimport { useOverlay } from '../../model/useOverlay';\nimport ZSPressable from '../../ui/ZSPressable';\n\ninterface PopOverButtonProps extends ViewProps {\n width: number;\n height: number;\n backgroundColor?: string;\n popOverMenuComponent: React.ReactNode;\n}\n\nconst PopOverButton: React.FC<PopOverButtonProps> = ({\n width,\n height,\n backgroundColor = 'transparent',\n popOverMenuComponent,\n children,\n ...props\n}) => {\n const buttonRef = useRef<View>(null);\n const { showPopOverMenu } = useOverlay();\n\n const handlePress = useCallback(() => {\n buttonRef.current?.measure((fx, fy, measuredWidth, measuredHeight, pageX, pageY) => {\n if (pageX !== undefined && pageY !== undefined) {\n const rbX = pageX + measuredWidth;\n const rbY = pageY + measuredHeight;\n\n showPopOverMenu({ px: rbX, py: rbY, component: popOverMenuComponent });\n }\n });\n }, [showPopOverMenu, popOverMenuComponent]);\n\n return (\n <ZSPressable isAnimation={false} onPress={handlePress} style={styles.pressable}>\n <View\n ref={buttonRef}\n style={[styles.button, { width, height, backgroundColor }]}\n {...props}\n >\n {children}\n </View>\n </ZSPressable>\n );\n};\n\nconst styles = StyleSheet.create({\n pressable: {\n alignItems: 'flex-start',\n },\n button: {\n justifyContent: 'center',\n },\n});\n\nexport default PopOverButton;\n"]}
@@ -1,4 +1,5 @@
1
- import React, { useCallback, useEffect, useRef, useState } from "react";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
2
3
  import { Dimensions, Pressable } from "react-native";
3
4
  import Animated, { FadeInUp, FadeOutUp } from "react-native-reanimated";
4
5
  import { usePopOver } from "../../model/useOverlay";
@@ -60,17 +61,11 @@ function PopOverMenu({ px, py, component }) {
60
61
  if (!popOverVisible)
61
62
  return null;
62
63
  const { adjustedX, adjustedY } = getAdjustedPosition();
63
- return (<ModalBackground zIndex={Z_INDEX_VALUE.POPOVER} key={popOverVisible ? 'visiblepo' : 'hiddenpo'} modalBgColor={palette.modalBgColor} position='pop' onPress={() => setPopOverVisible(false)}>
64
- {isContentVisible && (<Animated.View entering={FadeInUp} exiting={FadeOutUp}>
65
- <Pressable style={{
66
- position: 'absolute',
67
- left: adjustedX,
68
- top: adjustedY,
69
- }} onLayout={handleLayout}>
70
- {component}
71
- </Pressable>
72
- </Animated.View>)}
73
- </ModalBackground>);
64
+ return (_jsx(ModalBackground, { zIndex: Z_INDEX_VALUE.POPOVER, modalBgColor: palette.modalBgColor, position: 'pop', onPress: () => setPopOverVisible(false), children: isContentVisible && (_jsx(Animated.View, { entering: FadeInUp, exiting: FadeOutUp, children: _jsx(Pressable, { style: {
65
+ position: 'absolute',
66
+ left: adjustedX,
67
+ top: adjustedY,
68
+ }, onLayout: handleLayout, children: component }) })) }, popOverVisible ? 'visiblepo' : 'hiddenpo'));
74
69
  }
75
70
  export default PopOverMenu;
76
71
  //# sourceMappingURL=PopOverMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PopOverMenu.js","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Dimensions, LayoutChangeEvent, Pressable } from \"react-native\";\nimport Animated, { FadeInUp, FadeOutUp } from \"react-native-reanimated\";\nimport { usePopOver } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\nimport { PopOverMenuProps } from \"../../model/types\";\nimport { useTheme } from \"../../context/ThemeContext\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nconst MINIMUM_OFFSET = 10;\nconst { width: windowWidth, height: windowHeight } = Dimensions.get('window');\n\nfunction PopOverMenu({\n px,\n py,\n component\n}: PopOverMenuProps): React.ReactElement | null {\n const { palette } = useTheme();\n const [isContentVisible, setIsContentVisible] = useState<boolean>(false);\n const [contentWidth, setContentWidth] = useState<number>(0);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const { popOverVisible, setPopOverVisible } = usePopOver();\n const timerRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (popOverVisible) {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n setIsContentVisible(true);\n }, 200);\n } else {\n setIsContentVisible(false);\n }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [popOverVisible]);\n\n const handleLayout = useCallback((event: LayoutChangeEvent): void => {\n setContentWidth(event.nativeEvent.layout.width || 0);\n setContentHeight(event.nativeEvent.layout.height || 0);\n }, []);\n\n // 화면 경계를 벗어나는지 확인하고 위치 조정\n const getAdjustedPosition = () => {\n let adjustedX = px - contentWidth;\n let adjustedY = py;\n\n // 수평 방향 조정\n if (adjustedX > windowWidth) {\n adjustedX = windowWidth - MINIMUM_OFFSET;\n }\n if (adjustedX < 0) {\n adjustedX = MINIMUM_OFFSET;\n }\n\n // 수직 방향 조정\n if (py + contentHeight > windowHeight) {\n adjustedY = py - (contentHeight * 1.5); // 위쪽으로 표시\n }\n if (adjustedY < 0) {\n adjustedY = MINIMUM_OFFSET;\n }\n\n return { adjustedX, adjustedY };\n };\n\n if (!popOverVisible) return null;\n\n const { adjustedX, adjustedY } = getAdjustedPosition();\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.POPOVER}\n key={popOverVisible ? 'visiblepo' : 'hiddenpo'}\n modalBgColor={palette.modalBgColor}\n position='pop'\n onPress={() => setPopOverVisible(false)}\n >\n {isContentVisible && (\n <Animated.View\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n <Pressable\n style={{\n position: 'absolute',\n left: adjustedX,\n top: adjustedY,\n }}\n onLayout={handleLayout}\n >\n {component}\n </Pressable>\n </Animated.View>\n )}\n </ModalBackground>\n );\n}\n\nexport default PopOverMenu;\n"]}
1
+ {"version":3,"file":"PopOverMenu.js","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Dimensions, LayoutChangeEvent, Pressable } from \"react-native\";\nimport Animated, { FadeInUp, FadeOutUp } from \"react-native-reanimated\";\nimport { usePopOver } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\nimport { PopOverMenuProps } from \"../../model/types\";\nimport { useTheme } from \"../../context/ThemeContext\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nconst MINIMUM_OFFSET = 10;\nconst { width: windowWidth, height: windowHeight } = Dimensions.get('window');\n\nfunction PopOverMenu({\n px,\n py,\n component\n}: PopOverMenuProps): React.ReactElement | null {\n const { palette } = useTheme();\n const [isContentVisible, setIsContentVisible] = useState<boolean>(false);\n const [contentWidth, setContentWidth] = useState<number>(0);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const { popOverVisible, setPopOverVisible } = usePopOver();\n const timerRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (popOverVisible) {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n setIsContentVisible(true);\n }, 200);\n } else {\n setIsContentVisible(false);\n }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [popOverVisible]);\n\n const handleLayout = useCallback((event: LayoutChangeEvent): void => {\n setContentWidth(event.nativeEvent.layout.width || 0);\n setContentHeight(event.nativeEvent.layout.height || 0);\n }, []);\n\n // 화면 경계를 벗어나는지 확인하고 위치 조정\n const getAdjustedPosition = () => {\n let adjustedX = px - contentWidth;\n let adjustedY = py;\n\n // 수평 방향 조정\n if (adjustedX > windowWidth) {\n adjustedX = windowWidth - MINIMUM_OFFSET;\n }\n if (adjustedX < 0) {\n adjustedX = MINIMUM_OFFSET;\n }\n\n // 수직 방향 조정\n if (py + contentHeight > windowHeight) {\n adjustedY = py - (contentHeight * 1.5); // 위쪽으로 표시\n }\n if (adjustedY < 0) {\n adjustedY = MINIMUM_OFFSET;\n }\n\n return { adjustedX, adjustedY };\n };\n\n if (!popOverVisible) return null;\n\n const { adjustedX, adjustedY } = getAdjustedPosition();\n\n return (\n <ModalBackground\n zIndex={Z_INDEX_VALUE.POPOVER}\n key={popOverVisible ? 'visiblepo' : 'hiddenpo'}\n modalBgColor={palette.modalBgColor}\n position='pop'\n onPress={() => setPopOverVisible(false)}\n >\n {isContentVisible && (\n <Animated.View\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n <Pressable\n style={{\n position: 'absolute',\n left: adjustedX,\n top: adjustedY,\n }}\n onLayout={handleLayout}\n >\n {component}\n </Pressable>\n </Animated.View>\n )}\n </ModalBackground>\n );\n}\n\nexport default PopOverMenu;\n"]}
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
3
3
  import { StyleSheet, View } from "react-native";
4
4
  import SnackbarItem from "./ui/SnackbarItem";
@@ -10,11 +10,9 @@ const SnackbarNotify = ({ customSnackbar }) => {
10
10
  // ----------------------------------------------------------------
11
11
  if (!snackItemStack)
12
12
  return null;
13
- return (<View style={[styles.container, { paddingTop: top }]}>
14
- {snackItemStack.map((snackItem) => {
15
- return (<SnackbarItem key={snackItem.index} customSnackbar={customSnackbar} snackItem={snackItem} hideSnackBar={hideSnackBar}/>);
16
- })}
17
- </View>);
13
+ return (_jsx(View, { style: [styles.container, { paddingTop: top }], children: snackItemStack.map((snackItem) => {
14
+ return (_jsx(SnackbarItem, { customSnackbar: customSnackbar, snackItem: snackItem, hideSnackBar: hideSnackBar }, snackItem.index));
15
+ }) }));
18
16
  };
19
17
  const styles = StyleSheet.create({
20
18
  container: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/SnackbarNotify/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,cAAc,GAAG,CAAC,EACtB,cAAc,EAGf,EAAE,EAAE;IACH,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;IACvD,MAAM,EAAE,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEpC,mEAAmE;IAEnE,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CACnD;MAAA,CACE,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/B,OAAO,CACL,CAAC,YAAY,CACX,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CACrB,cAAc,CAAC,CAAC,cAAc,CAAC,CAC/B,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,YAAY,CAAC,CAAC,YAAY,CAAC,EAC3B,CACH,CAAC;QACJ,CAAC,CACH,CACF;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,MAAM,EAAE,aAAa,CAAC,QAAQ;QAC9B,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,UAAU;KACrB;CACF,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC","sourcesContent":["import React, { ReactNode } from \"react\";\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StyleSheet, View } from \"react-native\";\nimport { CustomSnackbarProps } from \"../../model/types\";\nimport SnackbarItem from \"./ui/SnackbarItem\";\nimport { useSnackbar } from \"../../model/useOverlay\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nconst SnackbarNotify = ({\n customSnackbar\n}: {\n customSnackbar?: (props: CustomSnackbarProps) => ReactNode\n}) => {\n const { snackItemStack, hideSnackBar } = useSnackbar();\n const { top } = useSafeAreaInsets();\n\n // ----------------------------------------------------------------\n\n if (!snackItemStack) return null;\n\n return (\n <View style={[styles.container, { paddingTop: top }]}>\n {\n snackItemStack.map((snackItem) => {\n return (\n <SnackbarItem\n key={snackItem.index}\n customSnackbar={customSnackbar}\n snackItem={snackItem}\n hideSnackBar={hideSnackBar}\n />\n );\n })\n }\n </View>\n )\n};\n\nconst styles = StyleSheet.create({\n container: {\n zIndex: Z_INDEX_VALUE.SNACKBAR,\n width: '100%',\n alignItems: 'center',\n position: 'absolute',\n },\n});\n\nexport default SnackbarNotify;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/SnackbarNotify/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,cAAc,GAAG,CAAC,EACtB,cAAc,EAGf,EAAE,EAAE;IACH,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;IACvD,MAAM,EAAE,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEpC,mEAAmE;IAEnE,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,YAEhD,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC/B,OAAO,CACL,KAAC,YAAY,IAEX,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,IAHrB,SAAS,CAAC,KAAK,CAIpB,CACH,CAAC;QACJ,CAAC,CAAC,GAEC,CACR,CAAA;AACH,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,MAAM,EAAE,aAAa,CAAC,QAAQ;QAC9B,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,UAAU;KACrB;CACF,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC","sourcesContent":["import React, { ReactNode } from \"react\";\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StyleSheet, View } from \"react-native\";\nimport { CustomSnackbarProps } from \"../../model/types\";\nimport SnackbarItem from \"./ui/SnackbarItem\";\nimport { useSnackbar } from \"../../model/useOverlay\";\nimport { Z_INDEX_VALUE } from \"../../model/utils\";\n\nconst SnackbarNotify = ({\n customSnackbar\n}: {\n customSnackbar?: (props: CustomSnackbarProps) => ReactNode\n}) => {\n const { snackItemStack, hideSnackBar } = useSnackbar();\n const { top } = useSafeAreaInsets();\n\n // ----------------------------------------------------------------\n\n if (!snackItemStack) return null;\n\n return (\n <View style={[styles.container, { paddingTop: top }]}>\n {\n snackItemStack.map((snackItem) => {\n return (\n <SnackbarItem\n key={snackItem.index}\n customSnackbar={customSnackbar}\n snackItem={snackItem}\n hideSnackBar={hideSnackBar}\n />\n );\n })\n }\n </View>\n )\n};\n\nconst styles = StyleSheet.create({\n container: {\n zIndex: Z_INDEX_VALUE.SNACKBAR,\n width: '100%',\n alignItems: 'center',\n position: 'absolute',\n },\n});\n\nexport default SnackbarNotify;\n"]}
@@ -1,4 +1,5 @@
1
- import React, { useEffect, useCallback } from "react";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useCallback } from "react";
2
3
  import { StyleSheet, TouchableOpacity } from "react-native";
3
4
  import Animated, { FadeInUp, FadeOutUp } from "react-native-reanimated";
4
5
  import ViewAtom from "../../../ui/atoms/ViewAtom";
@@ -14,18 +15,10 @@ const Snackbar = ({ customSnackbar, snackItem, hideSnackBar, }) => {
14
15
  const closeTimeout = setTimeout(closeSnackbar, snackbarDuration);
15
16
  return () => clearTimeout(closeTimeout);
16
17
  }, []);
17
- return (<Animated.View style={[styles.snackbarWrapper]} entering={FadeInUp} exiting={FadeOutUp}>
18
- <TouchableOpacity style={[styles.container]} activeOpacity={1} onPress={closeSnackbar}>
19
- {customSnackbar ? (customSnackbar({ snackType: type, snackMessage: message })) : (<ViewAtom style={[
20
- styles.snackBar,
21
- { backgroundColor: type === "error" ? palette.background.danger : palette.background.success },
22
- ]}>
23
- <ViewAtom style={styles.messageContainer}>
24
- <ZSText>{message}</ZSText>
25
- </ViewAtom>
26
- </ViewAtom>)}
27
- </TouchableOpacity>
28
- </Animated.View>);
18
+ return (_jsx(Animated.View, { style: [styles.snackbarWrapper], entering: FadeInUp, exiting: FadeOutUp, children: _jsx(TouchableOpacity, { style: [styles.container], activeOpacity: 1, onPress: closeSnackbar, children: customSnackbar ? (customSnackbar({ snackType: type, snackMessage: message })) : (_jsx(ViewAtom, { style: [
19
+ styles.snackBar,
20
+ { backgroundColor: type === "error" ? palette.background.danger : palette.background.success },
21
+ ], children: _jsx(ViewAtom, { style: styles.messageContainer, children: _jsx(ZSText, { children: message }) }) })) }) }));
29
22
  };
30
23
  const styles = StyleSheet.create({
31
24
  container: {
@@ -1 +1 @@
1
- {"version":3,"file":"SnackbarItem.js","sourceRoot":"","sources":["../../../../src/overlay/SnackbarNotify/ui/SnackbarItem.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactNode, useEffect, useCallback } from \"react\";\nimport { StyleSheet, TouchableOpacity } from \"react-native\";\nimport Animated, { FadeInUp, FadeOutUp } from \"react-native-reanimated\";\nimport { CustomSnackbarProps, SnackItem } from \"../../../model/types\";\nimport ViewAtom from \"../../../ui/atoms/ViewAtom\";\nimport { useTheme } from \"../../../context/ThemeContext\";\nimport ZSText from \"../../../ui/ZSText\";\n\nconst Snackbar = ({\n customSnackbar,\n snackItem,\n hideSnackBar,\n}: {\n customSnackbar?: (props: CustomSnackbarProps) => ReactNode;\n snackItem: SnackItem;\n hideSnackBar: (index: number) => void;\n}) => {\n const { type, message, snackbarDuration } = snackItem;\n const { palette } = useTheme();\n\n const closeSnackbar = useCallback(() => {\n hideSnackBar(snackItem.index);\n }, [hideSnackBar, snackItem.index]);\n\n useEffect(() => {\n const closeTimeout = setTimeout(closeSnackbar, snackbarDuration);\n return () => clearTimeout(closeTimeout);\n }, []);\n\n return (\n <Animated.View\n style={[styles.snackbarWrapper]}\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n <TouchableOpacity\n style={[styles.container]}\n activeOpacity={1}\n onPress={closeSnackbar}\n >\n {customSnackbar ? (\n customSnackbar({ snackType: type, snackMessage: message })\n ) : (\n <ViewAtom\n style={[\n styles.snackBar,\n { backgroundColor: type === \"error\" ? palette.background.danger : palette.background.success },\n ]}\n >\n <ViewAtom style={styles.messageContainer}>\n <ZSText>{message}</ZSText>\n </ViewAtom>\n </ViewAtom>\n )}\n </TouchableOpacity>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 16,\n width: \"100%\",\n },\n snackbarWrapper: {\n width: \"96%\",\n marginTop: 8,\n },\n snackBar: {\n borderRadius: 16,\n paddingHorizontal: 10,\n paddingVertical: 18,\n flexDirection: \"row\",\n alignItems: \"center\",\n width: \"100%\",\n },\n messageContainer: {\n flex: 1,\n flexDirection: \"column\",\n marginLeft: 10,\n },\n});\n\nexport default Snackbar;\n"]}
1
+ {"version":3,"file":"SnackbarItem.js","sourceRoot":"","sources":["../../../../src/overlay/SnackbarNotify/ui/SnackbarItem.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAa,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,MAAM,QAAQ,GAAG,CAAC,EAChB,cAAc,EACd,SAAS,EACT,YAAY,GAKb,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACjE,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IACZ,KAAK,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,EAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,SAAS,YAElB,KAAC,gBAAgB,IACf,KAAK,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EACzB,aAAa,EAAE,CAAC,EAChB,OAAO,EAAE,aAAa,YAErB,cAAc,CAAC,CAAC,CAAC,CAChB,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAC3D,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IACP,KAAK,EAAE;oBACL,MAAM,CAAC,QAAQ;oBACf,EAAE,eAAe,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;iBAC/F,YAED,KAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,YACtC,KAAC,MAAM,cAAE,OAAO,GAAU,GACjB,GACF,CACZ,GACgB,GACL,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,MAAM;KACd;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,CAAC;KACb;IACD,QAAQ,EAAE;QACR,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,MAAM;KACd;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,QAAQ;QACvB,UAAU,EAAE,EAAE;KACf;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import React, { ReactNode, useEffect, useCallback } from \"react\";\nimport { StyleSheet, TouchableOpacity } from \"react-native\";\nimport Animated, { FadeInUp, FadeOutUp } from \"react-native-reanimated\";\nimport { CustomSnackbarProps, SnackItem } from \"../../../model/types\";\nimport ViewAtom from \"../../../ui/atoms/ViewAtom\";\nimport { useTheme } from \"../../../context/ThemeContext\";\nimport ZSText from \"../../../ui/ZSText\";\n\nconst Snackbar = ({\n customSnackbar,\n snackItem,\n hideSnackBar,\n}: {\n customSnackbar?: (props: CustomSnackbarProps) => ReactNode;\n snackItem: SnackItem;\n hideSnackBar: (index: number) => void;\n}) => {\n const { type, message, snackbarDuration } = snackItem;\n const { palette } = useTheme();\n\n const closeSnackbar = useCallback(() => {\n hideSnackBar(snackItem.index);\n }, [hideSnackBar, snackItem.index]);\n\n useEffect(() => {\n const closeTimeout = setTimeout(closeSnackbar, snackbarDuration);\n return () => clearTimeout(closeTimeout);\n }, []);\n\n return (\n <Animated.View\n style={[styles.snackbarWrapper]}\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n <TouchableOpacity\n style={[styles.container]}\n activeOpacity={1}\n onPress={closeSnackbar}\n >\n {customSnackbar ? (\n customSnackbar({ snackType: type, snackMessage: message })\n ) : (\n <ViewAtom\n style={[\n styles.snackBar,\n { backgroundColor: type === \"error\" ? palette.background.danger : palette.background.success },\n ]}\n >\n <ViewAtom style={styles.messageContainer}>\n <ZSText>{message}</ZSText>\n </ViewAtom>\n </ViewAtom>\n )}\n </TouchableOpacity>\n </Animated.View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 16,\n width: \"100%\",\n },\n snackbarWrapper: {\n width: \"96%\",\n marginTop: 8,\n },\n snackBar: {\n borderRadius: 16,\n paddingHorizontal: 10,\n paddingVertical: 18,\n flexDirection: \"row\",\n alignItems: \"center\",\n width: \"100%\",\n },\n messageContainer: {\n flex: 1,\n flexDirection: \"column\",\n marginLeft: 10,\n },\n});\n\nexport default Snackbar;\n"]}
@@ -1,4 +1,5 @@
1
- import React, { createContext, useContext, useState, useCallback, useEffect } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useContext, useState, useCallback, useEffect } from 'react';
2
3
  import Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';
3
4
  import { Z_INDEX_VALUE } from '../../model/utils';
4
5
  const PortalContext = createContext(null);
@@ -26,12 +27,7 @@ export const PortalProvider = ({ children }) => {
26
27
  return newMap;
27
28
  });
28
29
  }, []);
29
- return (<PortalContext.Provider value={{ registerPortal, unregisterPortal }}>
30
- {children}
31
- {Array.from(portals.entries()).map(([id, element]) => (<Animated.View entering={FadeInDown} exiting={FadeOutDown} key={id} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, pointerEvents: 'box-none', zIndex: Z_INDEX_VALUE.ABOVE_KEYBOARD }}>
32
- {element}
33
- </Animated.View>))}
34
- </PortalContext.Provider>);
30
+ return (_jsxs(PortalContext.Provider, { value: { registerPortal, unregisterPortal }, children: [children, Array.from(portals.entries()).map(([id, element]) => (_jsx(Animated.View, { entering: FadeInDown, exiting: FadeOutDown, style: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, pointerEvents: 'box-none', zIndex: Z_INDEX_VALUE.ABOVE_KEYBOARD }, children: element }, id)))] }));
35
31
  };
36
32
  export const ZSPortal = ({ children, isFocused = true }) => {
37
33
  const context = useContext(PortalContext);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/ZSPortal/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useState, useCallback, ReactNode, useEffect } from 'react';\nimport Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';\nimport { Z_INDEX_VALUE } from '../../model/utils';\n\ninterface PortalContextType {\n registerPortal: (id: string, element: ReactNode) => void;\n unregisterPortal: (id: string) => void;\n}\n\nconst PortalContext = createContext<PortalContextType | null>(null);\n\ninterface PortalProviderProps {\n children: ReactNode;\n}\n\nexport const PortalProvider: React.FC<PortalProviderProps> = ({ children }) => {\n const [portals, setPortals] = useState<Map<string, ReactNode>>(new Map());\n\n const registerPortal = useCallback((id: string, element: ReactNode) => {\n setPortals(prev => {\n // 동일한 요소가 이미 등록되어 있다면 업데이트하지 않음\n if (prev.get(id) === element) {\n return prev;\n }\n const newMap = new Map(prev);\n newMap.set(id, element);\n return newMap;\n });\n }, []);\n\n const unregisterPortal = useCallback((id: string) => {\n setPortals(prev => {\n // 해당 ID가 존재하지 않으면 상태를 변경하지 않음\n if (!prev.has(id)) {\n return prev;\n }\n const newMap = new Map(prev);\n newMap.delete(id);\n return newMap;\n });\n }, []);\n\n return (\n <PortalContext.Provider value={{ registerPortal, unregisterPortal }}>\n {children}\n {Array.from(portals.entries()).map(([id, element]) => (\n <Animated.View entering={FadeInDown} exiting={FadeOutDown} key={id} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, pointerEvents: 'box-none', zIndex: Z_INDEX_VALUE.ABOVE_KEYBOARD }}>\n {element}\n </Animated.View>\n ))}\n </PortalContext.Provider>\n );\n};\n\n// ------------------------------------------------------------------------------------------------\n\ninterface PortalProps {\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport const ZSPortal: React.FC<PortalProps> = ({ children, isFocused = true }) => {\n const context = useContext(PortalContext);\n const [portalId] = useState(() => `portal_${Date.now()}_${Math.random()}`);\n\n useEffect(() => {\n if (!context) return;\n if (isFocused) {\n context.registerPortal(portalId, children);\n } else {\n context.unregisterPortal(portalId);\n }\n }, [isFocused, children]);\n\n useEffect(() => {\n return () => {\n if (!context) return;\n context.unregisterPortal(portalId);\n };\n }, []);\n\n return null;\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/ZSPortal/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useState, useCallback, ReactNode, useEffect } from 'react';\nimport Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';\nimport { Z_INDEX_VALUE } from '../../model/utils';\n\ninterface PortalContextType {\n registerPortal: (id: string, element: ReactNode) => void;\n unregisterPortal: (id: string) => void;\n}\n\nconst PortalContext = createContext<PortalContextType | null>(null);\n\ninterface PortalProviderProps {\n children: ReactNode;\n}\n\nexport const PortalProvider: React.FC<PortalProviderProps> = ({ children }) => {\n const [portals, setPortals] = useState<Map<string, ReactNode>>(new Map());\n\n const registerPortal = useCallback((id: string, element: ReactNode) => {\n setPortals(prev => {\n // 동일한 요소가 이미 등록되어 있다면 업데이트하지 않음\n if (prev.get(id) === element) {\n return prev;\n }\n const newMap = new Map(prev);\n newMap.set(id, element);\n return newMap;\n });\n }, []);\n\n const unregisterPortal = useCallback((id: string) => {\n setPortals(prev => {\n // 해당 ID가 존재하지 않으면 상태를 변경하지 않음\n if (!prev.has(id)) {\n return prev;\n }\n const newMap = new Map(prev);\n newMap.delete(id);\n return newMap;\n });\n }, []);\n\n return (\n <PortalContext.Provider value={{ registerPortal, unregisterPortal }}>\n {children}\n {Array.from(portals.entries()).map(([id, element]) => (\n <Animated.View entering={FadeInDown} exiting={FadeOutDown} key={id} style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, pointerEvents: 'box-none', zIndex: Z_INDEX_VALUE.ABOVE_KEYBOARD }}>\n {element}\n </Animated.View>\n ))}\n </PortalContext.Provider>\n );\n};\n\n// ------------------------------------------------------------------------------------------------\n\ninterface PortalProps {\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport const ZSPortal: React.FC<PortalProps> = ({ children, isFocused = true }) => {\n const context = useContext(PortalContext);\n const [portalId] = useState(() => `portal_${Date.now()}_${Math.random()}`);\n\n useEffect(() => {\n if (!context) return;\n if (isFocused) {\n context.registerPortal(portalId, children);\n } else {\n context.unregisterPortal(portalId);\n }\n }, [isFocused, children]);\n\n useEffect(() => {\n return () => {\n if (!context) return;\n context.unregisterPortal(portalId);\n };\n }, []);\n\n return null;\n};\n"]}
@@ -1,25 +1,21 @@
1
- import React, { useMemo } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
2
3
  import { Pressable, StyleSheet } from 'react-native';
3
4
  import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
4
5
  import { Z_INDEX_VALUE } from '../../model/utils';
5
6
  function ModalBackground({ modalBgColor, position = 'center', children, onPress, zIndex = Z_INDEX_VALUE.DEFAULT }) {
6
7
  const styles = useMemo(() => createStyles(modalBgColor), [modalBgColor]);
7
- return (<Animated.View style={[styles.modalBg, { zIndex }, position === 'center' && { justifyContent: 'center', alignItems: 'center' }, position === 'left' && { justifyContent: 'flex-start', alignItems: 'center' }, position === 'right' && { justifyContent: 'flex-end', alignItems: 'center' }]} entering={FadeIn.duration(50)} exiting={FadeOut.duration(50)}>
8
- <Pressable style={styles.fullScreen} onPress={onPress ?? (() => { })}>
9
- </Pressable>
10
-
11
- {children}
12
- </Animated.View>);
8
+ return (_jsxs(Animated.View, { style: [styles.modalBg, { zIndex }, position === 'center' && { justifyContent: 'center', alignItems: 'center' }, position === 'left' && { justifyContent: 'flex-start', alignItems: 'center' }, position === 'right' && { justifyContent: 'flex-end', alignItems: 'center' }], entering: FadeIn.duration(50), exiting: FadeOut.duration(50), children: [_jsx(Pressable, { style: styles.fullScreen, onPress: onPress ?? (() => { }) }), children] }));
13
9
  }
14
10
  const createStyles = (modalBgColor) => StyleSheet.create({
15
11
  modalBg: {
16
12
  backgroundColor: modalBgColor,
17
- ...StyleSheet.absoluteFillObject,
13
+ ...StyleSheet.absoluteFill,
18
14
  },
19
15
  fullScreen: {
20
16
  width: '100%',
21
17
  height: '100%',
22
- ...StyleSheet.absoluteFillObject,
18
+ ...StyleSheet.absoluteFill,
23
19
  },
24
20
  });
25
21
  export default ModalBackground;
@@ -1 +1 @@
1
- {"version":3,"file":"ModalBackground.js","sourceRoot":"","sources":["../../../src/overlay/ui/ModalBackground.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUlD,SAAS,eAAe,CAAC,EAAE,YAAY,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,EAAwB;IACrI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzE,OAAO,CACL,CAAC,QAAQ,CAAC,IAAI,CACZ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,KAAK,QAAQ,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,KAAK,MAAM,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,KAAK,OAAO,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC9Q,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAE9B;MAAA,CAAC,SAAS,CACR,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CACzB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAElC;MAAA,EAAE,SAAS,CAEX;;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAE,EAAE,CAC5C,UAAU,CAAC,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,eAAe,EAAE,YAAY;QAC7B,GAAG,UAAU,CAAC,kBAAkB;KACjC;IACD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,GAAG,UAAU,CAAC,kBAAkB;KACjC;CACF,CAAC,CAAC;AAEL,eAAe,eAAe,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport { Pressable, StyleSheet } from 'react-native';\nimport Animated, { FadeIn, FadeOut } from 'react-native-reanimated';\nimport { Z_INDEX_VALUE } from '../../model/utils';\n\ninterface ModalBackgroundProps {\n zIndex?: number;\n modalBgColor: string;\n position?: 'center' | 'left' | 'right' | 'pop'; // TODO: 'left' | 'right' 미구현\n children: React.ReactNode;\n onPress?: () => void;\n}\n\nfunction ModalBackground({ modalBgColor, position = 'center', children, onPress, zIndex = Z_INDEX_VALUE.DEFAULT }: ModalBackgroundProps) {\n const styles = useMemo(() => createStyles(modalBgColor), [modalBgColor]);\n\n return (\n <Animated.View\n style={[styles.modalBg, { zIndex }, position === 'center' && { justifyContent: 'center', alignItems: 'center' }, position === 'left' && { justifyContent: 'flex-start', alignItems: 'center' }, position === 'right' && { justifyContent: 'flex-end', alignItems: 'center' }]}\n entering={FadeIn.duration(50)}\n exiting={FadeOut.duration(50)}\n >\n <Pressable\n style={styles.fullScreen}\n onPress={onPress ?? (() => { })}\n >\n </Pressable>\n\n {children}\n </Animated.View>\n );\n}\n\nconst createStyles = (modalBgColor: string) =>\n StyleSheet.create({\n modalBg: {\n backgroundColor: modalBgColor,\n ...StyleSheet.absoluteFillObject,\n },\n fullScreen: {\n width: '100%',\n height: '100%',\n ...StyleSheet.absoluteFillObject,\n },\n });\n\nexport default ModalBackground;\n"]}
1
+ {"version":3,"file":"ModalBackground.js","sourceRoot":"","sources":["../../../src/overlay/ui/ModalBackground.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUlD,SAAS,eAAe,CAAC,EAAE,YAAY,EAAE,QAAQ,GAAG,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,EAAwB;IACrI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzE,OAAO,CACL,MAAC,QAAQ,CAAC,IAAI,IACZ,KAAK,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,KAAK,QAAQ,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,KAAK,MAAM,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,KAAK,OAAO,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAC7Q,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAC7B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,aAE7B,KAAC,SAAS,IACR,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAErB,EAEX,QAAQ,IACK,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAE,EAAE,CAC5C,UAAU,CAAC,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,eAAe,EAAE,YAAY;QAC7B,GAAG,UAAU,CAAC,YAAY;KAC3B;IACD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,GAAG,UAAU,CAAC,YAAY;KAC3B;CACF,CAAC,CAAC;AAEL,eAAe,eAAe,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport { Pressable, StyleSheet } from 'react-native';\nimport Animated, { FadeIn, FadeOut } from 'react-native-reanimated';\nimport { Z_INDEX_VALUE } from '../../model/utils';\n\ninterface ModalBackgroundProps {\n zIndex?: number;\n modalBgColor: string;\n position?: 'center' | 'left' | 'right' | 'pop'; // TODO: 'left' | 'right' 미구현\n children: React.ReactNode;\n onPress?: () => void;\n}\n\nfunction ModalBackground({ modalBgColor, position = 'center', children, onPress, zIndex = Z_INDEX_VALUE.DEFAULT }: ModalBackgroundProps) {\n const styles = useMemo(() => createStyles(modalBgColor), [modalBgColor]);\n\n return (\n <Animated.View\n style={[styles.modalBg, { zIndex }, position === 'center' && { justifyContent: 'center', alignItems: 'center' }, position === 'left' && { justifyContent: 'flex-start', alignItems: 'center' }, position === 'right' && { justifyContent: 'flex-end', alignItems: 'center' }]}\n entering={FadeIn.duration(50)}\n exiting={FadeOut.duration(50)}\n >\n <Pressable\n style={styles.fullScreen}\n onPress={onPress ?? (() => { })}\n >\n </Pressable>\n\n {children}\n </Animated.View>\n );\n}\n\nconst createStyles = (modalBgColor: string) =>\n StyleSheet.create({\n modalBg: {\n backgroundColor: modalBgColor,\n ...StyleSheet.absoluteFill,\n },\n fullScreen: {\n width: '100%',\n height: '100%',\n ...StyleSheet.absoluteFill,\n },\n });\n\nexport default ModalBackground;\n"]}