react-native-unistyles 1.0.0-beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +243 -0
  3. package/lib/commonjs/UnistylesTheme.js +21 -0
  4. package/lib/commonjs/UnistylesTheme.js.map +1 -0
  5. package/lib/commonjs/createUnistyles.js +52 -0
  6. package/lib/commonjs/createUnistyles.js.map +1 -0
  7. package/lib/commonjs/index.js +20 -0
  8. package/lib/commonjs/index.js.map +1 -0
  9. package/lib/commonjs/types.js +6 -0
  10. package/lib/commonjs/types.js.map +1 -0
  11. package/lib/commonjs/utils/breakpoints.js +139 -0
  12. package/lib/commonjs/utils/breakpoints.js.map +1 -0
  13. package/lib/commonjs/utils/breakpoints.spec.js +149 -0
  14. package/lib/commonjs/utils/breakpoints.spec.js.map +1 -0
  15. package/lib/commonjs/utils/common.js +11 -0
  16. package/lib/commonjs/utils/common.js.map +1 -0
  17. package/lib/commonjs/utils/index.js +32 -0
  18. package/lib/commonjs/utils/index.js.map +1 -0
  19. package/lib/commonjs/utils/mediaQueries.js +189 -0
  20. package/lib/commonjs/utils/mediaQueries.js.map +1 -0
  21. package/lib/commonjs/utils/mediaQueries.spec.js +220 -0
  22. package/lib/commonjs/utils/mediaQueries.spec.js.map +1 -0
  23. package/lib/commonjs/utils/styles.js +82 -0
  24. package/lib/commonjs/utils/styles.js.map +1 -0
  25. package/lib/commonjs/utils/styles.spec.js +98 -0
  26. package/lib/commonjs/utils/styles.spec.js.map +1 -0
  27. package/lib/module/UnistylesTheme.js +12 -0
  28. package/lib/module/UnistylesTheme.js.map +1 -0
  29. package/lib/module/createUnistyles.js +45 -0
  30. package/lib/module/createUnistyles.js.map +1 -0
  31. package/lib/module/index.js +3 -0
  32. package/lib/module/index.js.map +1 -0
  33. package/lib/module/types.js +2 -0
  34. package/lib/module/types.js.map +1 -0
  35. package/lib/module/utils/breakpoints.js +131 -0
  36. package/lib/module/utils/breakpoints.js.map +1 -0
  37. package/lib/module/utils/breakpoints.spec.js +147 -0
  38. package/lib/module/utils/breakpoints.spec.js.map +1 -0
  39. package/lib/module/utils/common.js +4 -0
  40. package/lib/module/utils/common.js.map +1 -0
  41. package/lib/module/utils/index.js +3 -0
  42. package/lib/module/utils/index.js.map +1 -0
  43. package/lib/module/utils/mediaQueries.js +176 -0
  44. package/lib/module/utils/mediaQueries.js.map +1 -0
  45. package/lib/module/utils/mediaQueries.spec.js +218 -0
  46. package/lib/module/utils/mediaQueries.spec.js.map +1 -0
  47. package/lib/module/utils/styles.js +75 -0
  48. package/lib/module/utils/styles.js.map +1 -0
  49. package/lib/module/utils/styles.spec.js +96 -0
  50. package/lib/module/utils/styles.spec.js.map +1 -0
  51. package/lib/typescript/src/UnistylesTheme.d.ts +9 -0
  52. package/lib/typescript/src/UnistylesTheme.d.ts.map +1 -0
  53. package/lib/typescript/src/createUnistyles.d.ts +9 -0
  54. package/lib/typescript/src/createUnistyles.d.ts.map +1 -0
  55. package/lib/typescript/src/index.d.ts +3 -0
  56. package/lib/typescript/src/index.d.ts.map +1 -0
  57. package/lib/typescript/src/types.d.ts +27 -0
  58. package/lib/typescript/src/types.d.ts.map +1 -0
  59. package/lib/typescript/src/utils/breakpoints.d.ts +63 -0
  60. package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -0
  61. package/lib/typescript/src/utils/breakpoints.spec.d.ts +2 -0
  62. package/lib/typescript/src/utils/breakpoints.spec.d.ts.map +1 -0
  63. package/lib/typescript/src/utils/common.d.ts +2 -0
  64. package/lib/typescript/src/utils/common.d.ts.map +1 -0
  65. package/lib/typescript/src/utils/index.d.ts +3 -0
  66. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  67. package/lib/typescript/src/utils/mediaQueries.d.ts +130 -0
  68. package/lib/typescript/src/utils/mediaQueries.d.ts.map +1 -0
  69. package/lib/typescript/src/utils/mediaQueries.spec.d.ts +2 -0
  70. package/lib/typescript/src/utils/mediaQueries.spec.d.ts.map +1 -0
  71. package/lib/typescript/src/utils/styles.d.ts +56 -0
  72. package/lib/typescript/src/utils/styles.d.ts.map +1 -0
  73. package/lib/typescript/src/utils/styles.spec.d.ts +2 -0
  74. package/lib/typescript/src/utils/styles.spec.d.ts.map +1 -0
  75. package/package.json +132 -0
  76. package/src/UnistylesTheme.tsx +17 -0
  77. package/src/createUnistyles.ts +56 -0
  78. package/src/index.ts +2 -0
  79. package/src/types.ts +52 -0
  80. package/src/utils/breakpoints.ts +140 -0
  81. package/src/utils/common.ts +3 -0
  82. package/src/utils/index.ts +2 -0
  83. package/src/utils/mediaQueries.ts +201 -0
  84. package/src/utils/styles.ts +95 -0
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.proxifyFunction = exports.parseStyle = void 0;
7
+ var _breakpoints = require("./breakpoints");
8
+ /**
9
+ * Proxies a function to parse its return value for custom media queries or breakpoints.
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
+ * @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
16
+ *
17
+ * @param {Function} fn - The function to be proxified.
18
+ * @param {keyof B & string} breakpoint - The breakpoint name to check against.
19
+ * @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
20
+ * @param {B} breakpoints - An object representing the defined breakpoints.
21
+ *
22
+ * @returns {Function} Returns the proxified function or the original function if no custom media query or breakpoint is found in its string representation.
23
+ *
24
+ * @example
25
+ *
26
+ * const myFunction = () => ({ ':w[200]': 'value1', sm: 'value2' })
27
+ * const screenSize = { width: 250, height: 400 }
28
+ * const breakpoints = { sm: 300, md: 600 }
29
+ *
30
+ * const proxifiedFunction = proxifyFunction(myFunction, 'sm', screenSize, breakpoints)
31
+ * proxifiedFunction() // parsed style based on screenSize and breakpoints
32
+ */
33
+ const proxifyFunction = (fn, breakpoint, screenSize, breakpoints) => {
34
+ const stringifiedFunction = fn.toString();
35
+ const hasCustomMediaQuery = stringifiedFunction.includes(':w[') || stringifiedFunction.includes(':h[');
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
+ };
44
+
45
+ /**
46
+ * Parses a style object to resolve custom media queries or breakpoints based on the provided screen size and breakpoints.
47
+ *
48
+ * The function processes each key-value pair in the style object. If the value is a function or a valid style (not an object or a 'transform' key),
49
+ * it is returned as-is. Otherwise, the function attempts to resolve the value based on the provided breakpoint, screen size, and defined breakpoints.
50
+ *
51
+ * @template T - The type of the style object.
52
+ * @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
53
+ *
54
+ * @param {CustomNamedStyles<T, B>} style - The style object to be parsed.
55
+ * @param {keyof B & string} breakpoint - The breakpoint name to check against.
56
+ * @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
57
+ * @param {B} breakpoints - An object representing the defined breakpoints.
58
+ *
59
+ * @returns {Record<string, string | number | Function>} Returns the parsed style object with resolved custom media queries or breakpoints.
60
+ *
61
+ * @example
62
+ *
63
+ * const style = { fontSize: { sm: '12px', md: '16px' } }
64
+ * const screenSize = { width: 300, height: 400 }
65
+ * const breakpoints = { xs: 0, sm: 300, md: 600 }
66
+ *
67
+ * const parsedStyle = parseStyle(style, 'sm', screenSize, breakpoints)
68
+ * // { fontSize: '12px' }
69
+ */
70
+ exports.proxifyFunction = proxifyFunction;
71
+ const parseStyle = (style, breakpoint, screenSize, breakpoints) => Object.fromEntries(Object.entries(style).map(_ref => {
72
+ let [key, value] = _ref;
73
+ const isDynamicFunction = typeof value === 'function';
74
+ const isValidStyle = typeof value !== 'object' || key === 'transform';
75
+ if (isDynamicFunction || isValidStyle) {
76
+ return [key, value];
77
+ }
78
+ const valueWithBreakpoint = value;
79
+ return [key, (0, _breakpoints.getValueForBreakpoint)(valueWithBreakpoint, breakpoint, screenSize, breakpoints)];
80
+ }));
81
+ exports.parseStyle = parseStyle;
82
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_breakpoints","require","proxifyFunction","fn","breakpoint","screenSize","breakpoints","stringifiedFunction","toString","hasCustomMediaQuery","includes","hasBreakpoint","Object","keys","some","bp","Proxy","apply","target","thisArg","argumentsList","parseStyle","exports","style","fromEntries","entries","map","_ref","key","value","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;AACA;AACA;AACA;AACA;AACO,MAAMC,eAAe,GAAGA,CAC3BC,EAAY,EAAEC,UAA4B,EAC1CC,UAAsB,EACtBC,WAAc,KACH;EACX,MAAMC,mBAAmB,GAAGJ,EAAE,CAACK,QAAQ,CAAC,CAAC;EACzC,MAAMC,mBAAmB,GAAGF,mBAAmB,CAACG,QAAQ,CAAC,KAAK,CAAC,IAAIH,mBAAmB,CAACG,QAAQ,CAAC,KAAK,CAAC;EACtG,MAAMC,aAAa,GAAGC,MAAM,CACvBC,IAAI,CAACP,WAAW,CAAC,CACjBQ,IAAI,CAACC,EAAE,IAAIR,mBAAmB,CAACG,QAAQ,CAACK,EAAE,CAAC,CAAC;EAEjD,IAAI,CAACN,mBAAmB,IAAI,CAACE,aAAa,EAAE;IACxC,OAAOR,EAAE;EACb;EAEA,OAAO,IAAIa,KAAK,CAACb,EAAE,EAAE;IACjBc,KAAK,EAAEA,CAACC,MAAM,EAAEC,OAAO,EAAEC,aAAa,KAClCC,UAAU,CAACH,MAAM,CAACD,KAAK,CAACE,OAAO,EAAEC,aAAa,CAAC,EAAEhB,UAAU,EAAEC,UAAU,EAAEC,WAAW;EAC5F,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxBAgB,OAAA,CAAApB,eAAA,GAAAA,eAAA;AAyBO,MAAMmB,UAAU,GAAGA,CACtBE,KAA8B,EAC9BnB,UAA4B,EAC5BC,UAAsB,EACtBC,WAAc,KACbM,MAAM,CACNY,WAAW,CAACZ,MAAM,CACda,OAAO,CAACF,KAAK,CAAC,CACdG,GAAG,CAACC,IAAA,IAAkB;EAAA,IAAjB,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAAF,IAAA;EACd,MAAMG,iBAAiB,GAAG,OAAOD,KAAK,KAAK,UAAU;EACrD,MAAME,YAAY,GAAG,OAAOF,KAAK,KAAK,QAAQ,IAAID,GAAG,KAAK,WAAW;EAErE,IAAIE,iBAAiB,IAAIC,YAAY,EAAE;IACnC,OAAO,CAACH,GAAG,EAAEC,KAAK,CAAC;EACvB;EAEA,MAAMG,mBAAmB,GAAGH,KAAkD;EAE9E,OAAO,CAACD,GAAG,EAAE,IAAAK,kCAAqB,EAAID,mBAAmB,EAAE5B,UAAU,EAAEC,UAAU,EAAEC,WAAW,CAAC,CAAC;AACpG,CAAC,CACL,CAAC;AAAAgB,OAAA,CAAAD,UAAA,GAAAA,UAAA"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ var _styles = require("./styles");
4
+ describe('styles', () => {
5
+ describe('proxifyFunction', () => {
6
+ it('should parse style for dynamic function', () => {
7
+ const screenSize = {
8
+ width: 400,
9
+ height: 800
10
+ };
11
+ const breakpoint = 'sm';
12
+ const breakpoints = {
13
+ xs: 0,
14
+ sm: 400,
15
+ md: 800
16
+ };
17
+ const dynamicFunction = isEven => ({
18
+ backgroundColor: {
19
+ sm: isEven ? 'green' : 'red',
20
+ md: isEven ? 'orange' : 'pink'
21
+ }
22
+ });
23
+ expect((0, _styles.proxifyFunction)(dynamicFunction, breakpoint, screenSize, breakpoints)(true)).toEqual({
24
+ backgroundColor: 'green'
25
+ });
26
+ });
27
+ it('should return proxified function for custom media query', () => {
28
+ const screenSize = {
29
+ width: 400,
30
+ height: 800
31
+ };
32
+ const breakpoint = 'sm';
33
+ const breakpoints = {
34
+ xs: 0,
35
+ sm: 400,
36
+ md: 800
37
+ };
38
+ const dynamicFunction = isEven => ({
39
+ backgroundColor: {
40
+ ':w[,399]': isEven ? 'green' : 'red',
41
+ ':w[400]': isEven ? 'orange' : 'pink'
42
+ }
43
+ });
44
+ expect((0, _styles.proxifyFunction)(dynamicFunction, breakpoint, screenSize, breakpoints)(false)).toEqual({
45
+ backgroundColor: 'pink'
46
+ });
47
+ });
48
+ it('should return same function for no breakpoints nor media queries', () => {
49
+ const screenSize = {
50
+ width: 400,
51
+ height: 800
52
+ };
53
+ const breakpoint = 'sm';
54
+ const breakpoints = {
55
+ xs: 0,
56
+ sm: 400,
57
+ md: 800
58
+ };
59
+ const dynamicFunction = isEven => ({
60
+ backgroundColor: isEven ? 'pink' : 'purple'
61
+ });
62
+ expect((0, _styles.proxifyFunction)(dynamicFunction, breakpoint, screenSize, breakpoints)(false)).toEqual({
63
+ backgroundColor: 'purple'
64
+ });
65
+ });
66
+ });
67
+ describe('parseStyle', () => {
68
+ it('should correctly parse styles', () => {
69
+ const screenSize = {
70
+ width: 400,
71
+ height: 800
72
+ };
73
+ const breakpoint = 'sm';
74
+ const breakpoints = {
75
+ xs: 0,
76
+ sm: 400,
77
+ md: 800
78
+ };
79
+ const style = {
80
+ fontSize: {
81
+ sm: 12,
82
+ md: 20
83
+ },
84
+ backgroundColor: {
85
+ xs: 'pink',
86
+ md: 'orange'
87
+ },
88
+ fontWeight: 'bold'
89
+ };
90
+ expect((0, _styles.parseStyle)(style, breakpoint, screenSize, breakpoints)).toEqual({
91
+ fontSize: 12,
92
+ backgroundColor: 'pink',
93
+ fontWeight: 'bold'
94
+ });
95
+ });
96
+ });
97
+ });
98
+ //# sourceMappingURL=styles.spec.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,12 @@
1
+ import React, { createContext } from 'react';
2
+ export const UnistylesContext = /*#__PURE__*/createContext({});
3
+ export const UnistylesTheme = _ref => {
4
+ let {
5
+ theme,
6
+ children
7
+ } = _ref;
8
+ return /*#__PURE__*/React.createElement(UnistylesContext.Provider, {
9
+ value: theme
10
+ }, children);
11
+ };
12
+ //# sourceMappingURL=UnistylesTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","UnistylesContext","UnistylesTheme","_ref","theme","children","createElement","Provider","value"],"sourceRoot":"../../src","sources":["UnistylesTheme.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAO5C,OAAO,MAAMC,gBAAgB,gBAAGD,aAAa,CAAC,CAAC,CAAC,CAAC;AAEjD,OAAO,MAAME,cAA4D,GAAGC,IAAA;EAAA,IAAC;IACzEC,KAAK;IACLC;EACJ,CAAC,GAAAF,IAAA;EAAA,oBACGJ,KAAA,CAAAO,aAAA,CAACL,gBAAgB,CAACM,QAAQ;IAACC,KAAK,EAAEJ;EAAM,GACnCC,QACsB,CAAC;AAAA,CAC/B"}
@@ -0,0 +1,45 @@
1
+ import { useContext } from 'react';
2
+ import { useWindowDimensions } from 'react-native';
3
+ import { UnistylesContext } from './UnistylesTheme';
4
+ import { getBreakpointFromScreenWidth, proxifyFunction, parseStyle, sortAndValidateBreakpoints } from './utils';
5
+ export const createUnistyles = breakpoints => {
6
+ const sortedBreakpoints = sortAndValidateBreakpoints(breakpoints);
7
+ return {
8
+ createStyles: styles => styles,
9
+ useStyles: stylesheet => {
10
+ const theme = useContext(UnistylesContext);
11
+ const dimensions = useWindowDimensions();
12
+ const breakpoint = getBreakpointFromScreenWidth(dimensions.width, sortedBreakpoints);
13
+ const screenSize = {
14
+ width: dimensions.width,
15
+ height: dimensions.height
16
+ };
17
+ if (!stylesheet) {
18
+ return {
19
+ theme,
20
+ styles: {}
21
+ };
22
+ }
23
+ const parsedStyles = typeof stylesheet === 'function' ? stylesheet(theme) : stylesheet;
24
+ const dynamicStyleSheet = Object.entries(parsedStyles).reduce((acc, _ref) => {
25
+ let [key, value] = _ref;
26
+ const x = value;
27
+ if (typeof value === 'function') {
28
+ return {
29
+ ...acc,
30
+ [key]: proxifyFunction(value, breakpoint, screenSize, sortedBreakpoints)
31
+ };
32
+ }
33
+ return {
34
+ ...acc,
35
+ [key]: parseStyle(x, breakpoint, screenSize, sortedBreakpoints)
36
+ };
37
+ }, {});
38
+ return {
39
+ theme,
40
+ styles: dynamicStyleSheet
41
+ };
42
+ }
43
+ };
44
+ };
45
+ //# sourceMappingURL=createUnistyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useContext","useWindowDimensions","UnistylesContext","getBreakpointFromScreenWidth","proxifyFunction","parseStyle","sortAndValidateBreakpoints","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;AAClC,SAASC,mBAAmB,QAAQ,cAAc;AAElD,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,4BAA4B,EAAEC,eAAe,EAAEC,UAAU,EAAEC,0BAA0B,QAAQ,SAAS;AAE/G,OAAO,MAAMC,eAAe,GAA8CC,WAAc,IAAK;EACzF,MAAMC,iBAAiB,GAAGH,0BAA0B,CAACE,WAAW,CAAM;EAEtE,OAAO;IACHE,YAAY,EAAsCC,MAAqC,IAAKA,MAAW;IACvGC,SAAS,EAAwCC,UAA4C,IAAK;MAC9F,MAAMC,KAAK,GAAGd,UAAU,CAACE,gBAAgB,CAAM;MAC/C,MAAMa,UAAU,GAAGd,mBAAmB,CAAC,CAAC;MACxC,MAAMe,UAAU,GAAGb,4BAA4B,CAAIY,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,GAAGvB,eAAe,CAAIwB,KAAK,EAAEZ,UAAU,EAAEE,UAAU,EAAET,iBAAiB;UAC9E,CAAC;QACL;QAEA,OAAO;UACH,GAAGgB,GAAG;UACN,CAACE,GAAG,GAAGtB,UAAU,CAAQwB,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,3 @@
1
+ export { UnistylesTheme } from './UnistylesTheme';
2
+ export { createUnistyles } from './createUnistyles';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UnistylesTheme","createUnistyles"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SAASA,cAAc,QAAQ,kBAAkB;AACjD,SAASC,eAAe,QAAQ,mBAAmB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { throwError } from './common';
2
+ import { getKeyForCustomMediaQuery, isMediaQuery } from './mediaQueries';
3
+
4
+ /**
5
+ * Sorts the breakpoints object based on its numeric values in ascending order and validates them.
6
+ *
7
+ * This function takes an object where keys represent breakpoint names and values are numeric.
8
+ * It returns a new object with the same keys but sorted based on their corresponding numeric values.
9
+ * Additionally, it validates that:
10
+ * 1. The first breakpoint starts with a value of 0.
11
+ * 2. No duplicate breakpoint values exist.
12
+ *
13
+ * If the validation fails, appropriate error messages are logged to the console.
14
+ *
15
+ * @template B - An object type where keys are strings and values are numbers.
16
+ * @param {B} breakpoints - The breakpoints object to be sorted and validated.
17
+ * @returns {B} A new object with sorted and validated breakpoints.
18
+ *
19
+ * @example
20
+ * const input = { md: 768, lg: 1024, sm: 0 }
21
+ * sortAndValidateBreakpoints(input) // returns { sm: 0, md: 768, lg: 1024 }
22
+ */
23
+ export const sortAndValidateBreakpoints = breakpoints => {
24
+ const sortedPairs = Object.entries(breakpoints).sort((breakpoint1, breakpoint2) => {
25
+ const [, value1] = breakpoint1;
26
+ const [, value2] = breakpoint2;
27
+ return value1 - value2;
28
+ });
29
+ const sortedBreakpoints = Object.freeze(Object.fromEntries(sortedPairs));
30
+ const breakpointValues = Object.values(sortedBreakpoints);
31
+ const [firstBreakpoint] = breakpointValues;
32
+ if (firstBreakpoint !== 0) {
33
+ throwError('first breakpoint must start with 0');
34
+ }
35
+ if (breakpointValues.length !== new Set(breakpointValues).size) {
36
+ throwError('breakpoint values are duplicated');
37
+ }
38
+ return sortedBreakpoints;
39
+ };
40
+
41
+ /**
42
+ * Determines the appropriate breakpoint key for a given screen width based on provided breakpoints.
43
+ *
44
+ * This function takes a screen width and an object of breakpoints. It returns the key of the breakpoint
45
+ * that the screen width falls into. The breakpoints are assumed to be sorted in ascending order.
46
+ *
47
+ * @template B - An object type where keys are strings and values are numbers representing screen widths.
48
+ * @param {number} width - The screen width to determine the breakpoint for.
49
+ * @param {B} breakpoints - The breakpoints object to use for determination.
50
+ * @returns {keyof B & string} The key of the breakpoint that the screen width falls into.
51
+ *
52
+ * @example
53
+ * const breakpoints = { sm: 0, md: 768, lg: 1024 }
54
+ * getBreakpointFromScreenWidth(800, breakpoints) // returns 'md'
55
+ */
56
+ export const getBreakpointFromScreenWidth = (width, breakpoints) => {
57
+ const [key] = Object.entries(breakpoints).find((_ref, index, otherBreakpoints) => {
58
+ let [, value] = _ref;
59
+ const minVal = value;
60
+ const maxVal = otherBreakpoints[index + 1]?.[1];
61
+ if (!maxVal) {
62
+ return true;
63
+ }
64
+ return width >= minVal && width < maxVal;
65
+ });
66
+ return key;
67
+ };
68
+
69
+ /**
70
+ * Retrieves the value associated with a given breakpoint or custom media query based on the provided screen size.
71
+ *
72
+ * The function first checks for custom media queries. If a matching custom media query is found, its associated value is returned.
73
+ * If no custom media query matches, the function then checks for a direct breakpoint match.
74
+ * If there's no direct breakpoint match, the function simulates CSS cascading to find the closest matching breakpoint.
75
+ *
76
+ * @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
77
+ *
78
+ * @param {Record<keyof B & string, string | number>} value - An object containing values associated with breakpoints or custom media queries.
79
+ * @param {keyof B & string} breakpoint - The breakpoint name to check against.
80
+ * @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
81
+ * @param {B} breakpoints - An object representing the defined breakpoints.
82
+ *
83
+ * @returns {string | number | undefined} Returns the value associated with the matching breakpoint or custom media query, or `undefined` if no match is found.
84
+ *
85
+ * @example
86
+ *
87
+ * const values = { ':w[200]': 'value1', sm: 'value2', md: 'value3' }
88
+ * const screenSize = { width: 250, height: 400 }
89
+ * const breakpoints = { sm: 300, md: 600, lg: 900 }
90
+ *
91
+ * getValueForBreakpoint(values, 'sm', screenSize, breakpoints); // 'value1'
92
+ */
93
+ export const getValueForBreakpoint = (value, breakpoint, screenSize, breakpoints) => {
94
+ // the highest priority is for custom media queries
95
+ const customMediaQueries = Object.entries(value).filter(_ref2 => {
96
+ let [key] = _ref2;
97
+ return isMediaQuery(key);
98
+ });
99
+ const customMediaQueryKey = getKeyForCustomMediaQuery(customMediaQueries, screenSize);
100
+ if (customMediaQueryKey && customMediaQueryKey in value) {
101
+ return value[customMediaQueryKey];
102
+ }
103
+
104
+ // if no custom media query, or didn't match, proceed with defined breakpoints
105
+ const unifiedKey = breakpoint.toLowerCase();
106
+ const directBreakpoint = value[unifiedKey];
107
+
108
+ // if there is a direct key like 'sm' or 'md', or value for this key exists but its undefined
109
+ if (directBreakpoint || unifiedKey in value) {
110
+ return directBreakpoint;
111
+ }
112
+
113
+ // there is no direct hit for breakpoint nor media-query, so let's simulate CSS cascading
114
+ const allBreakpoints = Object.entries(breakpoints).map(_ref3 => {
115
+ let [key, bpValue] = _ref3;
116
+ return [key.toLowerCase(), bpValue];
117
+ });
118
+ const currentBreakpoint = allBreakpoints.findIndex(_ref4 => {
119
+ let [key] = _ref4;
120
+ return key === unifiedKey;
121
+ });
122
+ const availableBreakpoints = allBreakpoints.filter((_ref5, index) => {
123
+ let [key] = _ref5;
124
+ return index < currentBreakpoint && key && key in value;
125
+ }).map(_ref6 => {
126
+ let [key] = _ref6;
127
+ return key;
128
+ });
129
+ return allBreakpoints.length > 0 ? value[availableBreakpoints[availableBreakpoints.length - 1]] : undefined;
130
+ };
131
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["throwError","getKeyForCustomMediaQuery","isMediaQuery","sortAndValidateBreakpoints","breakpoints","sortedPairs","Object","entries","sort","breakpoint1","breakpoint2","value1","value2","sortedBreakpoints","freeze","fromEntries","breakpointValues","values","firstBreakpoint","length","Set","size","getBreakpointFromScreenWidth","width","key","find","_ref","index","otherBreakpoints","value","minVal","maxVal","getValueForBreakpoint","breakpoint","screenSize","customMediaQueries","filter","_ref2","customMediaQueryKey","unifiedKey","toLowerCase","directBreakpoint","allBreakpoints","map","_ref3","bpValue","currentBreakpoint","findIndex","_ref4","availableBreakpoints","_ref5","_ref6","undefined"],"sourceRoot":"../../../src","sources":["utils/breakpoints.ts"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { getBreakpointFromScreenWidth, getValueForBreakpoint, sortAndValidateBreakpoints } from './breakpoints';
2
+ describe('breakpoints', () => {
3
+ describe('sortAndValidateBreakpoints', () => {
4
+ it('should throw error for empty breakpoints', () => {
5
+ const breakpoints = {};
6
+ expect(() => sortAndValidateBreakpoints(breakpoints)).toThrow();
7
+ });
8
+ it('should throw error for breakpoints that don\'t start with 0', () => {
9
+ const breakpoints = {
10
+ sm: -1
11
+ };
12
+ expect(() => sortAndValidateBreakpoints(breakpoints)).toThrow();
13
+ });
14
+ it('should return same order for sorted elements', () => {
15
+ const breakpoints = {
16
+ sm: 0,
17
+ md: 200,
18
+ lg: 300,
19
+ xl: 500
20
+ };
21
+ expect(sortAndValidateBreakpoints(breakpoints)).toEqual(breakpoints);
22
+ });
23
+ it('should sort the order of breakpoints', () => {
24
+ const breakpoints = {
25
+ md: 200,
26
+ sm: 0,
27
+ lg: 300,
28
+ xl: 500
29
+ };
30
+ expect(sortAndValidateBreakpoints(breakpoints)).toEqual({
31
+ sm: 0,
32
+ md: 200,
33
+ lg: 300,
34
+ xl: 500
35
+ });
36
+ });
37
+ it('should throw errors for duplicated values', () => {
38
+ const breakpoints = {
39
+ md: 200,
40
+ sm: 0,
41
+ lg: 300,
42
+ xl: 300
43
+ };
44
+ expect(() => sortAndValidateBreakpoints(breakpoints)).toThrow();
45
+ });
46
+ });
47
+ describe('getBreakpointFromScreenWidth', () => {
48
+ it('should return correct breakpoints based on screen width', () => {
49
+ const breakpoints = {
50
+ xs: 0,
51
+ sm: 300,
52
+ md: 500,
53
+ xl: 1200
54
+ };
55
+ expect(getBreakpointFromScreenWidth(0, breakpoints)).toEqual('xs');
56
+ expect(getBreakpointFromScreenWidth(20, breakpoints)).toEqual('xs');
57
+ expect(getBreakpointFromScreenWidth(100, breakpoints)).toEqual('xs');
58
+ expect(getBreakpointFromScreenWidth(101, breakpoints)).toEqual('xs');
59
+ expect(getBreakpointFromScreenWidth(250, breakpoints)).toEqual('xs');
60
+ expect(getBreakpointFromScreenWidth(300, breakpoints)).toEqual('sm');
61
+ expect(getBreakpointFromScreenWidth(499, breakpoints)).toEqual('sm');
62
+ expect(getBreakpointFromScreenWidth(500, breakpoints)).toEqual('md');
63
+ expect(getBreakpointFromScreenWidth(799, breakpoints)).toEqual('md');
64
+ expect(getBreakpointFromScreenWidth(1200, breakpoints)).toEqual('xl');
65
+ expect(getBreakpointFromScreenWidth(2000, breakpoints)).toEqual('xl');
66
+ });
67
+ });
68
+ describe('getValueForBreakpoint', () => {
69
+ it('should prioritize custom media query', () => {
70
+ const breakpoint = 'sm';
71
+ const breakpoints = {
72
+ xs: 0,
73
+ sm: 200,
74
+ md: 500
75
+ };
76
+ const style = {
77
+ ':w[, 200]': 'green',
78
+ ':w[201]': 'orange',
79
+ sm: 'pink'
80
+ };
81
+ const screenSize = {
82
+ width: 200,
83
+ height: 800
84
+ };
85
+ expect(getValueForBreakpoint(style, breakpoint, screenSize, breakpoints)).toEqual('green');
86
+ });
87
+ });
88
+ it('should match breakpoint if media query doesnt exist', () => {
89
+ const breakpoint = 'md';
90
+ const breakpoints = {
91
+ xs: 0,
92
+ sm: 200,
93
+ md: 500
94
+ };
95
+ const style = {
96
+ ':w[, 200]': 'green',
97
+ ':w[201, 499]': 'orange',
98
+ sm: 'pink',
99
+ md: 'red'
100
+ };
101
+ const screenSize = {
102
+ width: 500,
103
+ height: 1200
104
+ };
105
+ expect(getValueForBreakpoint(style, breakpoint, screenSize, breakpoints)).toEqual('red');
106
+ });
107
+ it('should match breakpoint even if value is undefined', () => {
108
+ const breakpoint = 'md';
109
+ const breakpoints = {
110
+ xs: 0,
111
+ sm: 200,
112
+ md: 500
113
+ };
114
+ const style = {
115
+ ':w[, 200]': 'green',
116
+ ':w[201, 499]': 'orange',
117
+ sm: 'pink',
118
+ md: undefined
119
+ };
120
+ const screenSize = {
121
+ width: 500,
122
+ height: 1200
123
+ };
124
+ expect(getValueForBreakpoint(style, breakpoint, screenSize, breakpoints)).toEqual(undefined);
125
+ });
126
+ it('should match lower breakpoint to match css cascading', () => {
127
+ const breakpoint = 'xl';
128
+ const breakpoints = {
129
+ xs: 0,
130
+ sm: 200,
131
+ md: 500,
132
+ xl: 600
133
+ };
134
+ const style = {
135
+ ':w[, 200]': 'green',
136
+ ':w[201, 499]': 'orange',
137
+ sm: 'pink',
138
+ md: 'red'
139
+ };
140
+ const screenSize = {
141
+ width: 500,
142
+ height: 1200
143
+ };
144
+ expect(getValueForBreakpoint(style, breakpoint, screenSize, breakpoints)).toEqual('red');
145
+ });
146
+ });
147
+ //# sourceMappingURL=breakpoints.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getBreakpointFromScreenWidth","getValueForBreakpoint","sortAndValidateBreakpoints","describe","it","breakpoints","expect","toThrow","sm","md","lg","xl","toEqual","xs","breakpoint","style","screenSize","width","height","undefined"],"sourceRoot":"../../../src","sources":["utils/breakpoints.spec.ts"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export const throwError = message => {
2
+ throw new Error(`🦄 [react-native-unistyles]: ${message}`);
3
+ };
4
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["throwError","message","Error"],"sourceRoot":"../../../src","sources":["utils/common.ts"],"mappings":"AAAA,OAAO,MAAMA,UAAU,GAAIC,OAAe,IAAK;EAC3C,MAAM,IAAIC,KAAK,CAAE,gCAA+BD,OAAQ,EAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getBreakpointFromScreenWidth, sortAndValidateBreakpoints } from './breakpoints';
2
+ export { proxifyFunction, parseStyle } from './styles';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getBreakpointFromScreenWidth","sortAndValidateBreakpoints","proxifyFunction","parseStyle"],"sourceRoot":"../../../src","sources":["utils/index.ts"],"mappings":"AAAA,SAASA,4BAA4B,EAAEC,0BAA0B,QAAQ,eAAe;AACxF,SAASC,eAAe,EAAEC,UAAU,QAAQ,UAAU"}