@terreno/ui 0.0.16 → 0.0.18

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 (46) hide show
  1. package/dist/Button.js +7 -9
  2. package/dist/Button.js.map +1 -1
  3. package/dist/Common.d.ts +39 -0
  4. package/dist/TerrenoProvider.js +1 -1
  5. package/dist/TerrenoProvider.js.map +1 -1
  6. package/dist/Toast.js +2 -3
  7. package/dist/Toast.js.map +1 -1
  8. package/dist/ToastNotifications.d.ts +144 -0
  9. package/dist/ToastNotifications.js +387 -0
  10. package/dist/ToastNotifications.js.map +1 -0
  11. package/dist/UserInactivity.d.ts +28 -0
  12. package/dist/UserInactivity.js +100 -0
  13. package/dist/UserInactivity.js.map +1 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.js +1 -0
  16. package/dist/index.js.map +1 -1
  17. package/package.json +1 -2
  18. package/src/Button.tsx +20 -37
  19. package/src/Common.ts +45 -0
  20. package/src/DateTimeActionSheet.test.tsx +53 -4
  21. package/src/MobileAddressAutoComplete.test.tsx +47 -4
  22. package/src/ModalSheet.test.tsx +37 -5
  23. package/src/PickerSelect.test.tsx +41 -5
  24. package/src/Signature.test.tsx +21 -4
  25. package/src/SignatureField.test.tsx +49 -5
  26. package/src/SplitPage.test.tsx +71 -4
  27. package/src/TerrenoProvider.tsx +1 -1
  28. package/src/Toast.tsx +2 -3
  29. package/src/ToastNotifications.test.tsx +645 -0
  30. package/src/ToastNotifications.tsx +746 -0
  31. package/src/UnifiedAddressAutoComplete.test.tsx +43 -5
  32. package/src/UserInactivity.test.tsx +96 -0
  33. package/src/UserInactivity.tsx +129 -0
  34. package/src/WebAddressAutocomplete.test.tsx +22 -4
  35. package/src/__snapshots__/Button.test.tsx.snap +0 -347
  36. package/src/__snapshots__/DateTimeActionSheet.test.tsx.snap +11 -0
  37. package/src/__snapshots__/MobileAddressAutoComplete.test.tsx.snap +230 -0
  38. package/src/__snapshots__/ModalSheet.test.tsx.snap +37 -0
  39. package/src/__snapshots__/PickerSelect.test.tsx.snap +798 -11
  40. package/src/__snapshots__/Signature.test.tsx.snap +67 -0
  41. package/src/__snapshots__/SignatureField.test.tsx.snap +129 -21
  42. package/src/__snapshots__/SplitPage.test.tsx.snap +686 -0
  43. package/src/__snapshots__/UnifiedAddressAutoComplete.test.tsx.snap +377 -0
  44. package/src/__snapshots__/UserInactivity.test.tsx.snap +108 -0
  45. package/src/__snapshots__/WebAddressAutocomplete.test.tsx.snap +238 -0
  46. package/src/index.tsx +1 -0
@@ -1,15 +1,53 @@
1
- import {describe, expect, it} from "bun:test";
2
-
1
+ import {describe, expect, it, mock} from "bun:test";
2
+ import {forwardRef} from "react";
3
+ import {Text, View} from "react-native";
4
+ import {renderWithTheme} from "./test-utils";
3
5
  import {UnifiedAddressAutoCompleteField} from "./UnifiedAddressAutoComplete";
4
6
 
7
+ // Mock react-native-google-places-autocomplete (used by MobileAddressAutocomplete)
8
+ mock.module("react-native-google-places-autocomplete", () => ({
9
+ GooglePlacesAutocomplete: forwardRef(({placeholder}: any, ref) => (
10
+ <View ref={ref as any} testID="google-places-autocomplete">
11
+ <Text>{placeholder}</Text>
12
+ </View>
13
+ )),
14
+ }));
15
+
5
16
  describe("UnifiedAddressAutoCompleteField", () => {
6
- // UnifiedAddressAutoCompleteField uses Google Places API and platform-specific implementations
7
- it.skip("renders correctly (skipped - uses Google Places API)", () => {
8
- expect(UnifiedAddressAutoCompleteField).toBeDefined();
17
+ const defaultProps = {
18
+ handleAddressChange: () => {},
19
+ handleAutoCompleteChange: () => {},
20
+ inputValue: "",
21
+ };
22
+
23
+ it("renders correctly without Google API key (fallback to TextField)", () => {
24
+ const {toJSON} = renderWithTheme(<UnifiedAddressAutoCompleteField {...defaultProps} />);
25
+ expect(toJSON()).toMatchSnapshot();
9
26
  });
10
27
 
11
28
  it("component is defined", () => {
12
29
  expect(UnifiedAddressAutoCompleteField).toBeDefined();
13
30
  expect(typeof UnifiedAddressAutoCompleteField).toBe("function");
14
31
  });
32
+
33
+ it("renders with input value", () => {
34
+ const {toJSON} = renderWithTheme(
35
+ <UnifiedAddressAutoCompleteField {...defaultProps} inputValue="123 Main St" />
36
+ );
37
+ expect(toJSON()).toMatchSnapshot();
38
+ });
39
+
40
+ it("renders disabled state", () => {
41
+ const {toJSON} = renderWithTheme(
42
+ <UnifiedAddressAutoCompleteField {...defaultProps} disabled />
43
+ );
44
+ expect(toJSON()).toMatchSnapshot();
45
+ });
46
+
47
+ it("renders with invalid Google API key (falls back to TextField)", () => {
48
+ const {toJSON} = renderWithTheme(
49
+ <UnifiedAddressAutoCompleteField {...defaultProps} googleMapsApiKey="invalid" />
50
+ );
51
+ expect(toJSON()).toMatchSnapshot();
52
+ });
15
53
  });
@@ -0,0 +1,96 @@
1
+ import {describe, expect, it, mock} from "bun:test";
2
+ import {act} from "@testing-library/react-native";
3
+
4
+ import {Text} from "./Text";
5
+ import {renderWithTheme} from "./test-utils";
6
+ import {UserInactivity} from "./UserInactivity";
7
+
8
+ describe("UserInactivity", () => {
9
+ it("renders children correctly", () => {
10
+ const onAction = mock((_active: boolean) => {});
11
+ const {getByText} = renderWithTheme(
12
+ <UserInactivity onAction={onAction}>
13
+ <Text>Test Content</Text>
14
+ </UserInactivity>
15
+ );
16
+ expect(getByText("Test Content")).toBeTruthy();
17
+ });
18
+
19
+ it("renders with custom style", () => {
20
+ const onAction = mock((_active: boolean) => {});
21
+ const {toJSON} = renderWithTheme(
22
+ <UserInactivity onAction={onAction} style={{backgroundColor: "red", flex: 2}}>
23
+ <Text>Test Content</Text>
24
+ </UserInactivity>
25
+ );
26
+ expect(toJSON()).toMatchSnapshot();
27
+ });
28
+
29
+ it("renders with default style when no style provided", () => {
30
+ const onAction = mock((_active: boolean) => {});
31
+ const {toJSON} = renderWithTheme(
32
+ <UserInactivity onAction={onAction}>
33
+ <Text>Test Content</Text>
34
+ </UserInactivity>
35
+ );
36
+ expect(toJSON()).toMatchSnapshot();
37
+ });
38
+
39
+ it("calls onAction with false after timeout", async () => {
40
+ const onAction = mock((_active: boolean) => {});
41
+
42
+ renderWithTheme(
43
+ <UserInactivity onAction={onAction} timeForInactivity={50}>
44
+ <Text>Test Content</Text>
45
+ </UserInactivity>
46
+ );
47
+
48
+ await act(async () => {
49
+ await new Promise((resolve) => setTimeout(resolve, 100));
50
+ });
51
+
52
+ expect(onAction).toHaveBeenCalledWith(false);
53
+ });
54
+
55
+ it("accepts timeForInactivity prop", () => {
56
+ const onAction = mock((_active: boolean) => {});
57
+ const {toJSON} = renderWithTheme(
58
+ <UserInactivity onAction={onAction} timeForInactivity={5000}>
59
+ <Text>Test Content</Text>
60
+ </UserInactivity>
61
+ );
62
+ expect(toJSON()).toBeTruthy();
63
+ });
64
+
65
+ it("accepts isActive prop", () => {
66
+ const onAction = mock((_active: boolean) => {});
67
+ const {toJSON} = renderWithTheme(
68
+ <UserInactivity isActive={true} onAction={onAction}>
69
+ <Text>Test Content</Text>
70
+ </UserInactivity>
71
+ );
72
+ expect(toJSON()).toBeTruthy();
73
+ });
74
+
75
+ it("renders multiple children", () => {
76
+ const onAction = mock((_active: boolean) => {});
77
+ const {getByText} = renderWithTheme(
78
+ <UserInactivity onAction={onAction}>
79
+ <Text>First Child</Text>
80
+ <Text>Second Child</Text>
81
+ </UserInactivity>
82
+ );
83
+ expect(getByText("First Child")).toBeTruthy();
84
+ expect(getByText("Second Child")).toBeTruthy();
85
+ });
86
+
87
+ it("accepts skipKeyboard prop", () => {
88
+ const onAction = mock((_active: boolean) => {});
89
+ const {toJSON} = renderWithTheme(
90
+ <UserInactivity onAction={onAction} skipKeyboard={true}>
91
+ <Text>Test Content</Text>
92
+ </UserInactivity>
93
+ );
94
+ expect(toJSON()).toBeTruthy();
95
+ });
96
+ });
@@ -0,0 +1,129 @@
1
+ /**
2
+ * MIT License
3
+ *
4
+ * Copyright (c) 2017-2021 Alberto Schiabel
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ *
24
+ * Vendored from https://github.com/jkomyno/react-native-user-inactivity
25
+ */
26
+
27
+ import {type FC, useCallback, useEffect, useRef, useState} from "react";
28
+ import {Keyboard, PanResponder, View, type ViewStyle} from "react-native";
29
+
30
+ import type {UserInactivityProps} from "./Common";
31
+
32
+ const DEFAULT_TIME_FOR_INACTIVITY = 10000;
33
+ const DEFAULT_STYLE: ViewStyle = {
34
+ flex: 1,
35
+ };
36
+
37
+ export const UserInactivity: FC<UserInactivityProps> = ({
38
+ children,
39
+ isActive: isActiveProp,
40
+ onAction,
41
+ skipKeyboard = false,
42
+ style,
43
+ timeForInactivity = DEFAULT_TIME_FOR_INACTIVITY,
44
+ }) => {
45
+ const actualStyle = style ?? DEFAULT_STYLE;
46
+
47
+ const initialActive = isActiveProp === undefined ? true : isActiveProp;
48
+ const [active, setActive] = useState(initialActive);
49
+ const [_resetKey, setResetKey] = useState(0);
50
+
51
+ const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
52
+ const isFirstRender = useRef(true);
53
+
54
+ const clearTimer = useCallback(() => {
55
+ if (timeoutRef.current !== null) {
56
+ clearTimeout(timeoutRef.current);
57
+ timeoutRef.current = null;
58
+ }
59
+ }, []);
60
+
61
+ const resetTimerDueToActivity = useCallback(() => {
62
+ clearTimer();
63
+ setActive(true);
64
+ setResetKey((prev) => prev + 1);
65
+ }, [clearTimer]);
66
+
67
+ // Handle isActive prop changes
68
+ useEffect(() => {
69
+ if (isActiveProp) {
70
+ resetTimerDueToActivity();
71
+ }
72
+ }, [isActiveProp, resetTimerDueToActivity]);
73
+
74
+ // Setup the inactivity timeout
75
+ useEffect(() => {
76
+ timeoutRef.current = setTimeout(() => {
77
+ setActive(false);
78
+ onAction(false);
79
+ }, timeForInactivity);
80
+
81
+ return clearTimer;
82
+ }, [timeForInactivity, onAction, clearTimer]);
83
+
84
+ // Trigger onAction when active state changes (except on first render)
85
+ useEffect(() => {
86
+ if (isFirstRender.current) {
87
+ isFirstRender.current = false;
88
+ } else {
89
+ if (active) {
90
+ onAction(true);
91
+ }
92
+ }
93
+ }, [active, onAction]);
94
+
95
+ // Setup keyboard listeners
96
+ useEffect(() => {
97
+ if (skipKeyboard) {
98
+ return;
99
+ }
100
+
101
+ const hideEvent = Keyboard.addListener("keyboardDidHide", resetTimerDueToActivity);
102
+ const showEvent = Keyboard.addListener("keyboardDidShow", resetTimerDueToActivity);
103
+
104
+ return () => {
105
+ hideEvent.remove();
106
+ showEvent.remove();
107
+ };
108
+ }, [skipKeyboard, resetTimerDueToActivity]);
109
+
110
+ const resetTimerForPanResponder = useCallback(() => {
111
+ resetTimerDueToActivity();
112
+ return false;
113
+ }, [resetTimerDueToActivity]);
114
+
115
+ // Initialize PanResponder once
116
+ const [panResponder] = useState(() =>
117
+ PanResponder.create({
118
+ onMoveShouldSetPanResponderCapture: resetTimerForPanResponder,
119
+ onPanResponderTerminationRequest: resetTimerForPanResponder,
120
+ onStartShouldSetPanResponderCapture: resetTimerForPanResponder,
121
+ })
122
+ );
123
+
124
+ return (
125
+ <View collapsable={false} style={actualStyle} {...panResponder.panHandlers}>
126
+ {children}
127
+ </View>
128
+ );
129
+ };
@@ -1,15 +1,33 @@
1
1
  import {describe, expect, it} from "bun:test";
2
-
2
+ import {renderWithTheme} from "./test-utils";
3
3
  import {WebAddressAutocomplete} from "./WebAddressAutocomplete";
4
4
 
5
5
  describe("WebAddressAutocomplete", () => {
6
- // WebAddressAutocomplete uses Google Places API
7
- it.skip("renders correctly (skipped - uses Google Places API)", () => {
8
- expect(WebAddressAutocomplete).toBeDefined();
6
+ const defaultProps = {
7
+ handleAddressChange: () => {},
8
+ handleAutoCompleteChange: () => {},
9
+ inputValue: "",
10
+ };
11
+
12
+ it("renders correctly without Google API key", () => {
13
+ const {toJSON} = renderWithTheme(<WebAddressAutocomplete {...defaultProps} />);
14
+ expect(toJSON()).toMatchSnapshot();
9
15
  });
10
16
 
11
17
  it("component is defined", () => {
12
18
  expect(WebAddressAutocomplete).toBeDefined();
13
19
  expect(typeof WebAddressAutocomplete).toBe("function");
14
20
  });
21
+
22
+ it("renders with input value", () => {
23
+ const {toJSON} = renderWithTheme(
24
+ <WebAddressAutocomplete {...defaultProps} inputValue="123 Main St" />
25
+ );
26
+ expect(toJSON()).toMatchSnapshot();
27
+ });
28
+
29
+ it("renders disabled state", () => {
30
+ const {toJSON} = renderWithTheme(<WebAddressAutocomplete {...defaultProps} disabled />);
31
+ expect(toJSON()).toMatchSnapshot();
32
+ });
15
33
  });
@@ -907,353 +907,6 @@ exports[`Button renders with confirmation modal props 1`] = `
907
907
  },
908
908
  "type": "View",
909
909
  },
910
- {
911
- "$$typeof": Symbol(react.test.json),
912
- "children": [
913
- {
914
- "$$typeof": Symbol(react.test.json),
915
- "children": [
916
- {
917
- "$$typeof": Symbol(react.test.json),
918
- "children": [
919
- {
920
- "$$typeof": Symbol(react.test.json),
921
- "children": [
922
- {
923
- "$$typeof": Symbol(react.test.json),
924
- "children": [
925
- {
926
- "$$typeof": Symbol(react.test.json),
927
- "children": null,
928
- "props": {
929
- "accessibilityHint": "Closes the modal",
930
- "aria-label": "Close modal",
931
- "aria-role": "button",
932
- "onPress": [Function],
933
- "style": {
934
- "alignItems": "center",
935
- "bottom": -8,
936
- "flex": 1,
937
- "justifyContent": "center",
938
- "left": -8,
939
- "position": "absolute",
940
- "right": -8,
941
- "top": -8,
942
- },
943
- },
944
- "type": "Pressable",
945
- },
946
- ],
947
- "props": {
948
- "style": {
949
- "alignSelf": "flex-end",
950
- "position": "relative",
951
- },
952
- "testID": undefined,
953
- },
954
- "type": "View",
955
- },
956
- {
957
- "$$typeof": Symbol(react.test.json),
958
- "children": [
959
- {
960
- "$$typeof": Symbol(react.test.json),
961
- "children": [
962
- "Confirm Delete",
963
- ],
964
- "props": {
965
- "numberOfLines": 0,
966
- "style": {
967
- "color": "#1C1C1C",
968
- "fontFamily": "heading-bold",
969
- "fontSize": 20,
970
- },
971
- "testID": undefined,
972
- },
973
- "type": "Text",
974
- },
975
- ],
976
- "props": {
977
- "accessibilityHint": "Modal title",
978
- "aria-label": "Confirm Delete",
979
- "aria-role": "header",
980
- "style": {
981
- "alignSelf": "flex-start",
982
- },
983
- "testID": undefined,
984
- },
985
- "type": "View",
986
- },
987
- {
988
- "$$typeof": Symbol(react.test.json),
989
- "children": [
990
- {
991
- "$$typeof": Symbol(react.test.json),
992
- "children": [
993
- {
994
- "$$typeof": Symbol(react.test.json),
995
- "children": [
996
- "This action cannot be undone",
997
- ],
998
- "props": {
999
- "numberOfLines": 0,
1000
- "selectable": undefined,
1001
- "style": {
1002
- "color": "#1C1C1C",
1003
- "fontFamily": "text-medium",
1004
- "fontSize": 16,
1005
- "textAlign": "left",
1006
- },
1007
- "testID": undefined,
1008
- },
1009
- "type": "Text",
1010
- },
1011
- ],
1012
- "props": {},
1013
- "type": "View",
1014
- },
1015
- ],
1016
- "props": {
1017
- "accessibilityHint": "Modal Sub Heading Text",
1018
- "aria-label": "This action cannot be undone",
1019
- "aria-role": "text",
1020
- "style": {
1021
- "alignSelf": "flex-start",
1022
- "marginTop": 8,
1023
- },
1024
- "testID": undefined,
1025
- },
1026
- "type": "View",
1027
- },
1028
- {
1029
- "$$typeof": Symbol(react.test.json),
1030
- "children": [
1031
- {
1032
- "$$typeof": Symbol(react.test.json),
1033
- "children": [
1034
- "Are you sure?",
1035
- ],
1036
- "props": {
1037
- "style": undefined,
1038
- },
1039
- "type": "Text",
1040
- },
1041
- ],
1042
- "props": {
1043
- "style": {
1044
- "flex": 1,
1045
- "marginTop": 12,
1046
- "width": "100%",
1047
- },
1048
- "testID": undefined,
1049
- },
1050
- "type": "View",
1051
- },
1052
- {
1053
- "$$typeof": Symbol(react.test.json),
1054
- "children": [
1055
- {
1056
- "$$typeof": Symbol(react.test.json),
1057
- "children": [
1058
- {
1059
- "$$typeof": Symbol(react.test.json),
1060
- "children": [
1061
- {
1062
- "$$typeof": Symbol(react.test.json),
1063
- "children": [
1064
- {
1065
- "$$typeof": Symbol(react.test.json),
1066
- "children": [
1067
- {
1068
- "$$typeof": Symbol(react.test.json),
1069
- "children": [
1070
- "Cancel",
1071
- ],
1072
- "props": {
1073
- "style": {
1074
- "color": "#353535",
1075
- "fontSize": 16,
1076
- "fontWeight": "700",
1077
- },
1078
- },
1079
- "type": "Text",
1080
- },
1081
- ],
1082
- "props": {
1083
- "style": {
1084
- "flexDirection": "row",
1085
- },
1086
- "testID": undefined,
1087
- },
1088
- "type": "View",
1089
- },
1090
- ],
1091
- "props": {
1092
- "style": {
1093
- "flexDirection": "row",
1094
- },
1095
- "testID": undefined,
1096
- },
1097
- "type": "View",
1098
- },
1099
- ],
1100
- "props": {
1101
- "accessibilityHint": "Press to perform action",
1102
- "aria-label": "Cancel",
1103
- "aria-role": "button",
1104
- "disabled": undefined,
1105
- "onPress": [Function: debounced],
1106
- "style": {
1107
- "alignItems": "center",
1108
- "alignSelf": undefined,
1109
- "backgroundColor": "#B6CDD5",
1110
- "borderColor": undefined,
1111
- "borderRadius": 360,
1112
- "borderWidth": undefined,
1113
- "flexDirection": "column",
1114
- "justifyContent": "center",
1115
- "paddingHorizontal": 20,
1116
- "paddingVertical": 8,
1117
- "width": "auto",
1118
- },
1119
- "testID": undefined,
1120
- },
1121
- "type": "Pressable",
1122
- },
1123
- ],
1124
- "props": {
1125
- "style": {
1126
- "marginRight": 20,
1127
- },
1128
- "testID": undefined,
1129
- },
1130
- "type": "View",
1131
- },
1132
- {
1133
- "$$typeof": Symbol(react.test.json),
1134
- "children": [
1135
- {
1136
- "$$typeof": Symbol(react.test.json),
1137
- "children": [
1138
- {
1139
- "$$typeof": Symbol(react.test.json),
1140
- "children": [
1141
- {
1142
- "$$typeof": Symbol(react.test.json),
1143
- "children": [
1144
- "Confirm",
1145
- ],
1146
- "props": {
1147
- "style": {
1148
- "color": "#FFFFFF",
1149
- "fontSize": 16,
1150
- "fontWeight": "700",
1151
- },
1152
- },
1153
- "type": "Text",
1154
- },
1155
- ],
1156
- "props": {
1157
- "style": {
1158
- "flexDirection": "row",
1159
- },
1160
- "testID": undefined,
1161
- },
1162
- "type": "View",
1163
- },
1164
- ],
1165
- "props": {
1166
- "style": {
1167
- "flexDirection": "row",
1168
- },
1169
- "testID": undefined,
1170
- },
1171
- "type": "View",
1172
- },
1173
- ],
1174
- "props": {
1175
- "accessibilityHint": "Press to perform action",
1176
- "aria-label": "Confirm",
1177
- "aria-role": "button",
1178
- "disabled": undefined,
1179
- "onPress": [Function: debounced],
1180
- "style": {
1181
- "alignItems": "center",
1182
- "alignSelf": undefined,
1183
- "backgroundColor": "#0E9DCD",
1184
- "borderColor": undefined,
1185
- "borderRadius": 360,
1186
- "borderWidth": undefined,
1187
- "flexDirection": "column",
1188
- "justifyContent": "center",
1189
- "paddingHorizontal": 20,
1190
- "paddingVertical": 8,
1191
- "width": "auto",
1192
- },
1193
- "testID": undefined,
1194
- },
1195
- "type": "Pressable",
1196
- },
1197
- ],
1198
- "props": {
1199
- "style": {
1200
- "alignSelf": "flex-end",
1201
- "flexDirection": "row",
1202
- "marginTop": 32,
1203
- },
1204
- "testID": undefined,
1205
- },
1206
- "type": "View",
1207
- },
1208
- ],
1209
- "props": {
1210
- "style": {
1211
- "alignItems": "center",
1212
- "alignSelf": "center",
1213
- "backgroundColor": "#FFFFFF",
1214
- "borderRadius": 4,
1215
- "boxShadow": "0px 4px 24px rgba(0, 0, 0, 0.5)",
1216
- "elevation": 24,
1217
- "margin": "auto",
1218
- "maxHeight": "100%",
1219
- "padding": 32,
1220
- "width": "90%",
1221
- "zIndex": 1,
1222
- },
1223
- "testID": undefined,
1224
- },
1225
- "type": "View",
1226
- },
1227
- ],
1228
- "props": {
1229
- "onPress": [Function],
1230
- "style": {
1231
- "cursor": "auto",
1232
- },
1233
- },
1234
- "type": "Pressable",
1235
- },
1236
- ],
1237
- "props": {
1238
- "onPress": [Function],
1239
- "style": {
1240
- "alignItems": "center",
1241
- "backgroundColor": "rgba(0, 0, 0, 0.5)",
1242
- "flex": 1,
1243
- "justifyContent": "center",
1244
- },
1245
- },
1246
- "type": "Pressable",
1247
- },
1248
- ],
1249
- "props": {
1250
- "animationType": "none",
1251
- "onRequestClose": [Function],
1252
- "transparent": true,
1253
- "visible": false,
1254
- },
1255
- "type": "Modal",
1256
- },
1257
910
  ],
1258
911
  "props": {
1259
912
  "accessibilityHint": "Opens a confirmation dialog",
@@ -0,0 +1,11 @@
1
+ // Bun Snapshot v1, https://bun.sh/docs/test/snapshots
2
+
3
+ exports[`DateTimeActionSheet renders correctly with datetime type 1`] = `null`;
4
+
5
+ exports[`DateTimeActionSheet renders correctly with date type 1`] = `null`;
6
+
7
+ exports[`DateTimeActionSheet renders correctly with time type 1`] = `null`;
8
+
9
+ exports[`DateTimeActionSheet renders correctly when not visible 1`] = `null`;
10
+
11
+ exports[`DateTimeActionSheet renders with custom timezone 1`] = `null`;