react-native-unistyles 2.0.0-alpha.16 → 2.0.0-alpha.18
Sign up to get free protection for your applications and to get access to all the features.
- package/cxx/UnistylesRuntime.h +3 -3
- package/lib/commonjs/common.js +11 -10
- package/lib/commonjs/common.js.map +1 -1
- package/lib/commonjs/core/UnistyleRegistry.js +17 -4
- package/lib/commonjs/core/UnistyleRegistry.js.map +1 -1
- package/lib/commonjs/core/UnistylesRuntime.js +4 -1
- package/lib/commonjs/core/UnistylesRuntime.js.map +1 -1
- package/lib/commonjs/hooks/useVariants.js +1 -11
- package/lib/commonjs/hooks/useVariants.js.map +1 -1
- package/lib/commonjs/plugins/index.js +0 -7
- package/lib/commonjs/plugins/index.js.map +1 -1
- package/lib/commonjs/useStyles.js +4 -12
- package/lib/commonjs/useStyles.js.map +1 -1
- package/lib/commonjs/utils/breakpoints.js.map +1 -1
- package/lib/commonjs/utils/index.js +7 -0
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/mqParser.js.map +1 -1
- package/lib/commonjs/utils/styles.js +26 -18
- package/lib/commonjs/utils/styles.js.map +1 -1
- package/lib/commonjs/utils/withPlugins.js +15 -0
- package/lib/commonjs/utils/withPlugins.js.map +1 -0
- package/lib/module/common.js +11 -10
- package/lib/module/common.js.map +1 -1
- package/lib/module/core/UnistyleRegistry.js +17 -4
- package/lib/module/core/UnistyleRegistry.js.map +1 -1
- package/lib/module/core/UnistylesRuntime.js +4 -1
- package/lib/module/core/UnistylesRuntime.js.map +1 -1
- package/lib/module/hooks/useVariants.js +1 -11
- package/lib/module/hooks/useVariants.js.map +1 -1
- package/lib/module/plugins/index.js +0 -1
- package/lib/module/plugins/index.js.map +1 -1
- package/lib/module/useStyles.js +5 -13
- package/lib/module/useStyles.js.map +1 -1
- package/lib/module/utils/breakpoints.js.map +1 -1
- package/lib/module/utils/index.js +1 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/mqParser.js.map +1 -1
- package/lib/module/utils/styles.js +26 -18
- package/lib/module/utils/styles.js.map +1 -1
- package/lib/module/utils/withPlugins.js +8 -0
- package/lib/module/utils/withPlugins.js.map +1 -0
- package/lib/typescript/src/common.d.ts +11 -10
- package/lib/typescript/src/common.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistyleRegistry.d.ts +39 -3
- package/lib/typescript/src/core/UnistyleRegistry.d.ts.map +1 -1
- package/lib/typescript/src/core/UnistylesRuntime.d.ts +1 -1
- package/lib/typescript/src/core/UnistylesRuntime.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useVariants.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +48 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/plugins/index.d.ts +0 -1
- package/lib/typescript/src/plugins/index.d.ts.map +1 -1
- package/lib/typescript/src/types/breakpoints.d.ts +2 -1
- package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/types/core.d.ts +2 -3
- package/lib/typescript/src/types/core.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +2 -2
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/stylesheet.d.ts +5 -5
- package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
- package/lib/typescript/src/useStyles.d.ts.map +1 -1
- package/lib/typescript/src/utils/breakpoints.d.ts +2 -2
- package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/utils/index.d.ts +1 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/mqParser.d.ts +2 -2
- package/lib/typescript/src/utils/mqParser.d.ts.map +1 -1
- package/lib/typescript/src/utils/styles.d.ts +3 -4
- package/lib/typescript/src/utils/styles.d.ts.map +1 -1
- package/lib/typescript/src/utils/withPlugins.d.ts +3 -0
- package/lib/typescript/src/utils/withPlugins.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/common.ts +11 -10
- package/src/core/UnistyleRegistry.ts +19 -4
- package/src/core/UnistylesRuntime.ts +5 -1
- package/src/hooks/useVariants.ts +1 -14
- package/src/plugins/index.ts +0 -1
- package/src/types/breakpoints.ts +4 -1
- package/src/types/core.ts +2 -3
- package/src/types/index.ts +1 -2
- package/src/types/stylesheet.ts +5 -5
- package/src/useStyles.ts +8 -30
- package/src/utils/breakpoints.ts +3 -3
- package/src/utils/index.ts +1 -0
- package/src/utils/mqParser.ts +2 -2
- package/src/utils/styles.ts +40 -49
- package/src/utils/withPlugins.ts +13 -0
- package/lib/commonjs/plugins/withPlugins.js +0 -14
- package/lib/commonjs/plugins/withPlugins.js.map +0 -1
- package/lib/commonjs/utils/variants.js +0 -52
- package/lib/commonjs/utils/variants.js.map +0 -1
- package/lib/module/plugins/withPlugins.js +0 -7
- package/lib/module/plugins/withPlugins.js.map +0 -1
- package/lib/module/utils/variants.js +0 -45
- package/lib/module/utils/variants.js.map +0 -1
- package/lib/typescript/src/plugins/withPlugins.d.ts +0 -4
- package/lib/typescript/src/plugins/withPlugins.d.ts.map +0 -1
- package/lib/typescript/src/utils/variants.d.ts +0 -3
- package/lib/typescript/src/utils/variants.d.ts.map +0 -1
- package/src/plugins/withPlugins.ts +0 -15
- package/src/utils/variants.ts +0 -61
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAW,MAAM,UAAU,CAAA;AAK1D,eAAO,MAAM,eAAe,QACnB,MAAM,MACP,QAAQ,YACF,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,KAC3C,QAED,CAAA;AAEF,eAAO,MAAM,eAAe,8BAA6B,OAMxD,CAAA;AAED,eAAO,MAAM,UAAU,0CAEV,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,MAyC9B,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"withPlugins.d.ts","sourceRoot":"","sources":["../../../../src/utils/withPlugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGvC,eAAO,MAAM,WAAW,QACf,MAAM,SACJ,OAAO,YAOT,CAAA"}
|
package/package.json
CHANGED
package/src/common.ts
CHANGED
@@ -4,10 +4,10 @@ export const warn = (message: string) => {
|
|
4
4
|
console.warn(`🦄 [react-native-unistyles]: ${message}`)
|
5
5
|
}
|
6
6
|
|
7
|
-
export const isMobile = Platform.OS === 'android' || Platform.OS === 'ios'
|
8
7
|
export const isWeb = Platform.OS === 'web'
|
9
8
|
export const isIOS = Platform.OS === 'ios'
|
10
9
|
export const isAndroid = Platform.OS === 'android'
|
10
|
+
export const isMobile = isIOS || isAndroid
|
11
11
|
export const isServer = typeof window === 'undefined'
|
12
12
|
|
13
13
|
export const ScreenOrientation = {
|
@@ -22,13 +22,14 @@ export enum UnistylesEventType {
|
|
22
22
|
}
|
23
23
|
|
24
24
|
export enum UnistylesError {
|
25
|
-
RuntimeUnavailable = 'Unistyles runtime is not available. Make sure you followed the installation instructions
|
26
|
-
ThemeNotFound = 'You are trying to get a theme that is not registered
|
27
|
-
ThemeNotRegistered = 'You are trying to set a theme that
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
RuntimeUnavailable = 'Unistyles runtime is not available. Make sure you followed the installation instructions',
|
26
|
+
ThemeNotFound = 'You are trying to get a theme that is not registered with UnistylesRegistry',
|
27
|
+
ThemeNotRegistered = 'You are trying to set a theme that was not registered with UnistylesRegistry',
|
28
|
+
ThemeNotSelected = 'Your themes are registered, but you didn\'t select the initial theme',
|
29
|
+
ThemesCannotBeEmpty = 'You are trying to register empty themes object',
|
30
|
+
BreakpointsCannotBeEmpty = 'You are trying to register empty breakpoints object',
|
31
|
+
BreakpointsMustStartFromZero = 'You are trying to register breakpoints that don\'t start from 0',
|
32
|
+
InvalidPluginName = 'Plugin name can\'t start from reserved prefix __unistyles',
|
33
|
+
DuplicatePluginName = 'You are trying to register a plugin with a name that is already registered',
|
34
|
+
CantRemoveInternalPlugin = 'You are trying to remove an internal unistyles plugin'
|
34
35
|
}
|
@@ -23,7 +23,10 @@ export class UnistyleRegistry {
|
|
23
23
|
this.unistylesBridge.themes = keys
|
24
24
|
this.themeNames = keys
|
25
25
|
|
26
|
-
return
|
26
|
+
return {
|
27
|
+
addBreakpoints: this.addBreakpoints,
|
28
|
+
addConfig: this.addConfig
|
29
|
+
}
|
27
30
|
}
|
28
31
|
|
29
32
|
public addBreakpoints = (breakpoints: UnistylesBreakpoints) => {
|
@@ -31,7 +34,10 @@ export class UnistyleRegistry {
|
|
31
34
|
this.unistylesBridge.useBreakpoints(breakpoints)
|
32
35
|
this.sortedBreakpointPairs = this.unistylesBridge.sortedBreakpointPairs
|
33
36
|
|
34
|
-
return
|
37
|
+
return {
|
38
|
+
addThemes: this.addThemes,
|
39
|
+
addConfig: this.addConfig
|
40
|
+
}
|
35
41
|
}
|
36
42
|
|
37
43
|
public addConfig = (config: UnistylesConfig) => {
|
@@ -48,6 +54,11 @@ export class UnistyleRegistry {
|
|
48
54
|
if (config.initialTheme) {
|
49
55
|
this.unistylesBridge.useTheme(config.initialTheme)
|
50
56
|
}
|
57
|
+
|
58
|
+
return {
|
59
|
+
addBreakpoints: this.addBreakpoints,
|
60
|
+
addThemes: this.addThemes
|
61
|
+
}
|
51
62
|
}
|
52
63
|
|
53
64
|
public getTheme = (forName: keyof UnistylesThemes) => {
|
@@ -55,11 +66,15 @@ export class UnistyleRegistry {
|
|
55
66
|
return {} as UnistylesThemes[keyof UnistylesThemes]
|
56
67
|
}
|
57
68
|
|
58
|
-
if (
|
69
|
+
if (this.hasTheme(forName)) {
|
70
|
+
return this.themes[forName]
|
71
|
+
}
|
72
|
+
|
73
|
+
if (this.unistylesBridge.themeName) {
|
59
74
|
throw new Error(UnistylesError.ThemeNotFound)
|
60
75
|
}
|
61
76
|
|
62
|
-
|
77
|
+
throw new Error(UnistylesError.ThemeNotSelected)
|
63
78
|
}
|
64
79
|
|
65
80
|
public addPlugin = (plugin: UnistylesPlugin, notify: boolean = true) => {
|
@@ -44,7 +44,11 @@ export class UnistylesRuntime {
|
|
44
44
|
}
|
45
45
|
|
46
46
|
public setTheme = (name: keyof UnistylesThemes) => {
|
47
|
-
if (name
|
47
|
+
if (name === this.themeName) {
|
48
|
+
return
|
49
|
+
}
|
50
|
+
|
51
|
+
if (this.unistylesRegistry.hasTheme(name)) {
|
48
52
|
this.unistylesBridge.useTheme(name)
|
49
53
|
|
50
54
|
return true
|
package/src/hooks/useVariants.ts
CHANGED
@@ -1,23 +1,10 @@
|
|
1
1
|
import { useRef } from 'react'
|
2
2
|
import type { Optional } from '../types'
|
3
3
|
|
4
|
-
const compareVariants = (prevVariants?: Record<string, Optional<string>>, nextVariants?: Record<string, Optional<string>>) => {
|
5
|
-
const keysA = Object.keys(prevVariants ?? {})
|
6
|
-
const keysB = Object.keys(nextVariants ?? {})
|
7
|
-
|
8
|
-
if (keysA.length !== keysB.length) {
|
9
|
-
return false
|
10
|
-
}
|
11
|
-
|
12
|
-
return keysA.every(key => prevVariants![key] === (nextVariants ?? {})[key])
|
13
|
-
}
|
14
|
-
|
15
4
|
export const useVariants = (variantsMap?: Record<string, Optional<string>>) => {
|
16
5
|
const variantsRef = useRef<Optional<Record<string, Optional<string>>>>(variantsMap)
|
17
6
|
|
18
|
-
|
19
|
-
variantsRef.current = variantsMap
|
20
|
-
}
|
7
|
+
variantsRef.current = variantsMap
|
21
8
|
|
22
9
|
return variantsRef.current
|
23
10
|
}
|
package/src/plugins/index.ts
CHANGED
package/src/types/breakpoints.ts
CHANGED
@@ -45,10 +45,13 @@ type FlattenVariants<T> = T extends object
|
|
45
45
|
|
46
46
|
type ParseVariants<T> = T extends object
|
47
47
|
? T[keyof T] extends object
|
48
|
-
? ParseVariants<T[keyof T]
|
48
|
+
? UnionToIntersection<ParseVariants<T[keyof T]>>
|
49
49
|
: T
|
50
50
|
: T
|
51
51
|
|
52
|
+
type UnionToIntersection<U> =
|
53
|
+
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
|
54
|
+
|
52
55
|
type ParseStyleKeys<T> = T extends object
|
53
56
|
? { [K in keyof T]: ParseNestedObject<T[K]> }
|
54
57
|
: never
|
package/src/types/core.ts
CHANGED
@@ -41,9 +41,8 @@ export type ScreenSize = {
|
|
41
41
|
height: number
|
42
42
|
}
|
43
43
|
|
44
|
-
export type RNStyle = ViewStyle
|
45
|
-
export type RNValue =
|
44
|
+
export type RNStyle = ViewStyle & TextStyle & ImageStyle
|
45
|
+
export type RNValue = ViewStyle[keyof ViewStyle] | TextStyle[keyof TextStyle] | ImageStyle[keyof ImageStyle]
|
46
46
|
export type NestedStyle = Record<keyof UnistylesBreakpoints | symbol, RNValue>
|
47
47
|
export type NestedStylePairs = Array<[keyof UnistylesBreakpoints | symbol, RNValue]>
|
48
48
|
export type UnistylesTheme = UnistylesThemes[keyof UnistylesThemes]
|
49
|
-
export type CreateStylesFactory<ST> = (theme: UnistylesTheme) => ST
|
package/src/types/index.ts
CHANGED
@@ -4,13 +4,12 @@ export type { Optional, Nullable } from './common'
|
|
4
4
|
export type {
|
5
5
|
NestedStylePairs,
|
6
6
|
UnistylesTheme,
|
7
|
-
CreateStylesFactory,
|
8
7
|
ScreenSize,
|
9
8
|
NestedStyle,
|
10
9
|
RNValue,
|
11
10
|
RNStyle
|
12
11
|
} from './core'
|
13
|
-
export type { StyleSheetWithSuperPowers, StyleSheet } from './stylesheet'
|
12
|
+
export type { StyleSheetWithSuperPowers, StyleSheet, AllAvailableKeys } from './stylesheet'
|
14
13
|
export type { ReactNativeStyleSheet } from './breakpoints'
|
15
14
|
export type { ExtractVariantNames } from './variants'
|
16
15
|
export type { UnistylesPlugin } from './plugin'
|
package/src/types/stylesheet.ts
CHANGED
@@ -3,11 +3,11 @@ import type { ShadowOffset, TransformStyles, UnistylesTheme } from './core'
|
|
3
3
|
import type { UnistylesBreakpoints } from '../global'
|
4
4
|
|
5
5
|
// these props are treated differently to nest breakpoints and media queries
|
6
|
-
type
|
6
|
+
type NestedKeys = 'shadowOffset' | 'transform' | 'textShadowOffset'
|
7
7
|
|
8
|
-
type UnistyleView = Omit<ViewStyle,
|
9
|
-
type UnistyleText = Omit<TextStyle,
|
10
|
-
type UnistyleImage = Omit<ImageStyle,
|
8
|
+
type UnistyleView = Omit<ViewStyle, NestedKeys>
|
9
|
+
type UnistyleText = Omit<TextStyle, NestedKeys>
|
10
|
+
type UnistyleImage = Omit<ImageStyle, NestedKeys>
|
11
11
|
|
12
12
|
type UnistyleNestedStyles = {
|
13
13
|
shadowOffset?: ToDeepUnistyles<ShadowOffset>,
|
@@ -39,7 +39,7 @@ export type UnistylesValues = {
|
|
39
39
|
[key in BreakpointsOrMediaQueries]?: AllAvailableStyles[propName]
|
40
40
|
}
|
41
41
|
} & Variants & {
|
42
|
-
[propName in
|
42
|
+
[propName in NestedKeys]?: UnistyleNestedStyles[propName]
|
43
43
|
}
|
44
44
|
|
45
45
|
export type StyleSheet = {
|
package/src/useStyles.ts
CHANGED
@@ -1,15 +1,9 @@
|
|
1
1
|
import { useMemo } from 'react'
|
2
2
|
import { StyleSheet } from 'react-native'
|
3
|
-
import { parseStyle, proxifyFunction } from './utils'
|
3
|
+
import { parseStyle, proxifyFunction, withPlugins } from './utils'
|
4
4
|
import { useUnistyles, useVariants } from './hooks'
|
5
5
|
import type { UnistylesBreakpoints } from './global'
|
6
|
-
import {
|
7
|
-
import type {
|
8
|
-
ExtractVariantNames,
|
9
|
-
ReactNativeStyleSheet,
|
10
|
-
StyleSheetWithSuperPowers,
|
11
|
-
UnistylesTheme
|
12
|
-
} from './types'
|
6
|
+
import type { ExtractVariantNames, ReactNativeStyleSheet, StyleSheetWithSuperPowers, UnistylesTheme } from './types'
|
13
7
|
|
14
8
|
type ParsedStylesheet<ST extends StyleSheetWithSuperPowers> = {
|
15
9
|
theme: UnistylesTheme,
|
@@ -22,47 +16,31 @@ export const useStyles = <ST extends StyleSheetWithSuperPowers>(
|
|
22
16
|
variantsMap?: ExtractVariantNames<typeof stylesheet>
|
23
17
|
): ParsedStylesheet<ST> => {
|
24
18
|
const { theme, layout, plugins } = useUnistyles()
|
25
|
-
|
26
|
-
if (!stylesheet) {
|
27
|
-
return {
|
28
|
-
theme,
|
29
|
-
breakpoint: layout.breakpoint,
|
30
|
-
styles: {} as ReactNativeStyleSheet<ST>
|
31
|
-
}
|
32
|
-
}
|
33
|
-
|
34
19
|
const variants = useVariants(variantsMap)
|
35
20
|
const parsedStyles = useMemo(() => typeof stylesheet === 'function'
|
36
21
|
? stylesheet(theme)
|
37
22
|
: stylesheet, [theme, stylesheet, layout])
|
38
23
|
|
39
24
|
const dynamicStyleSheet = useMemo(() => Object
|
40
|
-
.entries(parsedStyles)
|
25
|
+
.entries(parsedStyles || {})
|
41
26
|
.reduce((acc, [key, value]) => {
|
42
27
|
if (typeof value === 'function') {
|
43
28
|
return {
|
44
29
|
...acc,
|
45
|
-
[key]: proxifyFunction(key, value
|
30
|
+
[key]: proxifyFunction(key, value)
|
46
31
|
}
|
47
32
|
}
|
48
33
|
|
49
34
|
return StyleSheet.create({
|
50
35
|
...acc,
|
51
|
-
[key]: parseStyle(
|
52
|
-
key,
|
53
|
-
value,
|
54
|
-
unistyles.registry.plugins,
|
55
|
-
unistyles.runtime,
|
56
|
-
variants
|
57
|
-
)
|
36
|
+
[key]: withPlugins(key, parseStyle(value, variants))
|
58
37
|
})
|
59
|
-
}, {}),
|
60
|
-
|
61
|
-
) as ReactNativeStyleSheet<ST>
|
38
|
+
}, {}), [parsedStyles, variants, plugins]
|
39
|
+
)
|
62
40
|
|
63
41
|
return {
|
64
42
|
theme,
|
65
43
|
breakpoint: layout.breakpoint,
|
66
|
-
styles: dynamicStyleSheet
|
44
|
+
styles: dynamicStyleSheet as ReactNativeStyleSheet<ST>
|
67
45
|
}
|
68
46
|
}
|
package/src/utils/breakpoints.ts
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
import { unistyles } from '../core'
|
2
|
-
import type {
|
2
|
+
import type { Optional, RNValue } from '../types'
|
3
3
|
import type { UnistylesBreakpoints } from '../global'
|
4
4
|
import { ScreenOrientation, isMobile } from '../common'
|
5
5
|
import { getKeyForUnistylesMediaQuery } from './mqParser'
|
6
6
|
|
7
|
-
export const getValueForBreakpoint = (value:
|
7
|
+
export const getValueForBreakpoint = (value: Record<string, RNValue>): Optional<RNValue> => {
|
8
8
|
const customMediaQueryKey = getKeyForUnistylesMediaQuery(
|
9
|
-
Object.entries(value)
|
9
|
+
Object.entries(value),
|
10
10
|
unistyles.runtime.screen
|
11
11
|
) as keyof typeof value
|
12
12
|
|
package/src/utils/index.ts
CHANGED
@@ -2,3 +2,4 @@ export { mq } from './mq'
|
|
2
2
|
export { getKeyForUnistylesMediaQuery, isWithinTheWidthAndHeight, isValidMq, parseMq } from './mqParser'
|
3
3
|
export { getValueForBreakpoint } from './breakpoints'
|
4
4
|
export { proxifyFunction, parseStyle } from './styles'
|
5
|
+
export { withPlugins } from './withPlugins'
|
package/src/utils/mqParser.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import type {
|
1
|
+
import type { Optional, RNValue, ScreenSize } from '../types'
|
2
2
|
|
3
3
|
const IS_UNISTYLES_REGEX = /:([hw])\[(\d+)(?:,\s*(\d+|Infinity))?]/
|
4
4
|
const UNISTYLES_WIDTH_REGEX = /:(w)\[(\d+)(?:,\s*(\d+|Infinity))?]/
|
@@ -80,7 +80,7 @@ const isWithinTheHeight = (height: UnistylesParsedMq['height'], screenHeight: nu
|
|
80
80
|
return screenHeight >= from && screenHeight <= to
|
81
81
|
}
|
82
82
|
|
83
|
-
export const getKeyForUnistylesMediaQuery = (mediaQueries:
|
83
|
+
export const getKeyForUnistylesMediaQuery = (mediaQueries: Array<[string, RNValue]>, screenSize: ScreenSize): Optional<string> => {
|
84
84
|
const mq = mediaQueries.find(([key]) => {
|
85
85
|
if (!isUnistylesMq(key as string)) {
|
86
86
|
return false
|
package/src/utils/styles.ts
CHANGED
@@ -1,19 +1,14 @@
|
|
1
|
-
import type {
|
1
|
+
import type { Optional, RNStyle, RNValue } from '../types'
|
2
2
|
import { getValueForBreakpoint } from './breakpoints'
|
3
|
-
import type { UnistylesRuntime } from '../core'
|
4
3
|
import { isAndroid, isIOS } from '../common'
|
5
|
-
import {
|
6
|
-
import { withPlugins } from '../plugins'
|
4
|
+
import { withPlugins } from './withPlugins'
|
7
5
|
|
8
6
|
export const proxifyFunction = (
|
9
7
|
key: string,
|
10
8
|
fn: Function,
|
11
|
-
plugins: Array<UnistylesPlugin>,
|
12
|
-
runtime: UnistylesRuntime,
|
13
9
|
variant?: Record<string, Optional<string>>
|
14
10
|
): Function => new Proxy(fn, {
|
15
|
-
apply: (target, thisArg, argumentsList) =>
|
16
|
-
parseStyle(key, target.apply(thisArg, argumentsList), plugins, runtime, variant)
|
11
|
+
apply: (target, thisArg, argumentsList) => withPlugins(key, parseStyle(target.apply(thisArg, argumentsList), variant))
|
17
12
|
})
|
18
13
|
|
19
14
|
export const isPlatformColor = <T extends {}>(value: T): boolean => {
|
@@ -24,51 +19,47 @@ export const isPlatformColor = <T extends {}>(value: T): boolean => {
|
|
24
19
|
return isAndroid && 'resource_paths' in value && typeof value.resource_paths === 'object'
|
25
20
|
}
|
26
21
|
|
27
|
-
export const parseStyle = <T extends
|
28
|
-
key: string,
|
22
|
+
export const parseStyle = <T extends RNStyle>(
|
29
23
|
style: T,
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
)
|
34
|
-
|
35
|
-
|
24
|
+
variant: Record<string, Optional<string>> = {}
|
25
|
+
): T => Object
|
26
|
+
.entries(style || {})
|
27
|
+
.reduce((acc, [key, value]) => {
|
28
|
+
// nested objects
|
29
|
+
if (key === 'shadowOffset' || key === 'textShadowOffset') {
|
30
|
+
acc[key] = parseStyle(value, variant)
|
36
31
|
|
37
|
-
|
38
|
-
|
39
|
-
.map(([key, value]) => {
|
40
|
-
// dynamic functions
|
41
|
-
if (typeof value === 'function') {
|
42
|
-
return [key, value]
|
43
|
-
}
|
32
|
+
return acc
|
33
|
+
}
|
44
34
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
key,
|
49
|
-
parseStyle(key, value, plugins, runtime, variant)
|
50
|
-
]
|
51
|
-
}
|
35
|
+
// transforms
|
36
|
+
if (key === 'transform' && Array.isArray(value)) {
|
37
|
+
acc[key] = value.map(value => parseStyle(value, variant))
|
52
38
|
|
53
|
-
|
54
|
-
|
55
|
-
return [
|
56
|
-
key,
|
57
|
-
value.map(value => parseStyle(key, value, plugins, runtime, variant))
|
58
|
-
]
|
59
|
-
}
|
39
|
+
return acc
|
40
|
+
}
|
60
41
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
}
|
42
|
+
// values or platform colors
|
43
|
+
if (typeof value !== 'object' || isPlatformColor(value)) {
|
44
|
+
acc[key as keyof T] = value
|
65
45
|
|
66
|
-
|
67
|
-
|
68
|
-
getValueForBreakpoint(value as NestedStyle)
|
69
|
-
]
|
70
|
-
})
|
71
|
-
) as T
|
46
|
+
return acc
|
47
|
+
}
|
72
48
|
|
73
|
-
|
74
|
-
|
49
|
+
if (key === 'variants') {
|
50
|
+
return {
|
51
|
+
...acc,
|
52
|
+
...(Object
|
53
|
+
.keys(value) as Array<keyof typeof value>)
|
54
|
+
.reduce((acc, key) => ({
|
55
|
+
...acc,
|
56
|
+
...parseStyle((value)[key][variant[key as keyof typeof variant] || 'default'] ?? {})
|
57
|
+
}), {})
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
return {
|
62
|
+
...acc,
|
63
|
+
[key]: getValueForBreakpoint(value as Record<string, RNValue>)
|
64
|
+
}
|
65
|
+
}, {} as T)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import type { RNStyle } from '../types'
|
2
|
+
import { unistyles } from '../core'
|
3
|
+
|
4
|
+
export const withPlugins = (
|
5
|
+
key: string,
|
6
|
+
style: RNStyle
|
7
|
+
) => unistyles.registry.plugins.reduce((acc, plugin) => {
|
8
|
+
if (plugin.onParsedStyle) {
|
9
|
+
return plugin.onParsedStyle(key, style, unistyles.runtime)
|
10
|
+
}
|
11
|
+
|
12
|
+
return acc
|
13
|
+
}, style)
|
@@ -1,14 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.withPlugins = void 0;
|
7
|
-
const withPlugins = (key, style, plugins, runtime) => plugins.reduce((acc, plugin) => {
|
8
|
-
if (plugin.onParsedStyle) {
|
9
|
-
return plugin.onParsedStyle(key, acc, runtime);
|
10
|
-
}
|
11
|
-
return acc;
|
12
|
-
}, style);
|
13
|
-
exports.withPlugins = withPlugins;
|
14
|
-
//# sourceMappingURL=withPlugins.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["withPlugins","key","style","plugins","runtime","reduce","acc","plugin","onParsedStyle","exports"],"sourceRoot":"../../../src","sources":["plugins/withPlugins.ts"],"mappings":";;;;;;AAGO,MAAMA,WAAW,GAAGA,CACvBC,GAAW,EACXC,KAAc,EACdC,OAA+B,EAC/BC,OAAyB,KACxBD,OAAO,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEC,MAAM,KAAK;EACjC,IAAIA,MAAM,CAACC,aAAa,EAAE;IACtB,OAAOD,MAAM,CAACC,aAAa,CAACP,GAAG,EAAEK,GAAG,EAAEF,OAAO,CAAC;EAClD;EAEA,OAAOE,GAAG;AACd,CAAC,EAAEJ,KAAK,CAAC;AAAAO,OAAA,CAAAT,WAAA,GAAAA,WAAA"}
|
@@ -1,52 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.getStyleWithVariants = void 0;
|
7
|
-
const getKeysForVariants = (value, variants) => {
|
8
|
-
// case for no specified variants by user, we should fallback to 'default'
|
9
|
-
if (!variants.length) {
|
10
|
-
return Object.entries(value).map(_ref => {
|
11
|
-
let [key, value] = _ref;
|
12
|
-
if ('default' in value) {
|
13
|
-
return [key, 'default'];
|
14
|
-
}
|
15
|
-
return undefined;
|
16
|
-
}).filter(Boolean);
|
17
|
-
}
|
18
|
-
return variants.map(_ref2 => {
|
19
|
-
let [variantKey, variantValue] = _ref2;
|
20
|
-
const variantStyle = value[variantKey];
|
21
|
-
if (variantStyle && variantValue && variantValue in variantStyle) {
|
22
|
-
return [variantKey, variantValue];
|
23
|
-
}
|
24
|
-
if (variantStyle && 'default' in variantStyle) {
|
25
|
-
return [variantKey, 'default'];
|
26
|
-
}
|
27
|
-
return undefined;
|
28
|
-
}).filter(Boolean);
|
29
|
-
};
|
30
|
-
const getStyleWithVariants = (style, variantValues) => {
|
31
|
-
if (!('variants' in style)) {
|
32
|
-
return style;
|
33
|
-
}
|
34
|
-
const keys = getKeysForVariants(style.variants, Object.entries(variantValues || {}));
|
35
|
-
const variantsValues = keys.map(_ref3 => {
|
36
|
-
let [key, nestedKey] = _ref3;
|
37
|
-
return style.variants[key][nestedKey];
|
38
|
-
}).reduce((acc, styles) => ({
|
39
|
-
...acc,
|
40
|
-
...styles
|
41
|
-
}), {});
|
42
|
-
const {
|
43
|
-
variants,
|
44
|
-
...otherStyles
|
45
|
-
} = style;
|
46
|
-
return {
|
47
|
-
...otherStyles,
|
48
|
-
...variantsValues
|
49
|
-
};
|
50
|
-
};
|
51
|
-
exports.getStyleWithVariants = getStyleWithVariants;
|
52
|
-
//# sourceMappingURL=variants.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["getKeysForVariants","value","variants","length","Object","entries","map","_ref","key","undefined","filter","Boolean","_ref2","variantKey","variantValue","variantStyle","getStyleWithVariants","style","variantValues","keys","variantsValues","_ref3","nestedKey","reduce","acc","styles","otherStyles","exports"],"sourceRoot":"../../../src","sources":["utils/variants.ts"],"mappings":";;;;;;AAEA,MAAMA,kBAAkB,GAAGA,CACvBC,KAAkC,EAClCC,QAA2C,KACjB;EAC1B;EACA,IAAI,CAACA,QAAQ,CAACC,MAAM,EAAE;IAClB,OAAOC,MAAM,CACRC,OAAO,CAACJ,KAAK,CAAC,CACdK,GAAG,CAACC,IAAA,IAAkB;MAAA,IAAjB,CAACC,GAAG,EAAEP,KAAK,CAAC,GAAAM,IAAA;MACd,IAAI,SAAS,IAAIN,KAAK,EAAE;QACpB,OAAO,CAACO,GAAG,EAAE,SAAS,CAAC;MAC3B;MAEA,OAAOC,SAAS;IACpB,CAAC,CAAC,CACDC,MAAM,CAACC,OAAO,CAAC;EACxB;EAEA,OAAOT,QAAQ,CACVI,GAAG,CAACM,KAAA,IAAgC;IAAA,IAA/B,CAACC,UAAU,EAAEC,YAAY,CAAC,GAAAF,KAAA;IAC5B,MAAMG,YAAY,GAAGd,KAAK,CAACY,UAAU,CAAC;IAEtC,IAAIE,YAAY,IAAID,YAAY,IAAIA,YAAY,IAAIC,YAAY,EAAE;MAC9D,OAAO,CAACF,UAAU,EAAEC,YAAY,CAAC;IACrC;IAEA,IAAIC,YAAY,IAAI,SAAS,IAAIA,YAAY,EAAE;MAC3C,OAAO,CAACF,UAAU,EAAE,SAAS,CAAC;IAClC;IAEA,OAAOJ,SAAS;EACpB,CAAC,CAAC,CACDC,MAAM,CAACC,OAAO,CAAC;AACxB,CAAC;AAEM,MAAMK,oBAAoB,GAAGA,CAChCC,KAAiB,EACjBC,aAAgD,KAC/C;EACD,IAAI,EAAE,UAAU,IAAID,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK;EAChB;EAEA,MAAME,IAAI,GAAGnB,kBAAkB,CAC3BiB,KAAK,CAACf,QAAQ,EACdE,MAAM,CAACC,OAAO,CAACa,aAAa,IAAI,CAAC,CAAC,CACtC,CAAC;EAED,MAAME,cAAc,GAAGD,IAAI,CACtBb,GAAG,CAACe,KAAA;IAAA,IAAC,CAACb,GAAG,EAAEc,SAAS,CAAC,GAAAD,KAAA;IAAA,OAAOJ,KAAK,CAACf,QAAQ,CAAiDM,GAAG,CAAC,CAAiCc,SAAS,CAAC;EAAA,EAAC,CAC3IC,MAAM,CAAC,CAACC,GAAG,EAAEC,MAAM,MAAM;IAAE,GAAGD,GAAG;IAAE,GAAGC;EAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAEzD,MAAM;IAAEvB,QAAQ;IAAE,GAAGwB;EAAY,CAAC,GAAGT,KAAK;EAE1C,OAAO;IACH,GAAGS,WAAW;IACd,GAAGN;EACP,CAAC;AACL,CAAC;AAAAO,OAAA,CAAAX,oBAAA,GAAAA,oBAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["withPlugins","key","style","plugins","runtime","reduce","acc","plugin","onParsedStyle"],"sourceRoot":"../../../src","sources":["plugins/withPlugins.ts"],"mappings":"AAGA,OAAO,MAAMA,WAAW,GAAGA,CACvBC,GAAW,EACXC,KAAc,EACdC,OAA+B,EAC/BC,OAAyB,KACxBD,OAAO,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEC,MAAM,KAAK;EACjC,IAAIA,MAAM,CAACC,aAAa,EAAE;IACtB,OAAOD,MAAM,CAACC,aAAa,CAACP,GAAG,EAAEK,GAAG,EAAEF,OAAO,CAAC;EAClD;EAEA,OAAOE,GAAG;AACd,CAAC,EAAEJ,KAAK,CAAC"}
|
@@ -1,45 +0,0 @@
|
|
1
|
-
const getKeysForVariants = (value, variants) => {
|
2
|
-
// case for no specified variants by user, we should fallback to 'default'
|
3
|
-
if (!variants.length) {
|
4
|
-
return Object.entries(value).map(_ref => {
|
5
|
-
let [key, value] = _ref;
|
6
|
-
if ('default' in value) {
|
7
|
-
return [key, 'default'];
|
8
|
-
}
|
9
|
-
return undefined;
|
10
|
-
}).filter(Boolean);
|
11
|
-
}
|
12
|
-
return variants.map(_ref2 => {
|
13
|
-
let [variantKey, variantValue] = _ref2;
|
14
|
-
const variantStyle = value[variantKey];
|
15
|
-
if (variantStyle && variantValue && variantValue in variantStyle) {
|
16
|
-
return [variantKey, variantValue];
|
17
|
-
}
|
18
|
-
if (variantStyle && 'default' in variantStyle) {
|
19
|
-
return [variantKey, 'default'];
|
20
|
-
}
|
21
|
-
return undefined;
|
22
|
-
}).filter(Boolean);
|
23
|
-
};
|
24
|
-
export const getStyleWithVariants = (style, variantValues) => {
|
25
|
-
if (!('variants' in style)) {
|
26
|
-
return style;
|
27
|
-
}
|
28
|
-
const keys = getKeysForVariants(style.variants, Object.entries(variantValues || {}));
|
29
|
-
const variantsValues = keys.map(_ref3 => {
|
30
|
-
let [key, nestedKey] = _ref3;
|
31
|
-
return style.variants[key][nestedKey];
|
32
|
-
}).reduce((acc, styles) => ({
|
33
|
-
...acc,
|
34
|
-
...styles
|
35
|
-
}), {});
|
36
|
-
const {
|
37
|
-
variants,
|
38
|
-
...otherStyles
|
39
|
-
} = style;
|
40
|
-
return {
|
41
|
-
...otherStyles,
|
42
|
-
...variantsValues
|
43
|
-
};
|
44
|
-
};
|
45
|
-
//# sourceMappingURL=variants.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["getKeysForVariants","value","variants","length","Object","entries","map","_ref","key","undefined","filter","Boolean","_ref2","variantKey","variantValue","variantStyle","getStyleWithVariants","style","variantValues","keys","variantsValues","_ref3","nestedKey","reduce","acc","styles","otherStyles"],"sourceRoot":"../../../src","sources":["utils/variants.ts"],"mappings":"AAEA,MAAMA,kBAAkB,GAAGA,CACvBC,KAAkC,EAClCC,QAA2C,KACjB;EAC1B;EACA,IAAI,CAACA,QAAQ,CAACC,MAAM,EAAE;IAClB,OAAOC,MAAM,CACRC,OAAO,CAACJ,KAAK,CAAC,CACdK,GAAG,CAACC,IAAA,IAAkB;MAAA,IAAjB,CAACC,GAAG,EAAEP,KAAK,CAAC,GAAAM,IAAA;MACd,IAAI,SAAS,IAAIN,KAAK,EAAE;QACpB,OAAO,CAACO,GAAG,EAAE,SAAS,CAAC;MAC3B;MAEA,OAAOC,SAAS;IACpB,CAAC,CAAC,CACDC,MAAM,CAACC,OAAO,CAAC;EACxB;EAEA,OAAOT,QAAQ,CACVI,GAAG,CAACM,KAAA,IAAgC;IAAA,IAA/B,CAACC,UAAU,EAAEC,YAAY,CAAC,GAAAF,KAAA;IAC5B,MAAMG,YAAY,GAAGd,KAAK,CAACY,UAAU,CAAC;IAEtC,IAAIE,YAAY,IAAID,YAAY,IAAIA,YAAY,IAAIC,YAAY,EAAE;MAC9D,OAAO,CAACF,UAAU,EAAEC,YAAY,CAAC;IACrC;IAEA,IAAIC,YAAY,IAAI,SAAS,IAAIA,YAAY,EAAE;MAC3C,OAAO,CAACF,UAAU,EAAE,SAAS,CAAC;IAClC;IAEA,OAAOJ,SAAS;EACpB,CAAC,CAAC,CACDC,MAAM,CAACC,OAAO,CAAC;AACxB,CAAC;AAED,OAAO,MAAMK,oBAAoB,GAAGA,CAChCC,KAAiB,EACjBC,aAAgD,KAC/C;EACD,IAAI,EAAE,UAAU,IAAID,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK;EAChB;EAEA,MAAME,IAAI,GAAGnB,kBAAkB,CAC3BiB,KAAK,CAACf,QAAQ,EACdE,MAAM,CAACC,OAAO,CAACa,aAAa,IAAI,CAAC,CAAC,CACtC,CAAC;EAED,MAAME,cAAc,GAAGD,IAAI,CACtBb,GAAG,CAACe,KAAA;IAAA,IAAC,CAACb,GAAG,EAAEc,SAAS,CAAC,GAAAD,KAAA;IAAA,OAAOJ,KAAK,CAACf,QAAQ,CAAiDM,GAAG,CAAC,CAAiCc,SAAS,CAAC;EAAA,EAAC,CAC3IC,MAAM,CAAC,CAACC,GAAG,EAAEC,MAAM,MAAM;IAAE,GAAGD,GAAG;IAAE,GAAGC;EAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAEzD,MAAM;IAAEvB,QAAQ;IAAE,GAAGwB;EAAY,CAAC,GAAGT,KAAK;EAE1C,OAAO;IACH,GAAGS,WAAW;IACd,GAAGN;EACP,CAAC;AACL,CAAC"}
|
@@ -1,4 +0,0 @@
|
|
1
|
-
import type { RNStyle, UnistylesPlugin } from '../types';
|
2
|
-
import type { UnistylesRuntime } from '../core';
|
3
|
-
export declare const withPlugins: (key: string, style: RNStyle, plugins: Array<UnistylesPlugin>, runtime: UnistylesRuntime) => RNStyle;
|
4
|
-
//# sourceMappingURL=withPlugins.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"withPlugins.d.ts","sourceRoot":"","sources":["../../../../src/plugins/withPlugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,eAAO,MAAM,WAAW,QACf,MAAM,SACJ,OAAO,WACL,MAAM,eAAe,CAAC,WACtB,gBAAgB,YAOpB,CAAA"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../src/utils/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAe,MAAM,UAAU,CAAA;AAqCjE,eAAO,MAAM,oBAAoB,UACtB,UAAU,kBACD,OAAO,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,eAqBnD,CAAA"}
|