react-native-unistyles 1.0.0-beta.1 → 1.0.0-beta.3
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +81 -1
- package/lib/commonjs/createUnistyles.js +2 -2
- package/lib/commonjs/createUnistyles.js.map +1 -1
- package/lib/commonjs/hooks/index.js +13 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/useDimensions.js +19 -0
- package/lib/commonjs/hooks/useDimensions.js.map +1 -0
- package/lib/commonjs/hooks/useDimensions.web.js +31 -0
- package/lib/commonjs/hooks/useDimensions.web.js.map +1 -0
- package/lib/commonjs/utils/styles.js +25 -26
- package/lib/commonjs/utils/styles.js.map +1 -1
- package/lib/commonjs/utils/styles.spec.js +66 -0
- package/lib/commonjs/utils/styles.spec.js.map +1 -1
- package/lib/module/createUnistyles.js +2 -2
- package/lib/module/createUnistyles.js.map +1 -1
- package/lib/module/hooks/index.js +2 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useDimensions.js +12 -0
- package/lib/module/hooks/useDimensions.js.map +1 -0
- package/lib/module/hooks/useDimensions.web.js +24 -0
- package/lib/module/hooks/useDimensions.web.js.map +1 -0
- package/lib/module/utils/styles.js +25 -26
- package/lib/module/utils/styles.js.map +1 -1
- package/lib/module/utils/styles.spec.js +66 -0
- package/lib/module/utils/styles.spec.js.map +1 -1
- package/lib/typescript/src/createUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/hooks/index.d.ts +2 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDimensions.d.ts +3 -0
- package/lib/typescript/src/hooks/useDimensions.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useDimensions.web.d.ts +3 -0
- package/lib/typescript/src/hooks/useDimensions.web.d.ts.map +1 -0
- package/lib/typescript/src/utils/styles.d.ts +2 -8
- package/lib/typescript/src/utils/styles.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/createUnistyles.ts +2 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDimensions.ts +11 -0
- package/src/hooks/useDimensions.web.ts +30 -0
- package/src/utils/styles.ts +39 -34
package/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
</picture>
|
8
8
|
|
9
9
|
## Features
|
10
|
-
- ⚡ Blazing fast, adds around ~
|
10
|
+
- ⚡ Blazing fast, adds around ~3ms on top of StyleSheet*
|
11
11
|
- 🎳 Share up to 100% of your styles across platforms in monorepo
|
12
12
|
- 🎯 Doesn't introduce new components
|
13
13
|
- 🖥️ Supports custom breakpoints and css-like media queries
|
@@ -230,6 +230,86 @@ const stylesheet = createStyles(theme => ({
|
|
230
230
|
}))
|
231
231
|
```
|
232
232
|
|
233
|
+
## Dynamic functions
|
234
|
+
|
235
|
+
Every style can be transformed to dynamic function to take additional parameters from JSX:
|
236
|
+
|
237
|
+
```tsx
|
238
|
+
export const ExampleUnistyles = () => {
|
239
|
+
const { styles } = useStyles(stylesheet)
|
240
|
+
|
241
|
+
return (
|
242
|
+
<ScrollView contentContainerStyle={styles.scrollContainer}>
|
243
|
+
{posts.map((post, index) => (
|
244
|
+
<View
|
245
|
+
key={post.key}
|
246
|
+
// call it as regular function
|
247
|
+
style={styles.post(index)}
|
248
|
+
>
|
249
|
+
<Text>
|
250
|
+
{post.title}
|
251
|
+
</Text>
|
252
|
+
</View>
|
253
|
+
))}
|
254
|
+
</ScrollView>
|
255
|
+
)
|
256
|
+
}
|
257
|
+
|
258
|
+
const stylesheet = createStyles({
|
259
|
+
scrollContainer: {
|
260
|
+
flex: 1,
|
261
|
+
justifyContent: 'center',
|
262
|
+
alignItems: 'center',
|
263
|
+
},
|
264
|
+
// dynamic function
|
265
|
+
post: (index: number) => ({
|
266
|
+
backgroundColor: index % 2 === 0 ? 'gold' : 'silver',
|
267
|
+
})
|
268
|
+
})
|
269
|
+
```
|
270
|
+
|
271
|
+
## Migrate from StyleSheet
|
272
|
+
|
273
|
+
`react-native-unistyles` embraces the simplicity of `StyleSheet`, making it easy to integrate into your project.
|
274
|
+
|
275
|
+
You can replace `StyleSheet.create` with `createStyles` and it will work exactly the same:
|
276
|
+
|
277
|
+
```diff
|
278
|
+
-const styles = StyleSheet.create({
|
279
|
+
+const styles = createStyles({
|
280
|
+
scrollContainer: {
|
281
|
+
flex: 1,
|
282
|
+
justifyContent: 'center',
|
283
|
+
alignItems: 'center',
|
284
|
+
}
|
285
|
+
})
|
286
|
+
```
|
287
|
+
|
288
|
+
If you need additional functionalities such as `breakpoints`, `media-queries` or `theme` you can incrementally pass `style(sheet)` into the `useStyles` hook:
|
289
|
+
|
290
|
+
```ts
|
291
|
+
export const ExampleUnistyles = () => {
|
292
|
+
const { styles } = useStyles(stylesheet)
|
293
|
+
// ... your component code
|
294
|
+
}
|
295
|
+
```
|
296
|
+
|
297
|
+
With the hook in place, you can now use `breakpoints` and `media-queries`.
|
298
|
+
|
299
|
+
Additionally, to access the `theme` use a function instead of an `object`:
|
300
|
+
|
301
|
+
```diff
|
302
|
+
-const stylesheet = createStyles({
|
303
|
+
+const stylesheet = createStyles(theme => ({
|
304
|
+
scrollContainer: {
|
305
|
+
flex: 1,
|
306
|
+
justifyContent: 'center',
|
307
|
+
alignItems: 'center',
|
308
|
+
backgroundColor: theme.colors.background
|
309
|
+
}
|
310
|
+
}))
|
311
|
+
```
|
312
|
+
|
233
313
|
## Example
|
234
314
|
|
235
315
|
In order to check out working example go to [example/](./example).
|
@@ -5,16 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.createUnistyles = void 0;
|
7
7
|
var _react = require("react");
|
8
|
-
var _reactNative = require("react-native");
|
9
8
|
var _UnistylesTheme = require("./UnistylesTheme");
|
10
9
|
var _utils = require("./utils");
|
10
|
+
var _hooks = require("./hooks");
|
11
11
|
const createUnistyles = breakpoints => {
|
12
12
|
const sortedBreakpoints = (0, _utils.sortAndValidateBreakpoints)(breakpoints);
|
13
13
|
return {
|
14
14
|
createStyles: styles => styles,
|
15
15
|
useStyles: stylesheet => {
|
16
16
|
const theme = (0, _react.useContext)(_UnistylesTheme.UnistylesContext);
|
17
|
-
const dimensions = (0,
|
17
|
+
const dimensions = (0, _hooks.useDimensions)();
|
18
18
|
const breakpoint = (0, _utils.getBreakpointFromScreenWidth)(dimensions.width, sortedBreakpoints);
|
19
19
|
const screenSize = {
|
20
20
|
width: dimensions.width,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","require","
|
1
|
+
{"version":3,"names":["_react","require","_UnistylesTheme","_utils","_hooks","createUnistyles","breakpoints","sortedBreakpoints","sortAndValidateBreakpoints","createStyles","styles","useStyles","stylesheet","theme","useContext","UnistylesContext","dimensions","useDimensions","breakpoint","getBreakpointFromScreenWidth","width","screenSize","height","parsedStyles","dynamicStyleSheet","Object","entries","reduce","acc","_ref","key","value","x","proxifyFunction","parseStyle","exports"],"sourceRoot":"../../src","sources":["createUnistyles.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAEO,MAAMI,eAAe,GAA8CC,WAAc,IAAK;EACzF,MAAMC,iBAAiB,GAAG,IAAAC,iCAA0B,EAACF,WAAW,CAAM;EAEtE,OAAO;IACHG,YAAY,EAAsCC,MAAqC,IAAKA,MAAW;IACvGC,SAAS,EAAwCC,UAA4C,IAAK;MAC9F,MAAMC,KAAK,GAAG,IAAAC,iBAAU,EAACC,gCAAgB,CAAM;MAC/C,MAAMC,UAAU,GAAG,IAAAC,oBAAa,EAAC,CAAC;MAClC,MAAMC,UAAU,GAAG,IAAAC,mCAA4B,EAAIH,UAAU,CAACI,KAAK,EAAEb,iBAAiB,CAAC;MACvF,MAAMc,UAAsB,GAAG;QAC3BD,KAAK,EAAEJ,UAAU,CAACI,KAAK;QACvBE,MAAM,EAAEN,UAAU,CAACM;MACvB,CAAC;MAED,IAAI,CAACV,UAAU,EAAE;QACb,OAAO;UACHC,KAAK;UACLH,MAAM,EAAE,CAAC;QACb,CAAC;MACL;MAEA,MAAMa,YAAY,GAAG,OAAOX,UAAU,KAAK,UAAU,GAC/CA,UAAU,CAACC,KAAK,CAAC,GACjBD,UAAU;MAEhB,MAAMY,iBAAiB,GAAGC,MAAM,CAC3BC,OAAO,CAACH,YAAY,CAAC,CACrBI,MAAM,CAAC,CAACC,GAAG,EAAAC,IAAA,KAAmB;QAAA,IAAjB,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;QACtB,MAAMG,CAAC,GAAGD,KAAiC;QAE3C,IAAI,OAAOA,KAAK,KAAK,UAAU,EAAE;UAC7B,OAAO;YACH,GAAGH,GAAG;YACN,CAACE,GAAG,GAAG,IAAAG,sBAAe,EAAIF,KAAK,EAAEb,UAAU,EAAEG,UAAU,EAAEd,iBAAiB;UAC9E,CAAC;QACL;QAEA,OAAO;UACH,GAAGqB,GAAG;UACN,CAACE,GAAG,GAAG,IAAAI,iBAAU,EAAQF,CAAC,EAAEd,UAAU,EAAEG,UAAU,EAAEd,iBAAiB;QACzE,CAAC;MACL,CAAC,EAAE,CAAC,CAAO,CAAC;MAEhB,OAAO;QACHM,KAAK;QACLH,MAAM,EAAEc;MACZ,CAAC;IACL;EACJ,CAAC;AACL,CAAC;AAAAW,OAAA,CAAA9B,eAAA,GAAAA,eAAA"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
Object.defineProperty(exports, "useDimensions", {
|
7
|
+
enumerable: true,
|
8
|
+
get: function () {
|
9
|
+
return _useDimensions.useDimensions;
|
10
|
+
}
|
11
|
+
});
|
12
|
+
var _useDimensions = require("./useDimensions");
|
13
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_useDimensions","require"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useDimensions = void 0;
|
7
|
+
var _reactNative = require("react-native");
|
8
|
+
const useDimensions = () => {
|
9
|
+
const {
|
10
|
+
width,
|
11
|
+
height
|
12
|
+
} = (0, _reactNative.useWindowDimensions)();
|
13
|
+
return {
|
14
|
+
width,
|
15
|
+
height
|
16
|
+
};
|
17
|
+
};
|
18
|
+
exports.useDimensions = useDimensions;
|
19
|
+
//# sourceMappingURL=useDimensions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_reactNative","require","useDimensions","width","height","useWindowDimensions","exports"],"sourceRoot":"../../../src","sources":["hooks/useDimensions.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAGO,MAAMC,aAAa,GAAGA,CAAA,KAAkB;EAC3C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAG,IAAAC,gCAAmB,EAAC,CAAC;EAE/C,OAAO;IACHF,KAAK;IACLC;EACJ,CAAC;AACL,CAAC;AAAAE,OAAA,CAAAJ,aAAA,GAAAA,aAAA"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.useDimensions = void 0;
|
7
|
+
var _react = require("react");
|
8
|
+
const useDimensions = () => {
|
9
|
+
const timerRef = (0, _react.useRef)();
|
10
|
+
const [screenSize, setScreenSize] = (0, _react.useState)({
|
11
|
+
width: window.innerWidth,
|
12
|
+
height: window.innerHeight
|
13
|
+
});
|
14
|
+
(0, _react.useEffect)(() => {
|
15
|
+
const handleResize = () => {
|
16
|
+
clearTimeout(timerRef.current);
|
17
|
+
timerRef.current = setTimeout(() => setScreenSize({
|
18
|
+
width: window.innerWidth,
|
19
|
+
height: window.innerHeight
|
20
|
+
}), 100);
|
21
|
+
};
|
22
|
+
window.addEventListener('resize', handleResize);
|
23
|
+
return () => {
|
24
|
+
window.removeEventListener('resize', handleResize);
|
25
|
+
clearTimeout(timerRef.current);
|
26
|
+
};
|
27
|
+
}, []);
|
28
|
+
return screenSize;
|
29
|
+
};
|
30
|
+
exports.useDimensions = useDimensions;
|
31
|
+
//# sourceMappingURL=useDimensions.web.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_react","require","useDimensions","timerRef","useRef","screenSize","setScreenSize","useState","width","window","innerWidth","height","innerHeight","useEffect","handleResize","clearTimeout","current","setTimeout","addEventListener","removeEventListener","exports"],"sourceRoot":"../../../src","sources":["hooks/useDimensions.web.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGO,MAAMC,aAAa,GAAGA,CAAA,KAAkB;EAC3C,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAgC,CAAC;EACxD,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAa;IACrDC,KAAK,EAAEC,MAAM,CAACC,UAAU;IACxBC,MAAM,EAAEF,MAAM,CAACG;EACnB,CAAC,CAAC;EAEF,IAAAC,gBAAS,EAAC,MAAM;IACZ,MAAMC,YAAY,GAAGA,CAAA,KAAM;MACvBC,YAAY,CAACZ,QAAQ,CAACa,OAAO,CAAC;MAE9Bb,QAAQ,CAACa,OAAO,GAAGC,UAAU,CAAC,MAAMX,aAAa,CAAC;QAC9CE,KAAK,EAAEC,MAAM,CAACC,UAAU;QACxBC,MAAM,EAAEF,MAAM,CAACG;MACnB,CAAC,CAAC,EAAE,GAAG,CAAC;IACZ,CAAC;IAEDH,MAAM,CAACS,gBAAgB,CAAC,QAAQ,EAAEJ,YAAY,CAAC;IAE/C,OAAO,MAAM;MACTL,MAAM,CAACU,mBAAmB,CAAC,QAAQ,EAAEL,YAAY,CAAC;MAClDC,YAAY,CAACZ,QAAQ,CAACa,OAAO,CAAC;IAClC,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOX,UAAU;AACrB,CAAC;AAAAe,OAAA,CAAAlB,aAAA,GAAAA,aAAA"}
|
@@ -8,10 +8,6 @@ var _breakpoints = require("./breakpoints");
|
|
8
8
|
/**
|
9
9
|
* Proxies a function to parse its return value for custom media queries or breakpoints.
|
10
10
|
*
|
11
|
-
* If the function's string representation contains a custom media query or a defined breakpoint,
|
12
|
-
* the returned function will be proxied to parse its return value based on the provided screen size and breakpoints.
|
13
|
-
* If neither is found, the original function is returned.
|
14
|
-
*
|
15
11
|
* @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
|
16
12
|
*
|
17
13
|
* @param {Function} fn - The function to be proxified.
|
@@ -19,7 +15,7 @@ var _breakpoints = require("./breakpoints");
|
|
19
15
|
* @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
|
20
16
|
* @param {B} breakpoints - An object representing the defined breakpoints.
|
21
17
|
*
|
22
|
-
* @returns {Function} Returns the proxified function
|
18
|
+
* @returns {Function} Returns the proxified function
|
23
19
|
*
|
24
20
|
* @example
|
25
21
|
*
|
@@ -30,17 +26,9 @@ var _breakpoints = require("./breakpoints");
|
|
30
26
|
* const proxifiedFunction = proxifyFunction(myFunction, 'sm', screenSize, breakpoints)
|
31
27
|
* proxifiedFunction() // parsed style based on screenSize and breakpoints
|
32
28
|
*/
|
33
|
-
const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => {
|
34
|
-
|
35
|
-
|
36
|
-
const hasBreakpoint = Object.keys(breakpoints).some(bp => stringifiedFunction.includes(bp));
|
37
|
-
if (!hasCustomMediaQuery && !hasBreakpoint) {
|
38
|
-
return fn;
|
39
|
-
}
|
40
|
-
return new Proxy(fn, {
|
41
|
-
apply: (target, thisArg, argumentsList) => parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
42
|
-
});
|
43
|
-
};
|
29
|
+
const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => new Proxy(fn, {
|
30
|
+
apply: (target, thisArg, argumentsList) => parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
31
|
+
});
|
44
32
|
|
45
33
|
/**
|
46
34
|
* Parses a style object to resolve custom media queries or breakpoints based on the provided screen size and breakpoints.
|
@@ -68,15 +56,26 @@ const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => {
|
|
68
56
|
* // { fontSize: '12px' }
|
69
57
|
*/
|
70
58
|
exports.proxifyFunction = proxifyFunction;
|
71
|
-
const parseStyle = (style, breakpoint, screenSize, breakpoints) =>
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
59
|
+
const parseStyle = (style, breakpoint, screenSize, breakpoints) => {
|
60
|
+
const entries = Object.entries(style);
|
61
|
+
return Object.fromEntries(entries.map(_ref => {
|
62
|
+
let [key, value] = _ref;
|
63
|
+
const isNestedStyle = key === 'shadowOffset';
|
64
|
+
if (isNestedStyle) {
|
65
|
+
return [key, parseStyle(value, breakpoint, screenSize, breakpoints)];
|
66
|
+
}
|
67
|
+
const isTransform = key === 'transform';
|
68
|
+
if (isTransform && Array.isArray(value)) {
|
69
|
+
return [key, value.map(value => parseStyle(value, breakpoint, screenSize, breakpoints))];
|
70
|
+
}
|
71
|
+
const isDynamicFunction = typeof value === 'function';
|
72
|
+
const isValidStyle = typeof value !== 'object';
|
73
|
+
if (isDynamicFunction || isValidStyle) {
|
74
|
+
return [key, value];
|
75
|
+
}
|
76
|
+
const valueWithBreakpoint = value;
|
77
|
+
return [key, (0, _breakpoints.getValueForBreakpoint)(valueWithBreakpoint, breakpoint, screenSize, breakpoints)];
|
78
|
+
}));
|
79
|
+
};
|
81
80
|
exports.parseStyle = parseStyle;
|
82
81
|
//# sourceMappingURL=styles.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_breakpoints","require","proxifyFunction","fn","breakpoint","screenSize","breakpoints","
|
1
|
+
{"version":3,"names":["_breakpoints","require","proxifyFunction","fn","breakpoint","screenSize","breakpoints","Proxy","apply","target","thisArg","argumentsList","parseStyle","exports","style","entries","Object","fromEntries","map","_ref","key","value","isNestedStyle","isTransform","Array","isArray","isDynamicFunction","isValidStyle","valueWithBreakpoint","getValueForBreakpoint"],"sourceRoot":"../../../src","sources":["utils/styles.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,eAAe,GAAGA,CAC3BC,EAAY,EAAEC,UAA4B,EAC1CC,UAAsB,EACtBC,WAAc,KACH,IAAIC,KAAK,CAACJ,EAAE,EAAE;EACzBK,KAAK,EAAEA,CAACC,MAAM,EAAEC,OAAO,EAAEC,aAAa,KAClCC,UAAU,CAACH,MAAM,CAACD,KAAK,CAACE,OAAO,EAAEC,aAAa,CAAC,EAAEP,UAAU,EAAEC,UAAU,EAAEC,WAAW;AAC5F,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxBAO,OAAA,CAAAX,eAAA,GAAAA,eAAA;AAyBO,MAAMU,UAAU,GAAGA,CACtBE,KAA8B,EAC9BV,UAA4B,EAC5BC,UAAsB,EACtBC,WAAc,KACV;EACJ,MAAMS,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACD,KAAK,CAAyC;EAE7E,OAAOE,MAAM,CACRC,WAAW,CAACF,OAAO,CACfG,GAAG,CAACC,IAAA,IAAkB;IAAA,IAAjB,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;IACd,MAAMG,aAAa,GAAGF,GAAG,KAAK,cAAc;IAE5C,IAAIE,aAAa,EAAE;MACf,OAAO,CACHF,GAAG,EACHR,UAAU,CAACS,KAAK,EAAEjB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CACzD;IACL;IAEA,MAAMiB,WAAW,GAAGH,GAAG,KAAK,WAAW;IAEvC,IAAIG,WAAW,IAAIC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;MACrC,OAAO,CACHD,GAAG,EACHC,KAAK,CAACH,GAAG,CAACG,KAAK,IAAIT,UAAU,CAACS,KAAK,EAAEjB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CAAC,CAC7E;IACL;IAEA,MAAMoB,iBAAiB,GAAG,OAAOL,KAAK,KAAK,UAAU;IACrD,MAAMM,YAAY,GAAG,OAAON,KAAK,KAAK,QAAQ;IAE9C,IAAIK,iBAAiB,IAAIC,YAAY,EAAE;MACnC,OAAO,CAACP,GAAG,EAAEC,KAAK,CAAC;IACvB;IAEA,MAAMO,mBAAmB,GAAGP,KAAkD;IAE9E,OAAO,CAACD,GAAG,EAAE,IAAAS,kCAAqB,EAAID,mBAAmB,EAAExB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CAAC;EACpG,CAAC,CACL,CAAC;AACT,CAAC;AAAAO,OAAA,CAAAD,UAAA,GAAAA,UAAA"}
|
@@ -93,6 +93,72 @@ describe('styles', () => {
|
|
93
93
|
fontWeight: 'bold'
|
94
94
|
});
|
95
95
|
});
|
96
|
+
it('should correctly parse transform styles', () => {
|
97
|
+
const screenSize = {
|
98
|
+
width: 400,
|
99
|
+
height: 800
|
100
|
+
};
|
101
|
+
const breakpoint = 'sm';
|
102
|
+
const breakpoints = {
|
103
|
+
xs: 0,
|
104
|
+
sm: 400,
|
105
|
+
md: 800
|
106
|
+
};
|
107
|
+
const style = {
|
108
|
+
transform: [{
|
109
|
+
translateX: {
|
110
|
+
sm: 120,
|
111
|
+
md: 200
|
112
|
+
},
|
113
|
+
translateY: 200
|
114
|
+
}]
|
115
|
+
};
|
116
|
+
expect((0, _styles.parseStyle)(style, breakpoint, screenSize, breakpoints)).toEqual({
|
117
|
+
transform: [{
|
118
|
+
translateX: 120,
|
119
|
+
translateY: 200
|
120
|
+
}]
|
121
|
+
});
|
122
|
+
});
|
123
|
+
it('should correctly parse shadowOffset styles', () => {
|
124
|
+
const screenSize = {
|
125
|
+
width: 400,
|
126
|
+
height: 800
|
127
|
+
};
|
128
|
+
const breakpoint = 'sm';
|
129
|
+
const breakpoints = {
|
130
|
+
xs: 0,
|
131
|
+
sm: 400,
|
132
|
+
md: 800
|
133
|
+
};
|
134
|
+
const style = {
|
135
|
+
shadowOffset: {
|
136
|
+
width: 0,
|
137
|
+
height: 4
|
138
|
+
}
|
139
|
+
};
|
140
|
+
const styleWithBreakpoints = {
|
141
|
+
shadowOffset: {
|
142
|
+
width: 0,
|
143
|
+
height: {
|
144
|
+
sm: 10,
|
145
|
+
md: 20
|
146
|
+
}
|
147
|
+
}
|
148
|
+
};
|
149
|
+
expect((0, _styles.parseStyle)(style, breakpoint, screenSize, breakpoints)).toEqual({
|
150
|
+
shadowOffset: {
|
151
|
+
width: 0,
|
152
|
+
height: 4
|
153
|
+
}
|
154
|
+
});
|
155
|
+
expect((0, _styles.parseStyle)(styleWithBreakpoints, breakpoint, screenSize, breakpoints)).toEqual({
|
156
|
+
shadowOffset: {
|
157
|
+
width: 0,
|
158
|
+
height: 10
|
159
|
+
}
|
160
|
+
});
|
161
|
+
});
|
96
162
|
});
|
97
163
|
});
|
98
164
|
//# sourceMappingURL=styles.spec.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_styles","require","describe","it","screenSize","width","height","breakpoint","breakpoints","xs","sm","md","dynamicFunction","isEven","backgroundColor","expect","proxifyFunction","toEqual","style","fontSize","fontWeight","parseStyle"],"sourceRoot":"../../../src","sources":["utils/styles.spec.ts"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_styles","require","describe","it","screenSize","width","height","breakpoint","breakpoints","xs","sm","md","dynamicFunction","isEven","backgroundColor","expect","proxifyFunction","toEqual","style","fontSize","fontWeight","parseStyle","transform","translateX","translateY","shadowOffset","styleWithBreakpoints"],"sourceRoot":"../../../src","sources":["utils/styles.spec.ts"],"mappings":";;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAGAC,QAAQ,CAAC,QAAQ,EAAE,MAAM;EACrBA,QAAQ,CAAC,iBAAiB,EAAE,MAAM;IAC9BC,EAAE,CAAC,yCAAyC,EAAE,MAAM;MAChD,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMC,eAAe,GAAIC,MAAe,KAAM;QAC1CC,eAAe,EAAE;UACbJ,EAAE,EAAEG,MAAM,GACJ,OAAO,GACP,KAAK;UACXF,EAAE,EAAEE,MAAM,GACJ,QAAQ,GACR;QACV;MACJ,CAAC,CAAC;MAEFE,MAAM,CAAC,IAAAC,uBAAe,EAACJ,eAAe,EAAEL,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAACS,OAAO,CAAC;QACxFH,eAAe,EAAE;MACrB,CAAC,CAAC;IACN,CAAC,CAAC;IAEFX,EAAE,CAAC,yDAAyD,EAAE,MAAM;MAChE,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMC,eAAe,GAAIC,MAAe,KAAM;QAC1CC,eAAe,EAAE;UACb,UAAU,EAAED,MAAM,GACZ,OAAO,GACP,KAAK;UACX,SAAS,EAAEA,MAAM,GACX,QAAQ,GACR;QACV;MACJ,CAAC,CAAC;MAEFE,MAAM,CAAC,IAAAC,uBAAe,EAACJ,eAAe,EAAEL,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAACS,OAAO,CAAC;QACzFH,eAAe,EAAE;MACrB,CAAC,CAAC;IACN,CAAC,CAAC;IAEFX,EAAE,CAAC,kEAAkE,EAAE,MAAM;MACzE,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMC,eAAe,GAAIC,MAAe,KAAM;QAC1CC,eAAe,EAAED,MAAM,GACjB,MAAM,GACN;MACV,CAAC,CAAC;MAEFE,MAAM,CAAC,IAAAC,uBAAe,EAACJ,eAAe,EAAEL,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAACS,OAAO,CAAC;QACzFH,eAAe,EAAE;MACrB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC,CAAC;EAEFZ,QAAQ,CAAC,YAAY,EAAE,MAAM;IACzBC,EAAE,CAAC,+BAA+B,EAAE,MAAM;MACtC,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMO,KAAK,GAAG;QACVC,QAAQ,EAAE;UACNT,EAAE,EAAE,EAAE;UACNC,EAAE,EAAE;QACR,CAAC;QACDG,eAAe,EAAE;UACbL,EAAE,EAAE,MAAM;UACVE,EAAE,EAAE;QACR,CAAC;QACDS,UAAU,EAAE;MAChB,CAAC;MAEDL,MAAM,CAAC,IAAAM,kBAAU,EAACH,KAAK,EAAyDX,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,CAACS,OAAO,CAAC;QAC1HE,QAAQ,EAAE,EAAE;QACZL,eAAe,EAAE,MAAM;QACvBM,UAAU,EAAE;MAChB,CAAC,CAAC;IACN,CAAC,CAAC;IAEFjB,EAAE,CAAC,yCAAyC,EAAE,MAAM;MAChD,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMO,KAAK,GAAG;QACVI,SAAS,EAAE,CACP;UACIC,UAAU,EAAE;YACRb,EAAE,EAAE,GAAG;YACPC,EAAE,EAAE;UACR,CAAC;UACDa,UAAU,EAAE;QAChB,CAAC;MAET,CAAC;MAEDT,MAAM,CAAC,IAAAM,kBAAU,EAACH,KAAK,EAAyDX,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,CAACS,OAAO,CAAC;QAC1HK,SAAS,EAAE,CACP;UACIC,UAAU,EAAE,GAAG;UACfC,UAAU,EAAE;QAChB,CAAC;MAET,CAAC,CAAC;IACN,CAAC,CAAC;IAEFrB,EAAE,CAAC,4CAA4C,EAAE,MAAM;MACnD,MAAMC,UAAsB,GAAG;QAC3BC,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACZ,CAAC;MACD,MAAMC,UAAU,GAAG,IAAI;MACvB,MAAMC,WAAW,GAAG;QAChBC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,GAAG;QACPC,EAAE,EAAE;MACR,CAAC;MACD,MAAMO,KAAK,GAAG;QACVO,YAAY,EAAE;UACVpB,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE;QACZ;MACJ,CAAC;MACD,MAAMoB,oBAAoB,GAAG;QACzBD,YAAY,EAAE;UACVpB,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE;YACJI,EAAE,EAAE,EAAE;YACNC,EAAE,EAAE;UACR;QACJ;MACJ,CAAC;MAEDI,MAAM,CAAC,IAAAM,kBAAU,EAACH,KAAK,EAAyDX,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,CAACS,OAAO,CAAC;QAC1HQ,YAAY,EAAE;UACVpB,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE;QACZ;MACJ,CAAC,CAAC;MACFS,MAAM,CAAC,IAAAM,kBAAU,EAACK,oBAAoB,EAAyDnB,UAAU,EAAEH,UAAU,EAAEI,WAAW,CAAC,CAAC,CAACS,OAAO,CAAC;QACzIQ,YAAY,EAAE;UACVpB,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE;QACZ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC,CAAC"}
|
@@ -1,14 +1,14 @@
|
|
1
1
|
import { useContext } from 'react';
|
2
|
-
import { useWindowDimensions } from 'react-native';
|
3
2
|
import { UnistylesContext } from './UnistylesTheme';
|
4
3
|
import { getBreakpointFromScreenWidth, proxifyFunction, parseStyle, sortAndValidateBreakpoints } from './utils';
|
4
|
+
import { useDimensions } from './hooks';
|
5
5
|
export const createUnistyles = breakpoints => {
|
6
6
|
const sortedBreakpoints = sortAndValidateBreakpoints(breakpoints);
|
7
7
|
return {
|
8
8
|
createStyles: styles => styles,
|
9
9
|
useStyles: stylesheet => {
|
10
10
|
const theme = useContext(UnistylesContext);
|
11
|
-
const dimensions =
|
11
|
+
const dimensions = useDimensions();
|
12
12
|
const breakpoint = getBreakpointFromScreenWidth(dimensions.width, sortedBreakpoints);
|
13
13
|
const screenSize = {
|
14
14
|
width: dimensions.width,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["useContext","
|
1
|
+
{"version":3,"names":["useContext","UnistylesContext","getBreakpointFromScreenWidth","proxifyFunction","parseStyle","sortAndValidateBreakpoints","useDimensions","createUnistyles","breakpoints","sortedBreakpoints","createStyles","styles","useStyles","stylesheet","theme","dimensions","breakpoint","width","screenSize","height","parsedStyles","dynamicStyleSheet","Object","entries","reduce","acc","_ref","key","value","x"],"sourceRoot":"../../src","sources":["createUnistyles.ts"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAElC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,4BAA4B,EAAEC,eAAe,EAAEC,UAAU,EAAEC,0BAA0B,QAAQ,SAAS;AAC/G,SAASC,aAAa,QAAQ,SAAS;AAEvC,OAAO,MAAMC,eAAe,GAA8CC,WAAc,IAAK;EACzF,MAAMC,iBAAiB,GAAGJ,0BAA0B,CAACG,WAAW,CAAM;EAEtE,OAAO;IACHE,YAAY,EAAsCC,MAAqC,IAAKA,MAAW;IACvGC,SAAS,EAAwCC,UAA4C,IAAK;MAC9F,MAAMC,KAAK,GAAGd,UAAU,CAACC,gBAAgB,CAAM;MAC/C,MAAMc,UAAU,GAAGT,aAAa,CAAC,CAAC;MAClC,MAAMU,UAAU,GAAGd,4BAA4B,CAAIa,UAAU,CAACE,KAAK,EAAER,iBAAiB,CAAC;MACvF,MAAMS,UAAsB,GAAG;QAC3BD,KAAK,EAAEF,UAAU,CAACE,KAAK;QACvBE,MAAM,EAAEJ,UAAU,CAACI;MACvB,CAAC;MAED,IAAI,CAACN,UAAU,EAAE;QACb,OAAO;UACHC,KAAK;UACLH,MAAM,EAAE,CAAC;QACb,CAAC;MACL;MAEA,MAAMS,YAAY,GAAG,OAAOP,UAAU,KAAK,UAAU,GAC/CA,UAAU,CAACC,KAAK,CAAC,GACjBD,UAAU;MAEhB,MAAMQ,iBAAiB,GAAGC,MAAM,CAC3BC,OAAO,CAACH,YAAY,CAAC,CACrBI,MAAM,CAAC,CAACC,GAAG,EAAAC,IAAA,KAAmB;QAAA,IAAjB,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;QACtB,MAAMG,CAAC,GAAGD,KAAiC;QAE3C,IAAI,OAAOA,KAAK,KAAK,UAAU,EAAE;UAC7B,OAAO;YACH,GAAGH,GAAG;YACN,CAACE,GAAG,GAAGxB,eAAe,CAAIyB,KAAK,EAAEZ,UAAU,EAAEE,UAAU,EAAET,iBAAiB;UAC9E,CAAC;QACL;QAEA,OAAO;UACH,GAAGgB,GAAG;UACN,CAACE,GAAG,GAAGvB,UAAU,CAAQyB,CAAC,EAAEb,UAAU,EAAEE,UAAU,EAAET,iBAAiB;QACzE,CAAC;MACL,CAAC,EAAE,CAAC,CAAO,CAAC;MAEhB,OAAO;QACHK,KAAK;QACLH,MAAM,EAAEU;MACZ,CAAC;IACL;EACJ,CAAC;AACL,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["useDimensions"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAiB"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["useWindowDimensions","useDimensions","width","height"],"sourceRoot":"../../../src","sources":["hooks/useDimensions.ts"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,cAAc;AAGlD,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAkB;EAC3C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGH,mBAAmB,CAAC,CAAC;EAE/C,OAAO;IACHE,KAAK;IACLC;EACJ,CAAC;AACL,CAAC"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { useEffect, useRef, useState } from 'react';
|
2
|
+
export const useDimensions = () => {
|
3
|
+
const timerRef = useRef();
|
4
|
+
const [screenSize, setScreenSize] = useState({
|
5
|
+
width: window.innerWidth,
|
6
|
+
height: window.innerHeight
|
7
|
+
});
|
8
|
+
useEffect(() => {
|
9
|
+
const handleResize = () => {
|
10
|
+
clearTimeout(timerRef.current);
|
11
|
+
timerRef.current = setTimeout(() => setScreenSize({
|
12
|
+
width: window.innerWidth,
|
13
|
+
height: window.innerHeight
|
14
|
+
}), 100);
|
15
|
+
};
|
16
|
+
window.addEventListener('resize', handleResize);
|
17
|
+
return () => {
|
18
|
+
window.removeEventListener('resize', handleResize);
|
19
|
+
clearTimeout(timerRef.current);
|
20
|
+
};
|
21
|
+
}, []);
|
22
|
+
return screenSize;
|
23
|
+
};
|
24
|
+
//# sourceMappingURL=useDimensions.web.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","useDimensions","timerRef","screenSize","setScreenSize","width","window","innerWidth","height","innerHeight","handleResize","clearTimeout","current","setTimeout","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["hooks/useDimensions.web.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGnD,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAkB;EAC3C,MAAMC,QAAQ,GAAGH,MAAM,CAAgC,CAAC;EACxD,MAAM,CAACI,UAAU,EAAEC,aAAa,CAAC,GAAGJ,QAAQ,CAAa;IACrDK,KAAK,EAAEC,MAAM,CAACC,UAAU;IACxBC,MAAM,EAAEF,MAAM,CAACG;EACnB,CAAC,CAAC;EAEFX,SAAS,CAAC,MAAM;IACZ,MAAMY,YAAY,GAAGA,CAAA,KAAM;MACvBC,YAAY,CAACT,QAAQ,CAACU,OAAO,CAAC;MAE9BV,QAAQ,CAACU,OAAO,GAAGC,UAAU,CAAC,MAAMT,aAAa,CAAC;QAC9CC,KAAK,EAAEC,MAAM,CAACC,UAAU;QACxBC,MAAM,EAAEF,MAAM,CAACG;MACnB,CAAC,CAAC,EAAE,GAAG,CAAC;IACZ,CAAC;IAEDH,MAAM,CAACQ,gBAAgB,CAAC,QAAQ,EAAEJ,YAAY,CAAC;IAE/C,OAAO,MAAM;MACTJ,MAAM,CAACS,mBAAmB,CAAC,QAAQ,EAAEL,YAAY,CAAC;MAClDC,YAAY,CAACT,QAAQ,CAACU,OAAO,CAAC;IAClC,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOT,UAAU;AACrB,CAAC"}
|
@@ -3,10 +3,6 @@ import { getValueForBreakpoint } from './breakpoints';
|
|
3
3
|
/**
|
4
4
|
* Proxies a function to parse its return value for custom media queries or breakpoints.
|
5
5
|
*
|
6
|
-
* If the function's string representation contains a custom media query or a defined breakpoint,
|
7
|
-
* the returned function will be proxied to parse its return value based on the provided screen size and breakpoints.
|
8
|
-
* If neither is found, the original function is returned.
|
9
|
-
*
|
10
6
|
* @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
|
11
7
|
*
|
12
8
|
* @param {Function} fn - The function to be proxified.
|
@@ -14,7 +10,7 @@ import { getValueForBreakpoint } from './breakpoints';
|
|
14
10
|
* @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
|
15
11
|
* @param {B} breakpoints - An object representing the defined breakpoints.
|
16
12
|
*
|
17
|
-
* @returns {Function} Returns the proxified function
|
13
|
+
* @returns {Function} Returns the proxified function
|
18
14
|
*
|
19
15
|
* @example
|
20
16
|
*
|
@@ -25,17 +21,9 @@ import { getValueForBreakpoint } from './breakpoints';
|
|
25
21
|
* const proxifiedFunction = proxifyFunction(myFunction, 'sm', screenSize, breakpoints)
|
26
22
|
* proxifiedFunction() // parsed style based on screenSize and breakpoints
|
27
23
|
*/
|
28
|
-
export const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => {
|
29
|
-
|
30
|
-
|
31
|
-
const hasBreakpoint = Object.keys(breakpoints).some(bp => stringifiedFunction.includes(bp));
|
32
|
-
if (!hasCustomMediaQuery && !hasBreakpoint) {
|
33
|
-
return fn;
|
34
|
-
}
|
35
|
-
return new Proxy(fn, {
|
36
|
-
apply: (target, thisArg, argumentsList) => parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
37
|
-
});
|
38
|
-
};
|
24
|
+
export const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => new Proxy(fn, {
|
25
|
+
apply: (target, thisArg, argumentsList) => parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
26
|
+
});
|
39
27
|
|
40
28
|
/**
|
41
29
|
* Parses a style object to resolve custom media queries or breakpoints based on the provided screen size and breakpoints.
|
@@ -62,14 +50,25 @@ export const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => {
|
|
62
50
|
* const parsedStyle = parseStyle(style, 'sm', screenSize, breakpoints)
|
63
51
|
* // { fontSize: '12px' }
|
64
52
|
*/
|
65
|
-
export const parseStyle = (style, breakpoint, screenSize, breakpoints) =>
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
53
|
+
export const parseStyle = (style, breakpoint, screenSize, breakpoints) => {
|
54
|
+
const entries = Object.entries(style);
|
55
|
+
return Object.fromEntries(entries.map(_ref => {
|
56
|
+
let [key, value] = _ref;
|
57
|
+
const isNestedStyle = key === 'shadowOffset';
|
58
|
+
if (isNestedStyle) {
|
59
|
+
return [key, parseStyle(value, breakpoint, screenSize, breakpoints)];
|
60
|
+
}
|
61
|
+
const isTransform = key === 'transform';
|
62
|
+
if (isTransform && Array.isArray(value)) {
|
63
|
+
return [key, value.map(value => parseStyle(value, breakpoint, screenSize, breakpoints))];
|
64
|
+
}
|
65
|
+
const isDynamicFunction = typeof value === 'function';
|
66
|
+
const isValidStyle = typeof value !== 'object';
|
67
|
+
if (isDynamicFunction || isValidStyle) {
|
68
|
+
return [key, value];
|
69
|
+
}
|
70
|
+
const valueWithBreakpoint = value;
|
71
|
+
return [key, getValueForBreakpoint(valueWithBreakpoint, breakpoint, screenSize, breakpoints)];
|
72
|
+
}));
|
73
|
+
};
|
75
74
|
//# sourceMappingURL=styles.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["getValueForBreakpoint","proxifyFunction","fn","breakpoint","screenSize","breakpoints","
|
1
|
+
{"version":3,"names":["getValueForBreakpoint","proxifyFunction","fn","breakpoint","screenSize","breakpoints","Proxy","apply","target","thisArg","argumentsList","parseStyle","style","entries","Object","fromEntries","map","_ref","key","value","isNestedStyle","isTransform","Array","isArray","isDynamicFunction","isValidStyle","valueWithBreakpoint"],"sourceRoot":"../../../src","sources":["utils/styles.ts"],"mappings":"AACA,SAASA,qBAAqB,QAAQ,eAAe;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAGA,CAC3BC,EAAY,EAAEC,UAA4B,EAC1CC,UAAsB,EACtBC,WAAc,KACH,IAAIC,KAAK,CAACJ,EAAE,EAAE;EACzBK,KAAK,EAAEA,CAACC,MAAM,EAAEC,OAAO,EAAEC,aAAa,KAClCC,UAAU,CAACH,MAAM,CAACD,KAAK,CAACE,OAAO,EAAEC,aAAa,CAAC,EAAEP,UAAU,EAAEC,UAAU,EAAEC,WAAW;AAC5F,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,UAAU,GAAGA,CACtBC,KAA8B,EAC9BT,UAA4B,EAC5BC,UAAsB,EACtBC,WAAc,KACV;EACJ,MAAMQ,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACD,KAAK,CAAyC;EAE7E,OAAOE,MAAM,CACRC,WAAW,CAACF,OAAO,CACfG,GAAG,CAACC,IAAA,IAAkB;IAAA,IAAjB,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;IACd,MAAMG,aAAa,GAAGF,GAAG,KAAK,cAAc;IAE5C,IAAIE,aAAa,EAAE;MACf,OAAO,CACHF,GAAG,EACHP,UAAU,CAACQ,KAAK,EAAEhB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CACzD;IACL;IAEA,MAAMgB,WAAW,GAAGH,GAAG,KAAK,WAAW;IAEvC,IAAIG,WAAW,IAAIC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,EAAE;MACrC,OAAO,CACHD,GAAG,EACHC,KAAK,CAACH,GAAG,CAACG,KAAK,IAAIR,UAAU,CAACQ,KAAK,EAAEhB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CAAC,CAC7E;IACL;IAEA,MAAMmB,iBAAiB,GAAG,OAAOL,KAAK,KAAK,UAAU;IACrD,MAAMM,YAAY,GAAG,OAAON,KAAK,KAAK,QAAQ;IAE9C,IAAIK,iBAAiB,IAAIC,YAAY,EAAE;MACnC,OAAO,CAACP,GAAG,EAAEC,KAAK,CAAC;IACvB;IAEA,MAAMO,mBAAmB,GAAGP,KAAkD;IAE9E,OAAO,CAACD,GAAG,EAAElB,qBAAqB,CAAI0B,mBAAmB,EAAEvB,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CAAC;EACpG,CAAC,CACL,CAAC;AACT,CAAC"}
|
@@ -91,6 +91,72 @@ describe('styles', () => {
|
|
91
91
|
fontWeight: 'bold'
|
92
92
|
});
|
93
93
|
});
|
94
|
+
it('should correctly parse transform styles', () => {
|
95
|
+
const screenSize = {
|
96
|
+
width: 400,
|
97
|
+
height: 800
|
98
|
+
};
|
99
|
+
const breakpoint = 'sm';
|
100
|
+
const breakpoints = {
|
101
|
+
xs: 0,
|
102
|
+
sm: 400,
|
103
|
+
md: 800
|
104
|
+
};
|
105
|
+
const style = {
|
106
|
+
transform: [{
|
107
|
+
translateX: {
|
108
|
+
sm: 120,
|
109
|
+
md: 200
|
110
|
+
},
|
111
|
+
translateY: 200
|
112
|
+
}]
|
113
|
+
};
|
114
|
+
expect(parseStyle(style, breakpoint, screenSize, breakpoints)).toEqual({
|
115
|
+
transform: [{
|
116
|
+
translateX: 120,
|
117
|
+
translateY: 200
|
118
|
+
}]
|
119
|
+
});
|
120
|
+
});
|
121
|
+
it('should correctly parse shadowOffset styles', () => {
|
122
|
+
const screenSize = {
|
123
|
+
width: 400,
|
124
|
+
height: 800
|
125
|
+
};
|
126
|
+
const breakpoint = 'sm';
|
127
|
+
const breakpoints = {
|
128
|
+
xs: 0,
|
129
|
+
sm: 400,
|
130
|
+
md: 800
|
131
|
+
};
|
132
|
+
const style = {
|
133
|
+
shadowOffset: {
|
134
|
+
width: 0,
|
135
|
+
height: 4
|
136
|
+
}
|
137
|
+
};
|
138
|
+
const styleWithBreakpoints = {
|
139
|
+
shadowOffset: {
|
140
|
+
width: 0,
|
141
|
+
height: {
|
142
|
+
sm: 10,
|
143
|
+
md: 20
|
144
|
+
}
|
145
|
+
}
|
146
|
+
};
|
147
|
+
expect(parseStyle(style, breakpoint, screenSize, breakpoints)).toEqual({
|
148
|
+
shadowOffset: {
|
149
|
+
width: 0,
|
150
|
+
height: 4
|
151
|
+
}
|
152
|
+
});
|
153
|
+
expect(parseStyle(styleWithBreakpoints, breakpoint, screenSize, breakpoints)).toEqual({
|
154
|
+
shadowOffset: {
|
155
|
+
width: 0,
|
156
|
+
height: 10
|
157
|
+
}
|
158
|
+
});
|
159
|
+
});
|
94
160
|
});
|
95
161
|
});
|
96
162
|
//# sourceMappingURL=styles.spec.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["parseStyle","proxifyFunction","describe","it","screenSize","width","height","breakpoint","breakpoints","xs","sm","md","dynamicFunction","isEven","backgroundColor","expect","toEqual","style","fontSize","fontWeight"],"sourceRoot":"../../../src","sources":["utils/styles.spec.ts"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["parseStyle","proxifyFunction","describe","it","screenSize","width","height","breakpoint","breakpoints","xs","sm","md","dynamicFunction","isEven","backgroundColor","expect","toEqual","style","fontSize","fontWeight","transform","translateX","translateY","shadowOffset","styleWithBreakpoints"],"sourceRoot":"../../../src","sources":["utils/styles.spec.ts"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"createUnistyles.d.ts","sourceRoot":"","sources":["../../../src/createUnistyles.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"createUnistyles.d.ts","sourceRoot":"","sources":["../../../src/createUnistyles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAc,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAK3H,eAAO,MAAM,eAAe;;;;;;CAiD3B,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useDimensions.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useDimensions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,aAAa,QAAO,UAOhC,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useDimensions.web.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useDimensions.web.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,aAAa,QAAO,UA0BhC,CAAA"}
|
@@ -2,10 +2,6 @@ import type { CustomNamedStyles, ScreenSize } from '../types';
|
|
2
2
|
/**
|
3
3
|
* Proxies a function to parse its return value for custom media queries or breakpoints.
|
4
4
|
*
|
5
|
-
* If the function's string representation contains a custom media query or a defined breakpoint,
|
6
|
-
* the returned function will be proxied to parse its return value based on the provided screen size and breakpoints.
|
7
|
-
* If neither is found, the original function is returned.
|
8
|
-
*
|
9
5
|
* @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
|
10
6
|
*
|
11
7
|
* @param {Function} fn - The function to be proxified.
|
@@ -13,7 +9,7 @@ import type { CustomNamedStyles, ScreenSize } from '../types';
|
|
13
9
|
* @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
|
14
10
|
* @param {B} breakpoints - An object representing the defined breakpoints.
|
15
11
|
*
|
16
|
-
* @returns {Function} Returns the proxified function
|
12
|
+
* @returns {Function} Returns the proxified function
|
17
13
|
*
|
18
14
|
* @example
|
19
15
|
*
|
@@ -50,7 +46,5 @@ export declare const proxifyFunction: <B extends Record<string, number>>(fn: Fun
|
|
50
46
|
* const parsedStyle = parseStyle(style, 'sm', screenSize, breakpoints)
|
51
47
|
* // { fontSize: '12px' }
|
52
48
|
*/
|
53
|
-
export declare const parseStyle: <T, B extends Record<string, number>>(style: CustomNamedStyles<T, B>, breakpoint: keyof B & string, screenSize: ScreenSize, breakpoints: B) =>
|
54
|
-
[k: string]: unknown;
|
55
|
-
};
|
49
|
+
export declare const parseStyle: <T, B extends Record<string, number>>(style: CustomNamedStyles<T, B>, breakpoint: keyof B & string, screenSize: ScreenSize, breakpoints: B) => T;
|
56
50
|
//# sourceMappingURL=styles.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG7D
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG7D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,yCACpB,QAAQ,4CACA,UAAU,qBAEvB,QAGD,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,UAAU,kHAGP,UAAU,sBAsCzB,CAAA"}
|
package/package.json
CHANGED
package/src/createUnistyles.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { useContext } from 'react'
|
2
|
-
import { useWindowDimensions } from 'react-native'
|
3
2
|
import type { CreateStylesFactory, CustomNamedStyles, ScreenSize, ExtractBreakpoints, RemoveKeysWithPrefix } from './types'
|
4
3
|
import { UnistylesContext } from './UnistylesTheme'
|
5
4
|
import { getBreakpointFromScreenWidth, proxifyFunction, parseStyle, sortAndValidateBreakpoints } from './utils'
|
5
|
+
import { useDimensions } from './hooks'
|
6
6
|
|
7
7
|
export const createUnistyles = <B extends Record<string, number>, T = {}>(breakpoints: B) => {
|
8
8
|
const sortedBreakpoints = sortAndValidateBreakpoints(breakpoints) as B
|
@@ -11,7 +11,7 @@ export const createUnistyles = <B extends Record<string, number>, T = {}>(breakp
|
|
11
11
|
createStyles: <S extends CustomNamedStyles<S, B>>(styles: S | CreateStylesFactory<S, T>) => styles as S,
|
12
12
|
useStyles: <ST extends CustomNamedStyles<ST, B>>(stylesheet?: ST | CreateStylesFactory<ST, T>) => {
|
13
13
|
const theme = useContext(UnistylesContext) as T
|
14
|
-
const dimensions =
|
14
|
+
const dimensions = useDimensions()
|
15
15
|
const breakpoint = getBreakpointFromScreenWidth<B>(dimensions.width, sortedBreakpoints)
|
16
16
|
const screenSize: ScreenSize = {
|
17
17
|
width: dimensions.width,
|
@@ -0,0 +1 @@
|
|
1
|
+
export { useDimensions } from './useDimensions'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { useEffect, useRef, useState } from 'react'
|
2
|
+
import type { ScreenSize } from '../types'
|
3
|
+
|
4
|
+
export const useDimensions = (): ScreenSize => {
|
5
|
+
const timerRef = useRef<ReturnType<typeof setTimeout>>()
|
6
|
+
const [screenSize, setScreenSize] = useState<ScreenSize>({
|
7
|
+
width: window.innerWidth,
|
8
|
+
height: window.innerHeight
|
9
|
+
})
|
10
|
+
|
11
|
+
useEffect(() => {
|
12
|
+
const handleResize = () => {
|
13
|
+
clearTimeout(timerRef.current)
|
14
|
+
|
15
|
+
timerRef.current = setTimeout(() => setScreenSize({
|
16
|
+
width: window.innerWidth,
|
17
|
+
height: window.innerHeight
|
18
|
+
}), 100)
|
19
|
+
}
|
20
|
+
|
21
|
+
window.addEventListener('resize', handleResize)
|
22
|
+
|
23
|
+
return () => {
|
24
|
+
window.removeEventListener('resize', handleResize)
|
25
|
+
clearTimeout(timerRef.current)
|
26
|
+
}
|
27
|
+
}, [])
|
28
|
+
|
29
|
+
return screenSize
|
30
|
+
}
|
package/src/utils/styles.ts
CHANGED
@@ -4,10 +4,6 @@ import { getValueForBreakpoint } from './breakpoints'
|
|
4
4
|
/**
|
5
5
|
* Proxies a function to parse its return value for custom media queries or breakpoints.
|
6
6
|
*
|
7
|
-
* If the function's string representation contains a custom media query or a defined breakpoint,
|
8
|
-
* the returned function will be proxied to parse its return value based on the provided screen size and breakpoints.
|
9
|
-
* If neither is found, the original function is returned.
|
10
|
-
*
|
11
7
|
* @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
|
12
8
|
*
|
13
9
|
* @param {Function} fn - The function to be proxified.
|
@@ -15,7 +11,7 @@ import { getValueForBreakpoint } from './breakpoints'
|
|
15
11
|
* @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
|
16
12
|
* @param {B} breakpoints - An object representing the defined breakpoints.
|
17
13
|
*
|
18
|
-
* @returns {Function} Returns the proxified function
|
14
|
+
* @returns {Function} Returns the proxified function
|
19
15
|
*
|
20
16
|
* @example
|
21
17
|
*
|
@@ -30,22 +26,10 @@ export const proxifyFunction = <B extends Record<string, number>>(
|
|
30
26
|
fn: Function, breakpoint: keyof B & string,
|
31
27
|
screenSize: ScreenSize,
|
32
28
|
breakpoints: B
|
33
|
-
): Function => {
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
.keys(breakpoints)
|
38
|
-
.some(bp => stringifiedFunction.includes(bp))
|
39
|
-
|
40
|
-
if (!hasCustomMediaQuery && !hasBreakpoint) {
|
41
|
-
return fn
|
42
|
-
}
|
43
|
-
|
44
|
-
return new Proxy(fn, {
|
45
|
-
apply: (target, thisArg, argumentsList) =>
|
46
|
-
parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
47
|
-
})
|
48
|
-
}
|
29
|
+
): Function => new Proxy(fn, {
|
30
|
+
apply: (target, thisArg, argumentsList) =>
|
31
|
+
parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpoints)
|
32
|
+
})
|
49
33
|
|
50
34
|
/**
|
51
35
|
* Parses a style object to resolve custom media queries or breakpoints based on the provided screen size and breakpoints.
|
@@ -77,19 +61,40 @@ export const parseStyle = <T, B extends Record<string, number>>(
|
|
77
61
|
breakpoint: keyof B & string,
|
78
62
|
screenSize: ScreenSize,
|
79
63
|
breakpoints: B
|
80
|
-
) =>
|
81
|
-
.
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
64
|
+
): T => {
|
65
|
+
const entries = Object.entries(style) as [[keyof T, CustomNamedStyles<T, B>]]
|
66
|
+
|
67
|
+
return Object
|
68
|
+
.fromEntries(entries
|
69
|
+
.map(([key, value]) => {
|
70
|
+
const isNestedStyle = key === 'shadowOffset'
|
86
71
|
|
87
|
-
|
88
|
-
|
89
|
-
|
72
|
+
if (isNestedStyle) {
|
73
|
+
return [
|
74
|
+
key,
|
75
|
+
parseStyle(value, breakpoint, screenSize, breakpoints)
|
76
|
+
]
|
77
|
+
}
|
90
78
|
|
91
|
-
|
79
|
+
const isTransform = key === 'transform'
|
92
80
|
|
93
|
-
|
94
|
-
|
95
|
-
|
81
|
+
if (isTransform && Array.isArray(value)) {
|
82
|
+
return [
|
83
|
+
key,
|
84
|
+
value.map(value => parseStyle(value, breakpoint, screenSize, breakpoints))
|
85
|
+
]
|
86
|
+
}
|
87
|
+
|
88
|
+
const isDynamicFunction = typeof value === 'function'
|
89
|
+
const isValidStyle = typeof value !== 'object'
|
90
|
+
|
91
|
+
if (isDynamicFunction || isValidStyle) {
|
92
|
+
return [key, value]
|
93
|
+
}
|
94
|
+
|
95
|
+
const valueWithBreakpoint = value as Record<keyof B & string, string | number>
|
96
|
+
|
97
|
+
return [key, getValueForBreakpoint<B>(valueWithBreakpoint, breakpoint, screenSize, breakpoints)]
|
98
|
+
})
|
99
|
+
)
|
100
|
+
}
|