@terreno/ui 0.13.3 → 0.14.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.
Files changed (179) hide show
  1. package/dist/ActionSheet.d.ts +5 -5
  2. package/dist/ActionSheet.js +2 -2
  3. package/dist/ActionSheet.js.map +1 -1
  4. package/dist/Avatar.js +1 -1
  5. package/dist/Avatar.js.map +1 -1
  6. package/dist/Banner.js.map +1 -1
  7. package/dist/Box.js +2 -0
  8. package/dist/Box.js.map +1 -1
  9. package/dist/Button.d.ts +2 -2
  10. package/dist/Button.js +35 -23
  11. package/dist/Button.js.map +1 -1
  12. package/dist/Common.d.ts +16 -4
  13. package/dist/Common.js +4 -4
  14. package/dist/Common.js.map +1 -1
  15. package/dist/ConsentFormScreen.js +3 -3
  16. package/dist/ConsentFormScreen.js.map +1 -1
  17. package/dist/ConsentNavigator.d.ts +1 -1
  18. package/dist/ConsentNavigator.js +2 -1
  19. package/dist/ConsentNavigator.js.map +1 -1
  20. package/dist/CustomSelectField.js +3 -1
  21. package/dist/CustomSelectField.js.map +1 -1
  22. package/dist/DataTable.js +1 -1
  23. package/dist/DataTable.js.map +1 -1
  24. package/dist/DateTimeActionSheet.js +2 -1
  25. package/dist/DateTimeActionSheet.js.map +1 -1
  26. package/dist/DateTimeField.js +3 -2
  27. package/dist/DateTimeField.js.map +1 -1
  28. package/dist/DateUtilities.d.ts +25 -25
  29. package/dist/DateUtilities.js +31 -32
  30. package/dist/DateUtilities.js.map +1 -1
  31. package/dist/HeightField.js.map +1 -1
  32. package/dist/Hyperlink.js +19 -9
  33. package/dist/Hyperlink.js.map +1 -1
  34. package/dist/IconButton.js.map +1 -1
  35. package/dist/ImageBackground.d.ts +2 -5
  36. package/dist/ImageBackground.js +1 -1
  37. package/dist/ImageBackground.js.map +1 -1
  38. package/dist/MediaQuery.d.ts +4 -4
  39. package/dist/MediaQuery.js +8 -8
  40. package/dist/MediaQuery.js.map +1 -1
  41. package/dist/ModalSheet.d.ts +3 -2
  42. package/dist/ModalSheet.js +1 -1
  43. package/dist/ModalSheet.js.map +1 -1
  44. package/dist/OfflineBanner.d.ts +21 -0
  45. package/dist/OfflineBanner.js +25 -0
  46. package/dist/OfflineBanner.js.map +1 -0
  47. package/dist/OpenAPIContext.js +1 -1
  48. package/dist/OpenAPIContext.js.map +1 -1
  49. package/dist/Page.d.ts +1 -0
  50. package/dist/Page.js +7 -2
  51. package/dist/Page.js.map +1 -1
  52. package/dist/Pagination.js.map +1 -1
  53. package/dist/Permissions.js +3 -0
  54. package/dist/Permissions.js.map +1 -1
  55. package/dist/PickerSelect.d.ts +1 -1
  56. package/dist/PickerSelect.js +9 -6
  57. package/dist/PickerSelect.js.map +1 -1
  58. package/dist/SelectField.js +1 -1
  59. package/dist/SelectField.js.map +1 -1
  60. package/dist/SplitPage.js +7 -2
  61. package/dist/SplitPage.js.map +1 -1
  62. package/dist/SplitPage.native.js +4 -1
  63. package/dist/SplitPage.native.js.map +1 -1
  64. package/dist/TapToEdit.d.ts +1 -1
  65. package/dist/TapToEdit.js +12 -14
  66. package/dist/TapToEdit.js.map +1 -1
  67. package/dist/Toast.js.map +1 -1
  68. package/dist/ToastNotifications.js +2 -2
  69. package/dist/ToastNotifications.js.map +1 -1
  70. package/dist/Tooltip.d.ts +24 -1
  71. package/dist/Tooltip.js +2 -2
  72. package/dist/Tooltip.js.map +1 -1
  73. package/dist/Unifier.d.ts +3 -3
  74. package/dist/Unifier.js +15 -12
  75. package/dist/Unifier.js.map +1 -1
  76. package/dist/Utilities.d.ts +12 -8
  77. package/dist/Utilities.js +13 -15
  78. package/dist/Utilities.js.map +1 -1
  79. package/dist/index.d.ts +2 -1
  80. package/dist/index.js +2 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/signUp/PasswordRequirements.js +3 -3
  83. package/dist/signUp/PasswordRequirements.js.map +1 -1
  84. package/dist/table/TableHeaderCell.js +1 -9
  85. package/dist/table/TableHeaderCell.js.map +1 -1
  86. package/dist/table/tableContext.d.ts +1 -1
  87. package/dist/table/tableContext.js +2 -2
  88. package/dist/table/tableContext.js.map +1 -1
  89. package/package.json +2 -1
  90. package/src/ActionSheet.test.tsx +1 -0
  91. package/src/ActionSheet.tsx +8 -6
  92. package/src/Avatar.tsx +9 -2
  93. package/src/Badge.test.tsx +1 -0
  94. package/src/Banner.test.tsx +71 -0
  95. package/src/Banner.tsx +1 -1
  96. package/src/Box.test.tsx +1 -0
  97. package/src/Box.tsx +10 -6
  98. package/src/Button.test.tsx +35 -0
  99. package/src/Button.tsx +65 -34
  100. package/src/Common.ts +42 -19
  101. package/src/ConsentFormScreen.test.tsx +124 -0
  102. package/src/ConsentFormScreen.tsx +18 -6
  103. package/src/ConsentNavigator.test.tsx +1 -0
  104. package/src/ConsentNavigator.tsx +5 -3
  105. package/src/CustomSelectField.tsx +3 -1
  106. package/src/DataTable.test.tsx +218 -0
  107. package/src/DataTable.tsx +1 -1
  108. package/src/DateTimeActionSheet.tsx +7 -3
  109. package/src/DateTimeField.test.tsx +1 -0
  110. package/src/DateTimeField.tsx +3 -2
  111. package/src/DateUtilities.test.ts +111 -0
  112. package/src/DateUtilities.tsx +43 -44
  113. package/src/DecimalRangeActionSheet.test.tsx +28 -0
  114. package/src/ErrorBoundary.test.tsx +1 -0
  115. package/src/HeightActionSheet.test.tsx +16 -0
  116. package/src/HeightField.test.tsx +106 -1
  117. package/src/HeightField.tsx +2 -1
  118. package/src/Hyperlink.tsx +83 -52
  119. package/src/IconButton.tsx +1 -1
  120. package/src/ImageBackground.tsx +5 -6
  121. package/src/MediaQuery.ts +8 -8
  122. package/src/MobileAddressAutoComplete.test.tsx +20 -1
  123. package/src/ModalSheet.test.tsx +1 -5
  124. package/src/ModalSheet.tsx +15 -6
  125. package/src/NumberField.test.tsx +14 -0
  126. package/src/OfflineBanner.test.tsx +70 -0
  127. package/src/OfflineBanner.tsx +54 -0
  128. package/src/OpenAPIContext.tsx +3 -2
  129. package/src/Page.test.tsx +28 -0
  130. package/src/Page.tsx +18 -2
  131. package/src/Pagination.tsx +1 -1
  132. package/src/Permissions.ts +3 -0
  133. package/src/PickerSelect.tsx +20 -17
  134. package/src/SelectBadge.test.tsx +1 -0
  135. package/src/SelectField.tsx +1 -1
  136. package/src/Signature.test.tsx +1 -0
  137. package/src/SplitPage.native.tsx +2 -0
  138. package/src/SplitPage.tsx +6 -1
  139. package/src/TapToEdit.test.tsx +48 -0
  140. package/src/TapToEdit.tsx +13 -14
  141. package/src/Toast.tsx +1 -1
  142. package/src/ToastNotifications.test.tsx +738 -0
  143. package/src/ToastNotifications.tsx +3 -6
  144. package/src/Tooltip.test.tsx +586 -8
  145. package/src/Tooltip.tsx +2 -2
  146. package/src/Unifier.ts +20 -16
  147. package/src/Utilities.tsx +20 -19
  148. package/src/WebAddressAutocomplete.test.tsx +138 -0
  149. package/src/WebDropdownMenu.test.tsx +23 -0
  150. package/src/__snapshots__/AddressField.test.tsx.snap +3 -1
  151. package/src/__snapshots__/Button.test.tsx.snap +92 -50
  152. package/src/__snapshots__/CustomSelectField.test.tsx.snap +21 -7
  153. package/src/__snapshots__/DecimalRangeActionSheet.test.tsx.snap +14 -8
  154. package/src/__snapshots__/ErrorPage.test.tsx.snap +7 -4
  155. package/src/__snapshots__/Field.test.tsx.snap +18 -6
  156. package/src/__snapshots__/HeightActionSheet.test.tsx.snap +14 -8
  157. package/src/__snapshots__/HeightField.test.tsx.snap +35 -20
  158. package/src/__snapshots__/InfoModalIcon.test.tsx.snap +28 -16
  159. package/src/__snapshots__/Modal.test.tsx.snap +19 -10
  160. package/src/__snapshots__/ModalSheet.test.tsx.snap +0 -1
  161. package/src/__snapshots__/NumberPickerActionSheet.test.tsx.snap +14 -8
  162. package/src/__snapshots__/Page.test.tsx.snap +7 -4
  163. package/src/__snapshots__/SelectField.test.tsx.snap +18 -6
  164. package/src/__snapshots__/TerrenoProvider.test.tsx.snap +0 -2
  165. package/src/__snapshots__/TimezonePicker.test.tsx.snap +18 -6
  166. package/src/bunSetup.ts +25 -2
  167. package/src/index.tsx +2 -1
  168. package/src/login/LoginScreen.test.tsx +23 -1
  169. package/src/login/__snapshots__/LoginScreen.test.tsx.snap +15 -6
  170. package/src/signUp/PasswordRequirements.tsx +9 -6
  171. package/src/signUp/__snapshots__/PasswordRequirements.test.tsx.snap +50 -2
  172. package/src/signUp/__snapshots__/SignUpScreen.test.tsx.snap +35 -5
  173. package/src/table/TableHeaderCell.tsx +8 -11
  174. package/src/table/TableRow.test.tsx +31 -1
  175. package/src/table/__snapshots__/TableBadge.test.tsx.snap +3 -1
  176. package/src/table/__snapshots__/TableHeaderCell.test.tsx.snap +2 -0
  177. package/src/table/tableContext.tsx +2 -2
  178. package/src/types/react-native-swiper-flatlist.d.ts +1 -0
  179. package/src/useStoredState.test.tsx +47 -0
@@ -267,7 +267,9 @@ exports[`SelectField renders correctly with default props 1`] = `
267
267
  },
268
268
  ],
269
269
  "props": {
270
- "style": undefined,
270
+ "style": {
271
+ "width": "100%",
272
+ },
271
273
  "testID": undefined,
272
274
  },
273
275
  "type": "View",
@@ -556,7 +558,9 @@ exports[`SelectField renders with title 1`] = `
556
558
  },
557
559
  ],
558
560
  "props": {
559
- "style": undefined,
561
+ "style": {
562
+ "width": "100%",
563
+ },
560
564
  "testID": undefined,
561
565
  },
562
566
  "type": "View",
@@ -830,7 +834,9 @@ exports[`SelectField renders with selected value 1`] = `
830
834
  },
831
835
  ],
832
836
  "props": {
833
- "style": undefined,
837
+ "style": {
838
+ "width": "100%",
839
+ },
834
840
  "testID": undefined,
835
841
  },
836
842
  "type": "View",
@@ -1104,7 +1110,9 @@ exports[`SelectField renders with custom placeholder 1`] = `
1104
1110
  },
1105
1111
  ],
1106
1112
  "props": {
1107
- "style": undefined,
1113
+ "style": {
1114
+ "width": "100%",
1115
+ },
1108
1116
  "testID": undefined,
1109
1117
  },
1110
1118
  "type": "View",
@@ -1380,7 +1388,9 @@ exports[`SelectField renders disabled state 1`] = `
1380
1388
  },
1381
1389
  ],
1382
1390
  "props": {
1383
- "style": undefined,
1391
+ "style": {
1392
+ "width": "100%",
1393
+ },
1384
1394
  "testID": undefined,
1385
1395
  },
1386
1396
  "type": "View",
@@ -1644,7 +1654,9 @@ exports[`SelectField renders with requireValue (no clear option) 1`] = `
1644
1654
  },
1645
1655
  ],
1646
1656
  "props": {
1647
- "style": undefined,
1657
+ "style": {
1658
+ "width": "100%",
1659
+ },
1648
1660
  "testID": undefined,
1649
1661
  },
1650
1662
  "type": "View",
@@ -27,7 +27,6 @@ exports[`TerrenoProvider renders correctly with default props 1`] = `
27
27
  },
28
28
  ],
29
29
  "props": {
30
- "style": undefined,
31
30
  "testID": "portal-host",
32
31
  },
33
32
  "type": "View",
@@ -116,7 +115,6 @@ exports[`TerrenoProvider renders with openAPISpecUrl 1`] = `
116
115
  },
117
116
  ],
118
117
  "props": {
119
- "style": undefined,
120
118
  "testID": "portal-host",
121
119
  },
122
120
  "type": "View",
@@ -322,7 +322,9 @@ exports[`TimezonePicker renders correctly with default props 1`] = `
322
322
  },
323
323
  ],
324
324
  "props": {
325
- "style": undefined,
325
+ "style": {
326
+ "width": "100%",
327
+ },
326
328
  "testID": undefined,
327
329
  },
328
330
  "type": "View",
@@ -636,7 +638,9 @@ exports[`TimezonePicker hides title when hideTitle is true 1`] = `
636
638
  },
637
639
  ],
638
640
  "props": {
639
- "style": undefined,
641
+ "style": {
642
+ "width": "100%",
643
+ },
640
644
  "testID": undefined,
641
645
  },
642
646
  "type": "View",
@@ -965,7 +969,9 @@ exports[`TimezonePicker renders with selected timezone 1`] = `
965
969
  },
966
970
  ],
967
971
  "props": {
968
- "style": undefined,
972
+ "style": {
973
+ "width": "100%",
974
+ },
969
975
  "testID": undefined,
970
976
  },
971
977
  "type": "View",
@@ -1294,7 +1300,9 @@ exports[`TimezonePicker renders USA timezones by default 1`] = `
1294
1300
  },
1295
1301
  ],
1296
1302
  "props": {
1297
- "style": undefined,
1303
+ "style": {
1304
+ "width": "100%",
1305
+ },
1298
1306
  "testID": undefined,
1299
1307
  },
1300
1308
  "type": "View",
@@ -1623,7 +1631,9 @@ exports[`TimezonePicker renders with short timezone labels 1`] = `
1623
1631
  },
1624
1632
  ],
1625
1633
  "props": {
1626
- "style": undefined,
1634
+ "style": {
1635
+ "width": "100%",
1636
+ },
1627
1637
  "testID": undefined,
1628
1638
  },
1629
1639
  "type": "View",
@@ -1952,7 +1962,9 @@ exports[`TimezonePicker calls onChange when timezone is selected 1`] = `
1952
1962
  },
1953
1963
  ],
1954
1964
  "props": {
1955
- "style": undefined,
1965
+ "style": {
1966
+ "width": "100%",
1967
+ },
1956
1968
  "testID": undefined,
1957
1969
  },
1958
1970
  "type": "View",
package/src/bunSetup.ts CHANGED
@@ -6,6 +6,10 @@ type MockComponentProps = Record<string, unknown> & {
6
6
  style?: unknown;
7
7
  testID?: string;
8
8
  };
9
+ type MockPresstoPressableProps = MockComponentProps & {
10
+ enabled?: boolean;
11
+ onPress?: (...args: unknown[]) => unknown;
12
+ };
9
13
  type MockStyleValue = unknown;
10
14
  type MockAnimation = {
11
15
  start?: (callback?: (result: {finished: boolean}) => void) => void;
@@ -447,6 +451,25 @@ mock.module("react-native", () => {
447
451
  };
448
452
  });
449
453
 
454
+ const createMockPresstoPressable = (name: string): React.FC<MockPresstoPressableProps> => {
455
+ return ({children, enabled = true, onPress, ...props}) =>
456
+ React.createElement(
457
+ name,
458
+ {
459
+ ...props,
460
+ disabled: !enabled,
461
+ onPress: enabled ? onPress : undefined,
462
+ },
463
+ children
464
+ );
465
+ };
466
+
467
+ mock.module("pressto", () => ({
468
+ PressableOpacity: createMockPresstoPressable("PressableOpacity"),
469
+ PressableScale: createMockPresstoPressable("PressableScale"),
470
+ PressableWithoutFeedback: createMockPresstoPressable("PressableWithoutFeedback"),
471
+ }));
472
+
450
473
  // Initialize globalThis.expo early for expo-modules-core
451
474
  if (typeof globalThis.expo === "undefined") {
452
475
  const EventEmitterClass = class EventEmitter {
@@ -547,9 +570,9 @@ mock.module("react-signature-canvas", () => {
547
570
  // mock used by Tooltip.test.tsx so the two don't disagree.
548
571
  mock.module("react-native-portalize", () => ({
549
572
  Host: ({children}: MockComponentProps) =>
550
- React.createElement("View", {style: undefined, testID: "portal-host"}, children),
573
+ React.createElement("View", {testID: "portal-host"}, children),
551
574
  Portal: ({children}: MockComponentProps) =>
552
- React.createElement("View", {style: undefined, testID: "portal"}, children),
575
+ React.createElement("View", {testID: "portal"}, children),
553
576
  }));
554
577
 
555
578
  // Mock IconButton component
package/src/index.tsx CHANGED
@@ -58,6 +58,7 @@ export * from "./ModalSheet";
58
58
  export * from "./MultiselectField";
59
59
  export * from "./NumberField";
60
60
  export * from "./NumberPickerActionSheet";
61
+ export * from "./OfflineBanner";
61
62
  export * from "./OpenAPIContext";
62
63
  export * from "./Page";
63
64
  export * from "./Pagination";
@@ -86,7 +87,7 @@ export * from "./TextArea";
86
87
  export * from "./TextField";
87
88
  export * from "./Theme";
88
89
  export * from "./Toast";
89
- export * from "./Tooltip";
90
+ export {Tooltip} from "./Tooltip";
90
91
  export * from "./table/Table";
91
92
  export * from "./table/Table";
92
93
  export * from "./table/TableBadge";
@@ -1,5 +1,5 @@
1
1
  import {describe, expect, it, mock} from "bun:test";
2
- import {fireEvent} from "@testing-library/react-native";
2
+ import {act, fireEvent, waitFor} from "@testing-library/react-native";
3
3
  import {renderWithTheme} from "../test-utils";
4
4
  import {LoginScreen} from "./LoginScreen";
5
5
 
@@ -145,4 +145,26 @@ describe("LoginScreen", () => {
145
145
  );
146
146
  expect(toJSON()).toMatchSnapshot();
147
147
  });
148
+
149
+ it("calls onSubmit with form values when submit button is pressed", async () => {
150
+ const onSubmit = mock(() => Promise.resolve());
151
+ const {getByTestId} = renderWithTheme(
152
+ <LoginScreen fields={defaultFields} onSubmit={onSubmit} />
153
+ );
154
+
155
+ await act(async () => {
156
+ fireEvent.changeText(getByTestId("login-screen-email-input"), "user@test.com");
157
+ });
158
+ await act(async () => {
159
+ fireEvent.changeText(getByTestId("login-screen-password-input"), "secret123");
160
+ });
161
+ await act(async () => {
162
+ fireEvent.press(getByTestId("login-screen-submit-button"));
163
+ });
164
+
165
+ await waitFor(() => {
166
+ expect(onSubmit).toHaveBeenCalledTimes(1);
167
+ });
168
+ expect(onSubmit.mock.calls[0][0]).toEqual({email: "user@test.com", password: "secret123"});
169
+ });
148
170
  });
@@ -354,8 +354,11 @@ exports[`LoginScreen renders correctly with all props 1`] = `
354
354
  ],
355
355
  "props": {
356
356
  "accessibilityHint": "Press to perform action",
357
- "aria-label": "Log In",
358
- "aria-role": "button",
357
+ "accessibilityLabel": "Log In",
358
+ "accessibilityRole": "button",
359
+ "accessibilityState": {
360
+ "disabled": true,
361
+ },
359
362
  "disabled": true,
360
363
  "onPress": [Function: debounced],
361
364
  "style": {
@@ -433,8 +436,11 @@ exports[`LoginScreen renders correctly with all props 1`] = `
433
436
  ],
434
437
  "props": {
435
438
  "accessibilityHint": "Press to perform action",
436
- "aria-label": "Forgot password?",
437
- "aria-role": "button",
439
+ "accessibilityLabel": "Forgot password?",
440
+ "accessibilityRole": "button",
441
+ "accessibilityState": {
442
+ "disabled": true,
443
+ },
438
444
  "disabled": true,
439
445
  "onPress": [Function: debounced],
440
446
  "style": {
@@ -513,8 +519,11 @@ exports[`LoginScreen renders correctly with all props 1`] = `
513
519
  ],
514
520
  "props": {
515
521
  "accessibilityHint": "Press to perform action",
516
- "aria-label": "Need an account? Sign Up",
517
- "aria-role": "button",
522
+ "accessibilityLabel": "Need an account? Sign Up",
523
+ "accessibilityRole": "button",
524
+ "accessibilityState": {
525
+ "disabled": true,
526
+ },
518
527
  "disabled": true,
519
528
  "onPress": [Function: debounced],
520
529
  "style": {
@@ -1,6 +1,6 @@
1
1
  import type {FC} from "react";
2
- import {View} from "react-native";
3
2
 
3
+ import {Box} from "../Box";
4
4
  import {Icon} from "../Icon";
5
5
  import {Text} from "../Text";
6
6
  import type {PasswordRequirement} from "./signUpTypes";
@@ -23,13 +23,16 @@ export const PasswordRequirements: FC<PasswordRequirementsProps> = ({
23
23
  testID = "password-requirements",
24
24
  }) => {
25
25
  return (
26
- <View testID={testID}>
26
+ <Box testID={testID}>
27
27
  {requirements.map((req) => {
28
28
  const isMet = password.length > 0 && req.validate(password);
29
29
  return (
30
- <View
30
+ <Box
31
+ alignItems="center"
32
+ direction="row"
33
+ gap={2}
31
34
  key={req.key}
32
- style={{alignItems: "center", flexDirection: "row", gap: 8, marginBottom: 4}}
35
+ marginBottom={1}
33
36
  testID={`${testID}-${req.key}`}
34
37
  >
35
38
  <Icon
@@ -41,9 +44,9 @@ export const PasswordRequirements: FC<PasswordRequirementsProps> = ({
41
44
  <Text color={isMet ? "success" : "secondaryLight"} size="sm">
42
45
  {req.label}
43
46
  </Text>
44
- </View>
47
+ </Box>
45
48
  );
46
49
  })}
47
- </View>
50
+ </Box>
48
51
  );
49
52
  };
@@ -34,11 +34,15 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
34
34
  },
35
35
  ],
36
36
  "props": {
37
+ "onPointerEnter": [Function: AsyncFunction],
38
+ "onPointerLeave": [Function: AsyncFunction],
37
39
  "style": {
38
40
  "alignItems": "center",
41
+ "display": "flex",
39
42
  "flexDirection": "row",
40
43
  "gap": 8,
41
44
  "marginBottom": 4,
45
+ "testID": "password-requirements-minLength",
42
46
  },
43
47
  "testID": "password-requirements-minLength",
44
48
  },
@@ -74,11 +78,15 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
74
78
  },
75
79
  ],
76
80
  "props": {
81
+ "onPointerEnter": [Function: AsyncFunction],
82
+ "onPointerLeave": [Function: AsyncFunction],
77
83
  "style": {
78
84
  "alignItems": "center",
85
+ "display": "flex",
79
86
  "flexDirection": "row",
80
87
  "gap": 8,
81
88
  "marginBottom": 4,
89
+ "testID": "password-requirements-uppercase",
82
90
  },
83
91
  "testID": "password-requirements-uppercase",
84
92
  },
@@ -114,11 +122,15 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
114
122
  },
115
123
  ],
116
124
  "props": {
125
+ "onPointerEnter": [Function: AsyncFunction],
126
+ "onPointerLeave": [Function: AsyncFunction],
117
127
  "style": {
118
128
  "alignItems": "center",
129
+ "display": "flex",
119
130
  "flexDirection": "row",
120
131
  "gap": 8,
121
132
  "marginBottom": 4,
133
+ "testID": "password-requirements-lowercase",
122
134
  },
123
135
  "testID": "password-requirements-lowercase",
124
136
  },
@@ -154,11 +166,15 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
154
166
  },
155
167
  ],
156
168
  "props": {
169
+ "onPointerEnter": [Function: AsyncFunction],
170
+ "onPointerLeave": [Function: AsyncFunction],
157
171
  "style": {
158
172
  "alignItems": "center",
173
+ "display": "flex",
159
174
  "flexDirection": "row",
160
175
  "gap": 8,
161
176
  "marginBottom": 4,
177
+ "testID": "password-requirements-number",
162
178
  },
163
179
  "testID": "password-requirements-number",
164
180
  },
@@ -194,11 +210,15 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
194
210
  },
195
211
  ],
196
212
  "props": {
213
+ "onPointerEnter": [Function: AsyncFunction],
214
+ "onPointerLeave": [Function: AsyncFunction],
197
215
  "style": {
198
216
  "alignItems": "center",
217
+ "display": "flex",
199
218
  "flexDirection": "row",
200
219
  "gap": 8,
201
220
  "marginBottom": 4,
221
+ "testID": "password-requirements-special",
202
222
  },
203
223
  "testID": "password-requirements-special",
204
224
  },
@@ -206,7 +226,11 @@ exports[`PasswordRequirements renders correctly with empty password 1`] = `
206
226
  },
207
227
  ],
208
228
  "props": {
209
- "style": undefined,
229
+ "onPointerEnter": [Function: AsyncFunction],
230
+ "onPointerLeave": [Function: AsyncFunction],
231
+ "style": {
232
+ "testID": "password-requirements",
233
+ },
210
234
  "testID": "password-requirements",
211
235
  },
212
236
  "type": "View",
@@ -247,11 +271,15 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
247
271
  },
248
272
  ],
249
273
  "props": {
274
+ "onPointerEnter": [Function: AsyncFunction],
275
+ "onPointerLeave": [Function: AsyncFunction],
250
276
  "style": {
251
277
  "alignItems": "center",
278
+ "display": "flex",
252
279
  "flexDirection": "row",
253
280
  "gap": 8,
254
281
  "marginBottom": 4,
282
+ "testID": "password-requirements-minLength",
255
283
  },
256
284
  "testID": "password-requirements-minLength",
257
285
  },
@@ -287,11 +315,15 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
287
315
  },
288
316
  ],
289
317
  "props": {
318
+ "onPointerEnter": [Function: AsyncFunction],
319
+ "onPointerLeave": [Function: AsyncFunction],
290
320
  "style": {
291
321
  "alignItems": "center",
322
+ "display": "flex",
292
323
  "flexDirection": "row",
293
324
  "gap": 8,
294
325
  "marginBottom": 4,
326
+ "testID": "password-requirements-uppercase",
295
327
  },
296
328
  "testID": "password-requirements-uppercase",
297
329
  },
@@ -327,11 +359,15 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
327
359
  },
328
360
  ],
329
361
  "props": {
362
+ "onPointerEnter": [Function: AsyncFunction],
363
+ "onPointerLeave": [Function: AsyncFunction],
330
364
  "style": {
331
365
  "alignItems": "center",
366
+ "display": "flex",
332
367
  "flexDirection": "row",
333
368
  "gap": 8,
334
369
  "marginBottom": 4,
370
+ "testID": "password-requirements-lowercase",
335
371
  },
336
372
  "testID": "password-requirements-lowercase",
337
373
  },
@@ -367,11 +403,15 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
367
403
  },
368
404
  ],
369
405
  "props": {
406
+ "onPointerEnter": [Function: AsyncFunction],
407
+ "onPointerLeave": [Function: AsyncFunction],
370
408
  "style": {
371
409
  "alignItems": "center",
410
+ "display": "flex",
372
411
  "flexDirection": "row",
373
412
  "gap": 8,
374
413
  "marginBottom": 4,
414
+ "testID": "password-requirements-number",
375
415
  },
376
416
  "testID": "password-requirements-number",
377
417
  },
@@ -407,11 +447,15 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
407
447
  },
408
448
  ],
409
449
  "props": {
450
+ "onPointerEnter": [Function: AsyncFunction],
451
+ "onPointerLeave": [Function: AsyncFunction],
410
452
  "style": {
411
453
  "alignItems": "center",
454
+ "display": "flex",
412
455
  "flexDirection": "row",
413
456
  "gap": 8,
414
457
  "marginBottom": 4,
458
+ "testID": "password-requirements-special",
415
459
  },
416
460
  "testID": "password-requirements-special",
417
461
  },
@@ -419,7 +463,11 @@ exports[`PasswordRequirements renders correctly with a strong password 1`] = `
419
463
  },
420
464
  ],
421
465
  "props": {
422
- "style": undefined,
466
+ "onPointerEnter": [Function: AsyncFunction],
467
+ "onPointerLeave": [Function: AsyncFunction],
468
+ "style": {
469
+ "testID": "password-requirements",
470
+ },
423
471
  "testID": "password-requirements",
424
472
  },
425
473
  "type": "View",
@@ -397,11 +397,15 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
397
397
  },
398
398
  ],
399
399
  "props": {
400
+ "onPointerEnter": [Function: AsyncFunction],
401
+ "onPointerLeave": [Function: AsyncFunction],
400
402
  "style": {
401
403
  "alignItems": "center",
404
+ "display": "flex",
402
405
  "flexDirection": "row",
403
406
  "gap": 8,
404
407
  "marginBottom": 4,
408
+ "testID": "signup-screen-password-requirements-minLength",
405
409
  },
406
410
  "testID": "signup-screen-password-requirements-minLength",
407
411
  },
@@ -437,11 +441,15 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
437
441
  },
438
442
  ],
439
443
  "props": {
444
+ "onPointerEnter": [Function: AsyncFunction],
445
+ "onPointerLeave": [Function: AsyncFunction],
440
446
  "style": {
441
447
  "alignItems": "center",
448
+ "display": "flex",
442
449
  "flexDirection": "row",
443
450
  "gap": 8,
444
451
  "marginBottom": 4,
452
+ "testID": "signup-screen-password-requirements-uppercase",
445
453
  },
446
454
  "testID": "signup-screen-password-requirements-uppercase",
447
455
  },
@@ -477,11 +485,15 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
477
485
  },
478
486
  ],
479
487
  "props": {
488
+ "onPointerEnter": [Function: AsyncFunction],
489
+ "onPointerLeave": [Function: AsyncFunction],
480
490
  "style": {
481
491
  "alignItems": "center",
492
+ "display": "flex",
482
493
  "flexDirection": "row",
483
494
  "gap": 8,
484
495
  "marginBottom": 4,
496
+ "testID": "signup-screen-password-requirements-lowercase",
485
497
  },
486
498
  "testID": "signup-screen-password-requirements-lowercase",
487
499
  },
@@ -517,11 +529,15 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
517
529
  },
518
530
  ],
519
531
  "props": {
532
+ "onPointerEnter": [Function: AsyncFunction],
533
+ "onPointerLeave": [Function: AsyncFunction],
520
534
  "style": {
521
535
  "alignItems": "center",
536
+ "display": "flex",
522
537
  "flexDirection": "row",
523
538
  "gap": 8,
524
539
  "marginBottom": 4,
540
+ "testID": "signup-screen-password-requirements-number",
525
541
  },
526
542
  "testID": "signup-screen-password-requirements-number",
527
543
  },
@@ -557,11 +573,15 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
557
573
  },
558
574
  ],
559
575
  "props": {
576
+ "onPointerEnter": [Function: AsyncFunction],
577
+ "onPointerLeave": [Function: AsyncFunction],
560
578
  "style": {
561
579
  "alignItems": "center",
580
+ "display": "flex",
562
581
  "flexDirection": "row",
563
582
  "gap": 8,
564
583
  "marginBottom": 4,
584
+ "testID": "signup-screen-password-requirements-special",
565
585
  },
566
586
  "testID": "signup-screen-password-requirements-special",
567
587
  },
@@ -569,7 +589,11 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
569
589
  },
570
590
  ],
571
591
  "props": {
572
- "style": undefined,
592
+ "onPointerEnter": [Function: AsyncFunction],
593
+ "onPointerLeave": [Function: AsyncFunction],
594
+ "style": {
595
+ "testID": "signup-screen-password-requirements",
596
+ },
573
597
  "testID": "signup-screen-password-requirements",
574
598
  },
575
599
  "type": "View",
@@ -669,8 +693,11 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
669
693
  ],
670
694
  "props": {
671
695
  "accessibilityHint": "Press to perform action",
672
- "aria-label": "Sign Up",
673
- "aria-role": "button",
696
+ "accessibilityLabel": "Sign Up",
697
+ "accessibilityRole": "button",
698
+ "accessibilityState": {
699
+ "disabled": true,
700
+ },
674
701
  "disabled": true,
675
702
  "onPress": [Function: debounced],
676
703
  "style": {
@@ -748,8 +775,11 @@ exports[`SignUpScreen renders correctly with all props 1`] = `
748
775
  ],
749
776
  "props": {
750
777
  "accessibilityHint": "Press to perform action",
751
- "aria-label": "Already have an account? Log in",
752
- "aria-role": "button",
778
+ "accessibilityLabel": "Already have an account? Log in",
779
+ "accessibilityRole": "button",
780
+ "accessibilityState": {
781
+ "disabled": true,
782
+ },
753
783
  "disabled": true,
754
784
  "onPress": [Function: debounced],
755
785
  "style": {
@@ -1,7 +1,6 @@
1
1
  // TableHeaderCell.tsx
2
2
  import {FontAwesome6} from "@expo/vector-icons";
3
3
  import {type ReactElement, useCallback} from "react";
4
- import {View} from "react-native";
5
4
 
6
5
  import {Box} from "../Box";
7
6
  import type {AlignItems, TableHeaderCellProps} from "../Common";
@@ -69,15 +68,13 @@ export const TableHeaderCell = ({
69
68
  {Boolean(sort) && (
70
69
  <Box alignSelf="end" paddingX={2}>
71
70
  {/* Make it look like an IconButton, but we can't nest buttons and the whole row is clickable. */}
72
- <View
73
- style={{
74
- alignItems: "center",
75
- backgroundColor: theme.surface.primary,
76
- borderRadius: theme.radius.rounded,
77
- height: 16,
78
- justifyContent: "center",
79
- width: 16,
80
- }}
71
+ <Box
72
+ alignItems="center"
73
+ color="primary"
74
+ height={16}
75
+ justifyContent="center"
76
+ rounding="rounded"
77
+ width={16}
81
78
  >
82
79
  <FontAwesome6
83
80
  color={theme.text.inverted}
@@ -86,7 +83,7 @@ export const TableHeaderCell = ({
86
83
  size={10}
87
84
  solid
88
85
  />
89
- </View>
86
+ </Box>
90
87
  </Box>
91
88
  )}
92
89
  </Box>