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 +1 -1
- package/dist/Modal.js +22 -12
- package/dist/Modal.js.map +1 -1
- package/dist/NumberField.js +8 -2
- package/dist/NumberField.js.map +1 -1
- package/package.json +1 -1
- package/src/Modal.tsx +31 -17
- package/src/NumberField.tsx +8 -2
package/dist/Modal.d.ts
CHANGED
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 {
|
|
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: {
|
|
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
|
|
79
|
-
if (
|
|
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,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACnD,OAAO,EAAC,UAAU,EAAkB,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAC3F,OAAO,WAA6B,MAAM,4BAA4B,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
|
package/dist/NumberField.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/NumberField.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../src/NumberField.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
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
|
-
|
|
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
|
|
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
|
|
205
|
-
if (
|
|
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
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
270
|
+
</GestureDetector>
|
|
271
|
+
|
|
272
|
+
<ModalContent {...modalContentProps}>{children}</ModalContent>
|
|
273
|
+
</View>
|
|
260
274
|
</ActionSheet>
|
|
261
275
|
);
|
|
262
276
|
} else {
|
package/src/NumberField.tsx
CHANGED
|
@@ -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
|
-
|
|
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} />;
|