@0610studio/zs-ui 0.17.1 → 0.18.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 (138) hide show
  1. package/android/build.gradle +3 -3
  2. package/build/ZsUiModule.d.ts.map +1 -1
  3. package/build/ZsUiModule.js +0 -2
  4. package/build/ZsUiModule.js.map +1 -1
  5. package/build/ZsUiView.js +2 -2
  6. package/build/ZsUiView.js.map +1 -1
  7. package/build/ZsUiView.web.js +2 -4
  8. package/build/ZsUiView.web.js.map +1 -1
  9. package/build/assets/SvgCheck.js +2 -4
  10. package/build/assets/SvgCheck.js.map +1 -1
  11. package/build/assets/SvgExclamation.d.ts.map +1 -1
  12. package/build/assets/SvgExclamation.js +2 -9
  13. package/build/assets/SvgExclamation.js.map +1 -1
  14. package/build/assets/SvgX.js +3 -5
  15. package/build/assets/SvgX.js.map +1 -1
  16. package/build/context/OverlayContext.d.ts.map +1 -1
  17. package/build/context/OverlayContext.js +12 -42
  18. package/build/context/OverlayContext.js.map +1 -1
  19. package/build/context/ThemeContext.d.ts +9 -0
  20. package/build/context/ThemeContext.d.ts.map +1 -1
  21. package/build/context/ThemeContext.js +13 -19
  22. package/build/context/ThemeContext.js.map +1 -1
  23. package/build/index.d.ts +2 -2
  24. package/build/index.d.ts.map +1 -1
  25. package/build/index.js +1 -7
  26. package/build/index.js.map +1 -1
  27. package/build/model/globalOverlay.d.ts +0 -8
  28. package/build/model/globalOverlay.d.ts.map +1 -1
  29. package/build/model/globalOverlay.js +0 -9
  30. package/build/model/globalOverlay.js.map +1 -1
  31. package/build/model/types.d.ts +1 -1
  32. package/build/model/types.d.ts.map +1 -1
  33. package/build/model/types.js.map +1 -1
  34. package/build/model/useKeyboard.d.ts.map +1 -1
  35. package/build/model/useKeyboard.js +8 -4
  36. package/build/model/useKeyboard.js.map +1 -1
  37. package/build/model/utils.d.ts +1 -1
  38. package/build/model/utils.d.ts.map +1 -1
  39. package/build/model/utils.js +2 -1
  40. package/build/model/utils.js.map +1 -1
  41. package/build/overlay/AlertOverlay/index.d.ts.map +1 -1
  42. package/build/overlay/AlertOverlay/index.js +10 -27
  43. package/build/overlay/AlertOverlay/index.js.map +1 -1
  44. package/build/overlay/BottomSheetOverlay/index.d.ts.map +1 -1
  45. package/build/overlay/BottomSheetOverlay/index.js +21 -25
  46. package/build/overlay/BottomSheetOverlay/index.js.map +1 -1
  47. package/build/overlay/LoadingNotify/index.js +4 -5
  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 +21 -36
  51. package/build/overlay/Modality/index.js.map +1 -1
  52. package/build/overlay/PopOver/PopOverButton.js +3 -6
  53. package/build/overlay/PopOver/PopOverButton.js.map +1 -1
  54. package/build/overlay/PopOver/PopOverMenu.d.ts.map +1 -1
  55. package/build/overlay/PopOver/PopOverMenu.js +10 -18
  56. package/build/overlay/PopOver/PopOverMenu.js.map +1 -1
  57. package/build/overlay/SnackbarNotify/index.d.ts +3 -3
  58. package/build/overlay/SnackbarNotify/index.d.ts.map +1 -1
  59. package/build/overlay/SnackbarNotify/index.js +8 -9
  60. package/build/overlay/SnackbarNotify/index.js.map +1 -1
  61. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts +3 -3
  62. package/build/overlay/SnackbarNotify/ui/SnackbarItem.d.ts.map +1 -1
  63. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js +9 -16
  64. package/build/overlay/SnackbarNotify/ui/SnackbarItem.js.map +1 -1
  65. package/build/overlay/ZSPortal/index.d.ts.map +1 -1
  66. package/build/overlay/ZSPortal/index.js +16 -9
  67. package/build/overlay/ZSPortal/index.js.map +1 -1
  68. package/build/overlay/ui/ModalBackground.js +5 -9
  69. package/build/overlay/ui/ModalBackground.js.map +1 -1
  70. package/build/theme/elevation.d.ts +94 -10
  71. package/build/theme/elevation.d.ts.map +1 -1
  72. package/build/theme/elevation.js +39 -35
  73. package/build/theme/elevation.js.map +1 -1
  74. package/build/theme/palette.d.ts +1 -5
  75. package/build/theme/palette.d.ts.map +1 -1
  76. package/build/theme/palette.js +3 -12
  77. package/build/theme/palette.js.map +1 -1
  78. package/build/theme/resolveColor.d.ts +4 -0
  79. package/build/theme/resolveColor.d.ts.map +1 -0
  80. package/build/theme/resolveColor.js +29 -0
  81. package/build/theme/resolveColor.js.map +1 -0
  82. package/build/ui/ZSAboveKeyboard/index.js +2 -5
  83. package/build/ui/ZSAboveKeyboard/index.js.map +1 -1
  84. package/build/ui/ZSBlockButton/index.d.ts +4 -2
  85. package/build/ui/ZSBlockButton/index.d.ts.map +1 -1
  86. package/build/ui/ZSBlockButton/index.js +44 -96
  87. package/build/ui/ZSBlockButton/index.js.map +1 -1
  88. package/build/ui/ZSContainer/index.d.ts +20 -0
  89. package/build/ui/ZSContainer/index.d.ts.map +1 -1
  90. package/build/ui/ZSContainer/index.js +30 -50
  91. package/build/ui/ZSContainer/index.js.map +1 -1
  92. package/build/ui/ZSPressable/index.d.ts.map +1 -1
  93. package/build/ui/ZSPressable/index.js +2 -11
  94. package/build/ui/ZSPressable/index.js.map +1 -1
  95. package/build/ui/ZSRadioGroup/index.d.ts +3 -2
  96. package/build/ui/ZSRadioGroup/index.d.ts.map +1 -1
  97. package/build/ui/ZSRadioGroup/index.js +67 -78
  98. package/build/ui/ZSRadioGroup/index.js.map +1 -1
  99. package/build/ui/ZSSkeleton/index.d.ts +2 -1
  100. package/build/ui/ZSSkeleton/index.d.ts.map +1 -1
  101. package/build/ui/ZSSkeleton/index.js +3 -12
  102. package/build/ui/ZSSkeleton/index.js.map +1 -1
  103. package/build/ui/ZSSkeletonBox/index.d.ts +2 -1
  104. package/build/ui/ZSSkeletonBox/index.d.ts.map +1 -1
  105. package/build/ui/ZSSkeletonBox/index.js +13 -18
  106. package/build/ui/ZSSkeletonBox/index.js.map +1 -1
  107. package/build/ui/ZSSwitch/index.d.ts +2 -1
  108. package/build/ui/ZSSwitch/index.d.ts.map +1 -1
  109. package/build/ui/ZSSwitch/index.js +3 -7
  110. package/build/ui/ZSSwitch/index.js.map +1 -1
  111. package/build/ui/ZSText/index.d.ts +3 -2
  112. package/build/ui/ZSText/index.d.ts.map +1 -1
  113. package/build/ui/ZSText/index.js +5 -16
  114. package/build/ui/ZSText/index.js.map +1 -1
  115. package/build/ui/ZSTextField/index.d.ts.map +1 -1
  116. package/build/ui/ZSTextField/index.js +42 -42
  117. package/build/ui/ZSTextField/index.js.map +1 -1
  118. package/build/ui/ZSTextField/ui/ButtonClose.js +2 -3
  119. package/build/ui/ZSTextField/ui/ButtonClose.js.map +1 -1
  120. package/build/ui/ZSTextField/ui/ErrorComponent.js +2 -7
  121. package/build/ui/ZSTextField/ui/ErrorComponent.js.map +1 -1
  122. package/build/ui/ZSView/index.d.ts +3 -2
  123. package/build/ui/ZSView/index.d.ts.map +1 -1
  124. package/build/ui/ZSView/index.js +9 -11
  125. package/build/ui/ZSView/index.js.map +1 -1
  126. package/build/ui/atoms/AnimatedWrapper.d.ts.map +1 -1
  127. package/build/ui/atoms/AnimatedWrapper.js +36 -44
  128. package/build/ui/atoms/AnimatedWrapper.js.map +1 -1
  129. package/build/ui/atoms/TextAtom.d.ts +1 -2
  130. package/build/ui/atoms/TextAtom.d.ts.map +1 -1
  131. package/build/ui/atoms/TextAtom.js +2 -4
  132. package/build/ui/atoms/TextAtom.js.map +1 -1
  133. package/build/ui/atoms/ViewAtom.d.ts +1 -2
  134. package/build/ui/atoms/ViewAtom.d.ts.map +1 -1
  135. package/build/ui/atoms/ViewAtom.js +2 -4
  136. package/build/ui/atoms/ViewAtom.js.map +1 -1
  137. package/ios/ZsUi.podspec +1 -1
  138. package/package.json +30 -28
@@ -23,10 +23,10 @@ if (useManagedAndroidSdkVersions) {
23
23
  }
24
24
  }
25
25
  project.android {
26
- compileSdkVersion safeExtGet("compileSdkVersion", 34)
26
+ compileSdkVersion safeExtGet("compileSdkVersion", 36)
27
27
  defaultConfig {
28
- minSdkVersion safeExtGet("minSdkVersion", 21)
29
- targetSdkVersion safeExtGet("targetSdkVersion", 34)
28
+ minSdkVersion safeExtGet("minSdkVersion", 24)
29
+ targetSdkVersion safeExtGet("targetSdkVersion", 36)
30
30
  }
31
31
  }
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ZsUiModule.d.ts","sourceRoot":"","sources":["../src/ZsUiModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,UAAU,mBAAmB;IAC3B,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAID,QAAA,MAAM,UAAU,EAAkC,mBAAmB,CAAC;AAEtE,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ZsUiModule.d.ts","sourceRoot":"","sources":["../src/ZsUiModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,UAAU,mBAAmB;IAC3B,iBAAiB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACtD;AAED,QAAA,MAAM,UAAU,EAAkC,mBAAmB,CAAC;AAEtE,eAAe,UAAU,CAAC"}
@@ -1,6 +1,4 @@
1
1
  import { requireNativeModule } from 'expo-modules-core';
2
- // It loads the native module object from the JSI or falls back to
3
- // the bridge module (from NativeModulesProxy) if the remote debugger is on.
4
2
  const ZsUiModule = requireNativeModule('ZsUi');
5
3
  export default ZsUiModule;
6
4
  //# sourceMappingURL=ZsUiModule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZsUiModule.js","sourceRoot":"","sources":["../src/ZsUiModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxD,kEAAkE;AAClE,4EAA4E;AAC5E,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAwB,CAAC;AAEtE,eAAe,UAAU,CAAC","sourcesContent":["import { requireNativeModule } from 'expo-modules-core';\nimport { NativeFoldingStateInfo } from './model/types';\n\ninterface ZsUiModuleInterface {\n getFoldingFeature(): Promise<NativeFoldingStateInfo>;\n}\n\n// It loads the native module object from the JSI or falls back to\n// the bridge module (from NativeModulesProxy) if the remote debugger is on.\nconst ZsUiModule = requireNativeModule('ZsUi') as ZsUiModuleInterface;\n\nexport default ZsUiModule;\n"]}
1
+ {"version":3,"file":"ZsUiModule.js","sourceRoot":"","sources":["../src/ZsUiModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAwB,CAAC;AAEtE,eAAe,UAAU,CAAC","sourcesContent":["import { requireNativeModule } from 'expo-modules-core';\nimport { NativeFoldingStateInfo } from './model/types';\n\ninterface ZsUiModuleInterface {\n getFoldingFeature(): Promise<NativeFoldingStateInfo>;\n}\n\nconst ZsUiModule = requireNativeModule('ZsUi') as ZsUiModuleInterface;\n\nexport default ZsUiModule;\n"]}
package/build/ZsUiView.js CHANGED
@@ -1,7 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import { requireNativeViewManager } from 'expo-modules-core';
2
- import * as React from 'react';
3
3
  const NativeView = requireNativeViewManager('ZsUi');
4
4
  export default function ZsUiView(props) {
5
- return <NativeView {...props}/>;
5
+ return _jsx(NativeView, { ...props });
6
6
  }
7
7
  //# sourceMappingURL=ZsUiView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZsUiView.js","sourceRoot":"","sources":["../src/ZsUiView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,UAAU,GACd,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACnD,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAG,CAAC;AACnC,CAAC","sourcesContent":["import { requireNativeViewManager } from 'expo-modules-core';\nimport * as React from 'react';\n\nimport { ZsUiViewProps } from './ZsUi.types';\n\nconst NativeView: React.ComponentType<ZsUiViewProps> =\n requireNativeViewManager('ZsUi');\n\nexport default function ZsUiView(props: ZsUiViewProps) {\n return <NativeView {...props} />;\n}\n"]}
1
+ {"version":3,"file":"ZsUiView.js","sourceRoot":"","sources":["../src/ZsUiView.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAK7D,MAAM,UAAU,GACd,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACnD,OAAO,KAAC,UAAU,OAAK,KAAK,GAAI,CAAC;AACnC,CAAC","sourcesContent":["import { requireNativeViewManager } from 'expo-modules-core';\nimport * as React from 'react';\n\nimport { ZsUiViewProps } from './ZsUi.types';\n\nconst NativeView: React.ComponentType<ZsUiViewProps> =\n requireNativeViewManager('ZsUi');\n\nexport default function ZsUiView(props: ZsUiViewProps) {\n return <NativeView {...props} />;\n}\n"]}
@@ -1,7 +1,5 @@
1
- import * as React from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  export default function ZsUiView(props) {
3
- return (<div>
4
- <span>{props.name}</span>
5
- </div>);
3
+ return (_jsx("div", { children: _jsx("span", { children: props.name }) }));
6
4
  }
7
5
  //# sourceMappingURL=ZsUiView.web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ZsUiView.web.js","sourceRoot":"","sources":["../src/ZsUiView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACnD,OAAO,CACL,CAAC,GAAG,CACF;MAAA,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAC1B;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC","sourcesContent":["import * as React from 'react';\n\nimport { ZsUiViewProps } from './ZsUi.types';\n\nexport default function ZsUiView(props: ZsUiViewProps) {\n return (\n <div>\n <span>{props.name}</span>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ZsUiView.web.js","sourceRoot":"","sources":["../src/ZsUiView.web.tsx"],"names":[],"mappings":";AAIA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACnD,OAAO,CACL,wBACE,yBAAO,KAAK,CAAC,IAAI,GAAQ,GACrB,CACP,CAAC;AACJ,CAAC","sourcesContent":["import * as React from 'react';\n\nimport { ZsUiViewProps } from './ZsUi.types';\n\nexport default function ZsUiView(props: ZsUiViewProps) {\n return (\n <div>\n <span>{props.name}</span>\n </div>\n );\n}\n"]}
@@ -1,8 +1,6 @@
1
- import React from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import Svg, { Path } from 'react-native-svg';
3
3
  export const SvgCheck = ({ size = 24, color = '#ffffff', strokeWidth = "2" }) => {
4
- return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
5
- <Path d="M6 12L10.2426 16.2426L18.727 7.75732" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round"/>
6
- </Svg>);
4
+ return (_jsx(Svg, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", children: _jsx(Path, { d: "M6 12L10.2426 16.2426L18.727 7.75732", stroke: color, strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" }) }));
7
5
  };
8
6
  //# sourceMappingURL=SvgCheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgCheck.js","sourceRoot":"","sources":["../../src/assets/SvgCheck.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,WAAW,GAAG,GAAG,EAAE,EAAE,EAAE;IAC9E,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAC7D;MAAA,CAAC,IAAI,CACH,CAAC,CAAC,sCAAsC,CACxC,MAAM,CAAC,CAAC,KAAK,CAAC,CACd,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,aAAa,CAAC,OAAO,CACrB,cAAc,CAAC,OAAO,EAE1B;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\n\nexport const SvgCheck = ({ size = 24, color = '#ffffff', strokeWidth = \"2\" }) => {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M6 12L10.2426 16.2426L18.727 7.75732\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n};\n"]}
1
+ {"version":3,"file":"SvgCheck.js","sourceRoot":"","sources":["../../src/assets/SvgCheck.tsx"],"names":[],"mappings":";AACA,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,WAAW,GAAG,GAAG,EAAE,EAAE,EAAE;IAC9E,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,YAC7D,KAAC,IAAI,IACH,CAAC,EAAC,sCAAsC,EACxC,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\n\nexport const SvgCheck = ({ size = 24, color = '#ffffff', strokeWidth = \"2\" }) => {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M6 12L10.2426 16.2426L18.727 7.75732\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SvgExclamation.d.ts","sourceRoot":"","sources":["../../src/assets/SvgExclamation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,QAAA,MAAM,cAAc,GAAI;;;;CAIvB,sBA8BA,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"SvgExclamation.d.ts","sourceRoot":"","sources":["../../src/assets/SvgExclamation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,QAAA,MAAM,cAAc,GAAI;;;;CAIvB,sBA4BA,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -1,14 +1,7 @@
1
- import React from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import Svg, { Path, Circle } from 'react-native-svg';
3
3
  const SvgExclamation = ({ size = 24, backgroundColor = '#FF4D4F', exclamationColor = '#FFFFFF', }) => {
4
- return (<Svg width={size} height={size} viewBox="0 0 24 24">
5
- {/* 배경 원 */}
6
- <Circle cx="12" cy="12" r="10" fill={backgroundColor}/>
7
-
8
- {/* 느낌표 표시 */}
9
- <Path d="M12 6.5v6" stroke={exclamationColor} strokeWidth="2.2" strokeLinecap="round"/>
10
- <Circle cx="12.1" cy="17" r="1.5" fill={exclamationColor}/>
11
- </Svg>);
4
+ return (_jsxs(Svg, { width: size, height: size, viewBox: "0 0 24 24", children: [_jsx(Circle, { cx: "12", cy: "12", r: "10", fill: backgroundColor }), _jsx(Path, { d: "M12 6.5v6", stroke: exclamationColor, strokeWidth: "2.2", strokeLinecap: "round" }), _jsx(Circle, { cx: "12.1", cy: "17", r: "1.5", fill: exclamationColor })] }));
12
5
  };
13
6
  export default SvgExclamation;
14
7
  //# sourceMappingURL=SvgExclamation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgExclamation.js","sourceRoot":"","sources":["../../src/assets/SvgExclamation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,cAAc,GAAG,CAAC,EACtB,IAAI,GAAG,EAAE,EACT,eAAe,GAAG,SAAS,EAC3B,gBAAgB,GAAG,SAAS,GAC7B,EAAE,EAAE;IACH,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,MAAM,CAAC,CAAC,IAAI,CAAC,CACb,OAAO,CAAC,WAAW,CAEnB;MAAA,CAAC,UAAU,CACX;MAAA,CAAC,MAAM,CACL,EAAE,CAAC,IAAI,CACP,EAAE,CAAC,IAAI,CACP,CAAC,CAAC,IAAI,CACN,IAAI,CAAC,CAAC,eAAe,CAAC,EAGxB;;MAAA,CAAC,YAAY,CACb;MAAA,CAAC,IAAI,CACH,CAAC,CAAC,WAAW,CACb,MAAM,CAAC,CAAC,gBAAgB,CAAC,CACzB,WAAW,CAAC,KAAK,CACjB,aAAa,CAAC,OAAO,EAEvB;MAAA,CAAC,MAAM,CACL,EAAE,CAAC,MAAM,CACT,EAAE,CAAC,IAAI,CACP,CAAC,CAAC,KAAK,CACP,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAE3B;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path, Circle } from 'react-native-svg';\n\nconst SvgExclamation = ({ \n size = 24,\n backgroundColor = '#FF4D4F',\n exclamationColor = '#FFFFFF',\n}) => {\n return (\n <Svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n >\n {/* 배경 원 */}\n <Circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill={backgroundColor}\n />\n \n {/* 느낌표 표시 */}\n <Path\n d=\"M12 6.5v6\"\n stroke={exclamationColor}\n strokeWidth=\"2.2\"\n strokeLinecap=\"round\"\n />\n <Circle\n cx=\"12.1\"\n cy=\"17\"\n r=\"1.5\"\n fill={exclamationColor}\n />\n </Svg>\n );\n};\n\nexport default SvgExclamation;"]}
1
+ {"version":3,"file":"SvgExclamation.js","sourceRoot":"","sources":["../../src/assets/SvgExclamation.tsx"],"names":[],"mappings":";AACA,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,cAAc,GAAG,CAAC,EACtB,IAAI,GAAG,EAAE,EACT,eAAe,GAAG,SAAS,EAC3B,gBAAgB,GAAG,SAAS,GAC7B,EAAE,EAAE;IACH,OAAO,CACL,MAAC,GAAG,IACF,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,aAEnB,KAAC,MAAM,IACL,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,IAAI,EAAE,eAAe,GACrB,EAEF,KAAC,IAAI,IACH,CAAC,EAAC,WAAW,EACb,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,GACrB,EACF,KAAC,MAAM,IACL,EAAE,EAAC,MAAM,EACT,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,KAAK,EACP,IAAI,EAAE,gBAAgB,GACtB,IACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path, Circle } from 'react-native-svg';\n\nconst SvgExclamation = ({ \n size = 24,\n backgroundColor = '#FF4D4F',\n exclamationColor = '#FFFFFF',\n}) => {\n return (\n <Svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n >\n <Circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill={backgroundColor}\n />\n \n <Path\n d=\"M12 6.5v6\"\n stroke={exclamationColor}\n strokeWidth=\"2.2\"\n strokeLinecap=\"round\"\n />\n <Circle\n cx=\"12.1\"\n cy=\"17\"\n r=\"1.5\"\n fill={exclamationColor}\n />\n </Svg>\n );\n};\n\nexport default SvgExclamation;"]}
@@ -1,14 +1,12 @@
1
- import React from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import Svg, { Path } from 'react-native-svg';
3
3
  export const SvgX = ({ size = 12, color = '#5E696E' }) => {
4
4
  const strokeWidth = size * 0.12;
5
- return (<Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
6
- <Path d={`
5
+ return (_jsx(Svg, { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: _jsx(Path, { d: `
7
6
  M ${size * 0.25} ${size * 0.25}
8
7
  Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.75}
9
8
  M ${size * 0.25} ${size * 0.75}
10
9
  Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.25}
11
- `} stroke={color} strokeWidth={strokeWidth} strokeLinecap="round"/>
12
- </Svg>);
10
+ `, stroke: color, strokeWidth: strokeWidth, strokeLinecap: "round" }) }));
13
11
  };
14
12
  //# sourceMappingURL=SvgX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgX.js","sourceRoot":"","sources":["../../src/assets/SvgX.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,EAAE,EAAE;IACvD,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAEhC,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAC7D;MAAA,CAAC,IAAI,CACH,CAAC,CAAC,CAAC;cACG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAC1B,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAClD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAC1B,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;SACvD,CAAC,CACF,MAAM,CAAC,CAAC,KAAK,CAAC,CACd,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,aAAa,CAAC,OAAO,EAEzB;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\n\nexport const SvgX = ({ size = 12, color = '#5E696E' }) => {\n const strokeWidth = size * 0.12;\n \n return (\n <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <Path\n d={`\n M ${size * 0.25} ${size * 0.25}\n Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.75}\n M ${size * 0.25} ${size * 0.75}\n Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.25}\n `}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n </Svg>\n );\n};"]}
1
+ {"version":3,"file":"SvgX.js","sourceRoot":"","sources":["../../src/assets/SvgX.tsx"],"names":[],"mappings":";AACA,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,EAAE,EAAE;IACvD,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAEhC,OAAO,CACL,KAAC,GAAG,IAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,YAC5D,KAAC,IAAI,IACH,CAAC,EAAE;cACG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAC1B,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAClD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;cAC1B,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI;SACvD,EACD,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,WAAW,EACxB,aAAa,EAAC,OAAO,GACrB,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\n\nexport const SvgX = ({ size = 12, color = '#5E696E' }) => {\n const strokeWidth = size * 0.12;\n \n return (\n <Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <Path\n d={`\n M ${size * 0.25} ${size * 0.25}\n Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.75}\n M ${size * 0.25} ${size * 0.75}\n Q ${size / 2} ${size / 2} ${size * 0.75} ${size * 0.25}\n `}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n </Svg>\n );\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContext.d.ts","sourceRoot":"","sources":["../../src/context/OverlayContext.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAkF,oBAAoB,EAAwF,MAAM,gBAAgB,CAAC;AAU5N,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,gBAAoB,EACpB,eAAe,EACf,QAAQ,EACT,EAAE,oBAAoB,+BA2StB"}
1
+ {"version":3,"file":"OverlayContext.d.ts","sourceRoot":"","sources":["../../src/context/OverlayContext.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAkF,oBAAoB,EAAwF,MAAM,gBAAgB,CAAC;AAkB5N,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,gBAAoB,EACpB,eAAe,EACf,QAAQ,EACT,EAAE,oBAAoB,+BAgStB"}
@@ -1,5 +1,6 @@
1
- import { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { BackHandler, Dimensions, Keyboard } from 'react-native';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { memo, useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { BackHandler, Keyboard, useWindowDimensions } from 'react-native';
3
4
  import { AlertContext, SnackbarContext, BottomSheetContext, PopOverContext, ModalityContext, LoaderContext, OverlayContext } from '../model/useOverlay';
4
5
  import AlertOverlay from '../overlay/AlertOverlay';
5
6
  import SnackbarNotify from '../overlay/SnackbarNotify';
@@ -9,9 +10,15 @@ import PopOverMenu from '../overlay/PopOver/PopOverMenu';
9
10
  import Modality from '../overlay/Modality';
10
11
  import { PortalProvider } from '../overlay/ZSPortal';
11
12
  import { setGlobalOverlayRef } from '../model/globalOverlay';
13
+ const MemoizedAlertOverlay = memo(AlertOverlay);
14
+ const MemoizedSnackbarNotify = memo(SnackbarNotify);
15
+ const MemoizedBottomSheetOverlay = memo(BottomSheetOverlay);
16
+ const MemoizedLoadingNotify = memo(LoadingNotify);
17
+ const MemoizedPopOverMenu = memo(PopOverMenu);
18
+ const MemoizedModality = memo(Modality);
19
+ const EMPTY_ALERT_ACTIONS = {};
12
20
  export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderComponent, children }) {
13
- const defaultBottomSheetMaxHeight = Dimensions.get('window').height;
14
- // Alert
21
+ const { height: defaultBottomSheetMaxHeight } = useWindowDimensions();
15
22
  const [title, setTitle] = useState('');
16
23
  const [informative, setInformative] = useState('');
17
24
  const [alertVisible, setAlertVisible] = useState(false);
@@ -22,22 +29,17 @@ export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderCo
22
29
  const [secondaryButtonStyle, setSecondaryButtonStyle] = useState();
23
30
  const [primaryButtonStyle, setPrimaryButtonStyle] = useState();
24
31
  const [secondaryButtonTextStyle, setSecondaryButtonTextStyle] = useState();
25
- // Snackbar
26
32
  const [snackItemStack, setSnackItemStack] = useState([]);
27
- // BottomSheet
28
33
  const [bottomSheetVisible, setBottomSheetVisible] = useState(false);
29
34
  const [bottomSheetComponent, setBottomSheetComponent] = useState(null);
30
35
  const [bottomSheetHeader, setBottomSheetHeader] = useState(null);
31
36
  const [bottomSheetOptions, setBottomSheetOptions] = useState();
32
37
  const [bottomSheetHeight, setBottomSheetHeight] = useState(300);
33
38
  const [bottomSheetMaxHeight, setBottomSheetMaxHeight] = useState(defaultBottomSheetMaxHeight);
34
- // Loading
35
39
  const [loaderVisible, setLoaderVisible] = useState(false);
36
- // PopOver
37
40
  const [popOverVisible, setPopOverVisible] = useState(false);
38
41
  const [popOverLocation, setPopOverLocation] = useState({ px: 0, py: 0 });
39
42
  const [popOverComponent, setPopOverComponent] = useState(false);
40
- // Modality
41
43
  const [modalityVisible, setModalityVisible] = useState(false);
42
44
  const [modalityComponent, setModalityComponent] = useState(false);
43
45
  const [modalityFoldableSingleScreen, setModalityFoldableSingleScreen] = useState(false);
@@ -121,7 +123,6 @@ export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderCo
121
123
  }
122
124
  ;
123
125
  }, []);
124
- // 안드로이드 뒤로가기 버튼 제어
125
126
  const backPressHandler = useCallback(() => {
126
127
  if (loaderVisible) {
127
128
  return true;
@@ -136,7 +137,6 @@ export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderCo
136
137
  const backHandler = BackHandler.addEventListener('hardwareBackPress', backPressHandler);
137
138
  return () => backHandler.remove();
138
139
  }, [backPressHandler]);
139
- // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
140
140
  const overlayContextValue = useMemo(() => ({
141
141
  hideOverlay,
142
142
  showAlert,
@@ -146,10 +146,8 @@ export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderCo
146
146
  showModality,
147
147
  showLoader,
148
148
  }), [hideOverlay, showAlert, showSnackBar, showBottomSheet, showPopOverMenu, showModality, showLoader]);
149
- // Global overlay reference 업데이트
150
149
  useEffect(() => {
151
150
  setGlobalOverlayRef(overlayContextValue);
152
- // Cleanup 시 global reference 제거
153
151
  return () => {
154
152
  setGlobalOverlayRef(null);
155
153
  };
@@ -202,34 +200,6 @@ export function OverlayProvider({ customSnackbar, maxSnackbarCount = 3, loaderCo
202
200
  loaderVisible,
203
201
  setLoaderVisible,
204
202
  ]);
205
- return (<OverlayContext.Provider value={overlayContextValue}>
206
- <AlertContext.Provider value={alertContextValue}>
207
- <SnackbarContext.Provider value={snackbarContextValue}>
208
- <BottomSheetContext.Provider value={bottomSheetContextValue}>
209
- <PopOverContext.Provider value={popOverContextValue}>
210
- <ModalityContext.Provider value={modalityContextValue}>
211
- <LoaderContext.Provider value={loaderContextValue}>
212
- <PortalProvider>
213
- {children}
214
-
215
- <Modality modalityComponent={modalityComponent} foldableSingleScreen={modalityFoldableSingleScreen}/>
216
-
217
- <BottomSheetOverlay headerComponent={bottomSheetHeader} component={bottomSheetComponent} options={bottomSheetOptions}/>
218
-
219
- <PopOverMenu px={popOverLocation?.px} py={popOverLocation?.py} component={popOverComponent}/>
220
-
221
- <AlertOverlay title={title} informative={informative} actions={actions || {}} isBackgroundTouchClose={isBackgroundTouchClose} titleStyle={titleStyle} informativeStyle={informativeStyle} secondaryButtonStyle={secondaryButtonStyle} primaryButtonStyle={primaryButtonStyle} secondaryButtonTextStyle={secondaryButtonTextStyle}/>
222
-
223
- <SnackbarNotify customSnackbar={customSnackbar}/>
224
-
225
- <LoadingNotify loaderComponent={loaderComponent}/>
226
- </PortalProvider>
227
- </LoaderContext.Provider>
228
- </ModalityContext.Provider>
229
- </PopOverContext.Provider>
230
- </BottomSheetContext.Provider>
231
- </SnackbarContext.Provider>
232
- </AlertContext.Provider>
233
- </OverlayContext.Provider>);
203
+ return (_jsx(OverlayContext.Provider, { value: overlayContextValue, children: _jsx(AlertContext.Provider, { value: alertContextValue, children: _jsx(SnackbarContext.Provider, { value: snackbarContextValue, children: _jsx(BottomSheetContext.Provider, { value: bottomSheetContextValue, children: _jsx(PopOverContext.Provider, { value: popOverContextValue, children: _jsx(ModalityContext.Provider, { value: modalityContextValue, children: _jsx(LoaderContext.Provider, { value: loaderContextValue, children: _jsxs(PortalProvider, { children: [children, _jsx(MemoizedModality, { modalityComponent: modalityComponent, foldableSingleScreen: modalityFoldableSingleScreen }), _jsx(MemoizedBottomSheetOverlay, { headerComponent: bottomSheetHeader, component: bottomSheetComponent, options: bottomSheetOptions }), _jsx(MemoizedPopOverMenu, { px: popOverLocation?.px, py: popOverLocation?.py, component: popOverComponent }), _jsx(MemoizedAlertOverlay, { title: title, informative: informative, actions: actions || EMPTY_ALERT_ACTIONS, isBackgroundTouchClose: isBackgroundTouchClose, titleStyle: titleStyle, informativeStyle: informativeStyle, secondaryButtonStyle: secondaryButtonStyle, primaryButtonStyle: primaryButtonStyle, secondaryButtonTextStyle: secondaryButtonTextStyle }), _jsx(MemoizedSnackbarNotify, { customSnackbar: customSnackbar }), _jsx(MemoizedLoadingNotify, { loaderComponent: loaderComponent })] }) }) }) }) }) }) }) }));
234
204
  }
235
205
  //# sourceMappingURL=OverlayContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayContext.js","sourceRoot":"","sources":["../../src/context/OverlayContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAExJ,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,kBAAkB,MAAM,+BAA+B,CAAC;AAC/D,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,UAAU,eAAe,CAAC,EAC9B,cAAc,EACd,gBAAgB,GAAG,CAAC,EACpB,eAAe,EACf,QAAQ,EACa;IACrB,MAAM,2BAA2B,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAEpE,QAAQ;IACR,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAgB,CAAC;IACvD,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAC;IACpF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACnE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAC/E,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,EAAkC,CAAC;IACnG,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,EAAkC,CAAC;IAC/F,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,EAAsB,CAAC;IAE/F,WAAW;IACX,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,EAAE,CAAC,CAAC;IAEtE,cAAc;IACd,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC7E,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAC;IACxF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACnF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAoB,GAAG,CAAC,CAAC;IACnF,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAS,2BAA2B,CAAC,CAAC;IAEtG,UAAU;IACV,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAEnE,UAAU;IACV,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACrE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAA6D,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrI,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAkB,KAAK,CAAC,CAAC;IAEjF,WAAW;IACX,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACvE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAkB,KAAK,CAAC,CAAC;IACnF,MAAM,CAAC,4BAA4B,EAAE,+BAA+B,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAEjG,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,GAAG,IAAI,EAC7B,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,GACT,EAAE,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACtB,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAClC,UAAU,CAAC,OAAO,IAAI,EAAkB,CAAC,CAAC;QAC1C,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;QAClD,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtB,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QACtC,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;QAC9C,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAC1C,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;IACxD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,EACnC,eAAe,EACf,SAAS,EACT,OAAO,GACc,EAAE,EAAE;QACzB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACnC,oBAAoB,CAAC,eAAe,CAAC,CAAC;QACtC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/B,oBAAoB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QAC7C,uBAAuB,CAAC,OAAO,EAAE,SAAS,IAAI,2BAA2B,CAAC,CAAC;QAC3E,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,EACnC,EAAE,EACF,EAAE,EACF,SAAS,EACQ,EAAE,EAAE;QACrB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/B,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAChC,SAAS,EACT,oBAAoB,EACN,EAAE,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,+BAA+B,CAAC,oBAAoB,IAAI,KAAK,CAAC,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAChC,OAAO,EACP,IAAI,GAAG,SAAS,EAChB,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAClB,gBAAgB,GAAG,IAAI,EACL,EAAE,EAAE;QACtB,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAChG,OAAO,QAAQ,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACjD,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAAkB,EAAE,EAAE;QACrD,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,OAAO;gBACV,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,OAAO;gBACV,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,OAAO;gBACV,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,aAAa;gBAChB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ;gBACX,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,SAAS;gBACZ,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YACR,KAAK,KAAK;gBACR,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1B,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBACtB,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM;YACR;gBACE,MAAM;QACV,CAAC;QAAA,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mBAAmB;IACnB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,YAAY,IAAI,eAAe,IAAI,cAAc,IAAI,kBAAkB,EAAE,CAAC;YAC5E,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpG,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QACxF,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,uLAAuL;IAEvL,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,WAAW;QACX,SAAS;QACT,YAAY;QACZ,eAAe;QACf,eAAe;QACf,YAAY;QACZ,UAAU;KACX,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAExG,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QAEzC,gCAAgC;QAChC,OAAO,GAAG,EAAE;YACV,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,YAAY;QACZ,eAAe;KAChB,CAAC,EAAE;QACF,YAAY;QACZ,eAAe;KAChB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,cAAc;QACd,YAAY;KACb,CAAC,EAAE;QACF,cAAc;QACd,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,kBAAkB;QAClB,qBAAqB;QACrB,MAAM,EAAE,iBAAiB;QACzB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,oBAAoB;KAChC,CAAC,EAAE;QACF,kBAAkB;QAClB,qBAAqB;QACrB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;KACrB,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,cAAc;QACd,iBAAiB;KAClB,CAAC,EAAE;QACF,cAAc;QACd,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,eAAe;QACf,kBAAkB;KACnB,CAAC,EAAE;QACF,eAAe;QACf,kBAAkB;KACnB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,aAAa;QACb,gBAAgB;KACjB,CAAC,EAAE;QACF,aAAa;QACb,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO,CACL,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAClD;MAAA,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAC9C;QAAA,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CACpD;UAAA,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAC1D;YAAA,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAClD;cAAA,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CACpD;gBAAA,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAChD;kBAAA,CAAC,cAAc,CACb;oBAAA,CAAC,QAAQ,CAET;;oBAAA,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,CAAC,4BAA4B,CAAC,EAEnG;;oBAAA,CAAC,kBAAkB,CACjB,eAAe,CAAC,CAAC,iBAAiB,CAAC,CACnC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAChC,OAAO,CAAC,CAAC,kBAAkB,CAAC,EAG9B;;oBAAA,CAAC,WAAW,CACV,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CACxB,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CACxB,SAAS,CAAC,CAAC,gBAAgB,CAAC,EAG9B;;oBAAA,CAAC,YAAY,CACX,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,OAAO,CAAC,CAAC,OAAO,IAAI,EAAkB,CAAC,CACvC,sBAAsB,CAAC,CAAC,sBAAsB,CAAC,CAC/C,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC,CAC3C,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CACvC,wBAAwB,CAAC,CAAC,wBAAwB,CAAC,EAGrD;;oBAAA,CAAC,cAAc,CACb,cAAc,CAAC,CAAC,cAAc,CAAC,EAGjC;;oBAAA,CAAC,aAAa,CACZ,eAAe,CAAC,CAAC,eAAe,CAAC,EAErC;kBAAA,EAAE,cAAc,CAClB;gBAAA,EAAE,aAAa,CAAC,QAAQ,CAC1B;cAAA,EAAE,eAAe,CAAC,QAAQ,CAC5B;YAAA,EAAE,cAAc,CAAC,QAAQ,CAC3B;UAAA,EAAE,kBAAkB,CAAC,QAAQ,CAC/B;QAAA,EAAE,eAAe,CAAC,QAAQ,CAC5B;MAAA,EAAE,YAAY,CAAC,QAAQ,CACzB;IAAA,EAAE,cAAc,CAAC,QAAQ,CAAC,CAC3B,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { BackHandler, Dimensions, Keyboard, TextProps, TouchableOpacityProps } from 'react-native';\nimport { AlertContext, SnackbarContext, BottomSheetContext, PopOverContext, ModalityContext, LoaderContext, OverlayContext } from '../model/useOverlay';\nimport { AlertActions, BottomSheetHeight, BottomSheetOptions, HideOption, ModalityProps, OverlayProviderProps, PopOverMenuProps, ShowAlertProps, ShowBottomSheetProps, ShowSnackBarProps, SnackItem } from '../model/types';\nimport AlertOverlay from '../overlay/AlertOverlay';\nimport SnackbarNotify from '../overlay/SnackbarNotify';\nimport BottomSheetOverlay from '../overlay/BottomSheetOverlay';\nimport LoadingNotify from '../overlay/LoadingNotify';\nimport PopOverMenu from '../overlay/PopOver/PopOverMenu';\nimport Modality from '../overlay/Modality';\nimport { PortalProvider } from '../overlay/ZSPortal';\nimport { setGlobalOverlayRef } from '../model/globalOverlay';\n\nexport function OverlayProvider({\n customSnackbar,\n maxSnackbarCount = 3,\n loaderComponent,\n children\n}: OverlayProviderProps) {\n const defaultBottomSheetMaxHeight = Dimensions.get('window').height;\n\n // Alert\n const [title, setTitle] = useState<string>('');\n const [informative, setInformative] = useState<string>('');\n const [alertVisible, setAlertVisible] = useState<boolean>(false);\n const [actions, setActions] = useState<AlertActions>();\n const [isBackgroundTouchClose, setIsBackgroundTouchClose] = useState<boolean>(true);\n const [titleStyle, setTitleStyle] = useState<TextProps['style']>();\n const [informativeStyle, setInformativeStyle] = useState<TextProps['style']>();\n const [secondaryButtonStyle, setSecondaryButtonStyle] = useState<TouchableOpacityProps['style']>();\n const [primaryButtonStyle, setPrimaryButtonStyle] = useState<TouchableOpacityProps['style']>();\n const [secondaryButtonTextStyle, setSecondaryButtonTextStyle] = useState<TextProps['style']>();\n\n // Snackbar\n const [snackItemStack, setSnackItemStack] = useState<SnackItem[]>([]);\n\n // BottomSheet\n const [bottomSheetVisible, setBottomSheetVisible] = useState<boolean>(false);\n const [bottomSheetComponent, setBottomSheetComponent] = useState<React.ReactNode>(null);\n const [bottomSheetHeader, setBottomSheetHeader] = useState<React.ReactNode>(null);\n const [bottomSheetOptions, setBottomSheetOptions] = useState<BottomSheetOptions>();\n const [bottomSheetHeight, setBottomSheetHeight] = useState<BottomSheetHeight>(300);\n const [bottomSheetMaxHeight, setBottomSheetMaxHeight] = useState<number>(defaultBottomSheetMaxHeight);\n\n // Loading\n const [loaderVisible, setLoaderVisible] = useState<boolean>(false);\n\n // PopOver\n const [popOverVisible, setPopOverVisible] = useState<boolean>(false);\n const [popOverLocation, setPopOverLocation] = useState<{ px: PopOverMenuProps['px'], py: PopOverMenuProps['py'] }>({ px: 0, py: 0 });\n const [popOverComponent, setPopOverComponent] = useState<React.ReactNode>(false);\n\n // Modality\n const [modalityVisible, setModalityVisible] = useState<boolean>(false);\n const [modalityComponent, setModalityComponent] = useState<React.ReactNode>(false);\n const [modalityFoldableSingleScreen, setModalityFoldableSingleScreen] = useState<boolean>(false);\n\n const showAlert = useCallback(({\n title,\n informative,\n actions,\n isBackgroundTouchClose = true,\n titleStyle,\n informativeStyle,\n secondaryButtonStyle,\n primaryButtonStyle,\n secondaryButtonTextStyle,\n }: ShowAlertProps) => {\n Keyboard.dismiss();\n setTitle(title || '');\n setInformative(informative || '');\n setActions(actions || {} as AlertActions);\n setIsBackgroundTouchClose(isBackgroundTouchClose);\n setAlertVisible(true);\n\n setTitleStyle(titleStyle);\n setInformativeStyle(informativeStyle);\n setSecondaryButtonStyle(secondaryButtonStyle);\n setPrimaryButtonStyle(primaryButtonStyle);\n setSecondaryButtonTextStyle(secondaryButtonTextStyle);\n }, []);\n\n const showBottomSheet = useCallback(({\n headerComponent,\n component,\n options,\n }: ShowBottomSheetProps) => {\n Keyboard.dismiss();\n setBottomSheetComponent(component);\n setBottomSheetHeader(headerComponent);\n setBottomSheetOptions(options);\n setBottomSheetHeight(options?.height ?? 300);\n setBottomSheetMaxHeight(options?.maxHeight ?? defaultBottomSheetMaxHeight);\n setBottomSheetVisible(true);\n }, [defaultBottomSheetMaxHeight]);\n\n const showLoader = useCallback(() => {\n setLoaderVisible(true);\n }, []);\n\n const showPopOverMenu = useCallback(({\n px,\n py,\n component\n }: PopOverMenuProps) => {\n Keyboard.dismiss();\n setPopOverLocation({ px, py });\n setPopOverComponent(component);\n setPopOverVisible(true);\n }, []);\n\n const showModality = useCallback(({\n component,\n foldableSingleScreen\n }: ModalityProps) => {\n Keyboard.dismiss();\n setModalityComponent(component);\n setModalityVisible(true);\n setModalityFoldableSingleScreen(foldableSingleScreen || false);\n }, []);\n\n const showSnackBar = useCallback(({\n message,\n type = 'success',\n index = Date.now(),\n snackbarDuration = 3500\n }: ShowSnackBarProps) => {\n setSnackItemStack((prev) => {\n const newStack = [...prev, { message, type, index: index, snackbarDuration: snackbarDuration }];\n return newStack.length > maxSnackbarCount ? newStack.slice(1) : newStack;\n });\n }, [maxSnackbarCount]);\n\n const hideSnackBar = useCallback((index: number) => {\n setSnackItemStack((prev) => prev.filter((item) => item.index !== index));\n }, []);\n\n const hideOverlay = useCallback((option: HideOption) => {\n Keyboard.dismiss();\n switch (option) {\n case 'alert':\n setAlertVisible(false);\n break;\n case 'modal':\n setModalityVisible(false);\n break;\n case 'snack':\n setSnackItemStack([]);\n break;\n case 'bottomSheet':\n setBottomSheetVisible(false);\n break;\n case 'loader':\n setLoaderVisible(false);\n break;\n case 'popOver':\n setPopOverVisible(false);\n break;\n case 'all':\n setModalityVisible(false);\n setAlertVisible(false);\n setSnackItemStack([]);\n setLoaderVisible(false);\n setPopOverVisible(false);\n setBottomSheetVisible(false);\n break;\n default:\n break;\n };\n }, []);\n\n // 안드로이드 뒤로가기 버튼 제어\n const backPressHandler = useCallback(() => {\n if (loaderVisible) {\n return true;\n }\n if (alertVisible || modalityVisible || popOverVisible || bottomSheetVisible) {\n hideOverlay('all');\n return true;\n }\n return false;\n }, [alertVisible, loaderVisible, modalityVisible, popOverVisible, bottomSheetVisible, hideOverlay]);\n\n useEffect(() => {\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backPressHandler);\n return () => backHandler.remove();\n }, [backPressHandler]);\n\n // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\n const overlayContextValue = useMemo(() => ({\n hideOverlay,\n showAlert,\n showSnackBar,\n showBottomSheet,\n showPopOverMenu,\n showModality,\n showLoader,\n }), [hideOverlay, showAlert, showSnackBar, showBottomSheet, showPopOverMenu, showModality, showLoader]);\n\n // Global overlay reference 업데이트\n useEffect(() => {\n setGlobalOverlayRef(overlayContextValue);\n\n // Cleanup 시 global reference 제거\n return () => {\n setGlobalOverlayRef(null);\n };\n }, [overlayContextValue]);\n\n const alertContextValue = useMemo(() => ({\n alertVisible,\n setAlertVisible,\n }), [\n alertVisible,\n setAlertVisible,\n ]);\n\n const snackbarContextValue = useMemo(() => ({\n snackItemStack,\n hideSnackBar,\n }), [\n snackItemStack,\n hideSnackBar,\n ]);\n\n const bottomSheetContextValue = useMemo(() => ({\n bottomSheetVisible,\n setBottomSheetVisible,\n height: bottomSheetHeight,\n setHeight: setBottomSheetHeight,\n maxHeight: bottomSheetMaxHeight,\n }), [\n bottomSheetVisible,\n setBottomSheetVisible,\n bottomSheetHeight,\n setBottomSheetHeight,\n bottomSheetMaxHeight,\n ]);\n\n const popOverContextValue = useMemo(() => ({\n popOverVisible,\n setPopOverVisible,\n }), [\n popOverVisible,\n setPopOverVisible,\n ]);\n\n const modalityContextValue = useMemo(() => ({\n modalityVisible,\n setModalityVisible,\n }), [\n modalityVisible,\n setModalityVisible,\n ]);\n\n const loaderContextValue = useMemo(() => ({\n loaderVisible,\n setLoaderVisible,\n }), [\n loaderVisible,\n setLoaderVisible,\n ]);\n\n return (\n <OverlayContext.Provider value={overlayContextValue}>\n <AlertContext.Provider value={alertContextValue}>\n <SnackbarContext.Provider value={snackbarContextValue}>\n <BottomSheetContext.Provider value={bottomSheetContextValue}>\n <PopOverContext.Provider value={popOverContextValue}>\n <ModalityContext.Provider value={modalityContextValue}>\n <LoaderContext.Provider value={loaderContextValue}>\n <PortalProvider>\n {children}\n\n <Modality modalityComponent={modalityComponent} foldableSingleScreen={modalityFoldableSingleScreen} />\n\n <BottomSheetOverlay\n headerComponent={bottomSheetHeader}\n component={bottomSheetComponent}\n options={bottomSheetOptions}\n />\n\n <PopOverMenu\n px={popOverLocation?.px}\n py={popOverLocation?.py}\n component={popOverComponent}\n />\n\n <AlertOverlay\n title={title}\n informative={informative}\n actions={actions || {} as AlertActions}\n isBackgroundTouchClose={isBackgroundTouchClose}\n titleStyle={titleStyle}\n informativeStyle={informativeStyle}\n secondaryButtonStyle={secondaryButtonStyle}\n primaryButtonStyle={primaryButtonStyle}\n secondaryButtonTextStyle={secondaryButtonTextStyle}\n />\n\n <SnackbarNotify\n customSnackbar={customSnackbar}\n />\n\n <LoadingNotify\n loaderComponent={loaderComponent}\n />\n </PortalProvider>\n </LoaderContext.Provider>\n </ModalityContext.Provider>\n </PopOverContext.Provider>\n </BottomSheetContext.Provider>\n </SnackbarContext.Provider>\n </AlertContext.Provider>\n </OverlayContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"OverlayContext.js","sourceRoot":"","sources":["../../src/context/OverlayContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { BackHandler, Keyboard, TextProps, TouchableOpacityProps, useWindowDimensions } from 'react-native';\nimport { AlertContext, SnackbarContext, BottomSheetContext, PopOverContext, ModalityContext, LoaderContext, OverlayContext } from '../model/useOverlay';\nimport { AlertActions, BottomSheetHeight, BottomSheetOptions, HideOption, ModalityProps, OverlayProviderProps, PopOverMenuProps, ShowAlertProps, ShowBottomSheetProps, ShowSnackBarProps, SnackItem } from '../model/types';\nimport AlertOverlay from '../overlay/AlertOverlay';\nimport SnackbarNotify from '../overlay/SnackbarNotify';\nimport BottomSheetOverlay from '../overlay/BottomSheetOverlay';\nimport LoadingNotify from '../overlay/LoadingNotify';\nimport PopOverMenu from '../overlay/PopOver/PopOverMenu';\nimport Modality from '../overlay/Modality';\nimport { PortalProvider } from '../overlay/ZSPortal';\nimport { setGlobalOverlayRef } from '../model/globalOverlay';\n\nconst MemoizedAlertOverlay = memo(AlertOverlay);\nconst MemoizedSnackbarNotify = memo(SnackbarNotify);\nconst MemoizedBottomSheetOverlay = memo(BottomSheetOverlay);\nconst MemoizedLoadingNotify = memo(LoadingNotify);\nconst MemoizedPopOverMenu = memo(PopOverMenu);\nconst MemoizedModality = memo(Modality);\nconst EMPTY_ALERT_ACTIONS = {} as AlertActions;\n\nexport function OverlayProvider({\n customSnackbar,\n maxSnackbarCount = 3,\n loaderComponent,\n children\n}: OverlayProviderProps) {\n const { height: defaultBottomSheetMaxHeight } = useWindowDimensions();\n\n const [title, setTitle] = useState<string>('');\n const [informative, setInformative] = useState<string>('');\n const [alertVisible, setAlertVisible] = useState<boolean>(false);\n const [actions, setActions] = useState<AlertActions>();\n const [isBackgroundTouchClose, setIsBackgroundTouchClose] = useState<boolean>(true);\n const [titleStyle, setTitleStyle] = useState<TextProps['style']>();\n const [informativeStyle, setInformativeStyle] = useState<TextProps['style']>();\n const [secondaryButtonStyle, setSecondaryButtonStyle] = useState<TouchableOpacityProps['style']>();\n const [primaryButtonStyle, setPrimaryButtonStyle] = useState<TouchableOpacityProps['style']>();\n const [secondaryButtonTextStyle, setSecondaryButtonTextStyle] = useState<TextProps['style']>();\n\n const [snackItemStack, setSnackItemStack] = useState<SnackItem[]>([]);\n\n const [bottomSheetVisible, setBottomSheetVisible] = useState<boolean>(false);\n const [bottomSheetComponent, setBottomSheetComponent] = useState<ReactNode>(null);\n const [bottomSheetHeader, setBottomSheetHeader] = useState<ReactNode>(null);\n const [bottomSheetOptions, setBottomSheetOptions] = useState<BottomSheetOptions>();\n const [bottomSheetHeight, setBottomSheetHeight] = useState<BottomSheetHeight>(300);\n const [bottomSheetMaxHeight, setBottomSheetMaxHeight] = useState<number>(defaultBottomSheetMaxHeight);\n\n const [loaderVisible, setLoaderVisible] = useState<boolean>(false);\n\n const [popOverVisible, setPopOverVisible] = useState<boolean>(false);\n const [popOverLocation, setPopOverLocation] = useState<{ px: PopOverMenuProps['px'], py: PopOverMenuProps['py'] }>({ px: 0, py: 0 });\n const [popOverComponent, setPopOverComponent] = useState<ReactNode>(false);\n\n const [modalityVisible, setModalityVisible] = useState<boolean>(false);\n const [modalityComponent, setModalityComponent] = useState<ReactNode>(false);\n const [modalityFoldableSingleScreen, setModalityFoldableSingleScreen] = useState<boolean>(false);\n\n const showAlert = useCallback(({\n title,\n informative,\n actions,\n isBackgroundTouchClose = true,\n titleStyle,\n informativeStyle,\n secondaryButtonStyle,\n primaryButtonStyle,\n secondaryButtonTextStyle,\n }: ShowAlertProps) => {\n Keyboard.dismiss();\n setTitle(title || '');\n setInformative(informative || '');\n setActions(actions || {} as AlertActions);\n setIsBackgroundTouchClose(isBackgroundTouchClose);\n setAlertVisible(true);\n\n setTitleStyle(titleStyle);\n setInformativeStyle(informativeStyle);\n setSecondaryButtonStyle(secondaryButtonStyle);\n setPrimaryButtonStyle(primaryButtonStyle);\n setSecondaryButtonTextStyle(secondaryButtonTextStyle);\n }, []);\n\n const showBottomSheet = useCallback(({\n headerComponent,\n component,\n options,\n }: ShowBottomSheetProps) => {\n Keyboard.dismiss();\n setBottomSheetComponent(component);\n setBottomSheetHeader(headerComponent);\n setBottomSheetOptions(options);\n setBottomSheetHeight(options?.height ?? 300);\n setBottomSheetMaxHeight(options?.maxHeight ?? defaultBottomSheetMaxHeight);\n setBottomSheetVisible(true);\n }, [defaultBottomSheetMaxHeight]);\n\n const showLoader = useCallback(() => {\n setLoaderVisible(true);\n }, []);\n\n const showPopOverMenu = useCallback(({\n px,\n py,\n component\n }: PopOverMenuProps) => {\n Keyboard.dismiss();\n setPopOverLocation({ px, py });\n setPopOverComponent(component);\n setPopOverVisible(true);\n }, []);\n\n const showModality = useCallback(({\n component,\n foldableSingleScreen\n }: ModalityProps) => {\n Keyboard.dismiss();\n setModalityComponent(component);\n setModalityVisible(true);\n setModalityFoldableSingleScreen(foldableSingleScreen || false);\n }, []);\n\n const showSnackBar = useCallback(({\n message,\n type = 'success',\n index = Date.now(),\n snackbarDuration = 3500\n }: ShowSnackBarProps) => {\n setSnackItemStack((prev) => {\n const newStack = [...prev, { message, type, index: index, snackbarDuration: snackbarDuration }];\n return newStack.length > maxSnackbarCount ? newStack.slice(1) : newStack;\n });\n }, [maxSnackbarCount]);\n\n const hideSnackBar = useCallback((index: number) => {\n setSnackItemStack((prev) => prev.filter((item) => item.index !== index));\n }, []);\n\n const hideOverlay = useCallback((option: HideOption) => {\n Keyboard.dismiss();\n switch (option) {\n case 'alert':\n setAlertVisible(false);\n break;\n case 'modal':\n setModalityVisible(false);\n break;\n case 'snack':\n setSnackItemStack([]);\n break;\n case 'bottomSheet':\n setBottomSheetVisible(false);\n break;\n case 'loader':\n setLoaderVisible(false);\n break;\n case 'popOver':\n setPopOverVisible(false);\n break;\n case 'all':\n setModalityVisible(false);\n setAlertVisible(false);\n setSnackItemStack([]);\n setLoaderVisible(false);\n setPopOverVisible(false);\n setBottomSheetVisible(false);\n break;\n default:\n break;\n };\n }, []);\n\n const backPressHandler = useCallback(() => {\n if (loaderVisible) {\n return true;\n }\n if (alertVisible || modalityVisible || popOverVisible || bottomSheetVisible) {\n hideOverlay('all');\n return true;\n }\n return false;\n }, [alertVisible, loaderVisible, modalityVisible, popOverVisible, bottomSheetVisible, hideOverlay]);\n\n useEffect(() => {\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backPressHandler);\n return () => backHandler.remove();\n }, [backPressHandler]);\n\n const overlayContextValue = useMemo(() => ({\n hideOverlay,\n showAlert,\n showSnackBar,\n showBottomSheet,\n showPopOverMenu,\n showModality,\n showLoader,\n }), [hideOverlay, showAlert, showSnackBar, showBottomSheet, showPopOverMenu, showModality, showLoader]);\n\n useEffect(() => {\n setGlobalOverlayRef(overlayContextValue);\n\n return () => {\n setGlobalOverlayRef(null);\n };\n }, [overlayContextValue]);\n\n const alertContextValue = useMemo(() => ({\n alertVisible,\n setAlertVisible,\n }), [\n alertVisible,\n setAlertVisible,\n ]);\n\n const snackbarContextValue = useMemo(() => ({\n snackItemStack,\n hideSnackBar,\n }), [\n snackItemStack,\n hideSnackBar,\n ]);\n\n const bottomSheetContextValue = useMemo(() => ({\n bottomSheetVisible,\n setBottomSheetVisible,\n height: bottomSheetHeight,\n setHeight: setBottomSheetHeight,\n maxHeight: bottomSheetMaxHeight,\n }), [\n bottomSheetVisible,\n setBottomSheetVisible,\n bottomSheetHeight,\n setBottomSheetHeight,\n bottomSheetMaxHeight,\n ]);\n\n const popOverContextValue = useMemo(() => ({\n popOverVisible,\n setPopOverVisible,\n }), [\n popOverVisible,\n setPopOverVisible,\n ]);\n\n const modalityContextValue = useMemo(() => ({\n modalityVisible,\n setModalityVisible,\n }), [\n modalityVisible,\n setModalityVisible,\n ]);\n\n const loaderContextValue = useMemo(() => ({\n loaderVisible,\n setLoaderVisible,\n }), [\n loaderVisible,\n setLoaderVisible,\n ]);\n\n return (\n <OverlayContext.Provider value={overlayContextValue}>\n <AlertContext.Provider value={alertContextValue}>\n <SnackbarContext.Provider value={snackbarContextValue}>\n <BottomSheetContext.Provider value={bottomSheetContextValue}>\n <PopOverContext.Provider value={popOverContextValue}>\n <ModalityContext.Provider value={modalityContextValue}>\n <LoaderContext.Provider value={loaderContextValue}>\n <PortalProvider>\n {children}\n\n <MemoizedModality modalityComponent={modalityComponent} foldableSingleScreen={modalityFoldableSingleScreen} />\n\n <MemoizedBottomSheetOverlay\n headerComponent={bottomSheetHeader}\n component={bottomSheetComponent}\n options={bottomSheetOptions}\n />\n\n <MemoizedPopOverMenu\n px={popOverLocation?.px}\n py={popOverLocation?.py}\n component={popOverComponent}\n />\n\n <MemoizedAlertOverlay\n title={title}\n informative={informative}\n actions={actions || EMPTY_ALERT_ACTIONS}\n isBackgroundTouchClose={isBackgroundTouchClose}\n titleStyle={titleStyle}\n informativeStyle={informativeStyle}\n secondaryButtonStyle={secondaryButtonStyle}\n primaryButtonStyle={primaryButtonStyle}\n secondaryButtonTextStyle={secondaryButtonTextStyle}\n />\n\n <MemoizedSnackbarNotify\n customSnackbar={customSnackbar}\n />\n\n <MemoizedLoadingNotify\n loaderComponent={loaderComponent}\n />\n </PortalProvider>\n </LoaderContext.Provider>\n </ModalityContext.Provider>\n </PopOverContext.Provider>\n </BottomSheetContext.Provider>\n </SnackbarContext.Provider>\n </AlertContext.Provider>\n </OverlayContext.Provider>\n );\n}\n"]}
@@ -1,6 +1,13 @@
1
1
  import React from 'react';
2
2
  import { Theme, ThemeFonts, TypographyVariantsProps } from '../theme/types';
3
3
  import { ElevationStyles } from '../theme/elevation';
4
+ export interface FoldableConfig {
5
+ /**
6
+ * 언폴딩 상태에서 rightComponent가 없을 때(단일 화면) 콘텐츠 최대 가로 길이(px).
7
+ * 미주입(undefined) 또는 false면 전폭으로 늘린다. 폭을 제한하려면 반드시 값을 주입해야 한다.
8
+ */
9
+ unfoldedSinglePaneMaxWidth?: number | false;
10
+ }
4
11
  export interface ThemeProviderProps {
5
12
  themeFonts?: ThemeFonts;
6
13
  children: React.ReactNode;
@@ -12,11 +19,13 @@ export interface ThemeProviderProps {
12
19
  dark?: Theme;
13
20
  };
14
21
  }) => Theme;
22
+ foldable?: FoldableConfig;
15
23
  }
16
24
  export interface ThemeProps {
17
25
  palette: Palette;
18
26
  typography: TypographyVariantsProps;
19
27
  elevation: ElevationStyles;
28
+ foldable: FoldableConfig;
20
29
  }
21
30
  export interface Palette extends Theme {
22
31
  mode: 'light' | 'dark';
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiF,MAAM,OAAO,CAAC;AAKtG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,OAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,KAAK,CAAC;YAAC,IAAI,CAAC,EAAE,KAAK,CAAA;SAAE,CAAA;KAAE,KAAK,KAAK,CAAC;CAC/G;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,OAAQ,SAAQ,KAAK;IACpC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,uBAAuB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AA2CD,eAAO,MAAM,QAAQ,kBAMpB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6GtD,CAAA"}
1
+ {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiF,MAAM,OAAO,CAAC;AAKtG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,OAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,KAAK,CAAC;YAAC,IAAI,CAAC,EAAE,KAAK,CAAA;SAAE,CAAA;KAAE,KAAK,KAAK,CAAC;IAC9G,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,OAAQ,SAAQ,KAAK;IACpC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,uBAAuB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AA2CD,eAAO,MAAM,QAAQ,kBAMpB,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAyGtD,CAAA"}
@@ -1,4 +1,5 @@
1
- import React, { createContext, useContext, useMemo, useReducer, useEffect, useCallback } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo, useReducer, useEffect, useCallback } from 'react';
2
3
  import { Platform, useColorScheme } from 'react-native';
3
4
  import AsyncStorage from '@react-native-async-storage/async-storage';
4
5
  import * as NavigationBar from 'expo-navigation-bar';
@@ -37,15 +38,14 @@ export const useTheme = () => {
37
38
  }
38
39
  return context;
39
40
  };
40
- export const ThemeProvider = ({ themeFonts, children, isDarkModeEnabled = true, customPalette }) => {
41
- const systemColorScheme = useColorScheme(); // 시스템 다크 모드 감지
41
+ export const ThemeProvider = ({ themeFonts, children, isDarkModeEnabled = true, customPalette, foldable }) => {
42
+ const systemColorScheme = useColorScheme();
42
43
  const systemMode = getSystemMode(systemColorScheme);
43
44
  const [themeState, dispatchTheme] = useReducer(themeReducer, {
44
45
  isUsingSystemColorScheme: isDarkModeEnabled,
45
46
  mode: isDarkModeEnabled ? systemMode : 'light',
46
47
  });
47
48
  const { isUsingSystemColorScheme, mode } = themeState;
48
- // AsyncStorage에서 시스템 모드 사용 설정 값 로드
49
49
  useEffect(() => {
50
50
  let isMounted = true;
51
51
  const loadSettings = async () => {
@@ -87,32 +87,27 @@ export const ThemeProvider = ({ themeFonts, children, isDarkModeEnabled = true,
87
87
  isMounted = false;
88
88
  };
89
89
  }, [isDarkModeEnabled, systemMode]);
90
- // 시스템 다크 모드 변경에 따른 효과 적용
91
90
  useEffect(() => {
92
91
  dispatchTheme({ type: 'SYNC_SYSTEM_MODE', systemMode });
93
92
  }, [systemMode]);
94
- // 안드로이드 하단 제스쳐 영역 스타일
95
93
  useEffect(() => {
96
94
  if (Platform.OS === 'android') {
97
- NavigationBar.setButtonStyleAsync(mode);
98
- const currentPalette = customPalette ? customPalette({ mode }) : palette({ mode });
99
- NavigationBar.setBackgroundColorAsync(currentPalette.background.base);
95
+ NavigationBar.setStyle(mode);
100
96
  }
101
- }, [mode, customPalette]);
102
- // 테마 토글 함수
97
+ }, [mode]);
103
98
  const toggleTheme = useCallback(async () => {
104
99
  const newMode = mode === 'light' ? 'dark' : 'light';
105
- dispatchTheme({ type: 'TOGGLE_THEME' }); // 사용자 지정 모드로 전환
100
+ dispatchTheme({ type: 'TOGGLE_THEME' });
106
101
  await AsyncStorage.multiSet([
107
102
  ['useSystemColorScheme', 'false'],
108
103
  ['themeMode', newMode],
109
104
  ]);
110
105
  }, [mode]);
111
- // 시스템 모드 사용 설정 변경 함수
112
106
  const handleSetUseSystemColorScheme = useCallback(async (useSystem) => {
113
107
  dispatchTheme({ type: 'SET_USE_SYSTEM_COLOR_SCHEME', useSystem, systemMode });
114
108
  await AsyncStorage.setItem('useSystemColorScheme', useSystem.toString());
115
109
  }, [systemMode]);
110
+ const unfoldedSinglePaneMaxWidth = foldable?.unfoldedSinglePaneMaxWidth;
116
111
  const themeValue = useMemo(() => {
117
112
  const currentPalette = customPalette ? customPalette({ mode }) : palette({ mode });
118
113
  return {
@@ -120,14 +115,13 @@ export const ThemeProvider = ({ themeFonts, children, isDarkModeEnabled = true,
120
115
  isUsingSystemColorScheme,
121
116
  setUseSystemColorScheme: handleSetUseSystemColorScheme,
122
117
  toggleTheme,
123
- ...currentPalette, // 선택된 모드에 따른 팔레트 적용
118
+ ...currentPalette,
124
119
  },
125
120
  typography: typography({ themeFonts }),
126
- elevation: elevation(currentPalette)
121
+ elevation: elevation(currentPalette),
122
+ foldable: { unfoldedSinglePaneMaxWidth },
127
123
  };
128
- }, [mode, isUsingSystemColorScheme, themeFonts, customPalette, handleSetUseSystemColorScheme, toggleTheme]);
129
- return (<ThemeContext.Provider value={themeValue}>
130
- {children}
131
- </ThemeContext.Provider>);
124
+ }, [mode, isUsingSystemColorScheme, themeFonts, customPalette, handleSetUseSystemColorScheme, toggleTheme, unfoldedSinglePaneMaxWidth]);
125
+ return (_jsx(ThemeContext.Provider, { value: themeValue, children: children }));
132
126
  };
133
127
  //# sourceMappingURL=ThemeContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeContext.js","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useMemo, useReducer, useEffect, useCallback } from 'react';\nimport { Platform, useColorScheme } from 'react-native';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport * as NavigationBar from 'expo-navigation-bar';\nimport palette from '../theme/palette';\nimport { Theme, ThemeFonts, TypographyVariantsProps } from '../theme/types';\nimport typography from '../theme/typography';\nimport elevation, { ElevationStyles } from '../theme/elevation';\n\nexport interface ThemeProviderProps {\n themeFonts?: ThemeFonts;\n children: React.ReactNode;\n isDarkModeEnabled?: boolean;\n customPalette?: (config: { mode?: 'light' | 'dark'; themeColors?: { light?: Theme; dark?: Theme } }) => Theme;\n}\n\nexport interface ThemeProps {\n palette: Palette;\n typography: TypographyVariantsProps;\n elevation: ElevationStyles;\n}\n\nexport interface Palette extends Theme {\n mode: 'light' | 'dark';\n isUsingSystemColorScheme: boolean;\n setUseSystemColorScheme: (useSystem: boolean) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeProps | null>(null);\ntype ThemeMode = 'light' | 'dark';\n\ntype ThemeState = {\n mode: ThemeMode;\n isUsingSystemColorScheme: boolean;\n};\n\ntype ThemeAction =\n | { type: 'HYDRATE'; state: ThemeState }\n | { type: 'SYNC_SYSTEM_MODE'; systemMode: ThemeMode }\n | { type: 'SET_USE_SYSTEM_COLOR_SCHEME'; useSystem: boolean; systemMode: ThemeMode }\n | { type: 'TOGGLE_THEME' };\n\nconst getSystemMode = (systemColorScheme: ReturnType<typeof useColorScheme>): ThemeMode =>\n systemColorScheme === 'dark' ? 'dark' : 'light';\n\nfunction themeReducer(state: ThemeState, action: ThemeAction): ThemeState {\n switch (action.type) {\n case 'HYDRATE':\n return action.state;\n case 'SYNC_SYSTEM_MODE':\n return state.isUsingSystemColorScheme\n ? { ...state, mode: action.systemMode }\n : state;\n case 'SET_USE_SYSTEM_COLOR_SCHEME':\n return {\n ...state,\n isUsingSystemColorScheme: action.useSystem,\n mode: action.useSystem ? action.systemMode : state.mode,\n };\n case 'TOGGLE_THEME':\n return {\n isUsingSystemColorScheme: false,\n mode: state.mode === 'light' ? 'dark' : 'light',\n };\n default:\n return state;\n }\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ themeFonts, children, isDarkModeEnabled = true, customPalette }) => {\n const systemColorScheme = useColorScheme(); // 시스템 다크 모드 감지\n const systemMode = getSystemMode(systemColorScheme);\n const [themeState, dispatchTheme] = useReducer(\n themeReducer,\n {\n isUsingSystemColorScheme: isDarkModeEnabled,\n mode: isDarkModeEnabled ? systemMode : 'light',\n }\n );\n const { isUsingSystemColorScheme, mode } = themeState;\n\n // AsyncStorage에서 시스템 모드 사용 설정 값 로드\n useEffect(() => {\n let isMounted = true;\n\n const loadSettings = async () => {\n try {\n if (!isMounted) return;\n \n if (!isDarkModeEnabled) {\n dispatchTheme({\n type: 'HYDRATE',\n state: {\n isUsingSystemColorScheme: false,\n mode: 'light',\n },\n });\n return;\n }\n\n const storedUseSystemColorScheme = await AsyncStorage.getItem('useSystemColorScheme');\n const storedMode = await AsyncStorage.getItem('themeMode');\n\n if (!isMounted) return;\n\n const isUsingSystemColorScheme = storedUseSystemColorScheme === null\n ? true\n : storedUseSystemColorScheme === 'true';\n const savedMode = storedMode === 'dark' || storedMode === 'light' ? storedMode : undefined;\n\n dispatchTheme({\n type: 'HYDRATE',\n state: {\n isUsingSystemColorScheme,\n mode: isUsingSystemColorScheme ? systemMode : savedMode ?? systemMode,\n },\n });\n } catch (error) {\n console.error('Failed to load theme settings', error);\n }\n };\n\n loadSettings();\n\n return () => {\n isMounted = false;\n };\n }, [isDarkModeEnabled, systemMode]);\n\n // 시스템 다크 모드 변경에 따른 효과 적용\n useEffect(() => {\n dispatchTheme({ type: 'SYNC_SYSTEM_MODE', systemMode });\n }, [systemMode]);\n\n // 안드로이드 하단 제스쳐 영역 스타일\n useEffect(() => {\n if (Platform.OS === 'android') {\n NavigationBar.setButtonStyleAsync(mode);\n const currentPalette = customPalette ? customPalette({ mode }) : palette({ mode });\n NavigationBar.setBackgroundColorAsync(currentPalette.background.base)\n }\n }, [mode, customPalette])\n\n // 테마 토글 함수\n const toggleTheme = useCallback(async () => {\n const newMode = mode === 'light' ? 'dark' : 'light';\n dispatchTheme({ type: 'TOGGLE_THEME' }); // 사용자 지정 모드로 전환\n await AsyncStorage.multiSet([\n ['useSystemColorScheme', 'false'],\n ['themeMode', newMode],\n ]);\n }, [mode]);\n\n // 시스템 모드 사용 설정 변경 함수\n const handleSetUseSystemColorScheme = useCallback(async (useSystem: boolean) => {\n dispatchTheme({ type: 'SET_USE_SYSTEM_COLOR_SCHEME', useSystem, systemMode });\n await AsyncStorage.setItem('useSystemColorScheme', useSystem.toString());\n }, [systemMode]);\n\n const themeValue = useMemo(() => {\n const currentPalette = customPalette ? customPalette({ mode }) : palette({ mode });\n return {\n palette: {\n isUsingSystemColorScheme,\n setUseSystemColorScheme: handleSetUseSystemColorScheme,\n toggleTheme,\n ...currentPalette, // 선택된 모드에 따른 팔레트 적용\n },\n typography: typography({ themeFonts }),\n elevation: elevation(currentPalette)\n };\n }, [mode, isUsingSystemColorScheme, themeFonts, customPalette, handleSetUseSystemColorScheme, toggleTheme]);\n\n return (\n <ThemeContext.Provider value={themeValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"ThemeContext.js","sourceRoot":"","sources":["../../src/context/ThemeContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, useContext, useMemo, useReducer, useEffect, useCallback } from 'react';\nimport { Platform, useColorScheme } from 'react-native';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport * as NavigationBar from 'expo-navigation-bar';\nimport palette from '../theme/palette';\nimport { Theme, ThemeFonts, TypographyVariantsProps } from '../theme/types';\nimport typography from '../theme/typography';\nimport elevation, { ElevationStyles } from '../theme/elevation';\n\nexport interface FoldableConfig {\n /**\n * 언폴딩 상태에서 rightComponent가 없을 때(단일 화면) 콘텐츠 최대 가로 길이(px).\n * 미주입(undefined) 또는 false면 전폭으로 늘린다. 폭을 제한하려면 반드시 값을 주입해야 한다.\n */\n unfoldedSinglePaneMaxWidth?: number | false;\n}\n\nexport interface ThemeProviderProps {\n themeFonts?: ThemeFonts;\n children: React.ReactNode;\n isDarkModeEnabled?: boolean;\n customPalette?: (config: { mode?: 'light' | 'dark'; themeColors?: { light?: Theme; dark?: Theme } }) => Theme;\n foldable?: FoldableConfig;\n}\n\nexport interface ThemeProps {\n palette: Palette;\n typography: TypographyVariantsProps;\n elevation: ElevationStyles;\n foldable: FoldableConfig;\n}\n\nexport interface Palette extends Theme {\n mode: 'light' | 'dark';\n isUsingSystemColorScheme: boolean;\n setUseSystemColorScheme: (useSystem: boolean) => void;\n toggleTheme: () => void;\n}\n\nconst ThemeContext = createContext<ThemeProps | null>(null);\ntype ThemeMode = 'light' | 'dark';\n\ntype ThemeState = {\n mode: ThemeMode;\n isUsingSystemColorScheme: boolean;\n};\n\ntype ThemeAction =\n | { type: 'HYDRATE'; state: ThemeState }\n | { type: 'SYNC_SYSTEM_MODE'; systemMode: ThemeMode }\n | { type: 'SET_USE_SYSTEM_COLOR_SCHEME'; useSystem: boolean; systemMode: ThemeMode }\n | { type: 'TOGGLE_THEME' };\n\nconst getSystemMode = (systemColorScheme: ReturnType<typeof useColorScheme>): ThemeMode =>\n systemColorScheme === 'dark' ? 'dark' : 'light';\n\nfunction themeReducer(state: ThemeState, action: ThemeAction): ThemeState {\n switch (action.type) {\n case 'HYDRATE':\n return action.state;\n case 'SYNC_SYSTEM_MODE':\n return state.isUsingSystemColorScheme\n ? { ...state, mode: action.systemMode }\n : state;\n case 'SET_USE_SYSTEM_COLOR_SCHEME':\n return {\n ...state,\n isUsingSystemColorScheme: action.useSystem,\n mode: action.useSystem ? action.systemMode : state.mode,\n };\n case 'TOGGLE_THEME':\n return {\n isUsingSystemColorScheme: false,\n mode: state.mode === 'light' ? 'dark' : 'light',\n };\n default:\n return state;\n }\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ themeFonts, children, isDarkModeEnabled = true, customPalette, foldable }) => {\n const systemColorScheme = useColorScheme();\n const systemMode = getSystemMode(systemColorScheme);\n const [themeState, dispatchTheme] = useReducer(\n themeReducer,\n {\n isUsingSystemColorScheme: isDarkModeEnabled,\n mode: isDarkModeEnabled ? systemMode : 'light',\n }\n );\n const { isUsingSystemColorScheme, mode } = themeState;\n\n useEffect(() => {\n let isMounted = true;\n\n const loadSettings = async () => {\n try {\n if (!isMounted) return;\n \n if (!isDarkModeEnabled) {\n dispatchTheme({\n type: 'HYDRATE',\n state: {\n isUsingSystemColorScheme: false,\n mode: 'light',\n },\n });\n return;\n }\n\n const storedUseSystemColorScheme = await AsyncStorage.getItem('useSystemColorScheme');\n const storedMode = await AsyncStorage.getItem('themeMode');\n\n if (!isMounted) return;\n\n const isUsingSystemColorScheme = storedUseSystemColorScheme === null\n ? true\n : storedUseSystemColorScheme === 'true';\n const savedMode = storedMode === 'dark' || storedMode === 'light' ? storedMode : undefined;\n\n dispatchTheme({\n type: 'HYDRATE',\n state: {\n isUsingSystemColorScheme,\n mode: isUsingSystemColorScheme ? systemMode : savedMode ?? systemMode,\n },\n });\n } catch (error) {\n console.error('Failed to load theme settings', error);\n }\n };\n\n loadSettings();\n\n return () => {\n isMounted = false;\n };\n }, [isDarkModeEnabled, systemMode]);\n\n useEffect(() => {\n dispatchTheme({ type: 'SYNC_SYSTEM_MODE', systemMode });\n }, [systemMode]);\n\n useEffect(() => {\n if (Platform.OS === 'android') {\n NavigationBar.setStyle(mode);\n }\n }, [mode])\n\n const toggleTheme = useCallback(async () => {\n const newMode = mode === 'light' ? 'dark' : 'light';\n dispatchTheme({ type: 'TOGGLE_THEME' });\n await AsyncStorage.multiSet([\n ['useSystemColorScheme', 'false'],\n ['themeMode', newMode],\n ]);\n }, [mode]);\n\n const handleSetUseSystemColorScheme = useCallback(async (useSystem: boolean) => {\n dispatchTheme({ type: 'SET_USE_SYSTEM_COLOR_SCHEME', useSystem, systemMode });\n await AsyncStorage.setItem('useSystemColorScheme', useSystem.toString());\n }, [systemMode]);\n\n const unfoldedSinglePaneMaxWidth = foldable?.unfoldedSinglePaneMaxWidth;\n\n const themeValue = useMemo(() => {\n const currentPalette = customPalette ? customPalette({ mode }) : palette({ mode });\n return {\n palette: {\n isUsingSystemColorScheme,\n setUseSystemColorScheme: handleSetUseSystemColorScheme,\n toggleTheme,\n ...currentPalette,\n },\n typography: typography({ themeFonts }),\n elevation: elevation(currentPalette),\n foldable: { unfoldedSinglePaneMaxWidth },\n };\n }, [mode, isUsingSystemColorScheme, themeFonts, customPalette, handleSetUseSystemColorScheme, toggleTheme, unfoldedSinglePaneMaxWidth]);\n\n return (\n <ThemeContext.Provider value={themeValue}>\n {children}\n </ThemeContext.Provider>\n );\n}\n"]}
package/build/index.d.ts CHANGED
@@ -23,10 +23,10 @@ import ZSBlockButton from './ui/ZSBlockButton';
23
23
  import ZSSkeleton from './ui/ZSSkeleton';
24
24
  import ZSSkeletonBox from './ui/ZSSkeletonBox';
25
25
  export { useTheme, useFoldingState, ThemeProvider, OverlayProvider, themeFactory, ZSView, AnimatedWrapper, TextAtom, ZSContainer, ZSPressable, ZSText, ZSTextField, ZSRadioGroup, ZSSwitch, ErrorComponent, ZSAboveKeyboard, ZSBlockButton, ZSSkeleton, ZSSkeletonBox, AlertOverlay, BottomSheetOverlay, SnackbarNotify, useOverlay, PopOverButton, PopOverMenu, ZSPortal, GlobalOverlay, useStyleSheetCreate, };
26
- import type { ThemeProviderProps, ThemeProps, Palette } from "./context/ThemeContext";
26
+ import type { ThemeProviderProps, ThemeProps, Palette, FoldableConfig } from "./context/ThemeContext";
27
27
  import { ColorPalette, ColorPaletteExtend, ThemeTextType, ThemeBackground, MainColors, Theme, TypographyVariants, ThemeFonts, TypoNumber, TypographyVariantsProps, TypoStyle, TypoOptions, TypoSubStyle, TypoColorOptions, ShadowLevel, ShadowStyle } from "./theme/types";
28
28
  import { ThemeFactoryColors, ThemeFactoryConfig } from "./theme/palette";
29
29
  import { SnackItem, ShowAlertProps, ShowSnackBarProps, ShowBottomSheetProps, PopOverMenuProps, CustomSnackbarProps, OverlayProviderProps, AlertAction, AlertActions, SnackType, HideOption, BottomSheetOptions, FoldingStateInfo } from "./model/types";
30
30
  import { RadioOption } from "./ui/types";
31
- export type { ThemeProviderProps, ThemeProps, Palette, ZSTextProps, BoxStyle, ZSTextFieldRef, ColorPalette, ColorPaletteExtend, ThemeTextType, ThemeBackground, MainColors, Theme, TypographyVariants, ThemeFonts, TypoNumber, TypographyVariantsProps, TypoStyle, TypoOptions, TypoSubStyle, TypoColorOptions, ThemeFactoryColors, ThemeFactoryConfig, SnackItem, ShowAlertProps, ShowSnackBarProps, ShowBottomSheetProps, PopOverMenuProps, CustomSnackbarProps, OverlayProviderProps, AlertAction, AlertActions, SnackType, HideOption, BottomSheetOptions, RadioOption, ShadowLevel, ShadowStyle, ZSContainerRef, FoldingStateInfo, };
31
+ export type { ThemeProviderProps, ThemeProps, Palette, FoldableConfig, ZSTextProps, BoxStyle, ZSTextFieldRef, ColorPalette, ColorPaletteExtend, ThemeTextType, ThemeBackground, MainColors, Theme, TypographyVariants, ThemeFonts, TypoNumber, TypographyVariantsProps, TypoStyle, TypoOptions, TypoSubStyle, TypoColorOptions, ThemeFactoryColors, ThemeFactoryConfig, SnackItem, ShowAlertProps, ShowSnackBarProps, ShowBottomSheetProps, PopOverMenuProps, CustomSnackbarProps, OverlayProviderProps, AlertAction, AlertActions, SnackType, HideOption, BottomSheetOptions, RadioOption, ShadowLevel, ShadowStyle, ZSContainerRef, FoldingStateInfo, };
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}