@mochi-inc-japan/react-native-stylex-sheet 1.0.0

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +608 -0
  3. package/README.md +599 -0
  4. package/lib/commonjs/index.js +65 -0
  5. package/lib/commonjs/index.js.map +1 -0
  6. package/lib/commonjs/tests/index.test.js +224 -0
  7. package/lib/commonjs/tests/index.test.js.map +1 -0
  8. package/lib/commonjs/tests/media.test.js +226 -0
  9. package/lib/commonjs/tests/media.test.js.map +1 -0
  10. package/lib/commonjs/tests/mock.test.js +54 -0
  11. package/lib/commonjs/tests/mock.test.js.map +1 -0
  12. package/lib/commonjs/tests/test-utils.js +60 -0
  13. package/lib/commonjs/tests/test-utils.js.map +1 -0
  14. package/lib/commonjs/utils/base.js +72 -0
  15. package/lib/commonjs/utils/base.js.map +1 -0
  16. package/lib/commonjs/utils/hooks.js +60 -0
  17. package/lib/commonjs/utils/hooks.js.map +1 -0
  18. package/lib/commonjs/utils/media.js +69 -0
  19. package/lib/commonjs/utils/media.js.map +1 -0
  20. package/lib/commonjs/utils/theme.js +25 -0
  21. package/lib/commonjs/utils/theme.js.map +1 -0
  22. package/lib/commonjs/utils/tokens.js +18 -0
  23. package/lib/commonjs/utils/tokens.js.map +1 -0
  24. package/lib/commonjs/utils/types.js +6 -0
  25. package/lib/commonjs/utils/types.js.map +1 -0
  26. package/lib/commonjs/utils/variant.js +75 -0
  27. package/lib/commonjs/utils/variant.js.map +1 -0
  28. package/lib/module/index.js +6 -0
  29. package/lib/module/index.js.map +1 -0
  30. package/lib/module/tests/index.test.js +220 -0
  31. package/lib/module/tests/index.test.js.map +1 -0
  32. package/lib/module/tests/media.test.js +222 -0
  33. package/lib/module/tests/media.test.js.map +1 -0
  34. package/lib/module/tests/mock.test.js +49 -0
  35. package/lib/module/tests/mock.test.js.map +1 -0
  36. package/lib/module/tests/test-utils.js +52 -0
  37. package/lib/module/tests/test-utils.js.map +1 -0
  38. package/lib/module/utils/base.js +63 -0
  39. package/lib/module/utils/base.js.map +1 -0
  40. package/lib/module/utils/hooks.js +52 -0
  41. package/lib/module/utils/hooks.js.map +1 -0
  42. package/lib/module/utils/media.js +59 -0
  43. package/lib/module/utils/media.js.map +1 -0
  44. package/lib/module/utils/theme.js +16 -0
  45. package/lib/module/utils/theme.js.map +1 -0
  46. package/lib/module/utils/tokens.js +11 -0
  47. package/lib/module/utils/tokens.js.map +1 -0
  48. package/lib/module/utils/types.js +2 -0
  49. package/lib/module/utils/types.js.map +1 -0
  50. package/lib/module/utils/variant.js +65 -0
  51. package/lib/module/utils/variant.js.map +1 -0
  52. package/lib/types/index.d.ts +6 -0
  53. package/lib/types/tests/check-descriptor.test.d.ts +0 -0
  54. package/lib/types/tests/index.test.d.ts +1 -0
  55. package/lib/types/tests/media.test.d.ts +1 -0
  56. package/lib/types/tests/mock.test.d.ts +1 -0
  57. package/lib/types/tests/test-utils.d.ts +7 -0
  58. package/lib/types/tests/utils.d.ts +6 -0
  59. package/lib/types/utils/base.d.ts +13 -0
  60. package/lib/types/utils/hooks.d.ts +16 -0
  61. package/lib/types/utils/index.d.ts +9 -0
  62. package/lib/types/utils/media.d.ts +5 -0
  63. package/lib/types/utils/theme.d.ts +14 -0
  64. package/lib/types/utils/tokens.d.ts +3 -0
  65. package/lib/types/utils/types.d.ts +28 -0
  66. package/lib/types/utils/utils.d.ts +4 -0
  67. package/lib/types/utils/variant.d.ts +50 -0
  68. package/package.json +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","React","StyleSheet","View","stylex","finalStyle","reduceStyles","describe","it","styles","create","view","backgroundColor","height","width","style","props","expect","toMatchObject","_toJSON","view2","Comp","createElement","toJSON","sameArgs","orgStyles","vars","defineVars","colors","default","primary","secondary","sizes","small","medium","variants","createVariants","var1","var2","length","toBe","mix","shape","borderRadius","round","square","test","fontSize","themes","createThemes","borderBlockColor","light","dark","sx","useStylex","outputStyle","theme","RNStyleXProvider"],"sources":["index.test.tsx"],"sourcesContent":["import { render } from '@testing-library/react-native';\nimport React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport * as stylex from '../';\nimport { Variants } from '../utils/types';\nimport { finalStyle, reduceStyles } from './test-utils';\n\n// ---------------------------------------------------------------------------\n// Basic\n// ---------------------------------------------------------------------------\n\ndescribe('Basic', () => {\n it('create() + props() returns base styles', () => {\n const styles = stylex.create({\n view: {\n backgroundColor: 'red',\n height: 100,\n width: 100,\n },\n });\n\n const { style } = stylex.props(styles.view);\n expect(style[0]).toMatchObject({\n backgroundColor: 'red',\n height: 100,\n width: 100,\n });\n });\n\n it('stylex.props() renders base styles', () => {\n const styles = stylex.create({\n view: { backgroundColor: 'red', height: 100, width: 100 },\n view2: { height: 200, width: 200 },\n });\n\n function Comp() {\n return <View {...stylex.props(styles.view, styles.view2)} />;\n }\n const { toJSON } = render(<Comp />);\n expect(toJSON()?.props.style[1]).toMatchObject({\n height: 200,\n width: 200,\n });\n });\n\n it('stylex.props() has backward compatibility on StyleSheet', () => {\n const sameArgs = {\n view: { backgroundColor: 'red', height: 100, width: 100 },\n view2: { height: 200, width: 200 },\n };\n const styles = stylex.create(sameArgs);\n\n const orgStyles = StyleSheet.create(sameArgs);\n\n expect(stylex.props(styles.view, styles.view2).style).toMatchObject([\n orgStyles.view,\n orgStyles.view2,\n ]);\n });\n});\n\n// ---------------------------------------------------------------------------\n// Variants\n// ---------------------------------------------------------------------------\n\ndescribe('Variants', () => {\n it('variants are applied correctly', () => {\n const vars = stylex.defineVars({\n colors: {\n default: 'white',\n primary: 'red',\n secondary: 'blue',\n },\n sizes: {\n default: 10,\n small: 5,\n medium: 15,\n },\n });\n\n const variants = stylex.createVariants({\n var1: {\n backgroundColor: vars.colors,\n },\n var2: {\n width: vars.sizes,\n },\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: variants.var1.backgroundColor,\n width: variants.var2.width,\n },\n });\n\n expect(stylex.props(styles.view).style[0]).toMatchObject({\n backgroundColor: 'white',\n width: 10,\n });\n\n expect(stylex.props(styles.view).style.length).toBe(1);\n\n expect(\n stylex.props(\n stylex.mix<Variants<typeof variants>>(styles.view, {\n var1: 'primary',\n var2: 'medium',\n })\n ).style\n ).toMatchObject([\n {\n backgroundColor: 'white',\n width: 10,\n },\n {\n backgroundColor: 'red',\n },\n {\n width: 15,\n },\n ]);\n });\n\n it('multiple style have same variant value is applied correctly', () => {\n const variants = stylex.createVariants({\n shape: {\n borderRadius: {\n default: 4,\n round: 8,\n square: 0,\n test: 1,\n },\n fontSize: {\n default: 14,\n round: 16,\n square: 18,\n },\n },\n });\n const styles = stylex.create({\n view: {\n ...variants.shape,\n },\n });\n\n expect(\n reduceStyles(\n stylex.props(\n stylex.mix<Variants<typeof variants>>(styles.view, {\n shape: 'round',\n })\n ).style\n )\n ).toMatchObject({ borderRadius: 8, fontSize: 16 });\n expect(\n reduceStyles(\n stylex.props(\n stylex.mix<Variants<typeof variants>>(styles.view, {\n shape: 'test',\n })\n ).style\n )\n ).toMatchObject({ borderRadius: 1, fontSize: 14 });\n });\n});\n\n// ---------------------------------------------------------------------------\n// Theme queries\n// ---------------------------------------------------------------------------\n\ndescribe('Theme', () => {\n it('theme usage implicitly', () => {\n const { themes } = stylex.createThemes(['light', 'dark']);\n const styles = stylex.create({\n view: {\n borderBlockColor: {\n default: 'black',\n [themes.light]: 'white',\n [themes.dark]: 'gray',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(styles.view)} />;\n }\n\n const outputStyle = (theme: keyof typeof themes) => {\n return finalStyle(\n <stylex.RNStyleXProvider theme={themes[theme]}>\n <Comp />\n </stylex.RNStyleXProvider>\n );\n };\n\n expect(outputStyle('light')).toMatchObject({\n borderBlockColor: 'white',\n });\n expect(outputStyle('dark')).toMatchObject({\n borderBlockColor: 'gray',\n });\n });\n\n it('theme usage implicitly', () => {\n const { themes } = stylex.createThemes(['light', 'dark']);\n const styles = stylex.create({\n view: {\n borderBlockColor: {\n default: 'black',\n [themes.light]: 'white',\n [themes.dark]: 'gray',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n const outputStyle = (theme: keyof typeof themes) => {\n return finalStyle(\n <stylex.RNStyleXProvider theme={themes[theme]}>\n <Comp />\n </stylex.RNStyleXProvider>\n );\n };\n\n expect(outputStyle('light')).toMatchObject({\n borderBlockColor: 'white',\n });\n expect(outputStyle('dark')).toMatchObject({\n borderBlockColor: 'gray',\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,222 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import * as stylex from '../';
4
+ import { mockDimensions, finalStyle } from './test-utils';
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // Media queries
8
+ // ---------------------------------------------------------------------------
9
+
10
+ describe('Media', () => {
11
+ it('single media queries default', () => {
12
+ const media = stylex.defineConsts({
13
+ md: '(width >= 750px)',
14
+ lg: '(width >= 1080px)'
15
+ });
16
+ const styles = stylex.create({
17
+ view: {
18
+ backgroundColor: {
19
+ default: 'yellow',
20
+ [media.md]: 'blue',
21
+ [media.lg]: 'green'
22
+ }
23
+ }
24
+ });
25
+ function Comp() {
26
+ const sx = stylex.useStylex();
27
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
28
+ }
29
+ mockDimensions({
30
+ width: 640
31
+ });
32
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
33
+ backgroundColor: 'yellow'
34
+ });
35
+ });
36
+ it('usage from hooks implicitly', () => {
37
+ const media = stylex.defineConsts({
38
+ md: '(width >= 750px)',
39
+ lg: '(width >= 1080px)'
40
+ });
41
+ const styles = stylex.create({
42
+ view: {
43
+ backgroundColor: {
44
+ default: 'yellow',
45
+ [media.md]: 'blue',
46
+ [media.lg]: 'green'
47
+ }
48
+ }
49
+ });
50
+ function Comp() {
51
+ const sx = stylex.useStylex();
52
+ return /*#__PURE__*/React.createElement(View, sx.props(styles.view));
53
+ }
54
+ mockDimensions({
55
+ width: 750
56
+ });
57
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
58
+ backgroundColor: 'blue'
59
+ });
60
+ });
61
+ it('single media queries md', () => {
62
+ const media = stylex.defineConsts({
63
+ md: '(width >= 750px)',
64
+ lg: '(width >= 1080px)'
65
+ });
66
+ const styles = stylex.create({
67
+ view: {
68
+ backgroundColor: {
69
+ default: 'yellow',
70
+ [media.md]: 'blue',
71
+ [media.lg]: 'green'
72
+ }
73
+ }
74
+ });
75
+ function Comp() {
76
+ const sx = stylex.useStylex();
77
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
78
+ }
79
+ mockDimensions({
80
+ width: 750
81
+ });
82
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
83
+ backgroundColor: 'blue'
84
+ });
85
+ });
86
+ it('single media queries lg', () => {
87
+ const media = stylex.defineConsts({
88
+ md: '(width >= 750px)',
89
+ lg: '(width >= 1080px)'
90
+ });
91
+ const styles = stylex.create({
92
+ view: {
93
+ backgroundColor: {
94
+ default: 'yellow',
95
+ [media.md]: 'blue',
96
+ [media.lg]: 'green'
97
+ }
98
+ }
99
+ });
100
+ function Comp() {
101
+ const sx = stylex.useStylex();
102
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
103
+ }
104
+ mockDimensions({
105
+ width: 1080
106
+ });
107
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
108
+ backgroundColor: 'green'
109
+ });
110
+ });
111
+ it('multi-range media query matches width inside range', () => {
112
+ const media = stylex.defineConsts({
113
+ md: '(750px <= width < 1080px)',
114
+ lg: '(width >= 1080px)'
115
+ });
116
+ const styles = stylex.create({
117
+ view: {
118
+ backgroundColor: {
119
+ default: 'yellow',
120
+ [media.md]: 'blue',
121
+ [media.lg]: 'green'
122
+ }
123
+ }
124
+ });
125
+ function Comp() {
126
+ const sx = stylex.useStylex();
127
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
128
+ }
129
+ mockDimensions({
130
+ width: 900
131
+ });
132
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
133
+ backgroundColor: 'blue'
134
+ });
135
+ });
136
+ it('multi-range media query does not match width outside range', () => {
137
+ const media = stylex.defineConsts({
138
+ md: '(750px <= width < 1080px)',
139
+ lg: '(width >= 1080px)'
140
+ });
141
+ const styles = stylex.create({
142
+ view: {
143
+ backgroundColor: {
144
+ default: 'yellow',
145
+ [media.md]: 'blue',
146
+ [media.lg]: 'green'
147
+ }
148
+ }
149
+ });
150
+ function Comp() {
151
+ const sx = stylex.useStylex();
152
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
153
+ }
154
+ mockDimensions({
155
+ width: 1080
156
+ });
157
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
158
+ backgroundColor: 'green'
159
+ });
160
+ });
161
+ it('multiple properties each with independent breakpoints', () => {
162
+ const media = stylex.defineConsts({
163
+ md: '(width >= 750px)',
164
+ lg: '(width >= 1080px)'
165
+ });
166
+ const styles = stylex.create({
167
+ view: {
168
+ backgroundColor: {
169
+ default: 'yellow',
170
+ [media.md]: 'blue',
171
+ [media.lg]: 'green'
172
+ },
173
+ width: {
174
+ default: 100,
175
+ [media.md]: 200,
176
+ [media.lg]: 300
177
+ }
178
+ }
179
+ });
180
+ function Comp() {
181
+ const sx = stylex.useStylex();
182
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.view)));
183
+ }
184
+ mockDimensions({
185
+ width: 750
186
+ });
187
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
188
+ backgroundColor: 'blue',
189
+ width: 200
190
+ });
191
+ });
192
+ it('multiple style entries with media queries are merged in order', () => {
193
+ const media = stylex.defineConsts({
194
+ md: '(width >= 750px)'
195
+ });
196
+ const styles = stylex.create({
197
+ base: {
198
+ backgroundColor: {
199
+ default: 'yellow'
200
+ },
201
+ height: 100
202
+ },
203
+ override: {
204
+ backgroundColor: {
205
+ [media.md]: 'purple'
206
+ }
207
+ }
208
+ });
209
+ function Comp() {
210
+ const sx = stylex.useStylex();
211
+ return /*#__PURE__*/React.createElement(View, sx.props(sx.mix(styles.base), sx.mix(styles.override)));
212
+ }
213
+ mockDimensions({
214
+ width: 750
215
+ });
216
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, null, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
217
+ backgroundColor: 'purple',
218
+ height: 100
219
+ });
220
+ });
221
+ });
222
+ //# sourceMappingURL=media.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","stylex","mockDimensions","finalStyle","describe","it","media","defineConsts","md","lg","styles","create","view","backgroundColor","default","Comp","sx","useStylex","createElement","props","mix","width","expect","RNStyleXProvider","toMatchObject","base","height","override"],"sources":["media.test.tsx"],"sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport * as stylex from '../';\nimport { mockDimensions, finalStyle } from './test-utils';\n\n// ---------------------------------------------------------------------------\n// Media queries\n// ---------------------------------------------------------------------------\n\ndescribe('Media', () => {\n it('single media queries default', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 640 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'yellow',\n });\n });\n\n it('usage from hooks implicitly', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(styles.view)} />;\n }\n\n mockDimensions({ width: 750 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'blue',\n });\n });\n\n it('single media queries md', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 750 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'blue',\n });\n });\n\n it('single media queries lg', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 1080 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'green',\n });\n });\n\n it('multi-range media query matches width inside range', () => {\n const media = stylex.defineConsts({\n md: '(750px <= width < 1080px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 900 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'blue',\n });\n });\n\n it('multi-range media query does not match width outside range', () => {\n const media = stylex.defineConsts({\n md: '(750px <= width < 1080px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 1080 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'green',\n });\n });\n\n it('multiple properties each with independent breakpoints', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [media.md]: 'blue',\n [media.lg]: 'green',\n },\n width: {\n default: 100,\n [media.md]: 200,\n [media.lg]: 300,\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(sx.mix(styles.view))} />;\n }\n\n mockDimensions({ width: 750 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'blue',\n width: 200,\n });\n });\n\n it('multiple style entries with media queries are merged in order', () => {\n const media = stylex.defineConsts({\n md: '(width >= 750px)',\n });\n\n const styles = stylex.create({\n base: {\n backgroundColor: {\n default: 'yellow',\n },\n height: 100,\n },\n override: {\n backgroundColor: {\n [media.md]: 'purple',\n },\n },\n });\n\n function Comp() {\n const sx = stylex.useStylex();\n return (\n <View {...sx.props(sx.mix(styles.base), sx.mix(styles.override))} />\n );\n }\n\n mockDimensions({ width: 750 });\n expect(\n finalStyle(\n <stylex.RNStyleXProvider>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'purple',\n height: 100,\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { View } from 'react-native';
3
+ import { mockDimensions, finalStyle } from './test-utils';
4
+ jest.mock('../utils/media', () => {
5
+ const originalModule = jest.requireActual('../utils/media');
6
+ return {
7
+ ...originalModule,
8
+ media: jest.fn(originalModule.media)
9
+ };
10
+ });
11
+ it('preset media effectively key access', async () => {
12
+ const mediaUtils = await import('../utils/media');
13
+ const stylex = await import('../');
14
+ const mocked = jest.mocked(mediaUtils.media);
15
+ const mediaVal = stylex.defineConsts({
16
+ md: '(width >= 750px)',
17
+ lg: '(width >= 1080px)'
18
+ });
19
+ const styles = stylex.create({
20
+ view: {
21
+ backgroundColor: {
22
+ default: 'yellow',
23
+ [mediaVal.md]: 'blue',
24
+ [mediaVal.lg]: 'green'
25
+ },
26
+ width: {
27
+ default: 100,
28
+ [mediaVal.md]: 200,
29
+ [mediaVal.lg]: 300
30
+ }
31
+ }
32
+ });
33
+ mockDimensions({
34
+ width: 750
35
+ });
36
+ function Comp() {
37
+ const sx = stylex.useStylex();
38
+ return /*#__PURE__*/React.createElement(View, sx.props(styles.view));
39
+ }
40
+ expect(finalStyle(/*#__PURE__*/React.createElement(stylex.RNStyleXProvider, {
41
+ media: mediaVal
42
+ }, /*#__PURE__*/React.createElement(Comp, null)))).toMatchObject({
43
+ backgroundColor: 'blue',
44
+ width: 200
45
+ });
46
+ expect(jest.isMockFunction(mocked)).toBe(true);
47
+ expect(mocked.mock.calls[0][1]).toBe(mediaVal.md);
48
+ });
49
+ //# sourceMappingURL=mock.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","mockDimensions","finalStyle","jest","mock","originalModule","requireActual","media","fn","it","mediaUtils","stylex","mocked","mediaVal","defineConsts","md","lg","styles","create","view","backgroundColor","default","width","Comp","sx","useStylex","createElement","props","expect","RNStyleXProvider","toMatchObject","isMockFunction","toBe","calls"],"sources":["mock.test.tsx"],"sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport { mockDimensions, finalStyle } from './test-utils';\n\njest.mock('../utils/media', () => {\n const originalModule = jest.requireActual('../utils/media');\n\n return {\n ...originalModule,\n media: jest.fn(originalModule.media),\n };\n});\n\nit('preset media effectively key access', async () => {\n const mediaUtils = await import( '../utils/media');\n const stylex = await import( '../');\n\n const mocked = jest.mocked(mediaUtils.media);\n\n const mediaVal = stylex.defineConsts({\n md: '(width >= 750px)',\n lg: '(width >= 1080px)',\n });\n\n const styles = stylex.create({\n view: {\n backgroundColor: {\n default: 'yellow',\n [mediaVal.md]: 'blue',\n [mediaVal.lg]: 'green',\n },\n width: {\n default: 100,\n [mediaVal.md]: 200,\n [mediaVal.lg]: 300,\n },\n },\n });\n\n mockDimensions({ width: 750 });\n\n function Comp() {\n const sx = stylex.useStylex();\n return <View {...sx.props(styles.view)} />;\n }\n\n expect(\n finalStyle(\n <stylex.RNStyleXProvider media={mediaVal}>\n <Comp />\n </stylex.RNStyleXProvider>\n )\n ).toMatchObject({\n backgroundColor: 'blue',\n width: 200,\n });\n\n expect(jest.isMockFunction(mocked)).toBe(true);\n expect(mocked.mock.calls[0][1]).toBe(mediaVal.md);\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,cAAc,EAAEC,UAAU,QAAQ,cAAc;AAEzDC,IAAI,CAACC,IAAI,CAAC,gBAAgB,EAAE,MAAM;EAChC,MAAMC,cAAc,GAAGF,IAAI,CAACG,aAAa,CAAC,gBAAgB,CAAC;EAE3D,OAAO;IACL,GAAGD,cAAc;IACjBE,KAAK,EAAEJ,IAAI,CAACK,EAAE,CAACH,cAAc,CAACE,KAAK;EACrC,CAAC;AACH,CAAC,CAAC;AAEFE,EAAE,CAAC,qCAAqC,EAAE,YAAY;EACpD,MAAMC,UAAU,GAAG,MAAM,MAAM,CAAE,gBAAgB,CAAC;EAClD,MAAMC,MAAM,GAAG,MAAM,MAAM,CAAE,KAAK,CAAC;EAEnC,MAAMC,MAAM,GAAGT,IAAI,CAACS,MAAM,CAACF,UAAU,CAACH,KAAK,CAAC;EAE5C,MAAMM,QAAQ,GAAGF,MAAM,CAACG,YAAY,CAAC;IACnCC,EAAE,EAAE,kBAAkB;IACtBC,EAAE,EAAE;EACN,CAAC,CAAC;EAEF,MAAMC,MAAM,GAAGN,MAAM,CAACO,MAAM,CAAC;IAC3BC,IAAI,EAAE;MACJC,eAAe,EAAE;QACfC,OAAO,EAAE,QAAQ;QACjB,CAACR,QAAQ,CAACE,EAAE,GAAG,MAAM;QACrB,CAACF,QAAQ,CAACG,EAAE,GAAG;MACjB,CAAC;MACDM,KAAK,EAAE;QACLD,OAAO,EAAE,GAAG;QACZ,CAACR,QAAQ,CAACE,EAAE,GAAG,GAAG;QAClB,CAACF,QAAQ,CAACG,EAAE,GAAG;MACjB;IACF;EACF,CAAC,CAAC;EAEFf,cAAc,CAAC;IAAEqB,KAAK,EAAE;EAAI,CAAC,CAAC;EAE9B,SAASC,IAAIA,CAAA,EAAG;IACd,MAAMC,EAAE,GAAGb,MAAM,CAACc,SAAS,CAAC,CAAC;IAC7B,oBAAO1B,KAAA,CAAA2B,aAAA,CAAC1B,IAAI,EAAKwB,EAAE,CAACG,KAAK,CAACV,MAAM,CAACE,IAAI,CAAI,CAAC;EAC5C;EAEAS,MAAM,CACJ1B,UAAU,cACRH,KAAA,CAAA2B,aAAA,CAACf,MAAM,CAACkB,gBAAgB;IAACtB,KAAK,EAAEM;EAAS,gBACvCd,KAAA,CAAA2B,aAAA,CAACH,IAAI,MAAE,CACgB,CAC3B,CACF,CAAC,CAACO,aAAa,CAAC;IACdV,eAAe,EAAE,MAAM;IACvBE,KAAK,EAAE;EACT,CAAC,CAAC;EAEFM,MAAM,CAACzB,IAAI,CAAC4B,cAAc,CAACnB,MAAM,CAAC,CAAC,CAACoB,IAAI,CAAC,IAAI,CAAC;EAC9CJ,MAAM,CAAChB,MAAM,CAACR,IAAI,CAAC6B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACD,IAAI,CAACnB,QAAQ,CAACE,EAAE,CAAC;AACnD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ import { render } from '@testing-library/react-native';
2
+ const aspectRatio = 19.5 / 9; // iPhone 14
3
+
4
+ export function mockDimensions(_ref) {
5
+ let {
6
+ width = 750,
7
+ height = width * aspectRatio,
8
+ pixelRatio = 1
9
+ } = _ref;
10
+ jest.resetModules();
11
+ jest.doMock('react-native/Libraries/Utilities/useWindowDimensions', () => ({
12
+ __esModule: true,
13
+ default: jest.fn().mockReturnValue({
14
+ width,
15
+ height
16
+ })
17
+ }));
18
+ // The react-native index.js exports PixelRatio via a lazy getter:
19
+ // get PixelRatio() { return require('./Libraries/Utilities/PixelRatio').default }
20
+ // so the mock must be wrapped under `default`.
21
+ jest.doMock('react-native/Libraries/Utilities/PixelRatio', () => ({
22
+ __esModule: true,
23
+ default: {
24
+ get: () => pixelRatio,
25
+ getFontScale: () => 1,
26
+ getPixelSizeForLayoutSize: layoutSize => layoutSize * pixelRatio,
27
+ roundToNearestPixel: layoutSize => Math.round(layoutSize * pixelRatio) / pixelRatio
28
+ }
29
+ }));
30
+ jest.doMock('react-native/Libraries/Utilities/Dimensions', () => ({
31
+ __esModule: true,
32
+ default: {
33
+ get: jest.fn().mockReturnValue({
34
+ width,
35
+ height
36
+ }),
37
+ addEventListener: jest.fn(),
38
+ removeEventListener: jest.fn()
39
+ }
40
+ }));
41
+ }
42
+ export function reduceStyles(s) {
43
+ return s.reduce((s1, s2) => ({
44
+ ...s1,
45
+ ...s2
46
+ }), {});
47
+ }
48
+ export function finalStyle(Component) {
49
+ var _render$toJSON;
50
+ return reduceStyles((_render$toJSON = render(Component).toJSON()) === null || _render$toJSON === void 0 ? void 0 : _render$toJSON.props.style);
51
+ }
52
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","aspectRatio","mockDimensions","_ref","width","height","pixelRatio","jest","resetModules","doMock","__esModule","default","fn","mockReturnValue","get","getFontScale","getPixelSizeForLayoutSize","layoutSize","roundToNearestPixel","Math","round","addEventListener","removeEventListener","reduceStyles","s","reduce","s1","s2","finalStyle","Component","_render$toJSON","toJSON","props","style"],"sources":["test-utils.tsx"],"sourcesContent":["import { render } from '@testing-library/react-native';\n\nconst aspectRatio = 19.5 / 9; // iPhone 14\n\nexport function mockDimensions({\n width = 750,\n height = width * aspectRatio,\n pixelRatio = 1,\n}: {\n width?: number;\n height?: number;\n pixelRatio?: number;\n}) {\n jest.resetModules();\n jest.doMock('react-native/Libraries/Utilities/useWindowDimensions', () => ({\n __esModule: true,\n default: jest.fn().mockReturnValue({ width, height }),\n }));\n // The react-native index.js exports PixelRatio via a lazy getter:\n // get PixelRatio() { return require('./Libraries/Utilities/PixelRatio').default }\n // so the mock must be wrapped under `default`.\n jest.doMock('react-native/Libraries/Utilities/PixelRatio', () => ({\n __esModule: true,\n default: {\n get: () => pixelRatio,\n getFontScale: () => 1,\n getPixelSizeForLayoutSize: (layoutSize: number) =>\n layoutSize * pixelRatio,\n roundToNearestPixel: (layoutSize: number) =>\n Math.round(layoutSize * pixelRatio) / pixelRatio,\n },\n }));\n jest.doMock('react-native/Libraries/Utilities/Dimensions', () => ({\n __esModule: true,\n default: {\n get: jest.fn().mockReturnValue({ width, height }),\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n },\n }));\n}\n\nexport function reduceStyles(s: any) {\n return s.reduce((s1: any, s2: any) => ({ ...s1, ...s2 }), {});\n}\n\nexport function finalStyle(Component: React.ReactElement) {\n return reduceStyles(\n render(\n Component\n ).toJSON()?.props.style\n );\n}\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,+BAA+B;AAEtD,MAAMC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;AAE9B,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAQ3B;EAAA,IAR4B;IAC7BC,KAAK,GAAG,GAAG;IACXC,MAAM,GAAGD,KAAK,GAAGH,WAAW;IAC5BK,UAAU,GAAG;EAKf,CAAC,GAAAH,IAAA;EACCI,IAAI,CAACC,YAAY,CAAC,CAAC;EACnBD,IAAI,CAACE,MAAM,CAAC,sDAAsD,EAAE,OAAO;IACzEC,UAAU,EAAE,IAAI;IAChBC,OAAO,EAAEJ,IAAI,CAACK,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;MAAET,KAAK;MAAEC;IAAO,CAAC;EACtD,CAAC,CAAC,CAAC;EACH;EACA;EACA;EACAE,IAAI,CAACE,MAAM,CAAC,6CAA6C,EAAE,OAAO;IAChEC,UAAU,EAAE,IAAI;IAChBC,OAAO,EAAE;MACPG,GAAG,EAAEA,CAAA,KAAMR,UAAU;MACrBS,YAAY,EAAEA,CAAA,KAAM,CAAC;MACrBC,yBAAyB,EAAGC,UAAkB,IAC5CA,UAAU,GAAGX,UAAU;MACzBY,mBAAmB,EAAGD,UAAkB,IACtCE,IAAI,CAACC,KAAK,CAACH,UAAU,GAAGX,UAAU,CAAC,GAAGA;IAC1C;EACF,CAAC,CAAC,CAAC;EACHC,IAAI,CAACE,MAAM,CAAC,6CAA6C,EAAE,OAAO;IAChEC,UAAU,EAAE,IAAI;IAChBC,OAAO,EAAE;MACPG,GAAG,EAAEP,IAAI,CAACK,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;QAAET,KAAK;QAAEC;MAAO,CAAC,CAAC;MACjDgB,gBAAgB,EAAEd,IAAI,CAACK,EAAE,CAAC,CAAC;MAC3BU,mBAAmB,EAAEf,IAAI,CAACK,EAAE,CAAC;IAC/B;EACF,CAAC,CAAC,CAAC;AACL;AAEA,OAAO,SAASW,YAAYA,CAACC,CAAM,EAAE;EACnC,OAAOA,CAAC,CAACC,MAAM,CAAC,CAACC,EAAO,EAAEC,EAAO,MAAM;IAAE,GAAGD,EAAE;IAAE,GAAGC;EAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D;AAEA,OAAO,SAASC,UAAUA,CAACC,SAA6B,EAAE;EAAA,IAAAC,cAAA;EACxD,OAAOP,YAAY,EAAAO,cAAA,GACjB9B,MAAM,CACJ6B,SACF,CAAC,CAACE,MAAM,CAAC,CAAC,cAAAD,cAAA,uBAFVA,cAAA,CAEYE,KAAK,CAACC,KACpB,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { media } from './media';
3
+ import { variants } from './variant';
4
+ import { resolveTheme } from './theme';
5
+ function bundleStyleSheet(styleObject) {
6
+ const result = Object.entries(styleObject).reduce((current, _ref) => {
7
+ let [key, value] = _ref;
8
+ if (typeof value === 'object') {
9
+ Object.entries(value).forEach(_ref2 => {
10
+ let [variantKey, variantValue] = _ref2;
11
+ if (!current[variantKey]) {
12
+ current[variantKey] = {};
13
+ }
14
+ current[variantKey][key] = variantValue;
15
+ });
16
+ } else {
17
+ current.default || (current.default = {});
18
+ current.default[key] = value;
19
+ }
20
+ return current;
21
+ }, {});
22
+ return StyleSheet.create(result);
23
+ }
24
+ export const create = args => {
25
+ return Object.entries(args).reduce((current, _ref3) => {
26
+ let [key, value] = _ref3;
27
+ current[key] = bundleStyleSheet(value);
28
+ return current;
29
+ }, {});
30
+ };
31
+ export const mix = (target, variantArgs) => {
32
+ if (!target) return [];
33
+ const [_target, config] = Array.isArray(target) ? target : [target, {}];
34
+ let results = _target.default ? [_target.default] : [];
35
+ if (config.theme) {
36
+ const themeSheet = resolveTheme(_target, config.theme);
37
+ themeSheet && results.push(themeSheet);
38
+ }
39
+ if (variantArgs) {
40
+ results = [...results, ...variants(_target, variantArgs)];
41
+ }
42
+ if (config.media) {
43
+ results = [...results, ...media(_target, config.media)];
44
+ }
45
+ return results;
46
+ };
47
+ export const props = function () {
48
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
49
+ args[_key] = arguments[_key];
50
+ }
51
+ return {
52
+ style: args.reduce((acc, arg) => {
53
+ var _default;
54
+ if (!arg) return acc;
55
+ if (Array.isArray(arg)) {
56
+ return [...acc, ...arg];
57
+ }
58
+ const xStyleBase = (_default = arg.default) !== null && _default !== void 0 ? _default : arg;
59
+ return [...acc, xStyleBase];
60
+ }, [])
61
+ };
62
+ };
63
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","media","variants","resolveTheme","bundleStyleSheet","styleObject","result","Object","entries","reduce","current","_ref","key","value","forEach","_ref2","variantKey","variantValue","default","create","args","_ref3","mix","target","variantArgs","_target","config","Array","isArray","results","theme","themeSheet","push","props","_len","arguments","length","_key","style","acc","arg","_default","xStyleBase"],"sources":["base.ts"],"sourcesContent":["import { StyleSheet } from 'react-native';\nimport {\n XRNStyleSheets,\n XRNStyle,\n NamedStyles,\n RNStyle,\n VariantStyleSheet,\n} from './types';\nimport { media } from './media';\nimport { variants } from './variant';\nimport { resolveTheme } from './theme';\n\nfunction bundleStyleSheet<S extends RNStyle>(styleObject: XRNStyle<S>) {\n const result = Object.entries(styleObject).reduce((current, [key, value]) => {\n if (typeof value === 'object') {\n Object.entries(value).forEach(([variantKey, variantValue]) => {\n if (!current[variantKey]) {\n current[variantKey] = {};\n }\n (current[variantKey] as any)[key] = variantValue;\n });\n } else {\n current.default ||= {};\n (current.default as any)[key] = value;\n }\n return current;\n }, {} as Record<string, RNStyle>);\n return StyleSheet.create(result);\n}\n\nexport const create = <T extends NamedStyles<any, R>, R extends RNStyle>(\n args: T\n): XRNStyleSheets<T, R> => {\n return Object.entries(args).reduce((current, [key, value]) => {\n (current as any)[key] = bundleStyleSheet(value);\n return current;\n }, {} as XRNStyleSheets<T, R>);\n};\n\nexport const mix = <\n Variants extends { [key: string]: string | number | boolean | undefined },\n Theme extends string = string,\n T extends VariantStyleSheet<string, RNStyle> = VariantStyleSheet<\n string,\n RNStyle\n >\n>(\n target?: T | [T, { theme?: Theme; media?: number | string }],\n variantArgs?: Variants\n): RNStyle[] => {\n if (!target) return [];\n const [_target, config] = Array.isArray(target) ? target : [target as T, {}];\n let results = _target.default ? [_target.default] : ([] as RNStyle[]);\n if (config.theme) {\n const themeSheet = resolveTheme(_target, config.theme);\n themeSheet && results.push(themeSheet);\n }\n if (variantArgs) {\n results = [...results, ...variants(_target, variantArgs)];\n }\n if (config.media) {\n results = [...results, ...media(_target, config.media)];\n }\n return results;\n};\n\ntype PropValue = VariantStyleSheet<string, RNStyle> | RNStyle;\nexport const props = <T extends RNStyle>(\n ...args: (PropValue | RNStyle[] | false | null | undefined)[]\n): { style: T[] } => {\n return {\n style: args.reduce((acc: T[], arg) => {\n if (!arg) return acc;\n if (Array.isArray(arg)) {\n return [...acc, ...arg] as T[];\n }\n const xStyleBase =\n (arg as VariantStyleSheet<string, RNStyle>).default ?? arg;\n return [...acc, xStyleBase] as T[];\n }, []) as T[],\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ import { Children, createContext, createElement, useContext, useMemo } from 'react';
2
+ import { PixelRatio, useWindowDimensions } from 'react-native';
3
+ import { mix, props } from './base';
4
+ import { detectMedia } from './media';
5
+ const RNStyleXContext = /*#__PURE__*/createContext(undefined);
6
+ export const RNStyleXProvider = componentProps => {
7
+ var _componentProps$windo, _componentProps$theme;
8
+ const {
9
+ width
10
+ } = useWindowDimensions();
11
+ const correctedWidth = (_componentProps$windo = componentProps.windowWidth) !== null && _componentProps$windo !== void 0 ? _componentProps$windo : PixelRatio.getPixelSizeForLayoutSize(width);
12
+ const theme = (_componentProps$theme = componentProps.theme) !== null && _componentProps$theme !== void 0 ? _componentProps$theme : 'default';
13
+ const value = useMemo(() => {
14
+ const media = componentProps.media && detectMedia(componentProps.media, correctedWidth);
15
+ return {
16
+ windowWidth: correctedWidth,
17
+ theme,
18
+ props() {
19
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
20
+ args[_key] = arguments[_key];
21
+ }
22
+ const sheets = args.map(v => Array.isArray(v) ? v : v && this.mix(v));
23
+ return props(...sheets);
24
+ },
25
+ mix(arg, variants) {
26
+ if (!arg) return [];
27
+ const config = {
28
+ theme,
29
+ media: media !== null && media !== void 0 ? media : this.windowWidth
30
+ };
31
+ if (Array.isArray(arg)) {
32
+ return mix([arg[0], {
33
+ ...config,
34
+ ...arg[1]
35
+ }], variants);
36
+ }
37
+ return mix([arg, config], variants);
38
+ }
39
+ };
40
+ }, [correctedWidth, theme]);
41
+ return /*#__PURE__*/createElement(RNStyleXContext.Provider, {
42
+ value
43
+ }, Children.only(componentProps.children));
44
+ };
45
+ export const useStylex = () => {
46
+ const context = useContext(RNStyleXContext);
47
+ if (!context) {
48
+ throw new Error('useStylex must be used within a RNStyleXProvider');
49
+ }
50
+ return context;
51
+ };
52
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Children","createContext","createElement","useContext","useMemo","PixelRatio","useWindowDimensions","mix","props","detectMedia","RNStyleXContext","undefined","RNStyleXProvider","componentProps","_componentProps$windo","_componentProps$theme","width","correctedWidth","windowWidth","getPixelSizeForLayoutSize","theme","value","media","_len","arguments","length","args","Array","_key","sheets","map","v","isArray","arg","variants","config","Provider","only","children","useStylex","context","Error"],"sources":["hooks.ts"],"sourcesContent":["import {\n Children,\n createContext,\n createElement,\n useContext,\n useMemo,\n} from 'react';\nimport { PixelRatio, useWindowDimensions } from 'react-native';\nimport { mix, props } from './base';\nimport { RNStyle, VariantStyleSheet } from './types';\nimport { detectMedia } from './media';\n\ntype IApi = {\n props: typeof props;\n mix: typeof mix;\n};\n\ntype UserConfig = {\n windowWidth: number;\n theme: string;\n};\n\ntype ValueType = UserConfig & IApi;\n\nconst RNStyleXContext = createContext<ValueType | undefined>(undefined);\n\nexport const RNStyleXProvider = (\n componentProps: Partial<Pick<ValueType, 'windowWidth' | 'theme'>> & {\n media?: Record<string, string>;\n children: React.ReactNode;\n }\n) => {\n const { width } = useWindowDimensions();\n const correctedWidth =\n componentProps.windowWidth ?? PixelRatio.getPixelSizeForLayoutSize(width);\n const theme = componentProps.theme ?? 'default';\n\n const value = useMemo<ValueType>(() => {\n const media = componentProps.media && detectMedia(componentProps.media, correctedWidth);\n return {\n windowWidth: correctedWidth,\n theme,\n props(...args) {\n const sheets = args.map((v) =>\n Array.isArray(v)\n ? v\n : v && this.mix(v as VariantStyleSheet<string, RNStyle>)\n );\n return props(...sheets);\n },\n mix(arg, variants) {\n if (!arg) return [];\n const config = {\n theme,\n media: media ?? this.windowWidth,\n };\n if (Array.isArray(arg)) {\n return mix([arg[0], { ...config, ...arg[1] }], variants);\n }\n return mix([arg, config], variants);\n },\n };\n }, [correctedWidth, theme]);\n return createElement(\n RNStyleXContext.Provider,\n { value },\n Children.only(componentProps.children)\n );\n};\n\nexport const useStylex = () => {\n const context = useContext(RNStyleXContext);\n if (!context) {\n throw new Error('useStylex must be used within a RNStyleXProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,SACEA,QAAQ,EACRC,aAAa,EACbC,aAAa,EACbC,UAAU,EACVC,OAAO,QACF,OAAO;AACd,SAASC,UAAU,EAAEC,mBAAmB,QAAQ,cAAc;AAC9D,SAASC,GAAG,EAAEC,KAAK,QAAQ,QAAQ;AAEnC,SAASC,WAAW,QAAQ,SAAS;AAcrC,MAAMC,eAAe,gBAAGT,aAAa,CAAwBU,SAAS,CAAC;AAEvE,OAAO,MAAMC,gBAAgB,GAC3BC,cAGC,IACE;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EACH,MAAM;IAAEC;EAAM,CAAC,GAAGV,mBAAmB,CAAC,CAAC;EACvC,MAAMW,cAAc,IAAAH,qBAAA,GAClBD,cAAc,CAACK,WAAW,cAAAJ,qBAAA,cAAAA,qBAAA,GAAIT,UAAU,CAACc,yBAAyB,CAACH,KAAK,CAAC;EAC3E,MAAMI,KAAK,IAAAL,qBAAA,GAAGF,cAAc,CAACO,KAAK,cAAAL,qBAAA,cAAAA,qBAAA,GAAI,SAAS;EAE/C,MAAMM,KAAK,GAAGjB,OAAO,CAAY,MAAM;IACrC,MAAMkB,KAAK,GAAGT,cAAc,CAACS,KAAK,IAAIb,WAAW,CAACI,cAAc,CAACS,KAAK,EAAEL,cAAc,CAAC;IACvF,OAAO;MACLC,WAAW,EAAED,cAAc;MAC3BG,KAAK;MACLZ,KAAKA,CAAA,EAAU;QAAA,SAAAe,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAANC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;UAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;QAAA;QACX,MAAMC,MAAM,GAAGH,IAAI,CAACI,GAAG,CAAEC,CAAC,IACxBJ,KAAK,CAACK,OAAO,CAACD,CAAC,CAAC,GACZA,CAAC,GACDA,CAAC,IAAI,IAAI,CAACxB,GAAG,CAACwB,CAAuC,CAC3D,CAAC;QACD,OAAOvB,KAAK,CAAC,GAAGqB,MAAM,CAAC;MACzB,CAAC;MACDtB,GAAGA,CAAC0B,GAAG,EAAEC,QAAQ,EAAE;QACjB,IAAI,CAACD,GAAG,EAAE,OAAO,EAAE;QACnB,MAAME,MAAM,GAAG;UACbf,KAAK;UACLE,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,IAAI,CAACJ;QACvB,CAAC;QACD,IAAIS,KAAK,CAACK,OAAO,CAACC,GAAG,CAAC,EAAE;UACtB,OAAO1B,GAAG,CAAC,CAAC0B,GAAG,CAAC,CAAC,CAAC,EAAE;YAAE,GAAGE,MAAM;YAAE,GAAGF,GAAG,CAAC,CAAC;UAAE,CAAC,CAAC,EAAEC,QAAQ,CAAC;QAC1D;QACA,OAAO3B,GAAG,CAAC,CAAC0B,GAAG,EAAEE,MAAM,CAAC,EAAED,QAAQ,CAAC;MACrC;IACF,CAAC;EACH,CAAC,EAAE,CAACjB,cAAc,EAAEG,KAAK,CAAC,CAAC;EAC3B,oBAAOlB,aAAa,CAClBQ,eAAe,CAAC0B,QAAQ,EACxB;IAAEf;EAAM,CAAC,EACTrB,QAAQ,CAACqC,IAAI,CAACxB,cAAc,CAACyB,QAAQ,CACvC,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,SAAS,GAAGA,CAAA,KAAM;EAC7B,MAAMC,OAAO,GAAGrC,UAAU,CAACO,eAAe,CAAC;EAC3C,IAAI,CAAC8B,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,kDAAkD,CAAC;EACrE;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ export const media = (target, mediaParam) => {
2
+ const result = [];
3
+ if (typeof mediaParam === 'string') {
4
+ target[mediaParam] && result.push(target[mediaParam]);
5
+ } else if (typeof mediaParam === 'number') {
6
+ const keys = Object.keys(target);
7
+ for (let i = keys.length - 1; i >= 0; i--) {
8
+ const key = keys[i];
9
+ // NOTE: Assuming only one media query will match, we can break after the first match.
10
+ // Because later media query will be more specific and override the previous one.
11
+ if (matchMediaRangeQuery(key, mediaParam)) {
12
+ result.push(target[key]);
13
+ break;
14
+ }
15
+ }
16
+ }
17
+ return result;
18
+ };
19
+
20
+ // NOTE: input mediaKeys
21
+ // - ['(750px <= width < 1080px)', '(width > 750px)']
22
+ export const detectMedia = (mediaKeys, width) => {
23
+ const targets = Array.isArray(mediaKeys) ? mediaKeys : Object.values(mediaKeys);
24
+ for (const val of targets) {
25
+ if (matchMediaRangeQuery(val, width)) {
26
+ return val;
27
+ }
28
+ }
29
+ return;
30
+ };
31
+ const VALID_SIGNS = ['<=', '<', '>=', '>'];
32
+ export function matchMediaRangeQuery(query, windowWidth) {
33
+ const singleRangeRegex = /^\(width\s+([><=]+)\s+([0-9]+)px\)$/;
34
+ const multiRangeRegex = /^\(([0-9]+)px\s([><=]+)\swidth\s+([><=]+)\s+([0-9]+)px\)$/; // prettier-ignore
35
+ const singleRangeMatches = query.match(singleRangeRegex);
36
+ const multiRangeMatches = query.match(multiRangeRegex);
37
+ if (!singleRangeMatches && !multiRangeMatches) return false;
38
+ let result;
39
+ if (multiRangeMatches && multiRangeMatches.length === 5) {
40
+ const [, _width1, sign1, sign2, _width2] = multiRangeMatches;
41
+ const width1 = parseInt(_width1, 10);
42
+ const width2 = parseInt(_width2, 10);
43
+ if (VALID_SIGNS.includes(sign1) && VALID_SIGNS.includes(sign2)) {
44
+ result = eval(`${width1} ${sign1} ${windowWidth} && ${windowWidth} ${sign2} ${width2}`);
45
+ }
46
+ } else if (singleRangeMatches && singleRangeMatches.length === 3) {
47
+ const [, sign, _width] = singleRangeMatches;
48
+ const width = parseInt(_width, 10);
49
+ if (VALID_SIGNS.includes(sign)) {
50
+ result = eval(`${windowWidth} ${sign} ${width}`);
51
+ }
52
+ }
53
+ if (result === undefined) return false;
54
+ if (typeof result !== 'boolean') {
55
+ console.warn(`Unexpected media query result. Expected a boolean but got ${result}. Please make sure your media query syntax is correct.`);
56
+ }
57
+ return result;
58
+ }
59
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["media","target","mediaParam","result","push","keys","Object","i","length","key","matchMediaRangeQuery","detectMedia","mediaKeys","width","targets","Array","isArray","values","val","VALID_SIGNS","query","windowWidth","singleRangeRegex","multiRangeRegex","singleRangeMatches","match","multiRangeMatches","_width1","sign1","sign2","_width2","width1","parseInt","width2","includes","eval","sign","_width","undefined","console","warn"],"sources":["media.ts"],"sourcesContent":["import { RNStyle, VariantStyleSheet } from './types';\nexport type Media = Record<string, string | boolean>;\n\nexport const media = <T extends VariantStyleSheet<string, RNStyle>>(\n target: T,\n mediaParam: number | string\n): T[keyof T][] => {\n const result: T[keyof T][] = [];\n if (typeof mediaParam === 'string') {\n target[mediaParam] && result.push(target[mediaParam] as T[keyof T]);\n } else if (typeof mediaParam === 'number') {\n const keys = Object.keys(target);\n for (let i = keys.length - 1; i >= 0; i--) {\n const key = keys[i];\n // NOTE: Assuming only one media query will match, we can break after the first match.\n // Because later media query will be more specific and override the previous one.\n if (matchMediaRangeQuery(key, mediaParam)) {\n result.push(target[key] as T[keyof T]);\n break;\n }\n }\n }\n return result;\n};\n\n// NOTE: input mediaKeys\n// - ['(750px <= width < 1080px)', '(width > 750px)']\nexport const detectMedia = (\n mediaKeys: string[] | Record<string, string>,\n width: number\n): string | undefined => {\n const targets = Array.isArray(mediaKeys)\n ? mediaKeys\n : Object.values(mediaKeys);\n for (const val of targets) {\n if (matchMediaRangeQuery(val, width)) {\n return val;\n }\n }\n return;\n};\n\nconst VALID_SIGNS = ['<=', '<', '>=', '>'];\n\nexport function matchMediaRangeQuery(\n query: string,\n windowWidth: number\n): boolean {\n const singleRangeRegex = /^\\(width\\s+([><=]+)\\s+([0-9]+)px\\)$/;\n const multiRangeRegex = /^\\(([0-9]+)px\\s([><=]+)\\swidth\\s+([><=]+)\\s+([0-9]+)px\\)$/; // prettier-ignore\n const singleRangeMatches = query.match(singleRangeRegex);\n const multiRangeMatches = query.match(multiRangeRegex);\n\n if (!singleRangeMatches && !multiRangeMatches) return false;\n\n let result;\n\n if (multiRangeMatches && multiRangeMatches.length === 5) {\n const [, _width1, sign1, sign2, _width2] = multiRangeMatches;\n const width1 = parseInt(_width1, 10);\n const width2 = parseInt(_width2, 10);\n\n if (VALID_SIGNS.includes(sign1) && VALID_SIGNS.includes(sign2)) {\n result = eval(\n `${width1} ${sign1} ${windowWidth} && ${windowWidth} ${sign2} ${width2}`\n );\n }\n } else if (singleRangeMatches && singleRangeMatches.length === 3) {\n const [, sign, _width] = singleRangeMatches;\n const width = parseInt(_width, 10);\n\n if (VALID_SIGNS.includes(sign)) {\n result = eval(`${windowWidth} ${sign} ${width}`);\n }\n }\n\n if (result === undefined) return false;\n\n if (typeof result !== 'boolean') {\n console.warn(\n `Unexpected media query result. Expected a boolean but got ${result}. Please make sure your media query syntax is correct.`\n );\n }\n\n return result;\n}\n"],"mappings":"AAGA,OAAO,MAAMA,KAAK,GAAGA,CACnBC,MAAS,EACTC,UAA2B,KACV;EACjB,MAAMC,MAAoB,GAAG,EAAE;EAC/B,IAAI,OAAOD,UAAU,KAAK,QAAQ,EAAE;IAClCD,MAAM,CAACC,UAAU,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACH,MAAM,CAACC,UAAU,CAAe,CAAC;EACrE,CAAC,MAAM,IAAI,OAAOA,UAAU,KAAK,QAAQ,EAAE;IACzC,MAAMG,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACJ,MAAM,CAAC;IAChC,KAAK,IAAIM,CAAC,GAAGF,IAAI,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MACzC,MAAME,GAAG,GAAGJ,IAAI,CAACE,CAAC,CAAC;MACnB;MACA;MACA,IAAIG,oBAAoB,CAACD,GAAG,EAAEP,UAAU,CAAC,EAAE;QACzCC,MAAM,CAACC,IAAI,CAACH,MAAM,CAACQ,GAAG,CAAe,CAAC;QACtC;MACF;IACF;EACF;EACA,OAAON,MAAM;AACf,CAAC;;AAED;AACA;AACA,OAAO,MAAMQ,WAAW,GAAGA,CACzBC,SAA4C,EAC5CC,KAAa,KACU;EACvB,MAAMC,OAAO,GAAGC,KAAK,CAACC,OAAO,CAACJ,SAAS,CAAC,GACpCA,SAAS,GACTN,MAAM,CAACW,MAAM,CAACL,SAAS,CAAC;EAC5B,KAAK,MAAMM,GAAG,IAAIJ,OAAO,EAAE;IACzB,IAAIJ,oBAAoB,CAACQ,GAAG,EAAEL,KAAK,CAAC,EAAE;MACpC,OAAOK,GAAG;IACZ;EACF;EACA;AACF,CAAC;AAED,MAAMC,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;AAE1C,OAAO,SAAST,oBAAoBA,CAClCU,KAAa,EACbC,WAAmB,EACV;EACT,MAAMC,gBAAgB,GAAG,qCAAqC;EAC9D,MAAMC,eAAe,GAAG,2DAA2D,CAAC,CAAC;EACrF,MAAMC,kBAAkB,GAAGJ,KAAK,CAACK,KAAK,CAACH,gBAAgB,CAAC;EACxD,MAAMI,iBAAiB,GAAGN,KAAK,CAACK,KAAK,CAACF,eAAe,CAAC;EAEtD,IAAI,CAACC,kBAAkB,IAAI,CAACE,iBAAiB,EAAE,OAAO,KAAK;EAE3D,IAAIvB,MAAM;EAEV,IAAIuB,iBAAiB,IAAIA,iBAAiB,CAAClB,MAAM,KAAK,CAAC,EAAE;IACvD,MAAM,GAAGmB,OAAO,EAAEC,KAAK,EAAEC,KAAK,EAAEC,OAAO,CAAC,GAAGJ,iBAAiB;IAC5D,MAAMK,MAAM,GAAGC,QAAQ,CAACL,OAAO,EAAE,EAAE,CAAC;IACpC,MAAMM,MAAM,GAAGD,QAAQ,CAACF,OAAO,EAAE,EAAE,CAAC;IAEpC,IAAIX,WAAW,CAACe,QAAQ,CAACN,KAAK,CAAC,IAAIT,WAAW,CAACe,QAAQ,CAACL,KAAK,CAAC,EAAE;MAC9D1B,MAAM,GAAGgC,IAAI,CACX,GAAGJ,MAAM,IAAIH,KAAK,IAAIP,WAAW,OAAOA,WAAW,IAAIQ,KAAK,IAAII,MAAM,EACxE,CAAC;IACH;EACF,CAAC,MAAM,IAAIT,kBAAkB,IAAIA,kBAAkB,CAAChB,MAAM,KAAK,CAAC,EAAE;IAChE,MAAM,GAAG4B,IAAI,EAAEC,MAAM,CAAC,GAAGb,kBAAkB;IAC3C,MAAMX,KAAK,GAAGmB,QAAQ,CAACK,MAAM,EAAE,EAAE,CAAC;IAElC,IAAIlB,WAAW,CAACe,QAAQ,CAACE,IAAI,CAAC,EAAE;MAC9BjC,MAAM,GAAGgC,IAAI,CAAC,GAAGd,WAAW,IAAIe,IAAI,IAAIvB,KAAK,EAAE,CAAC;IAClD;EACF;EAEA,IAAIV,MAAM,KAAKmC,SAAS,EAAE,OAAO,KAAK;EAEtC,IAAI,OAAOnC,MAAM,KAAK,SAAS,EAAE;IAC/BoC,OAAO,CAACC,IAAI,CACV,6DAA6DrC,MAAM,wDACrE,CAAC;EACH;EAEA,OAAOA,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ import { createVariantKey } from './variant';
2
+ export const getThemeKey = theme => createVariantKey('@theme', theme);
3
+ export const resolveTheme = (target, themeKey) => target[themeKey];
4
+ export function createThemes(themes) {
5
+ if (new Set(themes).size !== themes.length) {
6
+ throw new Error('Themes must be unique');
7
+ }
8
+ const themesObj = themes.reduce((current, theme) => {
9
+ current[theme] = getThemeKey(theme);
10
+ return current;
11
+ }, {});
12
+ return {
13
+ themes: themesObj
14
+ };
15
+ }
16
+ //# sourceMappingURL=theme.js.map