react-native-unistyles 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +30 -38
- package/android/CMakeLists.txt +27 -0
- package/android/build.gradle +75 -0
- package/android/src/main/cxx/cpp-adapter.cpp +132 -0
- package/android/src/main/java/com/unistyles/UnistylesModule.kt +189 -0
- package/android/src/main/java/com/unistyles/UnistylesPackage.kt +18 -0
- package/cxx/UnistylesRuntime.cpp +318 -0
- package/cxx/UnistylesRuntime.h +74 -0
- package/ios/UnistylesHelpers.h +3 -0
- package/ios/UnistylesHelpers.mm +5 -0
- package/ios/UnistylesModule.h +16 -0
- package/ios/UnistylesModule.mm +138 -0
- package/ios/platform/Platform_iOS.h +21 -0
- package/ios/platform/Platform_iOS.mm +132 -0
- package/ios/platform/Platform_macOS.h +20 -0
- package/ios/platform/Platform_macOS.mm +83 -0
- package/lib/commonjs/common.js +60 -0
- package/lib/commonjs/common.js.map +1 -0
- package/lib/commonjs/core/UnistyleRegistry.js +94 -0
- package/lib/commonjs/core/UnistyleRegistry.js.map +1 -0
- package/lib/commonjs/core/Unistyles.js +32 -0
- package/lib/commonjs/core/Unistyles.js.map +1 -0
- package/lib/commonjs/core/UnistylesModule.js +197 -0
- package/lib/commonjs/core/UnistylesModule.js.map +1 -0
- package/lib/commonjs/core/UnistylesModule.native.js +9 -0
- package/lib/commonjs/core/UnistylesModule.native.js.map +1 -0
- package/lib/commonjs/core/UnistylesRuntime.js +140 -0
- package/lib/commonjs/core/UnistylesRuntime.js.map +1 -0
- package/lib/commonjs/core/index.js +13 -0
- package/lib/commonjs/core/index.js.map +1 -0
- package/lib/commonjs/createStyleSheet.js +14 -0
- package/lib/commonjs/createStyleSheet.js.map +1 -0
- package/lib/commonjs/global.js +2 -0
- package/lib/commonjs/global.js.map +1 -0
- package/lib/commonjs/hooks/index.js +24 -3
- package/lib/commonjs/hooks/index.js.map +1 -1
- package/lib/commonjs/hooks/useCSS.js +44 -0
- package/lib/commonjs/hooks/useCSS.js.map +1 -0
- package/lib/commonjs/hooks/useCSS.native.js +9 -0
- package/lib/commonjs/hooks/useCSS.native.js.map +1 -0
- package/lib/commonjs/hooks/useInitialTheme.js +17 -0
- package/lib/commonjs/hooks/useInitialTheme.js.map +1 -0
- package/lib/commonjs/hooks/useUnistyles.js +64 -0
- package/lib/commonjs/hooks/useUnistyles.js.map +1 -0
- package/lib/commonjs/hooks/useVariants.js +14 -0
- package/lib/commonjs/hooks/useVariants.js.map +1 -0
- package/lib/commonjs/index.js +63 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/normalizer/index.js +32 -0
- package/lib/commonjs/normalizer/index.js.map +1 -0
- package/lib/commonjs/normalizer/module.d.js.map +1 -0
- package/lib/commonjs/{utils/normalizeStyles.web.js → normalizer/normalizeStyle.js} +5 -5
- package/lib/commonjs/normalizer/normalizeStyle.js.map +1 -0
- package/lib/commonjs/{utils → normalizer}/normalizer.js +2 -3
- package/lib/commonjs/normalizer/normalizer.js.map +1 -0
- package/lib/commonjs/normalizer/normalizer.macos.js +3 -0
- package/lib/commonjs/normalizer/normalizer.macos.js.map +1 -0
- package/lib/commonjs/plugins/cssMediaQueriesPlugin.js +14 -0
- package/lib/commonjs/plugins/cssMediaQueriesPlugin.js.map +1 -0
- package/lib/commonjs/plugins/index.js +20 -0
- package/lib/commonjs/plugins/index.js.map +1 -0
- package/lib/commonjs/plugins/normalizeWebStylesPlugin.js +12 -0
- package/lib/commonjs/plugins/normalizeWebStylesPlugin.js.map +1 -0
- package/lib/commonjs/types/common.js +2 -0
- package/lib/{module/utils/module.d.js.map → commonjs/types/common.js.map} +1 -1
- package/lib/commonjs/types/index.js +11 -0
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/commonjs/types/plugin.js +6 -0
- package/lib/commonjs/{utils/module.d.js.map → types/plugin.js.map} +1 -1
- package/lib/commonjs/types/stylesheet.js +6 -0
- package/lib/commonjs/types/{mediaQueries.js.map → stylesheet.js.map} +1 -1
- package/lib/commonjs/types/unistyles.js +6 -0
- package/lib/{module/types/mediaQueries.js.map → commonjs/types/unistyles.js.map} +1 -1
- package/lib/commonjs/types/variants.js +2 -0
- package/lib/commonjs/types/variants.js.map +1 -0
- package/lib/commonjs/useStyles.js +47 -0
- package/lib/commonjs/useStyles.js.map +1 -0
- package/lib/commonjs/utils/breakpoints.js +20 -122
- package/lib/commonjs/utils/breakpoints.js.map +1 -1
- package/lib/commonjs/utils/cssMediaQuery.js +244 -0
- package/lib/commonjs/utils/cssMediaQuery.js.map +1 -0
- package/lib/commonjs/utils/generateId.js +15 -0
- package/lib/commonjs/utils/generateId.js.map +1 -0
- package/lib/commonjs/utils/hash32.js +43 -0
- package/lib/commonjs/utils/hash32.js.map +1 -0
- package/lib/commonjs/utils/index.js +22 -54
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/commonjs/utils/mq.js +38 -0
- package/lib/commonjs/utils/mq.js.map +1 -0
- package/lib/commonjs/utils/mqParser.js +89 -0
- package/lib/commonjs/utils/mqParser.js.map +1 -0
- package/lib/commonjs/utils/styles.js +45 -72
- 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 +53 -0
- package/lib/module/common.js.map +1 -0
- package/lib/module/core/UnistyleRegistry.js +87 -0
- package/lib/module/core/UnistyleRegistry.js.map +1 -0
- package/lib/module/core/Unistyles.js +26 -0
- package/lib/module/core/Unistyles.js.map +1 -0
- package/lib/module/core/UnistylesModule.js +190 -0
- package/lib/module/core/UnistylesModule.js.map +1 -0
- package/lib/module/core/UnistylesModule.native.js +3 -0
- package/lib/module/core/UnistylesModule.native.js.map +1 -0
- package/lib/module/core/UnistylesRuntime.js +133 -0
- package/lib/module/core/UnistylesRuntime.js.map +1 -0
- package/lib/module/core/index.js +2 -0
- package/lib/module/core/index.js.map +1 -0
- package/lib/module/createStyleSheet.js +7 -0
- package/lib/module/createStyleSheet.js.map +1 -0
- package/lib/module/global.js +2 -0
- package/lib/module/global.js.map +1 -0
- package/lib/module/hooks/index.js +4 -1
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/useCSS.js +37 -0
- package/lib/module/hooks/useCSS.js.map +1 -0
- package/lib/module/hooks/useCSS.native.js +2 -0
- package/lib/module/hooks/useCSS.native.js.map +1 -0
- package/lib/module/hooks/useInitialTheme.js +10 -0
- package/lib/module/hooks/useInitialTheme.js.map +1 -0
- package/lib/module/hooks/useUnistyles.js +57 -0
- package/lib/module/hooks/useUnistyles.js.map +1 -0
- package/lib/module/hooks/useVariants.js +7 -0
- package/lib/module/hooks/useVariants.js.map +1 -0
- package/lib/module/index.js +30 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/normalizer/index.js +3 -0
- package/lib/module/normalizer/index.js.map +1 -0
- package/lib/module/normalizer/module.d.js.map +1 -0
- package/lib/module/{utils/normalizeStyles.web.js → normalizer/normalizeStyle.js} +3 -3
- package/lib/module/normalizer/normalizeStyle.js.map +1 -0
- package/lib/module/{utils → normalizer}/normalizer.js +2 -3
- package/lib/module/normalizer/normalizer.js.map +1 -0
- package/lib/module/normalizer/normalizer.macos.js +2 -0
- package/lib/module/normalizer/normalizer.macos.js.map +1 -0
- package/lib/module/plugins/cssMediaQueriesPlugin.js +7 -0
- package/lib/module/plugins/cssMediaQueriesPlugin.js.map +1 -0
- package/lib/module/plugins/index.js +3 -0
- package/lib/module/plugins/index.js.map +1 -0
- package/lib/module/plugins/normalizeWebStylesPlugin.js +6 -0
- package/lib/module/plugins/normalizeWebStylesPlugin.js.map +1 -0
- package/lib/module/types/common.js +2 -0
- package/lib/module/types/common.js.map +1 -0
- package/lib/module/types/index.js +1 -0
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/types/plugin.js +2 -0
- package/lib/module/types/plugin.js.map +1 -0
- package/lib/module/types/stylesheet.js +2 -0
- package/lib/module/types/stylesheet.js.map +1 -0
- package/lib/module/types/unistyles.js +2 -0
- package/lib/module/types/unistyles.js.map +1 -0
- package/lib/module/types/variants.js +2 -0
- package/lib/module/types/variants.js.map +1 -0
- package/lib/module/useStyles.js +40 -0
- package/lib/module/useStyles.js.map +1 -0
- package/lib/module/utils/breakpoints.js +19 -120
- package/lib/module/utils/breakpoints.js.map +1 -1
- package/lib/module/utils/cssMediaQuery.js +237 -0
- package/lib/module/utils/cssMediaQuery.js.map +1 -0
- package/lib/module/utils/generateId.js +7 -0
- package/lib/module/utils/generateId.js.map +1 -0
- package/lib/module/utils/hash32.js +36 -0
- package/lib/module/utils/hash32.js.map +1 -0
- package/lib/module/utils/index.js +6 -6
- package/lib/module/utils/index.js.map +1 -1
- package/lib/module/utils/mq.js +32 -0
- package/lib/module/utils/mq.js.map +1 -0
- package/lib/module/utils/mqParser.js +78 -0
- package/lib/module/utils/mqParser.js.map +1 -0
- package/lib/module/utils/styles.js +44 -72
- 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 +46 -0
- package/lib/typescript/src/common.d.ts.map +1 -0
- package/lib/typescript/src/core/UnistyleRegistry.d.ts +56 -0
- package/lib/typescript/src/core/UnistyleRegistry.d.ts.map +1 -0
- package/lib/typescript/src/core/Unistyles.d.ts +13 -0
- package/lib/typescript/src/core/Unistyles.d.ts.map +1 -0
- package/lib/typescript/src/core/UnistylesModule.d.ts +19 -0
- package/lib/typescript/src/core/UnistylesModule.d.ts.map +1 -0
- package/lib/typescript/src/core/UnistylesModule.native.d.ts +6 -0
- package/lib/typescript/src/core/UnistylesModule.native.d.ts.map +1 -0
- package/lib/typescript/src/core/UnistylesRuntime.d.ts +81 -0
- package/lib/typescript/src/core/UnistylesRuntime.d.ts.map +1 -0
- package/lib/typescript/src/core/index.d.ts +3 -0
- package/lib/typescript/src/core/index.d.ts.map +1 -0
- package/lib/typescript/src/createStyleSheet.d.ts +8 -0
- package/lib/typescript/src/createStyleSheet.d.ts.map +1 -0
- package/lib/typescript/src/global.d.ts +7 -0
- package/lib/typescript/src/global.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +4 -1
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCSS.d.ts +3 -0
- package/lib/typescript/src/hooks/useCSS.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useCSS.native.d.ts +3 -0
- package/lib/typescript/src/hooks/useCSS.native.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useInitialTheme.d.ts +3 -0
- package/lib/typescript/src/hooks/useInitialTheme.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useUnistyles.d.ts +14 -0
- package/lib/typescript/src/hooks/useUnistyles.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVariants.d.ts +3 -0
- package/lib/typescript/src/hooks/useVariants.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +76 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/normalizer/index.d.ts +3 -0
- package/lib/typescript/src/normalizer/index.d.ts.map +1 -0
- package/lib/typescript/src/normalizer/normalizeStyle.d.ts +3 -0
- package/lib/typescript/src/normalizer/normalizeStyle.d.ts.map +1 -0
- package/lib/typescript/src/normalizer/normalizer.d.ts.map +1 -0
- package/lib/typescript/src/normalizer/normalizer.macos.d.ts +1 -0
- package/lib/typescript/src/normalizer/normalizer.macos.d.ts.map +1 -0
- package/lib/typescript/src/plugins/cssMediaQueriesPlugin.d.ts +3 -0
- package/lib/typescript/src/plugins/cssMediaQueriesPlugin.d.ts.map +1 -0
- package/lib/typescript/src/plugins/index.d.ts +3 -0
- package/lib/typescript/src/plugins/index.d.ts.map +1 -0
- package/lib/typescript/src/plugins/normalizeWebStylesPlugin.d.ts +3 -0
- package/lib/typescript/src/plugins/normalizeWebStylesPlugin.d.ts.map +1 -0
- package/lib/typescript/src/types/breakpoints.d.ts +25 -17
- package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/types/common.d.ts +3 -0
- package/lib/typescript/src/types/common.d.ts.map +1 -0
- package/lib/typescript/src/types/core.d.ts +11 -25
- package/lib/typescript/src/types/core.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +7 -2
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/plugin.d.ts +7 -0
- package/lib/typescript/src/types/plugin.d.ts.map +1 -0
- package/lib/typescript/src/types/stylesheet.d.ts +40 -0
- package/lib/typescript/src/types/stylesheet.d.ts.map +1 -0
- package/lib/typescript/src/types/unistyles.d.ts +53 -0
- package/lib/typescript/src/types/unistyles.d.ts.map +1 -0
- package/lib/typescript/src/types/variants.d.ts +14 -0
- package/lib/typescript/src/types/variants.d.ts.map +1 -0
- package/lib/typescript/src/useStyles.d.ts +16 -0
- package/lib/typescript/src/useStyles.d.ts.map +1 -0
- package/lib/typescript/src/utils/breakpoints.d.ts +2 -62
- package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/utils/cssMediaQuery.d.ts +4 -0
- package/lib/typescript/src/utils/cssMediaQuery.d.ts.map +1 -0
- package/lib/typescript/src/utils/generateId.d.ts +2 -0
- package/lib/typescript/src/utils/generateId.d.ts.map +1 -0
- package/lib/typescript/src/utils/hash32.d.ts +2 -0
- package/lib/typescript/src/utils/hash32.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +7 -6
- package/lib/typescript/src/utils/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/mq.d.ts +26 -0
- package/lib/typescript/src/utils/mq.d.ts.map +1 -0
- package/lib/typescript/src/utils/mqParser.d.ts +16 -0
- package/lib/typescript/src/utils/mqParser.d.ts.map +1 -0
- package/lib/typescript/src/utils/styles.d.ts +3 -49
- 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 +46 -25
- package/react-native-unistyles.podspec +22 -0
- package/src/__tests__/mocks.ts +24 -0
- package/src/common.ts +55 -0
- package/src/core/UnistyleRegistry.ts +108 -0
- package/src/core/Unistyles.ts +35 -0
- package/src/core/UnistylesModule.native.ts +7 -0
- package/src/core/UnistylesModule.ts +230 -0
- package/src/core/UnistylesRuntime.ts +135 -0
- package/src/core/index.ts +2 -0
- package/src/createStyleSheet.ts +8 -0
- package/src/global.ts +6 -0
- package/src/hooks/index.ts +4 -1
- package/src/hooks/useCSS.native.ts +3 -0
- package/src/hooks/useCSS.ts +51 -0
- package/src/hooks/useInitialTheme.ts +11 -0
- package/src/hooks/useUnistyles.ts +64 -0
- package/src/hooks/useVariants.ts +10 -0
- package/src/index.ts +50 -2
- package/src/normalizer/index.ts +2 -0
- package/src/{utils/normalizeStyles.web.ts → normalizer/normalizeStyle.ts} +3 -3
- package/src/normalizer/normalizer.macos.ts +1 -0
- package/src/{utils → normalizer}/normalizer.ts +5 -4
- package/src/plugins/cssMediaQueriesPlugin.ts +8 -0
- package/src/plugins/index.ts +2 -0
- package/src/plugins/normalizeWebStylesPlugin.ts +7 -0
- package/src/types/breakpoints.ts +58 -33
- package/src/types/common.ts +2 -0
- package/src/types/core.ts +11 -36
- package/src/types/index.ts +12 -7
- package/src/types/plugin.ts +7 -0
- package/src/types/stylesheet.ts +49 -0
- package/src/types/unistyles.ts +63 -0
- package/src/types/variants.ts +19 -0
- package/src/useStyles.ts +60 -0
- package/src/utils/breakpoints.ts +28 -124
- package/src/utils/cssMediaQuery.ts +268 -0
- package/src/utils/generateId.ts +10 -0
- package/src/utils/hash32.ts +53 -0
- package/src/utils/index.ts +7 -13
- package/src/utils/mq.ts +57 -0
- package/src/utils/mqParser.ts +99 -0
- package/src/utils/styles.ts +54 -102
- package/src/utils/withPlugins.ts +13 -0
- package/lib/commonjs/UnistylesTheme.js +0 -21
- package/lib/commonjs/UnistylesTheme.js.map +0 -1
- package/lib/commonjs/createUnistyles.js +0 -57
- package/lib/commonjs/createUnistyles.js.map +0 -1
- package/lib/commonjs/hooks/useDimensions.js +0 -10
- package/lib/commonjs/hooks/useDimensions.js.map +0 -1
- package/lib/commonjs/hooks/useDimensions.web.js +0 -34
- package/lib/commonjs/hooks/useDimensions.web.js.map +0 -1
- package/lib/commonjs/types/mediaQueries.js +0 -2
- package/lib/commonjs/utils/common.js +0 -20
- package/lib/commonjs/utils/common.js.map +0 -1
- package/lib/commonjs/utils/mediaQueries.js +0 -189
- package/lib/commonjs/utils/mediaQueries.js.map +0 -1
- package/lib/commonjs/utils/normalizeStyles.js +0 -10
- package/lib/commonjs/utils/normalizeStyles.js.map +0 -1
- package/lib/commonjs/utils/normalizeStyles.web.js.map +0 -1
- package/lib/commonjs/utils/normalizer.js.map +0 -1
- package/lib/module/UnistylesTheme.js +0 -12
- package/lib/module/UnistylesTheme.js.map +0 -1
- package/lib/module/createUnistyles.js +0 -50
- package/lib/module/createUnistyles.js.map +0 -1
- package/lib/module/hooks/useDimensions.js +0 -3
- package/lib/module/hooks/useDimensions.js.map +0 -1
- package/lib/module/hooks/useDimensions.web.js +0 -27
- package/lib/module/hooks/useDimensions.web.js.map +0 -1
- package/lib/module/types/mediaQueries.js +0 -2
- package/lib/module/utils/common.js +0 -12
- package/lib/module/utils/common.js.map +0 -1
- package/lib/module/utils/mediaQueries.js +0 -176
- package/lib/module/utils/mediaQueries.js.map +0 -1
- package/lib/module/utils/normalizeStyles.js +0 -3
- package/lib/module/utils/normalizeStyles.js.map +0 -1
- package/lib/module/utils/normalizeStyles.web.js.map +0 -1
- package/lib/module/utils/normalizer.js.map +0 -1
- package/lib/typescript/examples/expo/src/App.d.ts +0 -3
- package/lib/typescript/examples/expo/src/App.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/Breakpoints.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/Breakpoints.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/EmptyStyles.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/EmptyStyles.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/Extreme.d.ts +0 -7
- package/lib/typescript/examples/expo/src/examples/Extreme.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/MediaQueries.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/MediaQueries.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/Memoization.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/Memoization.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/Minimal.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/Minimal.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/MinimalWithCreateStyleSheet.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/MinimalWithCreateStyleSheet.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/PlatformColors.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/PlatformColors.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/Theme.d.ts +0 -3
- package/lib/typescript/examples/expo/src/examples/Theme.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/examples/index.d.ts +0 -9
- package/lib/typescript/examples/expo/src/examples/index.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/index.d.ts +0 -2
- package/lib/typescript/examples/expo/src/index.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts +0 -8
- package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/styles/index.d.ts +0 -46
- package/lib/typescript/examples/expo/src/styles/index.d.ts.map +0 -1
- package/lib/typescript/examples/expo/src/styles/theme.d.ts +0 -24
- package/lib/typescript/examples/expo/src/styles/theme.d.ts.map +0 -1
- package/lib/typescript/src/UnistylesTheme.d.ts +0 -9
- package/lib/typescript/src/UnistylesTheme.d.ts.map +0 -1
- package/lib/typescript/src/createUnistyles.d.ts +0 -10
- package/lib/typescript/src/createUnistyles.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useDimensions.d.ts +0 -3
- package/lib/typescript/src/hooks/useDimensions.d.ts.map +0 -1
- package/lib/typescript/src/hooks/useDimensions.web.d.ts +0 -3
- package/lib/typescript/src/hooks/useDimensions.web.d.ts.map +0 -1
- package/lib/typescript/src/types/mediaQueries.d.ts +0 -8
- package/lib/typescript/src/types/mediaQueries.d.ts.map +0 -1
- package/lib/typescript/src/utils/common.d.ts +0 -7
- package/lib/typescript/src/utils/common.d.ts.map +0 -1
- package/lib/typescript/src/utils/mediaQueries.d.ts +0 -130
- package/lib/typescript/src/utils/mediaQueries.d.ts.map +0 -1
- package/lib/typescript/src/utils/normalizeStyles.d.ts +0 -2
- package/lib/typescript/src/utils/normalizeStyles.d.ts.map +0 -1
- package/lib/typescript/src/utils/normalizeStyles.web.d.ts +0 -5
- package/lib/typescript/src/utils/normalizeStyles.web.d.ts.map +0 -1
- package/lib/typescript/src/utils/normalizer.d.ts.map +0 -1
- package/src/UnistylesTheme.tsx +0 -17
- package/src/__tests__/createUnistyles.spec.tsx +0 -192
- package/src/createUnistyles.ts +0 -70
- package/src/hooks/useDimensions.ts +0 -4
- package/src/hooks/useDimensions.web.ts +0 -34
- package/src/types/mediaQueries.ts +0 -10
- package/src/utils/common.ts +0 -14
- package/src/utils/mediaQueries.ts +0 -201
- package/src/utils/normalizeStyles.ts +0 -2
- /package/lib/commonjs/{utils → normalizer}/module.d.js +0 -0
- /package/lib/module/{utils → normalizer}/module.d.js +0 -0
- /package/lib/typescript/src/{utils → normalizer}/normalizer.d.ts +0 -0
- /package/src/{utils → normalizer}/module.d.ts +0 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native'
|
|
2
|
+
import type { UnistylesThemes, UnistylesBreakpoints } from 'react-native-unistyles'
|
|
3
|
+
import type { ColorSchemeName } from '../types'
|
|
4
|
+
import { normalizeWebStylesPlugin } from '../plugins'
|
|
5
|
+
import { isServer } from '../common'
|
|
6
|
+
|
|
7
|
+
export class UnistylesBridgeWeb {
|
|
8
|
+
#timerRef?: ReturnType<typeof setTimeout> = undefined
|
|
9
|
+
#hasAdaptiveThemes: boolean = false
|
|
10
|
+
#supportsAutomaticColorScheme = false
|
|
11
|
+
#screenWidth = isServer ? undefined : window.innerWidth
|
|
12
|
+
#screenHeight = isServer ? undefined : window.innerHeight
|
|
13
|
+
#themes: Array<keyof UnistylesThemes> = []
|
|
14
|
+
#breakpoints: UnistylesBreakpoints = {} as UnistylesBreakpoints
|
|
15
|
+
#colorScheme: ColorSchemeName = this.getPreferredColorScheme()
|
|
16
|
+
#themeName: keyof UnistylesThemes = '' as keyof UnistylesThemes
|
|
17
|
+
#enabledPlugins: Array<string> = [normalizeWebStylesPlugin.name]
|
|
18
|
+
#unistylesEvents = new NativeEventEmitter(NativeModules.Unistyles)
|
|
19
|
+
#sortedBreakpointPairs: Array<[keyof UnistylesBreakpoints, number]> = []
|
|
20
|
+
#breakpoint: keyof UnistylesBreakpoints = '' as keyof UnistylesBreakpoints
|
|
21
|
+
#contentSizeCategory: string = 'unspecified'
|
|
22
|
+
|
|
23
|
+
constructor() {
|
|
24
|
+
if (!isServer) {
|
|
25
|
+
this.setupListeners()
|
|
26
|
+
this.#screenWidth = window.innerWidth
|
|
27
|
+
this.#screenHeight = window.innerHeight
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public install() {
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
// eslint-disable-next-line no-undef
|
|
34
|
+
globalThis.__UNISTYLES__ = new Proxy({}, {
|
|
35
|
+
get: (_target, prop) => {
|
|
36
|
+
switch (prop) {
|
|
37
|
+
case 'themeName':
|
|
38
|
+
return this.getTheme()
|
|
39
|
+
case 'screenWidth':
|
|
40
|
+
return this.#screenWidth
|
|
41
|
+
case 'screenHeight':
|
|
42
|
+
return this.#screenHeight
|
|
43
|
+
case 'contentSizeCategory':
|
|
44
|
+
return this.#contentSizeCategory
|
|
45
|
+
case 'breakpoint':
|
|
46
|
+
return this.#breakpoint || undefined
|
|
47
|
+
case 'breakpoints':
|
|
48
|
+
return this.#breakpoints
|
|
49
|
+
case 'hasAdaptiveThemes':
|
|
50
|
+
return this.#hasAdaptiveThemes
|
|
51
|
+
case 'sortedBreakpointPairs':
|
|
52
|
+
return this.#sortedBreakpointPairs
|
|
53
|
+
case 'enabledPlugins':
|
|
54
|
+
return this.#enabledPlugins
|
|
55
|
+
case 'colorScheme':
|
|
56
|
+
return this.#colorScheme
|
|
57
|
+
case 'useTheme':
|
|
58
|
+
return (themeName: keyof UnistylesThemes) => this.useTheme(themeName)
|
|
59
|
+
case 'useBreakpoints':
|
|
60
|
+
return (breakpoints: UnistylesBreakpoints) => this.useBreakpoints(breakpoints)
|
|
61
|
+
case 'useAdaptiveThemes':
|
|
62
|
+
return (enable: boolean) => this.useAdaptiveThemes(enable)
|
|
63
|
+
case 'addPlugin':
|
|
64
|
+
return (pluginName: string, notify: boolean) => this.addPlugin(pluginName, notify)
|
|
65
|
+
case 'removePlugin':
|
|
66
|
+
return (pluginName: string) => this.removePlugin(pluginName)
|
|
67
|
+
default:
|
|
68
|
+
return Reflect.get(this, prop)
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
set: (target, prop, newValue, receiver) => {
|
|
72
|
+
switch (prop) {
|
|
73
|
+
case 'themes': {
|
|
74
|
+
this.#themes = newValue
|
|
75
|
+
this.#supportsAutomaticColorScheme = newValue.includes('light') && newValue.includes('dark')
|
|
76
|
+
|
|
77
|
+
return true
|
|
78
|
+
}
|
|
79
|
+
case 'themeName': {
|
|
80
|
+
this.#themeName = newValue as keyof UnistylesThemes
|
|
81
|
+
this.emitThemeChange()
|
|
82
|
+
|
|
83
|
+
return true
|
|
84
|
+
}
|
|
85
|
+
default:
|
|
86
|
+
return Reflect.set(target, prop, newValue, receiver)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
return true
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private useTheme(themeName: keyof UnistylesThemes) {
|
|
95
|
+
this.#themeName = themeName
|
|
96
|
+
this.emitThemeChange()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private useBreakpoints(breakpoints: UnistylesBreakpoints) {
|
|
100
|
+
this.#breakpoints = breakpoints
|
|
101
|
+
this.#sortedBreakpointPairs = Object
|
|
102
|
+
.entries(breakpoints)
|
|
103
|
+
.sort(([, a], [, b]) => (a ?? 0) - (b ?? 0)) as Array<[keyof UnistylesBreakpoints, number]>
|
|
104
|
+
|
|
105
|
+
if (!isServer) {
|
|
106
|
+
this.#breakpoint = this.getBreakpointFromScreenWidth(this.#screenWidth as number)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private useAdaptiveThemes(enable: boolean) {
|
|
111
|
+
this.#hasAdaptiveThemes = enable
|
|
112
|
+
|
|
113
|
+
if (!this.#hasAdaptiveThemes || !this.#supportsAutomaticColorScheme) {
|
|
114
|
+
return
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (this.#themeName !== this.#colorScheme) {
|
|
118
|
+
this.#themeName = this.#colorScheme as keyof UnistylesThemes
|
|
119
|
+
this.emitThemeChange()
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private addPlugin(pluginName: string, notify: boolean) {
|
|
124
|
+
this.#enabledPlugins = [pluginName].concat(this.#enabledPlugins)
|
|
125
|
+
|
|
126
|
+
if (notify) {
|
|
127
|
+
this.emitPluginChange()
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private removePlugin(pluginName: string) {
|
|
132
|
+
this.#enabledPlugins = this.#enabledPlugins.filter(name => name !== pluginName)
|
|
133
|
+
this.emitPluginChange()
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private getTheme(): keyof UnistylesThemes {
|
|
137
|
+
|
|
138
|
+
if (this.#themes.length === 1) {
|
|
139
|
+
return this.#themes.at(0) as keyof UnistylesThemes
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return this.#themeName
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private setupListeners() {
|
|
146
|
+
window.addEventListener('resize', () => {
|
|
147
|
+
clearTimeout(this.#timerRef)
|
|
148
|
+
|
|
149
|
+
this.#timerRef = setTimeout(() => {
|
|
150
|
+
this.#screenWidth = window.innerWidth
|
|
151
|
+
this.#screenHeight = window.innerHeight
|
|
152
|
+
this.#breakpoint = this.getBreakpointFromScreenWidth(this.#screenWidth)
|
|
153
|
+
|
|
154
|
+
this.emitLayoutChange()
|
|
155
|
+
}, 100)
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
|
|
159
|
+
this.#colorScheme = event.matches
|
|
160
|
+
? 'dark'
|
|
161
|
+
: 'light'
|
|
162
|
+
|
|
163
|
+
if (!this.#supportsAutomaticColorScheme || !this.#hasAdaptiveThemes) {
|
|
164
|
+
return
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (this.#colorScheme !== this.#themeName) {
|
|
168
|
+
this.#themeName = this.#colorScheme as keyof UnistylesThemes
|
|
169
|
+
this.emitThemeChange()
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private getBreakpointFromScreenWidth(width: number): keyof UnistylesBreakpoints {
|
|
175
|
+
const breakpoint = this.#sortedBreakpointPairs
|
|
176
|
+
.find(([, value], index, otherBreakpoints) => {
|
|
177
|
+
const minVal = value
|
|
178
|
+
const maxVal = otherBreakpoints[index + 1]?.[1]
|
|
179
|
+
|
|
180
|
+
if (!maxVal) {
|
|
181
|
+
return true
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return width >= minVal && width < maxVal
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
return breakpoint?.at(0) as keyof UnistylesBreakpoints
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private getPreferredColorScheme() {
|
|
191
|
+
if (!isServer && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
192
|
+
return 'dark'
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return 'light'
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private emitPluginChange() {
|
|
199
|
+
this.#unistylesEvents.emit('__unistylesOnChange', {
|
|
200
|
+
type: 'plugin'
|
|
201
|
+
})
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private emitThemeChange() {
|
|
205
|
+
this.#unistylesEvents.emit('__unistylesOnChange', {
|
|
206
|
+
type: 'theme',
|
|
207
|
+
payload: {
|
|
208
|
+
themeName: this.#themeName
|
|
209
|
+
}
|
|
210
|
+
})
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private emitLayoutChange() {
|
|
214
|
+
this.#unistylesEvents.emit('__unistylesOnChange', {
|
|
215
|
+
type: 'layout',
|
|
216
|
+
payload: {
|
|
217
|
+
breakpoint: this.#breakpoint,
|
|
218
|
+
orientation: (this.#screenWidth as number) > (this.#screenHeight as number)
|
|
219
|
+
? 'landscape'
|
|
220
|
+
: 'portrait',
|
|
221
|
+
screen: {
|
|
222
|
+
width: this.#screenWidth,
|
|
223
|
+
height: this.#screenHeight
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
})
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export const UnistylesModule = new UnistylesBridgeWeb()
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { ScreenOrientation, UnistylesError } from '../common'
|
|
2
|
+
import type { UnistylesBridge, UnistylesPlugin } from '../types'
|
|
3
|
+
import type { UnistylesThemes } from '../global'
|
|
4
|
+
import type { UnistyleRegistry } from './UnistyleRegistry'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Utility to interact with the Unistyles during runtime
|
|
8
|
+
*/
|
|
9
|
+
export class UnistylesRuntime {
|
|
10
|
+
constructor(private unistylesBridge: UnistylesBridge, private unistylesRegistry: UnistyleRegistry) {}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Get the current color scheme
|
|
14
|
+
* @returns - The current color scheme
|
|
15
|
+
*/
|
|
16
|
+
public get colorScheme() {
|
|
17
|
+
return this.unistylesBridge.colorScheme
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Get info about adaptive themes
|
|
22
|
+
* @returns - boolean indicating if the adaptive themes are enabled
|
|
23
|
+
*/
|
|
24
|
+
public get hasAdaptiveThemes() {
|
|
25
|
+
return this.unistylesBridge.hasAdaptiveThemes
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Get the current theme name
|
|
30
|
+
* @returns - The current theme name
|
|
31
|
+
*/
|
|
32
|
+
public get themeName() {
|
|
33
|
+
return this.unistylesBridge.themeName
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get the current content size category
|
|
38
|
+
* @returns - The current content size category
|
|
39
|
+
*/
|
|
40
|
+
public get contentSizeCategory() {
|
|
41
|
+
return this.unistylesBridge.contentSizeCategory
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Get the current breakpoint based on device size
|
|
46
|
+
* @returns - The current breakpoint
|
|
47
|
+
*/
|
|
48
|
+
public get breakpoint() {
|
|
49
|
+
return this.unistylesBridge.breakpoint
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get registered breakpoints with UnitylesRegistry
|
|
54
|
+
* @returns - The registered breakpoints
|
|
55
|
+
*/
|
|
56
|
+
public get breakpoints() {
|
|
57
|
+
return this.unistylesRegistry.breakpoints
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Get the names of currently enabled plugins
|
|
62
|
+
* @returns - The names of currently enabled plugins
|
|
63
|
+
*/
|
|
64
|
+
public get enabledPlugins() {
|
|
65
|
+
return this.unistylesBridge.enabledPlugins
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get the screen size
|
|
70
|
+
* @returns - The screen size { width, height }
|
|
71
|
+
*/
|
|
72
|
+
public get screen() {
|
|
73
|
+
return {
|
|
74
|
+
width: this.unistylesBridge.screenWidth,
|
|
75
|
+
height: this.unistylesBridge.screenHeight
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Get the screen orientation
|
|
81
|
+
* @returns - The screen orientation
|
|
82
|
+
*/
|
|
83
|
+
public get orientation() {
|
|
84
|
+
const { width, height } = this.screen
|
|
85
|
+
|
|
86
|
+
if (width > height) {
|
|
87
|
+
return ScreenOrientation.Landscape
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return ScreenOrientation.Portrait
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Switch to a different theme
|
|
95
|
+
* @param name - The name of the theme to switch to
|
|
96
|
+
* @returns - boolean indicating if the theme was switched
|
|
97
|
+
*/
|
|
98
|
+
public setTheme = (name: keyof UnistylesThemes) => {
|
|
99
|
+
if (name === this.themeName) {
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (this.unistylesRegistry.hasTheme(name)) {
|
|
104
|
+
this.unistylesBridge.useTheme(name)
|
|
105
|
+
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
throw new Error(UnistylesError.ThemeNotRegistered)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Enable or disable adaptive themes
|
|
114
|
+
* @param enable - boolean indicating if adaptive themes should be enabled
|
|
115
|
+
*/
|
|
116
|
+
public setAdaptiveThemes = (enable: boolean) => {
|
|
117
|
+
this.unistylesBridge.useAdaptiveThemes(enable)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Enable a plugin
|
|
122
|
+
* @param plugin - Plugin that conforms to UnistylesPlugin interface
|
|
123
|
+
*/
|
|
124
|
+
public addPlugin = (plugin: UnistylesPlugin) => {
|
|
125
|
+
this.unistylesRegistry.addPlugin(plugin)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Disable a plugin
|
|
130
|
+
* @param plugin - Plugin that conforms to UnistylesPlugin interface
|
|
131
|
+
*/
|
|
132
|
+
public removePlugin = (plugin: UnistylesPlugin) => {
|
|
133
|
+
this.unistylesRegistry.removePlugin(plugin)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { StyleSheetWithSuperPowers } from './types'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Utility to create a stylesheet with superpowers
|
|
5
|
+
* Compatible with React Native StyleSheet.create
|
|
6
|
+
* @param stylesheet - The stylesheet with superpowers to be used
|
|
7
|
+
*/
|
|
8
|
+
export const createStyleSheet = <S extends StyleSheetWithSuperPowers>(stylesheet: S): S => stylesheet
|
package/src/global.ts
ADDED
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useInsertionEffect, useRef } from 'react'
|
|
2
|
+
import { unistyles } from '../core'
|
|
3
|
+
import type { ReactNativeStyleSheet } from '../types'
|
|
4
|
+
import { generateReactNativeWebId } from '../utils'
|
|
5
|
+
|
|
6
|
+
export const useCSS = <T>(stylesheet: ReactNativeStyleSheet<T>) => {
|
|
7
|
+
const insertedIds = useRef<Array<string>>([])
|
|
8
|
+
|
|
9
|
+
useInsertionEffect(() => {
|
|
10
|
+
if (!unistyles.registry.config.experimentalCSSMediaQueries) {
|
|
11
|
+
return
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
Object
|
|
15
|
+
.entries(stylesheet)
|
|
16
|
+
.forEach(([_key, value]) => {
|
|
17
|
+
Object.entries(value!)
|
|
18
|
+
.forEach(([prop, val]) => {
|
|
19
|
+
if (!val.toString().includes('@media')) {
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const id = generateReactNativeWebId(prop, '""')
|
|
24
|
+
|
|
25
|
+
if (insertedIds.current.includes(id)) {
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const style = document.createElement('style')
|
|
30
|
+
|
|
31
|
+
style.id = id
|
|
32
|
+
style.innerHTML = val
|
|
33
|
+
|
|
34
|
+
document.head.appendChild(style)
|
|
35
|
+
insertedIds.current = [...insertedIds.current, id]
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
return () => {
|
|
40
|
+
insertedIds.current.forEach(id => {
|
|
41
|
+
const style = document.getElementById(id)
|
|
42
|
+
|
|
43
|
+
if (style) {
|
|
44
|
+
style.remove()
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
insertedIds.current = []
|
|
49
|
+
}
|
|
50
|
+
}, [stylesheet])
|
|
51
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useMemo } from 'react'
|
|
2
|
+
import { unistyles } from '../core'
|
|
3
|
+
import type { UnistylesThemes } from '../global'
|
|
4
|
+
|
|
5
|
+
export const useInitialTheme = (forName: keyof UnistylesThemes) => {
|
|
6
|
+
useMemo(() => {
|
|
7
|
+
if (!unistyles.runtime.themeName) {
|
|
8
|
+
unistyles.runtime.setTheme(forName)
|
|
9
|
+
}
|
|
10
|
+
}, [])
|
|
11
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native'
|
|
2
|
+
import { useEffect, useState } from 'react'
|
|
3
|
+
import { unistyles } from '../core'
|
|
4
|
+
import { UnistylesEventType } from '../common'
|
|
5
|
+
import type { UnistylesDynamicTypeSizeEvent, UnistylesEvents, UnistylesMobileLayoutEvent, UnistylesThemeEvent } from '../types'
|
|
6
|
+
|
|
7
|
+
const unistylesEvents = new NativeEventEmitter(NativeModules.Unistyles)
|
|
8
|
+
|
|
9
|
+
export const useUnistyles = () => {
|
|
10
|
+
const [plugins, setPlugins] = useState(unistyles.runtime.enabledPlugins)
|
|
11
|
+
const [theme, setTheme] = useState(unistyles.registry.getTheme(unistyles.runtime.themeName))
|
|
12
|
+
const [contentSizeCategory, setContentSizeCategory] = useState(unistyles.runtime.contentSizeCategory)
|
|
13
|
+
const [layout, setLayout] = useState({
|
|
14
|
+
breakpoint: unistyles.runtime.breakpoint,
|
|
15
|
+
orientation: unistyles.runtime.orientation,
|
|
16
|
+
screenSize: {
|
|
17
|
+
width: unistyles.runtime.screen.width,
|
|
18
|
+
height: unistyles.runtime.screen.height
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const subscription = unistylesEvents.addListener(
|
|
24
|
+
'__unistylesOnChange',
|
|
25
|
+
(event: UnistylesEvents) => {
|
|
26
|
+
switch (event.type) {
|
|
27
|
+
case UnistylesEventType.Theme: {
|
|
28
|
+
const themeEvent = event as UnistylesThemeEvent
|
|
29
|
+
|
|
30
|
+
return setTheme(unistyles.registry.getTheme(themeEvent.payload.themeName))
|
|
31
|
+
}
|
|
32
|
+
case UnistylesEventType.Layout: {
|
|
33
|
+
const layoutEvent = event as UnistylesMobileLayoutEvent
|
|
34
|
+
|
|
35
|
+
return setLayout({
|
|
36
|
+
breakpoint: layoutEvent.payload.breakpoint,
|
|
37
|
+
orientation: layoutEvent.payload.orientation,
|
|
38
|
+
screenSize: layoutEvent.payload.screen
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
case UnistylesEventType.Plugin: {
|
|
42
|
+
return setPlugins(unistyles.runtime.enabledPlugins)
|
|
43
|
+
}
|
|
44
|
+
case UnistylesEventType.DynamicTypeSize: {
|
|
45
|
+
const dynamicTypeSizeEvent = event as UnistylesDynamicTypeSizeEvent
|
|
46
|
+
|
|
47
|
+
return setContentSizeCategory(dynamicTypeSizeEvent.payload.contentSizeCategory)
|
|
48
|
+
}
|
|
49
|
+
default:
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
return subscription.remove
|
|
56
|
+
}, [])
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
plugins,
|
|
60
|
+
theme,
|
|
61
|
+
layout,
|
|
62
|
+
contentSizeCategory
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useRef } from 'react'
|
|
2
|
+
import type { Optional } from '../types'
|
|
3
|
+
|
|
4
|
+
export const useVariants = (variantsMap?: Record<string, Optional<string>>) => {
|
|
5
|
+
const variantsRef = useRef<Optional<Record<string, Optional<string>>>>(variantsMap)
|
|
6
|
+
|
|
7
|
+
variantsRef.current = variantsMap
|
|
8
|
+
|
|
9
|
+
return variantsRef.current
|
|
10
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { unistyles } from './core'
|
|
2
|
+
import { mq } from './utils'
|
|
3
|
+
import { useInitialTheme } from './hooks'
|
|
4
|
+
import type { UnistylesPlugin } from './types'
|
|
5
|
+
import type { UnistylesThemes, UnistylesBreakpoints } from './global'
|
|
6
|
+
import { ScreenOrientation, AndroidContentSizeCategory, IOSContentSizeCategory } from './common'
|
|
7
|
+
import { useStyles } from './useStyles'
|
|
8
|
+
import { createStyleSheet } from './createStyleSheet'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Utility to interact with the Unistyles
|
|
12
|
+
* (should be called only once)
|
|
13
|
+
*/
|
|
14
|
+
const UnistylesRegistry = {
|
|
15
|
+
/**
|
|
16
|
+
* Register themes to be used in the app
|
|
17
|
+
* @param themes - Key value pair of themes
|
|
18
|
+
*/
|
|
19
|
+
addThemes: unistyles.registry.addThemes,
|
|
20
|
+
/**
|
|
21
|
+
* Register breakpoints to be used in the app
|
|
22
|
+
* @param breakpoints - Key value pair of breakpoints
|
|
23
|
+
*/
|
|
24
|
+
addBreakpoints: unistyles.registry.addBreakpoints,
|
|
25
|
+
/**
|
|
26
|
+
* Register additional config to customize the Unistyles
|
|
27
|
+
* @param config - Key value pair of config
|
|
28
|
+
*/
|
|
29
|
+
addConfig: unistyles.registry.addConfig
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const UnistylesRuntime = unistyles.runtime
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
mq,
|
|
36
|
+
useStyles,
|
|
37
|
+
useInitialTheme,
|
|
38
|
+
createStyleSheet,
|
|
39
|
+
ScreenOrientation,
|
|
40
|
+
AndroidContentSizeCategory,
|
|
41
|
+
IOSContentSizeCategory,
|
|
42
|
+
UnistylesRegistry,
|
|
43
|
+
UnistylesRuntime
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type {
|
|
47
|
+
UnistylesThemes,
|
|
48
|
+
UnistylesBreakpoints,
|
|
49
|
+
UnistylesPlugin
|
|
50
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { warn } from './common'
|
|
2
1
|
import { preprocessor } from './normalizer'
|
|
3
|
-
import
|
|
2
|
+
import { warn } from '../common'
|
|
3
|
+
import type { NormalizedBoxShadow, NormalizedTextShadow, BoxShadow, TextShadow, RNStyle } from '../types'
|
|
4
4
|
|
|
5
5
|
const normalizeBoxShadow = <T extends BoxShadow>(style: T): NormalizedBoxShadow => {
|
|
6
6
|
const requiredBoxShadowProperties = [
|
|
@@ -55,7 +55,7 @@ const normalizeTextShadow = <T extends TextShadow>(style: T): NormalizedTextShad
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
export const
|
|
58
|
+
export const normalizeStyle = <T extends RNStyle>(style: T): T => {
|
|
59
59
|
const normalizedTransform = ('transform' in style && Array.isArray(style.transform))
|
|
60
60
|
? { transform: preprocessor.createTransformValue(style.transform) }
|
|
61
61
|
: {}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// keep it empty for macOS
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// based on react-native-web normalizer
|
|
2
2
|
// https://github.com/necolas/react-native-web
|
|
3
3
|
import normalizeColors from '@react-native/normalize-colors'
|
|
4
|
-
import type { TextShadow, Transforms, BoxShadow } from '../types'
|
|
4
|
+
import type { TextShadow, Transforms, BoxShadow, Nullable } from '../types'
|
|
5
5
|
|
|
6
6
|
type Preprocessor = {
|
|
7
7
|
createTextShadowValue(style: TextShadow): string,
|
|
@@ -15,9 +15,9 @@ export const normalizeColor = (color: string, opacity: number = 1) => {
|
|
|
15
15
|
return color
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
const integer = normalizeColors(color) as number
|
|
18
|
+
const integer = normalizeColors(color) as Nullable<number>
|
|
19
19
|
|
|
20
|
-
// If the
|
|
20
|
+
// If the color is an unknown format, the return value is null
|
|
21
21
|
if (integer === null) {
|
|
22
22
|
return color
|
|
23
23
|
}
|
|
@@ -37,7 +37,8 @@ export const normalizeColor = (color: string, opacity: number = 1) => {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export const normalizeNumericValue = (value: number) => value ? `${value}px` : value
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
const normalizeTransform = <T>(key: string, value: T) => {
|
|
41
42
|
if (key.includes('scale')) {
|
|
42
43
|
return value
|
|
43
44
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// prevent recursive import
|
|
2
|
+
import { createMediaQueryForStyles } from '../utils/cssMediaQuery'
|
|
3
|
+
import type { UnistylesPlugin } from '../types'
|
|
4
|
+
|
|
5
|
+
export const cssMediaQueriesPlugin: UnistylesPlugin = {
|
|
6
|
+
name: '__unistylesCSSMediaQueries',
|
|
7
|
+
onParsedStyle: (_key, styles, runtime) => createMediaQueryForStyles(styles, runtime)
|
|
8
|
+
}
|