@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
@@ -1,5 +1,7 @@
1
- import {describe, expect, it} from "bun:test";
1
+ import {describe, expect, it, type mock} from "bun:test";
2
+ import {act} from "@testing-library/react-native";
2
3
 
4
+ import {IconButton} from "../IconButton";
3
5
  import {Text} from "../Text";
4
6
  import {renderWithTheme} from "../test-utils";
5
7
  import {Table} from "./Table";
@@ -113,4 +115,32 @@ describe("TableRow", () => {
113
115
  // Snapshot captures the blank placeholder cell for the row without drawer contents
114
116
  expect(toJSON()).toMatchSnapshot();
115
117
  });
118
+
119
+ it("toggles drawer contents when the expand button is pressed", () => {
120
+ const iconButtonMock = IconButton as unknown as ReturnType<typeof mock>;
121
+ iconButtonMock.mockClear();
122
+
123
+ const {queryByText} = renderWithTheme(
124
+ <Table columns={[100]}>
125
+ <TableHeader>
126
+ <TableHeaderCell index={0} title="Name" />
127
+ </TableHeader>
128
+ <TableRow drawerContents={<Text>Hidden content</Text>}>
129
+ <TableText value="Row" />
130
+ </TableRow>
131
+ </Table>
132
+ );
133
+
134
+ expect(queryByText("Hidden content")).toBeNull();
135
+
136
+ act(() => {
137
+ iconButtonMock.mock.calls[iconButtonMock.mock.calls.length - 1][0].onClick();
138
+ });
139
+ expect(queryByText("Hidden content")).toBeTruthy();
140
+
141
+ act(() => {
142
+ iconButtonMock.mock.calls[iconButtonMock.mock.calls.length - 1][0].onClick();
143
+ });
144
+ expect(queryByText("Hidden content")).toBeNull();
145
+ });
116
146
  });
@@ -691,7 +691,9 @@ exports[`TableBadge renders select field when editing 1`] = `
691
691
  },
692
692
  ],
693
693
  "props": {
694
- "style": undefined,
694
+ "style": {
695
+ "width": "100%",
696
+ },
695
697
  "testID": undefined,
696
698
  },
697
699
  "type": "View",
@@ -1544,6 +1544,8 @@ exports[`TableHeaderCell renders sortable header with sort indicator when sorted
1544
1544
  "$$typeof": Symbol(react.test.json),
1545
1545
  "children": null,
1546
1546
  "props": {
1547
+ "onPointerEnter": [Function: AsyncFunction],
1548
+ "onPointerLeave": [Function: AsyncFunction],
1547
1549
  "style": {
1548
1550
  "alignItems": "center",
1549
1551
  "backgroundColor": "#0E9DCD",
@@ -45,7 +45,7 @@ export const TableContextProvider = ({
45
45
  );
46
46
  };
47
47
 
48
- export function useTableContext(): TableContextType {
48
+ export const useTableContext = (): TableContextType => {
49
49
  const {
50
50
  columns,
51
51
  hasDrawerContents,
@@ -64,4 +64,4 @@ export function useTableContext(): TableContextType {
64
64
  sortColumn,
65
65
  stickyHeader,
66
66
  };
67
- }
67
+ };
@@ -41,6 +41,7 @@ declare module "react-native-swiper-flatlist" {
41
41
  }
42
42
 
43
43
  export const SwiperFlatList: React.ForwardRefExoticComponent<
44
+ // biome-ignore lint/suspicious/noExplicitAny: declaration must use any for the generic to allow consumers to specify their data type without explicit type args
44
45
  SwiperFlatListProps<any> & React.RefAttributes<SwiperFlatListRefProps>
45
46
  >;
46
47
 
@@ -140,4 +140,51 @@ describe("useStoredState", () => {
140
140
  expect(result.current[0]).toBe("initial value");
141
141
  expect(result.current[2]).toBe(true);
142
142
  });
143
+
144
+ it("should handle the outer catch when fetchData rejects unexpectedly", async () => {
145
+ const originalConsoleError = console.error;
146
+ console.error = mock((...args: unknown[]) => {
147
+ const msg = String(args[0]);
148
+ if (msg.includes("Error reading data from AsyncStorage")) {
149
+ throw new Error("unexpected failure in error handler");
150
+ }
151
+ });
152
+
153
+ getItemMock = mock(() => Promise.reject(new Error("Storage read failure")));
154
+ Unifier.storage.getItem = getItemMock;
155
+
156
+ const {result} = renderHook(() => useStoredState("testKey", "fallback"));
157
+
158
+ await act(async () => {
159
+ await new Promise((resolve) => setTimeout(resolve, 50));
160
+ });
161
+
162
+ expect(result.current[2]).toBe(false);
163
+ console.error = originalConsoleError;
164
+ });
165
+
166
+ it("should not update state in outer catch if unmounted", async () => {
167
+ const originalConsoleError = console.error;
168
+ console.error = mock((...args: unknown[]) => {
169
+ const msg = String(args[0]);
170
+ if (msg.includes("Error reading data from AsyncStorage")) {
171
+ throw new Error("force outer catch");
172
+ }
173
+ });
174
+
175
+ getItemMock = mock(() => Promise.reject(new Error("fail")));
176
+ Unifier.storage.getItem = getItemMock;
177
+
178
+ const {result, unmount} = renderHook(() => useStoredState("testKey", "init"));
179
+
180
+ unmount();
181
+
182
+ await act(async () => {
183
+ await new Promise((resolve) => setTimeout(resolve, 50));
184
+ });
185
+
186
+ expect(result.current[0]).toBe("init");
187
+ expect(result.current[2]).toBe(true);
188
+ console.error = originalConsoleError;
189
+ });
143
190
  });