@0610studio/zs-ui 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/build/ZsUiModule.d.ts.map +1 -1
  2. package/build/ZsUiModule.js +0 -2
  3. package/build/ZsUiModule.js.map +1 -1
  4. package/build/assets/SvgExclamation.d.ts.map +1 -1
  5. package/build/assets/SvgExclamation.js.map +1 -1
  6. package/build/assets/SvgTooltipTail.d.ts +7 -0
  7. package/build/assets/SvgTooltipTail.d.ts.map +1 -0
  8. package/build/assets/SvgTooltipTail.js +7 -0
  9. package/build/assets/SvgTooltipTail.js.map +1 -0
  10. package/build/context/OverlayContext.d.ts.map +1 -1
  11. package/build/context/OverlayContext.js +11 -14
  12. package/build/context/OverlayContext.js.map +1 -1
  13. package/build/context/ThemeContext.d.ts +9 -0
  14. package/build/context/ThemeContext.d.ts.map +1 -1
  15. package/build/context/ThemeContext.js +24 -15
  16. package/build/context/ThemeContext.js.map +1 -1
  17. package/build/index.d.ts +16 -3
  18. package/build/index.d.ts.map +1 -1
  19. package/build/index.js +7 -7
  20. package/build/index.js.map +1 -1
  21. package/build/model/globalOverlay.d.ts +0 -8
  22. package/build/model/globalOverlay.d.ts.map +1 -1
  23. package/build/model/globalOverlay.js +0 -9
  24. package/build/model/globalOverlay.js.map +1 -1
  25. package/build/model/types.d.ts +2 -1
  26. package/build/model/types.d.ts.map +1 -1
  27. package/build/model/types.js.map +1 -1
  28. package/build/model/useFoldingState.d.ts.map +1 -1
  29. package/build/model/useFoldingState.js +51 -32
  30. package/build/model/useFoldingState.js.map +1 -1
  31. package/build/model/useKeyboard.d.ts.map +1 -1
  32. package/build/model/useKeyboard.js +8 -4
  33. package/build/model/useKeyboard.js.map +1 -1
  34. package/build/model/utils.d.ts +1 -1
  35. package/build/model/utils.d.ts.map +1 -1
  36. package/build/model/utils.js +2 -1
  37. package/build/model/utils.js.map +1 -1
  38. package/build/overlay/AlertOverlay/index.d.ts +1 -2
  39. package/build/overlay/AlertOverlay/index.d.ts.map +1 -1
  40. package/build/overlay/AlertOverlay/index.js +13 -11
  41. package/build/overlay/AlertOverlay/index.js.map +1 -1
  42. package/build/overlay/BottomSheetOverlay/index.d.ts.map +1 -1
  43. package/build/overlay/BottomSheetOverlay/index.js +22 -11
  44. package/build/overlay/BottomSheetOverlay/index.js.map +1 -1
  45. package/build/overlay/LoadingNotify/index.d.ts +2 -2
  46. package/build/overlay/LoadingNotify/index.d.ts.map +1 -1
  47. package/build/overlay/LoadingNotify/index.js +2 -2
  48. package/build/overlay/LoadingNotify/index.js.map +1 -1
  49. package/build/overlay/Modality/index.d.ts.map +1 -1
  50. package/build/overlay/Modality/index.js +6 -12
  51. package/build/overlay/Modality/index.js.map +1 -1
  52. package/build/overlay/PopOver/PopOverMenu.d.ts.map +1 -1
  53. package/build/overlay/PopOver/PopOverMenu.js +7 -8
  54. package/build/overlay/PopOver/PopOverMenu.js.map +1 -1
  55. package/build/overlay/SnackbarNotify/index.d.ts +3 -3
  56. package/build/overlay/SnackbarNotify/index.d.ts.map +1 -1
  57. package/build/overlay/SnackbarNotify/index.js +5 -4
  58. package/build/overlay/SnackbarNotify/index.js.map +1 -1
  59. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts +4 -4
  60. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts.map +1 -1
  61. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js +9 -9
  62. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js.map +1 -1
  63. package/build/overlay/ZSPortal/index.d.ts.map +1 -1
  64. package/build/overlay/ZSPortal/index.js +15 -4
  65. package/build/overlay/ZSPortal/index.js.map +1 -1
  66. package/build/overlay/ui/ModalBackground.js.map +1 -1
  67. package/build/theme/elevation.d.ts +94 -10
  68. package/build/theme/elevation.d.ts.map +1 -1
  69. package/build/theme/elevation.js +39 -35
  70. package/build/theme/elevation.js.map +1 -1
  71. package/build/theme/intentColors.d.ts +9 -0
  72. package/build/theme/intentColors.d.ts.map +1 -0
  73. package/build/theme/intentColors.js +30 -0
  74. package/build/theme/intentColors.js.map +1 -0
  75. package/build/theme/palette.d.ts +1 -5
  76. package/build/theme/palette.d.ts.map +1 -1
  77. package/build/theme/palette.js +3 -12
  78. package/build/theme/palette.js.map +1 -1
  79. package/build/theme/resolveColor.d.ts +4 -0
  80. package/build/theme/resolveColor.d.ts.map +1 -0
  81. package/build/theme/resolveColor.js +29 -0
  82. package/build/theme/resolveColor.js.map +1 -0
  83. package/build/theme/tokens.d.ts +35 -0
  84. package/build/theme/tokens.d.ts.map +1 -0
  85. package/build/theme/tokens.js +35 -0
  86. package/build/theme/tokens.js.map +1 -0
  87. package/build/theme/typography.d.ts.map +1 -1
  88. package/build/theme/typography.js +36 -72
  89. package/build/theme/typography.js.map +1 -1
  90. package/build/ui/ZSBlockButton/index.d.ts +4 -2
  91. package/build/ui/ZSBlockButton/index.d.ts.map +1 -1
  92. package/build/ui/ZSBlockButton/index.js +17 -80
  93. package/build/ui/ZSBlockButton/index.js.map +1 -1
  94. package/build/ui/ZSBorderBeam/index.d.ts +48 -0
  95. package/build/ui/ZSBorderBeam/index.d.ts.map +1 -0
  96. package/build/ui/ZSBorderBeam/index.js +135 -0
  97. package/build/ui/ZSBorderBeam/index.js.map +1 -0
  98. package/build/ui/ZSCheckBox/index.d.ts +18 -0
  99. package/build/ui/ZSCheckBox/index.d.ts.map +1 -0
  100. package/build/ui/ZSCheckBox/index.js +60 -0
  101. package/build/ui/ZSCheckBox/index.js.map +1 -0
  102. package/build/ui/ZSChip/index.d.ts +28 -0
  103. package/build/ui/ZSChip/index.d.ts.map +1 -0
  104. package/build/ui/ZSChip/index.js +76 -0
  105. package/build/ui/ZSChip/index.js.map +1 -0
  106. package/build/ui/ZSContainer/index.d.ts +19 -0
  107. package/build/ui/ZSContainer/index.d.ts.map +1 -1
  108. package/build/ui/ZSContainer/index.js +29 -15
  109. package/build/ui/ZSContainer/index.js.map +1 -1
  110. package/build/ui/ZSPressable/index.d.ts.map +1 -1
  111. package/build/ui/ZSPressable/index.js +9 -6
  112. package/build/ui/ZSPressable/index.js.map +1 -1
  113. package/build/ui/ZSRadioGroup/index.d.ts +4 -4
  114. package/build/ui/ZSRadioGroup/index.d.ts.map +1 -1
  115. package/build/ui/ZSRadioGroup/index.js +72 -52
  116. package/build/ui/ZSRadioGroup/index.js.map +1 -1
  117. package/build/ui/ZSSegmented/index.d.ts +26 -0
  118. package/build/ui/ZSSegmented/index.d.ts.map +1 -0
  119. package/build/ui/ZSSegmented/index.js +124 -0
  120. package/build/ui/ZSSegmented/index.js.map +1 -0
  121. package/build/ui/ZSSkeleton/SkiaShimmer.d.ts +18 -0
  122. package/build/ui/ZSSkeleton/SkiaShimmer.d.ts.map +1 -0
  123. package/build/ui/ZSSkeleton/SkiaShimmer.js +73 -0
  124. package/build/ui/ZSSkeleton/SkiaShimmer.js.map +1 -0
  125. package/build/ui/ZSSkeleton/index.d.ts +9 -3
  126. package/build/ui/ZSSkeleton/index.d.ts.map +1 -1
  127. package/build/ui/ZSSkeleton/index.js +13 -44
  128. package/build/ui/ZSSkeleton/index.js.map +1 -1
  129. package/build/ui/ZSSkeletonBox/index.d.ts +10 -3
  130. package/build/ui/ZSSkeletonBox/index.d.ts.map +1 -1
  131. package/build/ui/ZSSkeletonBox/index.js +9 -47
  132. package/build/ui/ZSSkeletonBox/index.js.map +1 -1
  133. package/build/ui/ZSSwitch/index.d.ts +4 -2
  134. package/build/ui/ZSSwitch/index.d.ts.map +1 -1
  135. package/build/ui/ZSSwitch/index.js +8 -6
  136. package/build/ui/ZSSwitch/index.js.map +1 -1
  137. package/build/ui/ZSText/index.d.ts +3 -2
  138. package/build/ui/ZSText/index.d.ts.map +1 -1
  139. package/build/ui/ZSText/index.js +5 -16
  140. package/build/ui/ZSText/index.js.map +1 -1
  141. package/build/ui/ZSTextField/index.d.ts.map +1 -1
  142. package/build/ui/ZSTextField/index.js +57 -40
  143. package/build/ui/ZSTextField/index.js.map +1 -1
  144. package/build/ui/ZSTextField/ui/ButtonClose.d.ts.map +1 -1
  145. package/build/ui/ZSTextField/ui/ButtonClose.js +4 -1
  146. package/build/ui/ZSTextField/ui/ButtonClose.js.map +1 -1
  147. package/build/ui/ZSTooltip/index.d.ts +38 -0
  148. package/build/ui/ZSTooltip/index.d.ts.map +1 -0
  149. package/build/ui/ZSTooltip/index.js +99 -0
  150. package/build/ui/ZSTooltip/index.js.map +1 -0
  151. package/build/ui/ZSView/index.d.ts +3 -2
  152. package/build/ui/ZSView/index.d.ts.map +1 -1
  153. package/build/ui/ZSView/index.js +7 -8
  154. package/build/ui/ZSView/index.js.map +1 -1
  155. package/build/ui/atoms/AnimatedWrapper.d.ts.map +1 -1
  156. package/build/ui/atoms/AnimatedWrapper.js +33 -40
  157. package/build/ui/atoms/AnimatedWrapper.js.map +1 -1
  158. package/build/ui/atoms/TextAtom.d.ts +1 -2
  159. package/build/ui/atoms/TextAtom.d.ts.map +1 -1
  160. package/build/ui/atoms/TextAtom.js.map +1 -1
  161. package/build/ui/atoms/ViewAtom.d.ts +1 -2
  162. package/build/ui/atoms/ViewAtom.d.ts.map +1 -1
  163. package/build/ui/atoms/ViewAtom.js.map +1 -1
  164. package/package.json +6 -1
@@ -1,16 +1,7 @@
1
- // Global overlay context reference
2
1
  let globalOverlayRef = null;
3
- /**
4
- * Global overlay context를 설정합니다.
5
- * OverlayProvider에서 내부적으로 호출되며, 사용자가 직접 호출할 필요는 없습니다.
6
- */
7
2
  export const setGlobalOverlayRef = (ref) => {
8
3
  globalOverlayRef = ref;
9
4
  };
10
- /**
11
- * Global overlay context를 가져옵니다.
12
- * 주로 내부적으로 사용되며, 사용자는 아래의 개별 함수들을 사용하는 것을 권장합니다.
13
- */
14
5
  export const getGlobalOverlayRef = () => {
15
6
  return globalOverlayRef;
16
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"globalOverlay.js","sourceRoot":"","sources":["../../src/model/globalOverlay.ts"],"names":[],"mappings":"AAEA,mCAAmC;AACnC,IAAI,gBAAgB,GAA+B,IAAI,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAA+B,EAAE,EAAE;IACrE,gBAAgB,GAAG,GAAG,CAAC;AACzB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAA+B,EAAE;IAClE,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,GAAG,EAAE;IACvC,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAqC,CAAC,KAAK,EAAE,EAAE;IAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAwC,CAAC,KAAK,EAAE,EAAE;IAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,eAAe,GAA2C,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,eAAe,GAA2C,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAwC,CAAC,KAAK,EAAE,EAAE;IAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAsC,GAAG,EAAE;IACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAuC,CAAC,MAAM,EAAE,EAAE;IACjE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS;IACT,YAAY;IACZ,eAAe;IACf,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;CACZ,CAAC","sourcesContent":["import { OverlayContextProps } from './types';\n\n// Global overlay context reference\nlet globalOverlayRef: OverlayContextProps | null = null;\n\n/**\n * Global overlay context를 설정합니다.\n * OverlayProvider에서 내부적으로 호출되며, 사용자가 직접 호출할 필요는 없습니다.\n */\nexport const setGlobalOverlayRef = (ref: OverlayContextProps | null) => {\n globalOverlayRef = ref;\n};\n\n/**\n * Global overlay context를 가져옵니다.\n * 주로 내부적으로 사용되며, 사용자는 아래의 개별 함수들을 사용하는 것을 권장합니다.\n */\nexport const getGlobalOverlayRef = (): OverlayContextProps | null => {\n return globalOverlayRef;\n};\n\nconst getOverlayNotAvailableError = () => {\n throw new Error(\n 'Overlay functions are not available. Please make sure OverlayProvider is properly set up in your app root.'\n );\n};\n\nconst showAlert: OverlayContextProps['showAlert'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showAlert(props);\n};\n\nconst showSnackBar: OverlayContextProps['showSnackBar'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showSnackBar(props);\n};\n\nconst showBottomSheet: OverlayContextProps['showBottomSheet'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showBottomSheet(props);\n};\n\nconst showPopOverMenu: OverlayContextProps['showPopOverMenu'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showPopOverMenu(props);\n};\n\nconst showModality: OverlayContextProps['showModality'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showModality(props);\n};\n\nconst showLoader: OverlayContextProps['showLoader'] = () => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showLoader();\n};\n\nconst hideOverlay: OverlayContextProps['hideOverlay'] = (option) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.hideOverlay(option);\n};\n\nexport const GlobalOverlay = {\n showAlert,\n showSnackBar,\n showBottomSheet,\n showPopOverMenu,\n showModality,\n showLoader,\n hideOverlay,\n};\n"]}
1
+ {"version":3,"file":"globalOverlay.js","sourceRoot":"","sources":["../../src/model/globalOverlay.ts"],"names":[],"mappings":"AAEA,IAAI,gBAAgB,GAA+B,IAAI,CAAC;AAExD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAA+B,EAAE,EAAE;IACrE,gBAAgB,GAAG,GAAG,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAA+B,EAAE;IAClE,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,GAAG,EAAE;IACvC,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAqC,CAAC,KAAK,EAAE,EAAE;IAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAwC,CAAC,KAAK,EAAE,EAAE;IAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,eAAe,GAA2C,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,eAAe,GAA2C,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAwC,CAAC,KAAK,EAAE,EAAE;IAClE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAsC,GAAG,EAAE;IACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAuC,CAAC,MAAM,EAAE,EAAE;IACjE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,2BAA2B,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS;IACT,YAAY;IACZ,eAAe;IACf,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;CACZ,CAAC","sourcesContent":["import { OverlayContextProps } from './types';\n\nlet globalOverlayRef: OverlayContextProps | null = null;\n\nexport const setGlobalOverlayRef = (ref: OverlayContextProps | null) => {\n globalOverlayRef = ref;\n};\n\nexport const getGlobalOverlayRef = (): OverlayContextProps | null => {\n return globalOverlayRef;\n};\n\nconst getOverlayNotAvailableError = () => {\n throw new Error(\n 'Overlay functions are not available. Please make sure OverlayProvider is properly set up in your app root.'\n );\n};\n\nconst showAlert: OverlayContextProps['showAlert'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showAlert(props);\n};\n\nconst showSnackBar: OverlayContextProps['showSnackBar'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showSnackBar(props);\n};\n\nconst showBottomSheet: OverlayContextProps['showBottomSheet'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showBottomSheet(props);\n};\n\nconst showPopOverMenu: OverlayContextProps['showPopOverMenu'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showPopOverMenu(props);\n};\n\nconst showModality: OverlayContextProps['showModality'] = (props) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showModality(props);\n};\n\nconst showLoader: OverlayContextProps['showLoader'] = () => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.showLoader();\n};\n\nconst hideOverlay: OverlayContextProps['hideOverlay'] = (option) => {\n if (!globalOverlayRef) {\n getOverlayNotAvailableError();\n return;\n }\n globalOverlayRef.hideOverlay(option);\n};\n\nexport const GlobalOverlay = {\n showAlert,\n showSnackBar,\n showBottomSheet,\n showPopOverMenu,\n showModality,\n showLoader,\n hideOverlay,\n};\n"]}
@@ -69,6 +69,7 @@ export interface ShowAlertProps {
69
69
  secondaryButtonStyle?: TouchableOpacityProps['style'];
70
70
  primaryButtonStyle?: TouchableOpacityProps['style'];
71
71
  secondaryButtonTextStyle?: TextProps['style'];
72
+ primaryButtonTextStyle?: TextProps['style'];
72
73
  }
73
74
  export interface AlertActions {
74
75
  primary: AlertAction;
@@ -109,7 +110,7 @@ export interface AboveKeyboardOptions {
109
110
  keyboardHideOffset?: number;
110
111
  }
111
112
  export declare enum FoldingState {
112
- FOLDED = "folded",// 폴딩, 일반 기기
113
+ FOLDED = "folded",
113
114
  UNFOLDED = "unfolded"
114
115
  }
115
116
  export interface FoldingFeatureData {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAqIA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,qCAAqB,CAAA;AACvB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB","sourcesContent":["import { ReactNode } from \"react\";\nimport { TextProps, TouchableOpacityProps } from \"react-native\";\n\nexport interface OverlayContextProps {\n showLoader: () => void;\n showModality: (props: ModalityProps) => void;\n showPopOverMenu: (props: PopOverMenuProps) => void;\n showBottomSheet: (props: ShowBottomSheetProps) => void;\n showSnackBar: (props: ShowSnackBarProps) => void;\n showAlert: (props: ShowAlertProps) => void;\n hideOverlay: (option: HideOption) => void;\n}\n\nexport interface AlertContextProps {\n alertVisible: boolean;\n setAlertVisible: (visible: boolean) => void;\n}\n\nexport interface SnackbarContextProps {\n snackItemStack: SnackItem[];\n hideSnackBar: (index: number) => void;\n}\n\nexport interface BottomSheetContextProps {\n bottomSheetVisible: boolean;\n setBottomSheetVisible: (visible: boolean) => void;\n height: BottomSheetHeight;\n setHeight: (height: BottomSheetHeight) => void;\n maxHeight: number;\n}\n\nexport interface PopOverContextProps {\n popOverVisible: boolean;\n setPopOverVisible: (visible: boolean) => void;\n}\n\nexport interface ModalityContextProps {\n modalityVisible: boolean;\n setModalityVisible: (visible: boolean) => void;\n}\n\nexport interface LoaderContextProps {\n loaderVisible: boolean;\n setLoaderVisible: (visible: boolean) => void;\n}\n\nexport interface PopOverMenuProps {\n px: number;\n py: number;\n component: React.ReactNode;\n}\n\nexport interface ModalityProps {\n component: React.ReactNode;\n foldableSingleScreen?: boolean;\n}\n\nexport interface CustomSnackbarProps {\n snackType: SnackType;\n snackMessage: string;\n}\n\nexport interface OverlayProviderProps {\n children: ReactNode;\n customSnackbar?: (props: CustomSnackbarProps) => React.ReactNode;\n loaderComponent?: () => React.ReactNode;\n maxSnackbarCount?: number;\n}\n\nexport interface AlertAction {\n label: string;\n onPress?: () => void;\n}\n\nexport interface ShowAlertProps {\n title?: string;\n informative?: string;\n actions?: AlertActions;\n isBackgroundTouchClose?: boolean;\n titleStyle?: TextProps['style'];\n informativeStyle?: TextProps['style'];\n secondaryButtonStyle?: TouchableOpacityProps['style'];\n primaryButtonStyle?: TouchableOpacityProps['style'];\n secondaryButtonTextStyle?: TextProps['style'];\n}\n\nexport interface AlertActions {\n primary: AlertAction;\n secondary?: AlertAction;\n}\n\nexport interface SnackItem {\n message: string;\n type: SnackType;\n index: number;\n snackbarDuration?: number;\n}\n\nexport type SnackType = 'success' | 'error' | '';\n\nexport type HideOption = 'all' | 'snack' | 'alert' | 'bottomSheet' | 'loader' | 'popOver' | 'modal' | 'aboveKeyboard';\n\nexport interface ShowSnackBarProps {\n message: string;\n type?: SnackType;\n index?: number;\n snackbarDuration?: number;\n}\n\nexport interface BottomSheetOptions {\n isBackgroundTouchClose?: boolean;\n marginHorizontal?: number;\n marginBottom?: number;\n height?: BottomSheetHeight;\n maxHeight?: number;\n padding?: number;\n foldableSingleScreen?: boolean;\n type?: 'floating' | 'fixed';\n}\n\nexport type BottomSheetHeight = number | 'auto';\n\nexport interface ShowBottomSheetProps {\n headerComponent?: React.ReactNode;\n component: React.ReactNode;\n options?: BottomSheetOptions;\n}\n\nexport interface AboveKeyboardOptions {\n keyboardShowOffset?: number;\n keyboardHideOffset?: number;\n}\n\nexport enum FoldingState {\n FOLDED = 'folded', // 폴딩, 일반 기기\n UNFOLDED = 'unfolded',\n}\n\nexport interface FoldingFeatureData {\n state: 'flat' | 'half_opened' | 'unknown';\n orientation: 'horizontal' | 'vertical' | 'unknown';\n isSeparating: boolean;\n bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n };\n}\n\nexport interface NativeFoldingStateInfo {\n foldingFeature: FoldingFeatureData | null;\n width: number; // PT 단위\n}\n\nexport interface FoldingStateInfo {\n foldingState: FoldingState;\n width: number;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/model/types.ts"],"names":[],"mappings":"AAsIA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,qCAAqB,CAAA;AACvB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB","sourcesContent":["import { ReactNode } from \"react\";\nimport { TextProps, TouchableOpacityProps } from \"react-native\";\n\nexport interface OverlayContextProps {\n showLoader: () => void;\n showModality: (props: ModalityProps) => void;\n showPopOverMenu: (props: PopOverMenuProps) => void;\n showBottomSheet: (props: ShowBottomSheetProps) => void;\n showSnackBar: (props: ShowSnackBarProps) => void;\n showAlert: (props: ShowAlertProps) => void;\n hideOverlay: (option: HideOption) => void;\n}\n\nexport interface AlertContextProps {\n alertVisible: boolean;\n setAlertVisible: (visible: boolean) => void;\n}\n\nexport interface SnackbarContextProps {\n snackItemStack: SnackItem[];\n hideSnackBar: (index: number) => void;\n}\n\nexport interface BottomSheetContextProps {\n bottomSheetVisible: boolean;\n setBottomSheetVisible: (visible: boolean) => void;\n height: BottomSheetHeight;\n setHeight: (height: BottomSheetHeight) => void;\n maxHeight: number;\n}\n\nexport interface PopOverContextProps {\n popOverVisible: boolean;\n setPopOverVisible: (visible: boolean) => void;\n}\n\nexport interface ModalityContextProps {\n modalityVisible: boolean;\n setModalityVisible: (visible: boolean) => void;\n}\n\nexport interface LoaderContextProps {\n loaderVisible: boolean;\n setLoaderVisible: (visible: boolean) => void;\n}\n\nexport interface PopOverMenuProps {\n px: number;\n py: number;\n component: React.ReactNode;\n}\n\nexport interface ModalityProps {\n component: React.ReactNode;\n foldableSingleScreen?: boolean;\n}\n\nexport interface CustomSnackbarProps {\n snackType: SnackType;\n snackMessage: string;\n}\n\nexport interface OverlayProviderProps {\n children: ReactNode;\n customSnackbar?: (props: CustomSnackbarProps) => React.ReactNode;\n loaderComponent?: () => React.ReactNode;\n maxSnackbarCount?: number;\n}\n\nexport interface AlertAction {\n label: string;\n onPress?: () => void;\n}\n\nexport interface ShowAlertProps {\n title?: string;\n informative?: string;\n actions?: AlertActions;\n isBackgroundTouchClose?: boolean;\n titleStyle?: TextProps['style'];\n informativeStyle?: TextProps['style'];\n secondaryButtonStyle?: TouchableOpacityProps['style'];\n primaryButtonStyle?: TouchableOpacityProps['style'];\n secondaryButtonTextStyle?: TextProps['style'];\n primaryButtonTextStyle?: TextProps['style'];\n}\n\nexport interface AlertActions {\n primary: AlertAction;\n secondary?: AlertAction;\n}\n\nexport interface SnackItem {\n message: string;\n type: SnackType;\n index: number;\n snackbarDuration?: number;\n}\n\nexport type SnackType = 'success' | 'error' | '';\n\nexport type HideOption = 'all' | 'snack' | 'alert' | 'bottomSheet' | 'loader' | 'popOver' | 'modal' | 'aboveKeyboard';\n\nexport interface ShowSnackBarProps {\n message: string;\n type?: SnackType;\n index?: number;\n snackbarDuration?: number;\n}\n\nexport interface BottomSheetOptions {\n isBackgroundTouchClose?: boolean;\n marginHorizontal?: number;\n marginBottom?: number;\n height?: BottomSheetHeight;\n maxHeight?: number;\n padding?: number;\n foldableSingleScreen?: boolean;\n type?: 'floating' | 'fixed';\n}\n\nexport type BottomSheetHeight = number | 'auto';\n\nexport interface ShowBottomSheetProps {\n headerComponent?: React.ReactNode;\n component: React.ReactNode;\n options?: BottomSheetOptions;\n}\n\nexport interface AboveKeyboardOptions {\n keyboardShowOffset?: number;\n keyboardHideOffset?: number;\n}\n\nexport enum FoldingState {\n FOLDED = 'folded',\n UNFOLDED = 'unfolded',\n}\n\nexport interface FoldingFeatureData {\n state: 'flat' | 'half_opened' | 'unknown';\n orientation: 'horizontal' | 'vertical' | 'unknown';\n isSeparating: boolean;\n bounds: {\n left: number;\n top: number;\n right: number;\n bottom: number;\n };\n}\n\nexport interface NativeFoldingStateInfo {\n foldingFeature: FoldingFeatureData | null;\n width: number;\n}\n\nexport interface FoldingStateInfo {\n foldingState: FoldingState;\n width: number;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useFoldingState.d.ts","sourceRoot":"","sources":["../../src/model/useFoldingState.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgB,gBAAgB,EAA0B,MAAM,SAAS,CAAC;AAEjF,wBAAgB,eAAe,IAAI,gBAAgB,CAsClD;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"useFoldingState.d.ts","sourceRoot":"","sources":["../../src/model/useFoldingState.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgB,gBAAgB,EAA0B,MAAM,SAAS,CAAC;AA8DjF,wBAAgB,eAAe,IAAI,gBAAgB,CAElD;AAED,eAAe,eAAe,CAAC"}
@@ -1,40 +1,59 @@
1
- import { useState, useEffect } from 'react';
1
+ import { useSyncExternalStore } from 'react';
2
2
  import { Dimensions, Platform } from 'react-native';
3
3
  import ZsUiModule from '../ZsUiModule';
4
4
  import { FoldingState } from './types';
5
- export function useFoldingState() {
6
- const [foldingStateInfo, setFoldingStateInfo] = useState({
7
- foldingState: FoldingState.FOLDED,
8
- width: Dimensions.get('window').width
9
- });
10
- useEffect(() => {
11
- if (Platform.OS !== 'android')
12
- return;
13
- let isMounted = true;
14
- const updateFoldingState = async (fallbackWidth = Dimensions.get('window').width) => {
15
- try {
16
- const result = await ZsUiModule.getFoldingFeature();
17
- if (!isMounted)
18
- return;
19
- setFoldingStateInfo({
20
- foldingState: result?.foldingFeature ? FoldingState.UNFOLDED : FoldingState.FOLDED,
21
- width: result?.width || fallbackWidth,
22
- });
23
- }
24
- catch (error) {
25
- console.error('getFoldingFeature 호출 실패:', error);
26
- }
27
- };
28
- updateFoldingState();
29
- const subscription = Dimensions.addEventListener('change', ({ window }) => {
5
+ // 모듈 레벨 단일 스토어 — 훅 인스턴스마다 Dimensions 리스너와
6
+ // 네이티브 getFoldingFeature 호출이 중복되지 않도록 구독자 전체가 상태를 공유한다.
7
+ let foldingStateInfo = {
8
+ foldingState: FoldingState.FOLDED,
9
+ width: Dimensions.get('window').width,
10
+ };
11
+ const listeners = new Set();
12
+ let dimensionsSubscription = null;
13
+ function setFoldingStateInfo(next) {
14
+ if (next.foldingState === foldingStateInfo.foldingState &&
15
+ next.width === foldingStateInfo.width) {
16
+ return;
17
+ }
18
+ foldingStateInfo = next;
19
+ listeners.forEach((listener) => listener());
20
+ }
21
+ async function updateFoldingState(fallbackWidth = Dimensions.get('window').width) {
22
+ // 폴딩 감지는 Android 전용이지만 width 는 전 플랫폼에서 추적한다.
23
+ if (Platform.OS !== 'android') {
24
+ setFoldingStateInfo({ foldingState: FoldingState.FOLDED, width: fallbackWidth });
25
+ return;
26
+ }
27
+ try {
28
+ const result = await ZsUiModule.getFoldingFeature();
29
+ setFoldingStateInfo({
30
+ foldingState: result?.foldingFeature ? FoldingState.UNFOLDED : FoldingState.FOLDED,
31
+ width: result?.width || fallbackWidth,
32
+ });
33
+ }
34
+ catch (error) {
35
+ console.error('getFoldingFeature 호출 실패:', error);
36
+ }
37
+ }
38
+ function subscribe(listener) {
39
+ listeners.add(listener);
40
+ if (listeners.size === 1) {
41
+ dimensionsSubscription = Dimensions.addEventListener('change', ({ window }) => {
30
42
  updateFoldingState(window.width);
31
43
  });
32
- return () => {
33
- isMounted = false;
34
- subscription.remove();
35
- };
36
- }, []);
37
- return foldingStateInfo;
44
+ updateFoldingState();
45
+ }
46
+ return () => {
47
+ listeners.delete(listener);
48
+ if (listeners.size === 0) {
49
+ dimensionsSubscription?.remove();
50
+ dimensionsSubscription = null;
51
+ }
52
+ };
53
+ }
54
+ const getSnapshot = () => foldingStateInfo;
55
+ export function useFoldingState() {
56
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
38
57
  }
39
58
  export default useFoldingState;
40
59
  //# sourceMappingURL=useFoldingState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFoldingState.js","sourceRoot":"","sources":["../../src/model/useFoldingState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAA4C,MAAM,SAAS,CAAC;AAEjF,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAmB;QACzE,YAAY,EAAE,YAAY,CAAC,MAAM;QACjC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK;KACtC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS;YAAE,OAAO;QAEtC,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,MAAM,kBAAkB,GAAG,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YAClF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAmC,CAAC;gBACrF,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,mBAAmB,CAAC;oBAClB,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;oBAClF,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,aAAa;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC;QAEF,kBAAkB,EAAE,CAAC;QAErB,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACxE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,KAAK,CAAC;YAClB,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,eAAe,eAAe,CAAC","sourcesContent":["import { useState, useEffect } from 'react';\nimport { Dimensions, Platform } from 'react-native';\nimport ZsUiModule from '../ZsUiModule';\nimport { FoldingState, FoldingStateInfo, NativeFoldingStateInfo } from './types';\n\nexport function useFoldingState(): FoldingStateInfo {\n const [foldingStateInfo, setFoldingStateInfo] = useState<FoldingStateInfo>({\n foldingState: FoldingState.FOLDED,\n width: Dimensions.get('window').width\n });\n\n useEffect(() => {\n if (Platform.OS !== 'android') return;\n\n let isMounted = true;\n\n const updateFoldingState = async (fallbackWidth = Dimensions.get('window').width) => {\n try {\n const result = await ZsUiModule.getFoldingFeature() as NativeFoldingStateInfo | null;\n if (!isMounted) return;\n\n setFoldingStateInfo({\n foldingState: result?.foldingFeature ? FoldingState.UNFOLDED : FoldingState.FOLDED,\n width: result?.width || fallbackWidth,\n });\n } catch (error) {\n console.error('getFoldingFeature 호출 실패:', error);\n }\n };\n\n updateFoldingState();\n\n const subscription = Dimensions.addEventListener('change', ({ window }) => {\n updateFoldingState(window.width);\n });\n\n return () => {\n isMounted = false;\n subscription.remove();\n };\n }, []);\n\n return foldingStateInfo;\n}\n\nexport default useFoldingState;\n"]}
1
+ {"version":3,"file":"useFoldingState.js","sourceRoot":"","sources":["../../src/model/useFoldingState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,YAAY,EAA4C,MAAM,SAAS,CAAC;AAEjF,0CAA0C;AAC1C,wDAAwD;AACxD,IAAI,gBAAgB,GAAqB;IACvC,YAAY,EAAE,YAAY,CAAC,MAAM;IACjC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK;CACtC,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AACxC,IAAI,sBAAsB,GAAkC,IAAI,CAAC;AAEjE,SAAS,mBAAmB,CAAC,IAAsB;IACjD,IACE,IAAI,CAAC,YAAY,KAAK,gBAAgB,CAAC,YAAY;QACnD,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,KAAK,EACrC,CAAC;QACD,OAAO;IACT,CAAC;IACD,gBAAgB,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK;IAC9E,6CAA6C;IAC7C,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,mBAAmB,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iBAAiB,EAAmC,CAAC;QACrF,mBAAmB,CAAC;YAClB,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;YAClF,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,aAAa;SACtC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,QAAoB;IACrC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExB,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5E,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,kBAAkB,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,sBAAsB,EAAE,MAAM,EAAE,CAAC;YACjC,sBAAsB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC;AAE3C,MAAM,UAAU,eAAe;IAC7B,OAAO,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACnE,CAAC;AAED,eAAe,eAAe,CAAC","sourcesContent":["import { useSyncExternalStore } from 'react';\nimport { Dimensions, Platform } from 'react-native';\nimport ZsUiModule from '../ZsUiModule';\nimport { FoldingState, FoldingStateInfo, NativeFoldingStateInfo } from './types';\n\n// 모듈 레벨 단일 스토어 — 훅 인스턴스마다 Dimensions 리스너와\n// 네이티브 getFoldingFeature 호출이 중복되지 않도록 구독자 전체가 상태를 공유한다.\nlet foldingStateInfo: FoldingStateInfo = {\n foldingState: FoldingState.FOLDED,\n width: Dimensions.get('window').width,\n};\n\nconst listeners = new Set<() => void>();\nlet dimensionsSubscription: { remove: () => void } | null = null;\n\nfunction setFoldingStateInfo(next: FoldingStateInfo) {\n if (\n next.foldingState === foldingStateInfo.foldingState &&\n next.width === foldingStateInfo.width\n ) {\n return;\n }\n foldingStateInfo = next;\n listeners.forEach((listener) => listener());\n}\n\nasync function updateFoldingState(fallbackWidth = Dimensions.get('window').width) {\n // 폴딩 감지는 Android 전용이지만 width 는 전 플랫폼에서 추적한다.\n if (Platform.OS !== 'android') {\n setFoldingStateInfo({ foldingState: FoldingState.FOLDED, width: fallbackWidth });\n return;\n }\n\n try {\n const result = await ZsUiModule.getFoldingFeature() as NativeFoldingStateInfo | null;\n setFoldingStateInfo({\n foldingState: result?.foldingFeature ? FoldingState.UNFOLDED : FoldingState.FOLDED,\n width: result?.width || fallbackWidth,\n });\n } catch (error) {\n console.error('getFoldingFeature 호출 실패:', error);\n }\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n\n if (listeners.size === 1) {\n dimensionsSubscription = Dimensions.addEventListener('change', ({ window }) => {\n updateFoldingState(window.width);\n });\n updateFoldingState();\n }\n\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n dimensionsSubscription?.remove();\n dimensionsSubscription = null;\n }\n };\n}\n\nconst getSnapshot = () => foldingStateInfo;\n\nexport function useFoldingState(): FoldingStateInfo {\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport default useFoldingState;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../src/model/useKeyboard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtE,UAAU,iBAAiB;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACpD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAKD,QAAA,MAAM,WAAW,GAAI,8CAGlB,gBAAqB,KAAG,iBA8B1B,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../src/model/useKeyboard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtE,UAAU,iBAAiB;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACpD,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAKD,QAAA,MAAM,WAAW,GAAI,8CAGlB,gBAAqB,KAAG,iBAmC1B,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,20 +1,24 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useEffect, useRef, useState } from 'react';
2
2
  import { Keyboard, Platform } from 'react-native';
3
3
  const showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';
4
4
  const hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';
5
5
  const useKeyboard = ({ handleKeyboardShow, handleKeyboardHide, } = {}) => {
6
6
  const [isKeyboardVisible, setIsKeyboardVisible] = useState(false);
7
7
  const [keyboardHeight, setKeyboardHeight] = useState(0);
8
+ const handleKeyboardShowRef = useRef(handleKeyboardShow);
9
+ const handleKeyboardHideRef = useRef(handleKeyboardHide);
10
+ handleKeyboardShowRef.current = handleKeyboardShow;
11
+ handleKeyboardHideRef.current = handleKeyboardHide;
8
12
  useEffect(() => {
9
13
  const showListener = (event) => {
10
14
  setIsKeyboardVisible(true);
11
15
  setKeyboardHeight(event.endCoordinates.height);
12
- handleKeyboardShow?.(event);
16
+ handleKeyboardShowRef.current?.(event);
13
17
  };
14
18
  const hideListener = () => {
15
19
  setIsKeyboardVisible(false);
16
20
  setKeyboardHeight(0);
17
- handleKeyboardHide?.();
21
+ handleKeyboardHideRef.current?.();
18
22
  };
19
23
  const keyboardShowSubscription = Keyboard.addListener(showEvent, showListener);
20
24
  const keyboardHideSubscription = Keyboard.addListener(hideEvent, hideListener);
@@ -22,7 +26,7 @@ const useKeyboard = ({ handleKeyboardShow, handleKeyboardHide, } = {}) => {
22
26
  keyboardShowSubscription.remove();
23
27
  keyboardHideSubscription.remove();
24
28
  };
25
- }, [handleKeyboardShow, handleKeyboardHide]);
29
+ }, []);
26
30
  return {
27
31
  isKeyboardVisible,
28
32
  keyboardHeight,
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboard.js","sourceRoot":"","sources":["../../src/model/useKeyboard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAsB,MAAM,cAAc,CAAC;AAYtE,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACjF,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAEjF,MAAM,WAAW,GAAG,CAAC,EACnB,kBAAkB,EAClB,kBAAkB,MACE,EAAE,EAAqB,EAAE;IAC7C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC5C,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,kBAAkB,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/E,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE/E,OAAO,GAAG,EAAE;YACV,wBAAwB,CAAC,MAAM,EAAE,CAAC;YAClC,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE7C,OAAO;QACL,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { Keyboard, Platform, type KeyboardEvent } from 'react-native';\n\ninterface UseKeyboardReturn {\n isKeyboardVisible: boolean;\n keyboardHeight: number;\n}\n\ninterface UseKeyboardProps {\n handleKeyboardShow?: (event: KeyboardEvent) => void;\n handleKeyboardHide?: () => void;\n}\n\nconst showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\nconst hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\nconst useKeyboard = ({\n handleKeyboardShow,\n handleKeyboardHide,\n}: UseKeyboardProps = {}): UseKeyboardReturn => {\n const [isKeyboardVisible, setIsKeyboardVisible] = useState(false);\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n useEffect(() => {\n const showListener = (event: KeyboardEvent) => {\n setIsKeyboardVisible(true);\n setKeyboardHeight(event.endCoordinates.height);\n handleKeyboardShow?.(event);\n };\n\n const hideListener = () => {\n setIsKeyboardVisible(false);\n setKeyboardHeight(0);\n handleKeyboardHide?.();\n };\n\n const keyboardShowSubscription = Keyboard.addListener(showEvent, showListener);\n const keyboardHideSubscription = Keyboard.addListener(hideEvent, hideListener);\n\n return () => {\n keyboardShowSubscription.remove();\n keyboardHideSubscription.remove();\n };\n }, [handleKeyboardShow, handleKeyboardHide]);\n\n return {\n isKeyboardVisible,\n keyboardHeight,\n };\n};\n\nexport default useKeyboard;"]}
1
+ {"version":3,"file":"useKeyboard.js","sourceRoot":"","sources":["../../src/model/useKeyboard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAsB,MAAM,cAAc,CAAC;AAYtE,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACjF,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAEjF,MAAM,WAAW,GAAG,CAAC,EACnB,kBAAkB,EAClB,kBAAkB,MACE,EAAE,EAAqB,EAAE;IAC7C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExD,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,qBAAqB,CAAC,OAAO,GAAG,kBAAkB,CAAC;IACnD,qBAAqB,CAAC,OAAO,GAAG,kBAAkB,CAAC;IAEnD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC5C,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,qBAAqB,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/E,MAAM,wBAAwB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE/E,OAAO,GAAG,EAAE;YACV,wBAAwB,CAAC,MAAM,EAAE,CAAC;YAClC,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { Keyboard, Platform, type KeyboardEvent } from 'react-native';\n\ninterface UseKeyboardReturn {\n isKeyboardVisible: boolean;\n keyboardHeight: number;\n}\n\ninterface UseKeyboardProps {\n handleKeyboardShow?: (event: KeyboardEvent) => void;\n handleKeyboardHide?: () => void;\n}\n\nconst showEvent = Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';\nconst hideEvent = Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide';\n\nconst useKeyboard = ({\n handleKeyboardShow,\n handleKeyboardHide,\n}: UseKeyboardProps = {}): UseKeyboardReturn => {\n const [isKeyboardVisible, setIsKeyboardVisible] = useState(false);\n const [keyboardHeight, setKeyboardHeight] = useState(0);\n\n const handleKeyboardShowRef = useRef(handleKeyboardShow);\n const handleKeyboardHideRef = useRef(handleKeyboardHide);\n handleKeyboardShowRef.current = handleKeyboardShow;\n handleKeyboardHideRef.current = handleKeyboardHide;\n\n useEffect(() => {\n const showListener = (event: KeyboardEvent) => {\n setIsKeyboardVisible(true);\n setKeyboardHeight(event.endCoordinates.height);\n handleKeyboardShowRef.current?.(event);\n };\n\n const hideListener = () => {\n setIsKeyboardVisible(false);\n setKeyboardHeight(0);\n handleKeyboardHideRef.current?.();\n };\n\n const keyboardShowSubscription = Keyboard.addListener(showEvent, showListener);\n const keyboardHideSubscription = Keyboard.addListener(hideEvent, hideListener);\n\n return () => {\n keyboardShowSubscription.remove();\n keyboardHideSubscription.remove();\n };\n }, []);\n\n return {\n isKeyboardVisible,\n keyboardHeight,\n };\n};\n\nexport default useKeyboard;"]}
@@ -15,5 +15,5 @@ export declare const Z_INDEX_VALUE: {
15
15
  ALERT: number;
16
16
  LOADING: number;
17
17
  };
18
- export declare const MAX_FOLDABLE_SINGLE_WIDTH = 600;
18
+ export declare const OVERLAY_FOLDABLE_SINGLE_WIDTH = 600;
19
19
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/model/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,YAAY,GACrB,OAAO,SAAS,CAAC,SAAS,CAAC,EAC3B,WAAW,MAAM,SAAS,KAC3B,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG,SAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CAczB,CAAC;AAEF,eAAO,MAAM,yBAAyB,MAAM,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/model/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,YAAY,GACrB,OAAO,SAAS,CAAC,SAAS,CAAC,EAC3B,WAAW,MAAM,SAAS,KAC3B,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG,SAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CAczB,CAAC;AAGF,eAAO,MAAM,6BAA6B,MAAM,CAAC"}
@@ -23,5 +23,6 @@ export const Z_INDEX_VALUE = {
23
23
  ALERT: 8700,
24
24
  LOADING: 8999,
25
25
  };
26
- export const MAX_FOLDABLE_SINGLE_WIDTH = 600;
26
+ // Modality / BottomSheet 오버레이의 foldableSingleScreen 전용 단일 화면 최대 가로 길이(px)
27
+ export const OVERLAY_FOLDABLE_SINGLE_WIDTH = 600;
27
28
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/model/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CACxB,KAA2B,EAC3B,SAA0B,EACY,EAAE;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC;QACtG,OAAO,UAAU,EAAE,CAAC,SAAoC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC","sourcesContent":["import { StyleProp, TextStyle } from \"react-native\";\n\nexport const extractStyle = (\n style: StyleProp<TextStyle>,\n attribute: keyof TextStyle\n): TextStyle[keyof TextStyle] | undefined => {\n if (Array.isArray(style)) {\n const foundStyle = style.find(item => typeof item === 'object' && item !== null && attribute in item);\n return foundStyle?.[attribute as keyof typeof foundStyle];\n } else if (typeof style === 'object' && style !== null && attribute in style) {\n return style[attribute];\n }\n return undefined;\n};\n\nexport const Z_INDEX_VALUE = {\n DEFAULT: 8000,\n MODAL1: 8001,\n MODAL2: 8002,\n MODAL3: 8003,\n MODAL4: 8004,\n BOTTOM_SHEET1: 8101,\n BOTTOM_SHEET2: 8102,\n POPOVER: 8200,\n BOTTOM_CTA: 8400,\n ABOVE_KEYBOARD: 8500,\n SNACKBAR: 8600,\n ALERT: 8700,\n LOADING: 8999,\n};\n\nexport const MAX_FOLDABLE_SINGLE_WIDTH = 600;"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/model/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CACxB,KAA2B,EAC3B,SAA0B,EACY,EAAE;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC;QACtG,OAAO,UAAU,EAAE,CAAC,SAAoC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;CAChB,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC","sourcesContent":["import { StyleProp, TextStyle } from \"react-native\";\n\nexport const extractStyle = (\n style: StyleProp<TextStyle>,\n attribute: keyof TextStyle\n): TextStyle[keyof TextStyle] | undefined => {\n if (Array.isArray(style)) {\n const foundStyle = style.find(item => typeof item === 'object' && item !== null && attribute in item);\n return foundStyle?.[attribute as keyof typeof foundStyle];\n } else if (typeof style === 'object' && style !== null && attribute in style) {\n return style[attribute];\n }\n return undefined;\n};\n\nexport const Z_INDEX_VALUE = {\n DEFAULT: 8000,\n MODAL1: 8001,\n MODAL2: 8002,\n MODAL3: 8003,\n MODAL4: 8004,\n BOTTOM_SHEET1: 8101,\n BOTTOM_SHEET2: 8102,\n POPOVER: 8200,\n BOTTOM_CTA: 8400,\n ABOVE_KEYBOARD: 8500,\n SNACKBAR: 8600,\n ALERT: 8700,\n LOADING: 8999,\n};\n\n// Modality / BottomSheet 오버레이의 foldableSingleScreen 전용 단일 화면 최대 가로 길이(px)\nexport const OVERLAY_FOLDABLE_SINGLE_WIDTH = 600;"]}
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
1
  import { ShowAlertProps } from '../../model/types';
3
- declare function AlertOverlay({ actions, title, informative, isBackgroundTouchClose, titleStyle, informativeStyle, secondaryButtonStyle, primaryButtonStyle, secondaryButtonTextStyle, }: ShowAlertProps): React.JSX.Element | null;
2
+ declare function AlertOverlay({ actions, title, informative, isBackgroundTouchClose, titleStyle, informativeStyle, secondaryButtonStyle, primaryButtonStyle, secondaryButtonTextStyle, primaryButtonTextStyle, }: ShowAlertProps): import("react").JSX.Element | null;
4
3
  export default AlertOverlay;
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/AlertOverlay/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAgB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWjE,iBAAS,YAAY,CAAC,EACpB,OAAO,EACP,KAAK,EACL,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACzB,EAAE,cAAc,4BAkEhB;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/AlertOverlay/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUjE,iBAAS,YAAY,CAAC,EACpB,OAAO,EACP,KAAK,EACL,WAAW,EACX,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,GACvB,EAAE,cAAc,sCAyDhB;AAED,eAAe,YAAY,CAAC"}
@@ -1,18 +1,19 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useMemo } from 'react';
3
- import { Dimensions, StyleSheet, TouchableOpacity } from 'react-native';
3
+ import { StyleSheet, TouchableOpacity, useWindowDimensions } from 'react-native';
4
4
  import Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';
5
5
  import { useAlert } from '../../model/useOverlay';
6
6
  import { useTheme } from '../../context/ThemeContext';
7
7
  import ModalBackground from '../ui/ModalBackground';
8
8
  import ViewAtom from '../../ui/atoms/ViewAtom';
9
9
  import { Z_INDEX_VALUE } from '../../model/utils';
10
+ import { DURATION, RADIUS } from '../../theme/tokens';
10
11
  import ZSText from '../../ui/ZSText';
11
- const windowWidth = Dimensions.get('window').width;
12
- function AlertOverlay({ actions, title, informative, isBackgroundTouchClose, titleStyle, informativeStyle, secondaryButtonStyle, primaryButtonStyle, secondaryButtonTextStyle, }) {
12
+ function AlertOverlay({ actions, title, informative, isBackgroundTouchClose, titleStyle, informativeStyle, secondaryButtonStyle, primaryButtonStyle, secondaryButtonTextStyle, primaryButtonTextStyle, }) {
13
13
  const { alertVisible, setAlertVisible } = useAlert();
14
14
  const { palette: { background, primary: primaryColor, modalBgColor } } = useTheme();
15
15
  const styles = useMemo(() => createStyles({ background }), [background]);
16
+ const { width: windowWidth } = useWindowDimensions();
16
17
  const modalWidth = Math.min(windowWidth - 60, 400);
17
18
  const { primary, secondary } = actions || {};
18
19
  const handleButtonPress = useCallback((onPressFunction) => () => {
@@ -22,11 +23,11 @@ function AlertOverlay({ actions, title, informative, isBackgroundTouchClose, tit
22
23
  }, [setAlertVisible]);
23
24
  return (!alertVisible ? null :
24
25
  _jsx(ModalBackground, { zIndex: Z_INDEX_VALUE.ALERT, modalBgColor: modalBgColor, onPress: () => { if (isBackgroundTouchClose)
25
- setAlertVisible(false); }, children: _jsxs(Animated.View, { entering: FadeInDown.duration(300), exiting: FadeOutDown.duration(100), style: [styles.contentContainer, { width: modalWidth }], children: [title && (_jsx(ZSText, { typo: 'subTitle.1', style: [styles.title, titleStyle], children: title })), informative && (_jsx(ZSText, { typo: 'body.2', style: [styles.informative, informativeStyle], children: informative })), actions && (_jsx(ViewAtom, { style: styles.buttonContainer, children: secondary ? (_jsxs(_Fragment, { children: [_jsx(TouchableOpacity, { style: [
26
- styles.button,
27
- { backgroundColor: background.neutral, marginRight: 8 },
28
- secondaryButtonStyle
29
- ], onPress: handleButtonPress(secondary?.onPress), children: _jsx(ZSText, { typo: 'label.2', style: [secondaryButtonTextStyle], children: secondary.label }) }), _jsx(TouchableOpacity, { style: [styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle], onPress: handleButtonPress(primary?.onPress), children: _jsx(ZSText, { typo: 'label.2', color: 'white', style: [secondaryButtonTextStyle], children: primary?.label || '확인' }) })] })) : (_jsx(TouchableOpacity, { style: [styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle], onPress: handleButtonPress(primary?.onPress), children: _jsx(ZSText, { typo: 'label.2', color: 'white', style: [secondaryButtonTextStyle], children: primary?.label || '확인' }) })) }))] }) }, alertVisible ? 'visibleao' : 'hiddenao'));
26
+ setAlertVisible(false); }, children: _jsxs(Animated.View, { entering: FadeInDown.duration(DURATION.enter), exiting: FadeOutDown.duration(DURATION.press), style: [styles.contentContainer, { width: modalWidth }], children: [title && (_jsx(ZSText, { typo: 'subTitle.1', style: [styles.title, titleStyle], children: title })), informative && (_jsx(ZSText, { typo: 'body.2', style: [styles.informative, informativeStyle], children: informative })), actions && (_jsxs(ViewAtom, { style: styles.buttonContainer, children: [secondary && (_jsx(TouchableOpacity, { style: [
27
+ styles.button,
28
+ { backgroundColor: background.neutral },
29
+ secondaryButtonStyle
30
+ ], onPress: handleButtonPress(secondary?.onPress), children: _jsx(ZSText, { typo: 'label.2', style: [secondaryButtonTextStyle], children: secondary.label }) })), _jsx(TouchableOpacity, { style: [styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle], onPress: handleButtonPress(primary?.onPress), children: _jsx(ZSText, { typo: 'label.2', color: 'white', style: [primaryButtonTextStyle], children: primary?.label || '확인' }) })] }))] }) }, alertVisible ? 'visibleao' : 'hiddenao'));
30
31
  }
31
32
  export default AlertOverlay;
32
33
  const createStyles = ({ background }) => StyleSheet.create({
@@ -46,13 +47,14 @@ const createStyles = ({ background }) => StyleSheet.create({
46
47
  marginTop: 24,
47
48
  alignItems: 'center',
48
49
  justifyContent: 'flex-end',
50
+ gap: 8,
49
51
  },
50
52
  button: {
51
53
  flex: 1,
52
54
  justifyContent: 'center',
53
55
  alignItems: 'center',
54
56
  paddingVertical: 14,
55
- borderRadius: 12,
57
+ borderRadius: RADIUS.md,
56
58
  },
57
59
  avoidingView: {
58
60
  flex: 1,
@@ -61,7 +63,7 @@ const createStyles = ({ background }) => StyleSheet.create({
61
63
  contentContainer: {
62
64
  alignItems: 'center',
63
65
  backgroundColor: background.base,
64
- borderRadius: 22,
66
+ borderRadius: RADIUS.xxl,
65
67
  paddingBottom: 18,
66
68
  paddingTop: 24,
67
69
  paddingHorizontal: 20,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/AlertOverlay/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { Dimensions, StyleSheet, TouchableOpacity } from 'react-native';\nimport Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';\nimport { AlertActions, ShowAlertProps } from '../../model/types';\nimport { useAlert } from '../../model/useOverlay';\nimport { useTheme } from '../../context/ThemeContext';\nimport { ThemeBackground } from '../../theme/types';\nimport ModalBackground from '../ui/ModalBackground';\nimport ViewAtom from '../../ui/atoms/ViewAtom';\nimport { Z_INDEX_VALUE } from '../../model/utils';\nimport ZSText from '../../ui/ZSText';\n\nconst windowWidth = Dimensions.get('window').width;\n\nfunction AlertOverlay({\n actions,\n title,\n informative,\n isBackgroundTouchClose,\n titleStyle,\n informativeStyle,\n secondaryButtonStyle,\n primaryButtonStyle,\n secondaryButtonTextStyle,\n}: ShowAlertProps) {\n const { alertVisible, setAlertVisible } = useAlert();\n const { palette: { background, primary: primaryColor, modalBgColor } } = useTheme();\n const styles = useMemo(() => createStyles({ background }), [background]);\n const modalWidth = Math.min(windowWidth - 60, 400);\n const { primary, secondary } = actions || {} as AlertActions;\n\n const handleButtonPress = useCallback((onPressFunction?: () => void) => () => {\n if (onPressFunction) onPressFunction();\n setAlertVisible(false);\n }, [setAlertVisible]);\n\n return (\n !alertVisible ? null :\n <ModalBackground\n zIndex={Z_INDEX_VALUE.ALERT}\n key={alertVisible ? 'visibleao' : 'hiddenao'}\n modalBgColor={modalBgColor}\n onPress={() => { if (isBackgroundTouchClose) setAlertVisible(false); }}\n >\n <Animated.View\n entering={FadeInDown.duration(300)}\n exiting={FadeOutDown.duration(100)}\n style={[styles.contentContainer, { width: modalWidth }]}\n >\n {title && (\n <ZSText typo='subTitle.1' style={[styles.title, titleStyle]}>{title}</ZSText>\n )}\n {informative && (\n <ZSText typo='body.2' style={[styles.informative, informativeStyle]}>{informative}</ZSText>\n )}\n {actions && (\n <ViewAtom style={styles.buttonContainer}>\n {secondary ? (\n <>\n <TouchableOpacity\n style={[\n styles.button,\n { backgroundColor: background.neutral, marginRight: 8 },\n secondaryButtonStyle\n ]}\n onPress={handleButtonPress(secondary?.onPress)}\n >\n <ZSText typo='label.2' style={[secondaryButtonTextStyle]}>{secondary.label}</ZSText>\n </TouchableOpacity>\n\n <TouchableOpacity\n style={[styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle]}\n onPress={handleButtonPress(primary?.onPress)}\n >\n <ZSText typo='label.2' color='white' style={[secondaryButtonTextStyle]}>{primary?.label || '확인'}</ZSText>\n </TouchableOpacity>\n </>\n ) : (\n <TouchableOpacity\n style={[styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle]}\n onPress={handleButtonPress(primary?.onPress)}\n >\n <ZSText typo='label.2' color='white' style={[secondaryButtonTextStyle]}>{primary?.label || '확인'}</ZSText>\n </TouchableOpacity>\n )}\n </ViewAtom>\n )}\n </Animated.View>\n </ModalBackground>\n )\n}\n\nexport default AlertOverlay;\n\nconst createStyles = ({ background }: { background: ThemeBackground; }) =>\n StyleSheet.create({\n title: {\n marginBottom: 8,\n width: '100%',\n paddingHorizontal: 4\n },\n informative: {\n marginTop: 8,\n width: '100%',\n paddingHorizontal: 4\n },\n buttonContainer: {\n flexDirection: 'row',\n width: '100%',\n marginTop: 24,\n alignItems: 'center',\n justifyContent: 'flex-end',\n },\n button: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingVertical: 14,\n borderRadius: 12,\n },\n avoidingView: {\n flex: 1,\n justifyContent: 'center'\n },\n contentContainer: {\n alignItems: 'center',\n backgroundColor: background.base,\n borderRadius: 22,\n paddingBottom: 18,\n paddingTop: 24,\n paddingHorizontal: 20,\n },\n });\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlay/AlertOverlay/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { StyleSheet, TouchableOpacity, useWindowDimensions } from 'react-native';\nimport Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';\nimport { AlertActions, ShowAlertProps } from '../../model/types';\nimport { useAlert } from '../../model/useOverlay';\nimport { useTheme } from '../../context/ThemeContext';\nimport { ThemeBackground } from '../../theme/types';\nimport ModalBackground from '../ui/ModalBackground';\nimport ViewAtom from '../../ui/atoms/ViewAtom';\nimport { Z_INDEX_VALUE } from '../../model/utils';\nimport { DURATION, RADIUS } from '../../theme/tokens';\nimport ZSText from '../../ui/ZSText';\n\nfunction AlertOverlay({\n actions,\n title,\n informative,\n isBackgroundTouchClose,\n titleStyle,\n informativeStyle,\n secondaryButtonStyle,\n primaryButtonStyle,\n secondaryButtonTextStyle,\n primaryButtonTextStyle,\n}: ShowAlertProps) {\n const { alertVisible, setAlertVisible } = useAlert();\n const { palette: { background, primary: primaryColor, modalBgColor } } = useTheme();\n const styles = useMemo(() => createStyles({ background }), [background]);\n const { width: windowWidth } = useWindowDimensions();\n const modalWidth = Math.min(windowWidth - 60, 400);\n const { primary, secondary } = actions || {} as AlertActions;\n\n const handleButtonPress = useCallback((onPressFunction?: () => void) => () => {\n if (onPressFunction) onPressFunction();\n setAlertVisible(false);\n }, [setAlertVisible]);\n\n return (\n !alertVisible ? null :\n <ModalBackground\n zIndex={Z_INDEX_VALUE.ALERT}\n key={alertVisible ? 'visibleao' : 'hiddenao'}\n modalBgColor={modalBgColor}\n onPress={() => { if (isBackgroundTouchClose) setAlertVisible(false); }}\n >\n <Animated.View\n entering={FadeInDown.duration(DURATION.enter)}\n exiting={FadeOutDown.duration(DURATION.press)}\n style={[styles.contentContainer, { width: modalWidth }]}\n >\n {title && (\n <ZSText typo='subTitle.1' style={[styles.title, titleStyle]}>{title}</ZSText>\n )}\n {informative && (\n <ZSText typo='body.2' style={[styles.informative, informativeStyle]}>{informative}</ZSText>\n )}\n {actions && (\n <ViewAtom style={styles.buttonContainer}>\n {secondary && (\n <TouchableOpacity\n style={[\n styles.button,\n { backgroundColor: background.neutral },\n secondaryButtonStyle\n ]}\n onPress={handleButtonPress(secondary?.onPress)}\n >\n <ZSText typo='label.2' style={[secondaryButtonTextStyle]}>{secondary.label}</ZSText>\n </TouchableOpacity>\n )}\n <TouchableOpacity\n style={[styles.button, { backgroundColor: primaryColor.main }, primaryButtonStyle]}\n onPress={handleButtonPress(primary?.onPress)}\n >\n <ZSText typo='label.2' color='white' style={[primaryButtonTextStyle]}>{primary?.label || '확인'}</ZSText>\n </TouchableOpacity>\n </ViewAtom>\n )}\n </Animated.View>\n </ModalBackground>\n )\n}\n\nexport default AlertOverlay;\n\nconst createStyles = ({ background }: { background: ThemeBackground; }) =>\n StyleSheet.create({\n title: {\n marginBottom: 8,\n width: '100%',\n paddingHorizontal: 4\n },\n informative: {\n marginTop: 8,\n width: '100%',\n paddingHorizontal: 4\n },\n buttonContainer: {\n flexDirection: 'row',\n width: '100%',\n marginTop: 24,\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 8,\n },\n button: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingVertical: 14,\n borderRadius: RADIUS.md,\n },\n avoidingView: {\n flex: 1,\n justifyContent: 'center'\n },\n contentContainer: {\n alignItems: 'center',\n backgroundColor: background.base,\n borderRadius: RADIUS.xxl,\n paddingBottom: 18,\n paddingTop: 24,\n paddingHorizontal: 20,\n },\n });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/BottomSheetOverlay/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA0CzD,iBAAS,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,EACT,OAAY,GACb,EAAE,oBAAoB,4BA4QtB;AA0CD,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/overlay/BottomSheetOverlay/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAOjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAkDzD,iBAAS,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,EACT,OAAY,GACb,EAAE,oBAAoB,4BAgRtB;AA0CD,eAAe,kBAAkB,CAAC"}
@@ -6,7 +6,8 @@ import Animated, { useAnimatedStyle, useSharedValue, withSpring, withTiming } fr
6
6
  import ModalBackground from '../ui/ModalBackground';
7
7
  import { useTheme } from '../../context/ThemeContext';
8
8
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
9
- import { MAX_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';
9
+ import { OVERLAY_FOLDABLE_SINGLE_WIDTH, Z_INDEX_VALUE } from '../../model/utils';
10
+ import { RADIUS } from '../../theme/tokens';
10
11
  import useKeyboard from '../../model/useKeyboard';
11
12
  import useFoldingState from '../../model/useFoldingState';
12
13
  const IS_IOS = Platform.OS === 'ios';
@@ -22,6 +23,13 @@ const ANIMATION_CONFIG = {
22
23
  velocity: 100,
23
24
  restDisplacementThreshold: 0.2,
24
25
  },
26
+ restore: {
27
+ damping: 26,
28
+ stiffness: 260,
29
+ mass: 0.85,
30
+ restDisplacementThreshold: 0.1,
31
+ restSpeedThreshold: 2,
32
+ },
25
33
  close: { duration: 150 },
26
34
  scale: { duration: 200 },
27
35
  scaleRestore: {
@@ -38,7 +46,7 @@ const GESTURE_CONSTANTS = {
38
46
  closeDistanceRatio: 1 / 3,
39
47
  minimumCloseDistance: 80,
40
48
  hideDelay: 200,
41
- moveThreshold: 10, // 드래그로 인식하기 위한 최소 이동 거리 (px)
49
+ moveThreshold: 10,
42
50
  };
43
51
  const getSafeFiniteNumber = (value, fallback) => Number.isFinite(value) ? value : fallback;
44
52
  function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
@@ -85,12 +93,12 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
85
93
  handleKeyboardShow,
86
94
  handleKeyboardHide,
87
95
  });
88
- // BottomSheet 표시/숨김 애니메이션 처리
89
96
  useEffect(() => {
90
97
  let timeoutId;
91
98
  if (bottomSheetVisible) {
92
99
  closingOffsetRef.current = latestCloseOffsetRef.current;
93
100
  Keyboard.dismiss();
101
+ translateY.value = latestCloseOffsetRef.current;
94
102
  setLocalVisible(true);
95
103
  translateY.value = withSpring(0, ANIMATION_CONFIG.spring);
96
104
  }
@@ -158,7 +166,8 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
158
166
  }, []);
159
167
  const handlePanResponderRelease = useCallback((_, gestureState) => {
160
168
  isGesturing.value = false;
161
- translateX.value = withTiming(0, { duration: 100 });
169
+ const xVelocity = (gestureState.vx / GESTURE_CONSTANTS.horizontalDamping) * 1000;
170
+ translateX.value = withSpring(0, { ...ANIMATION_CONFIG.restore, velocity: xVelocity });
162
171
  const dismissThresholdHeight = sheetHeight > 0 ? sheetHeight : constrainedMaxHeight;
163
172
  const dismissDistanceThreshold = Math.max(dismissThresholdHeight * GESTURE_CONSTANTS.closeDistanceRatio, GESTURE_CONSTANTS.minimumCloseDistance);
164
173
  const shouldClose = gestureState.vy > GESTURE_CONSTANTS.closeVelocityThreshold ||
@@ -170,7 +179,11 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
170
179
  closeBottomSheet();
171
180
  }
172
181
  else {
173
- translateY.value = withTiming(0, ANIMATION_CONFIG.close);
182
+ const yDamping = translateY.value >= 0
183
+ ? GESTURE_CONSTANTS.verticalDownDamping
184
+ : GESTURE_CONSTANTS.verticalUpDamping;
185
+ const yVelocity = (gestureState.vy / yDamping) * 1000;
186
+ translateY.value = withSpring(0, { ...ANIMATION_CONFIG.restore, velocity: yVelocity });
174
187
  }
175
188
  scale.value = withSpring(1, ANIMATION_CONFIG.scaleRestore);
176
189
  }, [closeBottomSheet, constrainedMaxHeight, sheetHeight]);
@@ -178,7 +191,6 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
178
191
  onStartShouldSetPanResponder: () => false,
179
192
  onStartShouldSetPanResponderCapture: () => false,
180
193
  onMoveShouldSetPanResponder: (_, gestureState) => {
181
- // 일정 거리 이상 이동했을 때만 PanResponder가 응답 (탭과 드래그 구분)
182
194
  const { dx, dy } = gestureState;
183
195
  return Math.abs(dx) > GESTURE_CONSTANTS.moveThreshold || Math.abs(dy) > GESTURE_CONSTANTS.moveThreshold;
184
196
  },
@@ -187,7 +199,6 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
187
199
  onPanResponderMove: handlePanResponderMove,
188
200
  onPanResponderRelease: handlePanResponderRelease,
189
201
  }), [handlePanResponderGrant, handlePanResponderMove, handlePanResponderRelease]);
190
- // 배경 터치 핸들러
191
202
  const handleBackgroundPress = useCallback(() => {
192
203
  if (isBackgroundTouchClose)
193
204
  setBottomSheetVisible(false);
@@ -206,12 +217,12 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
206
217
  containerHeightStyle,
207
218
  {
208
219
  width: options.type === 'fixed' ? '100%' : windowWidth - marginHorizontal * 2,
209
- maxWidth: foldableSingleScreen ? MAX_FOLDABLE_SINGLE_WIDTH : '100%',
220
+ maxWidth: foldableSingleScreen ? OVERLAY_FOLDABLE_SINGLE_WIDTH : '100%',
210
221
  marginHorizontal: options.type === 'fixed' ? 0 : marginHorizontal,
211
222
  bottom: options.type === 'fixed' ? 0 : marginBottom + bottomInsets,
212
223
  paddingBottom: options.type === 'fixed' ? bottomInsets : 0,
213
224
  backgroundColor: palette.background.base,
214
- ...(options.type === 'fixed' ? { borderTopLeftRadius: 26, borderTopRightRadius: 26, borderBottomLeftRadius: 0, borderBottomRightRadius: 0 } : { borderRadius: 26 }),
225
+ ...(options.type === 'fixed' ? { borderTopLeftRadius: RADIUS.sheet, borderTopRightRadius: RADIUS.sheet, borderBottomLeftRadius: 0, borderBottomRightRadius: 0 } : { borderRadius: RADIUS.sheet }),
215
226
  },
216
227
  animatedStyles,
217
228
  ];
@@ -240,7 +251,7 @@ function BottomSheetOverlay({ headerComponent, component, options = {}, }) {
240
251
  const styles = StyleSheet.create({
241
252
  container: {
242
253
  position: 'absolute',
243
- borderRadius: 26,
254
+ borderRadius: RADIUS.sheet,
244
255
  overflow: 'hidden',
245
256
  zIndex: Z_INDEX_VALUE.BOTTOM_SHEET2,
246
257
  },
@@ -273,7 +284,7 @@ const styles = StyleSheet.create({
273
284
  gestureBar: {
274
285
  width: 45,
275
286
  height: 3,
276
- borderRadius: 2,
287
+ borderRadius: 1.5,
277
288
  },
278
289
  });
279
290
  export default BottomSheetOverlay;