ferns-ui 1.16.1 → 2.0.0-beta.4

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 (53) hide show
  1. package/dist/ErrorBoundary.d.ts +1 -1
  2. package/dist/Hyperlink.js.map +1 -1
  3. package/dist/ModalSheet.d.ts +1 -1
  4. package/dist/ModalSheet.js +1 -1
  5. package/dist/ModalSheet.js.map +1 -1
  6. package/dist/Tooltip.js +2 -2
  7. package/dist/Tooltip.js.map +1 -1
  8. package/dist/jestSetup.d.ts +0 -0
  9. package/dist/jestSetup.js +21 -0
  10. package/dist/jestSetup.js.map +1 -0
  11. package/dist/setupTests.js +22 -0
  12. package/dist/setupTests.js.map +1 -1
  13. package/dist/table/Table.js.map +1 -1
  14. package/dist/test-utils.d.ts +4 -1
  15. package/package.json +43 -39
  16. package/src/Avatar.test.tsx +0 -2
  17. package/src/DataTable.tsx +2 -2
  18. package/src/Hyperlink.tsx +1 -1
  19. package/src/ModalSheet.tsx +1 -1
  20. package/src/Tooltip.tsx +11 -5
  21. package/src/jestSetup.ts +16 -0
  22. package/src/setupTests.ts +24 -0
  23. package/src/table/Table.tsx +3 -3
  24. package/dist/Accordion.test.d.ts +0 -1
  25. package/dist/Accordion.test.js +0 -71
  26. package/dist/Accordion.test.js.map +0 -1
  27. package/dist/AddressField.test.d.ts +0 -1
  28. package/dist/AddressField.test.js +0 -65
  29. package/dist/AddressField.test.js.map +0 -1
  30. package/dist/Avatar.test.d.ts +0 -1
  31. package/dist/Avatar.test.js +0 -131
  32. package/dist/Avatar.test.js.map +0 -1
  33. package/dist/Badge.test.d.ts +0 -1
  34. package/dist/Badge.test.js +0 -76
  35. package/dist/Badge.test.js.map +0 -1
  36. package/dist/Box.test.d.ts +0 -1
  37. package/dist/Box.test.js +0 -528
  38. package/dist/Box.test.js.map +0 -1
  39. package/dist/DateTimeField.test.d.ts +0 -1
  40. package/dist/DateTimeField.test.js +0 -258
  41. package/dist/DateTimeField.test.js.map +0 -1
  42. package/dist/DateUtilities.test.d.ts +0 -1
  43. package/dist/DateUtilities.test.js +0 -279
  44. package/dist/DateUtilities.test.js.map +0 -1
  45. package/dist/TextArea.test.d.ts +0 -1
  46. package/dist/TextArea.test.js +0 -146
  47. package/dist/TextArea.test.js.map +0 -1
  48. package/dist/TextField.test.d.ts +0 -1
  49. package/dist/TextField.test.js +0 -251
  50. package/dist/TextField.test.js.map +0 -1
  51. package/dist/useStoredState.test.d.ts +0 -1
  52. package/dist/useStoredState.test.js +0 -93
  53. package/dist/useStoredState.test.js.map +0 -1
@@ -1,146 +0,0 @@
1
- import { userEvent } from "@testing-library/react-native";
2
- import React from "react";
3
- import { TextArea } from "./TextArea";
4
- import { renderWithTheme } from "./test-utils";
5
- describe("TextArea", () => {
6
- let mockOnChange;
7
- beforeEach(() => {
8
- mockOnChange = jest.fn();
9
- });
10
- afterEach(() => {
11
- jest.clearAllMocks();
12
- });
13
- describe("basic functionality", () => {
14
- it("should render as multiline text field", () => {
15
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "test content", onChange: mockOnChange }));
16
- const input = getByDisplayValue("test content");
17
- expect(input.props.multiline).toBe(true);
18
- expect(input.props.value).toBe("test content");
19
- });
20
- it("should render with title", () => {
21
- const { getByText } = renderWithTheme(React.createElement(TextArea, { title: "Description", value: "", onChange: mockOnChange }));
22
- expect(getByText("Description")).toBeTruthy();
23
- });
24
- it("should render with placeholder", () => {
25
- const { getByPlaceholderText } = renderWithTheme(React.createElement(TextArea, { placeholder: "Enter description", value: "", onChange: mockOnChange }));
26
- expect(getByPlaceholderText("Enter description")).toBeTruthy();
27
- });
28
- it("should render helper text", () => {
29
- const { getByText } = renderWithTheme(React.createElement(TextArea, { helperText: "Maximum 500 characters", value: "", onChange: mockOnChange }));
30
- expect(getByText("Maximum 500 characters")).toBeTruthy();
31
- });
32
- it("should render error text", () => {
33
- const { getByText } = renderWithTheme(React.createElement(TextArea, { errorText: "This field is required", value: "", onChange: mockOnChange }));
34
- expect(getByText("This field is required")).toBeTruthy();
35
- });
36
- it("should support grow behavior", () => {
37
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { grow: true, value: "", onChange: mockOnChange }));
38
- const input = getByDisplayValue("");
39
- expect(input.props.multiline).toBe(true);
40
- });
41
- it("should be disabled when disabled prop is true", () => {
42
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { disabled: true, value: "test", onChange: mockOnChange }));
43
- const input = getByDisplayValue("test");
44
- expect(input.props.readOnly).toBe(true);
45
- });
46
- it("should always have text type", () => {
47
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "", onChange: mockOnChange }));
48
- const input = getByDisplayValue("");
49
- expect(input.props.keyboardType).toBe("default");
50
- });
51
- });
52
- describe("user interactions", () => {
53
- it("should call onChange when text is entered", async () => {
54
- const user = userEvent.setup();
55
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "", onChange: mockOnChange }));
56
- const input = getByDisplayValue("");
57
- await user.type(input, "hello world");
58
- expect(mockOnChange).toHaveBeenCalled();
59
- expect(mockOnChange.mock.calls.length).toBeGreaterThan(0);
60
- });
61
- it("should handle multiline text input", async () => {
62
- const user = userEvent.setup();
63
- const multilineText = "Line 1\nLine 2\nLine 3";
64
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "", onChange: mockOnChange }));
65
- const input = getByDisplayValue("");
66
- await user.type(input, multilineText);
67
- expect(mockOnChange).toHaveBeenCalled();
68
- expect(mockOnChange.mock.calls.length).toBeGreaterThan(0);
69
- });
70
- });
71
- describe("accessibility", () => {
72
- it("should have correct accessibility properties", () => {
73
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "", onChange: mockOnChange }));
74
- const input = getByDisplayValue("");
75
- expect(input.props.accessibilityHint).toBe("Enter text here");
76
- expect(input.props["aria-label"]).toBe("Text input field");
77
- });
78
- it("should indicate disabled state in accessibility", () => {
79
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { disabled: true, value: "", onChange: mockOnChange }));
80
- const input = getByDisplayValue("");
81
- expect(input.props.accessibilityState.disabled).toBe(true);
82
- });
83
- });
84
- describe("edge cases", () => {
85
- it("should handle empty value", () => {
86
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "", onChange: mockOnChange }));
87
- const input = getByDisplayValue("");
88
- expect(input.props.value).toBe("");
89
- });
90
- it("should handle undefined value", () => {
91
- const { root } = renderWithTheme(React.createElement(TextArea, { value: undefined, onChange: mockOnChange }));
92
- expect(root).toBeTruthy();
93
- });
94
- it("should handle long text values", () => {
95
- const longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. ".repeat(50);
96
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: longText, onChange: mockOnChange }));
97
- const input = getByDisplayValue(longText);
98
- expect(input.props.value).toBe(longText);
99
- });
100
- it("should handle text with line breaks", () => {
101
- const textWithBreaks = "First line\nSecond line\n\nFourth line";
102
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: textWithBreaks, onChange: mockOnChange }));
103
- const input = getByDisplayValue(textWithBreaks);
104
- expect(input.props.value).toBe(textWithBreaks);
105
- });
106
- });
107
- describe("props inheritance", () => {
108
- it("should inherit all TextField props except multiline and type", () => {
109
- const mockOnFocus = jest.fn();
110
- const mockOnBlur = jest.fn();
111
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextArea, { value: "test", onChange: mockOnChange, onFocus: mockOnFocus, onBlur: mockOnBlur, placeholder: "Test placeholder", disabled: false, rows: 5 }));
112
- const input = getByDisplayValue("test");
113
- expect(input.props.numberOfLines).toBe(5);
114
- expect(input.props.onFocus).toBeTruthy();
115
- expect(input.props.onBlur).toBeTruthy();
116
- });
117
- it("should support inputRef", () => {
118
- const mockInputRef = jest.fn();
119
- renderWithTheme(React.createElement(TextArea, { inputRef: mockInputRef, value: "", onChange: mockOnChange }));
120
- expect(mockInputRef).toHaveBeenCalled();
121
- });
122
- });
123
- describe("snapshots", () => {
124
- it("should match snapshot with default props", () => {
125
- const component = renderWithTheme(React.createElement(TextArea, { value: "test content", onChange: mockOnChange }));
126
- expect(component.toJSON()).toMatchSnapshot();
127
- });
128
- it("should match snapshot with all props", () => {
129
- const component = renderWithTheme(React.createElement(TextArea, { title: "Description", placeholder: "Enter description", helperText: "Maximum 500 characters", value: "test content", onChange: mockOnChange, disabled: false, grow: true, rows: 5 }));
130
- expect(component.toJSON()).toMatchSnapshot();
131
- });
132
- it("should match snapshot when disabled", () => {
133
- const component = renderWithTheme(React.createElement(TextArea, { title: "Disabled TextArea", value: "disabled content", onChange: mockOnChange, disabled: true }));
134
- expect(component.toJSON()).toMatchSnapshot();
135
- });
136
- it("should match snapshot with error state", () => {
137
- const component = renderWithTheme(React.createElement(TextArea, { title: "Error TextArea", value: "", onChange: mockOnChange, errorText: "This field is required" }));
138
- expect(component.toJSON()).toMatchSnapshot();
139
- });
140
- it("should match snapshot with multiline content", () => {
141
- const component = renderWithTheme(React.createElement(TextArea, { title: "Multiline Content", value: "Line 1\\nLine 2\\nLine 3", onChange: mockOnChange, rows: 4 }));
142
- expect(component.toJSON()).toMatchSnapshot();
143
- });
144
- });
145
- });
146
- //# sourceMappingURL=TextArea.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextArea.test.js","sourceRoot":"","sources":["../src/TextArea.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAE7C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,YAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,KAAK,EAAC,cAAc,EAAC,QAAQ,EAAE,YAAY,GAAI,CAC1D,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,EAAC,SAAS,EAAC,GAAG,eAAe,CACjC,oBAAC,QAAQ,IAAC,KAAK,EAAC,aAAa,EAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAClE,CAAC;YAEF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,EAAC,oBAAoB,EAAC,GAAG,eAAe,CAC5C,oBAAC,QAAQ,IAAC,WAAW,EAAC,mBAAmB,EAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAC9E,CAAC;YAEF,MAAM,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,EAAC,SAAS,EAAC,GAAG,eAAe,CACjC,oBAAC,QAAQ,IAAC,UAAU,EAAC,wBAAwB,EAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAClF,CAAC;YAEF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,EAAC,SAAS,EAAC,GAAG,eAAe,CACjC,oBAAC,QAAQ,IAAC,SAAS,EAAC,wBAAwB,EAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CACjF,CAAC;YAEF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,IAAI,QAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CACnD,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,QAAQ,QAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAE,YAAY,GAAI,CAC3D,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAEtC,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,wBAAwB,CAAC;YAC/C,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAEtC,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,QAAQ,QAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CACvD,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,EAAC,IAAI,EAAC,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAEvF,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAAG,2DAA2D,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxF,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAI,CACtD,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,cAAc,GAAG,wCAAwC,CAAC;YAChE,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,GAAI,CAC5D,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE7B,MAAM,EAAC,iBAAiB,EAAC,GAAG,eAAe,CACzC,oBAAC,QAAQ,IACP,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAC,kBAAkB,EAC9B,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,CAAC,GACP,CACH,CAAC;YAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAC/B,eAAe,CAAC,oBAAC,QAAQ,IAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAEvF,MAAM,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,SAAS,GAAG,eAAe,CAAC,oBAAC,QAAQ,IAAC,KAAK,EAAC,cAAc,EAAC,QAAQ,EAAE,YAAY,GAAI,CAAC,CAAC;YAC7F,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,SAAS,GAAG,eAAe,CAC/B,oBAAC,QAAQ,IACP,KAAK,EAAC,aAAa,EACnB,WAAW,EAAC,mBAAmB,EAC/B,UAAU,EAAC,wBAAwB,EACnC,KAAK,EAAC,cAAc,EACpB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,CAAC,GACP,CACH,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,eAAe,CAC/B,oBAAC,QAAQ,IACP,KAAK,EAAC,mBAAmB,EACzB,KAAK,EAAC,kBAAkB,EACxB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,IAAI,GACd,CACH,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,SAAS,GAAG,eAAe,CAC/B,oBAAC,QAAQ,IACP,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAC,EAAE,EACR,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAC,wBAAwB,GAClC,CACH,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,SAAS,GAAG,eAAe,CAC/B,oBAAC,QAAQ,IACP,KAAK,EAAC,mBAAmB,EACzB,KAAK,EAAC,0BAAwB,EAC9B,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,CAAC,GACP,CACH,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,251 +0,0 @@
1
- import { act, userEvent } from "@testing-library/react-native";
2
- import React from "react";
3
- import { TextField } from "./TextField";
4
- import { renderWithTheme } from "./test-utils";
5
- describe("TextField", () => {
6
- let mockOnChange;
7
- let mockOnFocus;
8
- let mockOnBlur;
9
- let mockOnEnter;
10
- beforeEach(() => {
11
- jest.useFakeTimers();
12
- mockOnChange = jest.fn();
13
- mockOnFocus = jest.fn();
14
- mockOnBlur = jest.fn();
15
- mockOnEnter = jest.fn();
16
- });
17
- afterEach(() => {
18
- jest.useRealTimers();
19
- jest.clearAllMocks();
20
- });
21
- describe("basic rendering", () => {
22
- it("should render with default props", () => {
23
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "test value", onChange: mockOnChange }));
24
- expect(getByDisplayValue("test value").props.value).toBe("test value");
25
- });
26
- it("should render with title", () => {
27
- const { getByText } = renderWithTheme(React.createElement(TextField, { title: "Test Title", value: "", onChange: mockOnChange }));
28
- expect(getByText("Test Title")).toBeTruthy();
29
- });
30
- it("should render with placeholder", () => {
31
- const { getByPlaceholderText } = renderWithTheme(React.createElement(TextField, { placeholder: "Enter text", value: "", onChange: mockOnChange }));
32
- expect(getByPlaceholderText("Enter text")).toBeTruthy();
33
- });
34
- it("should render helper text", () => {
35
- const { getByText } = renderWithTheme(React.createElement(TextField, { helperText: "This is helper text", value: "", onChange: mockOnChange }));
36
- expect(getByText("This is helper text")).toBeTruthy();
37
- });
38
- it("should render error text", () => {
39
- const { getByText } = renderWithTheme(React.createElement(TextField, { errorText: "This is an error", value: "", onChange: mockOnChange }));
40
- expect(getByText("This is an error")).toBeTruthy();
41
- });
42
- });
43
- describe("user interactions", () => {
44
- it("should call onChange when text is entered", async () => {
45
- const user = userEvent.setup();
46
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "", onChange: mockOnChange }));
47
- const input = getByDisplayValue("");
48
- await user.type(input, "hello");
49
- expect(mockOnChange).toHaveBeenCalled();
50
- expect(mockOnChange.mock.calls.length).toBeGreaterThan(0);
51
- });
52
- it("should call onFocus when input is focused", async () => {
53
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "", onChange: mockOnChange, onFocus: mockOnFocus }));
54
- const input = getByDisplayValue("");
55
- expect(input.props.onFocus).toBeTruthy();
56
- });
57
- it("should call onBlur when input loses focus", async () => {
58
- const user = userEvent.setup();
59
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "test", onBlur: mockOnBlur, onChange: mockOnChange }));
60
- const input = getByDisplayValue("test");
61
- await user.press(input);
62
- await act(async () => {
63
- input.props.onBlur();
64
- });
65
- expect(mockOnBlur).toHaveBeenCalledTimes(1);
66
- expect(mockOnBlur.mock.calls[0][0]).toBe("test");
67
- });
68
- it("should call onEnter when enter key is pressed", async () => {
69
- const _user = userEvent.setup();
70
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "", onChange: mockOnChange, onEnter: mockOnEnter }));
71
- const input = getByDisplayValue("");
72
- await act(async () => {
73
- input.props.onSubmitEditing();
74
- });
75
- expect(mockOnEnter).toHaveBeenCalledTimes(1);
76
- });
77
- });
78
- describe("field types", () => {
79
- it("should render email type with correct keyboard", () => {
80
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "email", value: "", onChange: mockOnChange }));
81
- const input = getByDisplayValue("");
82
- expect(input.props.keyboardType).toBe("email-address");
83
- });
84
- it("should render password type with secure text entry", () => {
85
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "password", value: "", onChange: mockOnChange }));
86
- const input = getByDisplayValue("");
87
- expect(input.props.secureTextEntry).toBe(true);
88
- });
89
- it("should render url type with correct keyboard", () => {
90
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "url", value: "", onChange: mockOnChange }));
91
- const input = getByDisplayValue("");
92
- expect(input.props.keyboardType === "url" || input.props.keyboardType === "default").toBe(true);
93
- });
94
- it("should render phoneNumber type with number keyboard", () => {
95
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "phoneNumber", value: "", onChange: mockOnChange }));
96
- const input = getByDisplayValue("");
97
- expect(input.props.keyboardType).toBe("number-pad");
98
- });
99
- it("should render search type with default keyboard", () => {
100
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "search", value: "", onChange: mockOnChange }));
101
- const input = getByDisplayValue("");
102
- expect(input.props.keyboardType).toBe("default");
103
- });
104
- });
105
- describe("multiline behavior", () => {
106
- it("should render as multiline when multiline prop is true", () => {
107
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { multiline: true, value: "", onChange: mockOnChange }));
108
- const input = getByDisplayValue("");
109
- expect(input.props.multiline).toBe(true);
110
- });
111
- it("should set number of lines when rows prop is provided", () => {
112
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { multiline: true, rows: 5, value: "", onChange: mockOnChange }));
113
- const input = getByDisplayValue("");
114
- expect(input.props.numberOfLines).toBe(5);
115
- });
116
- it("should handle grow behavior with multiline", () => {
117
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { grow: true, multiline: true, value: "", onChange: mockOnChange }));
118
- const input = getByDisplayValue("");
119
- expect(input.props.multiline).toBe(true);
120
- });
121
- });
122
- describe("disabled state", () => {
123
- it("should be read-only when disabled", () => {
124
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { disabled: true, value: "test", onChange: mockOnChange }));
125
- const input = getByDisplayValue("test");
126
- expect(input.props.readOnly).toBe(true);
127
- });
128
- it("should not call onFocus when disabled", async () => {
129
- const _user = userEvent.setup();
130
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { disabled: true, value: "", onChange: mockOnChange, onFocus: mockOnFocus }));
131
- const input = getByDisplayValue("");
132
- expect(input.props.readOnly).toBe(true);
133
- });
134
- it("should not call onBlur when disabled", async () => {
135
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { disabled: true, value: "test", onBlur: mockOnBlur, onChange: mockOnChange }));
136
- const input = getByDisplayValue("test");
137
- await act(async () => {
138
- input.props.onBlur();
139
- });
140
- expect(mockOnBlur).not.toHaveBeenCalled();
141
- });
142
- });
143
- describe("icon functionality", () => {
144
- it("should render icon when iconName is provided", () => {
145
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { iconName: "check", value: "", onChange: mockOnChange }));
146
- const input = getByDisplayValue("");
147
- expect(input).toBeTruthy();
148
- });
149
- it("should call onIconClick when icon is pressed", async () => {
150
- const mockOnIconClick = jest.fn();
151
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { iconName: "check", value: "", onChange: mockOnChange, onIconClick: mockOnIconClick }));
152
- const input = getByDisplayValue("");
153
- expect(input).toBeTruthy();
154
- });
155
- });
156
- describe("accessibility", () => {
157
- it("should have correct accessibility properties", () => {
158
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "", onChange: mockOnChange }));
159
- const input = getByDisplayValue("");
160
- expect(input.props.accessibilityHint).toBe("Enter text here");
161
- expect(input.props["aria-label"]).toBe("Text input field");
162
- });
163
- it("should indicate disabled state in accessibility", () => {
164
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { disabled: true, value: "", onChange: mockOnChange }));
165
- const input = getByDisplayValue("");
166
- expect(input.props.accessibilityState.disabled).toBe(true);
167
- });
168
- });
169
- describe("auto-complete and text content", () => {
170
- it("should set autoComplete property", () => {
171
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { autoComplete: "username", value: "", onChange: mockOnChange }));
172
- const input = getByDisplayValue("");
173
- expect(input).toBeTruthy();
174
- });
175
- it("should handle text content type for email", () => {
176
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "email", value: "", onChange: mockOnChange }));
177
- const input = getByDisplayValue("");
178
- expect(input.props.textContentType).toBe("emailAddress");
179
- });
180
- it("should handle text content type for password", () => {
181
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { type: "password", value: "", onChange: mockOnChange }));
182
- const input = getByDisplayValue("");
183
- expect(input.props.textContentType).toBe("password");
184
- });
185
- });
186
- describe("edge cases", () => {
187
- it("should handle empty value", () => {
188
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: "", onChange: mockOnChange }));
189
- const input = getByDisplayValue("");
190
- expect(input.props.value).toBe("");
191
- });
192
- it("should handle undefined value", () => {
193
- const { root } = renderWithTheme(React.createElement(TextField, { value: undefined, onChange: mockOnChange }));
194
- expect(root).toBeTruthy();
195
- });
196
- it("should handle long text values", () => {
197
- const longText = "a".repeat(1000);
198
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: longText, onChange: mockOnChange }));
199
- const input = getByDisplayValue(longText);
200
- expect(input.props.value).toBe(longText);
201
- });
202
- it("should handle special characters", () => {
203
- const specialText = "!@#$%^&*()_+-=[]{}|;':\",./<>?";
204
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { value: specialText, onChange: mockOnChange }));
205
- const input = getByDisplayValue(specialText);
206
- expect(input.props.value).toBe(specialText);
207
- });
208
- });
209
- describe("return key behavior", () => {
210
- it("should set return key type", () => {
211
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { returnKeyType: "done", value: "", onChange: mockOnChange }));
212
- const input = getByDisplayValue("");
213
- expect(input.props.enterKeyHint).toBe("done");
214
- });
215
- it("should handle blur on submit", () => {
216
- const { getByDisplayValue } = renderWithTheme(React.createElement(TextField, { blurOnSubmit: false, value: "", onChange: mockOnChange }));
217
- const input = getByDisplayValue("");
218
- expect(input.props.blurOnSubmit).toBe(false);
219
- });
220
- });
221
- describe("input ref", () => {
222
- it("should call inputRef with the input reference", () => {
223
- const mockInputRef = jest.fn();
224
- renderWithTheme(React.createElement(TextField, { inputRef: mockInputRef, value: "", onChange: mockOnChange }));
225
- expect(mockInputRef).toHaveBeenCalled();
226
- });
227
- });
228
- describe("snapshots", () => {
229
- it("should match snapshot with default props", () => {
230
- const component = renderWithTheme(React.createElement(TextField, { value: "test value", onChange: mockOnChange }));
231
- expect(component.toJSON()).toMatchSnapshot();
232
- });
233
- it("should match snapshot with all props", () => {
234
- const component = renderWithTheme(React.createElement(TextField, { disabled: false, errorText: "Error text", helperText: "Helper text", iconName: "check", multiline: false, placeholder: "Enter text", title: "Test Title", type: "text", value: "test value", onBlur: mockOnBlur, onChange: mockOnChange, onEnter: mockOnEnter, onFocus: mockOnFocus, onIconClick: jest.fn() }));
235
- expect(component.toJSON()).toMatchSnapshot();
236
- });
237
- it("should match snapshot when disabled", () => {
238
- const component = renderWithTheme(React.createElement(TextField, { disabled: true, title: "Disabled Field", value: "disabled value", onChange: mockOnChange }));
239
- expect(component.toJSON()).toMatchSnapshot();
240
- });
241
- it("should match snapshot with multiline", () => {
242
- const component = renderWithTheme(React.createElement(TextField, { multiline: true, rows: 3, title: "Multiline Field", value: "line 1\\nline 2", onChange: mockOnChange }));
243
- expect(component.toJSON()).toMatchSnapshot();
244
- });
245
- it("should match snapshot with error state", () => {
246
- const component = renderWithTheme(React.createElement(TextField, { errorText: "This field is required", title: "Error Field", value: "", onChange: mockOnChange }));
247
- expect(component.toJSON()).toMatchSnapshot();
248
- });
249
- });
250
- });
251
- //# sourceMappingURL=TextField.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextField.test.js","sourceRoot":"","sources":["../src/TextField.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,93 +0,0 @@
1
- import { act, renderHook } from "@testing-library/react-native";
2
- import { Unifier } from "./Unifier";
3
- import { useStoredState } from "./useStoredState";
4
- jest.mock("./Unifier", () => ({
5
- Unifier: {
6
- storage: {
7
- getItem: jest.fn(),
8
- setItem: jest.fn(),
9
- },
10
- },
11
- }));
12
- describe("useStoredState", () => {
13
- beforeEach(() => {
14
- jest.clearAllMocks();
15
- });
16
- it("should return initialValue and isLoading=true on initial render", async () => {
17
- Unifier.storage.getItem.mockImplementation(() => new Promise((resolve) => setTimeout(() => resolve("stored value"), 100)));
18
- const { result } = renderHook(() => useStoredState("testKey", "initial value"));
19
- expect(result.current[0]).toBe("initial value");
20
- expect(result.current[2]).toBe(true);
21
- await act(async () => {
22
- await new Promise((resolve) => setTimeout(resolve, 200));
23
- });
24
- expect(result.current[0]).toBe("stored value");
25
- expect(result.current[2]).toBe(false);
26
- });
27
- it("should update state and storage when setter is called", async () => {
28
- Unifier.storage.getItem.mockResolvedValue("stored value");
29
- Unifier.storage.setItem.mockResolvedValue(undefined);
30
- const { result } = renderHook(() => useStoredState("testKey", "initial value"));
31
- await act(async () => {
32
- await new Promise((resolve) => setTimeout(resolve, 10));
33
- });
34
- await act(async () => {
35
- await result.current[1]("new value");
36
- });
37
- expect(result.current[0]).toBe("new value");
38
- expect(Unifier.storage.setItem).toHaveBeenCalledWith("testKey", "new value");
39
- });
40
- it("should handle errors when reading from storage", async () => {
41
- const originalConsoleError = console.error;
42
- console.error = jest.fn();
43
- Unifier.storage.getItem.mockRejectedValue(new Error("Storage error"));
44
- const { result } = renderHook(() => useStoredState("testKey", "initial value"));
45
- await act(async () => {
46
- await new Promise((resolve) => setTimeout(resolve, 10));
47
- });
48
- expect(result.current[0]).toBe("initial value");
49
- expect(result.current[2]).toBe(false);
50
- expect(console.error).toHaveBeenCalled();
51
- console.error = originalConsoleError;
52
- });
53
- it("should handle errors when writing to storage", async () => {
54
- const originalConsoleError = console.error;
55
- console.error = jest.fn();
56
- Unifier.storage.getItem.mockResolvedValue("stored value");
57
- Unifier.storage.setItem.mockRejectedValue(new Error("Storage error"));
58
- const { result } = renderHook(() => useStoredState("testKey", "initial value"));
59
- await act(async () => {
60
- await new Promise((resolve) => setTimeout(resolve, 10));
61
- });
62
- await act(async () => {
63
- await result.current[1]("new value");
64
- });
65
- expect(result.current[0]).toBe("stored value");
66
- expect(console.error).toHaveBeenCalled();
67
- console.error = originalConsoleError;
68
- });
69
- it("should handle undefined initialValue", async () => {
70
- Unifier.storage.getItem.mockResolvedValue(null);
71
- const { result } = renderHook(() => useStoredState("testKey"));
72
- expect(result.current[0]).toBeUndefined();
73
- expect(result.current[2]).toBe(true);
74
- await act(async () => {
75
- await new Promise((resolve) => setTimeout(resolve, 10));
76
- });
77
- expect(result.current[0]).toBeNull();
78
- expect(result.current[2]).toBe(false);
79
- });
80
- it("should not update state if component unmounts before storage resolves", async () => {
81
- Unifier.storage.getItem.mockImplementation(() => new Promise((resolve) => setTimeout(() => resolve("stored value"), 100)));
82
- const { result, unmount } = renderHook(() => useStoredState("testKey", "initial value"));
83
- expect(result.current[0]).toBe("initial value");
84
- expect(result.current[2]).toBe(true);
85
- unmount();
86
- await act(async () => {
87
- await new Promise((resolve) => setTimeout(resolve, 200));
88
- });
89
- expect(result.current[0]).toBe("initial value");
90
- expect(result.current[2]).toBe(true);
91
- });
92
- });
93
- //# sourceMappingURL=useStoredState.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStoredState.test.js","sourceRoot":"","sources":["../src/useStoredState.test.tsx"],"names":[],"mappings":"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"}