ferns-ui 0.36.4 → 0.37.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.
Files changed (87) hide show
  1. package/dist/Banner.d.ts +6 -16
  2. package/dist/Banner.js +52 -43
  3. package/dist/Banner.js.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/useStoredState.d.ts +1 -0
  8. package/dist/useStoredState.js +33 -0
  9. package/dist/useStoredState.js.map +1 -0
  10. package/package.json +55 -56
  11. package/src/ActionSheet.tsx +1231 -0
  12. package/src/Avatar.tsx +317 -0
  13. package/src/Badge.tsx +65 -0
  14. package/src/Banner.tsx +149 -0
  15. package/src/BlurBox.native.tsx +40 -0
  16. package/src/BlurBox.tsx +31 -0
  17. package/src/Body.tsx +32 -0
  18. package/src/Box.tsx +308 -0
  19. package/src/Button.tsx +219 -0
  20. package/src/Card.tsx +23 -0
  21. package/src/CheckBox.tsx +118 -0
  22. package/src/Common.ts +2743 -0
  23. package/src/Constants.ts +53 -0
  24. package/src/CustomSelect.tsx +85 -0
  25. package/src/DateTimeActionSheet.tsx +409 -0
  26. package/src/DateTimeField.android.tsx +101 -0
  27. package/src/DateTimeField.ios.tsx +83 -0
  28. package/src/DateTimeField.tsx +69 -0
  29. package/src/DecimalRangeActionSheet.tsx +113 -0
  30. package/src/ErrorBoundary.tsx +37 -0
  31. package/src/ErrorPage.tsx +44 -0
  32. package/src/FernsProvider.tsx +21 -0
  33. package/src/Field.tsx +299 -0
  34. package/src/FieldWithLabels.tsx +36 -0
  35. package/src/FlatList.tsx +2 -0
  36. package/src/Form.tsx +182 -0
  37. package/src/HeaderButtons.tsx +107 -0
  38. package/src/Heading.tsx +53 -0
  39. package/src/HeightActionSheet.tsx +104 -0
  40. package/src/Hyperlink.tsx +181 -0
  41. package/src/Icon.tsx +24 -0
  42. package/src/IconButton.tsx +165 -0
  43. package/src/Image.tsx +50 -0
  44. package/src/ImageBackground.tsx +14 -0
  45. package/src/InfoTooltipButton.tsx +23 -0
  46. package/src/Layer.tsx +17 -0
  47. package/src/Link.tsx +17 -0
  48. package/src/Mask.tsx +21 -0
  49. package/src/MediaQuery.ts +46 -0
  50. package/src/Meta.tsx +9 -0
  51. package/src/Modal.tsx +248 -0
  52. package/src/ModalSheet.tsx +58 -0
  53. package/src/NumberPickerActionSheet.tsx +66 -0
  54. package/src/Page.tsx +133 -0
  55. package/src/Permissions.ts +44 -0
  56. package/src/PickerSelect.tsx +553 -0
  57. package/src/Pill.tsx +24 -0
  58. package/src/Pog.tsx +87 -0
  59. package/src/ProgressBar.tsx +55 -0
  60. package/src/ScrollView.tsx +2 -0
  61. package/src/SegmentedControl.tsx +102 -0
  62. package/src/SelectList.tsx +89 -0
  63. package/src/SideDrawer.tsx +62 -0
  64. package/src/Spinner.tsx +20 -0
  65. package/src/SplitPage.native.tsx +160 -0
  66. package/src/SplitPage.tsx +302 -0
  67. package/src/Switch.tsx +19 -0
  68. package/src/Table.tsx +87 -0
  69. package/src/TableHeader.tsx +36 -0
  70. package/src/TableHeaderCell.tsx +76 -0
  71. package/src/TableRow.tsx +87 -0
  72. package/src/TapToEdit.tsx +221 -0
  73. package/src/Text.tsx +131 -0
  74. package/src/TextArea.tsx +16 -0
  75. package/src/TextField.tsx +401 -0
  76. package/src/TextFieldNumberActionSheet.tsx +61 -0
  77. package/src/Toast.tsx +106 -0
  78. package/src/Tooltip.tsx +269 -0
  79. package/src/UnifiedScreens.ts +24 -0
  80. package/src/Unifier.ts +371 -0
  81. package/src/Utilities.tsx +159 -0
  82. package/src/WithLabel.tsx +57 -0
  83. package/src/dayjsExtended.ts +10 -0
  84. package/src/index.tsx +1347 -0
  85. package/src/polyfill.d.ts +11 -0
  86. package/src/tableContext.tsx +80 -0
  87. package/src/useStoredState.ts +39 -0
package/dist/Banner.d.ts CHANGED
@@ -1,27 +1,17 @@
1
1
  import React from "react";
2
- import { BoxColor, Rounding, TextColor } from "./Common";
2
+ import { BoxColor, IconName, Rounding, TextColor } from "./Common";
3
3
  export interface BannerProps {
4
4
  id: string;
5
+ dismissible?: boolean;
5
6
  text: string;
6
7
  subtext?: string;
8
+ iconName?: IconName;
7
9
  color?: BoxColor;
8
10
  textColor?: TextColor;
9
11
  negativeXMargin?: number;
10
- bold?: boolean;
11
12
  shape?: Rounding;
12
- type?: "dismiss" | "action";
13
+ type?: "dismiss" | "action" | "permanent";
13
14
  onClick?: () => void;
14
15
  }
15
- interface BannerState {
16
- show: boolean;
17
- }
18
- export declare const hideBanner: (id: string) => void;
19
- export declare class Banner extends React.Component<BannerProps, BannerState> {
20
- state: {
21
- show: boolean;
22
- };
23
- componentDidMount(): Promise<void>;
24
- dismiss: () => void;
25
- render(): React.JSX.Element | null;
26
- }
27
- export {};
16
+ export declare const hideBanner: (id: string) => Promise<void>;
17
+ export declare const Banner: ({ id, text, subtext, color, iconName, textColor, negativeXMargin, shape, type, onClick, }: BannerProps) => React.ReactElement | null;
package/dist/Banner.js CHANGED
@@ -1,56 +1,65 @@
1
- import React from "react";
1
+ import React, { useEffect, useState } from "react";
2
2
  import { Box } from "./Box";
3
+ import { Icon } from "./Icon";
3
4
  import { IconButton } from "./IconButton";
4
5
  import { Text } from "./Text";
5
6
  import { Unifier } from "./Unifier";
6
7
  function getKey(id) {
7
- return `@ReactUnifier:${id}`;
8
+ return `@FernsUI:${id}`;
8
9
  }
9
10
  export const hideBanner = (id) => {
10
11
  console.debug(`[banner] Hiding ${getKey(id)} `);
11
- Unifier.storage.setItem(getKey(id), "true");
12
+ return Unifier.storage.setItem(getKey(id), "true");
12
13
  };
13
- export class Banner extends React.Component {
14
- constructor() {
15
- super(...arguments);
16
- this.state = { show: false };
17
- this.dismiss = () => {
18
- hideBanner(this.props.id);
19
- this.setState({ show: false });
20
- };
21
- }
22
- async componentDidMount() {
23
- const seen = await Unifier.storage.getItem(getKey(this.props.id));
24
- console.debug(`[banner] ${getKey(this.props.id)} seen? ${seen}`);
25
- this.setState({ show: !seen });
26
- }
27
- render() {
28
- if (!this.state.show) {
29
- return null;
14
+ export const Banner = ({ id, text, subtext, color = "secondaryDark", iconName, textColor = "white", negativeXMargin = 0, shape, type = "dismiss", onClick, }) => {
15
+ // If the banner is permanent, show it immediately.
16
+ const [show, setShow] = useState(type === "permanent");
17
+ // Load seen from async storage.
18
+ useEffect(() => {
19
+ // Always show permanent banners.
20
+ if (type === "permanent") {
21
+ return;
22
+ }
23
+ Unifier.storage.getItem(getKey(id)).then((isSeen) => {
24
+ console.debug(`[banner] ${getKey(id)} seen? ${isSeen}`);
25
+ setShow(!isSeen);
26
+ });
27
+ }, [id, type]);
28
+ const dismiss = () => {
29
+ if (type === "permanent") {
30
+ return;
30
31
  }
31
- const type = this.props.type || "dismiss";
32
- if (type === "action" && !this.props.onClick) {
33
- console.warn("Banners with type action require an onClick property.");
32
+ hideBanner(id);
33
+ setShow(false);
34
+ };
35
+ const renderButton = () => {
36
+ if (type === "permanent") {
37
+ return null;
34
38
  }
35
- const negativeMargin = (this.props.negativeXMargin || 0) * -4;
36
- return (React.createElement(Box, { color: this.props.color || "secondaryDark", dangerouslySetInlineStyle: {
37
- __style: {
38
- marginLeft: negativeMargin,
39
- marginRight: negativeMargin,
40
- },
41
- }, direction: "row", justifyContent: "between", marginBottom: 3, marginTop: 3, paddingX: 3, paddingY: 2, rounding: this.props.shape, shadow: true, width: Unifier.utils.dimensions().width || "100%", onClick: this.dismiss },
42
- React.createElement(Box, { alignItems: "center", direction: "column", flex: "shrink", justifyContent: "center" },
43
- React.createElement(Box, { paddingY: 1 },
44
- React.createElement(Text, { align: "center", color: this.props.textColor || "white", weight: "bold" }, this.props.text)),
45
- this.props.subtext && (React.createElement(Box, { paddingY: 1 },
46
- React.createElement(Text, { align: "center", color: this.props.textColor || "white" }, this.props.subtext)))),
47
- React.createElement(Box, { alignItems: "center", display: "block", justifyContent: "center", width: 40 },
48
- type === "dismiss" && (React.createElement(IconButton, { accessibilityLabel: "", icon: "times-circle",
49
- // size="lg"
50
- iconColor: (this.props.textColor || "white"), prefix: "fas", onClick: () => this.dismiss() })),
51
- type === "action" && (React.createElement(IconButton, { accessibilityLabel: "", icon: "arrow-right",
52
- // size="lg"
53
- iconColor: (this.props.textColor || "white"), prefix: "fas", onClick: () => this.props.onClick && this.props.onClick() })))));
39
+ return (React.createElement(Box, { alignItems: "center", display: "block", justifyContent: "center", width: 40 },
40
+ type === "dismiss" && (React.createElement(IconButton, { accessibilityLabel: "", icon: "times-circle", iconColor: textColor, prefix: "fas", onClick: dismiss })),
41
+ type === "action" && (React.createElement(IconButton, { accessibilityLabel: "", icon: "arrow-right", iconColor: textColor, prefix: "fas", onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick() }))));
42
+ };
43
+ if (!show) {
44
+ return null;
54
45
  }
55
- }
46
+ if (type === "action" && !onClick) {
47
+ console.warn("Banners with type action require an onClick property.");
48
+ }
49
+ const negativeMargin = negativeXMargin * -4;
50
+ return (React.createElement(Box, { color: color, dangerouslySetInlineStyle: {
51
+ __style: {
52
+ marginLeft: negativeMargin,
53
+ marginRight: negativeMargin,
54
+ },
55
+ }, direction: "row", justifyContent: "between", marginBottom: 3, marginTop: 3, paddingX: 3, paddingY: 2, rounding: shape, shadow: true, width: Unifier.utils.dimensions().width || "100%", onClick: type === "permanent" ? undefined : dismiss },
56
+ iconName && (React.createElement(Box, { justifyContent: "center", marginRight: 2, width: 32 },
57
+ React.createElement(Icon, { color: textColor, name: iconName, size: "lg" }))),
58
+ React.createElement(Box, { alignItems: "center", direction: "column", flex: "shrink", justifyContent: "center" },
59
+ React.createElement(Box, { paddingY: 1 },
60
+ React.createElement(Text, { align: "center", color: textColor, weight: "bold" }, text)),
61
+ subtext && (React.createElement(Box, { paddingY: 1 },
62
+ React.createElement(Text, { align: "center", color: textColor }, subtext)))),
63
+ renderButton()));
64
+ };
56
65
  //# sourceMappingURL=Banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.js","sourceRoot":"","sources":["../src/Banner.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Banner.js","sourceRoot":"","sources":["../src/Banner.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -57,6 +57,7 @@ export * from "./Table";
57
57
  export * from "./TableHeader";
58
58
  export * from "./TableHeaderCell";
59
59
  export * from "./TableRow";
60
+ export * from "./useStoredState";
60
61
  type ImageRequireSource = number;
61
62
  interface Insets {
62
63
  top?: number;
package/dist/index.js CHANGED
@@ -60,4 +60,5 @@ export * from "./Table";
60
60
  export * from "./TableHeader";
61
61
  export * from "./TableHeaderCell";
62
62
  export * from "./TableRow";
63
+ export * from "./useStoredState";
63
64
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,4BAA4B;AAC5B,4BAA4B;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,2BAA2B;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,4BAA4B;AAC5B,4BAA4B;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,2BAA2B;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const useStoredState: <T>(key: string, initialValue?: T | undefined) => [T | null | undefined, (value: T | null | undefined) => Promise<void>];
@@ -0,0 +1,33 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { Unifier } from "./Unifier";
3
+ export const useStoredState = (key, initialValue) => {
4
+ const [state, setState] = useState(initialValue);
5
+ // Function to fetch data from AsyncStorage
6
+ const fetchData = useCallback(async () => {
7
+ try {
8
+ return await Unifier.storage.getItem(key);
9
+ }
10
+ catch (error) {
11
+ console.error("Error reading data from AsyncStorage:", error);
12
+ return initialValue;
13
+ }
14
+ }, [initialValue, key]);
15
+ // Fetch data when the component mounts
16
+ useEffect(() => {
17
+ fetchData().then((value) => {
18
+ setState(value);
19
+ });
20
+ // eslint-disable-next-line react-hooks/exhaustive-deps
21
+ }, []);
22
+ const setAsyncStorageState = async (newValue) => {
23
+ try {
24
+ await Unifier.storage.setItem(key, newValue);
25
+ setState(newValue);
26
+ }
27
+ catch (error) {
28
+ console.error("Error writing data to AsyncStorage:", error);
29
+ }
30
+ };
31
+ return [state, setAsyncStorageState];
32
+ };
33
+ //# sourceMappingURL=useStoredState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStoredState.js","sourceRoot":"","sources":["../src/useStoredState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,GAAW,EACX,YAAgB,EACwD,EAAE;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,YAAY,CAAC,CAAC;IAEvE,2CAA2C;IAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAA4B,EAAE;QAC/D,IAAI;YACF,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC3C;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,YAAY,CAAC;SACrB;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;IAExB,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,KAAK,EAAE,QAA8B,EAAiB,EAAE;QACnF,IAAI;YACF,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7C,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACpB;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;SAC7D;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;AACvC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ferns-ui",
3
- "version": "0.36.4",
3
+ "version": "0.37.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
@@ -113,106 +113,105 @@
113
113
  ]
114
114
  },
115
115
  "files": [
116
- "dist/*.js",
117
- "dist/*.d.ts",
118
- "dist/*.map"
116
+ "dist/**/*",
117
+ "src/**/*"
119
118
  ],
120
119
  "devDependencies": {
121
120
  "@expo/config-plugins": "~7.2.2",
122
121
  "@expo/vector-icons": "^13.0.0",
123
- "@react-native-async-storage/async-storage": "1.18.2",
122
+ "@react-native-async-storage/async-storage": "1.19.3",
124
123
  "@react-native-community/blur": "^4.3.0",
125
- "@react-native-community/datetimepicker": "7.2.0",
126
- "@react-native-picker/picker": "2.4.10",
127
- "@types/mdurl": "^1.0.2",
128
- "@types/react": "^18.2.21",
124
+ "@react-native-community/datetimepicker": "7.6.1",
125
+ "@react-native-picker/picker": "2.5.1",
126
+ "@types/mdurl": "^1.0.4",
127
+ "@types/react": "^18.2.31",
129
128
  "@types/react-datetime-picker": "^5.0.0",
130
129
  "@types/react-time-picker": "^6.0.0",
131
- "@typescript-eslint/eslint-plugin": "^6.7.0",
132
- "@typescript-eslint/parser": "^6.7.0",
133
- "dayjs": "^1.11.9",
134
- "eslint": "^8.49.0",
135
- "eslint-config-ferns": "^0.4.0",
130
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
131
+ "@typescript-eslint/parser": "^6.9.0",
132
+ "dayjs": "^1.11.10",
133
+ "eslint": "^8.52.0",
134
+ "eslint-config-ferns": "^0.4.4",
136
135
  "eslint-config-prettier": "^9.0.0",
137
- "eslint-plugin-import": "^2.28.1",
136
+ "eslint-plugin-import": "^2.29.0",
138
137
  "eslint-plugin-lodash": "^7.1.0",
139
- "eslint-plugin-prettier": "^5.0.0",
138
+ "eslint-plugin-prettier": "^5.0.1",
140
139
  "eslint-plugin-react": "^7.33.2",
141
140
  "eslint-plugin-react-hooks": "^4.5.0",
142
141
  "eslint-plugin-react-native": "^4.1.0",
143
142
  "eslint-plugin-simple-import-sort": "^10.0.0",
144
143
  "eslint-plugin-unused-imports": "3.0.0",
145
- "expo-clipboard": "~4.3.1",
146
- "expo-font": "~11.4.0",
147
- "expo-haptics": "~12.4.0",
148
- "expo-image-manipulator": "~11.3.0",
149
- "expo-image-picker": "~14.3.2",
150
- "libphonenumber-js": "^1.10.44",
144
+ "expo-clipboard": "~4.5.0",
145
+ "expo-font": "~11.6.0",
146
+ "expo-haptics": "~12.6.0",
147
+ "expo-image-manipulator": "~11.5.0",
148
+ "expo-image-picker": "~14.5.0",
149
+ "libphonenumber-js": "^1.10.48",
151
150
  "lodash": "^4.17.21",
152
151
  "mdurl": "^1.0.1",
153
152
  "prettier": "^3.0.3",
154
153
  "react": "18.2.0",
155
154
  "react-app-polyfill": "^3.0.0",
156
- "react-date-picker": "^10.0.3",
157
- "react-datetime-picker": "^5.0.3",
155
+ "react-date-picker": "^10.5.2",
156
+ "react-datetime-picker": "^5.5.3",
158
157
  "react-dev-utils": "^12.0.1",
159
158
  "react-dom": "18.2.0",
160
159
  "react-keyed-flatten-children": "^2.2.1",
161
- "react-native": "0.72.5",
162
- "react-native-actions-sheet": "^0.9.0-alpha.21",
160
+ "react-native": "0.72.6",
161
+ "react-native-actions-sheet": "^0.8.29",
163
162
  "react-native-calendars": "^1.1301.0",
164
163
  "react-native-drawer-layout": "^3.2.1",
165
- "react-native-gesture-handler": "~2.12.1",
164
+ "react-native-gesture-handler": "~2.13.4",
166
165
  "react-native-modalize": "^2.1.1",
167
- "react-native-permissions": "^3.9.1",
166
+ "react-native-permissions": "^3.10.0",
168
167
  "react-native-picker-select": "^8.1.0",
169
168
  "react-native-portalize": "^1.0.7",
170
- "react-native-reanimated": "~3.3.0",
171
- "react-native-svg": "13.9.0",
169
+ "react-native-reanimated": "~3.5.4",
170
+ "react-native-svg": "13.14.0",
172
171
  "react-native-swiper-flatlist": "^3.1.1",
173
172
  "react-native-toast-notifications": "^3.4.0",
174
- "react-router": "^6.15.0",
175
- "react-router-dom": "^6.15.0",
176
- "react-time-picker": "^6.0.4",
173
+ "react-router": "^6.17.0",
174
+ "react-router-dom": "^6.17.0",
175
+ "react-time-picker": "^6.5.2",
177
176
  "tsc-watch": "^6.0.4",
178
177
  "typescript": "^5.2.2"
179
178
  },
180
179
  "peerDependencies": {
181
180
  "@expo/vector-icons": "^13.0.0",
182
- "@react-native-async-storage/async-storage": "1.18.2",
181
+ "@react-native-async-storage/async-storage": "1.19.3",
183
182
  "@react-native-community/blur": "^4.3.0",
184
- "@react-native-community/datetimepicker": "7.2.0",
185
- "@react-native-picker/picker": "2.4.10",
186
- "@typescript-eslint/eslint-plugin": "^6.7.0",
187
- "@typescript-eslint/parser": "^6.7.0",
188
- "dayjs": "^1.11.9",
189
- "expo-clipboard": "~4.3.1",
190
- "expo-font": "~11.4.0",
191
- "expo-haptics": "~12.4.0",
192
- "expo-image-manipulator": "~11.3.0",
193
- "expo-image-picker": "~14.3.2",
194
- "libphonenumber-js": "^1.10.44",
183
+ "@react-native-community/datetimepicker": "7.6.1",
184
+ "@react-native-picker/picker": "2.5.1",
185
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
186
+ "@typescript-eslint/parser": "^6.9.0",
187
+ "dayjs": "^1.11.10",
188
+ "expo-clipboard": "~4.5.0",
189
+ "expo-font": "~11.6.0",
190
+ "expo-haptics": "~12.6.0",
191
+ "expo-image-manipulator": "~11.5.0",
192
+ "expo-image-picker": "~14.5.0",
193
+ "libphonenumber-js": "^1.10.48",
195
194
  "lodash": "^4.17.21",
196
195
  "react": "18.2.0",
197
196
  "react-app-polyfill": "^3.0.0",
198
- "react-date-picker": "^10.0.3",
199
- "react-datetime-picker": "^5.0.3",
197
+ "react-date-picker": "^10.5.2",
198
+ "react-datetime-picker": "^5.5.3",
200
199
  "react-dev-utils": "^12.0.1",
201
200
  "react-dom": "18.2.0",
202
- "react-native": "0.72.5",
203
- "react-native-actions-sheet": "^0.9.0-alpha.21",
201
+ "react-native": "0.72.6",
202
+ "react-native-actions-sheet": "^0.8.29",
204
203
  "react-native-calendars": "^1.1301.0",
205
204
  "react-native-drawer-layout": "^3.2.1",
206
- "react-native-gesture-handler": "~2.12.1",
205
+ "react-native-gesture-handler": "~2.13.4",
207
206
  "react-native-modalize": "^2.1.1",
208
- "react-native-permissions": "^3.9.1",
207
+ "react-native-permissions": "^3.10.0",
209
208
  "react-native-picker-select": "^8.1.0",
210
209
  "react-native-portalize": "^1.0.7",
211
- "react-native-reanimated": "~3.3.0",
212
- "react-native-svg": "13.9.0",
210
+ "react-native-reanimated": "~3.5.4",
211
+ "react-native-svg": "13.14.0",
213
212
  "react-native-toast-notifications": "^3.4.0",
214
- "react-router": "^6.15.0",
215
- "react-router-dom": "^6.15.0",
216
- "react-time-picker": "^6.0.4"
213
+ "react-router": "^6.17.0",
214
+ "react-router-dom": "^6.17.0",
215
+ "react-time-picker": "^6.5.2"
217
216
  }
218
217
  }