@dryanovski/react-native-components 1.0.0 → 1.0.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 (41) hide show
  1. package/lib/module/components/Card/Card.js +29 -0
  2. package/lib/module/components/Card/Card.js.map +1 -0
  3. package/lib/module/components/Card/styles.js +30 -0
  4. package/lib/module/components/Card/styles.js.map +1 -0
  5. package/lib/module/components/Card/types.js +4 -0
  6. package/lib/module/components/Card/types.js.map +1 -0
  7. package/lib/module/index.js +3 -0
  8. package/lib/module/index.js.map +1 -1
  9. package/lib/module/providers/README.md +22 -0
  10. package/lib/module/providers/ThemeProvider.js +59 -4
  11. package/lib/module/providers/ThemeProvider.js.map +1 -1
  12. package/lib/module/providers/ThemeProvider.test.js +384 -0
  13. package/lib/module/providers/ThemeProvider.test.js.map +1 -0
  14. package/lib/module/utils/Style.js +6 -0
  15. package/lib/module/utils/Style.js.map +1 -0
  16. package/lib/typescript/src/components/Card/Card.d.ts +14 -0
  17. package/lib/typescript/src/components/Card/Card.d.ts.map +1 -0
  18. package/lib/typescript/src/components/Card/styles.d.ts +17 -0
  19. package/lib/typescript/src/components/Card/styles.d.ts.map +1 -0
  20. package/lib/typescript/src/components/Card/types.d.ts +9 -0
  21. package/lib/typescript/src/components/Card/types.d.ts.map +1 -0
  22. package/lib/typescript/src/index.d.ts +1 -0
  23. package/lib/typescript/src/index.d.ts.map +1 -1
  24. package/lib/typescript/src/providers/ThemeProvider.d.ts +23 -1
  25. package/lib/typescript/src/providers/ThemeProvider.d.ts.map +1 -1
  26. package/lib/typescript/src/providers/ThemeProvider.test.d.ts +2 -0
  27. package/lib/typescript/src/providers/ThemeProvider.test.d.ts.map +1 -0
  28. package/lib/typescript/src/providers/types.d.ts +17 -1
  29. package/lib/typescript/src/providers/types.d.ts.map +1 -1
  30. package/lib/typescript/src/utils/Style.d.ts +4 -0
  31. package/lib/typescript/src/utils/Style.d.ts.map +1 -0
  32. package/package.json +13 -9
  33. package/src/components/Card/Card.tsx +25 -0
  34. package/src/components/Card/styles.ts +27 -0
  35. package/src/components/Card/types.ts +9 -0
  36. package/src/index.tsx +3 -0
  37. package/src/providers/README.md +22 -0
  38. package/src/providers/ThemeProvider.test.tsx +340 -0
  39. package/src/providers/ThemeProvider.tsx +73 -4
  40. package/src/providers/types.ts +23 -1
  41. package/src/utils/Style.ts +5 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ import { View } from 'react-native';
4
+ import Styles from "./styles.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ /**
7
+ * Card component to display content within a styled container
8
+ * @param {React.ReactNode} children - The content to be displayed inside the card
9
+ * @param {ViewStyle} style - Additional styles for the card container
10
+ * @returns {JSX.Element} The Card component
11
+ * @example
12
+ * <Card style={{ margin: 10 }}>
13
+ * <Text>This is a card</Text>
14
+ * </Card>
15
+ */
16
+ export const Card = ({
17
+ children,
18
+ style,
19
+ ...props
20
+ }) => {
21
+ return /*#__PURE__*/_jsx(View, {
22
+ style: [Styles.container, style],
23
+ ...props,
24
+ children: children
25
+ });
26
+ };
27
+ Card.displayName = 'Card';
28
+ export default Card;
29
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["View","Styles","jsx","_jsx","Card","children","style","props","container","displayName"],"sourceRoot":"../../../../src","sources":["components/Card/Card.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,cAAc;AACnC,OAAOC,MAAM,MAAM,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,IAAyB,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,KAAK;EAAE,GAAGC;AAAM,CAAC,KAAK;EAC1E,oBACEJ,IAAA,CAACH,IAAI;IAACM,KAAK,EAAE,CAACL,MAAM,CAACO,SAAS,EAAEF,KAAK,CAAE;IAAA,GAAKC,KAAK;IAAAF,QAAA,EAC9CA;EAAQ,CACL,CAAC;AAEX,CAAC;AAEDD,IAAI,CAACK,WAAW,GAAG,MAAM;AAEzB,eAAeL,IAAI","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import Style from "../../utils/Style.js";
4
+ const DEFAULT_CARD = {
5
+ card_background_color: '#fff',
6
+ card_border_radius: 8,
7
+ card_padding: 16,
8
+ card_shadow_color: '#000',
9
+ card_shadow_offset: {
10
+ width: 0,
11
+ height: 2
12
+ },
13
+ card_shadow_opacity: 0.1,
14
+ card_shadow_radius: 4,
15
+ card_elevation: 3
16
+ };
17
+ export const Styles = Style.create({
18
+ container: {
19
+ backgroundColor: DEFAULT_CARD.card_background_color,
20
+ borderRadius: DEFAULT_CARD.card_border_radius,
21
+ padding: DEFAULT_CARD.card_padding,
22
+ shadowColor: DEFAULT_CARD.card_shadow_color,
23
+ shadowOffset: DEFAULT_CARD.card_shadow_offset,
24
+ shadowOpacity: DEFAULT_CARD.card_shadow_opacity,
25
+ shadowRadius: DEFAULT_CARD.card_shadow_radius,
26
+ elevation: DEFAULT_CARD.card_elevation
27
+ }
28
+ });
29
+ export default Styles;
30
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Style","DEFAULT_CARD","card_background_color","card_border_radius","card_padding","card_shadow_color","card_shadow_offset","width","height","card_shadow_opacity","card_shadow_radius","card_elevation","Styles","create","container","backgroundColor","borderRadius","padding","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation"],"sourceRoot":"../../../../src","sources":["components/Card/styles.ts"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,sBAAmB;AAErC,MAAMC,YAAY,GAAG;EACnBC,qBAAqB,EAAE,MAAM;EAC7BC,kBAAkB,EAAE,CAAC;EACrBC,YAAY,EAAE,EAAE;EAChBC,iBAAiB,EAAE,MAAM;EACzBC,kBAAkB,EAAE;IAAEC,KAAK,EAAE,CAAC;IAAEC,MAAM,EAAE;EAAE,CAAC;EAC3CC,mBAAmB,EAAE,GAAG;EACxBC,kBAAkB,EAAE,CAAC;EACrBC,cAAc,EAAE;AAClB,CAAC;AAED,OAAO,MAAMC,MAAM,GAAGZ,KAAK,CAACa,MAAM,CAAC;EACjCC,SAAS,EAAE;IACTC,eAAe,EAAEd,YAAY,CAACC,qBAAqB;IACnDc,YAAY,EAAEf,YAAY,CAACE,kBAAkB;IAC7Cc,OAAO,EAAEhB,YAAY,CAACG,YAAY;IAClCc,WAAW,EAAEjB,YAAY,CAACI,iBAAiB;IAC3Cc,YAAY,EAAElB,YAAY,CAACK,kBAAkB;IAC7Cc,aAAa,EAAEnB,YAAY,CAACQ,mBAAmB;IAC/CY,YAAY,EAAEpB,YAAY,CAACS,kBAAkB;IAC7CY,SAAS,EAAErB,YAAY,CAACU;EAC1B;AACF,CAAC,CAAC;AAEF,eAAeC,MAAM","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["components/Card/types.ts"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ // Export Components
4
+ export * from "./components/Card/Card.js";
5
+
3
6
  // Provider
4
7
  export * from "./providers/ThemeProvider.js";
5
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,cAAc,8BAA2B","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,cAAc,2BAAwB;;AAEtC;AACA,cAAc,8BAA2B","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ # ThemeProvider
2
+
3
+ Design to manage and provide theming capabilities to your application.
4
+
5
+ ## Usage
6
+
7
+ ```tsx
8
+ import { ThemeProvider } from '@dryanovski/react-native-components';
9
+
10
+ const App = () => {
11
+ return (
12
+ <ThemeProvider theme="dark">
13
+ <YourAppComponents />
14
+ </ThemeProvider>
15
+ );
16
+ };
17
+ ```
18
+
19
+ ## Props
20
+
21
+ - `theme`: A string representing the theme to be applied (e.g., "light", "dark").
22
+ - `children`: The child components that will have access to the theme context.
@@ -1,11 +1,66 @@
1
1
  "use strict";
2
2
 
3
- import React from 'react';
4
- import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
+ import React, { useCallback, useContext, useEffect, useState } from 'react';
4
+ import { useColorScheme as useDeviceColorScheme } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ /**
7
+ * Create a ThemeContext with default value null
8
+ * @type {React.Context<ThemeContextType | null>}
9
+ */
10
+ const ThemeContext = /*#__PURE__*/React.createContext(null);
11
+
12
+ /**
13
+ * Give access to theme context
14
+ * @returns {ThemeContextType} The current theme context
15
+ * @throws Will throw an error if used outside of ThemeProvider
16
+ * @example
17
+ * const { theme, changeTheme } = useTheme();
18
+ * console.log(theme); // 'light' | 'dark' | 'system'
19
+ */
20
+ export const useTheme = () => {
21
+ const context = useContext(ThemeContext);
22
+ if (!context) {
23
+ throw new Error('useTheme must be used within a ThemeProvider');
24
+ }
25
+ return context;
26
+ };
27
+
28
+ /**
29
+ * ThemeProvider component to manage and provide theme context
30
+ * @param {React.ReactNode} children - The child components
31
+ * @param {ThemeVariants} theme - The current theme ('light', 'dark', 'system')
32
+ * @param {ThemeVariants} defaultTheme - The default theme if none is provided
33
+ * @param {(theme: ThemeVariants) => void} onThemeChange - Callback when theme changes
34
+ * @returns {JSX.Element} The ThemeProvider component
35
+ *
36
+ * @example
37
+ * <ThemeProvider theme="dark" onThemeChange={(theme) => console.log(theme)}>
38
+ * <App />
39
+ * </ThemeProvider>
40
+ */
5
41
  export const ThemeProvider = ({
6
- children
42
+ children,
43
+ theme,
44
+ defaultTheme = 'light',
45
+ onThemeChange = () => undefined
7
46
  }) => {
8
- return /*#__PURE__*/_jsx(_Fragment, {
47
+ const deviceColorscheme = useDeviceColorScheme();
48
+ const [currentTheme, setTheme] = useState(theme || defaultTheme);
49
+ useEffect(() => {
50
+ onThemeChange && theme && onThemeChange(theme);
51
+ }, [theme, onThemeChange]);
52
+ const changeTheme = useCallback(newTheme => {
53
+ if (newTheme === 'system') {
54
+ setTheme(deviceColorscheme === 'dark' ? 'dark' : 'light');
55
+ return;
56
+ }
57
+ setTheme(newTheme);
58
+ }, [deviceColorscheme]);
59
+ return /*#__PURE__*/_jsx(ThemeContext.Provider, {
60
+ value: {
61
+ theme: currentTheme,
62
+ changeTheme
63
+ },
9
64
  children: children
10
65
  });
11
66
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","Fragment","_Fragment","jsx","_jsx","ThemeProvider","children"],"sourceRoot":"../../../src","sources":["providers/ThemeProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAG1B,OAAO,MAAMC,aAA2C,GAAGA,CAAC;EAAEC;AAAS,CAAC,KAAK;EAC3E,oBAAOF,IAAA,CAAAF,SAAA;IAAAI,QAAA,EAAGA;EAAQ,CAAG,CAAC;AACxB,CAAC;AAED,eAAeD,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useContext","useEffect","useState","useColorScheme","useDeviceColorScheme","jsx","_jsx","ThemeContext","createContext","useTheme","context","Error","ThemeProvider","children","theme","defaultTheme","onThemeChange","undefined","deviceColorscheme","currentTheme","setTheme","changeTheme","newTheme","Provider","value"],"sourceRoot":"../../../src","sources":["providers/ThemeProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,UAAU,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3E,SAASC,cAAc,IAAIC,oBAAoB,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOtE;AACA;AACA;AACA;AACA,MAAMC,YAAY,gBAAGT,KAAK,CAACU,aAAa,CAA0B,IAAI,CAAC;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAMC,OAAO,GAAGV,UAAU,CAACO,YAAY,CAAC;EACxC,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;EACjE;EACA,OAAOD,OAAO;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,aAA2C,GAAGA,CAAC;EAC1DC,QAAQ;EACRC,KAAK;EACLC,YAAY,GAAG,OAAO;EACtBC,aAAa,GAAGA,CAAA,KAAMC;AACxB,CAAC,KAAK;EACJ,MAAMC,iBAAiB,GAAGd,oBAAoB,CAAC,CAAC;EAChD,MAAM,CAACe,YAAY,EAAEC,QAAQ,CAAC,GAAGlB,QAAQ,CACvCY,KAAK,IAAIC,YACX,CAAC;EAEDd,SAAS,CAAC,MAAM;IACde,aAAa,IAAIF,KAAK,IAAIE,aAAa,CAACF,KAAK,CAAC;EAChD,CAAC,EAAE,CAACA,KAAK,EAAEE,aAAa,CAAC,CAAC;EAE1B,MAAMK,WAAW,GAAGtB,WAAW,CAC5BuB,QAAuB,IAAK;IAC3B,IAAIA,QAAQ,KAAK,QAAQ,EAAE;MACzBF,QAAQ,CAACF,iBAAiB,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;MACzD;IACF;IACAE,QAAQ,CAACE,QAAQ,CAAC;EACpB,CAAC,EACD,CAACJ,iBAAiB,CACpB,CAAC;EAED,oBACEZ,IAAA,CAACC,YAAY,CAACgB,QAAQ;IAACC,KAAK,EAAE;MAAEV,KAAK,EAAEK,YAAY;MAAEE;IAAY,CAAE;IAAAR,QAAA,EAChEA;EAAQ,CACY,CAAC;AAE5B,CAAC;AAED,eAAeD,aAAa","ignoreList":[]}
@@ -0,0 +1,384 @@
1
+ "use strict";
2
+
3
+ import { act, renderHook, waitFor } from '@testing-library/react-native';
4
+ import React from 'react';
5
+ import { useColorScheme as useDeviceColorScheme } from 'react-native';
6
+ import { ThemeProvider, useTheme } from "./ThemeProvider.js";
7
+
8
+ // Mock react-native's useColorScheme hook
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ jest.mock('react-native', () => ({
11
+ useColorScheme: jest.fn()
12
+ }));
13
+ const mockedUseDeviceColorScheme = useDeviceColorScheme;
14
+ describe('ThemeProvider', () => {
15
+ beforeEach(() => {
16
+ jest.clearAllMocks();
17
+ mockedUseDeviceColorScheme.mockReturnValue('light');
18
+ });
19
+ describe('useTheme hook', () => {
20
+ it('should throw error when used outside ThemeProvider', () => {
21
+ // Suppress console.error for this test
22
+ const originalError = console.error;
23
+ console.error = jest.fn();
24
+ expect(() => {
25
+ renderHook(() => useTheme());
26
+ }).toThrow('useTheme must be used within a ThemeProvider');
27
+ console.error = originalError;
28
+ });
29
+ it('should return theme context when used inside ThemeProvider', () => {
30
+ const wrapper = ({
31
+ children
32
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
33
+ children: children
34
+ });
35
+ const {
36
+ result
37
+ } = renderHook(() => useTheme(), {
38
+ wrapper
39
+ });
40
+ expect(result.current).toHaveProperty('theme');
41
+ expect(result.current).toHaveProperty('changeTheme');
42
+ });
43
+ });
44
+ describe('ThemeProvider component', () => {
45
+ it('should use defaultTheme when no theme prop is provided and device is in light mode', () => {
46
+ mockedUseDeviceColorScheme.mockReturnValue('light');
47
+ const wrapper = ({
48
+ children
49
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
50
+ defaultTheme: "light",
51
+ children: children
52
+ });
53
+ const {
54
+ result
55
+ } = renderHook(() => useTheme(), {
56
+ wrapper
57
+ });
58
+ expect(result.current.theme).toBe('light');
59
+ });
60
+ it('should use defaultTheme even when device is in dark mode', () => {
61
+ mockedUseDeviceColorScheme.mockReturnValue('dark');
62
+ const wrapper = ({
63
+ children
64
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
65
+ children: children
66
+ });
67
+ const {
68
+ result
69
+ } = renderHook(() => useTheme(), {
70
+ wrapper
71
+ });
72
+
73
+ // defaultTheme is 'light' by default, so it should use 'light' even though device is 'dark'
74
+ expect(result.current.theme).toBe('light');
75
+ });
76
+ it('should use provided theme prop over device color scheme', () => {
77
+ mockedUseDeviceColorScheme.mockReturnValue('dark');
78
+ const wrapper = ({
79
+ children
80
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
81
+ theme: "light",
82
+ children: children
83
+ });
84
+ const {
85
+ result
86
+ } = renderHook(() => useTheme(), {
87
+ wrapper
88
+ });
89
+ expect(result.current.theme).toBe('light');
90
+ });
91
+ it('should use custom defaultTheme when provided', () => {
92
+ mockedUseDeviceColorScheme.mockReturnValue('light');
93
+ const wrapper = ({
94
+ children
95
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
96
+ defaultTheme: "dark",
97
+ children: children
98
+ });
99
+ const {
100
+ result
101
+ } = renderHook(() => useTheme(), {
102
+ wrapper
103
+ });
104
+ expect(result.current.theme).toBe('dark');
105
+ });
106
+ it('should call onThemeChange when theme prop is provided', async () => {
107
+ const onThemeChange = jest.fn();
108
+ const wrapper = ({
109
+ children
110
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
111
+ theme: "light",
112
+ onThemeChange: onThemeChange,
113
+ children: children
114
+ });
115
+ renderHook(() => useTheme(), {
116
+ wrapper
117
+ });
118
+ await waitFor(() => {
119
+ expect(onThemeChange).toHaveBeenCalledWith('light');
120
+ });
121
+ });
122
+ it('should not call onThemeChange when no theme prop is provided', () => {
123
+ const onThemeChange = jest.fn();
124
+ const wrapper = ({
125
+ children
126
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
127
+ onThemeChange: onThemeChange,
128
+ children: children
129
+ });
130
+ renderHook(() => useTheme(), {
131
+ wrapper
132
+ });
133
+
134
+ // onThemeChange should not be called when theme prop is not provided
135
+ expect(onThemeChange).not.toHaveBeenCalled();
136
+ });
137
+ });
138
+ describe('changeTheme function', () => {
139
+ it('should change theme to dark', () => {
140
+ mockedUseDeviceColorScheme.mockReturnValue('light');
141
+ const wrapper = ({
142
+ children
143
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
144
+ defaultTheme: "light",
145
+ children: children
146
+ });
147
+ const {
148
+ result
149
+ } = renderHook(() => useTheme(), {
150
+ wrapper
151
+ });
152
+ expect(result.current.theme).toBe('light');
153
+ act(() => {
154
+ result.current.changeTheme('dark');
155
+ });
156
+ expect(result.current.theme).toBe('dark');
157
+ });
158
+ it('should change theme to light', () => {
159
+ mockedUseDeviceColorScheme.mockReturnValue('dark');
160
+ const wrapper = ({
161
+ children
162
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
163
+ defaultTheme: "dark",
164
+ children: children
165
+ });
166
+ const {
167
+ result
168
+ } = renderHook(() => useTheme(), {
169
+ wrapper
170
+ });
171
+ expect(result.current.theme).toBe('dark');
172
+ act(() => {
173
+ result.current.changeTheme('light');
174
+ });
175
+ expect(result.current.theme).toBe('light');
176
+ });
177
+ it('should use device color scheme when theme is set to "system"', () => {
178
+ mockedUseDeviceColorScheme.mockReturnValue('dark');
179
+ const wrapper = ({
180
+ children
181
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
182
+ defaultTheme: "light",
183
+ children: children
184
+ });
185
+ const {
186
+ result
187
+ } = renderHook(() => useTheme(), {
188
+ wrapper
189
+ });
190
+ expect(result.current.theme).toBe('light');
191
+ act(() => {
192
+ result.current.changeTheme('system');
193
+ });
194
+ expect(result.current.theme).toBe('dark');
195
+ });
196
+ it('should switch to light theme when system theme is set and device is in light mode', () => {
197
+ mockedUseDeviceColorScheme.mockReturnValue('light');
198
+ const wrapper = ({
199
+ children
200
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
201
+ defaultTheme: "dark",
202
+ children: children
203
+ });
204
+ const {
205
+ result
206
+ } = renderHook(() => useTheme(), {
207
+ wrapper
208
+ });
209
+ expect(result.current.theme).toBe('dark');
210
+ act(() => {
211
+ result.current.changeTheme('system');
212
+ });
213
+ expect(result.current.theme).toBe('light');
214
+ });
215
+ it('should handle multiple theme changes', () => {
216
+ mockedUseDeviceColorScheme.mockReturnValue('light');
217
+ const wrapper = ({
218
+ children
219
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
220
+ defaultTheme: "light",
221
+ children: children
222
+ });
223
+ const {
224
+ result
225
+ } = renderHook(() => useTheme(), {
226
+ wrapper
227
+ });
228
+ expect(result.current.theme).toBe('light');
229
+ act(() => {
230
+ result.current.changeTheme('dark');
231
+ });
232
+ expect(result.current.theme).toBe('dark');
233
+ act(() => {
234
+ result.current.changeTheme('light');
235
+ });
236
+ expect(result.current.theme).toBe('light');
237
+ act(() => {
238
+ result.current.changeTheme('system');
239
+ });
240
+ expect(result.current.theme).toBe('light');
241
+ });
242
+ it('should respect device color scheme when changing to system theme', () => {
243
+ // Mock device as dark initially
244
+ mockedUseDeviceColorScheme.mockReturnValue('dark');
245
+ const wrapper = ({
246
+ children
247
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
248
+ defaultTheme: "light",
249
+ children: children
250
+ });
251
+ const {
252
+ result
253
+ } = renderHook(() => useTheme(), {
254
+ wrapper
255
+ });
256
+
257
+ // Initially should be light (from defaultTheme)
258
+ expect(result.current.theme).toBe('light');
259
+
260
+ // Change to system should use device color scheme (dark)
261
+ act(() => {
262
+ result.current.changeTheme('system');
263
+ });
264
+ expect(result.current.theme).toBe('dark');
265
+ });
266
+ it('should update system theme when device color scheme is light', () => {
267
+ // Mock device as light
268
+ mockedUseDeviceColorScheme.mockReturnValue('light');
269
+ const wrapper = ({
270
+ children
271
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
272
+ defaultTheme: "dark",
273
+ children: children
274
+ });
275
+ const {
276
+ result
277
+ } = renderHook(() => useTheme(), {
278
+ wrapper
279
+ });
280
+
281
+ // Initially should be dark (from defaultTheme)
282
+ expect(result.current.theme).toBe('dark');
283
+
284
+ // Change to system should use device color scheme (light)
285
+ act(() => {
286
+ result.current.changeTheme('system');
287
+ });
288
+ expect(result.current.theme).toBe('light');
289
+ });
290
+ });
291
+ describe('edge cases', () => {
292
+ it('should handle undefined device color scheme', () => {
293
+ mockedUseDeviceColorScheme.mockReturnValue(undefined);
294
+ const wrapper = ({
295
+ children
296
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
297
+ defaultTheme: "light",
298
+ children: children
299
+ });
300
+ const {
301
+ result
302
+ } = renderHook(() => useTheme(), {
303
+ wrapper
304
+ });
305
+ expect(result.current.theme).toBe('light');
306
+ });
307
+ it('should handle null device color scheme', () => {
308
+ mockedUseDeviceColorScheme.mockReturnValue(null);
309
+ const wrapper = ({
310
+ children
311
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
312
+ defaultTheme: "dark",
313
+ children: children
314
+ });
315
+ const {
316
+ result
317
+ } = renderHook(() => useTheme(), {
318
+ wrapper
319
+ });
320
+ expect(result.current.theme).toBe('dark');
321
+ });
322
+ it('should maintain theme stability with same changeTheme callback reference', () => {
323
+ const wrapper = ({
324
+ children
325
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
326
+ defaultTheme: "light",
327
+ children: children
328
+ });
329
+ const {
330
+ result,
331
+ rerender
332
+ } = renderHook(() => useTheme(), {
333
+ wrapper
334
+ });
335
+ const initialChangeTheme = result.current.changeTheme;
336
+ rerender({});
337
+
338
+ // changeTheme should maintain reference stability due to useCallback
339
+ expect(result.current.changeTheme).toBe(initialChangeTheme);
340
+ });
341
+ });
342
+ describe('integration tests', () => {
343
+ it('should work with nested providers', () => {
344
+ const wrapper = ({
345
+ children
346
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
347
+ defaultTheme: "light",
348
+ children: /*#__PURE__*/_jsx(ThemeProvider, {
349
+ defaultTheme: "dark",
350
+ children: children
351
+ })
352
+ });
353
+ const {
354
+ result
355
+ } = renderHook(() => useTheme(), {
356
+ wrapper
357
+ });
358
+
359
+ // Should use the innermost provider
360
+ expect(result.current.theme).toBe('dark');
361
+ });
362
+ it('should maintain theme state across re-renders', () => {
363
+ const wrapper = ({
364
+ children
365
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
366
+ defaultTheme: "light",
367
+ children: children
368
+ });
369
+ const {
370
+ result,
371
+ rerender
372
+ } = renderHook(() => useTheme(), {
373
+ wrapper
374
+ });
375
+ act(() => {
376
+ result.current.changeTheme('dark');
377
+ });
378
+ expect(result.current.theme).toBe('dark');
379
+ rerender({});
380
+ expect(result.current.theme).toBe('dark');
381
+ });
382
+ });
383
+ });
384
+ //# sourceMappingURL=ThemeProvider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["act","renderHook","waitFor","React","useColorScheme","useDeviceColorScheme","ThemeProvider","useTheme","jsx","_jsx","jest","mock","fn","mockedUseDeviceColorScheme","describe","beforeEach","clearAllMocks","mockReturnValue","it","originalError","console","error","expect","toThrow","wrapper","children","result","current","toHaveProperty","defaultTheme","theme","toBe","onThemeChange","toHaveBeenCalledWith","not","toHaveBeenCalled","changeTheme","undefined","rerender","initialChangeTheme"],"sourceRoot":"../../../src","sources":["providers/ThemeProvider.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet } from 'react-native';
4
+ export const Style = StyleSheet;
5
+ export default Style;
6
+ //# sourceMappingURL=Style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","Style"],"sourceRoot":"../../../src","sources":["utils/Style.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,MAAMC,KAAK,GAAGD,UAAU;AAE/B,eAAeC,KAAK","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import type { CardProps } from './types';
2
+ /**
3
+ * Card component to display content within a styled container
4
+ * @param {React.ReactNode} children - The content to be displayed inside the card
5
+ * @param {ViewStyle} style - Additional styles for the card container
6
+ * @returns {JSX.Element} The Card component
7
+ * @example
8
+ * <Card style={{ margin: 10 }}>
9
+ * <Text>This is a card</Text>
10
+ * </Card>
11
+ */
12
+ export declare const Card: React.FC<CardProps>;
13
+ export default Card;
14
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/Card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAMpC,CAAC;AAIF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const Styles: {
2
+ container: {
3
+ backgroundColor: string;
4
+ borderRadius: number;
5
+ padding: number;
6
+ shadowColor: string;
7
+ shadowOffset: {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ shadowOpacity: number;
12
+ shadowRadius: number;
13
+ elevation: number;
14
+ };
15
+ };
16
+ export default Styles;
17
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/styles.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;CAWjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { View, ViewStyle } from 'react-native';
2
+ /**
3
+ * Props for the Card component
4
+ */
5
+ export type CardProps = {
6
+ children?: React.ReactNode;
7
+ style?: ViewStyle;
8
+ } & View;
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/Card/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,GAAG,IAAI,CAAC"}