ferns-ui 1.15.0 → 2.0.0-beta.2

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 (178) hide show
  1. package/dist/ActionSheet.js +11 -14
  2. package/dist/ActionSheet.js.map +1 -1
  3. package/dist/AddressField.js +1 -1
  4. package/dist/AddressField.js.map +1 -1
  5. package/dist/Badge.js +1 -1
  6. package/dist/Badge.js.map +1 -1
  7. package/dist/Banner.js +1 -1
  8. package/dist/Banner.js.map +1 -1
  9. package/dist/Box.js +3 -3
  10. package/dist/Box.js.map +1 -1
  11. package/dist/Button.js +1 -0
  12. package/dist/Button.js.map +1 -1
  13. package/dist/CheckBox.js.map +1 -1
  14. package/dist/Common.d.ts +7 -7
  15. package/dist/Common.js.map +1 -1
  16. package/dist/DataTable.js +2 -1
  17. package/dist/DataTable.js.map +1 -1
  18. package/dist/DateTimeField.js +22 -22
  19. package/dist/DateTimeField.js.map +1 -1
  20. package/dist/ErrorBoundary.d.ts +1 -1
  21. package/dist/FernsProvider.js +1 -1
  22. package/dist/FernsProvider.js.map +1 -1
  23. package/dist/Heading.js +1 -3
  24. package/dist/Heading.js.map +1 -1
  25. package/dist/Hyperlink.js +1 -1
  26. package/dist/Hyperlink.js.map +1 -1
  27. package/dist/IconButton.js +1 -1
  28. package/dist/IconButton.js.map +1 -1
  29. package/dist/Image.js.map +1 -1
  30. package/dist/MobileAddressAutoComplete.js +1 -1
  31. package/dist/MobileAddressAutoComplete.js.map +1 -1
  32. package/dist/Modal.d.ts +1 -1
  33. package/dist/Modal.js +15 -35
  34. package/dist/Modal.js.map +1 -1
  35. package/dist/ModalSheet.d.ts +1 -1
  36. package/dist/ModalSheet.js +1 -1
  37. package/dist/ModalSheet.js.map +1 -1
  38. package/dist/NumberField.js +4 -10
  39. package/dist/NumberField.js.map +1 -1
  40. package/dist/NumberPickerActionSheet.d.ts +3 -1
  41. package/dist/NumberPickerActionSheet.js +3 -0
  42. package/dist/NumberPickerActionSheet.js.map +1 -1
  43. package/dist/Page.js +1 -1
  44. package/dist/Page.js.map +1 -1
  45. package/dist/Pagination.js +2 -2
  46. package/dist/Pagination.js.map +1 -1
  47. package/dist/Permissions.d.ts +1 -1
  48. package/dist/Permissions.js +2 -2
  49. package/dist/Permissions.js.map +1 -1
  50. package/dist/PickerSelect.js +1 -1
  51. package/dist/PickerSelect.js.map +1 -1
  52. package/dist/SectionDivider.js +1 -1
  53. package/dist/SectionDivider.js.map +1 -1
  54. package/dist/SegmentedControl.js.map +1 -1
  55. package/dist/Signature.native.js +2 -2
  56. package/dist/Signature.native.js.map +1 -1
  57. package/dist/SignatureField.js +2 -2
  58. package/dist/SignatureField.js.map +1 -1
  59. package/dist/Slider.js +3 -3
  60. package/dist/Slider.js.map +1 -1
  61. package/dist/SplitPage.js +7 -7
  62. package/dist/SplitPage.js.map +1 -1
  63. package/dist/SplitPage.native.js +6 -4
  64. package/dist/SplitPage.native.js.map +1 -1
  65. package/dist/TapToEdit.js +3 -3
  66. package/dist/TapToEdit.js.map +1 -1
  67. package/dist/Text.js +1 -1
  68. package/dist/Text.js.map +1 -1
  69. package/dist/TextFieldNumberActionSheet.d.ts +4 -2
  70. package/dist/TextFieldNumberActionSheet.js +4 -1
  71. package/dist/TextFieldNumberActionSheet.js.map +1 -1
  72. package/dist/Tooltip.js +21 -39
  73. package/dist/Tooltip.js.map +1 -1
  74. package/dist/Unifier.d.ts +1 -0
  75. package/dist/Unifier.js.map +1 -1
  76. package/dist/Utilities.d.ts +1 -1
  77. package/dist/Utilities.js +3 -2
  78. package/dist/Utilities.js.map +1 -1
  79. package/dist/WebAddressAutocomplete.js +1 -2
  80. package/dist/WebAddressAutocomplete.js.map +1 -1
  81. package/dist/index.d.ts +10 -10
  82. package/dist/index.js +9 -10
  83. package/dist/index.js.map +1 -1
  84. package/dist/jestSetup.d.ts +0 -0
  85. package/dist/jestSetup.js +21 -0
  86. package/dist/jestSetup.js.map +1 -0
  87. package/dist/setupTests.js +22 -0
  88. package/dist/setupTests.js.map +1 -1
  89. package/dist/table/Table.js +15 -14
  90. package/dist/table/Table.js.map +1 -1
  91. package/dist/table/TableHeaderCell.js +2 -2
  92. package/dist/table/TableHeaderCell.js.map +1 -1
  93. package/dist/test-utils.d.ts +4 -1
  94. package/dist/useStoredState.js +2 -4
  95. package/dist/useStoredState.js.map +1 -1
  96. package/package.json +106 -43
  97. package/src/ActionSheet.tsx +22 -26
  98. package/src/AddressField.tsx +1 -1
  99. package/src/Avatar.test.tsx +0 -2
  100. package/src/Badge.tsx +1 -1
  101. package/src/Banner.tsx +1 -1
  102. package/src/Box.test.tsx +70 -71
  103. package/src/Box.tsx +9 -21
  104. package/src/Button.tsx +1 -0
  105. package/src/CheckBox.tsx +1 -7
  106. package/src/Common.ts +19 -7
  107. package/src/DataTable.tsx +4 -3
  108. package/src/DateTimeField.tsx +22 -22
  109. package/src/FernsProvider.tsx +4 -1
  110. package/src/Heading.tsx +1 -3
  111. package/src/Hyperlink.tsx +2 -2
  112. package/src/IconButton.tsx +2 -2
  113. package/src/Image.tsx +0 -1
  114. package/src/MobileAddressAutoComplete.tsx +1 -1
  115. package/src/Modal.tsx +21 -58
  116. package/src/ModalSheet.tsx +1 -1
  117. package/src/NumberField.tsx +4 -10
  118. package/src/NumberPickerActionSheet.tsx +5 -1
  119. package/src/Page.tsx +1 -1
  120. package/src/Pagination.tsx +11 -2
  121. package/src/Permissions.ts +2 -2
  122. package/src/PickerSelect.tsx +1 -1
  123. package/src/SectionDivider.tsx +1 -1
  124. package/src/SegmentedControl.tsx +1 -3
  125. package/src/Signature.native.tsx +2 -2
  126. package/src/SignatureField.tsx +2 -2
  127. package/src/Slider.tsx +17 -10
  128. package/src/SplitPage.native.tsx +4 -2
  129. package/src/SplitPage.tsx +4 -4
  130. package/src/TapToEdit.tsx +7 -3
  131. package/src/Text.tsx +1 -1
  132. package/src/TextArea.test.tsx +43 -27
  133. package/src/TextField.test.tsx +4 -3
  134. package/src/TextFieldNumberActionSheet.tsx +7 -3
  135. package/src/Tooltip.tsx +29 -45
  136. package/src/Unifier.ts +3 -1
  137. package/src/Utilities.tsx +4 -3
  138. package/src/WebAddressAutocomplete.tsx +1 -1
  139. package/src/index.tsx +10 -11
  140. package/src/jestSetup.ts +16 -0
  141. package/src/setupTests.ts +24 -0
  142. package/src/table/Table.tsx +38 -36
  143. package/src/table/TableHeaderCell.tsx +2 -2
  144. package/src/useStoredState.ts +11 -13
  145. package/dist/Accordion.test.d.ts +0 -1
  146. package/dist/Accordion.test.js +0 -71
  147. package/dist/Accordion.test.js.map +0 -1
  148. package/dist/AddressField.test.d.ts +0 -1
  149. package/dist/AddressField.test.js +0 -65
  150. package/dist/AddressField.test.js.map +0 -1
  151. package/dist/Avatar.test.d.ts +0 -1
  152. package/dist/Avatar.test.js +0 -131
  153. package/dist/Avatar.test.js.map +0 -1
  154. package/dist/Badge.test.d.ts +0 -1
  155. package/dist/Badge.test.js +0 -76
  156. package/dist/Badge.test.js.map +0 -1
  157. package/dist/Box.test.d.ts +0 -1
  158. package/dist/Box.test.js +0 -528
  159. package/dist/Box.test.js.map +0 -1
  160. package/dist/DateTimeField.test.d.ts +0 -1
  161. package/dist/DateTimeField.test.js +0 -258
  162. package/dist/DateTimeField.test.js.map +0 -1
  163. package/dist/DateUtilities.test.d.ts +0 -1
  164. package/dist/DateUtilities.test.js +0 -279
  165. package/dist/DateUtilities.test.js.map +0 -1
  166. package/dist/MarkdownView.d.ts +0 -5
  167. package/dist/MarkdownView.js +0 -44
  168. package/dist/MarkdownView.js.map +0 -1
  169. package/dist/TextArea.test.d.ts +0 -1
  170. package/dist/TextArea.test.js +0 -146
  171. package/dist/TextArea.test.js.map +0 -1
  172. package/dist/TextField.test.d.ts +0 -1
  173. package/dist/TextField.test.js +0 -251
  174. package/dist/TextField.test.js.map +0 -1
  175. package/dist/useStoredState.test.d.ts +0 -1
  176. package/dist/useStoredState.test.js +0 -93
  177. package/dist/useStoredState.test.js.map +0 -1
  178. package/src/MarkdownView.tsx +0 -67
@@ -3,7 +3,7 @@ import {ScrollView} from "react-native";
3
3
  import {DimensionValue} from "react-native/Libraries/StyleSheet/StyleSheetTypes";
4
4
 
5
5
  import {Box} from "../Box";
6
- import {ColumnSortInterface, TableProps} from "../Common";
6
+ import {ColumnSortInterface, TableProps, TableRowProps} from "../Common";
7
7
  import {Pagination} from "../Pagination";
8
8
  import {TableContextProvider} from "./tableContext";
9
9
 
@@ -30,7 +30,7 @@ export const Table = ({
30
30
  // Check if any of the rows below have a drawerContents prop to see if we need to render space
31
31
  // for the caret.
32
32
  const hasDrawerContents = arrayChildren.some((child) => {
33
- return (child as ReactElement).props?.drawerContents;
33
+ return (child as ReactElement<TableRowProps>).props?.drawerContents;
34
34
  });
35
35
 
36
36
  // Calculate the total width of the table. If the table has only number widths, calculate a
@@ -68,42 +68,44 @@ export const Table = ({
68
68
  sortColumn={sortColumn}
69
69
  stickyHeader={stickyHeader}
70
70
  >
71
- <Box
72
- flex="grow"
73
- maxWidth="100%"
74
- style={{
75
- position: "relative",
76
- }}
77
- width={width}
78
- >
79
- <ScrollView horizontal style={{width, maxWidth: "100%"}}>
80
- {/* TODO: Replace table scrollview with flat list */}
81
- <ScrollView
82
- // nestedScrollEnabled
83
- stickyHeaderIndices={stickyHeader ? [0] : undefined}
84
- style={{width, maxWidth: "100%", flex: 1, maxHeight}}
85
- >
86
- {Children.map(
87
- children,
88
- (child, index) =>
89
- Boolean(child) &&
90
- React.cloneElement(child as ReactElement, {
91
- color: index % 2 === 1 && alternateRowBackground ? "neutralLight" : "base",
92
- })
93
- )}
71
+ <>
72
+ <Box
73
+ flex="grow"
74
+ maxWidth="100%"
75
+ style={{
76
+ position: "relative",
77
+ }}
78
+ width={width}
79
+ >
80
+ <ScrollView horizontal style={{width, maxWidth: "100%"}}>
81
+ {/* TODO: Replace table scrollview with flat list */}
82
+ <ScrollView
83
+ // nestedScrollEnabled
84
+ stickyHeaderIndices={stickyHeader ? [0] : undefined}
85
+ style={{width, maxWidth: "100%", flex: 1, maxHeight}}
86
+ >
87
+ {Children.map(
88
+ children,
89
+ (child, index) =>
90
+ Boolean(child) &&
91
+ React.cloneElement(child as ReactElement<TableRowProps>, {
92
+ color: index % 2 === 1 && alternateRowBackground ? "neutralLight" : "base",
93
+ })
94
+ )}
95
+ </ScrollView>
94
96
  </ScrollView>
95
- </ScrollView>
96
- </Box>
97
- {Boolean(shouldPaginate && totalPages !== undefined) && (
98
- <Box alignItems="center" borderTop="default" direction="row" height={60} paddingX={8}>
99
- <Pagination
100
- page={propsPage ?? page}
101
- setPage={propsSetPage ?? setPage}
102
- totalPages={totalPages!}
103
- />
104
- {Boolean(extraControls) && extraControls}
105
97
  </Box>
106
- )}
98
+ {Boolean(shouldPaginate && totalPages !== undefined) && (
99
+ <Box alignItems="center" borderTop="default" direction="row" height={60} paddingX={8}>
100
+ <Pagination
101
+ page={propsPage ?? page}
102
+ setPage={propsSetPage ?? setPage}
103
+ totalPages={totalPages!}
104
+ />
105
+ {Boolean(extraControls) && extraControls}
106
+ </Box>
107
+ )}
108
+ </>
107
109
  </TableContextProvider>
108
110
  );
109
111
  };
@@ -6,8 +6,8 @@ import {View} from "react-native";
6
6
  import {Box} from "../Box";
7
7
  import {AlignItems, TableHeaderCellProps} from "../Common";
8
8
  import {useTheme} from "../Theme";
9
- import {TableTitle} from "./TableTitle";
10
9
  import {useTableContext} from "./tableContext";
10
+ import {TableTitle} from "./TableTitle";
11
11
 
12
12
  /**
13
13
  * Use TableHeaderCell to define a header cell in Table.
@@ -48,7 +48,7 @@ export const TableHeaderCell = ({
48
48
  if (setSortColumn) {
49
49
  setSortColumn(newSort ? {column: index, direction: newSort} : undefined);
50
50
  }
51
- onSortChange?.(newSort);
51
+ onSortChange && onSortChange(newSort);
52
52
  }, [index, onSortChange, setSortColumn, sort]);
53
53
 
54
54
  if (sortable && !onSortChange) {
@@ -22,19 +22,17 @@ export const useStoredState = <T>(
22
22
 
23
23
  // Fetch data when the component mounts
24
24
  useEffect(() => {
25
- void fetchData()
26
- .then((value) => {
27
- if (isMounted.current) {
28
- setState(value);
29
- setIsLoading(false);
30
- }
31
- })
32
- .catch((error) => {
33
- console.error("Error fetching data:", error);
34
- if (isMounted.current) {
35
- setIsLoading(false);
36
- }
37
- });
25
+ void fetchData().then((value) => {
26
+ if (isMounted.current) {
27
+ setState(value);
28
+ setIsLoading(false);
29
+ }
30
+ }).catch((error) => {
31
+ console.error("Error fetching data:", error);
32
+ if (isMounted.current) {
33
+ setIsLoading(false);
34
+ }
35
+ });
38
36
 
39
37
  return () => {
40
38
  isMounted.current = false;
@@ -1 +0,0 @@
1
- export {};
@@ -1,71 +0,0 @@
1
- import { fireEvent } from "@testing-library/react-native";
2
- import React from "react";
3
- import { Text } from "react-native";
4
- import { Accordion } from "./Accordion";
5
- import { renderWithTheme } from "./test-utils";
6
- describe("Accordion", () => {
7
- const defaultProps = {
8
- title: "Test Title",
9
- children: React.createElement(Text, { testID: "test-content" }, "Test Content"),
10
- };
11
- it("renders correctly with default props", () => {
12
- const { toJSON } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps)));
13
- expect(toJSON()).toMatchSnapshot();
14
- });
15
- it("renders title and children", () => {
16
- const { getByText, getByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { isCollapsed: false })));
17
- expect(getByText("Test Title")).toBeTruthy();
18
- expect(getByTestId("test-content")).toBeTruthy();
19
- });
20
- it("renders subtitle when provided", () => {
21
- const { getByText } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { subtitle: "Test Subtitle" })));
22
- expect(getByText("Test Subtitle")).toBeTruthy();
23
- });
24
- it("collapses when isCollapsed is true", () => {
25
- const { queryByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { isCollapsed: true })));
26
- expect(queryByTestId("test-content")).toBeNull();
27
- });
28
- it("expands when isCollapsed is false", () => {
29
- const { getByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { isCollapsed: false })));
30
- expect(getByTestId("test-content")).toBeTruthy();
31
- });
32
- it("toggles visibility when header is pressed", () => {
33
- const { queryByTestId, getByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { isCollapsed: false })));
34
- // Content should be visible initially
35
- expect(getByTestId("test-content")).toBeTruthy();
36
- // Click the toggle button
37
- const toggleButton = getByTestId("accordion-toggle");
38
- fireEvent.press(toggleButton);
39
- // Content should be hidden after click
40
- expect(queryByTestId("test-content")).toBeNull();
41
- });
42
- it("renders info modal icon when includeInfoModal is true and infoModalTitle is provided", () => {
43
- const { getByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { includeInfoModal: true, infoModalTitle: "Test Info Title" })));
44
- // The info modal icon should be present
45
- expect(getByTestId("info-icon")).toBeTruthy();
46
- });
47
- it("toggles content visibility when header is clicked", () => {
48
- const { getByTestId, queryByText, getByText } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { isCollapsed: false })));
49
- // Content should be visible initially
50
- expect(queryByText("Test Content")).toBeTruthy();
51
- // Click the header to collapse
52
- const toggleButton = getByTestId("accordion-toggle");
53
- fireEvent.press(toggleButton);
54
- // Content should be hidden after click
55
- expect(queryByText("Test Content")).toBeNull();
56
- // Click again to expand
57
- fireEvent.press(toggleButton);
58
- expect(getByText("Test Content")).toBeTruthy();
59
- });
60
- it("renders info modal icon when includeInfoModal is true and infoModalTitle is provided", () => {
61
- const { getByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { includeInfoModal: true, infoModalTitle: "Info Title" })));
62
- // The info modal icon should be present
63
- expect(getByTestId("info-icon")).toBeTruthy();
64
- });
65
- it("does not render info modal icon when includeInfoModal is false", () => {
66
- const { queryByTestId } = renderWithTheme(React.createElement(Accordion, Object.assign({}, defaultProps, { includeInfoModal: false, infoModalTitle: "Info Title" })));
67
- // The info modal icon should not be present
68
- expect(queryByTestId("info-icon")).toBeNull();
69
- });
70
- });
71
- //# sourceMappingURL=Accordion.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Accordion.test.js","sourceRoot":"","sources":["../src/Accordion.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,65 +0,0 @@
1
- import { fireEvent } from "@testing-library/react-native";
2
- import React from "react";
3
- import { AddressField } from "./AddressField";
4
- import { renderWithTheme } from "./test-utils";
5
- describe("AddressField", () => {
6
- const defaultProps = {
7
- testID: "test-address",
8
- value: {
9
- address1: "123 Main St",
10
- address2: "Apt 4B",
11
- city: "Springfield",
12
- state: "IL",
13
- zipcode: "62701",
14
- countyName: "Sangamon",
15
- countyCode: "17167",
16
- },
17
- onChange: jest.fn(),
18
- onBlur: jest.fn(),
19
- };
20
- it("renders correctly with default props", () => {
21
- const { toJSON } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps)));
22
- expect(toJSON()).toMatchSnapshot();
23
- });
24
- it("renders all address fields", () => {
25
- const { getByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps)));
26
- expect(getByTestId("test-address-address1")).toBeTruthy();
27
- expect(getByTestId("test-address-address2")).toBeTruthy();
28
- expect(getByTestId("test-address-city")).toBeTruthy();
29
- expect(getByTestId("test-address-zip")).toBeTruthy();
30
- });
31
- it("calls onChange when address fields are updated", () => {
32
- const { getByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps)));
33
- const cityInput = getByTestId("test-address-city");
34
- fireEvent.changeText(cityInput, "New City");
35
- expect(defaultProps.onChange).toHaveBeenCalledWith(Object.assign(Object.assign({}, defaultProps.value), { city: "New City" }));
36
- });
37
- it("calls onBlur when a field is blurred", () => {
38
- const { getByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps)));
39
- // Reset mock since it was called during render
40
- defaultProps.onBlur.mockClear();
41
- const zipInput = getByTestId("test-address-zip");
42
- fireEvent.changeText(zipInput, "90210");
43
- fireEvent(zipInput, "blur");
44
- expect(defaultProps.onBlur).toHaveBeenCalledWith(Object.assign(Object.assign({}, defaultProps.value), { zipcode: "90210" }));
45
- });
46
- it("renders county fields when includeCounty is true", () => {
47
- const { getByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps, { includeCounty: true })));
48
- expect(getByTestId("test-address-county")).toBeTruthy();
49
- expect(getByTestId("test-address-county-code")).toBeTruthy();
50
- });
51
- it("does not render county fields when includeCounty is false", () => {
52
- const { queryByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps, { includeCounty: false })));
53
- expect(queryByTestId("test-address-county")).toBeNull();
54
- expect(queryByTestId("test-address-county-code")).toBeNull();
55
- });
56
- it("disables all fields when disabled prop is true", () => {
57
- const { getByTestId } = renderWithTheme(React.createElement(AddressField, Object.assign({}, defaultProps, { disabled: true })));
58
- const address1Input = getByTestId("test-address-address1");
59
- const cityInput = getByTestId("test-address-city");
60
- // Check that the disabled prop is passed down to the inputs
61
- expect(address1Input.props.accessibilityState.disabled).toBe(true);
62
- expect(cityInput.props.accessibilityState.disabled).toBe(true);
63
- });
64
- });
65
- //# sourceMappingURL=AddressField.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddressField.test.js","sourceRoot":"","sources":["../src/AddressField.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAE7C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,UAAU;YACtB,UAAU,EAAE,OAAO;SACpB;QACD,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;QACnB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;KAClB,CAAC;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAC,MAAM,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,EAAI,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,EAAI,CAAC,CAAC;QAE1E,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,EAAI,CAAC,CAAC;QAE1E,MAAM,SAAS,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACnD,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE5C,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,oBAAoB,iCAC7C,YAAY,CAAC,KAAK,KACrB,IAAI,EAAE,UAAU,IAChB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,EAAI,CAAC,CAAC;QAC1E,+CAA+C;QAC/C,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACjD,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE5B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,iCAC3C,YAAY,CAAC,KAAK,KACrB,OAAO,EAAE,OAAO,IAChB,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,IAAE,aAAa,UAAG,CAAC,CAAC;QAExF,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAC,aAAa,EAAC,GAAG,eAAe,CACrC,oBAAC,YAAY,oBAAK,YAAY,IAAE,aAAa,EAAE,KAAK,IAAI,CACzD,CAAC;QAEF,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,EAAC,WAAW,EAAC,GAAG,eAAe,CAAC,oBAAC,YAAY,oBAAK,YAAY,IAAE,QAAQ,UAAG,CAAC,CAAC;QAEnF,MAAM,aAAa,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,mBAAmB,CAAC,CAAC;QAEnD,4DAA4D;QAC5D,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,131 +0,0 @@
1
- import { act, fireEvent } from "@testing-library/react-native";
2
- // import {ImageManipulator} from "expo-image-manipulator";
3
- // Import the actual implementation for SaveFormat
4
- import * as ImageManipulator from "expo-image-manipulator";
5
- import React from "react";
6
- import { Avatar } from "./Avatar";
7
- import { renderWithTheme } from "./test-utils";
8
- // Mock expo-image-picker
9
- jest.mock("expo-image-picker", () => ({
10
- launchImageLibraryAsync: jest.fn(),
11
- }));
12
- // Mock expo-image-manipulator
13
- const mockResize = jest.fn();
14
- const mockRenderAsync = jest.fn();
15
- const mockSaveAsync = jest.fn();
16
- jest.mock("expo-image-manipulator", () => {
17
- const actual = jest.requireActual("expo-image-manipulator");
18
- return Object.assign(Object.assign({}, actual), { ImageManipulator: {
19
- manipulate: jest.fn().mockImplementation(() => ({
20
- resize: mockResize.mockImplementation(() => ({
21
- renderAsync: mockRenderAsync.mockResolvedValue({
22
- saveAsync: mockSaveAsync.mockResolvedValue({
23
- uri: "test-uri",
24
- base64: "test-base64",
25
- }),
26
- }),
27
- })),
28
- })),
29
- }, SaveFormat: {
30
- PNG: "png",
31
- JPEG: "jpeg",
32
- } });
33
- });
34
- jest.mock("expo-image-picker", () => ({
35
- launchImageLibraryAsync: jest.fn().mockResolvedValue({
36
- canceled: false,
37
- assets: [
38
- {
39
- uri: "test-uri",
40
- width: 100,
41
- height: 100,
42
- },
43
- ],
44
- }),
45
- }));
46
- // Mock the LinearGradient component
47
- jest.mock("expo-linear-gradient", () => ({
48
- LinearGradient: "LinearGradient",
49
- }));
50
- describe("Avatar", () => {
51
- const defaultProps = {
52
- name: "John Doe",
53
- src: "https://example.com/avatar.jpg",
54
- testID: "avatar",
55
- };
56
- beforeEach(() => {
57
- jest.clearAllMocks();
58
- });
59
- it("renders correctly with default props", () => {
60
- const { toJSON } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps)));
61
- expect(toJSON()).toMatchSnapshot();
62
- });
63
- it("renders initials when no image is provided", () => {
64
- const { getByText } = renderWithTheme(React.createElement(Avatar, { name: "John Doe", testID: "avatar" }));
65
- expect(getByText("JD")).toBeTruthy();
66
- });
67
- it("renders image when src is provided", () => {
68
- const { getByTestId } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps)));
69
- const image = getByTestId("avatar-image");
70
- expect(image).toBeTruthy();
71
- });
72
- it("shows initials when image fails to load", () => {
73
- const { getByText, getByTestId } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { name: "John Doe" })));
74
- // Simulate image load error
75
- fireEvent(getByTestId("avatar-image"), "onError");
76
- expect(getByText("JD")).toBeTruthy();
77
- });
78
- it("applies correct size class", () => {
79
- const size = "lg";
80
- const { getByTestId } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { size: size })));
81
- const avatar = getByTestId("avatar-image");
82
- // Check if the style contains the expected size
83
- expect(avatar.props.style).toMatchObject({
84
- height: 72, // lg size from the sizes object
85
- });
86
- });
87
- it("shows status indicator when status is provided", () => {
88
- const { getByTestId } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { status: "online" })));
89
- expect(getByTestId("status-indicator")).toBeTruthy();
90
- });
91
- it("shows edit icon when status is imagePicker and size is xl", () => {
92
- const { getByText } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { size: "xl", status: "imagePicker" })));
93
- expect(getByText("Upload Image")).toBeTruthy();
94
- });
95
- it("calls onChange when edit icon is pressed", async () => {
96
- const mockOnChange = jest.fn();
97
- const { getByText } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { size: "xl", status: "imagePicker", onChange: mockOnChange })));
98
- await act(async () => {
99
- fireEvent.press(getByText("Upload Image"));
100
- });
101
- // The onChange should be called with the processed image
102
- expect(mockOnChange).toHaveBeenCalledWith({
103
- avatarImageFormat: "png",
104
- uri: "data:image/png;base64,test-base64",
105
- base64: "test-base64",
106
- });
107
- expect(ImageManipulator.ImageManipulator.manipulate).toHaveBeenCalled();
108
- expect(mockResize).toHaveBeenCalled();
109
- expect(mockRenderAsync).toHaveBeenCalled();
110
- expect(mockSaveAsync).toHaveBeenCalledWith({
111
- format: "png",
112
- base64: true,
113
- });
114
- });
115
- it("applies border when hasBorder is true", () => {
116
- const { getByTestId } = renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { hasBorder: true })));
117
- const avatar = getByTestId("avatar-image");
118
- // Check if the style contains border properties
119
- expect(avatar.props.style).toMatchObject({
120
- borderWidth: expect.any(Number),
121
- borderColor: expect.any(String),
122
- });
123
- });
124
- it("shows warning when imagePicker status is used with non-xl size", () => {
125
- const consoleWarnSpy = jest.spyOn(console, "warn").mockImplementation(() => { });
126
- renderWithTheme(React.createElement(Avatar, Object.assign({}, defaultProps, { size: "lg", status: "imagePicker" })));
127
- expect(consoleWarnSpy).toHaveBeenCalledWith("Avatars with the status of 'imagePicker' should also have an onChange property.");
128
- consoleWarnSpy.mockRestore();
129
- });
130
- });
131
- //# sourceMappingURL=Avatar.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Avatar.test.js","sourceRoot":"","sources":["../src/Avatar.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,76 +0,0 @@
1
- import React from "react";
2
- import { Badge } from "./Badge";
3
- import { renderWithTheme } from "./test-utils";
4
- describe("Badge", () => {
5
- const defaultProps = {
6
- value: "Test",
7
- };
8
- it("renders correctly with default props", () => {
9
- const { toJSON } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps)));
10
- expect(toJSON()).toMatchSnapshot();
11
- });
12
- it("renders text value correctly", () => {
13
- const { getByText } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps)));
14
- expect(getByText("Test")).toBeTruthy();
15
- });
16
- it("renders number value correctly", () => {
17
- const { getByText } = renderWithTheme(React.createElement(Badge, { value: 42 }));
18
- expect(getByText("42")).toBeTruthy();
19
- });
20
- it("truncates large numbers with maxValue", () => {
21
- const { getByText } = renderWithTheme(React.createElement(Badge, { maxValue: 100, value: 150, variant: "numberOnly" }));
22
- expect(getByText("100+")).toBeTruthy();
23
- });
24
- it("does not truncate numbers below maxValue", () => {
25
- const { getByText } = renderWithTheme(React.createElement(Badge, { maxValue: 100, value: 50, variant: "numberOnly" }));
26
- expect(getByText("50")).toBeTruthy();
27
- });
28
- it("applies correct status colors", () => {
29
- const statuses = ["error", "warning", "info", "success", "neutral"];
30
- statuses.forEach((status) => {
31
- let { getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { status: status, testID: "badge" })));
32
- // Test primary variant
33
- const badge = getByTestId("badge");
34
- expect(badge).toHaveStyle({ backgroundColor: expect.any(String) });
35
- // Test secondary variant
36
- ({ getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { secondary: true, status: status, testID: "badge-secondary" }))));
37
- const secondaryBadge = getByTestId("badge-secondary");
38
- expect(secondaryBadge).toHaveStyle({ backgroundColor: expect.any(String) });
39
- });
40
- });
41
- it("renders icon when iconName is provided", () => {
42
- const { getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { iconName: "check", testID: "badge-with-icon" })));
43
- expect(getByTestId("icon")).toBeTruthy();
44
- });
45
- it("renders icon only when variant is iconOnly", () => {
46
- const { getByTestId, queryByText } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { iconName: "check", testID: "icon-only-badge", variant: "iconOnly" })));
47
- expect(getByTestId("icon")).toBeTruthy();
48
- expect(queryByText("Test")).toBeNull();
49
- });
50
- it("applies custom colors when status is custom", () => {
51
- const customColors = {
52
- customBackgroundColor: "#123456",
53
- customTextColor: "#ffffff",
54
- customBorderColor: "#654321",
55
- customIconColor: "#ffcc00",
56
- };
57
- const { getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { iconName: "star", secondary: true, status: "custom", testID: "custom-badge" }, customColors)));
58
- const badge = getByTestId("custom-badge");
59
- expect(badge).toHaveStyle({
60
- backgroundColor: customColors.customBackgroundColor,
61
- borderColor: customColors.customBorderColor,
62
- });
63
- });
64
- it("applies correct border radius based on variant", () => {
65
- // Default variant
66
- let { getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { testID: "default-badge" })));
67
- expect(getByTestId("default-badge")).toHaveStyle({ borderRadius: expect.any(Number) });
68
- // Icon only variant
69
- ({ getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { iconName: "check", testID: "icon-only-badge", variant: "iconOnly" }))));
70
- expect(getByTestId("icon-only-badge")).toHaveStyle({ borderRadius: expect.any(Number) });
71
- // Number only variant
72
- ({ getByTestId } = renderWithTheme(React.createElement(Badge, Object.assign({}, defaultProps, { testID: "number-only-badge", variant: "numberOnly" }))));
73
- expect(getByTestId("number-only-badge")).toHaveStyle({ borderRadius: expect.any(Number) });
74
- });
75
- });
76
- //# sourceMappingURL=Badge.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Badge.test.js","sourceRoot":"","sources":["../src/Badge.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};