@0610studio/zs-ui 0.16.2 → 0.17.1

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 (85) hide show
  1. package/app.plugin.js +39 -0
  2. package/build/ZsUiModule.d.ts.map +1 -1
  3. package/build/assets/SvgCheck.d.ts.map +1 -1
  4. package/build/assets/SvgExclamation.d.ts.map +1 -1
  5. package/build/assets/SvgX.d.ts.map +1 -1
  6. package/build/context/OverlayContext.d.ts +0 -1
  7. package/build/context/OverlayContext.d.ts.map +1 -1
  8. package/build/context/OverlayContext.js.map +1 -1
  9. package/build/context/ThemeContext.d.ts.map +1 -1
  10. package/build/context/ThemeContext.js +68 -35
  11. package/build/context/ThemeContext.js.map +1 -1
  12. package/build/model/globalOverlay.d.ts.map +1 -1
  13. package/build/model/globalOverlay.js.map +1 -1
  14. package/build/model/types.d.ts +1 -1
  15. package/build/model/types.d.ts.map +1 -1
  16. package/build/model/useFoldingState.d.ts.map +1 -1
  17. package/build/model/useFoldingState.js +25 -16
  18. package/build/model/useFoldingState.js.map +1 -1
  19. package/build/model/useKeyboard.d.ts.map +1 -1
  20. package/build/model/useOverlay.d.ts +0 -1
  21. package/build/model/useOverlay.d.ts.map +1 -1
  22. package/build/model/useOverlay.js.map +1 -1
  23. package/build/model/useStyleSheetCreate.d.ts.map +1 -1
  24. package/build/model/utils.d.ts.map +1 -1
  25. package/build/model/utils.js.map +1 -1
  26. package/build/overlay/BottomSheetOverlay/index.d.ts.map +1 -1
  27. package/build/overlay/BottomSheetOverlay/index.js +8 -2
  28. package/build/overlay/BottomSheetOverlay/index.js.map +1 -1
  29. package/build/overlay/Modality/index.d.ts.map +1 -1
  30. package/build/overlay/Modality/index.js +0 -3
  31. package/build/overlay/Modality/index.js.map +1 -1
  32. package/build/overlay/PopOver/PopOverButton.js.map +1 -1
  33. package/build/overlay/PopOver/PopOverMenu.d.ts +2 -2
  34. package/build/overlay/PopOver/PopOverMenu.d.ts.map +1 -1
  35. package/build/overlay/PopOver/PopOverMenu.js.map +1 -1
  36. package/build/overlay/SnackbarNotify/index.d.ts +1 -1
  37. package/build/overlay/SnackbarNotify/index.d.ts.map +1 -1
  38. package/build/overlay/SnackbarNotify/index.js.map +1 -1
  39. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts +1 -1
  40. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts.map +1 -1
  41. package/build/overlay/ZSPortal/index.js.map +1 -1
  42. package/build/theme/palette.d.ts +4 -4
  43. package/build/theme/palette.d.ts.map +1 -1
  44. package/build/theme/palette.js +1 -1
  45. package/build/theme/palette.js.map +1 -1
  46. package/build/ui/ZSAboveKeyboard/index.d.ts +0 -1
  47. package/build/ui/ZSAboveKeyboard/index.d.ts.map +1 -1
  48. package/build/ui/ZSBlockButton/index.d.ts +0 -1
  49. package/build/ui/ZSBlockButton/index.d.ts.map +1 -1
  50. package/build/ui/ZSBlockButton/index.js +9 -1
  51. package/build/ui/ZSBlockButton/index.js.map +1 -1
  52. package/build/ui/ZSContainer/index.d.ts +12 -12
  53. package/build/ui/ZSContainer/index.d.ts.map +1 -1
  54. package/build/ui/ZSContainer/index.js.map +1 -1
  55. package/build/ui/ZSPressable/index.d.ts.map +1 -1
  56. package/build/ui/ZSPressable/index.js +0 -1
  57. package/build/ui/ZSPressable/index.js.map +1 -1
  58. package/build/ui/ZSRadioGroup/index.js.map +1 -1
  59. package/build/ui/ZSSkeleton/index.d.ts +1 -1
  60. package/build/ui/ZSSkeleton/index.d.ts.map +1 -1
  61. package/build/ui/ZSSkeleton/index.js +0 -1
  62. package/build/ui/ZSSkeleton/index.js.map +1 -1
  63. package/build/ui/ZSSkeletonBox/index.d.ts.map +1 -1
  64. package/build/ui/ZSSkeletonBox/index.js +0 -1
  65. package/build/ui/ZSSkeletonBox/index.js.map +1 -1
  66. package/build/ui/ZSSwitch/index.d.ts.map +1 -1
  67. package/build/ui/ZSSwitch/index.js +17 -20
  68. package/build/ui/ZSSwitch/index.js.map +1 -1
  69. package/build/ui/ZSText/index.d.ts.map +1 -1
  70. package/build/ui/ZSText/index.js +14 -1
  71. package/build/ui/ZSText/index.js.map +1 -1
  72. package/build/ui/ZSTextField/index.d.ts +0 -1
  73. package/build/ui/ZSTextField/index.d.ts.map +1 -1
  74. package/build/ui/ZSTextField/index.js +41 -47
  75. package/build/ui/ZSTextField/index.js.map +1 -1
  76. package/build/ui/ZSTextField/ui/ButtonClose.d.ts +4 -5
  77. package/build/ui/ZSTextField/ui/ButtonClose.d.ts.map +1 -1
  78. package/build/ui/ZSTextField/ui/ButtonClose.js.map +1 -1
  79. package/build/ui/ZSTextField/ui/ErrorComponent.d.ts +0 -1
  80. package/build/ui/ZSTextField/ui/ErrorComponent.d.ts.map +1 -1
  81. package/build/ui/atoms/AnimatedWrapper.d.ts +1 -2
  82. package/build/ui/atoms/AnimatedWrapper.d.ts.map +1 -1
  83. package/build/ui/atoms/AnimatedWrapper.js +12 -4
  84. package/build/ui/atoms/AnimatedWrapper.js.map +1 -1
  85. package/package.json +34 -21
@@ -107,7 +107,6 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
107
107
  };
108
108
  }, [bottomSheetVisible]);
109
109
  const animatedStyles = useAnimatedStyle(() => {
110
- 'worklet';
111
110
  return {
112
111
  transform: [
113
112
  { translateY: translateY.value },
@@ -124,13 +123,20 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
124
123
  }, [setBottomSheetVisible]);
125
124
  const handleSheetLayout = useCallback((event) => {
126
125
  const nextHeight = Math.round(event.nativeEvent.layout.height);
126
+ if (nextHeight > 0) {
127
+ const nextCloseOffset = nextHeight + 100;
128
+ latestCloseOffsetRef.current = nextCloseOffset;
129
+ if (bottomSheetVisible) {
130
+ closingOffsetRef.current = nextCloseOffset;
131
+ }
132
+ }
127
133
  setSheetHeight((prevHeight) => {
128
134
  if (Math.abs(prevHeight - nextHeight) <= 1) {
129
135
  return prevHeight;
130
136
  }
131
137
  return nextHeight;
132
138
  });
133
- }, []);
139
+ }, [bottomSheetVisible]);
134
140
  const handlePanResponderGrant = useCallback(() => {
135
141
  dismissKeyboard();
136
142
  isGesturing.value = true;
@@ -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 'worklet';\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 setSheetHeight((prevHeight) => {\n if (Math.abs(prevHeight - nextHeight) <= 1) {\n return prevHeight;\n }\n\n return nextHeight;\n });\n }, []);\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":"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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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAWnD,iBAAS,QAAQ,CAAC,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,EAAE;IACD,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,oBAAoB,EAAE,OAAO,CAAC;CAC/B,4BAmHA;AA6BD,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/Modality/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAWnD,iBAAS,QAAQ,CAAC,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,EAAE;IACD,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,oBAAoB,EAAE,OAAO,CAAC;CAC/B,4BAgHA;AA6BD,eAAe,QAAQ,CAAC"}
@@ -50,7 +50,6 @@ function Modality({ foldableSingleScreen, modalityComponent, }) {
50
50
  }, [modalityVisible, insets.top]);
51
51
  // 부모 스크린
52
52
  const backScreenAnimatedStyle = useAnimatedStyle(() => {
53
- 'worklet';
54
53
  return {
55
54
  transform: [
56
55
  { scaleX: backScale.value },
@@ -62,7 +61,6 @@ function Modality({ foldableSingleScreen, modalityComponent, }) {
62
61
  });
63
62
  // 아래에서 등장하는 Modality 화면
64
63
  const mainScreenAnimatedStyle = useAnimatedStyle(() => {
65
- 'worklet';
66
64
  return {
67
65
  transform: [
68
66
  { translateY: mainTranslateY.value }
@@ -71,7 +69,6 @@ function Modality({ foldableSingleScreen, modalityComponent, }) {
71
69
  });
72
70
  // 배경 불투명도 스타일
73
71
  const backgroundAnimatedStyle = useAnimatedStyle(() => {
74
- 'worklet';
75
72
  return {
76
73
  opacity: backgroundOpacity.value
77
74
  };
@@ -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 'worklet';\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 'worklet';\n return {\n transform: [\n { translateY: mainTranslateY.value }\n ]\n };\n });\n\n // 배경 불투명도 스타일\n const backgroundAnimatedStyle = useAnimatedStyle(() => {\n 'worklet';\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.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 +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;gBAC9C,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;aACxE;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,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,5 +1,5 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  import { PopOverMenuProps } from "../../model/types";
3
- declare function PopOverMenu({ px, py, component }: PopOverMenuProps): JSX.Element | null;
3
+ declare function PopOverMenu({ px, py, component }: PopOverMenuProps): React.ReactElement | null;
4
4
  export default PopOverMenu;
5
5
  //# sourceMappingURL=PopOverMenu.d.ts.map
@@ -1 +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;AAOrD,iBAAS,WAAW,CAAC,EACnB,EAAE,EACF,EAAE,EACF,SAAS,EACV,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAyFvC;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"PopOverMenu.d.ts","sourceRoot":"","sources":["../../../src/overlay/PopOver/PopOverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAKxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAOrD,iBAAS,WAAW,CAAC,EACnB,EAAE,EACF,EAAE,EACF,SAAS,EACV,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAyF9C;AAED,eAAe,WAAW,CAAC"}
@@ -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): JSX.Element | 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,7 +1,7 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { CustomSnackbarProps } from "../../model/types";
3
3
  declare const SnackbarNotify: ({ customSnackbar }: {
4
- customSnackbar?: ((props: CustomSnackbarProps) => ReactNode) | undefined;
4
+ customSnackbar?: (props: CustomSnackbarProps) => ReactNode;
5
5
  }) => React.JSX.Element | null;
6
6
  export default SnackbarNotify;
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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;AAKxD,QAAA,MAAM,cAAc;8BAGO,mBAAmB,KAAK,SAAS;8BAyB3D,CAAC;AAWF,eAAe,cAAc,CAAC"}
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;AAKxD,QAAA,MAAM,cAAc,GAAI,oBAErB;IACD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,SAAS,CAAA;CAC3D,6BAwBA,CAAC;AAWF,eAAe,cAAc,CAAC"}
@@ -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,CAAC,CAEN;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":"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,7 +1,7 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { CustomSnackbarProps, SnackItem } from "../../../model/types";
3
3
  declare const Snackbar: ({ customSnackbar, snackItem, hideSnackBar, }: {
4
- customSnackbar?: ((props: CustomSnackbarProps) => ReactNode) | undefined;
4
+ customSnackbar?: (props: CustomSnackbarProps) => ReactNode;
5
5
  snackItem: SnackItem;
6
6
  hideSnackBar: (index: number) => void;
7
7
  }) => React.JSX.Element;
@@ -1 +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;8BAKa,mBAAmB,KAAK,SAAS;eAC/C,SAAS;0BACE,MAAM,KAAK,IAAI;uBA0CtC,CAAC;AA0BF,eAAe,QAAQ,CAAC"}
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,GAAI,8CAIf;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,sBAyCA,CAAC;AA0BF,eAAe,QAAQ,CAAC"}
@@ -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"]}
@@ -71,11 +71,11 @@ export interface ThemeFactoryConfig {
71
71
  * @returns 재정의된 SEMANTIC_LIGHT_COLORS와 SEMANTIC_DARK_COLORS를 포함한 팩토리 함수
72
72
  */
73
73
  export declare function themeFactory(config?: ThemeFactoryConfig): ({ mode, themeColors, }?: {
74
- mode?: "light" | "dark" | undefined;
74
+ mode?: "light" | "dark";
75
75
  themeColors?: {
76
- light?: Theme | undefined;
77
- dark?: Theme | undefined;
78
- } | undefined;
76
+ light?: Theme;
77
+ dark?: Theme;
78
+ };
79
79
  }) => Theme;
80
80
  export default function palette({ mode, themeColors, }?: {
81
81
  mode?: 'light' | 'dark';
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDxB,CAAC;AAuMF,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,kBAAuB;;;;;;MAgDjD,KAAK,CAiGf;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAc,EACd,WAAgB,GACjB,GAAE;IACD,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAC1C,GAAG,KAAK,CAsBb"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDxB,CAAC;AAuMF,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,kBAAuB,IA0C5B,yBAG3B;IACD,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAC1C,KAAG,KAAK,CAiGf;AAED,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAC9B,IAAc,EACd,WAAgB,GACjB,GAAE;IACD,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAC1C,GAAG,KAAK,CAsBb"}
@@ -1,6 +1,6 @@
1
1
  import { BLACK, PRIMITIVE_BLUE, PRIMITIVE_GREEN, PRIMITIVE_GREY, PRIMITIVE_GREY_DARK, PRIMITIVE_ORANGE, PRIMITIVE_RED, PRIMITIVE_TEAL, PRIMITIVE_YELLOW, SHADOW_COLORS, WHITE } from "./primitive";
2
2
  export const transparency = {
3
- '0%': '00',
3
+ '0%': '00', // 완전 투명
4
4
  '2%': '05',
5
5
  '4%': '0A',
6
6
  '6%': '0F',
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"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","sourcesContent":["import { BLACK, PRIMITIVE_BLUE, PRIMITIVE_GREEN, PRIMITIVE_GREY, PRIMITIVE_GREY_DARK, PRIMITIVE_ORANGE, PRIMITIVE_RED, PRIMITIVE_TEAL, PRIMITIVE_YELLOW, SHADOW_COLORS, WHITE } from \"./primitive\";\nimport { Theme, ColorPalette, ColorPaletteExtend } from \"./types\";\n\nexport const transparency = {\n '0%': '00', // 완전 투명\n '2%': '05',\n '4%': '0A',\n '6%': '0F',\n '8%': '14',\n '10%': '1A',\n '12%': '1F',\n '14%': '24',\n '16%': '29',\n '18%': '2E',\n '20%': '33',\n '22%': '38',\n '24%': '3D',\n '26%': '42',\n '28%': '47',\n '30%': '4D',\n '32%': '52',\n '34%': '57',\n '36%': '5C',\n '38%': '61',\n '40%': '66',\n '42%': '6B',\n '44%': '70',\n '46%': '75',\n '48%': '7A',\n '50%': '80',\n '52%': '85',\n '54%': '8A',\n '56%': '8F',\n '58%': '94',\n '60%': '99',\n '62%': '9E',\n '64%': 'A3',\n '66%': 'A8',\n '68%': 'AD',\n '70%': 'B3',\n '72%': 'B8',\n '74%': 'BD',\n '76%': 'C2',\n '78%': 'C7',\n '80%': 'CC',\n '82%': 'D1',\n '84%': 'D6',\n '86%': 'DB',\n '88%': 'E0',\n '90%': 'E6',\n '92%': 'EB',\n '94%': 'F0',\n '96%': 'F5',\n '98%': 'FA',\n '100%': 'FF' // 완전 불투명\n};\n\nconst MODAL_BG_COLOR = {\n light: PRIMITIVE_GREY[90] + transparency['52%'],\n dark: PRIMITIVE_GREY[90] + transparency['40%'],\n}\n\nconst SEMANTIC_LIGHT_COLORS = {\n primary: {\n ...PRIMITIVE_ORANGE,\n lighter: PRIMITIVE_ORANGE[20],\n light: PRIMITIVE_ORANGE[30],\n main: PRIMITIVE_ORANGE[50],\n dark: PRIMITIVE_ORANGE[60],\n darker: PRIMITIVE_ORANGE[70],\n },\n secondary: {\n ...PRIMITIVE_TEAL,\n lighter: PRIMITIVE_TEAL[20],\n light: PRIMITIVE_TEAL[30],\n main: PRIMITIVE_TEAL[50],\n dark: PRIMITIVE_TEAL[60],\n darker: PRIMITIVE_TEAL[70],\n },\n danger: {\n ...PRIMITIVE_RED,\n lighter: PRIMITIVE_RED[20],\n light: PRIMITIVE_RED[30],\n main: PRIMITIVE_RED[50],\n dark: PRIMITIVE_RED[60],\n darker: PRIMITIVE_RED[70],\n },\n warning: {\n ...PRIMITIVE_YELLOW,\n lighter: PRIMITIVE_YELLOW[20],\n light: PRIMITIVE_YELLOW[30],\n main: PRIMITIVE_YELLOW[50],\n dark: PRIMITIVE_YELLOW[60],\n darker: PRIMITIVE_YELLOW[70],\n },\n success: {\n ...PRIMITIVE_GREEN,\n lighter: PRIMITIVE_GREEN[20],\n light: PRIMITIVE_GREEN[30],\n main: PRIMITIVE_GREEN[50],\n dark: PRIMITIVE_GREEN[60],\n darker: PRIMITIVE_GREEN[70],\n },\n information: {\n ...PRIMITIVE_BLUE,\n lighter: PRIMITIVE_BLUE[20],\n light: PRIMITIVE_BLUE[30],\n main: PRIMITIVE_BLUE[50],\n dark: PRIMITIVE_BLUE[60],\n darker: PRIMITIVE_BLUE[70],\n },\n grey: {\n ...PRIMITIVE_GREY,\n lighter: PRIMITIVE_GREY[20],\n light: PRIMITIVE_GREY[30],\n main: PRIMITIVE_GREY[20],\n dark: PRIMITIVE_GREY[60],\n darker: PRIMITIVE_GREY[70],\n },\n};\n\nconst SEMANTIC_DARK_COLORS = {\n primary: {\n ...SEMANTIC_LIGHT_COLORS.primary,\n lighter: PRIMITIVE_ORANGE[20],\n light: PRIMITIVE_ORANGE[30],\n main: PRIMITIVE_ORANGE[50],\n dark: PRIMITIVE_ORANGE[60],\n darker: PRIMITIVE_ORANGE[70],\n },\n secondary: {\n ...SEMANTIC_LIGHT_COLORS.secondary,\n lighter: PRIMITIVE_TEAL[20],\n light: PRIMITIVE_TEAL[30],\n main: PRIMITIVE_TEAL[50],\n dark: PRIMITIVE_TEAL[60],\n darker: PRIMITIVE_TEAL[70],\n },\n danger: {\n ...SEMANTIC_LIGHT_COLORS.danger,\n lighter: PRIMITIVE_RED[20],\n light: PRIMITIVE_RED[30],\n main: PRIMITIVE_RED[50],\n dark: PRIMITIVE_RED[60],\n darker: PRIMITIVE_RED[70],\n },\n warning: {\n ...SEMANTIC_LIGHT_COLORS.warning,\n lighter: PRIMITIVE_YELLOW[20],\n light: PRIMITIVE_YELLOW[30],\n main: PRIMITIVE_YELLOW[50],\n dark: PRIMITIVE_YELLOW[60],\n darker: PRIMITIVE_YELLOW[70],\n },\n success: {\n ...SEMANTIC_LIGHT_COLORS.success,\n lighter: PRIMITIVE_GREEN[20],\n light: PRIMITIVE_GREEN[30],\n main: PRIMITIVE_GREEN[50],\n dark: PRIMITIVE_GREEN[60],\n darker: PRIMITIVE_GREEN[70],\n },\n information: {\n ...SEMANTIC_LIGHT_COLORS.information,\n lighter: PRIMITIVE_BLUE[20],\n light: PRIMITIVE_BLUE[30],\n main: PRIMITIVE_BLUE[50],\n dark: PRIMITIVE_BLUE[60],\n darker: PRIMITIVE_BLUE[70],\n },\n grey: {\n ...PRIMITIVE_GREY_DARK,\n lighter: PRIMITIVE_GREY_DARK[20],\n light: PRIMITIVE_GREY_DARK[30],\n main: PRIMITIVE_GREY_DARK[20],\n dark: PRIMITIVE_GREY_DARK[60],\n darker: PRIMITIVE_GREY_DARK[70],\n },\n};\n\nconst MAIN_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n secondary: SEMANTIC_LIGHT_COLORS.secondary.main,\n danger: SEMANTIC_LIGHT_COLORS.danger.main,\n warning: SEMANTIC_LIGHT_COLORS.warning.main,\n success: SEMANTIC_LIGHT_COLORS.success.main,\n information: SEMANTIC_LIGHT_COLORS.information.main,\n grey: SEMANTIC_LIGHT_COLORS.grey.main\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n secondary: SEMANTIC_DARK_COLORS.secondary.main,\n danger: SEMANTIC_DARK_COLORS.danger.main,\n warning: SEMANTIC_DARK_COLORS.warning.main,\n success: SEMANTIC_DARK_COLORS.success.main,\n information: SEMANTIC_DARK_COLORS.information.main,\n grey: SEMANTIC_DARK_COLORS.grey.main\n }\n}\n\nconst SEMANTIC_TEXT_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n base: SEMANTIC_LIGHT_COLORS.grey[80],\n secondary: SEMANTIC_LIGHT_COLORS.grey[60],\n disabled: SEMANTIC_LIGHT_COLORS.grey[50],\n danger: SEMANTIC_LIGHT_COLORS.danger[60],\n warning: SEMANTIC_LIGHT_COLORS.warning[60],\n success: SEMANTIC_LIGHT_COLORS.success[60],\n information: SEMANTIC_LIGHT_COLORS.information[60],\n white: WHITE,\n black: BLACK,\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n base: SEMANTIC_DARK_COLORS.grey[90],\n secondary: SEMANTIC_DARK_COLORS.grey[70],\n disabled: SEMANTIC_DARK_COLORS.grey[50],\n danger: SEMANTIC_DARK_COLORS.danger[30],\n warning: SEMANTIC_DARK_COLORS.warning[30],\n success: SEMANTIC_DARK_COLORS.success[30],\n information: SEMANTIC_DARK_COLORS.information[30],\n white: WHITE,\n black: BLACK,\n },\n};\n\nconst SEMANTIC_BACKGROUND_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n layer1: SEMANTIC_LIGHT_COLORS.grey[5],\n layer2: SEMANTIC_LIGHT_COLORS.grey[20],\n neutral: SEMANTIC_LIGHT_COLORS.grey[30],\n base: WHITE,\n danger: SEMANTIC_LIGHT_COLORS.danger[5],\n warning: SEMANTIC_LIGHT_COLORS.warning[5],\n success: SEMANTIC_LIGHT_COLORS.success[5],\n information: SEMANTIC_LIGHT_COLORS.information[5],\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n layer1: SEMANTIC_DARK_COLORS.grey[5],\n layer2: SEMANTIC_DARK_COLORS.grey[20],\n neutral: SEMANTIC_DARK_COLORS.grey[30],\n base: BLACK,\n danger: SEMANTIC_DARK_COLORS.danger[80],\n warning: SEMANTIC_DARK_COLORS.warning[80],\n success: SEMANTIC_DARK_COLORS.success[80],\n information: SEMANTIC_DARK_COLORS.information[80],\n },\n};\n\n// ThemeFactory 타입 정의\nexport interface ThemeFactoryColors {\n primary?: Partial<ColorPaletteExtend>;\n secondary?: Partial<ColorPalette>;\n danger?: Partial<ColorPalette>;\n warning?: Partial<ColorPalette>;\n success?: Partial<ColorPalette>;\n information?: Partial<ColorPalette>;\n grey?: Partial<ColorPalette>;\n}\n\nexport interface ThemeFactoryConfig {\n light?: ThemeFactoryColors;\n dark?: ThemeFactoryColors;\n}\n\n/**\n * 테마 팩토리 함수 - SEMANTIC_LIGHT_COLORS와 SEMANTIC_DARK_COLORS를 재정의할 수 있는 기능을 제공합니다.\n * @param config - 라이트/다크 모드별로 색상을 재정의할 수 있는 설정 객체\n * @returns 재정의된 SEMANTIC_LIGHT_COLORS와 SEMANTIC_DARK_COLORS를 포함한 팩토리 함수\n */\nexport function themeFactory(config: ThemeFactoryConfig = {}) {\n // 기본 색상들을 깊은 복사로 생성\n const createCustomLightColors = (): typeof SEMANTIC_LIGHT_COLORS => {\n const customColors = { ...SEMANTIC_LIGHT_COLORS };\n \n if (config.light) {\n Object.keys(config.light).forEach((key) => {\n const colorKey = key as keyof ThemeFactoryColors;\n if (config.light?.[colorKey]) {\n customColors[colorKey] = {\n ...customColors[colorKey],\n ...config.light[colorKey],\n } as any;\n }\n });\n }\n \n return customColors;\n };\n\n const createCustomDarkColors = (): typeof SEMANTIC_DARK_COLORS => {\n const customColors = { ...SEMANTIC_DARK_COLORS };\n \n if (config.dark) {\n Object.keys(config.dark).forEach((key) => {\n const colorKey = key as keyof ThemeFactoryColors;\n if (config.dark?.[colorKey]) {\n customColors[colorKey] = {\n ...customColors[colorKey],\n ...config.dark[colorKey],\n } as any;\n }\n });\n }\n \n return customColors;\n };\n\n const customLightColors = createCustomLightColors();\n const customDarkColors = createCustomDarkColors();\n\n // 재정의된 색상으로 새로운 팔레트 함수 반환\n return function createPalette({\n mode = 'light',\n themeColors = {},\n }: {\n mode?: 'light' | 'dark';\n themeColors?: { light?: Theme; dark?: Theme };\n } = {}): Theme {\n const colors = mode === 'light' ? customLightColors : customDarkColors;\n\n // 재정의된 색상을 기반으로 동적으로 색상 매핑 생성\n const customTextColors = {\n light: {\n primary: colors.primary.main,\n base: colors.grey[80],\n secondary: colors.grey[60],\n disabled: colors.grey[50],\n danger: colors.danger[60],\n warning: colors.warning[60],\n success: colors.success[60],\n information: colors.information[60],\n white: WHITE,\n black: BLACK,\n },\n dark: {\n primary: colors.primary.main,\n base: colors.grey[90],\n secondary: colors.grey[70],\n disabled: colors.grey[50],\n danger: colors.danger[30],\n warning: colors.warning[30],\n success: colors.success[30],\n information: colors.information[30],\n white: WHITE,\n black: BLACK,\n },\n };\n\n const customBackgroundColors = {\n light: {\n primary: colors.primary.main,\n layer1: colors.grey[5],\n layer2: colors.grey[20],\n neutral: colors.grey[30],\n base: WHITE,\n danger: colors.danger[5],\n warning: colors.warning[5],\n success: colors.success[5],\n information: colors.information[5],\n },\n dark: {\n primary: colors.primary.main,\n layer1: colors.grey[5],\n layer2: colors.grey[20],\n neutral: colors.grey[30],\n base: BLACK,\n danger: colors.danger[80],\n warning: colors.warning[80],\n success: colors.success[80],\n information: colors.information[80],\n },\n };\n\n const customMainColors = {\n light: {\n primary: colors.primary.main,\n secondary: colors.secondary.main,\n danger: colors.danger.main,\n warning: colors.warning.main,\n success: colors.success.main,\n information: colors.information.main,\n grey: colors.grey.main\n },\n dark: {\n primary: colors.primary.main,\n secondary: colors.secondary.main,\n danger: colors.danger.main,\n warning: colors.warning.main,\n success: colors.success.main,\n information: colors.information.main,\n grey: colors.grey.main\n }\n };\n\n const theme: Theme = {\n mode,\n ...colors,\n text: customTextColors[mode],\n background: customBackgroundColors[mode],\n elevationShadow: SHADOW_COLORS[mode],\n modalBgColor: MODAL_BG_COLOR[mode],\n mainColor: customMainColors[mode]\n };\n\n // 사용자 정의 테마 컬러가 있을 경우 병합\n if (themeColors?.[mode]) {\n return {\n ...theme,\n ...themeColors[mode],\n };\n }\n\n return theme;\n };\n}\n\nexport default function palette({\n mode = 'light',\n themeColors = {},\n}: {\n mode?: 'light' | 'dark';\n themeColors?: { light?: Theme; dark?: Theme };\n} = {}): Theme {\n const colors = mode === 'light' ? SEMANTIC_LIGHT_COLORS : SEMANTIC_DARK_COLORS;\n\n const theme: Theme = {\n mode,\n ...colors,\n text: SEMANTIC_TEXT_COLORS[mode],\n background: SEMANTIC_BACKGROUND_COLORS[mode],\n elevationShadow: SHADOW_COLORS[mode],\n modalBgColor: MODAL_BG_COLOR[mode],\n mainColor: MAIN_COLORS[mode]\n };\n\n // 사용자 정의 테마 컬러가 있을 경우 병합\n if (themeColors?.[mode]) {\n return {\n ...theme,\n ...themeColors[mode],\n };\n }\n\n return theme;\n}\n"]}
1
+ {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../src/theme/palette.ts"],"names":[],"mappings":"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","sourcesContent":["import { BLACK, PRIMITIVE_BLUE, PRIMITIVE_GREEN, PRIMITIVE_GREY, PRIMITIVE_GREY_DARK, PRIMITIVE_ORANGE, PRIMITIVE_RED, PRIMITIVE_TEAL, PRIMITIVE_YELLOW, SHADOW_COLORS, WHITE } from \"./primitive\";\nimport { Theme, ColorPalette, ColorPaletteExtend } from \"./types\";\n\nexport const transparency = {\n '0%': '00', // 완전 투명\n '2%': '05',\n '4%': '0A',\n '6%': '0F',\n '8%': '14',\n '10%': '1A',\n '12%': '1F',\n '14%': '24',\n '16%': '29',\n '18%': '2E',\n '20%': '33',\n '22%': '38',\n '24%': '3D',\n '26%': '42',\n '28%': '47',\n '30%': '4D',\n '32%': '52',\n '34%': '57',\n '36%': '5C',\n '38%': '61',\n '40%': '66',\n '42%': '6B',\n '44%': '70',\n '46%': '75',\n '48%': '7A',\n '50%': '80',\n '52%': '85',\n '54%': '8A',\n '56%': '8F',\n '58%': '94',\n '60%': '99',\n '62%': '9E',\n '64%': 'A3',\n '66%': 'A8',\n '68%': 'AD',\n '70%': 'B3',\n '72%': 'B8',\n '74%': 'BD',\n '76%': 'C2',\n '78%': 'C7',\n '80%': 'CC',\n '82%': 'D1',\n '84%': 'D6',\n '86%': 'DB',\n '88%': 'E0',\n '90%': 'E6',\n '92%': 'EB',\n '94%': 'F0',\n '96%': 'F5',\n '98%': 'FA',\n '100%': 'FF' // 완전 불투명\n};\n\nconst MODAL_BG_COLOR = {\n light: PRIMITIVE_GREY[90] + transparency['52%'],\n dark: PRIMITIVE_GREY[90] + transparency['40%'],\n}\n\nconst SEMANTIC_LIGHT_COLORS = {\n primary: {\n ...PRIMITIVE_ORANGE,\n lighter: PRIMITIVE_ORANGE[20],\n light: PRIMITIVE_ORANGE[30],\n main: PRIMITIVE_ORANGE[50],\n dark: PRIMITIVE_ORANGE[60],\n darker: PRIMITIVE_ORANGE[70],\n },\n secondary: {\n ...PRIMITIVE_TEAL,\n lighter: PRIMITIVE_TEAL[20],\n light: PRIMITIVE_TEAL[30],\n main: PRIMITIVE_TEAL[50],\n dark: PRIMITIVE_TEAL[60],\n darker: PRIMITIVE_TEAL[70],\n },\n danger: {\n ...PRIMITIVE_RED,\n lighter: PRIMITIVE_RED[20],\n light: PRIMITIVE_RED[30],\n main: PRIMITIVE_RED[50],\n dark: PRIMITIVE_RED[60],\n darker: PRIMITIVE_RED[70],\n },\n warning: {\n ...PRIMITIVE_YELLOW,\n lighter: PRIMITIVE_YELLOW[20],\n light: PRIMITIVE_YELLOW[30],\n main: PRIMITIVE_YELLOW[50],\n dark: PRIMITIVE_YELLOW[60],\n darker: PRIMITIVE_YELLOW[70],\n },\n success: {\n ...PRIMITIVE_GREEN,\n lighter: PRIMITIVE_GREEN[20],\n light: PRIMITIVE_GREEN[30],\n main: PRIMITIVE_GREEN[50],\n dark: PRIMITIVE_GREEN[60],\n darker: PRIMITIVE_GREEN[70],\n },\n information: {\n ...PRIMITIVE_BLUE,\n lighter: PRIMITIVE_BLUE[20],\n light: PRIMITIVE_BLUE[30],\n main: PRIMITIVE_BLUE[50],\n dark: PRIMITIVE_BLUE[60],\n darker: PRIMITIVE_BLUE[70],\n },\n grey: {\n ...PRIMITIVE_GREY,\n lighter: PRIMITIVE_GREY[20],\n light: PRIMITIVE_GREY[30],\n main: PRIMITIVE_GREY[20],\n dark: PRIMITIVE_GREY[60],\n darker: PRIMITIVE_GREY[70],\n },\n};\n\nconst SEMANTIC_DARK_COLORS = {\n primary: {\n ...SEMANTIC_LIGHT_COLORS.primary,\n lighter: PRIMITIVE_ORANGE[20],\n light: PRIMITIVE_ORANGE[30],\n main: PRIMITIVE_ORANGE[50],\n dark: PRIMITIVE_ORANGE[60],\n darker: PRIMITIVE_ORANGE[70],\n },\n secondary: {\n ...SEMANTIC_LIGHT_COLORS.secondary,\n lighter: PRIMITIVE_TEAL[20],\n light: PRIMITIVE_TEAL[30],\n main: PRIMITIVE_TEAL[50],\n dark: PRIMITIVE_TEAL[60],\n darker: PRIMITIVE_TEAL[70],\n },\n danger: {\n ...SEMANTIC_LIGHT_COLORS.danger,\n lighter: PRIMITIVE_RED[20],\n light: PRIMITIVE_RED[30],\n main: PRIMITIVE_RED[50],\n dark: PRIMITIVE_RED[60],\n darker: PRIMITIVE_RED[70],\n },\n warning: {\n ...SEMANTIC_LIGHT_COLORS.warning,\n lighter: PRIMITIVE_YELLOW[20],\n light: PRIMITIVE_YELLOW[30],\n main: PRIMITIVE_YELLOW[50],\n dark: PRIMITIVE_YELLOW[60],\n darker: PRIMITIVE_YELLOW[70],\n },\n success: {\n ...SEMANTIC_LIGHT_COLORS.success,\n lighter: PRIMITIVE_GREEN[20],\n light: PRIMITIVE_GREEN[30],\n main: PRIMITIVE_GREEN[50],\n dark: PRIMITIVE_GREEN[60],\n darker: PRIMITIVE_GREEN[70],\n },\n information: {\n ...SEMANTIC_LIGHT_COLORS.information,\n lighter: PRIMITIVE_BLUE[20],\n light: PRIMITIVE_BLUE[30],\n main: PRIMITIVE_BLUE[50],\n dark: PRIMITIVE_BLUE[60],\n darker: PRIMITIVE_BLUE[70],\n },\n grey: {\n ...PRIMITIVE_GREY_DARK,\n lighter: PRIMITIVE_GREY_DARK[20],\n light: PRIMITIVE_GREY_DARK[30],\n main: PRIMITIVE_GREY_DARK[20],\n dark: PRIMITIVE_GREY_DARK[60],\n darker: PRIMITIVE_GREY_DARK[70],\n },\n};\n\nconst MAIN_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n secondary: SEMANTIC_LIGHT_COLORS.secondary.main,\n danger: SEMANTIC_LIGHT_COLORS.danger.main,\n warning: SEMANTIC_LIGHT_COLORS.warning.main,\n success: SEMANTIC_LIGHT_COLORS.success.main,\n information: SEMANTIC_LIGHT_COLORS.information.main,\n grey: SEMANTIC_LIGHT_COLORS.grey.main\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n secondary: SEMANTIC_DARK_COLORS.secondary.main,\n danger: SEMANTIC_DARK_COLORS.danger.main,\n warning: SEMANTIC_DARK_COLORS.warning.main,\n success: SEMANTIC_DARK_COLORS.success.main,\n information: SEMANTIC_DARK_COLORS.information.main,\n grey: SEMANTIC_DARK_COLORS.grey.main\n }\n}\n\nconst SEMANTIC_TEXT_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n base: SEMANTIC_LIGHT_COLORS.grey[80],\n secondary: SEMANTIC_LIGHT_COLORS.grey[60],\n disabled: SEMANTIC_LIGHT_COLORS.grey[50],\n danger: SEMANTIC_LIGHT_COLORS.danger[60],\n warning: SEMANTIC_LIGHT_COLORS.warning[60],\n success: SEMANTIC_LIGHT_COLORS.success[60],\n information: SEMANTIC_LIGHT_COLORS.information[60],\n white: WHITE,\n black: BLACK,\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n base: SEMANTIC_DARK_COLORS.grey[90],\n secondary: SEMANTIC_DARK_COLORS.grey[70],\n disabled: SEMANTIC_DARK_COLORS.grey[50],\n danger: SEMANTIC_DARK_COLORS.danger[30],\n warning: SEMANTIC_DARK_COLORS.warning[30],\n success: SEMANTIC_DARK_COLORS.success[30],\n information: SEMANTIC_DARK_COLORS.information[30],\n white: WHITE,\n black: BLACK,\n },\n};\n\nconst SEMANTIC_BACKGROUND_COLORS = {\n light: {\n primary: SEMANTIC_LIGHT_COLORS.primary.main,\n layer1: SEMANTIC_LIGHT_COLORS.grey[5],\n layer2: SEMANTIC_LIGHT_COLORS.grey[20],\n neutral: SEMANTIC_LIGHT_COLORS.grey[30],\n base: WHITE,\n danger: SEMANTIC_LIGHT_COLORS.danger[5],\n warning: SEMANTIC_LIGHT_COLORS.warning[5],\n success: SEMANTIC_LIGHT_COLORS.success[5],\n information: SEMANTIC_LIGHT_COLORS.information[5],\n },\n dark: {\n primary: SEMANTIC_DARK_COLORS.primary.main,\n layer1: SEMANTIC_DARK_COLORS.grey[5],\n layer2: SEMANTIC_DARK_COLORS.grey[20],\n neutral: SEMANTIC_DARK_COLORS.grey[30],\n base: BLACK,\n danger: SEMANTIC_DARK_COLORS.danger[80],\n warning: SEMANTIC_DARK_COLORS.warning[80],\n success: SEMANTIC_DARK_COLORS.success[80],\n information: SEMANTIC_DARK_COLORS.information[80],\n },\n};\n\n// ThemeFactory 타입 정의\nexport interface ThemeFactoryColors {\n primary?: Partial<ColorPaletteExtend>;\n secondary?: Partial<ColorPalette>;\n danger?: Partial<ColorPalette>;\n warning?: Partial<ColorPalette>;\n success?: Partial<ColorPalette>;\n information?: Partial<ColorPalette>;\n grey?: Partial<ColorPalette>;\n}\n\nexport interface ThemeFactoryConfig {\n light?: ThemeFactoryColors;\n dark?: ThemeFactoryColors;\n}\n\n/**\n * 테마 팩토리 함수 - SEMANTIC_LIGHT_COLORS와 SEMANTIC_DARK_COLORS를 재정의할 수 있는 기능을 제공합니다.\n * @param config - 라이트/다크 모드별로 색상을 재정의할 수 있는 설정 객체\n * @returns 재정의된 SEMANTIC_LIGHT_COLORS와 SEMANTIC_DARK_COLORS를 포함한 팩토리 함수\n */\nexport function themeFactory(config: ThemeFactoryConfig = {}) {\n // 기본 색상들을 깊은 복사로 생성\n const createCustomLightColors = (): typeof SEMANTIC_LIGHT_COLORS => {\n const customColors = { ...SEMANTIC_LIGHT_COLORS };\n \n if (config.light) {\n Object.keys(config.light).forEach((key) => {\n const colorKey = key as keyof ThemeFactoryColors;\n if (config.light?.[colorKey]) {\n customColors[colorKey] = {\n ...customColors[colorKey],\n ...config.light[colorKey],\n } as any;\n }\n });\n }\n \n return customColors;\n };\n\n const createCustomDarkColors = (): typeof SEMANTIC_DARK_COLORS => {\n const customColors = { ...SEMANTIC_DARK_COLORS };\n \n if (config.dark) {\n Object.keys(config.dark).forEach((key) => {\n const colorKey = key as keyof ThemeFactoryColors;\n if (config.dark?.[colorKey]) {\n customColors[colorKey] = {\n ...customColors[colorKey],\n ...config.dark[colorKey],\n } as any;\n }\n });\n }\n \n return customColors;\n };\n\n const customLightColors = createCustomLightColors();\n const customDarkColors = createCustomDarkColors();\n\n // 재정의된 색상으로 새로운 팔레트 함수 반환\n return function createPalette({\n mode = 'light',\n themeColors = {},\n }: {\n mode?: 'light' | 'dark';\n themeColors?: { light?: Theme; dark?: Theme };\n } = {}): Theme {\n const colors = mode === 'light' ? customLightColors : customDarkColors;\n\n // 재정의된 색상을 기반으로 동적으로 색상 매핑 생성\n const customTextColors = {\n light: {\n primary: colors.primary.main,\n base: colors.grey[80],\n secondary: colors.grey[60],\n disabled: colors.grey[50],\n danger: colors.danger[60],\n warning: colors.warning[60],\n success: colors.success[60],\n information: colors.information[60],\n white: WHITE,\n black: BLACK,\n },\n dark: {\n primary: colors.primary.main,\n base: colors.grey[90],\n secondary: colors.grey[70],\n disabled: colors.grey[50],\n danger: colors.danger[30],\n warning: colors.warning[30],\n success: colors.success[30],\n information: colors.information[30],\n white: WHITE,\n black: BLACK,\n },\n };\n\n const customBackgroundColors = {\n light: {\n primary: colors.primary.main,\n layer1: colors.grey[5],\n layer2: colors.grey[20],\n neutral: colors.grey[30],\n base: WHITE,\n danger: colors.danger[5],\n warning: colors.warning[5],\n success: colors.success[5],\n information: colors.information[5],\n },\n dark: {\n primary: colors.primary.main,\n layer1: colors.grey[5],\n layer2: colors.grey[20],\n neutral: colors.grey[30],\n base: BLACK,\n danger: colors.danger[80],\n warning: colors.warning[80],\n success: colors.success[80],\n information: colors.information[80],\n },\n };\n\n const customMainColors = {\n light: {\n primary: colors.primary.main,\n secondary: colors.secondary.main,\n danger: colors.danger.main,\n warning: colors.warning.main,\n success: colors.success.main,\n information: colors.information.main,\n grey: colors.grey.main\n },\n dark: {\n primary: colors.primary.main,\n secondary: colors.secondary.main,\n danger: colors.danger.main,\n warning: colors.warning.main,\n success: colors.success.main,\n information: colors.information.main,\n grey: colors.grey.main\n }\n };\n\n const theme: Theme = {\n mode,\n ...colors,\n text: customTextColors[mode],\n background: customBackgroundColors[mode],\n elevationShadow: SHADOW_COLORS[mode],\n modalBgColor: MODAL_BG_COLOR[mode],\n mainColor: customMainColors[mode]\n };\n\n // 사용자 정의 테마 컬러가 있을 경우 병합\n if (themeColors?.[mode]) {\n return {\n ...theme,\n ...themeColors[mode],\n };\n }\n\n return theme;\n };\n}\n\nexport default function palette({\n mode = 'light',\n themeColors = {},\n}: {\n mode?: 'light' | 'dark';\n themeColors?: { light?: Theme; dark?: Theme };\n} = {}): Theme {\n const colors = mode === 'light' ? SEMANTIC_LIGHT_COLORS : SEMANTIC_DARK_COLORS;\n\n const theme: Theme = {\n mode,\n ...colors,\n text: SEMANTIC_TEXT_COLORS[mode],\n background: SEMANTIC_BACKGROUND_COLORS[mode],\n elevationShadow: SHADOW_COLORS[mode],\n modalBgColor: MODAL_BG_COLOR[mode],\n mainColor: MAIN_COLORS[mode]\n };\n\n // 사용자 정의 테마 컬러가 있을 경우 병합\n if (themeColors?.[mode]) {\n return {\n ...theme,\n ...themeColors[mode],\n };\n }\n\n return theme;\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type ViewProps } from "react-native";
3
2
  interface Props extends ViewProps {
4
3
  children: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSAboveKeyboard/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAY7F,UAAU,KAAM,SAAQ,SAAS;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,iBAAS,eAAe,CAAC,EACvB,kBAAsB,EACtB,kBAAsB,EACtB,QAAQ,EACR,kBAAkB,EAClB,uBAA+B,EAC/B,eAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,+BAwBP;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSAboveKeyboard/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAY7F,UAAU,KAAM,SAAQ,SAAS;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,iBAAS,eAAe,CAAC,EACvB,kBAAsB,EACtB,kBAAsB,EACtB,QAAQ,EACR,kBAAkB,EAClB,uBAA+B,EAC/B,eAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,+BAwBP;AAED,eAAe,eAAe,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type ImageSourcePropType, type StyleProp, type ViewStyle, type ViewProps } from 'react-native';
3
2
  import { TypoOptions, IntentOptions } from '../../theme/types';
4
3
  type Props = ViewProps & {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSBlockButton/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAS,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAoB,WAAW,EAAoB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMnG,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,iBAAS,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,+BAgH9J;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/ZSBlockButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAiD,WAAW,EAAoB,aAAa,EAAmB,MAAM,mBAAmB,CAAC;AAajJ,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,iBAAS,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,+BAoH9J;AAED,eAAe,aAAa,CAAC"}
@@ -3,6 +3,9 @@ import { useTheme } from '../../context/ThemeContext';
3
3
  import ZSPressable from '../ZSPressable';
4
4
  import ZSView from '../ZSView';
5
5
  import ZSText from '../ZSText';
6
+ function isColorMap(value) {
7
+ return typeof value === 'object' && value !== null;
8
+ }
6
9
  function ZSBlockButton({ onPress, style, title, intent = 'primary', typo, prefixIcon, variant = 'solid', isLoading = false, disabled = false, ...props }) {
7
10
  const { palette } = useTheme();
8
11
  const size = typo.split('.')[1];
@@ -71,7 +74,12 @@ function ZSBlockButton({ onPress, style, title, intent = 'primary', typo, prefix
71
74
  const getTextColorValue = () => {
72
75
  const [c01, c02] = colors.textColor.split('.');
73
76
  if (c02) {
74
- return palette[c01][c02];
77
+ if (c01 === 'text')
78
+ return palette.text[c02];
79
+ if (c01 === 'background')
80
+ return palette.background[c02];
81
+ const semanticPalette = palette[c01];
82
+ return isColorMap(semanticPalette) ? semanticPalette[c02] : undefined;
75
83
  }
76
84
  return palette.text[c01];
77
85
  };