related-ui-components 4.0.9 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,6 +32,7 @@ const DefaultModalUI = ({
32
32
  easing: Easing.bezier(0.25, 0.1, 0.25, 1)
33
33
  },
34
34
  position = "center",
35
+ animateFrom = "center",
35
36
  avoidKeyboard = true,
36
37
  backdropStyle,
37
38
  containerStyle
@@ -43,7 +44,7 @@ const DefaultModalUI = ({
43
44
  runOnJS(setIsRendered)(false);
44
45
  }
45
46
  });
46
- }, [isVisible, animationConfig]);
47
+ }, [isVisible, animationConfig, opacity]);
47
48
  useEffect(() => {
48
49
  const backHandler = BackHandler.addEventListener("hardwareBackPress", () => {
49
50
  if (isVisible && closeOnBackButton) {
@@ -58,13 +59,12 @@ const DefaultModalUI = ({
58
59
  opacity: opacity.value
59
60
  }));
60
61
  const contentAnimatedStyle = useAnimatedStyle(() => {
61
- // Simple slide/fade effect based on position
62
62
  let transform = [];
63
- if (position === "bottom") {
63
+ if (animateFrom === "bottom") {
64
64
  transform.push({
65
65
  translateY: (1 - opacity.value) * 100
66
66
  });
67
- } else if (position === "top") {
67
+ } else if (animateFrom === "top") {
68
68
  transform.push({
69
69
  translateY: (1 - opacity.value) * -100
70
70
  });
@@ -96,9 +96,11 @@ const DefaultModalUI = ({
96
96
  })
97
97
  }), /*#__PURE__*/_jsx(ContentWrapper, {
98
98
  behavior: "padding",
99
+ keyboardVerticalOffset: 16,
99
100
  style: [styles.keyboardView, {
100
101
  paddingBottom,
101
- paddingTop
102
+ paddingTop,
103
+ justifyContent
102
104
  }],
103
105
  pointerEvents: "box-none",
104
106
  children: /*#__PURE__*/_jsx(Animated.View, {
@@ -110,7 +112,6 @@ const DefaultModalUI = ({
110
112
  };
111
113
 
112
114
  // --- Provider ---
113
-
114
115
  export const UniversalModalProvider = ({
115
116
  children,
116
117
  defaultOptions = {},
@@ -171,9 +172,6 @@ export const UniversalModalProvider = ({
171
172
  })
172
173
  });
173
174
  };
174
-
175
- // --- Hook ---
176
-
177
175
  export const useModal = () => {
178
176
  const context = useContext(ModalContext);
179
177
  if (!context) {
@@ -181,9 +179,6 @@ export const useModal = () => {
181
179
  }
182
180
  return context;
183
181
  };
184
-
185
- // --- Default Styles ---
186
-
187
182
  const styles = StyleSheet.create({
188
183
  overlayWrapper: {
189
184
  zIndex: 1000,
@@ -193,22 +188,11 @@ const styles = StyleSheet.create({
193
188
  backgroundColor: "rgba(0, 0, 0, 0.6)"
194
189
  },
195
190
  keyboardView: {
196
- flexGrow: 1,
197
191
  justifyContent: "center",
198
192
  alignItems: "center"
199
193
  },
200
194
  baseContainer: {
201
- // backgroundColor: "white", // Default, allows override
202
- // borderRadius: 16,
203
- // padding: 20,
204
195
  width: "90%"
205
- // maxWidth: 500,
206
- // alignItems: "center",
207
- // shadowColor: "#000",
208
- // shadowOffset: { width: 0, height: 2 },
209
- // shadowOpacity: 0.25,
210
- // shadowRadius: 3.84,
211
- // elevation: 5,
212
196
  }
213
197
  });
214
198
  //# sourceMappingURL=UniversalModalProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Portal","PortalHost","PortalProvider","React","createContext","useCallback","useContext","useEffect","useMemo","useState","BackHandler","StyleSheet","TouchableOpacity","View","KeyboardAvoidingView","Animated","Easing","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","ModalContext","undefined","DEFAULT_MODAL_HOST","DefaultModalUI","isVisible","children","options","onClose","insets","isRendered","setIsRendered","opacity","closeOnBackdropPress","closeOnBackButton","animationConfig","duration","easing","bezier","position","avoidKeyboard","backdropStyle","containerStyle","value","finished","backHandler","addEventListener","remove","backdropAnimatedStyle","contentAnimatedStyle","transform","push","translateY","scale","justifyContent","paddingBottom","bottom","paddingTop","top","ContentWrapper","style","absoluteFill","styles","overlayWrapper","backdrop","activeOpacity","onPress","behavior","keyboardView","pointerEvents","baseContainer","UniversalModalProvider","defaultOptions","portalHostName","CustomModalComponent","state","setState","content","showModal","hideModal","prev","setTimeout","ModalUI","Provider","name","hostName","useModal","context","Error","create","zIndex","elevation","backgroundColor","flexGrow","alignItems","width"],"sourceRoot":"..\\..\\..\\src","sources":["contexts/UniversalModalProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Portal","PortalHost","PortalProvider","React","createContext","useCallback","useContext","useEffect","useMemo","useState","BackHandler","StyleSheet","TouchableOpacity","View","KeyboardAvoidingView","Animated","Easing","runOnJS","useAnimatedStyle","useSharedValue","withTiming","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","ModalContext","undefined","DEFAULT_MODAL_HOST","DefaultModalUI","isVisible","children","options","onClose","insets","isRendered","setIsRendered","opacity","closeOnBackdropPress","closeOnBackButton","animationConfig","duration","easing","bezier","position","animateFrom","avoidKeyboard","backdropStyle","containerStyle","value","finished","backHandler","addEventListener","remove","backdropAnimatedStyle","contentAnimatedStyle","transform","push","translateY","scale","justifyContent","paddingBottom","bottom","paddingTop","top","ContentWrapper","style","absoluteFill","styles","overlayWrapper","backdrop","activeOpacity","onPress","behavior","keyboardVerticalOffset","keyboardView","pointerEvents","baseContainer","UniversalModalProvider","defaultOptions","portalHostName","CustomModalComponent","state","setState","content","showModal","hideModal","prev","setTimeout","ModalUI","Provider","name","hostName","useModal","context","Error","create","zIndex","elevation","backgroundColor","alignItems","width"],"sourceRoot":"..\\..\\..\\src","sources":["contexts/UniversalModalProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,7 @@ export interface ModalOptions {
14
14
  containerStyle?: StyleProp<ViewStyle>;
15
15
  /** Position of the modal. Default: 'center' */
16
16
  position?: "center" | "bottom" | "top";
17
+ animateFrom?: "center" | "bottom" | "top";
17
18
  /** If true, avoids keyboard view. Default: true */
18
19
  avoidKeyboard?: boolean;
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UniversalModalProvider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/UniversalModalProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAMV,MAAM,OAAO,CAAC;AACf,OAAO,EAGL,SAAS,EAIT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAiB,EAQf,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAgHvD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiE/D,CAAC;AAIF,eAAO,MAAM,QAAQ,wBAMpB,CAAC"}
1
+ {"version":3,"file":"UniversalModalProvider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/UniversalModalProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAEZ,SAAS,EAMV,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,SAAS,EAIT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAiB,EAMf,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACvC,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC1C,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,SAAS,CAAC;QACpB,OAAO,EAAE,YAAY,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC,CAAC;CACJ;AAMD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAsIvD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA8D/D,CAAC;AAEF,eAAO,MAAM,QAAQ,wBAMpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "related-ui-components",
3
- "version": "4.0.9",
3
+ "version": "4.1.0",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -10,18 +10,15 @@ import React, {
10
10
  } from "react";
11
11
  import {
12
12
  BackHandler,
13
- Platform,
14
13
  StyleProp,
15
14
  StyleSheet,
16
15
  TouchableOpacity,
17
16
  View,
18
17
  ViewStyle,
19
18
  } from "react-native";
20
- import { KeyboardProvider as RNKeyboardProvider, KeyboardAvoidingView } from "react-native-keyboard-controller";
19
+ import { KeyboardAvoidingView } from "react-native-keyboard-controller";
21
20
  import Animated, {
22
21
  Easing,
23
- FadeIn,
24
- FadeOut,
25
22
  runOnJS,
26
23
  useAnimatedStyle,
27
24
  useSharedValue,
@@ -44,6 +41,7 @@ export interface ModalOptions {
44
41
  containerStyle?: StyleProp<ViewStyle>;
45
42
  /** Position of the modal. Default: 'center' */
46
43
  position?: "center" | "bottom" | "top";
44
+ animateFrom?: "center" | "bottom" | "top";
47
45
  /** If true, avoids keyboard view. Default: true */
48
46
  avoidKeyboard?: boolean;
49
47
  }
@@ -89,8 +87,12 @@ const DefaultModalUI: React.FC<{
89
87
  const {
90
88
  closeOnBackdropPress = true,
91
89
  closeOnBackButton = true,
92
- animationConfig = { duration: 300, easing: Easing.bezier(0.25, 0.1, 0.25, 1) },
90
+ animationConfig = {
91
+ duration: 300,
92
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1),
93
+ },
93
94
  position = "center",
95
+ animateFrom = "center",
94
96
  avoidKeyboard = true,
95
97
  backdropStyle,
96
98
  containerStyle,
@@ -106,18 +108,21 @@ const DefaultModalUI: React.FC<{
106
108
  if (finished && !isVisible) {
107
109
  runOnJS(setIsRendered)(false);
108
110
  }
109
- }
111
+ },
110
112
  );
111
- }, [isVisible, animationConfig]);
113
+ }, [isVisible, animationConfig, opacity]);
112
114
 
113
115
  useEffect(() => {
114
- const backHandler = BackHandler.addEventListener("hardwareBackPress", () => {
115
- if (isVisible && closeOnBackButton) {
116
- onClose();
117
- return true;
118
- }
119
- return false;
120
- });
116
+ const backHandler = BackHandler.addEventListener(
117
+ "hardwareBackPress",
118
+ () => {
119
+ if (isVisible && closeOnBackButton) {
120
+ onClose();
121
+ return true;
122
+ }
123
+ return false;
124
+ },
125
+ );
121
126
  return () => backHandler.remove();
122
127
  }, [isVisible, closeOnBackButton, onClose]);
123
128
 
@@ -126,16 +131,15 @@ const DefaultModalUI: React.FC<{
126
131
  }));
127
132
 
128
133
  const contentAnimatedStyle = useAnimatedStyle(() => {
129
- // Simple slide/fade effect based on position
130
134
  let transform = [];
131
- if (position === "bottom") {
135
+ if (animateFrom === "bottom") {
132
136
  transform.push({ translateY: (1 - opacity.value) * 100 });
133
- } else if (position === "top") {
137
+ } else if (animateFrom === "top") {
134
138
  transform.push({ translateY: (1 - opacity.value) * -100 });
135
139
  } else {
136
140
  transform.push({ scale: 0.9 + opacity.value * 0.1 });
137
141
  }
138
-
142
+
139
143
  return {
140
144
  opacity: opacity.value,
141
145
  transform,
@@ -145,7 +149,11 @@ const DefaultModalUI: React.FC<{
145
149
  if (!isRendered) return null;
146
150
 
147
151
  const justifyContent =
148
- position === "bottom" ? "flex-end" : position === "top" ? "flex-start" : "center";
152
+ position === "bottom"
153
+ ? "flex-end"
154
+ : position === "top"
155
+ ? "flex-start"
156
+ : "center";
149
157
 
150
158
  const paddingBottom = position === "bottom" ? insets.bottom : 0;
151
159
  const paddingTop = position === "top" ? insets.top : 0;
@@ -153,9 +161,22 @@ const DefaultModalUI: React.FC<{
153
161
  const ContentWrapper = avoidKeyboard ? KeyboardAvoidingView : View;
154
162
 
155
163
  return (
156
- <View style={[StyleSheet.absoluteFill, styles.overlayWrapper, { justifyContent }]}>
164
+ <View
165
+ style={[
166
+ StyleSheet.absoluteFill,
167
+ styles.overlayWrapper,
168
+ { justifyContent },
169
+ ]}
170
+ >
157
171
  {/* Backdrop */}
158
- <Animated.View style={[StyleSheet.absoluteFill, styles.backdrop, backdropStyle, backdropAnimatedStyle]}>
172
+ <Animated.View
173
+ style={[
174
+ StyleSheet.absoluteFill,
175
+ styles.backdrop,
176
+ backdropStyle,
177
+ backdropAnimatedStyle,
178
+ ]}
179
+ >
159
180
  <TouchableOpacity
160
181
  style={StyleSheet.absoluteFill}
161
182
  activeOpacity={1}
@@ -166,15 +187,15 @@ const DefaultModalUI: React.FC<{
166
187
  {/* Content */}
167
188
  <ContentWrapper
168
189
  behavior={"padding"}
169
- style={[styles.keyboardView, { paddingBottom, paddingTop }]}
190
+ keyboardVerticalOffset={16}
191
+ style={[
192
+ styles.keyboardView,
193
+ { paddingBottom, paddingTop, justifyContent },
194
+ ]}
170
195
  pointerEvents="box-none"
171
196
  >
172
197
  <Animated.View
173
- style={[
174
- styles.baseContainer,
175
- containerStyle,
176
- contentAnimatedStyle,
177
- ]}
198
+ style={[styles.baseContainer, containerStyle, contentAnimatedStyle]}
178
199
  >
179
200
  {children}
180
201
  </Animated.View>
@@ -184,7 +205,6 @@ const DefaultModalUI: React.FC<{
184
205
  };
185
206
 
186
207
  // --- Provider ---
187
-
188
208
  export const UniversalModalProvider: React.FC<ModalProviderProps> = ({
189
209
  children,
190
210
  defaultOptions = {},
@@ -209,32 +229,29 @@ export const UniversalModalProvider: React.FC<ModalProviderProps> = ({
209
229
  options: { ...defaultOptions, ...options },
210
230
  });
211
231
  },
212
- [defaultOptions]
232
+ [defaultOptions],
213
233
  );
214
234
 
215
235
  const hideModal = useCallback(() => {
216
236
  setState((prev) => ({ ...prev, isVisible: false }));
217
237
  // Clear content after animation normally finishes to avoid flicker
218
238
  setTimeout(() => {
219
- setState((prev) => {
220
- // Only clear if still hidden (prevent race condition if immediately reshown)
221
- return !prev.isVisible ? { ...prev, content: null } : prev
222
- });
223
- }, 350);
239
+ setState((prev) => {
240
+ // Only clear if still hidden (prevent race condition if immediately reshown)
241
+ return !prev.isVisible ? { ...prev, content: null } : prev;
242
+ });
243
+ }, 350);
224
244
  }, []);
225
245
 
226
246
  const ModalUI = CustomModalComponent || DefaultModalUI;
227
247
 
228
248
  const value = useMemo(
229
249
  () => ({ showModal, hideModal, isVisible: state.isVisible }),
230
- [showModal, hideModal, state.isVisible]
250
+ [showModal, hideModal, state.isVisible],
231
251
  );
232
252
 
233
253
  return (
234
254
  <ModalContext.Provider value={value}>
235
- {/* Ensure PortalProvider exists if not wrapped at root */}
236
- {/* Note: If you already have PortalProvider at root, this nested one might not be strictly necessary depending on usage,
237
- but wrapping the host ensures the modal renders here. */}
238
255
  <PortalProvider>
239
256
  {children}
240
257
  <PortalHost name={portalHostName} />
@@ -252,8 +269,6 @@ export const UniversalModalProvider: React.FC<ModalProviderProps> = ({
252
269
  );
253
270
  };
254
271
 
255
- // --- Hook ---
256
-
257
272
  export const useModal = () => {
258
273
  const context = useContext(ModalContext);
259
274
  if (!context) {
@@ -262,8 +277,6 @@ export const useModal = () => {
262
277
  return context;
263
278
  };
264
279
 
265
- // --- Default Styles ---
266
-
267
280
  const styles = StyleSheet.create({
268
281
  overlayWrapper: {
269
282
  zIndex: 1000,
@@ -273,21 +286,10 @@ const styles = StyleSheet.create({
273
286
  backgroundColor: "rgba(0, 0, 0, 0.6)",
274
287
  },
275
288
  keyboardView: {
276
- flexGrow: 1,
277
289
  justifyContent: "center",
278
290
  alignItems: "center",
279
291
  },
280
292
  baseContainer: {
281
- // backgroundColor: "white", // Default, allows override
282
- // borderRadius: 16,
283
- // padding: 20,
284
293
  width: "90%",
285
- // maxWidth: 500,
286
- // alignItems: "center",
287
- // shadowColor: "#000",
288
- // shadowOffset: { width: 0, height: 2 },
289
- // shadowOpacity: 0.25,
290
- // shadowRadius: 3.84,
291
- // elevation: 5,
292
294
  },
293
295
  });