react-native-unistyles 3.0.0-alpha.4 → 3.0.0-alpha.41
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/README.md +7 -0
- package/Unistyles.podspec +1 -1
- package/android/CMakeLists.txt +22 -45
- package/android/build.gradle +16 -5
- package/android/src/main/cxx/NativeUnistylesModule.cpp +71 -0
- package/android/src/main/cxx/NativeUnistylesModule.h +42 -0
- package/android/src/main/cxx/cpp-adapter.cpp +8 -86
- package/android/src/main/java/com/unistyles/Equatable.kt +61 -0
- package/android/src/main/java/com/unistyles/NativePlatform+android.kt +294 -0
- package/android/src/main/java/com/unistyles/NativePlatform+insets.kt +152 -0
- package/android/src/main/java/com/unistyles/NativePlatform+listener.kt +59 -0
- package/android/src/main/java/com/unistyles/UnistylesModule.kt +51 -0
- package/android/src/main/java/com/unistyles/UnistylesPackage.kt +16 -14
- package/cxx/NativePlatform.h +11 -0
- package/cxx/common/Constants.h +4 -0
- package/cxx/common/Helpers.h +140 -5
- package/cxx/core/HostStyle.cpp +10 -6
- package/cxx/core/HostStyle.h +4 -0
- package/cxx/core/StyleSheet.h +0 -2
- package/cxx/core/StyleSheetRegistry.cpp +9 -17
- package/cxx/core/StyleSheetRegistry.h +3 -4
- package/cxx/core/Unistyle.h +8 -11
- package/cxx/core/UnistyleData.h +24 -0
- package/cxx/core/UnistyleWrapper.h +108 -13
- package/cxx/core/UnistylesCommitHook.cpp +14 -15
- package/cxx/core/UnistylesCommitHook.h +6 -11
- package/cxx/core/UnistylesCommitShadowNode.h +13 -0
- package/cxx/core/UnistylesMountHook.cpp +28 -0
- package/cxx/core/UnistylesMountHook.h +27 -0
- package/cxx/core/UnistylesRegistry.cpp +123 -83
- package/cxx/core/UnistylesRegistry.h +16 -14
- package/cxx/core/UnistylesState.cpp +29 -8
- package/cxx/core/UnistylesState.h +5 -2
- package/cxx/hybridObjects/HybridNavigationBar.cpp +0 -4
- package/cxx/hybridObjects/HybridNavigationBar.h +3 -4
- package/cxx/hybridObjects/HybridShadowRegistry.cpp +19 -11
- package/cxx/hybridObjects/HybridStatusBar.cpp +0 -4
- package/cxx/hybridObjects/HybridStatusBar.h +3 -4
- package/cxx/hybridObjects/HybridStyleSheet.cpp +154 -23
- package/cxx/hybridObjects/HybridStyleSheet.h +27 -5
- package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +96 -14
- package/cxx/hybridObjects/HybridUnistylesRuntime.h +19 -3
- package/cxx/parser/Parser.cpp +249 -177
- package/cxx/parser/Parser.h +12 -15
- package/cxx/shadowTree/ShadowLeafUpdate.h +3 -1
- package/cxx/shadowTree/ShadowTrafficController.h +71 -0
- package/cxx/shadowTree/ShadowTreeManager.cpp +28 -19
- package/cxx/shadowTree/ShadowTreeManager.h +3 -2
- package/ios/Equatable.swift +2 -1
- package/ios/Extensions.swift +3 -1
- package/ios/NativePlatform+ios.swift +34 -9
- package/ios/NativePlatform+keyboard.swift +83 -0
- package/ios/NativePlatformListener+ios.swift +36 -24
- package/ios/Unistyles.h +1 -0
- package/ios/UnistylesModuleOnLoad.h +8 -2
- package/ios/UnistylesModuleOnLoad.mm +9 -1
- package/lib/commonjs/components/Display.js +18 -0
- package/lib/commonjs/components/Display.js.map +1 -0
- package/lib/commonjs/components/Hide.js +18 -0
- package/lib/commonjs/components/Hide.js.map +1 -0
- package/lib/commonjs/components/index.js +20 -0
- package/lib/commonjs/components/index.js.map +1 -0
- package/lib/commonjs/components/useMedia.js +59 -0
- package/lib/commonjs/components/useMedia.js.map +1 -0
- package/lib/commonjs/components/useMedia.web.js +43 -0
- package/lib/commonjs/components/useMedia.web.js.map +1 -0
- package/lib/commonjs/core/createUnistylesComponent.js +79 -0
- package/lib/commonjs/core/createUnistylesComponent.js.map +1 -0
- package/lib/commonjs/core/createUnistylesComponent.native.js +82 -0
- package/lib/commonjs/core/createUnistylesComponent.native.js.map +1 -0
- package/lib/commonjs/core/index.js +13 -0
- package/lib/commonjs/core/index.js.map +1 -0
- package/lib/commonjs/index.js +21 -11
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mq.js +25 -12
- package/lib/commonjs/mq.js.map +1 -1
- package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js +1 -0
- package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
- package/lib/commonjs/specs/NavigtionBar/index.js +0 -15
- package/lib/commonjs/specs/NavigtionBar/index.js.map +1 -1
- package/lib/commonjs/specs/ShadowRegistry/index.js +10 -6
- package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
- package/lib/commonjs/specs/StatusBar/index.js +0 -5
- package/lib/commonjs/specs/StatusBar/index.js.map +1 -1
- package/lib/commonjs/specs/StyleSheet/index.js +1 -0
- package/lib/commonjs/specs/StyleSheet/index.js.map +1 -1
- package/lib/commonjs/specs/UnistylesRuntime/index.js +1 -3
- package/lib/commonjs/specs/UnistylesRuntime/index.js.map +1 -1
- package/lib/commonjs/specs/index.js +7 -0
- package/lib/commonjs/specs/index.js.map +1 -1
- package/lib/commonjs/specs/index.web.js +1 -1
- package/lib/commonjs/types/stylesheet.js.map +1 -1
- package/lib/commonjs/utils.js +26 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/commonjs/web/convert/index.js +79 -0
- package/lib/commonjs/web/convert/index.js.map +1 -0
- package/lib/commonjs/web/convert/module.d.js +2 -0
- package/lib/commonjs/web/convert/module.d.js.map +1 -0
- package/lib/commonjs/web/convert/object/boxShadow.js +59 -0
- package/lib/commonjs/web/convert/object/boxShadow.js.map +1 -0
- package/lib/commonjs/web/convert/object/filter.js +42 -0
- package/lib/commonjs/web/convert/object/filter.js.map +1 -0
- package/lib/commonjs/web/convert/object/index.js +39 -0
- package/lib/commonjs/web/convert/object/index.js.map +1 -0
- package/lib/commonjs/web/convert/object/objectStyle.js +56 -0
- package/lib/commonjs/web/convert/object/objectStyle.js.map +1 -0
- package/lib/commonjs/web/convert/object/transform.js +27 -0
- package/lib/commonjs/web/convert/object/transform.js.map +1 -0
- package/lib/commonjs/web/convert/pseudo.js +10 -0
- package/lib/commonjs/web/convert/pseudo.js.map +1 -0
- package/lib/commonjs/web/convert/shadow/boxShadow.js +62 -0
- package/lib/commonjs/web/convert/shadow/boxShadow.js.map +1 -0
- package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js +38 -0
- package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
- package/lib/commonjs/web/convert/shadow/index.js +28 -0
- package/lib/commonjs/web/convert/shadow/index.js.map +1 -0
- package/lib/commonjs/web/convert/shadow/textShadow.js +59 -0
- package/lib/commonjs/web/convert/shadow/textShadow.js.map +1 -0
- package/lib/commonjs/web/convert/style.js +93 -0
- package/lib/commonjs/web/convert/style.js.map +1 -0
- package/lib/commonjs/web/convert/types.js +9 -0
- package/lib/commonjs/web/convert/types.js.map +1 -0
- package/lib/commonjs/web/convert/utils.js +59 -0
- package/lib/commonjs/web/convert/utils.js.map +1 -0
- package/lib/commonjs/web/create.js +49 -0
- package/lib/commonjs/web/create.js.map +1 -0
- package/lib/commonjs/web/index.js +60 -0
- package/lib/commonjs/web/index.js.map +1 -0
- package/lib/commonjs/web/listener.js +61 -0
- package/lib/commonjs/web/listener.js.map +1 -0
- package/lib/commonjs/web/mock.js +27 -0
- package/lib/commonjs/web/mock.js.map +1 -0
- package/lib/commonjs/web/registry.js +172 -0
- package/lib/commonjs/web/registry.js.map +1 -0
- package/lib/commonjs/web/runtime.js +173 -0
- package/lib/commonjs/web/runtime.js.map +1 -0
- package/lib/commonjs/web/shadowRegistry.js +142 -0
- package/lib/commonjs/web/shadowRegistry.js.map +1 -0
- package/lib/commonjs/web/state.js +73 -0
- package/lib/commonjs/web/state.js.map +1 -0
- package/lib/commonjs/web/utils/common.js +39 -0
- package/lib/commonjs/web/utils/common.js.map +1 -0
- package/lib/commonjs/web/utils/index.js +28 -0
- package/lib/commonjs/web/utils/index.js.map +1 -0
- package/lib/commonjs/web/utils/unistyle.js +85 -0
- package/lib/commonjs/web/utils/unistyle.js.map +1 -0
- package/lib/commonjs/web/variants/getVariants.js +39 -0
- package/lib/commonjs/web/variants/getVariants.js.map +1 -0
- package/lib/commonjs/web/variants/index.js +28 -0
- package/lib/commonjs/web/variants/index.js.map +1 -0
- package/lib/commonjs/web/variants/useVariants.js +59 -0
- package/lib/commonjs/web/variants/useVariants.js.map +1 -0
- package/lib/module/components/Display.js +13 -0
- package/lib/module/components/Display.js.map +1 -0
- package/lib/module/components/Hide.js +13 -0
- package/lib/module/components/Hide.js.map +1 -0
- package/lib/module/components/index.js +5 -0
- package/lib/module/components/index.js.map +1 -0
- package/lib/module/components/useMedia.js +54 -0
- package/lib/module/components/useMedia.js.map +1 -0
- package/lib/module/components/useMedia.web.js +38 -0
- package/lib/module/components/useMedia.web.js.map +1 -0
- package/lib/module/core/createUnistylesComponent.js +72 -0
- package/lib/module/core/createUnistylesComponent.js.map +1 -0
- package/lib/module/core/createUnistylesComponent.native.js +75 -0
- package/lib/module/core/createUnistylesComponent.native.js.map +1 -0
- package/lib/module/core/index.js +4 -0
- package/lib/module/core/index.js.map +1 -0
- package/lib/module/index.js +2 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/mq.js +21 -11
- package/lib/module/mq.js.map +1 -1
- package/lib/module/specs/NativePlatform/NativePlatform.nitro.js +1 -0
- package/lib/module/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
- package/lib/module/specs/NavigtionBar/index.js +0 -10
- package/lib/module/specs/NavigtionBar/index.js.map +1 -1
- package/lib/module/specs/ShadowRegistry/index.js +10 -6
- package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
- package/lib/module/specs/StatusBar/index.js +1 -6
- package/lib/module/specs/StatusBar/index.js.map +1 -1
- package/lib/module/specs/StyleSheet/index.js +1 -0
- package/lib/module/specs/StyleSheet/index.js.map +1 -1
- package/lib/module/specs/UnistylesRuntime/index.js +1 -3
- package/lib/module/specs/UnistylesRuntime/index.js.map +1 -1
- package/lib/module/specs/index.js +2 -1
- package/lib/module/specs/index.js.map +1 -1
- package/lib/module/specs/index.web.js +1 -1
- package/lib/module/specs/index.web.js.map +1 -1
- package/lib/module/types/stylesheet.js.map +1 -1
- package/lib/module/utils.js +21 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/module/web/convert/index.js +74 -0
- package/lib/module/web/convert/index.js.map +1 -0
- package/lib/module/web/convert/module.d.js +2 -0
- package/lib/module/web/convert/module.d.js.map +1 -0
- package/lib/module/web/convert/object/boxShadow.js +54 -0
- package/lib/module/web/convert/object/boxShadow.js.map +1 -0
- package/lib/module/web/convert/object/filter.js +37 -0
- package/lib/module/web/convert/object/filter.js.map +1 -0
- package/lib/module/web/convert/object/index.js +6 -0
- package/lib/module/web/convert/object/index.js.map +1 -0
- package/lib/module/web/convert/object/objectStyle.js +51 -0
- package/lib/module/web/convert/object/objectStyle.js.map +1 -0
- package/lib/module/web/convert/object/transform.js +22 -0
- package/lib/module/web/convert/object/transform.js.map +1 -0
- package/lib/module/web/convert/pseudo.js +5 -0
- package/lib/module/web/convert/pseudo.js.map +1 -0
- package/lib/module/web/convert/shadow/boxShadow.js +57 -0
- package/lib/module/web/convert/shadow/boxShadow.js.map +1 -0
- package/lib/module/web/convert/shadow/getShadowBreakpoints.js +33 -0
- package/lib/module/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
- package/lib/module/web/convert/shadow/index.js +5 -0
- package/lib/module/web/convert/shadow/index.js.map +1 -0
- package/lib/module/web/convert/shadow/textShadow.js +54 -0
- package/lib/module/web/convert/shadow/textShadow.js.map +1 -0
- package/lib/module/web/convert/style.js +88 -0
- package/lib/module/web/convert/style.js.map +1 -0
- package/lib/module/web/convert/types.js +5 -0
- package/lib/module/web/convert/types.js.map +1 -0
- package/lib/module/web/convert/utils.js +45 -0
- package/lib/module/web/convert/utils.js.map +1 -0
- package/lib/module/web/create.js +44 -0
- package/lib/module/web/create.js.map +1 -0
- package/lib/module/web/index.js +26 -0
- package/lib/module/web/index.js.map +1 -0
- package/lib/module/web/listener.js +57 -0
- package/lib/module/web/listener.js.map +1 -0
- package/lib/module/web/mock.js +23 -0
- package/lib/module/web/mock.js.map +1 -0
- package/lib/module/web/registry.js +168 -0
- package/lib/module/web/registry.js.map +1 -0
- package/lib/module/web/runtime.js +169 -0
- package/lib/module/web/runtime.js.map +1 -0
- package/lib/module/web/shadowRegistry.js +138 -0
- package/lib/module/web/shadowRegistry.js.map +1 -0
- package/lib/module/web/state.js +69 -0
- package/lib/module/web/state.js.map +1 -0
- package/lib/module/web/utils/common.js +28 -0
- package/lib/module/web/utils/common.js.map +1 -0
- package/lib/module/web/utils/index.js +5 -0
- package/lib/module/web/utils/index.js.map +1 -0
- package/lib/module/web/utils/unistyle.js +72 -0
- package/lib/module/web/utils/unistyle.js.map +1 -0
- package/lib/module/web/variants/getVariants.js +34 -0
- package/lib/module/web/variants/getVariants.js.map +1 -0
- package/lib/module/web/variants/index.js +5 -0
- package/lib/module/web/variants/index.js.map +1 -0
- package/lib/module/web/variants/useVariants.js +54 -0
- package/lib/module/web/variants/useVariants.js.map +1 -0
- package/lib/typescript/src/components/Display.d.ts +7 -0
- package/lib/typescript/src/components/Display.d.ts.map +1 -0
- package/lib/typescript/src/components/Hide.d.ts +7 -0
- package/lib/typescript/src/components/Hide.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +3 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -0
- package/lib/typescript/src/components/useMedia.d.ts +6 -0
- package/lib/typescript/src/components/useMedia.d.ts.map +1 -0
- package/lib/typescript/src/components/useMedia.web.d.ts +6 -0
- package/lib/typescript/src/components/useMedia.web.d.ts.map +1 -0
- package/lib/typescript/src/core/createUnistylesComponent.d.ts +8 -0
- package/lib/typescript/src/core/createUnistylesComponent.d.ts.map +1 -0
- package/lib/typescript/src/core/createUnistylesComponent.native.d.ts +8 -0
- package/lib/typescript/src/core/createUnistylesComponent.native.d.ts.map +1 -0
- package/lib/typescript/src/core/index.d.ts +2 -0
- package/lib/typescript/src/core/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/mq.d.ts +8 -0
- package/lib/typescript/src/mq.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts +7 -5
- package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts +0 -1
- package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/NavigtionBar/index.d.ts +1 -10
- package/lib/typescript/src/specs/NavigtionBar/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +4 -4
- package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/ShadowRegistry/types.d.ts +3 -0
- package/lib/typescript/src/specs/ShadowRegistry/types.d.ts.map +1 -1
- package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts +0 -1
- package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/StatusBar/index.d.ts +2 -4
- package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts +3 -1
- package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/StyleSheet/index.d.ts +3 -1
- package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts +1 -1
- package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts.map +1 -1
- package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts +3 -1
- package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/index.d.ts +4 -2
- package/lib/typescript/src/specs/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/index.web.d.ts +1 -1
- package/lib/typescript/src/specs/index.web.d.ts.map +1 -1
- package/lib/typescript/src/types/breakpoints.d.ts +11 -11
- package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
- package/lib/typescript/src/types/common.d.ts +1 -0
- package/lib/typescript/src/types/common.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/stylesheet.d.ts +6 -4
- package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
- package/lib/typescript/src/types/variants.d.ts +4 -1
- package/lib/typescript/src/types/variants.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +2 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/index.d.ts +3 -0
- package/lib/typescript/src/web/convert/index.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/object/boxShadow.d.ts +9 -0
- package/lib/typescript/src/web/convert/object/boxShadow.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/object/filter.d.ts +3 -0
- package/lib/typescript/src/web/convert/object/filter.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/object/index.d.ts +4 -0
- package/lib/typescript/src/web/convert/object/index.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/object/objectStyle.d.ts +5 -0
- package/lib/typescript/src/web/convert/object/objectStyle.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/object/transform.d.ts +3 -0
- package/lib/typescript/src/web/convert/object/transform.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/pseudo.d.ts +6 -0
- package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts +8 -0
- package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts +2 -0
- package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/shadow/index.d.ts +3 -0
- package/lib/typescript/src/web/convert/shadow/index.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/shadow/textShadow.d.ts +8 -0
- package/lib/typescript/src/web/convert/shadow/textShadow.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/style.d.ts +2 -0
- package/lib/typescript/src/web/convert/style.d.ts.map +1 -0
- package/lib/typescript/{web → src/web}/convert/types.d.ts +8 -2
- package/lib/typescript/src/web/convert/types.d.ts.map +1 -0
- package/lib/typescript/src/web/convert/utils.d.ts +12 -0
- package/lib/typescript/src/web/convert/utils.d.ts.map +1 -0
- package/lib/typescript/src/web/create.d.ts +1443 -0
- package/lib/typescript/{web → src/web}/create.d.ts.map +1 -1
- package/lib/typescript/src/web/index.d.ts +1459 -0
- package/lib/typescript/{web → src/web}/index.d.ts.map +1 -1
- package/lib/typescript/{web/listener → src/web}/listener.d.ts +5 -2
- package/lib/typescript/src/web/listener.d.ts.map +1 -0
- package/lib/typescript/src/web/mock.d.ts +5 -0
- package/lib/typescript/src/web/mock.d.ts.map +1 -0
- package/lib/typescript/src/web/registry.d.ts +24 -0
- package/lib/typescript/src/web/registry.d.ts.map +1 -0
- package/lib/typescript/{web → src/web}/runtime.d.ts +11 -10
- package/lib/typescript/src/web/runtime.d.ts.map +1 -0
- package/lib/typescript/src/web/shadowRegistry.d.ts +17 -0
- package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -0
- package/lib/typescript/src/web/state.d.ts +18 -0
- package/lib/typescript/src/web/state.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/common.d.ts +8 -0
- package/lib/typescript/src/web/utils/common.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/index.d.ts +3 -0
- package/lib/typescript/src/web/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/web/utils/unistyle.d.ts +20 -0
- package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -0
- package/lib/typescript/src/web/variants/getVariants.d.ts +3 -0
- package/lib/typescript/src/web/variants/getVariants.d.ts.map +1 -0
- package/lib/typescript/src/web/variants/index.d.ts +3 -0
- package/lib/typescript/src/web/variants/index.d.ts.map +1 -0
- package/lib/typescript/src/web/variants/useVariants.d.ts +3 -0
- package/lib/typescript/src/web/variants/useVariants.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JColorScheme.hpp +1 -1
- package/nitrogen/generated/android/c++/JFunc_void_UnistylesNativeMiniRuntime.hpp +57 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.hpp +69 -0
- package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +35 -34
- package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +15 -6
- package/nitrogen/generated/android/c++/JOrientation.hpp +1 -1
- package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +4 -1
- package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +9 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Dimensions.kt +1 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/{Func_void_std__vector_UnistyleDependency_.kt → Func_void_UnistylesNativeMiniRuntime.kt} +6 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.kt +46 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +25 -13
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Insets.kt +1 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +2 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistylesNativeMiniRuntime.kt +3 -1
- package/nitrogen/generated/android/unistyles+autolinking.cmake +13 -1
- package/nitrogen/generated/android/unistyles+autolinking.gradle +2 -0
- package/nitrogen/generated/android/{UnistylesOnLoad.cpp → unistylesOnLoad.cpp} +6 -4
- package/nitrogen/generated/android/{UnistylesOnLoad.hpp → unistylesOnLoad.hpp} +1 -1
- package/nitrogen/generated/ios/Unistyles+autolinking.rb +6 -4
- package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.cpp +25 -0
- package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.hpp +73 -38
- package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +1 -30
- package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +8 -8
- package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +4 -16
- package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +156 -115
- package/nitrogen/generated/ios/swift/UnistyleDependency.swift +4 -0
- package/nitrogen/generated/ios/swift/UnistylesNativeMiniRuntime.swift +16 -5
- package/nitrogen/generated/shared/c++/ColorScheme.hpp +2 -2
- package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.cpp +2 -2
- package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +6 -3
- package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.cpp +0 -1
- package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +3 -1
- package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +5 -0
- package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +3 -0
- package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.cpp +0 -1
- package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +3 -1
- package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +10 -4
- package/nitrogen/generated/shared/c++/Orientation.hpp +2 -2
- package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -1
- package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +10 -9
- package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +9 -8
- package/package.json +20 -30
- package/plugin/common.js +31 -3
- package/plugin/index.js +107 -18
- package/plugin/ref.js +140 -14
- package/plugin/style.js +208 -22
- package/plugin/stylesheet.js +53 -3
- package/plugin/variants.js +33 -0
- package/src/components/Display.tsx +12 -0
- package/src/components/Hide.tsx +12 -0
- package/src/components/index.ts +2 -0
- package/src/components/useMedia.ts +64 -0
- package/src/components/useMedia.web.ts +47 -0
- package/src/core/createUnistylesComponent.native.tsx +83 -0
- package/src/core/createUnistylesComponent.tsx +84 -0
- package/src/core/index.ts +1 -0
- package/src/index.ts +3 -12
- package/src/mq.ts +27 -9
- package/src/specs/NativePlatform/NativePlatform.nitro.ts +7 -5
- package/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.ts +0 -1
- package/src/specs/NavigtionBar/index.ts +1 -25
- package/src/specs/ShadowRegistry/index.ts +16 -10
- package/src/specs/ShadowRegistry/types.ts +4 -1
- package/src/specs/StatusBar/UnistylesStatusBar.nitro.ts +0 -1
- package/src/specs/StatusBar/index.ts +2 -12
- package/src/specs/StyleSheet/UnistylesStyleSheet.nitro.ts +4 -1
- package/src/specs/StyleSheet/index.ts +6 -1
- package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.ts +1 -1
- package/src/specs/UnistylesRuntime/index.ts +5 -4
- package/src/specs/index.ts +6 -2
- package/src/specs/index.web.ts +1 -1
- package/src/types/breakpoints.ts +25 -13
- package/src/types/common.ts +1 -0
- package/src/types/index.ts +1 -1
- package/src/types/stylesheet.ts +7 -5
- package/src/types/variants.ts +7 -1
- package/src/utils.ts +22 -0
- package/{web → src/web}/convert/index.ts +25 -25
- package/src/web/convert/object/boxShadow.ts +55 -0
- package/src/web/convert/object/filter.ts +39 -0
- package/src/web/convert/object/index.ts +3 -0
- package/src/web/convert/object/objectStyle.ts +69 -0
- package/src/web/convert/object/transform.ts +24 -0
- package/src/web/convert/pseudo.ts +137 -0
- package/src/web/convert/shadow/boxShadow.ts +50 -0
- package/src/web/convert/shadow/getShadowBreakpoints.ts +34 -0
- package/src/web/convert/shadow/index.ts +2 -0
- package/src/web/convert/shadow/textShadow.ts +48 -0
- package/{web → src/web}/convert/style.ts +61 -10
- package/{web → src/web}/convert/types.ts +9 -2
- package/{web → src/web}/convert/utils.ts +11 -5
- package/src/web/create.ts +48 -0
- package/{web → src/web}/index.ts +4 -3
- package/src/web/listener.ts +63 -0
- package/{web → src/web}/mock.ts +3 -14
- package/src/web/registry.ts +215 -0
- package/{web → src/web}/runtime.ts +32 -21
- package/src/web/shadowRegistry.ts +145 -0
- package/src/web/state.ts +94 -0
- package/src/web/utils/common.ts +45 -0
- package/src/web/utils/index.ts +2 -0
- package/src/web/utils/unistyle.ts +108 -0
- package/src/web/variants/getVariants.ts +42 -0
- package/src/web/variants/index.ts +2 -0
- package/src/web/variants/useVariants.ts +65 -0
- package/android/src/main/cxx/helpers.cpp +0 -105
- package/android/src/main/cxx/helpers.h +0 -16
- package/android/src/main/cxx/platform.cpp +0 -170
- package/android/src/main/cxx/platform.h +0 -20
- package/lib/typescript/example/App.d.ts +0 -4
- package/lib/typescript/example/App.d.ts.map +0 -1
- package/lib/typescript/example/unistyles.d.ts +0 -63
- package/lib/typescript/example/unistyles.d.ts.map +0 -1
- package/lib/typescript/expo-example/App.d.ts +0 -4
- package/lib/typescript/expo-example/App.d.ts.map +0 -1
- package/lib/typescript/expo-example/unistyles.d.ts +0 -63
- package/lib/typescript/expo-example/unistyles.d.ts.map +0 -1
- package/lib/typescript/web/convert/boxShadow.d.ts +0 -3
- package/lib/typescript/web/convert/boxShadow.d.ts.map +0 -1
- package/lib/typescript/web/convert/breakpoint.d.ts +0 -3
- package/lib/typescript/web/convert/breakpoint.d.ts.map +0 -1
- package/lib/typescript/web/convert/index.d.ts +0 -4
- package/lib/typescript/web/convert/index.d.ts.map +0 -1
- package/lib/typescript/web/convert/shadow.d.ts +0 -2
- package/lib/typescript/web/convert/shadow.d.ts.map +0 -1
- package/lib/typescript/web/convert/style.d.ts +0 -3
- package/lib/typescript/web/convert/style.d.ts.map +0 -1
- package/lib/typescript/web/convert/textShadow.d.ts +0 -3
- package/lib/typescript/web/convert/textShadow.d.ts.map +0 -1
- package/lib/typescript/web/convert/transform.d.ts +0 -5
- package/lib/typescript/web/convert/transform.d.ts.map +0 -1
- package/lib/typescript/web/convert/types.d.ts.map +0 -1
- package/lib/typescript/web/convert/utils.d.ts +0 -8
- package/lib/typescript/web/convert/utils.d.ts.map +0 -1
- package/lib/typescript/web/create.d.ts +0 -2449
- package/lib/typescript/web/index.d.ts +0 -2464
- package/lib/typescript/web/listener/index.d.ts +0 -2
- package/lib/typescript/web/listener/index.d.ts.map +0 -1
- package/lib/typescript/web/listener/listener.d.ts.map +0 -1
- package/lib/typescript/web/mock.d.ts +0 -14
- package/lib/typescript/web/mock.d.ts.map +0 -1
- package/lib/typescript/web/mq.d.ts +0 -4
- package/lib/typescript/web/mq.d.ts.map +0 -1
- package/lib/typescript/web/pseudo.d.ts +0 -4
- package/lib/typescript/web/pseudo.d.ts.map +0 -1
- package/lib/typescript/web/registry.d.ts +0 -12
- package/lib/typescript/web/registry.d.ts.map +0 -1
- package/lib/typescript/web/runtime.d.ts.map +0 -1
- package/lib/typescript/web/state.d.ts +0 -24
- package/lib/typescript/web/state.d.ts.map +0 -1
- package/lib/typescript/web/useVariants.d.ts +0 -3
- package/lib/typescript/web/useVariants.d.ts.map +0 -1
- package/lib/typescript/web/utils.d.ts +0 -18
- package/lib/typescript/web/utils.d.ts.map +0 -1
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency_.hpp +0 -60
- package/plugin/__tests__/dependencies.spec.js +0 -360
- package/plugin/__tests__/ref.spec.js +0 -991
- package/plugin/__tests__/stylesheet.spec.js +0 -396
- package/web/convert/boxShadow.ts +0 -72
- package/web/convert/breakpoint.ts +0 -21
- package/web/convert/shadow.ts +0 -68
- package/web/convert/textShadow.ts +0 -69
- package/web/convert/transform.ts +0 -89
- package/web/create.ts +0 -102
- package/web/listener/index.ts +0 -1
- package/web/listener/listener.ts +0 -33
- package/web/mq.ts +0 -19
- package/web/pseudo.ts +0 -11
- package/web/registry.ts +0 -41
- package/web/state.ts +0 -148
- package/web/useVariants.ts +0 -99
- package/web/utils.ts +0 -95
- /package/nitrogen/generated/android/{UnistylesOnLoad.kt → unistylesOnLoad.kt} +0 -0
- /package/{web → src/web}/convert/module.d.ts +0 -0
package/cxx/parser/Parser.cpp
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include "Parser.h"
|
|
2
|
+
#include "UnistyleWrapper.h"
|
|
2
3
|
|
|
3
4
|
using namespace margelo::nitro::unistyles;
|
|
4
5
|
using namespace facebook;
|
|
@@ -8,19 +9,19 @@ using Variants = std::vector<std::pair<std::string, std::string>>;
|
|
|
8
9
|
|
|
9
10
|
// called only once while processing StyleSheet.create
|
|
10
11
|
void parser::Parser::buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
|
|
11
|
-
jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet);
|
|
12
|
+
jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet, std::nullopt);
|
|
12
13
|
|
|
13
14
|
helpers::enumerateJSIObject(rt, unwrappedStyleSheet, [&](const std::string& styleKey, jsi::Value& propertyValue){
|
|
14
15
|
helpers::assertThat(rt, propertyValue.isObject(), "Unistyles: Style with name '" + styleKey + "' is not a function or object.");
|
|
15
16
|
|
|
16
17
|
jsi::Object styleValue = propertyValue.asObject(rt);
|
|
17
18
|
|
|
18
|
-
|
|
19
19
|
if (styleValue.isFunction(rt)) {
|
|
20
20
|
styleSheet->unistyles[styleKey] = std::make_shared<UnistyleDynamicFunction>(
|
|
21
21
|
UnistyleType::DynamicFunction,
|
|
22
22
|
styleKey,
|
|
23
|
-
styleValue
|
|
23
|
+
styleValue,
|
|
24
|
+
styleSheet
|
|
24
25
|
);
|
|
25
26
|
|
|
26
27
|
return;
|
|
@@ -29,12 +30,13 @@ void parser::Parser::buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet
|
|
|
29
30
|
styleSheet->unistyles[styleKey] = std::make_shared<Unistyle>(
|
|
30
31
|
UnistyleType::Object,
|
|
31
32
|
styleKey,
|
|
32
|
-
styleValue
|
|
33
|
+
styleValue,
|
|
34
|
+
styleSheet
|
|
33
35
|
);
|
|
34
36
|
});
|
|
35
37
|
}
|
|
36
38
|
|
|
37
|
-
jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
|
|
39
|
+
jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime) {
|
|
38
40
|
// firstly we need to get object representation of user's StyleSheet
|
|
39
41
|
// StyleSheet can be a function or an object
|
|
40
42
|
|
|
@@ -45,7 +47,7 @@ jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<S
|
|
|
45
47
|
|
|
46
48
|
// StyleSheet is a function
|
|
47
49
|
auto& state = core::UnistylesRegistry::get().getState(rt);
|
|
48
|
-
auto theme = state.
|
|
50
|
+
auto theme = state.getCurrentJSTheme();
|
|
49
51
|
|
|
50
52
|
if (styleSheet->type == StyleSheetType::Themable) {
|
|
51
53
|
return styleSheet->rawValue
|
|
@@ -56,7 +58,7 @@ jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<S
|
|
|
56
58
|
|
|
57
59
|
// stylesheet also has a mini runtime dependency
|
|
58
60
|
// StyleSheetType::ThemableWithMiniRuntime
|
|
59
|
-
auto miniRuntime = this->_unistylesRuntime->getMiniRuntimeAsValue(rt);
|
|
61
|
+
auto miniRuntime = this->_unistylesRuntime->getMiniRuntimeAsValue(rt, maybeMiniRuntime);
|
|
60
62
|
|
|
61
63
|
return styleSheet->rawValue
|
|
62
64
|
.asFunction(rt)
|
|
@@ -68,14 +70,14 @@ jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<S
|
|
|
68
70
|
void parser::Parser::parseUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
|
|
69
71
|
for (const auto& [_, unistyle] : styleSheet->unistyles) {
|
|
70
72
|
if (unistyle->type == core::UnistyleType::Object) {
|
|
71
|
-
auto result = this->parseFirstLevel(rt, unistyle,
|
|
73
|
+
auto result = this->parseFirstLevel(rt, unistyle, std::nullopt);
|
|
72
74
|
|
|
73
75
|
unistyle->parsedStyle = std::move(result);
|
|
74
76
|
unistyle->seal();
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
if (unistyle->type == core::UnistyleType::DynamicFunction) {
|
|
78
|
-
auto hostFn = this->createDynamicFunctionProxy(rt, unistyle
|
|
80
|
+
auto hostFn = this->createDynamicFunctionProxy(rt, unistyle);
|
|
79
81
|
auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
|
|
80
82
|
|
|
81
83
|
// defer parsing dynamic functions
|
|
@@ -85,59 +87,106 @@ void parser::Parser::parseUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet
|
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
// rebuild all unistyles in StyleSheet that depends on variants
|
|
88
|
-
void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
|
|
90
|
+
void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Variants& variants) {
|
|
89
91
|
for (const auto& [_, unistyle] : styleSheet->unistyles) {
|
|
90
92
|
if (!unistyle->dependsOn(UnistyleDependency::VARIANTS)) {
|
|
91
93
|
continue;
|
|
92
94
|
}
|
|
93
95
|
|
|
94
|
-
this->rebuildUnistyle(rt, styleSheet, unistyle);
|
|
96
|
+
this->rebuildUnistyle(rt, styleSheet, unistyle, variants, std::nullopt);
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
// rebuild all unistyles that are affected by platform event
|
|
99
|
-
void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap, std::vector<std::shared_ptr<core::StyleSheet>>& styleSheets, std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime) {
|
|
102
|
+
std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value> parsedStyleSheets{};
|
|
103
|
+
std::unordered_map<std::shared_ptr<core::Unistyle>, bool> parsedUnistyles{};
|
|
104
|
+
|
|
105
|
+
// parse all stylesheets that depends on changes
|
|
106
|
+
for (auto styleSheet : styleSheets) {
|
|
107
|
+
parsedStyleSheets.emplace(styleSheet, this->unwrapStyleSheet(rt, styleSheet, maybeMiniRuntime));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// then parse all visible Unistyles managed by Unistyle
|
|
111
|
+
for (auto& [shadowNode, unistyles] : dependencyMap) {
|
|
112
|
+
auto styleSheet = unistyles.begin()->get()->unistyle->parent;
|
|
113
|
+
|
|
114
|
+
// stylesheet may be optional for exotic unistyles
|
|
115
|
+
if (styleSheet != nullptr && !parsedStyleSheets.contains(styleSheet)) {
|
|
116
|
+
parsedStyleSheets.emplace(styleSheet, this->unwrapStyleSheet(rt, styleSheet, maybeMiniRuntime));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
for (auto& unistyleData : unistyles) {
|
|
120
|
+
auto& unistyle = unistyleData->unistyle;
|
|
121
|
+
|
|
122
|
+
// for RN styles or inline styles, compute styles only once
|
|
123
|
+
if (unistyle->styleKey == helpers::EXOTIC_STYLE_KEY) {
|
|
124
|
+
if (!unistyleData->parsedStyle.has_value()) {
|
|
125
|
+
unistyleData->parsedStyle = jsi::Value(rt, unistyle->rawValue).asObject(rt);
|
|
126
|
+
|
|
127
|
+
if (!parsedUnistyles.contains(unistyle)) {
|
|
128
|
+
parsedUnistyles.emplace(unistyle, true);
|
|
129
|
+
}
|
|
108
130
|
}
|
|
109
131
|
|
|
110
|
-
|
|
111
|
-
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// reference Unistyles StyleSheet as we may mix them for one style
|
|
136
|
+
auto unistyleStyleSheet = unistyle->parent;
|
|
137
|
+
|
|
138
|
+
// we may hit now other StyleSheets that are referenced from affected nodes
|
|
139
|
+
if (unistyleStyleSheet != nullptr && !parsedStyleSheets.contains(unistyleStyleSheet)) {
|
|
140
|
+
parsedStyleSheets.emplace(unistyleStyleSheet, this->unwrapStyleSheet(rt, unistyleStyleSheet, maybeMiniRuntime));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// StyleSheet might have styles that are not affected
|
|
144
|
+
if (!parsedStyleSheets[unistyleStyleSheet].asObject(rt).hasProperty(rt, unistyle->styleKey.c_str())) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
unistyle->rawValue = parsedStyleSheets[unistyleStyleSheet].asObject(rt).getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
|
|
149
|
+
this->rebuildUnistyle(rt, unistyleStyleSheet, unistyle, unistyleData->variants, unistyleData->dynamicFunctionMetadata);
|
|
150
|
+
unistyleData->parsedStyle = jsi::Value(rt, unistyle->parsedStyle.value()).asObject(rt);
|
|
151
|
+
|
|
152
|
+
if (!parsedUnistyles.contains(unistyle)) {
|
|
153
|
+
parsedUnistyles.emplace(unistyle, true);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// parse whatever left in StyleSheets to be later accessible
|
|
159
|
+
// for createUnistylesComponent
|
|
160
|
+
for (auto styleSheet : styleSheets) {
|
|
161
|
+
for (auto& [_, unistyle] : styleSheet->unistyles) {
|
|
162
|
+
if (!parsedUnistyles.contains(unistyle)) {
|
|
163
|
+
unistyle->rawValue = parsedStyleSheets[styleSheet].asObject(rt).getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
|
|
112
164
|
}
|
|
113
165
|
}
|
|
114
166
|
}
|
|
115
167
|
}
|
|
116
168
|
|
|
117
169
|
// rebuild single unistyle
|
|
118
|
-
void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Unistyle::Shared unistyle) {
|
|
170
|
+
void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Unistyle::Shared unistyle, const Variants& variants, std::optional<std::vector<folly::dynamic>> metadata) {
|
|
119
171
|
if (unistyle->type == core::UnistyleType::Object) {
|
|
120
|
-
auto result = this->parseFirstLevel(rt, unistyle,
|
|
172
|
+
auto result = this->parseFirstLevel(rt, unistyle, variants);
|
|
121
173
|
|
|
122
174
|
unistyle->parsedStyle = std::move(result);
|
|
123
175
|
}
|
|
124
176
|
|
|
125
177
|
// for functions we need to call memoized function
|
|
126
178
|
// with last know arguments and parse it with new theme and mini runtime
|
|
127
|
-
if (unistyle->type == core::UnistyleType::DynamicFunction) {
|
|
179
|
+
if (unistyle->type == core::UnistyleType::DynamicFunction && metadata.has_value()) {
|
|
128
180
|
auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
|
|
129
|
-
auto maybeMetadata = unistyleFn->dynamicFunctionMetadata;
|
|
130
|
-
|
|
131
|
-
helpers::assertThat(rt, maybeMetadata.has_value(), "Unistyles: Your dynamic function '" + unistyleFn->styleKey + "' has no metadata and can't be processed.");
|
|
132
181
|
|
|
133
182
|
// convert arguments to jsi::Value
|
|
134
|
-
auto
|
|
183
|
+
auto dynamicFunctionMetadata = metadata.value();
|
|
135
184
|
std::vector<jsi::Value> args{};
|
|
136
|
-
|
|
137
|
-
args.reserve(3);
|
|
138
185
|
|
|
139
|
-
|
|
140
|
-
|
|
186
|
+
args.reserve(dynamicFunctionMetadata.size());
|
|
187
|
+
|
|
188
|
+
for (int i = 0; i < dynamicFunctionMetadata.size(); i++) {
|
|
189
|
+
folly::dynamic& arg = dynamicFunctionMetadata.at(i);
|
|
141
190
|
|
|
142
191
|
args.emplace_back(jsi::valueFromDynamic(rt, arg));
|
|
143
192
|
}
|
|
@@ -145,96 +194,35 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleShee
|
|
|
145
194
|
const jsi::Value *argStart = args.data();
|
|
146
195
|
|
|
147
196
|
// call cached function with memoized arguments
|
|
148
|
-
auto functionResult = unistyleFn->
|
|
197
|
+
auto functionResult = unistyleFn->rawValue
|
|
198
|
+
.asFunction(rt)
|
|
199
|
+
.call(rt, argStart, dynamicFunctionMetadata.size())
|
|
200
|
+
.asObject(rt);
|
|
149
201
|
|
|
150
202
|
unistyleFn->unprocessedValue = std::move(functionResult);
|
|
151
|
-
unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn,
|
|
203
|
+
unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
|
|
152
204
|
}
|
|
153
205
|
}
|
|
154
206
|
|
|
155
207
|
// convert dependency map to shadow tree updates
|
|
156
|
-
|
|
208
|
+
void parser::Parser::rebuildShadowLeafUpdates(jsi::Runtime& rt, core::DependencyMap& dependencyMap) {
|
|
157
209
|
shadow::ShadowLeafUpdates updates;
|
|
158
|
-
auto&
|
|
159
|
-
|
|
160
|
-
for (const auto& [styleSheet, map] : dependencyMap) {
|
|
161
|
-
for (const auto& [shadowNode, unistyles] : map) {
|
|
162
|
-
for (const auto& unistyle : unistyles) {
|
|
163
|
-
auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyle->parsedStyle.value());
|
|
164
|
-
|
|
165
|
-
if (updates.contains(shadowNode)) {
|
|
166
|
-
updates[shadowNode].emplace_back(std::move(rawProps));
|
|
167
|
-
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
updates.emplace(shadowNode, std::vector<RawProps>{std::move(rawProps)});
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return updates;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// convert jsi::Value arguments to folly::dynamic
|
|
180
|
-
std::vector<folly::dynamic> parser::Parser::parseDynamicFunctionArguments(jsi::Runtime& rt, size_t count, const jsi::Value* arguments) {
|
|
181
|
-
std::vector<folly::dynamic> parsedArgument{};
|
|
182
|
-
|
|
183
|
-
parsedArgument.reserve(3);
|
|
184
|
-
|
|
185
|
-
for (size_t i = 0; i < count; i++) {
|
|
186
|
-
auto& arg = arguments[i];
|
|
187
|
-
|
|
188
|
-
if (arg.isBool()) {
|
|
189
|
-
parsedArgument.push_back(folly::dynamic(arg.asBool()));
|
|
190
|
-
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (arg.isNumber()) {
|
|
195
|
-
parsedArgument.push_back(folly::dynamic(arg.asNumber()));
|
|
196
|
-
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
if (arg.isString()) {
|
|
201
|
-
parsedArgument.push_back(folly::dynamic(arg.asString(rt).utf8(rt)));
|
|
202
|
-
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (arg.isUndefined()) {
|
|
207
|
-
parsedArgument.push_back(folly::dynamic());
|
|
208
|
-
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (arg.isNull()) {
|
|
213
|
-
parsedArgument.push_back(folly::dynamic(nullptr));
|
|
214
|
-
|
|
215
|
-
continue;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (!arg.isObject()) {
|
|
219
|
-
continue;;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
auto argObj = arg.asObject(rt);
|
|
210
|
+
auto& registry = core::UnistylesRegistry::get();
|
|
223
211
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
212
|
+
for (const auto& [shadowNode, unistyles] : dependencyMap) {
|
|
213
|
+
// this step is required to parse string colors eg. #000000 to int representation
|
|
214
|
+
auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyles);
|
|
227
215
|
|
|
228
|
-
|
|
229
|
-
}
|
|
216
|
+
updates.emplace(shadowNode, std::move(rawProps));
|
|
230
217
|
}
|
|
231
218
|
|
|
232
|
-
|
|
219
|
+
registry.trafficController.setUpdates(updates);
|
|
220
|
+
registry.trafficController.resumeUnistylesTraffic();
|
|
233
221
|
}
|
|
234
222
|
|
|
235
223
|
// first level of StyleSheet, we can expect here different properties than on second level
|
|
236
224
|
// eg. variants, compoundVariants, mq, breakpoints etc.
|
|
237
|
-
jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, Variants
|
|
225
|
+
jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, std::optional<Variants> variants) {
|
|
238
226
|
// for objects - we simply operate on them
|
|
239
227
|
// for functions we need to work on the unprocessed result (object)
|
|
240
228
|
auto& style = unistyle->type == core::UnistyleType::Object
|
|
@@ -293,6 +281,18 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
|
|
|
293
281
|
return;
|
|
294
282
|
}
|
|
295
283
|
|
|
284
|
+
if (propertyName == "boxShadow" && propertyValueObject.isArray(rt)) {
|
|
285
|
+
parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), parseBoxShadow(rt, unistyle, propertyValueObject));
|
|
286
|
+
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (propertyName == "filter" && propertyValueObject.isArray(rt)) {
|
|
291
|
+
parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), parseFilters(rt, unistyle, propertyValueObject));
|
|
292
|
+
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
296
|
if (propertyName == "fontVariant" && propertyValueObject.isArray(rt)) {
|
|
297
297
|
parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), propertyValue);
|
|
298
298
|
|
|
@@ -317,15 +317,15 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
|
|
|
317
317
|
parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), this->parseSecondLevel(rt, unistyle, valueFromBreakpoint));
|
|
318
318
|
});
|
|
319
319
|
|
|
320
|
-
if (shouldParseVariants && !variants.empty()) {
|
|
320
|
+
if (shouldParseVariants && variants.has_value() && !variants.value().empty()) {
|
|
321
321
|
auto propertyValueObject = style.getProperty(rt, "variants").asObject(rt);
|
|
322
|
-
auto parsedVariant = this->parseVariants(rt, unistyle, propertyValueObject, variants);
|
|
322
|
+
auto parsedVariant = this->parseVariants(rt, unistyle, propertyValueObject, variants.value());
|
|
323
323
|
|
|
324
324
|
helpers::mergeJSIObjects(rt, parsedStyle, parsedVariant);
|
|
325
325
|
|
|
326
326
|
if (shouldParseCompoundVariants) {
|
|
327
327
|
auto compoundVariants = style.getProperty(rt, "compoundVariants").asObject(rt);
|
|
328
|
-
auto parsedCompoundVariants = this->parseCompoundVariants(rt, unistyle, compoundVariants, variants);
|
|
328
|
+
auto parsedCompoundVariants = this->parseCompoundVariants(rt, unistyle, compoundVariants, variants.value());
|
|
329
329
|
|
|
330
330
|
helpers::mergeJSIObjects(rt, parsedStyle, parsedCompoundVariants);
|
|
331
331
|
}
|
|
@@ -334,15 +334,35 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
|
|
|
334
334
|
return parsedStyle;
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
std::optional<std::string> parser::Parser::getUniquePressableIdFromArguments(jsi::Runtime& rt, const jsi::Value* args, size_t count) {
|
|
338
|
+
if (count == 0) {
|
|
339
|
+
return std::nullopt;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
auto& lastArg = args[count - 1];
|
|
343
|
+
|
|
344
|
+
if (!lastArg.isObject()) {
|
|
345
|
+
return std::nullopt;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
auto lastArgObj = lastArg.asObject(rt);
|
|
349
|
+
|
|
350
|
+
if (!lastArgObj.hasProperty(rt, helpers::UNI_PRESSABLE_ID.c_str())) {
|
|
351
|
+
return std::nullopt;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return lastArgObj.getProperty(rt, helpers::UNI_PRESSABLE_ID.c_str()).asString(rt).utf8(rt);
|
|
355
|
+
}
|
|
356
|
+
|
|
337
357
|
// function replaces original user dynamic function with additional logic to memoize arguments
|
|
338
|
-
jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unistyle::Shared unistyle
|
|
358
|
+
jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unistyle::Shared unistyle) {
|
|
339
359
|
auto unistylesRuntime = this->_unistylesRuntime;
|
|
340
360
|
|
|
341
361
|
return jsi::Function::createFromHostFunction(
|
|
342
362
|
rt,
|
|
343
363
|
jsi::PropNameID::forUtf8(rt, unistyle->styleKey),
|
|
344
364
|
1,
|
|
345
|
-
[this, unistylesRuntime, unistyle
|
|
365
|
+
[this, unistylesRuntime, unistyle](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) {
|
|
346
366
|
auto thisObject = thisVal.asObject(rt);
|
|
347
367
|
auto parser = parser::Parser(unistylesRuntime);
|
|
348
368
|
|
|
@@ -352,25 +372,38 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
|
|
|
352
372
|
// memoize metadata to call it later
|
|
353
373
|
auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
|
|
354
374
|
|
|
355
|
-
unistyleFn->dynamicFunctionMetadata = core::DynamicFunctionMetadata{
|
|
356
|
-
count,
|
|
357
|
-
this->parseDynamicFunctionArguments(rt, count, args)
|
|
358
|
-
};
|
|
359
|
-
|
|
360
375
|
unistyleFn->unprocessedValue = jsi::Value(rt, result).asObject(rt);
|
|
376
|
+
|
|
377
|
+
jsi::Value rawVariants = thisObject.hasProperty(rt, helpers::STYLE_VARIANTS.c_str())
|
|
378
|
+
? thisObject.getProperty(rt, helpers::STYLE_VARIANTS.c_str())
|
|
379
|
+
: jsi::Value::undefined();
|
|
380
|
+
std::optional<Variants> variants = rawVariants.isUndefined()
|
|
381
|
+
? std::nullopt
|
|
382
|
+
: std::optional<Variants>(helpers::variantsToPairs(rt, rawVariants.asObject(rt)));
|
|
383
|
+
|
|
361
384
|
unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
|
|
362
385
|
unistyleFn->seal();
|
|
363
386
|
|
|
364
|
-
|
|
387
|
+
jsi::Object style = jsi::Value(rt, unistyleFn->parsedStyle.value()).asObject(rt);
|
|
388
|
+
|
|
389
|
+
// include dependencies for createUnistylesComponent
|
|
390
|
+
style.setProperty(rt, "__proto__", generateUnistylesPrototype(rt, unistylesRuntime, unistyle, variants, helpers::functionArgumentsToArray(rt, args, count)));
|
|
391
|
+
|
|
392
|
+
// update shadow leaf updates to indicate newest changes
|
|
393
|
+
auto& registry = core::UnistylesRegistry::get();
|
|
394
|
+
|
|
395
|
+
registry.shadowLeafUpdateFromUnistyle(rt, unistyle, getUniquePressableIdFromArguments(rt, args, count));
|
|
396
|
+
|
|
397
|
+
return style;
|
|
365
398
|
});
|
|
366
399
|
}
|
|
367
400
|
|
|
368
|
-
// function
|
|
401
|
+
// function converts babel generated dependencies to C++ dependencies
|
|
369
402
|
std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &rt, jsi::Object&& dependencies) {
|
|
370
403
|
helpers::assertThat(rt, dependencies.isArray(rt), "Unistyles: Babel transform is invalid - unexpected type for dependencies.");
|
|
371
404
|
|
|
372
405
|
std::vector<UnistyleDependency> parsedDependencies{};
|
|
373
|
-
|
|
406
|
+
|
|
374
407
|
parsedDependencies.reserve(5);
|
|
375
408
|
|
|
376
409
|
helpers::iterateJSIArray(rt, dependencies.asArray(rt), [&](size_t i, jsi::Value& value){
|
|
@@ -384,12 +417,8 @@ std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &
|
|
|
384
417
|
|
|
385
418
|
// eg. [{ scale: 2 }, { translateX: 100 }]
|
|
386
419
|
jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
|
|
387
|
-
if (!obj.isArray(rt)) {
|
|
388
|
-
return jsi::Value::undefined();
|
|
389
|
-
}
|
|
390
|
-
|
|
391
420
|
std::vector<jsi::Value> parsedTransforms{};
|
|
392
|
-
|
|
421
|
+
|
|
393
422
|
parsedTransforms.reserve(2);
|
|
394
423
|
|
|
395
424
|
helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
|
|
@@ -417,6 +446,67 @@ jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared un
|
|
|
417
446
|
return result;
|
|
418
447
|
}
|
|
419
448
|
|
|
449
|
+
// eg [{offsetX: 5, offsetY: 5, blurRadius: 5, spreadDistance: 0, color: ‘rgba(255, 0, 0, 0.5)’}]
|
|
450
|
+
jsi::Value parser::Parser::parseBoxShadow(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
|
|
451
|
+
std::vector<jsi::Value> parsedBoxShadows{};
|
|
452
|
+
|
|
453
|
+
parsedBoxShadows.reserve(2);
|
|
454
|
+
|
|
455
|
+
helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
|
|
456
|
+
if (!value.isObject()) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
|
|
461
|
+
|
|
462
|
+
parsedBoxShadows.emplace_back(std::move(parsedResult));
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
// create jsi::Array result with correct box shadows
|
|
466
|
+
jsi::Array result = jsi::Array(rt, parsedBoxShadows.size());
|
|
467
|
+
|
|
468
|
+
for (size_t i = 0; i < parsedBoxShadows.size(); i++) {
|
|
469
|
+
result.setValueAtIndex(rt, i, parsedBoxShadows[i]);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return result;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// eg. [{ brightness: 0.5 }, { opacity: 0.25 }]
|
|
476
|
+
jsi::Value parser::Parser::parseFilters(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
|
|
477
|
+
std::vector<jsi::Value> parsedFilters{};
|
|
478
|
+
|
|
479
|
+
parsedFilters.reserve(2);
|
|
480
|
+
|
|
481
|
+
helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
|
|
482
|
+
if (!value.isObject()) {
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
|
|
487
|
+
|
|
488
|
+
// take only one filter per object
|
|
489
|
+
jsi::Array propertyNames = parsedResult.asObject(rt).getPropertyNames(rt);
|
|
490
|
+
size_t length = propertyNames.size(rt);
|
|
491
|
+
|
|
492
|
+
// ignore no filters
|
|
493
|
+
if (length == 0) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
parsedFilters.emplace_back(std::move(parsedResult));
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
// create jsi::Array result with correct filters
|
|
501
|
+
jsi::Array result = jsi::Array(rt, parsedFilters.size());
|
|
502
|
+
|
|
503
|
+
for (size_t i = 0; i < parsedFilters.size(); i++) {
|
|
504
|
+
result.setValueAtIndex(rt, i, parsedFilters[i]);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
return result;
|
|
508
|
+
}
|
|
509
|
+
|
|
420
510
|
// find value based on breakpoints and mq
|
|
421
511
|
jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
|
|
422
512
|
auto& registry = core::UnistylesRegistry::get();
|
|
@@ -438,7 +528,7 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
|
|
|
438
528
|
auto propertyName = propertyNames.getValueAtIndex(rt, i).asString(rt).utf8(rt);
|
|
439
529
|
auto propertyValue = obj.getProperty(rt, propertyName.c_str());
|
|
440
530
|
auto mq = core::UnistylesMQ{propertyName};
|
|
441
|
-
|
|
531
|
+
|
|
442
532
|
if (mq.isMQ()) {
|
|
443
533
|
unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
|
|
444
534
|
}
|
|
@@ -451,11 +541,11 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
|
|
|
451
541
|
|
|
452
542
|
// check orientation breakpoints if user didn't register own breakpoint
|
|
453
543
|
bool hasOrientationBreakpoint = obj.hasProperty(rt, currentOrientation);
|
|
454
|
-
|
|
544
|
+
|
|
455
545
|
if (hasOrientationBreakpoint) {
|
|
456
546
|
unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
|
|
457
547
|
}
|
|
458
|
-
|
|
548
|
+
|
|
459
549
|
if (!hasBreakpoints && hasOrientationBreakpoint) {
|
|
460
550
|
return obj.getProperty(rt, currentOrientation);
|
|
461
551
|
}
|
|
@@ -463,7 +553,7 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
|
|
|
463
553
|
if (!currentBreakpoint.has_value()) {
|
|
464
554
|
return jsi::Value::undefined();
|
|
465
555
|
}
|
|
466
|
-
|
|
556
|
+
|
|
467
557
|
unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
|
|
468
558
|
|
|
469
559
|
// if you're still here it means that there is no
|
|
@@ -509,7 +599,7 @@ jsi::Object parser::Parser::parseVariants(jsi::Runtime& rt, Unistyle::Shared uni
|
|
|
509
599
|
: std::nullopt;
|
|
510
600
|
|
|
511
601
|
// we've got a match, but we need to check some condition
|
|
512
|
-
auto styles = this->getStylesForVariant(rt, groupValue.asObject(rt), selectedVariant);
|
|
602
|
+
auto styles = this->getStylesForVariant(rt, groupName, groupValue.asObject(rt), selectedVariant, variants);
|
|
513
603
|
|
|
514
604
|
// oops, invalid variant
|
|
515
605
|
if (styles.isUndefined() || !styles.isObject()) {
|
|
@@ -525,13 +615,19 @@ jsi::Object parser::Parser::parseVariants(jsi::Runtime& rt, Unistyle::Shared uni
|
|
|
525
615
|
}
|
|
526
616
|
|
|
527
617
|
// helpers function to support 'default' variants
|
|
528
|
-
jsi::Value parser::Parser::getStylesForVariant(jsi::Runtime& rt, jsi::Object&& groupValue, std::optional<std::string> selectedVariant) {
|
|
618
|
+
jsi::Value parser::Parser::getStylesForVariant(jsi::Runtime& rt, const std::string groupName, jsi::Object&& groupValue, std::optional<std::string> selectedVariant, Variants& variants) {
|
|
529
619
|
// if there is no value, let's try 'default'
|
|
530
620
|
auto selectedVariantKey = selectedVariant.has_value()
|
|
531
621
|
? selectedVariant.value().c_str()
|
|
532
622
|
: "default";
|
|
623
|
+
auto hasKey = groupValue.hasProperty(rt, selectedVariantKey);
|
|
624
|
+
|
|
625
|
+
if (!hasKey || !selectedVariant.has_value()) {
|
|
626
|
+
// for no key, add 'default' selection to variants map
|
|
627
|
+
variants.emplace_back(groupName, selectedVariantKey);
|
|
628
|
+
}
|
|
533
629
|
|
|
534
|
-
if (
|
|
630
|
+
if (hasKey) {
|
|
535
631
|
return groupValue.getProperty(rt, selectedVariantKey);
|
|
536
632
|
}
|
|
537
633
|
|
|
@@ -565,34 +661,26 @@ jsi::Object parser::Parser::parseCompoundVariants(jsi::Runtime& rt, Unistyle::Sh
|
|
|
565
661
|
return parsedCompoundVariants;
|
|
566
662
|
}
|
|
567
663
|
|
|
568
|
-
// check every condition in compound variants,
|
|
664
|
+
// check every condition in compound variants, supports boolean variants
|
|
569
665
|
bool parser::Parser::shouldApplyCompoundVariants(jsi::Runtime& rt, const Variants& variants, jsi::Object& compoundVariant) {
|
|
570
666
|
if (variants.empty()) {
|
|
571
667
|
return false;
|
|
572
668
|
}
|
|
573
669
|
|
|
574
|
-
jsi::Array propertyNames = compoundVariant.getPropertyNames(rt);
|
|
575
|
-
size_t length = propertyNames.size(rt);
|
|
576
|
-
size_t allConditions = compoundVariant.hasProperty(rt, "styles")
|
|
577
|
-
? length - 1
|
|
578
|
-
: length;
|
|
579
|
-
|
|
580
|
-
if (allConditions != variants.size()) {
|
|
581
|
-
return false;
|
|
582
|
-
}
|
|
583
|
-
|
|
584
670
|
for (auto it = variants.cbegin(); it != variants.cend(); ++it) {
|
|
585
671
|
auto variantKey = it->first;
|
|
586
672
|
auto variantValue = it->second;
|
|
587
673
|
|
|
588
674
|
if (!compoundVariant.hasProperty(rt, variantKey.c_str())) {
|
|
589
|
-
|
|
675
|
+
continue;
|
|
590
676
|
}
|
|
591
677
|
|
|
592
678
|
auto property = compoundVariant.getProperty(rt, variantKey.c_str());
|
|
593
679
|
auto propertyName = property.isBool()
|
|
594
680
|
? (property.asBool() ? "true" : "false")
|
|
595
|
-
: property.
|
|
681
|
+
: property.isString()
|
|
682
|
+
? property.asString(rt).utf8(rt)
|
|
683
|
+
: "";
|
|
596
684
|
|
|
597
685
|
if (propertyName != variantValue) {
|
|
598
686
|
return false;
|
|
@@ -670,43 +758,27 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
|
|
|
670
758
|
return parsedStyle;
|
|
671
759
|
}
|
|
672
760
|
|
|
673
|
-
//
|
|
674
|
-
|
|
675
|
-
Variants pairs{};
|
|
676
|
-
|
|
677
|
-
helpers::enumerateJSIObject(rt, variants, [&](const std::string& variantName, jsi::Value& variantValue){
|
|
678
|
-
if (variantValue.isUndefined() || variantValue.isNull()) {
|
|
679
|
-
return;
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
if (variantValue.isBool()) {
|
|
683
|
-
pairs.emplace_back(std::make_pair(variantName, variantValue.asBool() ? "true" : "false"));
|
|
684
|
-
|
|
685
|
-
return;
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
if (variantValue.isString()) {
|
|
689
|
-
pairs.emplace_back(std::make_pair(variantName, variantValue.asString(rt).utf8(rt)));
|
|
690
|
-
}
|
|
691
|
-
});
|
|
692
|
-
|
|
693
|
-
return pairs;
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
// convert jsi::Object to RawValue with int colors
|
|
697
|
-
RawProps parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, jsi::Object& styles) {
|
|
761
|
+
// convert unistyles to folly with int colors
|
|
762
|
+
folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles) {
|
|
698
763
|
jsi::Object convertedStyles = jsi::Object(rt);
|
|
699
764
|
auto& state = core::UnistylesRegistry::get().getState(rt);
|
|
700
765
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
766
|
+
for (const auto& unistyleData : unistyles) {
|
|
767
|
+
// this can happen for exotic stylesheets
|
|
768
|
+
if (!unistyleData->parsedStyle.has_value()) {
|
|
769
|
+
return nullptr;
|
|
704
770
|
}
|
|
705
771
|
|
|
706
|
-
|
|
707
|
-
|
|
772
|
+
helpers::enumerateJSIObject(rt, unistyleData->parsedStyle.value(), [&](const std::string& propertyName, jsi::Value& propertyValue){
|
|
773
|
+
if (this->isColor(propertyName)) {
|
|
774
|
+
return convertedStyles.setProperty(rt, propertyName.c_str(), jsi::Value(state.parseColor(propertyValue)));
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
convertedStyles.setProperty(rt, propertyName.c_str(), propertyValue);
|
|
778
|
+
});
|
|
779
|
+
}
|
|
708
780
|
|
|
709
|
-
return
|
|
781
|
+
return jsi::dynamicFromValue(rt, std::move(convertedStyles));
|
|
710
782
|
}
|
|
711
783
|
|
|
712
784
|
// check is styleKey contains color
|