react-native-unistyles 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
package/src/types/breakpoints.ts
CHANGED
@@ -1,36 +1,61 @@
|
|
1
|
-
import type { OpaqueColorValue } from 'react-native'
|
2
|
-
import type {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
: T
|
19
|
-
? (...args: A) => ExtractBreakpoints<R, B>
|
20
|
-
: {
|
21
|
-
[K in keyof T]: T[K] extends (...args: infer A) => infer R
|
22
|
-
? (...args: A) => ExtractBreakpoints<R, B>
|
23
|
-
: T[K] extends object
|
24
|
-
? ExtractBreakpoints<T[K], B>
|
25
|
-
: T[K]
|
26
|
-
}
|
1
|
+
import type { ColorValue, OpaqueColorValue } from 'react-native'
|
2
|
+
import type { UnistylesTheme } from '../types'
|
3
|
+
import type { BreakpointsOrMediaQueries, ToDeepUnistyles } from './stylesheet'
|
4
|
+
import type { TransformStyles } from './core'
|
5
|
+
|
6
|
+
type ExtractTransformArray<T> = T extends object
|
7
|
+
? { [K in keyof T]: ExtractBreakpoints<T[K]> }
|
8
|
+
: never
|
9
|
+
|
10
|
+
type ExtractBreakpoints<T> = T extends object
|
11
|
+
? keyof T extends BreakpointsOrMediaQueries
|
12
|
+
? T[keyof T]
|
13
|
+
: T extends Array<ToDeepUnistyles<TransformStyles>>
|
14
|
+
? Array<ExtractTransformArray<T[number]>>
|
15
|
+
: {
|
16
|
+
[K in keyof T]: ExtractBreakpoints<T[K]>
|
17
|
+
}
|
18
|
+
: T
|
27
19
|
|
28
|
-
|
29
|
-
? (...args:
|
20
|
+
type ParseNestedObject<T> = T extends (...args: infer A) => infer R
|
21
|
+
? (...args: A) => ParseNestedObject<R>
|
30
22
|
: T extends object
|
31
|
-
? T extends
|
32
|
-
?
|
33
|
-
:
|
34
|
-
|
35
|
-
|
23
|
+
? T extends { variants: infer R }
|
24
|
+
? ParseVariants<FlattenVariants<R>> & ParseNestedObject<Omit<T, 'variants'>>
|
25
|
+
: {
|
26
|
+
[K in keyof T]: T[K] extends object
|
27
|
+
? T[K] extends OpaqueColorValue
|
28
|
+
? ColorValue
|
29
|
+
: ExtractBreakpoints<T[K]>
|
30
|
+
: T[K]
|
31
|
+
}
|
32
|
+
: T
|
33
|
+
|
34
|
+
type FlattenVariants<T> = T extends object
|
35
|
+
? {
|
36
|
+
[K in keyof T]: T[K] extends object
|
37
|
+
? {
|
38
|
+
[key in keyof T[K]]: T[K][key] extends object
|
39
|
+
? ParseNestedObject<T[K][key]>
|
40
|
+
: never
|
41
|
+
}
|
42
|
+
: never
|
43
|
+
}
|
44
|
+
: never
|
45
|
+
|
46
|
+
type ParseVariants<T> = T extends object
|
47
|
+
? T[keyof T] extends object
|
48
|
+
? UnionToIntersection<ParseVariants<T[keyof T]>>
|
36
49
|
: T
|
50
|
+
: T
|
51
|
+
|
52
|
+
type UnionToIntersection<U> =
|
53
|
+
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
|
54
|
+
|
55
|
+
type ParseStyleKeys<T> = T extends object
|
56
|
+
? { [K in keyof T]: ParseNestedObject<T[K]> }
|
57
|
+
: never
|
58
|
+
|
59
|
+
export type ReactNativeStyleSheet<T> = T extends (theme: UnistylesTheme) => infer R
|
60
|
+
? ParseStyleKeys<R>
|
61
|
+
: ParseStyleKeys<T>
|
package/src/types/core.ts
CHANGED
@@ -14,15 +14,14 @@ import type {
|
|
14
14
|
TranslateYTransform
|
15
15
|
} from 'react-native/Libraries/StyleSheet/StyleSheetTypes'
|
16
16
|
import type { ImageStyle, TextStyle, ViewStyle } from 'react-native'
|
17
|
-
import type {
|
18
|
-
import type { MediaQueries } from './mediaQueries'
|
17
|
+
import type { UnistylesBreakpoints, UnistylesThemes } from '../global'
|
19
18
|
|
20
|
-
type ShadowOffset = {
|
19
|
+
export type ShadowOffset = {
|
21
20
|
width: number,
|
22
21
|
height: number
|
23
22
|
}
|
24
23
|
|
25
|
-
type TransformStyles =
|
24
|
+
export type TransformStyles =
|
26
25
|
& PerpectiveTransform
|
27
26
|
& RotateTransform
|
28
27
|
& RotateXTransform
|
@@ -37,37 +36,13 @@ type TransformStyles =
|
|
37
36
|
& SkewYTransform
|
38
37
|
& MatrixTransform
|
39
38
|
|
40
|
-
type
|
41
|
-
|
42
|
-
|
43
|
-
transform?: Array<DeepUniStyle<TransformStyles, B>>
|
44
|
-
}
|
45
|
-
|
46
|
-
type UniStyle<V, B> = {
|
47
|
-
[innerKey in keyof B]?: V
|
48
|
-
} | {
|
49
|
-
[innerKey in MediaQueries]?: V
|
50
|
-
} | V
|
51
|
-
|
52
|
-
type DeepUniStyle<T, B> = {
|
53
|
-
[K in keyof T]?: UniStyle<T[K], B>
|
39
|
+
export type ScreenSize = {
|
40
|
+
width: number,
|
41
|
+
height: number
|
54
42
|
}
|
55
43
|
|
56
|
-
|
57
|
-
type
|
58
|
-
|
59
|
-
type
|
60
|
-
type
|
61
|
-
type UnistyleImage<B> = DeepUniStyle<Omit<ImageStyle, NestedTypes>, B>
|
62
|
-
|
63
|
-
export type StaticStyles<B extends Breakpoints> =
|
64
|
-
| UnistyleView<B>
|
65
|
-
| UnistyleText<B>
|
66
|
-
| UnistyleImage<B>
|
67
|
-
& UnistyleNested<B>
|
68
|
-
|
69
|
-
export type CustomNamedStyles<T, B extends Breakpoints> = {
|
70
|
-
[K in keyof T]: T[K] extends (...args: infer A) => StaticStyles<B>
|
71
|
-
? (...args: A) => StaticStyles<B>
|
72
|
-
: StaticStyles<B>
|
73
|
-
}
|
44
|
+
export type RNStyle = ViewStyle & TextStyle & ImageStyle
|
45
|
+
export type RNValue = ViewStyle[keyof ViewStyle] | TextStyle[keyof TextStyle] | ImageStyle[keyof ImageStyle]
|
46
|
+
export type NestedStyle = Record<keyof UnistylesBreakpoints | symbol, RNValue>
|
47
|
+
export type NestedStylePairs = Array<[keyof UnistylesBreakpoints | symbol, RNValue]>
|
48
|
+
export type UnistylesTheme = UnistylesThemes[keyof UnistylesThemes]
|
package/src/types/index.ts
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
export * from './normalizer'
|
2
|
-
export
|
2
|
+
export * from './unistyles'
|
3
|
+
export type { Optional, Nullable } from './common'
|
3
4
|
export type {
|
5
|
+
NestedStylePairs,
|
6
|
+
UnistylesTheme,
|
4
7
|
ScreenSize,
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
} from './breakpoints'
|
8
|
+
NestedStyle,
|
9
|
+
RNValue,
|
10
|
+
RNStyle
|
11
|
+
} from './core'
|
12
|
+
export type { StyleSheetWithSuperPowers, StyleSheet, AllAvailableKeys } from './stylesheet'
|
13
|
+
export type { ReactNativeStyleSheet } from './breakpoints'
|
14
|
+
export type { ExtractVariantNames } from './variants'
|
15
|
+
export type { UnistylesPlugin } from './plugin'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import type { ImageStyle, TextStyle, ViewStyle } from 'react-native'
|
2
|
+
import type { ShadowOffset, TransformStyles, UnistylesTheme } from './core'
|
3
|
+
import type { UnistylesBreakpoints } from '../global'
|
4
|
+
|
5
|
+
// these props are treated differently to nest breakpoints and media queries
|
6
|
+
type NestedKeys = 'shadowOffset' | 'transform' | 'textShadowOffset'
|
7
|
+
|
8
|
+
type UnistyleView = Omit<ViewStyle, NestedKeys>
|
9
|
+
type UnistyleText = Omit<TextStyle, NestedKeys>
|
10
|
+
type UnistyleImage = Omit<ImageStyle, NestedKeys>
|
11
|
+
|
12
|
+
type UnistyleNestedStyles = {
|
13
|
+
shadowOffset?: ToDeepUnistyles<ShadowOffset>,
|
14
|
+
textShadowOffset?: ToDeepUnistyles<ShadowOffset>,
|
15
|
+
transform?: Array<ToDeepUnistyles<TransformStyles>>
|
16
|
+
}
|
17
|
+
|
18
|
+
type Variants = {
|
19
|
+
variants?: {
|
20
|
+
[variantName: string]: {
|
21
|
+
[variant: string]: Omit<UnistylesValues, 'variants'>
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
export type ToDeepUnistyles<T> = {
|
27
|
+
[K in keyof T]?: T[K] | {
|
28
|
+
[key in BreakpointsOrMediaQueries]?: T[K]
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
type AllAvailableStyles = UnistyleView & UnistyleText & UnistyleImage & UnistyleNestedStyles
|
33
|
+
|
34
|
+
export type AllAvailableKeys = keyof (UnistyleView & UnistyleText & UnistyleImage)
|
35
|
+
export type BreakpointsOrMediaQueries = keyof UnistylesBreakpoints | symbol
|
36
|
+
|
37
|
+
export type UnistylesValues = {
|
38
|
+
[propName in AllAvailableKeys]?: AllAvailableStyles[propName] | {
|
39
|
+
[key in BreakpointsOrMediaQueries]?: AllAvailableStyles[propName]
|
40
|
+
}
|
41
|
+
} & Variants & {
|
42
|
+
[propName in NestedKeys]?: UnistyleNestedStyles[propName]
|
43
|
+
}
|
44
|
+
|
45
|
+
export type StyleSheet = {
|
46
|
+
[styleName: string]: UnistylesValues | ((...args: any) => UnistylesValues)
|
47
|
+
}
|
48
|
+
|
49
|
+
export type StyleSheetWithSuperPowers = ((theme: UnistylesTheme) => StyleSheet) | StyleSheet
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { UnistylesEventType, ScreenOrientation, IOSContentSizeCategory, AndroidContentSizeCategory } from '../common'
|
2
|
+
import type { UnistylesThemes, UnistylesBreakpoints } from '../global'
|
3
|
+
import type { ScreenSize } from './core'
|
4
|
+
import type { UnistylesPlugin } from './plugin'
|
5
|
+
|
6
|
+
export type ColorSchemeName = 'light' | 'dark' | 'unspecified'
|
7
|
+
|
8
|
+
export type UnistylesConfig = {
|
9
|
+
adaptiveThemes?: boolean,
|
10
|
+
initialTheme?: keyof UnistylesThemes,
|
11
|
+
plugins?: Array<UnistylesPlugin>,
|
12
|
+
experimentalCSSMediaQueries?: boolean
|
13
|
+
}
|
14
|
+
|
15
|
+
export type UnistylesBridge = {
|
16
|
+
// getters
|
17
|
+
screenWidth: number,
|
18
|
+
screenHeight: number,
|
19
|
+
enabledPlugins: Array<string>,
|
20
|
+
hasAdaptiveThemes: boolean,
|
21
|
+
themeName: keyof UnistylesThemes,
|
22
|
+
breakpoint: keyof UnistylesBreakpoints,
|
23
|
+
colorScheme: ColorSchemeName,
|
24
|
+
contentSizeCategory: IOSContentSizeCategory | AndroidContentSizeCategory,
|
25
|
+
sortedBreakpointPairs: Array<[keyof UnistylesBreakpoints, UnistylesBreakpoints[keyof UnistylesBreakpoints]]>,
|
26
|
+
|
27
|
+
// setters
|
28
|
+
themes: Array<keyof UnistylesThemes>,
|
29
|
+
useBreakpoints(breakpoints: UnistylesBreakpoints): void,
|
30
|
+
useTheme(name: keyof UnistylesThemes): void,
|
31
|
+
useAdaptiveThemes(enable: boolean): void,
|
32
|
+
addPlugin(pluginName: string, notify: boolean): void,
|
33
|
+
removePlugin(pluginName: string): void
|
34
|
+
}
|
35
|
+
|
36
|
+
export type UnistylesThemeEvent = {
|
37
|
+
type: UnistylesEventType.Theme,
|
38
|
+
payload: {
|
39
|
+
themeName: keyof UnistylesThemes
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
export type UnistylesMobileLayoutEvent = {
|
44
|
+
type: UnistylesEventType.Layout,
|
45
|
+
payload: {
|
46
|
+
screen: ScreenSize,
|
47
|
+
breakpoint: keyof UnistylesBreakpoints,
|
48
|
+
orientation: typeof ScreenOrientation[keyof typeof ScreenOrientation]
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
export type UnistylesPluginEvent = {
|
53
|
+
type: UnistylesEventType.Plugin
|
54
|
+
}
|
55
|
+
|
56
|
+
export type UnistylesDynamicTypeSizeEvent = {
|
57
|
+
type: UnistylesEventType.DynamicTypeSize,
|
58
|
+
payload: {
|
59
|
+
contentSizeCategory: IOSContentSizeCategory | AndroidContentSizeCategory
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
export type UnistylesEvents = UnistylesThemeEvent | UnistylesMobileLayoutEvent | UnistylesPluginEvent | UnistylesDynamicTypeSizeEvent
|
@@ -0,0 +1,19 @@
|
|
1
|
+
export type ExtractVariantNames<T> = T extends (...args: any) => infer R
|
2
|
+
? ExtractVariantKeys<R>
|
3
|
+
: ExtractVariantKeys<T>
|
4
|
+
|
5
|
+
type ExtractVariantKeys<T> = T extends object
|
6
|
+
? ExtractVariant<T[keyof T]>
|
7
|
+
: never
|
8
|
+
|
9
|
+
type ExtractSubVariantKeys<T> = T extends object
|
10
|
+
? keyof Omit<T, 'default'> | undefined
|
11
|
+
: never
|
12
|
+
|
13
|
+
type ExtractVariant<T> = T extends (...args: any) => infer R
|
14
|
+
? R extends { variants: infer V }
|
15
|
+
? { [key in keyof V]?: ExtractSubVariantKeys<V[key]> }
|
16
|
+
: never
|
17
|
+
: T extends { variants: infer V }
|
18
|
+
? { [key in keyof V]?: ExtractSubVariantKeys<V[key]> }
|
19
|
+
: never
|
package/src/useStyles.ts
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
import { useMemo } from 'react'
|
2
|
+
import { StyleSheet } from 'react-native'
|
3
|
+
import { parseStyle, proxifyFunction, withPlugins } from './utils'
|
4
|
+
import { useCSS, useUnistyles, useVariants } from './hooks'
|
5
|
+
import type { UnistylesBreakpoints } from './global'
|
6
|
+
import type { ExtractVariantNames, ReactNativeStyleSheet, StyleSheetWithSuperPowers, UnistylesTheme } from './types'
|
7
|
+
import { unistyles } from './core'
|
8
|
+
import { isWeb } from './common'
|
9
|
+
|
10
|
+
type ParsedStylesheet<ST extends StyleSheetWithSuperPowers> = {
|
11
|
+
theme: UnistylesTheme,
|
12
|
+
breakpoint: keyof UnistylesBreakpoints,
|
13
|
+
styles: ReactNativeStyleSheet<ST>
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Hook that enables all the features of Unistyles
|
18
|
+
* @param stylesheet - The stylesheet with superpowers to be used
|
19
|
+
* @param variantsMap - The map of variants to be used
|
20
|
+
* @returns - The theme, current breakpoint and RN compatible styles
|
21
|
+
*/
|
22
|
+
export const useStyles = <ST extends StyleSheetWithSuperPowers>(
|
23
|
+
stylesheet?: ST,
|
24
|
+
variantsMap?: ExtractVariantNames<typeof stylesheet>
|
25
|
+
): ParsedStylesheet<ST> => {
|
26
|
+
const { theme, layout, plugins } = useUnistyles()
|
27
|
+
const variants = useVariants(variantsMap)
|
28
|
+
const parsedStyles = useMemo(() => typeof stylesheet === 'function'
|
29
|
+
? stylesheet(theme)
|
30
|
+
: stylesheet, [theme, stylesheet, layout])
|
31
|
+
|
32
|
+
const dynamicStyleSheet = useMemo(() => Object
|
33
|
+
.entries(parsedStyles || {})
|
34
|
+
.reduce((acc, [key, value]) => {
|
35
|
+
if (typeof value === 'function') {
|
36
|
+
return {
|
37
|
+
...acc,
|
38
|
+
[key]: proxifyFunction(key, value, variants)
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
return StyleSheet.create({
|
43
|
+
...acc,
|
44
|
+
[key]: withPlugins(key, parseStyle(
|
45
|
+
value,
|
46
|
+
variants,
|
47
|
+
!isWeb || !unistyles.registry.config.experimentalCSSMediaQueries)
|
48
|
+
)
|
49
|
+
})
|
50
|
+
}, {}), [parsedStyles, variants, plugins]
|
51
|
+
)
|
52
|
+
|
53
|
+
useCSS(dynamicStyleSheet as ReactNativeStyleSheet<ST>)
|
54
|
+
|
55
|
+
return {
|
56
|
+
theme,
|
57
|
+
breakpoint: layout.breakpoint,
|
58
|
+
styles: dynamicStyleSheet as ReactNativeStyleSheet<ST>
|
59
|
+
}
|
60
|
+
}
|
package/src/utils/breakpoints.ts
CHANGED
@@ -1,140 +1,44 @@
|
|
1
|
-
import {
|
2
|
-
import type {
|
3
|
-
import {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
*
|
16
|
-
* @template B - An object type where keys are strings and values are numbers.
|
17
|
-
* @param {B} breakpoints - The breakpoints object to be sorted and validated.
|
18
|
-
* @returns {B} A new object with sorted and validated breakpoints.
|
19
|
-
*
|
20
|
-
* @example
|
21
|
-
* const input = { md: 768, lg: 1024, sm: 0 }
|
22
|
-
* sortAndValidateBreakpoints(input) // returns { sm: 0, md: 768, lg: 1024 }
|
23
|
-
*/
|
24
|
-
export const sortAndValidateBreakpoints = <B extends Breakpoints>(breakpoints: B): B => {
|
25
|
-
const sortedPairs = Object
|
26
|
-
.entries(breakpoints)
|
27
|
-
.sort((breakpoint1, breakpoint2) => {
|
28
|
-
const [, value1] = breakpoint1
|
29
|
-
const [, value2] = breakpoint2
|
30
|
-
|
31
|
-
return value1 - value2
|
32
|
-
})
|
33
|
-
|
34
|
-
const sortedBreakpoints = Object.freeze(Object.fromEntries(sortedPairs)) as B
|
35
|
-
const breakpointValues = Object.values(sortedBreakpoints)
|
36
|
-
const [firstBreakpoint] = breakpointValues
|
37
|
-
|
38
|
-
if (firstBreakpoint !== 0) {
|
39
|
-
throwError('first breakpoint must start with 0')
|
40
|
-
}
|
41
|
-
|
42
|
-
if (breakpointValues.length !== new Set(breakpointValues).size) {
|
43
|
-
throwError('breakpoint values are duplicated')
|
1
|
+
import { unistyles } from '../core'
|
2
|
+
import type { Optional, RNValue } from '../types'
|
3
|
+
import type { UnistylesBreakpoints } from '../global'
|
4
|
+
import { ScreenOrientation, isMobile } from '../common'
|
5
|
+
import { getKeyForUnistylesMediaQuery } from './mqParser'
|
6
|
+
|
7
|
+
export const getValueForBreakpoint = (value: Record<string, RNValue>): Optional<RNValue> => {
|
8
|
+
const customMediaQueryKey = getKeyForUnistylesMediaQuery(
|
9
|
+
Object.entries(value),
|
10
|
+
unistyles.runtime.screen
|
11
|
+
) as keyof typeof value
|
12
|
+
|
13
|
+
if (customMediaQueryKey) {
|
14
|
+
return value[customMediaQueryKey]
|
44
15
|
}
|
45
16
|
|
46
|
-
|
47
|
-
}
|
48
|
-
|
49
|
-
/**
|
50
|
-
* Determines the appropriate breakpoint key for a given screen width based on provided breakpoints.
|
51
|
-
*
|
52
|
-
* This function takes a screen width and an object of breakpoints. It returns the key of the breakpoint
|
53
|
-
* that the screen width falls into. The breakpoints are assumed to be sorted in ascending order.
|
54
|
-
*
|
55
|
-
* @template B - An object type where keys are strings and values are numbers representing screen widths.
|
56
|
-
* @param {number} width - The screen width to determine the breakpoint for.
|
57
|
-
* @param breakpointEntries - sorted pairs of breakpoints
|
58
|
-
* @returns {keyof B & string} The key of the breakpoint that the screen width falls into.
|
59
|
-
*
|
60
|
-
* @example
|
61
|
-
* const breakpoints = { sm: 0, md: 768, lg: 1024 }
|
62
|
-
* getBreakpointFromScreenWidth(800, breakpoints) // returns 'md'
|
63
|
-
*/
|
64
|
-
export const getBreakpointFromScreenWidth = <B extends Breakpoints>(width: number, breakpointEntries: SortedBreakpointEntries<B>): keyof B & string => {
|
65
|
-
const [key] = breakpointEntries
|
66
|
-
.find(([, value], index, otherBreakpoints) => {
|
67
|
-
const minVal = value
|
68
|
-
const maxVal = otherBreakpoints[index + 1]?.[1]
|
69
|
-
|
70
|
-
if (!maxVal) {
|
71
|
-
return true
|
72
|
-
}
|
73
|
-
|
74
|
-
return width >= minVal && width < maxVal
|
75
|
-
}) as [keyof B & string, number]
|
17
|
+
const hasBreakpoints = unistyles.registry.sortedBreakpointPairs.length > 0
|
76
18
|
|
77
|
-
|
78
|
-
|
19
|
+
if (!hasBreakpoints && isMobile && (ScreenOrientation.Landscape in value || ScreenOrientation.Portrait in value)) {
|
20
|
+
return value[unistyles.runtime.orientation]
|
21
|
+
}
|
79
22
|
|
80
|
-
|
81
|
-
* Retrieves the value associated with a given breakpoint or custom media query based on the provided screen size.
|
82
|
-
*
|
83
|
-
* The function first checks for custom media queries. If a matching custom media query is found, its associated value is returned.
|
84
|
-
* If no custom media query matches, the function then checks for a direct breakpoint match.
|
85
|
-
* If there's no direct breakpoint match, the function simulates CSS cascading to find the closest matching breakpoint.
|
86
|
-
*
|
87
|
-
* @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
|
88
|
-
*
|
89
|
-
* @param {Record<keyof B & string, string | number>} value - An object containing values associated with breakpoints or custom media queries.
|
90
|
-
* @param {keyof B & string} breakpoint - The breakpoint name to check against.
|
91
|
-
* @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
|
92
|
-
* @param breakpointPairs - sorted pairs of breakpoints
|
93
|
-
*
|
94
|
-
* @returns {string | number | undefined} Returns the value associated with the matching breakpoint or custom media query, or `undefined` if no match is found.
|
95
|
-
*
|
96
|
-
* @example
|
97
|
-
*
|
98
|
-
* const values = { ':w[200]': 'value1', sm: 'value2', md: 'value3' }
|
99
|
-
* const screenSize = { width: 250, height: 400 }
|
100
|
-
* const breakpoints = { sm: 300, md: 600, lg: 900 }
|
101
|
-
*
|
102
|
-
* getValueForBreakpoint(values, 'sm', screenSize, breakpoints); // 'value1'
|
103
|
-
*/
|
104
|
-
export const getValueForBreakpoint = <B extends Breakpoints>(
|
105
|
-
value: Record<keyof B & string, string | number | undefined>,
|
106
|
-
breakpoint: keyof B & string,
|
107
|
-
screenSize: ScreenSize,
|
108
|
-
breakpointPairs: SortedBreakpointEntries<B>
|
109
|
-
): string | number | undefined => {
|
110
|
-
// the highest priority is for custom media queries
|
111
|
-
const customMediaQueries = Object
|
112
|
-
.entries(value)
|
113
|
-
.filter(([key]) => isMediaQuery(key))
|
114
|
-
const customMediaQueryKey = getKeyForCustomMediaQuery(customMediaQueries, screenSize)
|
23
|
+
const breakpoint = unistyles.runtime.breakpoint
|
115
24
|
|
116
|
-
if (
|
117
|
-
return
|
25
|
+
if (!breakpoint) {
|
26
|
+
return undefined
|
118
27
|
}
|
119
28
|
|
120
|
-
|
121
|
-
const unifiedKey = breakpoint
|
122
|
-
const directBreakpoint = value[unifiedKey]
|
29
|
+
const directBreakpoint = value[breakpoint]
|
123
30
|
|
124
|
-
|
125
|
-
if (directBreakpoint || (unifiedKey in value)) {
|
31
|
+
if (directBreakpoint || (breakpoint in value)) {
|
126
32
|
return directBreakpoint
|
127
33
|
}
|
128
34
|
|
129
|
-
|
130
|
-
const
|
131
|
-
.findIndex(([key]) => key ===
|
35
|
+
const breakpointPairs = unistyles.registry.sortedBreakpointPairs
|
36
|
+
const currentBreakpointIndex = breakpointPairs
|
37
|
+
.findIndex(([key]) => key === breakpoint)
|
132
38
|
|
133
39
|
const availableBreakpoints = breakpointPairs
|
134
|
-
.filter(([key], index) => index <
|
40
|
+
.filter(([key], index) => index < currentBreakpointIndex && key in value)
|
135
41
|
.map(([key]) => key)
|
136
42
|
|
137
|
-
return
|
138
|
-
? value[availableBreakpoints[availableBreakpoints.length - 1] as keyof B & string]
|
139
|
-
: undefined
|
43
|
+
return value[availableBreakpoints[availableBreakpoints.length - 1] as keyof UnistylesBreakpoints & string]
|
140
44
|
}
|