ferns-ui 1.14.0 → 1.15.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.
package/dist/Modal.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { FC } from "react";
2
- import { ModalProps } from "./Common";
2
+ import type { ModalProps } from "./Common";
3
3
  export declare const Modal: FC<ModalProps>;
package/dist/Modal.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import React, { useEffect, useRef } from "react";
2
2
  import { Dimensions, Pressable, Modal as RNModal, View } from "react-native";
3
3
  import ActionSheet from "react-native-actions-sheet";
4
- import { PanGestureHandler, State, } from "react-native-gesture-handler";
4
+ import { Gesture, GestureDetector } from "react-native-gesture-handler";
5
+ import { runOnJS } from "react-native-reanimated";
5
6
  import { Button } from "./Button";
6
7
  import { Heading } from "./Heading";
7
8
  import { Icon } from "./Icon";
@@ -47,7 +48,11 @@ const ModalContent = ({ children, title, subtitle, text, primaryButtonText, prim
47
48
  React.createElement(Text, { size: "lg" }, subtitle))),
48
49
  text && (React.createElement(View, { accessibilityHint: "Modal body text", "aria-label": text, "aria-role": "text", style: { marginVertical: text ? 12 : 0, alignSelf: "flex-start" } },
49
50
  React.createElement(Text, null, text))),
50
- children && (React.createElement(View, { style: { marginTop: text ? 0 : 12, width: "100%", flex: isMobile ? undefined : 1 } }, children)),
51
+ children && (React.createElement(View, { style: {
52
+ marginTop: text ? 0 : 12,
53
+ width: "100%",
54
+ flex: isMobile ? undefined : 1,
55
+ } }, children)),
51
56
  React.createElement(View, { style: {
52
57
  marginTop: text && !children ? 20 : 32,
53
58
  flexDirection: "row",
@@ -75,11 +80,12 @@ export const Modal = ({ children, persistOnBackgroundClick = false, primaryButto
75
80
  return secondaryButtonOnClick(value);
76
81
  }
77
82
  };
78
- const onHandlerStateChange = ({ nativeEvent }) => {
79
- if (nativeEvent.state === State.END && nativeEvent.translationY > 100) {
80
- handleDismiss();
83
+ const dragToClose = Gesture.Pan().onEnd((event) => {
84
+ if (event.translationY > 20) {
85
+ // Gesture callbacks run on the UI thread, runOnJS is required to safely invoke handleDismiss on the JS thread
86
+ runOnJS(handleDismiss)();
81
87
  }
82
- };
88
+ });
83
89
  // Open the action sheet ref when the visible prop changes.
84
90
  useEffect(() => {
85
91
  if (actionSheetRef.current) {
@@ -104,10 +110,14 @@ export const Modal = ({ children, persistOnBackgroundClick = false, primaryButto
104
110
  isMobile,
105
111
  };
106
112
  if (isMobile) {
107
- return (React.createElement(ActionSheet, { ref: actionSheetRef, onClose: handleDismiss },
108
- React.createElement(PanGestureHandler, { onHandlerStateChange: onHandlerStateChange },
109
- React.createElement(View, null,
110
- React.createElement(View, { accessibilityHint: "Pull down to close the modal", "aria-label": "Pull down bar", "aria-role": "adjustable", style: {
113
+ return (React.createElement(ActionSheet, { ref: actionSheetRef, closeOnTouchBackdrop: !persistOnBackgroundClick,
114
+ // Disable ActionSheet's built-in gestures to avoid conflicts with scrolling
115
+ gestureEnabled: false, onClose: handleDismiss },
116
+ React.createElement(View, null,
117
+ React.createElement(GestureDetector, { gesture: dragToClose },
118
+ React.createElement(View, { accessibilityHint: "Pull down to close the modal", "aria-label": "Pull down bar", "aria-role": "adjustable",
119
+ // add hitSlop to make the bar easier to hit since it's small
120
+ hitSlop: { top: 20, bottom: 20, left: 50, right: 50 }, style: {
111
121
  justifyContent: "center",
112
122
  alignItems: "center",
113
123
  alignSelf: "center",
@@ -117,8 +127,8 @@ export const Modal = ({ children, persistOnBackgroundClick = false, primaryButto
117
127
  width: "30%",
118
128
  height: 3,
119
129
  marginTop: 10,
120
- } }),
121
- React.createElement(ModalContent, Object.assign({}, modalContentProps), children)))));
130
+ } })),
131
+ React.createElement(ModalContent, Object.assign({}, modalContentProps), children))));
122
132
  }
123
133
  else {
124
134
  return (React.createElement(RNModal, { animationType: "slide", transparent: true, visible: visible, onRequestClose: handleDismiss },
package/dist/Modal.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
@@ -42,12 +42,18 @@ export const NumberField = (_a) => {
42
42
  const error = errorText || getError(value);
43
43
  // Only return the value if it is a valid number
44
44
  const localOnChange = useCallback((v) => {
45
- setValue(v);
45
+ if (type === "decimal" && v === ".") {
46
+ // if type is decimal and dot is the first character add 0 before it
47
+ setValue("0.");
48
+ rest.onChange("0.");
49
+ return;
50
+ }
46
51
  const err = getError(v);
47
52
  if (!err) {
53
+ setValue(v);
48
54
  rest.onChange(v);
49
55
  }
50
- }, [getError, rest]);
56
+ }, [getError, rest, type]);
51
57
  return React.createElement(TextField, Object.assign({}, rest, { errorText: error, value: value, onChange: localOnChange }));
52
58
  };
53
59
  //# sourceMappingURL=NumberField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../src/NumberField.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAK,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAGlE,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAyB,CAAC,EAO/B,EAAE,EAAE;QAP2B,EAChD,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,GAAG,EACH,GAAG,EACH,IAAI,OAEa,EADd,IAAI,cANyC,4CAOjD,CADQ;IAEP,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,CAAC;IAEpD,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAAa,EAAE,EAAE;QAChB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3E,OAAO,0BAA0B,CAAC;QACpC,CAAC;aAAM,IACL,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;YACpD,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EACjC,CAAC;YACD,OAAO,yBAAyB,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YAC1C,OAAO,uCAAuC,GAAG,EAAE,CAAC;QACtD,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YAC1C,OAAO,0CAA0C,GAAG,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CACjB,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE3C,gDAAgD;IAChD,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAS,EAAE,EAAE;QACZ,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,IAAI,CAAC,CACjB,CAAC;IAEF,OAAO,oBAAC,SAAS,oBAAK,IAAI,IAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC;AAC1F,CAAC,CAAC"}
1
+ {"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../src/NumberField.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ferns-ui",
3
- "version": "1.14.0",
3
+ "version": "1.15.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
package/src/Modal.tsx CHANGED
@@ -1,14 +1,11 @@
1
1
  import React, {FC, useEffect, useRef} from "react";
2
2
  import {Dimensions, DimensionValue, Pressable, Modal as RNModal, View} from "react-native";
3
3
  import ActionSheet, {ActionSheetRef} from "react-native-actions-sheet";
4
- import {
5
- PanGestureHandler,
6
- PanGestureHandlerStateChangeEvent,
7
- State,
8
- } from "react-native-gesture-handler";
4
+ import {Gesture, GestureDetector} from "react-native-gesture-handler";
5
+ import {runOnJS} from "react-native-reanimated";
9
6
 
10
7
  import {Button} from "./Button";
11
- import {ModalProps} from "./Common";
8
+ import type {ModalProps} from "./Common";
12
9
  import {Heading} from "./Heading";
13
10
  import {Icon} from "./Icon";
14
11
  import {isMobileDevice} from "./MediaQuery";
@@ -129,7 +126,13 @@ const ModalContent: FC<{
129
126
  </View>
130
127
  )}
131
128
  {children && (
132
- <View style={{marginTop: text ? 0 : 12, width: "100%", flex: isMobile ? undefined : 1}}>
129
+ <View
130
+ style={{
131
+ marginTop: text ? 0 : 12,
132
+ width: "100%",
133
+ flex: isMobile ? undefined : 1,
134
+ }}
135
+ >
133
136
  {children}
134
137
  </View>
135
138
  )}
@@ -201,11 +204,12 @@ export const Modal: FC<ModalProps> = ({
201
204
  }
202
205
  };
203
206
 
204
- const onHandlerStateChange = ({nativeEvent}: PanGestureHandlerStateChangeEvent) => {
205
- if (nativeEvent.state === State.END && nativeEvent.translationY > 100) {
206
- handleDismiss();
207
+ const dragToClose = Gesture.Pan().onEnd((event) => {
208
+ if (event.translationY > 20) {
209
+ // Gesture callbacks run on the UI thread, runOnJS is required to safely invoke handleDismiss on the JS thread
210
+ runOnJS(handleDismiss)();
207
211
  }
208
- };
212
+ });
209
213
 
210
214
  // Open the action sheet ref when the visible prop changes.
211
215
  useEffect(() => {
@@ -235,13 +239,22 @@ export const Modal: FC<ModalProps> = ({
235
239
 
236
240
  if (isMobile) {
237
241
  return (
238
- <ActionSheet ref={actionSheetRef} onClose={handleDismiss}>
239
- <PanGestureHandler onHandlerStateChange={onHandlerStateChange}>
240
- <View>
242
+ <ActionSheet
243
+ ref={actionSheetRef}
244
+ closeOnTouchBackdrop={!persistOnBackgroundClick}
245
+ // Disable ActionSheet's built-in gestures to avoid conflicts with scrolling
246
+ gestureEnabled={false}
247
+ onClose={handleDismiss}
248
+ >
249
+ <View>
250
+ {/* Attach our own swipe-to-dismiss gesture to the top handle */}
251
+ <GestureDetector gesture={dragToClose}>
241
252
  <View
242
253
  accessibilityHint="Pull down to close the modal"
243
254
  aria-label="Pull down bar"
244
255
  aria-role="adjustable"
256
+ // add hitSlop to make the bar easier to hit since it's small
257
+ hitSlop={{top: 20, bottom: 20, left: 50, right: 50}}
245
258
  style={{
246
259
  justifyContent: "center",
247
260
  alignItems: "center",
@@ -254,9 +267,10 @@ export const Modal: FC<ModalProps> = ({
254
267
  marginTop: 10,
255
268
  }}
256
269
  />
257
- <ModalContent {...modalContentProps}>{children}</ModalContent>
258
- </View>
259
- </PanGestureHandler>
270
+ </GestureDetector>
271
+
272
+ <ModalContent {...modalContentProps}>{children}</ModalContent>
273
+ </View>
260
274
  </ActionSheet>
261
275
  );
262
276
  } else {
@@ -47,13 +47,19 @@ export const NumberField: FC<NumberFieldProps> = ({
47
47
  // Only return the value if it is a valid number
48
48
  const localOnChange = useCallback(
49
49
  (v: string) => {
50
- setValue(v);
50
+ if (type === "decimal" && v === ".") {
51
+ // if type is decimal and dot is the first character add 0 before it
52
+ setValue("0.");
53
+ rest.onChange("0.");
54
+ return;
55
+ }
51
56
  const err = getError(v);
52
57
  if (!err) {
58
+ setValue(v);
53
59
  rest.onChange(v);
54
60
  }
55
61
  },
56
- [getError, rest]
62
+ [getError, rest, type]
57
63
  );
58
64
 
59
65
  return <TextField {...rest} errorText={error} value={value} onChange={localOnChange} />;