@herca/rn-kit 0.1.62 → 0.1.64

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.
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ import { Color, Icon } from '@herca/rn-kit';
3
4
  import React, { useState, useEffect, useCallback } from 'react';
4
5
  import { View, StyleSheet, Modal, TouchableOpacity, Animated, SafeAreaView, Platform } from 'react-native';
5
- import Icon from "../Icon/index.js";
6
- import Color from "../Color/Color.js";
7
6
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
7
  const ModalPopUp = ({
9
8
  isOpen,
@@ -17,10 +16,9 @@ const ModalPopUp = ({
17
16
  containerStyle,
18
17
  modalStyle
19
18
  }) => {
20
- const [isVisible, setIsVisible] = useState(isOpen);
19
+ const [isVisible, setIsVisible] = useState(isOpen ?? false);
21
20
  const scaleAnim = useState(() => new Animated.Value(0))[0];
22
- const showModal = useCallback(() => {
23
- setIsVisible(true);
21
+ const animateIn = useCallback(() => {
24
22
  Animated.spring(scaleAnim, {
25
23
  toValue: 1,
26
24
  useNativeDriver: true,
@@ -28,32 +26,28 @@ const ModalPopUp = ({
28
26
  stiffness: 200
29
27
  }).start();
30
28
  }, [scaleAnim]);
31
- const hideModal = useCallback(() => {
32
- Animated.spring(scaleAnim, {
33
- toValue: 0,
34
- useNativeDriver: true
35
- }).start(() => {
36
- setIsVisible(false);
37
- onClose?.(false);
38
- });
39
- }, [scaleAnim, onClose]);
40
- const handleBackdropPress = useCallback(() => {
41
- if (closable) {
42
- if (onRequestClose) {
43
- onRequestClose();
44
- } else {
45
- hideModal();
46
- }
47
- }
48
- }, [closable, onRequestClose, hideModal]);
49
29
  useEffect(() => {
50
30
  if (isOpen) {
51
- showModal();
52
- } else {
53
- hideModal();
31
+ setIsVisible(true);
32
+ animateIn();
33
+ } else if (isVisible) {
34
+ setIsVisible(false);
35
+ onRequestClose?.();
36
+ onClose?.();
54
37
  }
55
- // eslint-disable-next-line react-hooks/exhaustive-deps
56
- }, [isOpen]);
38
+ }, [isOpen, isVisible, animateIn, onRequestClose, onClose]);
39
+ const userClose = useCallback(() => {
40
+ if (!closable) return;
41
+ setIsVisible(false);
42
+ onRequestClose?.();
43
+ onClose?.();
44
+ }, [closable, onClose, onRequestClose]);
45
+ const handleBackdropPress = () => {
46
+ userClose();
47
+ };
48
+ const handleRequestClose = () => {
49
+ userClose();
50
+ };
57
51
  const modalContentStyle = StyleSheet.flatten([{
58
52
  transform: [{
59
53
  scale: scaleAnim
@@ -65,7 +59,7 @@ const ModalPopUp = ({
65
59
  return /*#__PURE__*/_jsx(Modal, {
66
60
  transparent: true,
67
61
  visible: isVisible,
68
- onRequestClose: handleBackdropPress,
62
+ onRequestClose: handleRequestClose,
69
63
  statusBarTranslucent: true,
70
64
  children: /*#__PURE__*/_jsxs(View, {
71
65
  style: [styles.modalContainer, containerStyle],
@@ -78,7 +72,7 @@ const ModalPopUp = ({
78
72
  children: [closable && /*#__PURE__*/_jsx(View, {
79
73
  style: styles.closeButtonContainer,
80
74
  children: /*#__PURE__*/_jsx(TouchableOpacity, {
81
- onPress: hideModal,
75
+ onPress: userClose,
82
76
  style: styles.closeButton,
83
77
  children: /*#__PURE__*/_jsx(View, {
84
78
  style: styles.iconButtonClose,
@@ -143,7 +137,6 @@ const styles = StyleSheet.create({
143
137
  justifyContent: 'center',
144
138
  alignContent: 'center',
145
139
  alignItems: 'center',
146
- top: 'auto',
147
140
  flex: 1
148
141
  },
149
142
  closeButton: {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useEffect","useCallback","View","StyleSheet","Modal","TouchableOpacity","Animated","SafeAreaView","Platform","Icon","Color","jsx","_jsx","jsxs","_jsxs","ModalPopUp","isOpen","onClose","children","backdrop","closable","onRequestClose","bgColor","width","containerStyle","modalStyle","isVisible","setIsVisible","scaleAnim","Value","showModal","spring","toValue","useNativeDriver","damping","stiffness","start","hideModal","handleBackdropPress","modalContentStyle","flatten","transform","scale","backgroundColor","maxHeight","transparent","visible","statusBarTranslucent","style","styles","modalContainer","backdropTouch","activeOpacity","onPress","modalContent","closeButtonContainer","closeButton","iconButtonClose","name","size","color","gray","contentContainer","create","flex","justifyContent","alignItems","position","top","left","right","bottom","height","borderRadius","overflow","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","zIndex","alignContent","padding"],"sourceRoot":"../../../src","sources":["Modal/Modal.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,OAAO;AAC/D,SACEC,IAAI,EACJC,UAAU,EACVC,KAAK,EACLC,gBAAgB,EAChBC,QAAQ,EAERC,YAAY,EACZC,QAAQ,QAEH,cAAc;AACrB,OAAOC,IAAI,MAAM,kBAAS;AAC1B,OAAOC,KAAK,MAAM,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgBnC,MAAMC,UAAqC,GAAGA,CAAC;EAC7CC,MAAM;EACNC,OAAO;EACPC,QAAQ;EACRC,QAAQ,GAAG,IAAI;EACfC,QAAQ,GAAG,IAAI;EACfC,cAAc;EACdC,OAAO,GAAG,MAAM;EAChBC,KAAK,GAAG,KAAK;EACbC,cAAc;EACdC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG5B,QAAQ,CAACiB,MAAM,CAAC;EAClD,MAAMY,SAAS,GAAG7B,QAAQ,CAAC,MAAM,IAAIO,QAAQ,CAACuB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAE1D,MAAMC,SAAS,GAAG7B,WAAW,CAAC,MAAM;IAClC0B,YAAY,CAAC,IAAI,CAAC;IAClBrB,QAAQ,CAACyB,MAAM,CAACH,SAAS,EAAE;MACzBI,OAAO,EAAE,CAAC;MACVC,eAAe,EAAE,IAAI;MACrBC,OAAO,EAAE,EAAE;MACXC,SAAS,EAAE;IACb,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC;EACZ,CAAC,EAAE,CAACR,SAAS,CAAC,CAAC;EAEf,MAAMS,SAAS,GAAGpC,WAAW,CAAC,MAAM;IAClCK,QAAQ,CAACyB,MAAM,CAACH,SAAS,EAAE;MACzBI,OAAO,EAAE,CAAC;MACVC,eAAe,EAAE;IACnB,CAAC,CAAC,CAACG,KAAK,CAAC,MAAM;MACbT,YAAY,CAAC,KAAK,CAAC;MACnBV,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,EAAE,CAACW,SAAS,EAAEX,OAAO,CAAC,CAAC;EAExB,MAAMqB,mBAAmB,GAAGrC,WAAW,CAAC,MAAM;IAC5C,IAAImB,QAAQ,EAAE;MACZ,IAAIC,cAAc,EAAE;QAClBA,cAAc,CAAC,CAAC;MAClB,CAAC,MAAM;QACLgB,SAAS,CAAC,CAAC;MACb;IACF;EACF,CAAC,EAAE,CAACjB,QAAQ,EAAEC,cAAc,EAAEgB,SAAS,CAAC,CAAC;EAEzCrC,SAAS,CAAC,MAAM;IACd,IAAIgB,MAAM,EAAE;MACVc,SAAS,CAAC,CAAC;IACb,CAAC,MAAM;MACLO,SAAS,CAAC,CAAC;IACb;IACA;EACF,CAAC,EAAE,CAACrB,MAAM,CAAC,CAAC;EAEZ,MAAMuB,iBAAiB,GAAGpC,UAAU,CAACqC,OAAO,CAAC,CAC3C;IACEC,SAAS,EAAE,CAAC;MAAEC,KAAK,EAAEd;IAAU,CAAC,CAAC;IACjCe,eAAe,EAAErB,OAAO;IACxBC,KAAK,EAAEA,KAAK;IACZqB,SAAS,EAAE;EACb,CAAC,EACDnB,UAAU,CACX,CAAC;EAEF,oBACEb,IAAA,CAACR,KAAK;IACJyC,WAAW;IACXC,OAAO,EAAEpB,SAAU;IACnBL,cAAc,EAAEiB,mBAAoB;IACpCS,oBAAoB;IAAA7B,QAAA,eAEpBJ,KAAA,CAACZ,IAAI;MAAC8C,KAAK,EAAE,CAACC,MAAM,CAACC,cAAc,EAAE1B,cAAc,CAAE;MAAAN,QAAA,GAClDC,QAAQ,iBACPP,IAAA,CAACP,gBAAgB;QACf2C,KAAK,EAAE,CAACC,MAAM,CAAC9B,QAAQ,EAAE8B,MAAM,CAACE,aAAa,CAAE;QAC/CC,aAAa,EAAE,CAAE;QACjBC,OAAO,EAAEf;MAAoB,CAC9B,CACF,eACDxB,KAAA,CAACR,QAAQ,CAACJ,IAAI;QAAC8C,KAAK,EAAE,CAACC,MAAM,CAACK,YAAY,EAAEf,iBAAiB,CAAE;QAAArB,QAAA,GAC5DE,QAAQ,iBACPR,IAAA,CAACV,IAAI;UAAC8C,KAAK,EAAEC,MAAM,CAACM,oBAAqB;UAAArC,QAAA,eACvCN,IAAA,CAACP,gBAAgB;YAACgD,OAAO,EAAEhB,SAAU;YAACW,KAAK,EAAEC,MAAM,CAACO,WAAY;YAAAtC,QAAA,eAC9DN,IAAA,CAACV,IAAI;cAAC8C,KAAK,EAAEC,MAAM,CAACQ,eAAgB;cAAAvC,QAAA,eAClCN,IAAA,CAACH,IAAI;gBAACiD,IAAI,EAAC,OAAO;gBAACC,IAAI,EAAE,EAAG;gBAACC,KAAK,EAAElD,KAAK,CAACmD,IAAI,CAAC,GAAG;cAAE,CAAE;YAAC,CACnD;UAAC,CACS;QAAC,CACf,CACP,eACDjD,IAAA,CAACL,YAAY;UAACyC,KAAK,EAAEC,MAAM,CAACa,gBAAiB;UAAA5C,QAAA,EAC1CA;QAAQ,CACG,CAAC;MAAA,CACF,CAAC;IAAA,CACZ;EAAC,CACF,CAAC;AAEZ,CAAC;AAED,MAAM+B,MAAM,GAAG9C,UAAU,CAAC4D,MAAM,CAAC;EAC/Bb,cAAc,EAAE;IACdc,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACD/C,QAAQ,EAAE;IACRgD,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACT5B,eAAe,EAAE;EACnB,CAAC;EACDQ,aAAa,EAAE;IACb5B,KAAK,EAAE,MAAM;IACbiD,MAAM,EAAE;EACV,CAAC;EACDlB,YAAY,EAAE;IACZmB,YAAY,EAAE,EAAE;IAChBC,QAAQ,EAAE,SAAS;IACnB,GAAGlE,QAAQ,CAACmE,MAAM,CAAC;MACjBC,GAAG,EAAE;QACHC,WAAW,EAAE,MAAM;QACnBC,YAAY,EAAE;UACZvD,KAAK,EAAE,CAAC;UACRiD,MAAM,EAAE;QACV,CAAC;QACDO,aAAa,EAAE,IAAI;QACnBC,YAAY,EAAE;MAChB,CAAC;MACDC,OAAO,EAAE;QACPC,SAAS,EAAE;MACb;IACF,CAAC;EACH,CAAC;EACD3B,oBAAoB,EAAE;IACpBY,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,EAAE;IACPE,KAAK,EAAE,EAAE;IACTa,MAAM,EAAE;EACV,CAAC;EACD1B,eAAe,EAAE;IACfQ,cAAc,EAAE,QAAQ;IACxBmB,YAAY,EAAE,QAAQ;IACtBlB,UAAU,EAAE,QAAQ;IACpBE,GAAG,EAAE,MAAM;IACXJ,IAAI,EAAE;EACR,CAAC;EACDR,WAAW,EAAE;IACXjC,KAAK,EAAE,EAAE;IACTiD,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,EAAE;IAChB9B,eAAe,EAAE;EACnB,CAAC;EACDmB,gBAAgB,EAAE;IAChBuB,OAAO,EAAE;EACX;AACF,CAAC,CAAC;AAEF,eAAetE,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["Color","Icon","React","useState","useEffect","useCallback","View","StyleSheet","Modal","TouchableOpacity","Animated","SafeAreaView","Platform","jsx","_jsx","jsxs","_jsxs","ModalPopUp","isOpen","onClose","children","backdrop","closable","onRequestClose","bgColor","width","containerStyle","modalStyle","isVisible","setIsVisible","scaleAnim","Value","animateIn","spring","toValue","useNativeDriver","damping","stiffness","start","userClose","handleBackdropPress","handleRequestClose","modalContentStyle","flatten","transform","scale","backgroundColor","maxHeight","transparent","visible","statusBarTranslucent","style","styles","modalContainer","backdropTouch","activeOpacity","onPress","modalContent","closeButtonContainer","closeButton","iconButtonClose","name","size","color","gray","contentContainer","create","flex","justifyContent","alignItems","position","top","left","right","bottom","height","borderRadius","overflow","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","zIndex","alignContent","padding"],"sourceRoot":"../../../src","sources":["Modal/Modal.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAML,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAgGzC,CAAC;AA8DF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../../src/Modal/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,EAML,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA4FzC,CAAC;AA0CF,eAAe,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herca/rn-kit",
3
- "version": "0.1.62",
3
+ "version": "0.1.64",
4
4
  "description": "React Native UI Kit",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,3 +1,4 @@
1
+ import { Color, Icon } from '@herca/rn-kit';
1
2
  import React, { useState, useEffect, useCallback } from 'react';
2
3
  import {
3
4
  View,
@@ -10,8 +11,6 @@ import {
10
11
  Platform,
11
12
  type ViewStyle,
12
13
  } from 'react-native';
13
- import Icon from '../Icon';
14
- import Color from '../Color/Color';
15
14
 
16
15
  interface ModalPopUpProps {
17
16
  isOpen: boolean;
@@ -39,11 +38,10 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
39
38
  containerStyle,
40
39
  modalStyle,
41
40
  }) => {
42
- const [isVisible, setIsVisible] = useState(isOpen);
41
+ const [isVisible, setIsVisible] = useState(isOpen ?? false);
43
42
  const scaleAnim = useState(() => new Animated.Value(0))[0];
44
43
 
45
- const showModal = useCallback(() => {
46
- setIsVisible(true);
44
+ const animateIn = useCallback(() => {
47
45
  Animated.spring(scaleAnim, {
48
46
  toValue: 1,
49
47
  useNativeDriver: true,
@@ -52,34 +50,31 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
52
50
  }).start();
53
51
  }, [scaleAnim]);
54
52
 
55
- const hideModal = useCallback(() => {
56
- Animated.spring(scaleAnim, {
57
- toValue: 0,
58
- useNativeDriver: true,
59
- }).start(() => {
60
- setIsVisible(false);
61
- onClose?.(false);
62
- });
63
- }, [scaleAnim, onClose]);
64
-
65
- const handleBackdropPress = useCallback(() => {
66
- if (closable) {
67
- if (onRequestClose) {
68
- onRequestClose();
69
- } else {
70
- hideModal();
71
- }
72
- }
73
- }, [closable, onRequestClose, hideModal]);
74
-
75
53
  useEffect(() => {
76
54
  if (isOpen) {
77
- showModal();
78
- } else {
79
- hideModal();
55
+ setIsVisible(true);
56
+ animateIn();
57
+ } else if (isVisible) {
58
+ setIsVisible(false);
59
+ onRequestClose?.();
60
+ onClose?.();
80
61
  }
81
- // eslint-disable-next-line react-hooks/exhaustive-deps
82
- }, [isOpen]);
62
+ }, [isOpen, isVisible, animateIn, onRequestClose, onClose]);
63
+
64
+ const userClose = useCallback(() => {
65
+ if (!closable) return;
66
+ setIsVisible(false);
67
+ onRequestClose?.();
68
+ onClose?.();
69
+ }, [closable, onClose, onRequestClose]);
70
+
71
+ const handleBackdropPress = () => {
72
+ userClose();
73
+ };
74
+
75
+ const handleRequestClose = () => {
76
+ userClose();
77
+ };
83
78
 
84
79
  const modalContentStyle = StyleSheet.flatten([
85
80
  {
@@ -95,7 +90,7 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
95
90
  <Modal
96
91
  transparent
97
92
  visible={isVisible}
98
- onRequestClose={handleBackdropPress}
93
+ onRequestClose={handleRequestClose}
99
94
  statusBarTranslucent
100
95
  >
101
96
  <View style={[styles.modalContainer, containerStyle]}>
@@ -109,7 +104,7 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
109
104
  <Animated.View style={[styles.modalContent, modalContentStyle]}>
110
105
  {closable && (
111
106
  <View style={styles.closeButtonContainer}>
112
- <TouchableOpacity onPress={hideModal} style={styles.closeButton}>
107
+ <TouchableOpacity onPress={userClose} style={styles.closeButton}>
113
108
  <View style={styles.iconButtonClose}>
114
109
  <Icon name="Times" size={13} color={Color.gray[900]} />
115
110
  </View>
@@ -126,11 +121,7 @@ const ModalPopUp: React.FC<ModalPopUpProps> = ({
126
121
  };
127
122
 
128
123
  const styles = StyleSheet.create({
129
- modalContainer: {
130
- flex: 1,
131
- justifyContent: 'center',
132
- alignItems: 'center',
133
- },
124
+ modalContainer: { flex: 1, justifyContent: 'center', alignItems: 'center' },
134
125
  backdrop: {
135
126
  position: 'absolute',
136
127
  top: 0,
@@ -139,39 +130,25 @@ const styles = StyleSheet.create({
139
130
  bottom: 0,
140
131
  backgroundColor: 'rgba(0, 0, 0, 0.5)',
141
132
  },
142
- backdropTouch: {
143
- width: '100%',
144
- height: '100%',
145
- },
133
+ backdropTouch: { width: '100%', height: '100%' },
146
134
  modalContent: {
147
135
  borderRadius: 16,
148
136
  overflow: 'visible',
149
137
  ...Platform.select({
150
138
  ios: {
151
139
  shadowColor: '#000',
152
- shadowOffset: {
153
- width: 0,
154
- height: 2,
155
- },
140
+ shadowOffset: { width: 0, height: 2 },
156
141
  shadowOpacity: 0.25,
157
142
  shadowRadius: 4,
158
143
  },
159
- android: {
160
- elevation: 5,
161
- },
144
+ android: { elevation: 5 },
162
145
  }),
163
146
  },
164
- closeButtonContainer: {
165
- position: 'absolute',
166
- top: 10,
167
- right: 10,
168
- zIndex: 1,
169
- },
147
+ closeButtonContainer: { position: 'absolute', top: 10, right: 10, zIndex: 1 },
170
148
  iconButtonClose: {
171
149
  justifyContent: 'center',
172
150
  alignContent: 'center',
173
151
  alignItems: 'center',
174
- top: 'auto',
175
152
  flex: 1,
176
153
  },
177
154
  closeButton: {
@@ -180,9 +157,7 @@ const styles = StyleSheet.create({
180
157
  borderRadius: 12,
181
158
  backgroundColor: '#ccc',
182
159
  },
183
- contentContainer: {
184
- padding: 16,
185
- },
160
+ contentContainer: { padding: 16 },
186
161
  });
187
162
 
188
163
  export default ModalPopUp;