ferns-ui 1.14.0 → 1.16.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.
package/dist/Accordion.js CHANGED
@@ -5,7 +5,7 @@ import { Heading } from "./Heading";
5
5
  import { InfoModalIcon } from "./InfoModalIcon";
6
6
  import { Text } from "./Text";
7
7
  import { useTheme } from "./Theme";
8
- export const Accordion = ({ children, isCollapsed = false, title, subtitle, includeInfoModal = false, infoModalChildren, infoModalSubtitle, infoModalText, infoModalTitle, }) => {
8
+ export const Accordion = ({ children, isCollapsed = false, title, subtitle, includeInfoModal = false, infoModalChildren, infoModalSubtitle, infoModalText, infoModalTitle, onToggle, }) => {
9
9
  const { theme } = useTheme();
10
10
  const [collapsed, setCollapsed] = useState(false);
11
11
  // The external collapse state should override the internal collapse state.
@@ -27,7 +27,12 @@ export const Accordion = ({ children, isCollapsed = false, title, subtitle, incl
27
27
  includeInfoModal && infoModalTitle && (React.createElement(InfoModalIcon, { infoModalChildren: infoModalChildren, infoModalSubtitle: infoModalSubtitle, infoModalText: infoModalText, infoModalTitle: infoModalTitle }))),
28
28
  subtitle && React.createElement(Text, null, subtitle)),
29
29
  React.createElement(View, null,
30
- React.createElement(Pressable, { "aria-role": "button", hitSlop: { top: 20, bottom: 20, left: 20, right: 20 }, testID: "accordion-toggle", onPress: () => setCollapsed(!collapsed) },
30
+ React.createElement(Pressable, { "aria-role": "button", hitSlop: { top: 20, bottom: 20, left: 20, right: 20 }, testID: "accordion-toggle", onPress: () => {
31
+ setCollapsed(!collapsed);
32
+ if (onToggle) {
33
+ onToggle(!collapsed);
34
+ }
35
+ } },
31
36
  React.createElement(FontAwesome6, { color: theme.text.link, name: collapsed ? "chevron-down" : "chevron-up", selectable: undefined, size: 16 })))),
32
37
  collapsed ? null : React.createElement(View, { style: { marginTop: 8 } }, children)));
33
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAC5C,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,KAAK,EACL,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,EAAE,EAAE;IACH,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,oBAAC,IAAI,IACH,KAAK,EAAE;YACL,OAAO,EAAE,EAAE;YACX,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YACvC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YACpC,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,CAAC;YACpB,KAAK,EAAE,MAAM;SACd;QAED,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAC;YACxF,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAC;gBAC5C,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAC;oBACvD,oBAAC,OAAO,QAAE,KAAK,CAAW;oBACzB,gBAAgB,IAAI,cAAc,IAAI,CACrC,oBAAC,aAAa,IACZ,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,GAC9B,CACH,CACI;gBACN,QAAQ,IAAI,oBAAC,IAAI,QAAE,QAAQ,CAAQ,CAC/B;YACP,oBAAC,IAAI;gBACH,oBAAC,SAAS,iBACE,QAAQ,EAClB,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,EACnD,MAAM,EAAC,kBAAkB,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;oBAEvC,oBAAC,YAAY,IACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EACtB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAC/C,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,EAAE,GACR,CACQ,CACP,CACF;QACN,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,SAAS,EAAE,CAAC,EAAC,IAAG,QAAQ,CAAQ,CAC7D,CACR,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.tsx"],"names":[],"mappings":"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"}
package/dist/Common.d.ts CHANGED
@@ -45,6 +45,10 @@ export interface AccordionProps extends InfoModalIconProps {
45
45
  * The title of the accordion.
46
46
  */
47
47
  title: string;
48
+ /**
49
+ * * Callback fired when the accordion is toggled.
50
+ * */
51
+ onToggle?: (isCollapse: boolean) => void;
48
52
  }
49
53
  export interface BaseProfile {
50
54
  email: string;
@@ -316,11 +320,11 @@ export type TextFieldType = "date" | "datetime" | "decimal" | "decimalRange" | "
316
320
  export type IconSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
317
321
  export declare const iconSizeToNumber: (size?: IconSize) => number;
318
322
  export type TextSize = "sm" | "md" | "lg" | "xl" | "2xl";
319
- export type ValueMappingItem = {
323
+ export interface ValueMappingItem {
320
324
  value: number;
321
325
  label: string;
322
326
  size?: IconSize;
323
- };
327
+ }
324
328
  export type IconPrefix = "far" | "fas";
325
329
  export interface LayerProps {
326
330
  children: ReactChildren;
@@ -1 +1 @@
1
- {"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AA+WA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,KAAK,EAAE,EAAE;KACV,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AA+RF,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AAoXA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,KAAK,EAAE,EAAE;KACV,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AA+RF,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
@@ -14,7 +14,10 @@ import { TextField } from "./TextField";
14
14
  export const EmailField = (_a) => {
15
15
  var { errorText, iconName, placeholder, value, onChange, onBlur } = _a, rest = __rest(_a, ["errorText", "iconName", "placeholder", "value", "onChange", "onBlur"]);
16
16
  const [localValue, setLocalValue] = useState(value || "");
17
- const [error, setError] = useState(errorText);
17
+ // Sync local state with incoming prop values
18
+ useEffect(() => {
19
+ setLocalValue(value || "");
20
+ }, [value]);
18
21
  const validateEmail = useCallback((email) => {
19
22
  if (email.trim() === "") {
20
23
  return undefined;
@@ -25,43 +28,20 @@ export const EmailField = (_a) => {
25
28
  }
26
29
  return undefined;
27
30
  }, []);
28
- // Sync local state with incoming prop values
29
- useEffect(() => {
30
- setLocalValue(value || "");
31
- setError(errorText);
32
- }, [value, errorText]);
33
- const handleBlur = useCallback((email) => {
34
- if (onBlur) {
35
- onBlur(email);
36
- }
37
- const validationError = validateEmail(email);
38
- if (validationError) {
39
- setError(validationError);
40
- }
41
- else {
42
- setError(undefined);
31
+ const localOnChange = useCallback((e) => {
32
+ setLocalValue(e);
33
+ const err = validateEmail(e);
34
+ if (!err && onChange) {
35
+ onChange(e);
36
+ }
37
+ }, [onChange, validateEmail, setLocalValue]);
38
+ const localOnBlur = useCallback((e) => {
39
+ setLocalValue(e);
40
+ const err = validateEmail(e);
41
+ if (!err && onBlur) {
42
+ onBlur(e);
43
43
  }
44
44
  }, [onBlur, validateEmail]);
45
- const handleChange = useCallback((email) => {
46
- setLocalValue(email);
47
- const validationError = validateEmail(email);
48
- if (error && !validationError) {
49
- setError(undefined);
50
- }
51
- if (!validationError) {
52
- onChange(email);
53
- }
54
- }, [onChange, error, validateEmail]);
55
- return (React.createElement(TextField, Object.assign({ errorText: error, iconName: iconName, placeholder: placeholder, type: "email", value: localValue, onBlur: (e) => {
56
- handleBlur(e);
57
- if (onBlur) {
58
- onBlur(value || "");
59
- }
60
- }, onChange: (e) => {
61
- handleChange(e);
62
- if (onChange) {
63
- onChange;
64
- }
65
- } }, rest)));
45
+ return (React.createElement(TextField, Object.assign({ errorText: errorText || validateEmail(localValue), iconName: iconName, placeholder: placeholder, type: "email", value: localValue, onBlur: localOnBlur, onChange: localOnChange }, rest)));
66
46
  };
67
47
  //# sourceMappingURL=EmailField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailField.js","sourceRoot":"","sources":["../src/EmailField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EmailField.js","sourceRoot":"","sources":["../src/EmailField.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,UAAU,GAAwB,CAAC,EAQ/C,EAAE,EAAE;QAR2C,EAC9C,SAAS,EACT,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,OAEP,EADI,IAAI,cAPuC,uEAQ/C,CADQ;IAEP,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAS,KAAK,IAAI,EAAE,CAAC,CAAC;IAElE,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,EAAsB,EAAE;QACtE,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,8BAA8B,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAS,EAAE,EAAE;QACZ,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAS,EAAE,EAAE;QACZ,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,CAAC,CACxB,CAAC;IACF,OAAO,CACL,oBAAC,SAAS,kBACR,SAAS,EAAE,SAAS,IAAI,aAAa,CAAC,UAAU,CAAC,EACjD,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,IACnB,IAAI,EACR,CACH,CAAC;AACJ,CAAC,CAAC"}
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":"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,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,yBAAyB,CAAC;AAEhD,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAErC,MAAM,YAAY,GAAG,CAAC,IAAwB,EAAkB,EAAE;IAChE,MAAM,OAAO,GAAG;QACd,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,GAAG;KACR,CAAC;IACF,IAAI,MAAM,GAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;IACzD,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAcb,CAAC,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,MAAM,EACN,KAAK,EACL,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,oBAAC,IAAI,IACH,KAAK,kBACH,OAAO,EAAE,EAAE,EACX,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,QAAQ,EACnB,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EACnC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,IACd,CAAC,QAAQ;YACV,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,iCAAiC;gBAC5C,SAAS,EAAE,EAAE;aACd,CAAC;QAGR,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAC;YACxD,oBAAC,SAAS,IACR,iBAAiB,EAAC,kBAAkB,gBACzB,aAAa,eACd,QAAQ,EAClB,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC;oBACP,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,QAAQ;oBACpB,QAAQ,EAAE,UAAU;oBACpB,GAAG,EAAE,CAAC,CAAC;oBACP,MAAM,EAAE,CAAC,CAAC;oBACV,IAAI,EAAE,CAAC,CAAC;oBACR,KAAK,EAAE,CAAC,CAAC;iBACV,EACD,OAAO,EAAE,SAAS;gBAElB,oBAAC,IAAI,IAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,GAAG,CACrB,CACP;QACN,KAAK,IAAI,CACR,oBAAC,IAAI,IACH,iBAAiB,EAAC,aAAa,gBACnB,KAAK,eACP,QAAQ,EAClB,KAAK,EAAE,EAAC,SAAS,EAAE,YAAY,EAAC;YAEhC,oBAAC,OAAO,IAAC,IAAI,EAAC,IAAI,IAAE,KAAK,CAAW,CAC/B,CACR;QACA,QAAQ,IAAI,CACX,oBAAC,IAAI,IACH,iBAAiB,EAAC,wBAAwB,gBAC9B,QAAQ,eACV,MAAM,EAChB,KAAK,EAAE,EAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC;YAE7D,oBAAC,IAAI,IAAC,IAAI,EAAC,IAAI,IAAE,QAAQ,CAAQ,CAC5B,CACR;QACA,IAAI,IAAI,CACP,oBAAC,IAAI,IACH,iBAAiB,EAAC,iBAAiB,gBACvB,IAAI,eACN,MAAM,EAChB,KAAK,EAAE,EAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAC;YAE/D,oBAAC,IAAI,QAAE,IAAI,CAAQ,CACd,CACR;QACA,QAAQ,IAAI,CACX,oBAAC,IAAI,IACH,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxB,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC/B,IAEA,QAAQ,CACJ,CACR;QACD,oBAAC,IAAI,IACH,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACtC,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,UAAU;aACtB;YAEA,OAAO,CAAC,mBAAmB,IAAI,sBAAsB,CAAC,IAAI,CACzD,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC;gBACpD,oBAAC,MAAM,IACL,IAAI,EAAE,mBAA6B,EACnC,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,sBAAuB,GAChC,CACG,CACR;YACA,OAAO,CAAC,iBAAiB,IAAI,oBAAoB,CAAC,IAAI,CACrD,oBAAC,MAAM,IACL,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,EAAE,iBAA2B,EACjC,OAAO,EAAE,oBAAqB,GAC9B,CACH,CACI,CACF,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAmB,CAAC,EACpC,QAAQ,EACR,wBAAwB,GAAG,KAAK,EAChC,qBAAqB,GAAG,KAAK,EAC7B,iBAAiB,EACjB,mBAAmB,EACnB,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,oBAAoB,EACpB,sBAAsB,GACX,EAAE,EAAE;IACf,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE3B,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;YACzB,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,CAC/B,KAAsE,EACtE,EAAE;QACF,IAAI,OAAO,IAAI,oBAAoB,EAAE,CAAC;YACpC,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,0BAA0B,GAAG,CACjC,KAAwE,EACxE,EAAE;QACF,IAAI,OAAO,IAAI,sBAAsB,EAAE,CAAC;YACtC,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;YAC5B,8GAA8G;YAC9G,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2DAA2D;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,QAAQ,GAAG,cAAc,EAAE,IAAI,QAAQ,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,iBAAiB,GAAG;QACxB,wBAAwB;QACxB,KAAK;QACL,QAAQ;QACR,IAAI;QACJ,iBAAiB;QACjB,qBAAqB;QACrB,mBAAmB;QACnB,oBAAoB,EAAE,wBAAwB;QAC9C,sBAAsB,EAAE,0BAA0B;QAClD,SAAS,EAAE,aAAa;QACxB,MAAM;QACN,KAAK;QACL,QAAQ;KACT,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,oBAAC,WAAW,IACV,GAAG,EAAE,cAAc,EACnB,oBAAoB,EAAE,CAAC,wBAAwB;YAC/C,4EAA4E;YAC5E,cAAc,EAAE,KAAK,EACrB,OAAO,EAAE,aAAa;YAEtB,oBAAC,IAAI;gBAEH,oBAAC,eAAe,IAAC,OAAO,EAAE,WAAW;oBACnC,oBAAC,IAAI,IACH,iBAAiB,EAAC,8BAA8B,gBACrC,eAAe,eAChB,YAAY;wBACtB,6DAA6D;wBAC7D,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,EACnD,KAAK,EAAE;4BACL,cAAc,EAAE,QAAQ;4BACxB,UAAU,EAAE,QAAQ;4BACpB,SAAS,EAAE,QAAQ;4BACnB,OAAO,EAAE,CAAC;4BACV,eAAe,EAAE,SAAS;4BAC1B,YAAY,EAAE,CAAC;4BACf,KAAK,EAAE,KAAK;4BACZ,MAAM,EAAE,CAAC;4BACT,SAAS,EAAE,EAAE;yBACd,GACD,CACc;gBAElB,oBAAC,YAAY,oBAAK,iBAAiB,GAAG,QAAQ,CAAgB,CACzD,CACK,CACf,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,oBAAC,OAAO,IAAC,aAAa,EAAC,OAAO,EAAC,WAAW,QAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa;YACxF,oBAAC,SAAS,IACR,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC;oBACP,eAAe,EAAE,oBAAoB;oBACrC,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,QAAQ;iBACrB,EACD,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;gBAE7D,oBAAC,SAAS,IACR,KAAK,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,EACvB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;oBACxD,CAAC;oBAED,oBAAC,YAAY,oBAAK,iBAAiB,GAAG,QAAQ,CAAgB,CACpD,CACF,CACJ,CACX,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -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.16.1",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
package/src/Accordion.tsx CHANGED
@@ -18,6 +18,7 @@ export const Accordion: FC<AccordionProps> = ({
18
18
  infoModalSubtitle,
19
19
  infoModalText,
20
20
  infoModalTitle,
21
+ onToggle,
21
22
  }) => {
22
23
  const {theme} = useTheme();
23
24
  const [collapsed, setCollapsed] = useState(false);
@@ -58,7 +59,12 @@ export const Accordion: FC<AccordionProps> = ({
58
59
  aria-role="button"
59
60
  hitSlop={{top: 20, bottom: 20, left: 20, right: 20}}
60
61
  testID="accordion-toggle"
61
- onPress={() => setCollapsed(!collapsed)}
62
+ onPress={() => {
63
+ setCollapsed(!collapsed);
64
+ if (onToggle) {
65
+ onToggle(!collapsed);
66
+ }
67
+ }}
62
68
  >
63
69
  <FontAwesome6
64
70
  color={theme.text.link}
package/src/Common.ts CHANGED
@@ -64,6 +64,11 @@ export interface AccordionProps extends InfoModalIconProps {
64
64
  * The title of the accordion.
65
65
  */
66
66
  title: string;
67
+
68
+ /**
69
+ * * Callback fired when the accordion is toggled.
70
+ * */
71
+ onToggle?: (isCollapse: boolean) => void;
67
72
  }
68
73
 
69
74
  export interface BaseProfile {
@@ -420,11 +425,11 @@ export const iconSizeToNumber = (size?: IconSize) => {
420
425
 
421
426
  export type TextSize = "sm" | "md" | "lg" | "xl" | "2xl";
422
427
 
423
- export type ValueMappingItem = {
428
+ export interface ValueMappingItem {
424
429
  value: number;
425
430
  label: string;
426
431
  size?: IconSize;
427
- };
432
+ }
428
433
 
429
434
  export type IconPrefix = "far" | "fas";
430
435
 
@@ -13,7 +13,11 @@ export const EmailField: FC<EmailFieldProps> = ({
13
13
  ...rest
14
14
  }) => {
15
15
  const [localValue, setLocalValue] = useState<string>(value || "");
16
- const [error, setError] = useState<string | undefined>(errorText);
16
+
17
+ // Sync local state with incoming prop values
18
+ useEffect(() => {
19
+ setLocalValue(value || "");
20
+ }, [value]);
17
21
 
18
22
  const validateEmail = useCallback((email: string): string | undefined => {
19
23
  if (email.trim() === "") {
@@ -26,60 +30,36 @@ export const EmailField: FC<EmailFieldProps> = ({
26
30
  return undefined;
27
31
  }, []);
28
32
 
29
- // Sync local state with incoming prop values
30
- useEffect(() => {
31
- setLocalValue(value || "");
32
- setError(errorText);
33
- }, [value, errorText]);
34
-
35
- const handleBlur = useCallback(
36
- (email: string) => {
37
- if (onBlur) {
38
- onBlur(email);
39
- }
40
- const validationError = validateEmail(email);
41
- if (validationError) {
42
- setError(validationError);
43
- } else {
44
- setError(undefined);
33
+ const localOnChange = useCallback(
34
+ (e: string) => {
35
+ setLocalValue(e);
36
+ const err = validateEmail(e);
37
+ if (!err && onChange) {
38
+ onChange(e);
45
39
  }
46
40
  },
47
- [onBlur, validateEmail]
41
+ [onChange, validateEmail, setLocalValue]
48
42
  );
49
43
 
50
- const handleChange = useCallback(
51
- (email: string) => {
52
- setLocalValue(email);
53
- const validationError = validateEmail(email);
54
- if (error && !validationError) {
55
- setError(undefined);
56
- }
57
- if (!validationError) {
58
- onChange(email);
44
+ const localOnBlur = useCallback(
45
+ (e: string) => {
46
+ setLocalValue(e);
47
+ const err = validateEmail(e);
48
+ if (!err && onBlur) {
49
+ onBlur(e);
59
50
  }
60
51
  },
61
- [onChange, error, validateEmail]
52
+ [onBlur, validateEmail]
62
53
  );
63
-
64
54
  return (
65
55
  <TextField
66
- errorText={error}
56
+ errorText={errorText || validateEmail(localValue)}
67
57
  iconName={iconName}
68
58
  placeholder={placeholder}
69
59
  type="email"
70
60
  value={localValue}
71
- onBlur={(e) => {
72
- handleBlur(e);
73
- if (onBlur) {
74
- onBlur(value || "");
75
- }
76
- }}
77
- onChange={(e) => {
78
- handleChange(e);
79
- if (onChange) {
80
- onChange;
81
- }
82
- }}
61
+ onBlur={localOnBlur}
62
+ onChange={localOnChange}
83
63
  {...rest}
84
64
  />
85
65
  );
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} />;