@0610studio/zs-ui 0.0.35 → 0.0.37

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 (121) hide show
  1. package/build/index.d.ts +6 -6
  2. package/build/index.d.ts.map +1 -1
  3. package/build/index.js +4 -4
  4. package/build/index.js.map +1 -1
  5. package/build/model/index.d.ts +2 -2
  6. package/build/model/index.d.ts.map +1 -1
  7. package/build/model/index.js +2 -2
  8. package/build/model/index.js.map +1 -1
  9. package/build/model/types.d.ts +11 -5
  10. package/build/model/types.d.ts.map +1 -1
  11. package/build/model/types.js.map +1 -1
  12. package/build/model/useOverlay.d.ts +5 -0
  13. package/build/model/useOverlay.d.ts.map +1 -0
  14. package/build/model/useOverlay.js +11 -0
  15. package/build/model/useOverlay.js.map +1 -0
  16. package/build/model/useOverlayProvider.d.ts +3 -0
  17. package/build/model/useOverlayProvider.d.ts.map +1 -0
  18. package/build/model/{useNotifyProvider.js → useOverlayProvider.js} +32 -14
  19. package/build/model/useOverlayProvider.js.map +1 -0
  20. package/build/overlay/AlertOverlay/index.d.ts +5 -0
  21. package/build/overlay/AlertOverlay/index.d.ts.map +1 -0
  22. package/build/{notify/AlertNotify → overlay/AlertOverlay}/index.js +4 -4
  23. package/build/overlay/AlertOverlay/index.js.map +1 -0
  24. package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/index.d.ts +2 -2
  25. package/build/overlay/BottomSheetOverlay/index.d.ts.map +1 -0
  26. package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/index.js +4 -4
  27. package/build/overlay/BottomSheetOverlay/index.js.map +1 -0
  28. package/build/{notify/BottomSheetNotify/model/useBottomSheetNotify.d.ts → overlay/BottomSheetOverlay/model/useBottomSheetOverlay.d.ts} +3 -3
  29. package/build/overlay/BottomSheetOverlay/model/useBottomSheetOverlay.d.ts.map +1 -0
  30. package/build/{notify/BottomSheetNotify/model/useBottomSheetNotify.js → overlay/BottomSheetOverlay/model/useBottomSheetOverlay.js} +3 -3
  31. package/build/overlay/BottomSheetOverlay/model/useBottomSheetOverlay.js.map +1 -0
  32. package/build/overlay/BottomSheetOverlay/types/index.d.ts +4 -0
  33. package/build/overlay/BottomSheetOverlay/types/index.d.ts.map +1 -0
  34. package/build/overlay/BottomSheetOverlay/types/index.js.map +1 -0
  35. package/build/overlay/BottomSheetOverlay/ui/BSTextInput/index.d.ts.map +1 -0
  36. package/build/overlay/BottomSheetOverlay/ui/BSTextInput/index.js.map +1 -0
  37. package/build/overlay/BottomSheetOverlay/ui/ContentsComponent/index.d.ts.map +1 -0
  38. package/build/overlay/BottomSheetOverlay/ui/ContentsComponent/index.js.map +1 -0
  39. package/build/overlay/LoadingNotify/index.d.ts.map +1 -0
  40. package/build/{notify → overlay}/LoadingNotify/index.js +2 -2
  41. package/build/overlay/LoadingNotify/index.js.map +1 -0
  42. package/build/overlay/Modality/index.d.ts +7 -0
  43. package/build/overlay/Modality/index.d.ts.map +1 -0
  44. package/build/overlay/Modality/index.js +127 -0
  45. package/build/overlay/Modality/index.js.map +1 -0
  46. package/build/overlay/PopOver/PopOverButton.d.ts.map +1 -0
  47. package/build/{notify → overlay}/PopOver/PopOverButton.js +2 -2
  48. package/build/overlay/PopOver/PopOverButton.js.map +1 -0
  49. package/build/overlay/PopOver/PopOverMenu.d.ts.map +1 -0
  50. package/build/{notify → overlay}/PopOver/PopOverMenu.js +2 -2
  51. package/build/overlay/PopOver/PopOverMenu.js.map +1 -0
  52. package/build/overlay/SnackbarNotify/index.d.ts.map +1 -0
  53. package/build/{notify → overlay}/SnackbarNotify/index.js +2 -2
  54. package/build/overlay/SnackbarNotify/index.js.map +1 -0
  55. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts.map +1 -0
  56. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js.map +1 -0
  57. package/build/overlay/index.d.ts +11 -0
  58. package/build/overlay/index.d.ts.map +1 -0
  59. package/build/overlay/index.js +11 -0
  60. package/build/overlay/index.js.map +1 -0
  61. package/build/overlay/ui/ModalBackground.d.ts.map +1 -0
  62. package/build/{notify → overlay}/ui/ModalBackground.js +0 -2
  63. package/build/overlay/ui/ModalBackground.js.map +1 -0
  64. package/build/ui/ZSBottomButton/index.d.ts.map +1 -1
  65. package/build/ui/ZSBottomButton/index.js +2 -3
  66. package/build/ui/ZSBottomButton/index.js.map +1 -1
  67. package/build/ui/ZSContainer/index.js +1 -1
  68. package/build/ui/ZSContainer/index.js.map +1 -1
  69. package/build/ui/ZSTextField/index.d.ts.map +1 -1
  70. package/build/ui/ZSTextField/index.js +1 -1
  71. package/build/ui/ZSTextField/index.js.map +1 -1
  72. package/package.json +1 -1
  73. package/build/model/useNotify.d.ts +0 -5
  74. package/build/model/useNotify.d.ts.map +0 -1
  75. package/build/model/useNotify.js +0 -11
  76. package/build/model/useNotify.js.map +0 -1
  77. package/build/model/useNotifyProvider.d.ts +0 -3
  78. package/build/model/useNotifyProvider.d.ts.map +0 -1
  79. package/build/model/useNotifyProvider.js.map +0 -1
  80. package/build/notify/AlertNotify/index.d.ts +0 -5
  81. package/build/notify/AlertNotify/index.d.ts.map +0 -1
  82. package/build/notify/AlertNotify/index.js.map +0 -1
  83. package/build/notify/BottomSheetNotify/index.d.ts.map +0 -1
  84. package/build/notify/BottomSheetNotify/index.js.map +0 -1
  85. package/build/notify/BottomSheetNotify/model/useBottomSheetNotify.d.ts.map +0 -1
  86. package/build/notify/BottomSheetNotify/model/useBottomSheetNotify.js.map +0 -1
  87. package/build/notify/BottomSheetNotify/types/index.d.ts +0 -4
  88. package/build/notify/BottomSheetNotify/types/index.d.ts.map +0 -1
  89. package/build/notify/BottomSheetNotify/types/index.js.map +0 -1
  90. package/build/notify/BottomSheetNotify/ui/BSTextInput/index.d.ts.map +0 -1
  91. package/build/notify/BottomSheetNotify/ui/BSTextInput/index.js.map +0 -1
  92. package/build/notify/BottomSheetNotify/ui/ContentsComponent/index.d.ts.map +0 -1
  93. package/build/notify/BottomSheetNotify/ui/ContentsComponent/index.js.map +0 -1
  94. package/build/notify/LoadingNotify/index.d.ts.map +0 -1
  95. package/build/notify/LoadingNotify/index.js.map +0 -1
  96. package/build/notify/PopOver/PopOverButton.d.ts.map +0 -1
  97. package/build/notify/PopOver/PopOverButton.js.map +0 -1
  98. package/build/notify/PopOver/PopOverMenu.d.ts.map +0 -1
  99. package/build/notify/PopOver/PopOverMenu.js.map +0 -1
  100. package/build/notify/SnackbarNotify/index.d.ts.map +0 -1
  101. package/build/notify/SnackbarNotify/index.js.map +0 -1
  102. package/build/notify/SnackbarNotify/ui/SnackbarItem.d.ts.map +0 -1
  103. package/build/notify/SnackbarNotify/ui/SnackbarItem.js.map +0 -1
  104. package/build/notify/index.d.ts +0 -11
  105. package/build/notify/index.d.ts.map +0 -1
  106. package/build/notify/index.js +0 -11
  107. package/build/notify/index.js.map +0 -1
  108. package/build/notify/ui/ModalBackground.d.ts.map +0 -1
  109. package/build/notify/ui/ModalBackground.js.map +0 -1
  110. /package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/types/index.js +0 -0
  111. /package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/ui/BSTextInput/index.d.ts +0 -0
  112. /package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/ui/BSTextInput/index.js +0 -0
  113. /package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/ui/ContentsComponent/index.d.ts +0 -0
  114. /package/build/{notify/BottomSheetNotify → overlay/BottomSheetOverlay}/ui/ContentsComponent/index.js +0 -0
  115. /package/build/{notify → overlay}/LoadingNotify/index.d.ts +0 -0
  116. /package/build/{notify → overlay}/PopOver/PopOverButton.d.ts +0 -0
  117. /package/build/{notify → overlay}/PopOver/PopOverMenu.d.ts +0 -0
  118. /package/build/{notify → overlay}/SnackbarNotify/index.d.ts +0 -0
  119. /package/build/{notify → overlay}/SnackbarNotify/ui/SnackbarItem.d.ts +0 -0
  120. /package/build/{notify → overlay}/SnackbarNotify/ui/SnackbarItem.js +0 -0
  121. /package/build/{notify → overlay}/ui/ModalBackground.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBottomSheetOverlay.js","sourceRoot":"","sources":["../../../../src/overlay/BottomSheetOverlay/model/useBottomSheetOverlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { BackHandler, Dimensions, Keyboard, Platform, useWindowDimensions } from 'react-native';\nimport { Gesture, GestureType } from 'react-native-gesture-handler';\nimport { useSharedValue, useAnimatedStyle, withTiming, Easing, runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nconst DIMENSIONS_HEIGHT = Dimensions.get('window').height;\nconst INPUT_HEIGHT_CORRECTION = 40; // 인풋 높이 보정\nconst NATURAL_GESTURE_TOP = -17; // 자연스러운 제스쳐를 위해 상단 여유 공간 추가\nconst NATURAL_GESTURE_X = 8;\nconst DEFAULT_BG_OPACITY = 40;\nconst HANDLE_HEIGHT = 35;\n\nconst timingConfig100 = {\n duration: 100,\n easing: Easing.inOut(Easing.quad),\n};\n\nconst timingConfig200 = {\n duration: 200,\n easing: Easing.inOut(Easing.quad),\n};\n\ninterface Props {\n bottomSheetPadding: number;\n closeOffset: number;\n contentsGestureEnable: boolean;\n isHandleVisible: boolean;\n bottomSheetMarginX: number;\n}\n\nfunction useBottomSheetOverlay({\n bottomSheetPadding,\n closeOffset,\n contentsGestureEnable,\n bottomSheetMarginX,\n isHandleVisible,\n}: Props) {\n const handleHeight = isHandleVisible ? HANDLE_HEIGHT : 0;\n const { width: windowWidth } = useWindowDimensions();\n const panGestureRef = useRef<GestureType>(Gesture.Pan());\n const listScrollPosition = useSharedValue(0);\n const gestureComponent = useSharedValue('');\n const tabAbsoluteY = useSharedValue(0);\n const screenWidth = useSharedValue(Dimensions.get('window').width);\n const screenHeight = useSharedValue(1);\n const openPosition = useSharedValue(0);\n const bsScale = useSharedValue(1);\n const bgOpacity = useSharedValue(DEFAULT_BG_OPACITY);\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(closeOffset);\n const fullScreen = useSharedValue(false);\n const [isKeyboardVisible, setIsKeyboardVisible] = useState(false);\n const [bottomSheetVisible, setBottomSheetVisible] = useState(false);\n\n // ** 바텀시트 백그라운드 애니메이션 스타일 정의\n const bsModalBgStyle = useAnimatedStyle(() => ({\n backgroundColor: `#1E1E1E${bgOpacity.value}`,\n }));\n\n // ** 바텀시트 애니메이션 스타일 정의\n const bsAnimatedStyle = useAnimatedStyle(() => ({\n transform: [\n { translateX: translateX.value },\n { translateY: translateY.value },\n { scale: bsScale.value },\n ],\n }));\n\n // ** 화면 너비 설정\n useEffect(() => {\n screenWidth.value = windowWidth - (bottomSheetMarginX ? bottomSheetMarginX * 2 : 0);\n }, [windowWidth, bottomSheetMarginX]);\n\n // ** 바텀시트 초기화\n const initBottomSheet = useCallback(() => {\n screenHeight.value = 1;\n openPosition.value = 0;\n }, [screenHeight, openPosition]);\n\n // ** 백버튼 핸들러 정의 (안드로이드 전용)\n const backPressHandler = useCallback(() => {\n if (bottomSheetVisible) {\n setBottomSheetVisible(false);\n return true;\n }\n return false;\n }, [bottomSheetVisible]);\n\n // ** 백버튼 이벤트 리스너 설정\n useEffect(() => {\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backPressHandler);\n\n return () => backHandler.remove();\n }, [backPressHandler]);\n\n // ** 바텀시트 보이기 상태 감지 후 초기화\n useEffect(() => {\n if (!bottomSheetVisible) initBottomSheet();\n }, [bottomSheetVisible, initBottomSheet]);\n\n // ** 백그라운드 클릭시 키보드나 바텀시트 닫기\n const backgroundPressHandler = useCallback(() => {\n if (isKeyboardVisible) {\n Keyboard.dismiss();\n } else {\n handleVisible(false);\n }\n }, [isKeyboardVisible]);\n\n // ** 키보드 닫기\n const dismissKeyboard = useCallback(() => {\n Keyboard.dismiss();\n }, []);\n\n // ** 애니메이션을 사용한 바텀시트 초기 크기 설정\n const initSize = useCallback(() => {\n bsScale.value = withTiming(1, timingConfig100);\n translateX.value = withTiming(0, timingConfig100);\n bgOpacity.value = DEFAULT_BG_OPACITY;\n }, [bsScale, translateX, bgOpacity]);\n\n // ** 소프트 키보드 핸들링 (보이기, 숨기기)\n useEffect(() => {\n const keyboardDidShowListener = Keyboard.addListener(\n Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow',\n (event) => {\n setIsKeyboardVisible(true);\n if (!fullScreen.value) return;\n const tabAbsoluteYValue = tabAbsoluteY.value;\n const screenTopToTarget = tabAbsoluteYValue - openPosition.value; // 모달 상단에서 인풋까지 거리\n const keyboardHeight = event.endCoordinates.height; // 키보드 높이\n const keyboardLine = DIMENSIONS_HEIGHT - keyboardHeight;\n\n translateY.value = withTiming(keyboardLine - screenTopToTarget - INPUT_HEIGHT_CORRECTION, timingConfig200);\n }\n );\n\n const keyboardDidHideListener = Keyboard.addListener(\n Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide',\n () => {\n setIsKeyboardVisible(false);\n\n // 키보드가 사라질 때 화면의 높이를 원래대로 돌립니다.\n if (!fullScreen.value) return;\n handleVisible(true);\n }\n );\n\n return () => {\n keyboardDidShowListener.remove();\n keyboardDidHideListener.remove();\n };\n }, [fullScreen, openPosition, tabAbsoluteY, translateY]);\n\n // ** 바텀시트 열기 함수\n const openBottomSheet = useCallback(() => {\n setTimeout(() => {\n if (screenHeight.value === 1) return openBottomSheet();\n translateY.value = withTiming(openPosition.value, timingConfig200);\n fullScreen.value = true;\n }, 200);\n }, [screenHeight, openPosition, translateY]);\n\n // ** 바텀시트 위치 변경\n const onOpenPositionChange = useCallback(\n (value: number) => {\n if (fullScreen.value && screenHeight.value !== 1) {\n translateY.value = withTiming(value, timingConfig200);\n }\n },\n [fullScreen, screenHeight, translateY]\n );\n\n // ** 애니메이션 값이 변경될 때 처리\n useDerivedValue(() => {\n runOnJS(onOpenPositionChange)(openPosition.value);\n return openPosition.value;\n }, [openPosition]);\n\n // ** 바텀시트 상태 관리 (열기/닫기)\n const handleVisible = useCallback(\n (isOpen: boolean) => {\n if (isOpen) {\n setBottomSheetVisible(true);\n openBottomSheet();\n } else {\n translateY.value = withTiming(closeOffset, timingConfig200);\n fullScreen.value = false;\n setTimeout(() => {\n setBottomSheetVisible(false);\n }, 200);\n }\n },\n [closeOffset, fullScreen, openBottomSheet, translateY]\n );\n\n // ** 탭 제스처 설정\n const onTapEvent = Gesture.Tap().onStart((event) => {\n tabAbsoluteY.value = event.absoluteY;\n });\n\n // ** 팬 제스처 설정\n const onGestureEvent = Gesture.Pan()\n .onStart((event) => {\n 'worklet';\n runOnJS(dismissKeyboard)();\n\n // 제스쳐 영역 판단\n if (openPosition.value + handleHeight > event.absoluteY) {\n gestureComponent.value = 'Handler';\n bsScale.value = withTiming(0.98, timingConfig100);\n } else {\n gestureComponent.value = 'Contents';\n if (contentsGestureEnable) bsScale.value = withTiming(0.98, timingConfig100);\n }\n })\n .onUpdate((event) => {\n 'worklet';\n // 제스처 제어 로직\n if (!contentsGestureEnable && gestureComponent.value === 'Contents') return;\n\n const translateXValue = event.translationX;\n const translateYValue = event.translationY;\n const calcBg = Math.round(DEFAULT_BG_OPACITY + translateYValue * -1);\n\n // 백그라운드 컬러 업데이트\n if (calcBg < 70 && calcBg > DEFAULT_BG_OPACITY) {\n bgOpacity.value = calcBg;\n }\n\n // 자연스러운 X축 움직임\n if (NATURAL_GESTURE_X > translateXValue && translateXValue > -NATURAL_GESTURE_X && bsScale.value !== 1) {\n translateX.value = translateXValue;\n }\n\n // 상단 제스처 제한\n if (fullScreen.value && translateYValue < NATURAL_GESTURE_TOP) return;\n if (!fullScreen.value && translateYValue > 0 && translateY.value === closeOffset) return;\n\n const result = translateYValue + (fullScreen.value ? openPosition.value : 30);\n translateY.value = result;\n })\n .onEnd(() => {\n 'worklet';\n runOnJS(initSize)();\n const shouldOpen = translateY.value < openPosition.value + screenHeight.value / 2;\n runOnJS(handleVisible)(shouldOpen);\n })\n .withRef(panGestureRef);\n\n return {\n HANDLE_HEIGHT,\n bottomSheetVisible,\n bsAnimatedStyle,\n onGestureEvent,\n handleVisible,\n screenWidth,\n screenHeight,\n handleHeight,\n openPosition,\n bottomSheetPadding,\n onTapEvent,\n panGestureRef,\n listScrollPosition,\n bsModalBgStyle,\n backgroundPressHandler,\n };\n}\n\nexport default useBottomSheetOverlay;\n"]}
@@ -0,0 +1,4 @@
1
+ export interface BottomSheetOverlayRef {
2
+ handleVisible: (isOpen: boolean) => void;
3
+ }
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/overlay/BottomSheetOverlay/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IAClC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/overlay/BottomSheetOverlay/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export interface BottomSheetOverlayRef {\n handleVisible: (isOpen: boolean) => void;\n}"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/overlay/BottomSheetOverlay/ui/BSTextInput/index.tsx"],"names":[],"mappings":"AAIA,KAAK,KAAK,GAAG,EACZ,CAAC;AAEF,QAAA,MAAM,WAAW,iBAAkB,KAAK,gCAkBvC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/overlay/BottomSheetOverlay/ui/BSTextInput/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAKzD,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,KAAK,EAAS,EAAE,EAAE;IACxC,MAAM,YAAY,GAAG,MAAM,CAAY,IAAI,CAAC,CAAC;IAE7C,OAAO,CACH,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QACnB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1D;gBAAA,CAAC,SAAS,CACN,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,aAAa,CAAC,MAAM,CACpB,IAAI,KAAK,CAAC,EAElB;YAAA,EAAE,SAAS,CAAC;QACZ,CAAC;YACD,CAAC,SAAS,CACN,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,IAAI,KAAK,CAAC,EACZ,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { useRef } from \"react\";\nimport { Platform, Pressable } from \"react-native\";\nimport { TextInput } from \"react-native-gesture-handler\";\n\ntype Props = {\n};\n\nconst BSTextInput = ({ ...props }: Props) => {\n const textInputRef = useRef<TextInput>(null);\n\n return (\n Platform.OS === 'ios' ?\n <Pressable onPress={() => { textInputRef?.current?.focus(); }}>\n <TextInput\n ref={textInputRef}\n pointerEvents='none'\n {...props}\n />\n </Pressable>\n :\n <TextInput\n ref={textInputRef}\n {...props}\n />\n );\n};\n\nexport default BSTextInput;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/overlay/BottomSheetOverlay/ui/ContentsComponent/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,WAAW,EAAc,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOtD,UAAU,KAAK;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,4BAA4B,EAAE,OAAO,CAAC;IACtC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGD,iBAAS,iBAAiB,CAAC,EACvB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACpB,EAAE,KAAK,qBAiDP;;AAED,wBAA6C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/overlay/BottomSheetOverlay/ui/ContentsComponent/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Dimensions, LayoutChangeEvent, NativeScrollEvent, NativeSyntheticEvent, View } from 'react-native';\nimport { GestureType, ScrollView } from 'react-native-gesture-handler';\nimport { SharedValue } from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { ZSView } from '../../../../ui';\n\n// const ANDROID_STATUS_BAR_HEIGHT = Platform.OS === 'android' ? 25 : 0;\nconst ANDROID_STATUS_BAR_HEIGHT = 0;\n\ninterface Props {\n HANDLE_HEIGHT: number;\n panGestureRef: React.MutableRefObject<GestureType>;\n listScrollPosition: SharedValue<number>;\n openPosition: SharedValue<number>;\n marginBottomBS: number;\n screenHeight: SharedValue<number>;\n bottomSheetComponent: React.ReactNode;\n bottomSheetPadding: number;\n maxHeight: number;\n isScrollView: boolean;\n showsVerticalScrollIndicator: boolean;\n headerComponent?: React.ReactNode;\n paddingHorizontal?: number;\n}\n\n// 화살표 함수 대신 일반 함수 사용\nfunction ContentsComponent({\n HANDLE_HEIGHT,\n panGestureRef,\n listScrollPosition,\n openPosition,\n marginBottomBS,\n screenHeight,\n bottomSheetComponent,\n bottomSheetPadding,\n maxHeight,\n isScrollView,\n showsVerticalScrollIndicator,\n headerComponent,\n paddingHorizontal\n}: Props) {\n const { bottom } = useSafeAreaInsets();\n\n const onLayout = useCallback((event: LayoutChangeEvent) => {\n const { height } = event.nativeEvent.layout;\n const contentMaxHeight = maxHeight + HANDLE_HEIGHT;\n const resultHeight = Math.min(height, contentMaxHeight);\n\n screenHeight.value = resultHeight + HANDLE_HEIGHT;\n openPosition.value = Dimensions.get('window').height - resultHeight - marginBottomBS - bottom - ANDROID_STATUS_BAR_HEIGHT - HANDLE_HEIGHT;\n }, [maxHeight, HANDLE_HEIGHT, screenHeight, openPosition, marginBottomBS, bottom]);\n\n // 현재 스크롤 위치\n const handleScroll = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {\n listScrollPosition.value = event.nativeEvent.contentOffset.y;\n }, [listScrollPosition]);\n\n return (\n <ZSView style={{ width: '100%', minHeight: 1, paddingBottom: bottomSheetPadding, maxHeight }} onLayout={onLayout}>\n {headerComponent && (\n <View style={{ paddingHorizontal }}>\n {headerComponent}\n </View>\n )}\n\n {\n isScrollView ? (\n <ScrollView\n simultaneousHandlers={[panGestureRef]}\n onScroll={handleScroll}\n style={{ maxHeight }}\n keyboardShouldPersistTaps=\"handled\"\n bounces={false}\n bouncesZoom={false}\n overScrollMode=\"never\"\n showsVerticalScrollIndicator={showsVerticalScrollIndicator}\n scrollEventThrottle={16}\n contentContainerStyle={{ paddingHorizontal }}\n >\n {bottomSheetComponent}\n </ScrollView>\n ) : (\n <View style={{ paddingHorizontal }}>\n {bottomSheetComponent}\n </View>\n )\n }\n </ZSView>\n );\n}\n\nexport default React.memo(ContentsComponent);\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/LoadingNotify/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA0B,MAAM,OAAO,CAAC;AAKjE,iBAAS,aAAa,CAAC,EACrB,eAAe,GAChB,EAAE;IACD,eAAe,CAAC,EAAE,MAAM,SAAS,CAAC;CACnC,4BAiCA;AAED,eAAe,aAAa,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { ActivityIndicator, BackHandler } from "react-native";
2
2
  import React, { useEffect, useCallback } from "react";
3
- import { useNotify } from "../../model/useNotify";
3
+ import { useOverlay } from "../../model/useOverlay";
4
4
  import ModalBackground from "../ui/ModalBackground";
5
5
  // 함수 선언식으로 변경
6
6
  function LoadingNotify({ loaderComponent, }) {
7
- const { loaderVisible } = useNotify();
7
+ const { loaderVisible } = useOverlay();
8
8
  // BackHandler 이벤트 처리 최적화
9
9
  useEffect(() => {
10
10
  const handleBackPressed = () => {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/LoadingNotify/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,EAAa,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD,cAAc;AACd,SAAS,aAAa,CAAC,EACrB,eAAe,GAGhB;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE,CAAC;IAEvC,yBAAyB;IACzB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,IAAI,aAAa;gBAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;YACrD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAC1C,mBAAmB,EACnB,iBAAiB,CAClB,CAAC;QAEF,gBAAgB;QAChB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,0BAA0B;IAC1B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,OAAO,eAAe,CAAC,CAAC,CAAC,CACvB,eAAe,EAAE,CAClB,CAAC,CAAC,CAAC,CACF,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAG,CAChD,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,OAAO,aAAa,CAAC,CAAC,CAAC,CACrB,CAAC,eAAe,CACd;MAAA,CAAC,YAAY,EAAE,CACjB;IAAA,EAAE,eAAe,CAAC,CACnB,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,eAAe,aAAa,CAAC","sourcesContent":["import { ActivityIndicator, BackHandler } from \"react-native\";\nimport React, { ReactNode, useEffect, useCallback } from \"react\";\nimport { useOverlay } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\n\n// 함수 선언식으로 변경\nfunction LoadingNotify({\n loaderComponent,\n}: {\n loaderComponent?: () => ReactNode;\n}) {\n const { loaderVisible } = useOverlay();\n\n // BackHandler 이벤트 처리 최적화\n useEffect(() => {\n const handleBackPressed = () => {\n if (loaderVisible) return true; // 로더가 보이는 경우 뒤로가기 방지\n return false;\n };\n\n const handler = BackHandler.addEventListener(\n \"hardwareBackPress\",\n handleBackPressed\n );\n\n // cleanup 함수 추가\n return () => handler.remove();\n }, [loaderVisible]);\n\n // loaderComponent를 메모이제이션\n const renderLoader = useCallback(() => {\n return loaderComponent ? (\n loaderComponent()\n ) : (\n <ActivityIndicator size=\"large\" color=\"#fff\" />\n );\n }, [loaderComponent]);\n\n return loaderVisible ? (\n <ModalBackground>\n {renderLoader()}\n </ModalBackground>\n ) : null;\n}\n\nexport default LoadingNotify;\n"]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ declare function Modality({ modalityComponent, onModalityClosed }: {
3
+ modalityComponent?: React.ReactNode;
4
+ onModalityClosed?: () => void;
5
+ }): React.JSX.Element | null;
6
+ export default Modality;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAgBnD,iBAAS,QAAQ,CAAC,EAChB,iBAAiB,EACjB,gBAAgB,EACjB,EAAE;IACD,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B,4BAwGA;AAmCD,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,127 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Dimensions, StyleSheet } from 'react-native';
3
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
4
+ import Animated, { FadeOut, useAnimatedStyle, withTiming, withDelay, useSharedValue } from 'react-native-reanimated';
5
+ import { useOverlay } from '../../model/useOverlay';
6
+ import { ScrollViewAtom } from '../../ui';
7
+ import { useTheme } from '../../model';
8
+ const { width, height } = Dimensions.get('window');
9
+ function Modality({ modalityComponent, onModalityClosed }) {
10
+ const [localVisible, setLocalVisible] = useState(false);
11
+ const { modalityVisible } = useOverlay();
12
+ const insets = useSafeAreaInsets();
13
+ const { palette } = useTheme();
14
+ const backScale = useSharedValue(1);
15
+ const backTranslateY = useSharedValue(0);
16
+ const backBorderRadius = useSharedValue(0);
17
+ const mainTranslateY = useSharedValue(height);
18
+ const backgroundOpacity = useSharedValue(1);
19
+ // 애니메이션 트리거
20
+ useEffect(() => {
21
+ if (modalityVisible) {
22
+ // 모달이 열리는 애니메이션
23
+ setLocalVisible(true);
24
+ backScale.value = withDelay(200, withTiming(0.92, { duration: 300 }));
25
+ backTranslateY.value = withDelay(400, withTiming(insets.top, { duration: 300 }));
26
+ backBorderRadius.value = withDelay(200, withTiming(16, { duration: 300 }));
27
+ mainTranslateY.value = withDelay(300, withTiming(10 + insets.top, { duration: 300 }));
28
+ backgroundOpacity.value = withTiming(1, { duration: 300 });
29
+ }
30
+ else {
31
+ // 모달이 닫히는 애니메이션 (역순)
32
+ backScale.value = withTiming(1, { duration: 100 });
33
+ backTranslateY.value = withTiming(0, { duration: 100 });
34
+ backBorderRadius.value = withTiming(0, { duration: 100 });
35
+ mainTranslateY.value = withTiming(height, { duration: 200 });
36
+ backgroundOpacity.value = withTiming(0, { duration: 500 });
37
+ setTimeout(() => {
38
+ setLocalVisible(false);
39
+ }, 500);
40
+ }
41
+ }, [modalityVisible, insets.top, onModalityClosed]);
42
+ // 부모 스크린
43
+ const backScreenAnimatedStyle = useAnimatedStyle(() => {
44
+ return {
45
+ transform: [
46
+ { scaleX: backScale.value },
47
+ { translateY: backTranslateY.value }
48
+ ],
49
+ borderRadius: backBorderRadius.value
50
+ };
51
+ });
52
+ // 아래에서 등장하는 Modality 화면
53
+ const mainScreenAnimatedStyle = useAnimatedStyle(() => {
54
+ return {
55
+ transform: [
56
+ { translateY: mainTranslateY.value }
57
+ ]
58
+ };
59
+ });
60
+ // 배경 불투명도 스타일
61
+ const backgroundAnimatedStyle = useAnimatedStyle(() => {
62
+ return {
63
+ opacity: backgroundOpacity.value
64
+ };
65
+ });
66
+ if (!localVisible)
67
+ return null;
68
+ return (<Animated.View style={[
69
+ styles.animatedBackground,
70
+ { backgroundColor: palette.background.neutral },
71
+ backgroundAnimatedStyle
72
+ ]}>
73
+ <Animated.View exiting={FadeOut.duration(300)} style={[
74
+ styles.backScreen,
75
+ { backgroundColor: palette.background.layer2 },
76
+ backScreenAnimatedStyle
77
+ ]}/>
78
+
79
+ <Animated.View style={[
80
+ {
81
+ height: height - (10 + insets.top),
82
+ paddingBottom: insets.bottom,
83
+ backgroundColor: palette.background.base
84
+ },
85
+ styles.mainScreen,
86
+ mainScreenAnimatedStyle
87
+ ]}>
88
+ <ScrollViewAtom style={styles.scrollStyle} bounces={false} contentContainerStyle={styles.scrollContainerStyle} keyboardShouldPersistTaps="handled" automaticallyAdjustKeyboardInsets={true}>
89
+ {modalityComponent}
90
+ </ScrollViewAtom>
91
+ </Animated.View>
92
+ </Animated.View>);
93
+ }
94
+ const styles = StyleSheet.create({
95
+ scrollStyle: {
96
+ flex: 1,
97
+ width: width,
98
+ },
99
+ scrollContainerStyle: {
100
+ flexGrow: 1,
101
+ alignItems: 'center',
102
+ width: width,
103
+ paddingTop: 10,
104
+ },
105
+ animatedBackground: {
106
+ width,
107
+ height,
108
+ position: 'absolute',
109
+ },
110
+ backScreen: {
111
+ position: 'absolute',
112
+ width,
113
+ height,
114
+ justifyContent: 'center',
115
+ alignItems: 'center',
116
+ zIndex: 8000,
117
+ },
118
+ mainScreen: {
119
+ width,
120
+ position: 'absolute',
121
+ borderRadius: 16,
122
+ zIndex: 8002,
123
+ overflow: 'hidden',
124
+ },
125
+ });
126
+ export default Modality;
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Dimensions, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport Animated, {\n FadeOut,\n useAnimatedStyle,\n withTiming,\n withDelay,\n useSharedValue\n} from 'react-native-reanimated';\nimport { useOverlay } from '../../model/useOverlay';\nimport { ScrollViewAtom } from '../../ui';\nimport { useTheme } from '../../model';\n\nconst { width, height } = Dimensions.get('window');\n\nfunction Modality({\n modalityComponent,\n onModalityClosed\n}: {\n modalityComponent?: React.ReactNode;\n onModalityClosed?: () => void;\n}) {\n const [localVisible, setLocalVisible] = useState(false);\n const { modalityVisible } = useOverlay();\n const insets = useSafeAreaInsets();\n const { palette } = useTheme();\n\n const backScale = useSharedValue(1);\n const backTranslateY = useSharedValue(0);\n const backBorderRadius = useSharedValue(0);\n const mainTranslateY = useSharedValue(height);\n const backgroundOpacity = useSharedValue(1);\n\n // 애니메이션 트리거\n useEffect(() => {\n if (modalityVisible) {\n // 모달이 열리는 애니메이션\n setLocalVisible(true);\n backScale.value = withDelay(200, withTiming(0.92, { duration: 300 }));\n backTranslateY.value = withDelay(400, withTiming(insets.top, { duration: 300 }));\n backBorderRadius.value = withDelay(200, withTiming(16, { duration: 300 }));\n mainTranslateY.value = withDelay(300, withTiming(10 + insets.top, { duration: 300 }));\n backgroundOpacity.value = withTiming(1, { duration: 300 });\n } else {\n // 모달이 닫히는 애니메이션 (역순)\n backScale.value = withTiming(1, { duration: 100 });\n backTranslateY.value = withTiming(0, { duration: 100 });\n backBorderRadius.value = withTiming(0, { duration: 100 });\n mainTranslateY.value = withTiming(height, { duration: 200 });\n backgroundOpacity.value = withTiming(0, { duration: 500 });\n setTimeout(() => {\n setLocalVisible(false);\n }, 500);\n }\n }, [modalityVisible, insets.top, onModalityClosed]);\n\n // 부모 스크린\n const backScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { scaleX: backScale.value },\n { translateY: backTranslateY.value }\n ],\n borderRadius: backBorderRadius.value\n };\n });\n\n // 아래에서 등장하는 Modality 화면\n const mainScreenAnimatedStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { translateY: mainTranslateY.value }\n ]\n };\n });\n\n // 배경 불투명도 스타일\n const backgroundAnimatedStyle = useAnimatedStyle(() => {\n return {\n opacity: backgroundOpacity.value\n };\n });\n\n if (!localVisible) return null;\n\n return (\n <Animated.View\n style={[\n styles.animatedBackground,\n {backgroundColor: palette.background.neutral},\n backgroundAnimatedStyle\n ]}\n >\n <Animated.View\n exiting={FadeOut.duration(300)}\n style={[\n styles.backScreen,\n { backgroundColor: palette.background.layer2 },\n backScreenAnimatedStyle\n ]}\n />\n\n <Animated.View\n style={[\n {\n height: height - (10 + insets.top),\n paddingBottom: insets.bottom,\n backgroundColor: palette.background.base\n },\n styles.mainScreen,\n mainScreenAnimatedStyle\n ]}\n >\n <ScrollViewAtom\n style={styles.scrollStyle}\n bounces={false}\n contentContainerStyle={styles.scrollContainerStyle}\n keyboardShouldPersistTaps=\"handled\"\n automaticallyAdjustKeyboardInsets={true}\n >\n {modalityComponent}\n </ScrollViewAtom>\n </Animated.View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n scrollStyle: {\n flex: 1,\n width: width,\n },\n scrollContainerStyle: {\n flexGrow: 1,\n alignItems: 'center',\n width: width,\n paddingTop: 10,\n },\n animatedBackground: {\n width,\n height,\n position: 'absolute',\n },\n backScreen: {\n position: 'absolute',\n width,\n height,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 8000,\n },\n mainScreen: {\n width,\n position: 'absolute',\n borderRadius: 16,\n zIndex: 8002,\n overflow: 'hidden',\n },\n});\n\nexport default Modality;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopOverButton.d.ts","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAAmB,SAAS,EAAc,MAAM,cAAc,CAAC;AAGtE,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC;CACvC;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiC/C,CAAC;AAWF,eAAe,aAAa,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import React, { useRef, useCallback } from 'react';
2
2
  import { View, Pressable, StyleSheet } from 'react-native';
3
- import { useNotify } from '../../model/useNotify';
3
+ import { useOverlay } from '../../model/useOverlay';
4
4
  const PopOverButton = ({ width, height, backgroundColor = 'transparent', popOverMenuComponent, children, ...props }) => {
5
5
  const buttonRef = useRef(null);
6
- const { showPopOverMenu } = useNotify();
6
+ const { showPopOverMenu } = useOverlay();
7
7
  const handlePress = useCallback(() => {
8
8
  buttonRef.current?.measure((fx, fy, measuredWidth, measuredHeight, pageX, pageY) => {
9
9
  if (pageX !== undefined && pageY !== undefined) {
@@ -0,0 +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,EAAE,SAAS,EAAa,UAAU,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AASpD,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,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CACvD;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,SAAS,CAAC,CACb,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, Pressable, ViewProps, StyleSheet } from 'react-native';\nimport { useOverlay } from '../../model/useOverlay';\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 <Pressable 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 </Pressable>\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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopOverMenu.d.ts","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAKrD,iBAAS,WAAW,CAAC,EACnB,EAAE,EACF,EAAE,EACF,SAAS,EACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CA8EvC;AAED,eAAe,WAAW,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import React, { useCallback, useEffect, useRef, useState } from "react";
2
2
  import { BackHandler, Dimensions, Pressable } from "react-native";
3
3
  import Animated, { FadeInUp, FadeOutUp } from "react-native-reanimated";
4
- import { useNotify } from "../../model/useNotify";
4
+ import { useOverlay } from "../../model/useOverlay";
5
5
  import ModalBackground from "../ui/ModalBackground";
6
6
  // 화면 높이 가져오기
7
7
  const WINDOW_HEIGHT = Dimensions.get('window').height;
@@ -9,7 +9,7 @@ function PopOverMenu({ px, py, component }) {
9
9
  const [isContentVisible, setIsContentVisible] = useState(false);
10
10
  const [contentWidth, setContentWidth] = useState(0);
11
11
  const [contentHeight, setContentHeight] = useState(0);
12
- const { popOverVisible, setPopOverVisible } = useNotify();
12
+ const { popOverVisible, setPopOverVisible } = useOverlay();
13
13
  const timerRef = useRef(null);
14
14
  // 뒤로가기 버튼 처리 핸들러
15
15
  const handleBackPress = useCallback(() => {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopOverMenu.js","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAqB,SAAS,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAGpD,aAAa;AACb,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAEtD,SAAS,WAAW,CAAC,EACnB,EAAE,EACF,EAAE,EACF,SAAS,EACQ;IACjB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,eAAe,GAAG,WAAW,CAAC,GAAY,EAAE;QAChD,IAAI,cAAc,EAAE,CAAC;YACnB,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC,CAAC,cAAc;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,WAAW;IAC3B,CAAC,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAExC,uBAAuB;IACvB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;QAEvF,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,aAAa;IACb,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAwB,EAAQ,EAAE;QAClE,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACrD,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YAED,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,kBAAkB;IAClB,MAAM,kBAAkB,GAAG,aAAa,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC;IAElF,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO,CACL,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CACxE;MAAA,CAAC,gBAAgB,IAAI,CACnB,CAAC,QAAQ,CAAC,IAAI,CACZ,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CAAC,SAAS,CAAC,CAEnB;UAAA,CAAC,0BAA0B,CAC3B;UAAA,CAAC,SAAS,CACR,KAAK,CAAC,CAAC;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,EAAE,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,EAAE,EAAE,GAAG,YAAY,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aACpE,CAAC,CACF,QAAQ,CAAC,CAAC,YAAY,CAAC,CAEvB;YAAA,CAAC,SAAS,CACZ;UAAA,EAAE,SAAS,CACb;QAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,CACjB,CACH;IAAA,EAAE,eAAe,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,eAAe,WAAW,CAAC","sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { BackHandler, Dimensions, LayoutChangeEvent, Pressable } from \"react-native\";\nimport Animated, { FadeInUp, FadeOutUp } from \"react-native-reanimated\";\nimport { useOverlay } from \"../../model/useOverlay\";\nimport ModalBackground from \"../ui/ModalBackground\";\nimport { PopOverMenuProps } from \"../../model/types\";\n\n// 화면 높이 가져오기\nconst WINDOW_HEIGHT = Dimensions.get('window').height;\n\nfunction PopOverMenu({\n px,\n py,\n component\n}: PopOverMenuProps): JSX.Element | null {\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 } = useOverlay();\n const timerRef = useRef<number | null>(null);\n\n // 뒤로가기 버튼 처리 핸들러\n const handleBackPress = useCallback((): boolean => {\n if (popOverVisible) {\n setIsContentVisible(false);\n setPopOverVisible(false);\n return true; // 뒤로가기 액션을 막음\n }\n return false; // 기본 동작 허용\n }, [popOverVisible, setPopOverVisible]);\n\n // 뒤로가기 이벤트 리스너 추가 및 제거\n useEffect(() => {\n const backHandler = BackHandler.addEventListener('hardwareBackPress', handleBackPress);\n\n return () => backHandler.remove();\n }, [handleBackPress]);\n\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 // PopOver가 보일 때 콘텐츠를 딜레이 후 보여줌\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 }\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [popOverVisible]);\n\n // 화면 크기에 따른 위치 조정\n const isVerticalOverflow = WINDOW_HEIGHT < (py + contentHeight);\n const isHorizontalOverflow = Dimensions.get('window').width > (px + contentWidth);\n\n if (!popOverVisible) return null;\n\n return (\n <ModalBackground isCenter={false} onPress={() => setPopOverVisible(false)}>\n {isContentVisible && (\n <Animated.View\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n {/* PopOver의 위치를 세밀하게 조정 */}\n <Pressable\n style={{\n position: 'absolute',\n top: py - (isVerticalOverflow ? (contentHeight + 10) : 0),\n left: px - contentWidth + (isHorizontalOverflow ? contentWidth : 0),\n }}\n onLayout={handleLayout}\n >\n {component}\n </Pressable>\n </Animated.View>\n )}\n </ModalBackground>\n );\n}\n\nexport default PopOverMenu;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/SnackbarNotify/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAIxD,QAAA,MAAM,cAAc,uBAEjB;IACD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAA;CAC3D,6BAoBA,CAAC;AAWF,eAAe,cAAc,CAAC"}
@@ -2,10 +2,10 @@ import React from "react";
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";
5
- import { useNotify } from "../../model/useNotify";
5
+ import { useOverlay } from "../../model/useOverlay";
6
6
  const SnackbarNotify = ({ customSnackbar }) => {
7
7
  const { top } = useSafeAreaInsets();
8
- const { snackItemStack, hideSnackBar } = useNotify();
8
+ const { snackItemStack, hideSnackBar } = useOverlay();
9
9
  return snackItemStack ? (<View style={[styles.container, { paddingTop: top }]}>
10
10
  {snackItemStack.map((snackItem, index) => {
11
11
  return (<SnackbarItem key={index} customSnackbar={customSnackbar} snackItem={snackItem} hideSnackBar={hideSnackBar}/>);
@@ -0,0 +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,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,cAAc,GAAG,CAAC,EACtB,cAAc,EAGf,EAAE,EAAE;IACH,MAAM,EAAE,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,CAAC;IAEtD,OAAO,cAAc,CAAC,CAAC,CAAC,CACtB,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,KAAK,EAAE,EAAE;YACtC,OAAO,CACL,CAAC,YAAY,CACX,GAAG,CAAC,CAAC,KAAK,CAAC,CACX,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,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,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 { useOverlay } from \"../../model/useOverlay\";\n\nconst SnackbarNotify = ({\n customSnackbar\n}: {\n customSnackbar?: (props: CustomSnackbarProps) => ReactNode\n}) => {\n const { top } = useSafeAreaInsets();\n const { snackItemStack, hideSnackBar } = useOverlay();\n\n return snackItemStack ? (\n <View style={[styles.container, { paddingTop: top }]}>\n {\n snackItemStack.map((snackItem, index) => {\n return (\n <SnackbarItem\n key={index}\n customSnackbar={customSnackbar}\n snackItem={snackItem}\n hideSnackBar={hideSnackBar}\n />\n );\n })\n }\n </View>\n ) : null;\n};\n\nconst styles = StyleSheet.create({\n container: {\n zIndex: 9997,\n width: '100%',\n alignItems: 'center',\n position: 'absolute',\n },\n});\n\nexport default SnackbarNotify;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnackbarItem.d.ts","sourceRoot":"","sources":["../../../../src/overlay/SnackbarNotify/ui/SnackbarItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA0B,MAAM,OAAO,CAAC;AAGjE,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKtE,QAAA,MAAM,QAAQ,iDAIX;IACD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAC;IAC3D,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,sBA0CA,CAAC;AA4CF,eAAe,QAAQ,CAAC"}
@@ -0,0 +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 { Platform, 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 { ZSText } from \"../../../ui\";\nimport { useTheme } from \"../../../model/useThemeProvider\";\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\n return () => clearTimeout(closeTimeout);\n }, [snackbarDuration, closeSnackbar]);\n\n return (\n <Animated.View\n style={[styles.container, styles.aosShadow, styles.snackbarWrapper]}\n entering={FadeInUp}\n exiting={FadeOutUp}\n >\n <TouchableOpacity\n style={[styles.container, styles.iosShadow, styles.touchable]}\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 backgroundColor: \"white\",\n },\n iosShadow: {\n ...Platform.select({\n ios: {\n shadowColor: \"rgb(50, 50, 50)\",\n shadowOpacity: 0.12,\n shadowRadius: 5,\n shadowOffset: { height: 3, width: 0 },\n },\n }),\n },\n aosShadow: {\n ...Platform.select({\n android: { elevation: 5 },\n }),\n },\n snackbarWrapper: {\n width: \"94%\",\n marginTop: 10,\n },\n touchable: {\n width: \"100%\",\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"]}
@@ -0,0 +1,11 @@
1
+ import AlertOverlay from './AlertOverlay';
2
+ import BottomSheetOverlay from './BottomSheetOverlay';
3
+ import SnackbarNotify from './SnackbarNotify';
4
+ import BSTextInput from './BottomSheetOverlay/ui/BSTextInput';
5
+ import * as useOverlayProvider from '../model/useOverlayProvider';
6
+ import { useOverlay } from '../model/useOverlay';
7
+ import PopOverButton from './PopOver/PopOverButton';
8
+ import PopOverMenu from './PopOver/PopOverMenu';
9
+ import * as types from '../model/types';
10
+ export { AlertOverlay, BottomSheetOverlay, SnackbarNotify, useOverlayProvider, useOverlay, BSTextInput, PopOverButton, PopOverMenu, types, };
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/overlay/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,KAAK,GACN,CAAA"}
@@ -0,0 +1,11 @@
1
+ import AlertOverlay from './AlertOverlay';
2
+ import BottomSheetOverlay from './BottomSheetOverlay';
3
+ import SnackbarNotify from './SnackbarNotify';
4
+ import BSTextInput from './BottomSheetOverlay/ui/BSTextInput';
5
+ import * as useOverlayProvider from '../model/useOverlayProvider';
6
+ import { useOverlay } from '../model/useOverlay';
7
+ import PopOverButton from './PopOver/PopOverButton';
8
+ import PopOverMenu from './PopOver/PopOverMenu';
9
+ import * as types from '../model/types';
10
+ export { AlertOverlay, BottomSheetOverlay, SnackbarNotify, useOverlayProvider, useOverlay, BSTextInput, PopOverButton, PopOverMenu, types, };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/overlay/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,aAAa,MAAM,yBAAyB,CAAC;AACpD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,KAAK,GACN,CAAA","sourcesContent":["import AlertOverlay from './AlertOverlay';\nimport BottomSheetOverlay from './BottomSheetOverlay';\nimport SnackbarNotify from './SnackbarNotify';\nimport BSTextInput from './BottomSheetOverlay/ui/BSTextInput';\nimport * as useOverlayProvider from '../model/useOverlayProvider';\nimport { useOverlay } from '../model/useOverlay';\nimport PopOverButton from './PopOver/PopOverButton';\nimport PopOverMenu from './PopOver/PopOverMenu';\nimport * as types from '../model/types';\n\nexport {\n AlertOverlay,\n BottomSheetOverlay,\n SnackbarNotify,\n useOverlayProvider,\n useOverlay,\n BSTextInput,\n PopOverButton,\n PopOverMenu,\n types,\n}"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModalBackground.d.ts","sourceRoot":"","sources":["../../../src/overlay/ui/ModalBackground.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAKvC,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,iBAAS,eAAe,CAAC,EAAE,QAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,oBAAoB,qBAkBpF;AAcD,eAAe,eAAe,CAAC"}
@@ -11,14 +11,12 @@ function ModalBackground({ isCenter = true, children, onPress }) {
11
11
  </Pressable>
12
12
  </Animated.View>);
13
13
  }
14
- // 스타일을 생성하는 함수, 모달 배경 색상 인자로 받음
15
14
  const createStyles = (modalBgColor) => StyleSheet.create({
16
15
  modalBg: {
17
16
  zIndex: 9997,
18
17
  backgroundColor: modalBgColor,
19
18
  ...StyleSheet.absoluteFillObject,
20
19
  },
21
- // 화면 전체를 덮는 Pressable 스타일 추가
22
20
  fullScreen: {
23
21
  ...StyleSheet.absoluteFillObject,
24
22
  },
@@ -0,0 +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,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,SAAS,eAAe,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAwB;IACnF,MAAM,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IACjD,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,MAAM,CAAC,OAAO,CAAC,CACtB,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,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC3F,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAEhC;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,SAAS,CACb;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,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,YAAY;QAC7B,GAAG,UAAU,CAAC,kBAAkB;KACjC;IACD,UAAU,EAAE;QACV,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 { useTheme } from '../../model/useThemeProvider';\n\ninterface ModalBackgroundProps {\n isCenter?: boolean;\n children: React.ReactNode;\n onPress?: () => void;\n}\n\nfunction ModalBackground({ isCenter = true, children, onPress }: ModalBackgroundProps) {\n const { palette: { modalBgColor } } = useTheme();\n const styles = useMemo(() => createStyles(modalBgColor), [modalBgColor]);\n\n return (\n <Animated.View\n style={styles.modalBg}\n entering={FadeIn.duration(50)}\n exiting={FadeOut.duration(50)}\n >\n <Pressable\n style={[styles.fullScreen, isCenter && { justifyContent: 'center', alignItems: 'center' }]}\n onPress={onPress ?? (() => { })}\n >\n {children}\n </Pressable>\n </Animated.View>\n );\n}\n\nconst createStyles = (modalBgColor: string) =>\n StyleSheet.create({\n modalBg: {\n zIndex: 9997,\n backgroundColor: modalBgColor,\n ...StyleSheet.absoluteFillObject,\n },\n fullScreen: {\n ...StyleSheet.absoluteFillObject,\n },\n });\n\nexport default ModalBackground;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSBottomButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAAuE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAS1H,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1C,oBAAoB,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;CACvD;AAED,iBAAS,cAAc,CAAC,EACtB,gBAAwC,EACxC,MAAW,EACX,QAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAyB,EAC1B,EAAE,KAAK,qBAuFP;AA0BD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSBottomButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAAuE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAS1H,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uBAAuB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1C,oBAAoB,CAAC,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;CACvD;AAED,iBAAS,cAAc,CAAC,EACtB,gBAAwC,EACxC,MAAW,EACX,QAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAyB,EAC1B,EAAE,KAAK,qBAuFP;AAyBD,eAAe,cAAc,CAAC"}
@@ -41,7 +41,7 @@ function ZSBottomButton({ loadingComponent = <ActivityIndicator />, height = 55,
41
41
  const getMargin = interpolate(isKeyboardVisible.value, [0, 1], [DEFAULT_MARGIN_X, 0], 'clamp');
42
42
  const getRadius = interpolate(isKeyboardVisible.value, [0, 1], [DEFAULT_BORDER_RADIUS, 0], 'clamp');
43
43
  return {
44
- bottom: withTiming(getBottom, DURATION),
44
+ marginBottom: withTiming(getBottom, DURATION),
45
45
  marginLeft: withTiming(getMargin, DURATION),
46
46
  marginRight: withTiming(getMargin, DURATION),
47
47
  borderRadius: withTiming(getRadius, DURATION),
@@ -72,12 +72,11 @@ const styles = StyleSheet.create({
72
72
  justifyContent: 'center',
73
73
  alignItems: 'center',
74
74
  borderRadius: DEFAULT_BORDER_RADIUS,
75
- bottom: DEFAULT_MARGIN_BOTTOM,
75
+ marginBottom: DEFAULT_MARGIN_BOTTOM,
76
76
  marginLeft: DEFAULT_MARGIN_X,
77
77
  marginRight: DEFAULT_MARGIN_X,
78
78
  overflow: 'hidden',
79
79
  flexDirection: 'row',
80
- position: 'absolute'
81
80
  },
82
81
  });
83
82
  export default ZSBottomButton;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/ZSBottomButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAyB,MAAM,cAAc,CAAC;AAC1H,OAAO,QAAQ,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAcnC,SAAS,cAAc,CAAC,EACtB,gBAAgB,GAAG,CAAC,iBAAiB,CAAC,AAAD,EAAG,EACxC,MAAM,GAAG,EAAE,EACX,QAAQ,GAAG,KAAK,EAChB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GAAG,EAAE,EACnB;IACN,MAAM,iBAAiB,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,cAAc,EAAE,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,iBAAiB;IACjB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACjF,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEjF,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACzE,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;YAC5D,iBAAiB,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE;YACpE,iBAAiB,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,wBAAwB,CAAC,MAAM,EAAE,CAAC;YAClC,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,EAAE;QAC1C,MAAM,SAAS,GAAG,WAAW,CAC3B,iBAAiB,CAAC,KAAK,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,qBAAqB,EAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACxE,OAAO,CACR,CAAC;QAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,iBAAiB,CAAC,KAAK,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,gBAAgB,EAAE,CAAC,CAAC,EACrB,OAAO,CACR,CAAC;QAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,iBAAiB,CAAC,KAAK,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAC1B,OAAO,CACR,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;YACvC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC3C,WAAW,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC5C,YAAY,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;SAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CACtD;MAAA,CAAC,uBAAuB,IAAI,CAC1B,CAAC,gBAAgB,CACf,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAC1E,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAE1B;UAAA,CAAC,uBAAuB,CAC1B;QAAA,EAAE,gBAAgB,CAAC,CACpB,CAED;;MAAA,CAAC,gBAAgB,CACf,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,KAAK,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAC/D,OAAO,CAAC,CAAC,WAAW,CAAC,CACrB,QAAQ,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,CAEhC;QAAA,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CACvD;MAAA,EAAE,gBAAgB,CACpB;IAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE;QACd,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE,CAAC;KACR;IACD,uBAAuB,EAAE;QACvB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,IAAI,EAAE,CAAC;KACR;IACD,SAAS,EAAE;QACT,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,qBAAqB;QACnC,MAAM,EAAE,qBAAqB;QAC7B,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,gBAAgB;QAC7B,QAAQ,EAAE,QAAQ;QAClB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAC,UAAU;KACpB;CACF,CAAC,CAAC;AAEH,eAAe,cAAc,CAAC","sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { ActivityIndicator, Keyboard, Platform, StyleSheet, TouchableOpacity, TouchableOpacityProps } from \"react-native\";\nimport Animated, { interpolate, useAnimatedStyle, useSharedValue, withTiming } from \"react-native-reanimated\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\n\nconst DEFAULT_MARGIN_X = 20;\nconst DEFAULT_MARGIN_BOTTOM = 20;\nconst DEFAULT_BORDER_RADIUS = 14;\nconst DURATION = { duration: 250 };\n\ninterface Props {\n loadingComponent?: React.ReactNode;\n height?: number;\n disabled?: boolean;\n primaryOnPress: () => Promise<any>;\n primaryLabelComponent: React.ReactNode;\n primaryButtonStyle?: TouchableOpacityProps['style'];\n secondaryOnPress?: () => void;\n secondaryLabelComponent?: React.ReactNode;\n secondaryButtonStyle?: TouchableOpacityProps['style'];\n}\n\nfunction ZSBottomButton({\n loadingComponent = <ActivityIndicator />,\n height = 55,\n disabled = false,\n primaryLabelComponent,\n primaryOnPress,\n primaryButtonStyle = {},\n secondaryOnPress,\n secondaryLabelComponent,\n secondaryButtonStyle = {}\n}: Props) {\n const isKeyboardVisible = useSharedValue(0);\n const keyboardHeight = useSharedValue(0);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { bottom } = useSafeAreaInsets();\n\n const handlePress = useCallback(async () => {\n setIsLoading(true);\n try {\n await primaryOnPress();\n } finally {\n setIsLoading(false);\n }\n }, [primaryOnPress]);\n\n // ** 소프트 키보드 핸들링\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const keyboardShowSubscription = Keyboard.addListener(showEvent, (event) => {\n keyboardHeight.value = event.endCoordinates.height - bottom;\n isKeyboardVisible.value = withTiming(1, { duration: 200 });\n });\n\n const keyboardHideSubscription = Keyboard.addListener(hideEvent, () => {\n isKeyboardVisible.value = withTiming(0, { duration: 200 });\n });\n\n return () => {\n keyboardShowSubscription.remove();\n keyboardHideSubscription.remove();\n };\n }, [isKeyboardVisible, keyboardHeight]);\n\n const animatedStyle = useAnimatedStyle(() => {\n const getBottom = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_MARGIN_BOTTOM,Platform.OS === 'ios' ? keyboardHeight.value : 0],\n 'clamp',\n );\n\n const getMargin = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_MARGIN_X, 0],\n 'clamp',\n );\n\n const getRadius = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_BORDER_RADIUS, 0],\n 'clamp',\n );\n\n return {\n bottom: withTiming(getBottom, DURATION),\n marginLeft: withTiming(getMargin, DURATION),\n marginRight: withTiming(getMargin, DURATION),\n borderRadius: withTiming(getRadius, DURATION),\n };\n });\n\n return (\n <Animated.View style={[styles.container, animatedStyle]}>\n {secondaryLabelComponent && (\n <TouchableOpacity\n activeOpacity={0.7}\n style={[secondaryButtonStyle, { height }, styles.touchSecondaryContainer]}\n onPress={secondaryOnPress}\n >\n {secondaryLabelComponent}\n </TouchableOpacity>\n )}\n\n <TouchableOpacity\n activeOpacity={0.7}\n style={[primaryButtonStyle, { height }, styles.touchContainer]}\n onPress={handlePress}\n disabled={disabled || isLoading}\n >\n {isLoading ? loadingComponent : primaryLabelComponent}\n </TouchableOpacity>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n touchContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n flex: 2,\n },\n touchSecondaryContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n flex: 1,\n },\n container: {\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: DEFAULT_BORDER_RADIUS,\n bottom: DEFAULT_MARGIN_BOTTOM,\n marginLeft: DEFAULT_MARGIN_X,\n marginRight: DEFAULT_MARGIN_X,\n overflow: 'hidden',\n flexDirection: 'row',\n position:'absolute'\n },\n});\n\nexport default ZSBottomButton;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/ZSBottomButton/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { ActivityIndicator, Keyboard, Platform, StyleSheet, TouchableOpacity, TouchableOpacityProps } from \"react-native\";\nimport Animated, { interpolate, useAnimatedStyle, useSharedValue, withTiming } from \"react-native-reanimated\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\n\nconst DEFAULT_MARGIN_X = 20;\nconst DEFAULT_MARGIN_BOTTOM = 20;\nconst DEFAULT_BORDER_RADIUS = 14;\nconst DURATION = { duration: 250 };\n\ninterface Props {\n loadingComponent?: React.ReactNode;\n height?: number;\n disabled?: boolean;\n primaryOnPress: () => Promise<any>;\n primaryLabelComponent: React.ReactNode;\n primaryButtonStyle?: TouchableOpacityProps['style'];\n secondaryOnPress?: () => void;\n secondaryLabelComponent?: React.ReactNode;\n secondaryButtonStyle?: TouchableOpacityProps['style'];\n}\n\nfunction ZSBottomButton({\n loadingComponent = <ActivityIndicator />,\n height = 55,\n disabled = false,\n primaryLabelComponent,\n primaryOnPress,\n primaryButtonStyle = {},\n secondaryOnPress,\n secondaryLabelComponent,\n secondaryButtonStyle = {}\n}: Props) {\n const isKeyboardVisible = useSharedValue(0);\n const keyboardHeight = useSharedValue(0);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const { bottom } = useSafeAreaInsets();\n\n const handlePress = useCallback(async () => {\n setIsLoading(true);\n try {\n await primaryOnPress();\n } finally {\n setIsLoading(false);\n }\n }, [primaryOnPress]);\n\n // ** 소프트 키보드 핸들링\n useEffect(() => {\n const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\n const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\n const keyboardShowSubscription = Keyboard.addListener(showEvent, (event) => {\n keyboardHeight.value = event.endCoordinates.height - bottom;\n isKeyboardVisible.value = withTiming(1, { duration: 200 });\n });\n\n const keyboardHideSubscription = Keyboard.addListener(hideEvent, () => {\n isKeyboardVisible.value = withTiming(0, { duration: 200 });\n });\n\n return () => {\n keyboardShowSubscription.remove();\n keyboardHideSubscription.remove();\n };\n }, [isKeyboardVisible, keyboardHeight]);\n\n const animatedStyle = useAnimatedStyle(() => {\n const getBottom = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_MARGIN_BOTTOM,Platform.OS === 'ios' ? keyboardHeight.value : 0],\n 'clamp',\n );\n\n const getMargin = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_MARGIN_X, 0],\n 'clamp',\n );\n\n const getRadius = interpolate(\n isKeyboardVisible.value,\n [0, 1],\n [DEFAULT_BORDER_RADIUS, 0],\n 'clamp',\n );\n\n return {\n marginBottom: withTiming(getBottom, DURATION),\n marginLeft: withTiming(getMargin, DURATION),\n marginRight: withTiming(getMargin, DURATION),\n borderRadius: withTiming(getRadius, DURATION),\n };\n });\n\n return (\n <Animated.View style={[styles.container, animatedStyle]}>\n {secondaryLabelComponent && (\n <TouchableOpacity\n activeOpacity={0.7}\n style={[secondaryButtonStyle, { height }, styles.touchSecondaryContainer]}\n onPress={secondaryOnPress}\n >\n {secondaryLabelComponent}\n </TouchableOpacity>\n )}\n\n <TouchableOpacity\n activeOpacity={0.7}\n style={[primaryButtonStyle, { height }, styles.touchContainer]}\n onPress={handlePress}\n disabled={disabled || isLoading}\n >\n {isLoading ? loadingComponent : primaryLabelComponent}\n </TouchableOpacity>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n touchContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n flex: 2,\n },\n touchSecondaryContainer: {\n justifyContent: 'center',\n alignItems: 'center',\n flex: 1,\n },\n container: {\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: DEFAULT_BORDER_RADIUS,\n marginBottom: DEFAULT_MARGIN_BOTTOM,\n marginLeft: DEFAULT_MARGIN_X,\n marginRight: DEFAULT_MARGIN_X,\n overflow: 'hidden',\n flexDirection: 'row',\n },\n});\n\nexport default ZSBottomButton;\n"]}
@@ -18,7 +18,7 @@ function ZSContainer({ backgroundColor, isLoader = false, statusBarColor, barSty
18
18
  {!isDelayed && (<KeyboardAvoidingView style={[styles.flex1, styles.fullWidth]} behavior={behavior} keyboardVerticalOffset={keyboardVerticalOffset}>
19
19
  {topComponent && topComponent}
20
20
 
21
- {isLoader ? (loadingComponent) : isScrollView ? (<ScrollViewAtom ref={scrollViewRef} style={styles.fullWidth} bounces={false} contentContainerStyle={styles.scrollContainerStyle} showsVerticalScrollIndicator={showsVerticalScrollIndicator} keyboardShouldPersistTaps="handled" automaticallyAdjustKeyboardInsets={automaticallyAdjustKeyboardInsets}>
21
+ {isLoader ? (loadingComponent) : isScrollView ? (<ScrollViewAtom ref={scrollViewRef} style={[styles.flex1, styles.fullWidth]} bounces={false} contentContainerStyle={styles.scrollContainerStyle} showsVerticalScrollIndicator={showsVerticalScrollIndicator} keyboardShouldPersistTaps="handled" automaticallyAdjustKeyboardInsets={automaticallyAdjustKeyboardInsets}>
22
22
  <ViewAtom style={[styles.flex1, styles.fullWidth, props.style]}>
23
23
  {props.children}
24
24
  </ViewAtom>
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/ZSContainer/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactNode, useState, useEffect } from 'react';\nimport { ViewProps, KeyboardAvoidingView, StatusBar, StyleSheet, Dimensions, ActivityIndicator, ScrollView } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport ViewAtom from '../atoms/ViewAtom';\nimport ScrollViewAtom from '../atoms/ScrollViewAtom';\nimport { useTheme } from '../../model/useThemeProvider';\n\ntype ZSContainerProps = ViewProps & {\n backgroundColor?: string;\n isLoader?: boolean;\n statusBarColor?: string;\n barStyle?: 'light-content' | 'dark-content';\n edges?: Array<'top' | 'right' | 'bottom' | 'left'>;\n isScrollView?: boolean;\n scrollViewRef?: React.RefObject<ScrollView>;\n topComponent?: ReactNode;\n bottomComponent?: ReactNode;\n showsVerticalScrollIndicator?: boolean;\n loadingComponent?: React.ReactNode;\n keyboardVerticalOffset?: number;\n behavior?: \"padding\" | \"height\" | \"position\" | undefined;\n automaticallyAdjustKeyboardInsets?: boolean;\n};\n\nfunction ZSContainer({\n backgroundColor,\n isLoader = false,\n statusBarColor,\n barStyle = 'dark-content',\n edges = ['top', 'bottom'],\n isScrollView = true,\n scrollViewRef,\n topComponent,\n bottomComponent,\n showsVerticalScrollIndicator = true,\n loadingComponent = <ActivityIndicator />,\n keyboardVerticalOffset,\n behavior,\n automaticallyAdjustKeyboardInsets = true,\n ...props\n}: ZSContainerProps) {\n const { palette } = useTheme(); // 테마 사용\n const [isDelayed, setIsDelayed] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsDelayed(false);\n }, 200);\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <SafeAreaView style={[{ backgroundColor: backgroundColor || palette.background.base }, styles.flex1, styles.fullWidth]} edges={edges}>\n\n {!isDelayed && (\n <KeyboardAvoidingView\n style={[styles.flex1, styles.fullWidth]}\n behavior={behavior}\n keyboardVerticalOffset={keyboardVerticalOffset}\n >\n {topComponent && topComponent}\n\n {isLoader ? (\n loadingComponent\n ) : isScrollView ? (\n <ScrollViewAtom\n ref={scrollViewRef}\n style={styles.fullWidth}\n bounces={false}\n contentContainerStyle={styles.scrollContainerStyle}\n showsVerticalScrollIndicator={showsVerticalScrollIndicator}\n keyboardShouldPersistTaps=\"handled\"\n automaticallyAdjustKeyboardInsets={automaticallyAdjustKeyboardInsets}\n >\n <ViewAtom style={[styles.flex1, styles.fullWidth, props.style]}>\n {props.children}\n </ViewAtom>\n </ScrollViewAtom>\n ) : (\n <ViewAtom style={[styles.flex1, styles.fullWidth, props.style]}>{props.children}</ViewAtom>\n )}\n\n {!isLoader && bottomComponent && bottomComponent}\n </KeyboardAvoidingView>\n )}\n\n <StatusBar barStyle={barStyle} backgroundColor={statusBarColor || palette.background.base} />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n flex1: { flex: 1 },\n fullWidth: { width: Dimensions.get('window').width },\n scrollContainerStyle: { flexGrow: 1, alignItems: 'center', width: Dimensions.get('window').width },\n});\n\nexport default ZSContainer;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/ZSContainer/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactNode, useState, useEffect } from 'react';\nimport { ViewProps, KeyboardAvoidingView, StatusBar, StyleSheet, Dimensions, ActivityIndicator, ScrollView } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport ViewAtom from '../atoms/ViewAtom';\nimport ScrollViewAtom from '../atoms/ScrollViewAtom';\nimport { useTheme } from '../../model/useThemeProvider';\n\ntype ZSContainerProps = ViewProps & {\n backgroundColor?: string;\n isLoader?: boolean;\n statusBarColor?: string;\n barStyle?: 'light-content' | 'dark-content';\n edges?: Array<'top' | 'right' | 'bottom' | 'left'>;\n isScrollView?: boolean;\n scrollViewRef?: React.RefObject<ScrollView>;\n topComponent?: ReactNode;\n bottomComponent?: ReactNode;\n showsVerticalScrollIndicator?: boolean;\n loadingComponent?: React.ReactNode;\n keyboardVerticalOffset?: number;\n behavior?: \"padding\" | \"height\" | \"position\" | undefined;\n automaticallyAdjustKeyboardInsets?: boolean;\n};\n\nfunction ZSContainer({\n backgroundColor,\n isLoader = false,\n statusBarColor,\n barStyle = 'dark-content',\n edges = ['top', 'bottom'],\n isScrollView = true,\n scrollViewRef,\n topComponent,\n bottomComponent,\n showsVerticalScrollIndicator = true,\n loadingComponent = <ActivityIndicator />,\n keyboardVerticalOffset,\n behavior,\n automaticallyAdjustKeyboardInsets = true,\n ...props\n}: ZSContainerProps) {\n const { palette } = useTheme(); // 테마 사용\n const [isDelayed, setIsDelayed] = useState(true);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsDelayed(false);\n }, 200);\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <SafeAreaView style={[{ backgroundColor: backgroundColor || palette.background.base }, styles.flex1, styles.fullWidth]} edges={edges}>\n\n {!isDelayed && (\n <KeyboardAvoidingView\n style={[styles.flex1, styles.fullWidth]}\n behavior={behavior}\n keyboardVerticalOffset={keyboardVerticalOffset}\n >\n {topComponent && topComponent}\n\n {isLoader ? (\n loadingComponent\n ) : isScrollView ? (\n <ScrollViewAtom\n ref={scrollViewRef}\n style={[styles.flex1, styles.fullWidth]}\n bounces={false}\n contentContainerStyle={styles.scrollContainerStyle}\n showsVerticalScrollIndicator={showsVerticalScrollIndicator}\n keyboardShouldPersistTaps=\"handled\"\n automaticallyAdjustKeyboardInsets={automaticallyAdjustKeyboardInsets}\n >\n <ViewAtom style={[styles.flex1, styles.fullWidth, props.style]}>\n {props.children}\n </ViewAtom>\n </ScrollViewAtom>\n ) : (\n <ViewAtom style={[styles.flex1, styles.fullWidth, props.style]}>{props.children}</ViewAtom>\n )}\n\n {!isLoader && bottomComponent && bottomComponent}\n </KeyboardAvoidingView>\n )}\n\n <StatusBar barStyle={barStyle} backgroundColor={statusBarColor || palette.background.base} />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n flex1: { flex: 1 },\n fullWidth: { width: Dimensions.get('window').width },\n scrollContainerStyle: { flexGrow: 1, alignItems: 'center', width: Dimensions.get('window').width },\n});\n\nexport default ZSContainer;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSTextField/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EAAqD,cAAc,EAAwB,MAAM,cAAc,CAAC;AAIvH,OAAO,EAAE,WAAW,EAA2B,MAAM,aAAa,CAAC;AAKnE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAIzD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,iBAAS,WAAW,CAAC,EACnB,IAAe,EACf,MAAkB,EAClB,KAAK,EACL,YAAY,EACZ,KAAqB,EACrB,UAAsB,EACtB,gBAA4B,EAC5B,YAAsB,EACtB,YAAsB,EACtB,WAAiB,EACjB,WAAuB,EACvB,UAAsB,EACtB,UAAsB,EACtB,YAAiB,EACjB,iBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,QAAoB,EACpB,aAAa,EACb,QAAgB,EAChB,gBAAuB,EACvB,UAAkB,GACnB,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CA2I9B;;AAED,wBAAuC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSTextField/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EAAqD,cAAc,EAAwB,MAAM,cAAc,CAAC;AAIvH,OAAO,EAAE,WAAW,EAA2B,MAAM,aAAa,CAAC;AAKnE,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAIzD,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,iBAAS,WAAW,CAAC,EACnB,IAAe,EACf,MAAkB,EAClB,KAAK,EACL,YAAY,EACZ,KAAqB,EACrB,UAAsB,EACtB,gBAA4B,EAC5B,YAAsB,EACtB,YAAsB,EACtB,WAAiB,EACjB,WAAuB,EACvB,UAAsB,EACtB,UAAsB,EACtB,YAAiB,EACjB,iBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,QAAoB,EACpB,aAAa,EACb,QAAgB,EAChB,gBAAuB,EACvB,UAAkB,GACnB,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CA4I9B;;AAED,wBAAuC"}