react-native-unistyles 3.0.0-alpha.9 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +30 -41
- 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 +3 -0
- package/cxx/common/Helpers.h +59 -6
- package/cxx/core/HostStyle.cpp +7 -2
- package/cxx/core/HostStyle.h +1 -1
- package/cxx/core/StyleSheet.h +0 -1
- package/cxx/core/Unistyle.h +8 -5
- package/cxx/core/UnistyleData.h +4 -3
- package/cxx/core/UnistyleWrapper.h +102 -7
- package/cxx/core/UnistylesCommitHook.cpp +14 -18
- 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 +108 -48
- package/cxx/core/UnistylesRegistry.h +10 -10
- 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 +18 -13
- package/cxx/hybridObjects/HybridStatusBar.cpp +0 -4
- package/cxx/hybridObjects/HybridStatusBar.h +3 -4
- package/cxx/hybridObjects/HybridStyleSheet.cpp +145 -19
- package/cxx/hybridObjects/HybridStyleSheet.h +27 -5
- package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +78 -11
- package/cxx/hybridObjects/HybridUnistylesRuntime.h +17 -3
- package/cxx/parser/Parser.cpp +200 -63
- package/cxx/parser/Parser.h +7 -5
- 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/Pressable.js +74 -0
- package/lib/commonjs/components/Pressable.js.map +1 -0
- package/lib/commonjs/components/Pressable.web.js +115 -0
- package/lib/commonjs/components/Pressable.web.js.map +1 -0
- package/lib/commonjs/components/index.js +27 -0
- package/lib/commonjs/components/index.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/getBoundArgs.js +18 -0
- package/lib/commonjs/core/getBoundArgs.js.map +1 -0
- package/lib/commonjs/core/getId.js +9 -0
- package/lib/commonjs/core/getId.js.map +1 -0
- package/lib/commonjs/core/index.js +27 -0
- package/lib/commonjs/core/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +13 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/useMedia.js +59 -0
- package/lib/commonjs/hooks/useMedia.js.map +1 -0
- package/lib/commonjs/hooks/useMedia.web.js +43 -0
- package/lib/commonjs/hooks/useMedia.web.js.map +1 -0
- package/lib/commonjs/index.js +28 -11
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mq.js +31 -18
- 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 +11 -8
- 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/TurboUnistyles/NativeTurboUnistyles.js +1 -2
- package/lib/commonjs/specs/TurboUnistyles/NativeTurboUnistyles.js.map +1 -1
- package/lib/commonjs/specs/UnistylesRuntime/index.js +0 -2
- 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 +0 -7
- package/lib/commonjs/specs/index.web.js.map +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 +27 -24
- package/lib/commonjs/web/convert/index.js.map +1 -1
- 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/{boxShadow.js → shadow/boxShadow.js} +22 -37
- 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/{textShadow.js → shadow/textShadow.js} +21 -35
- package/lib/commonjs/web/convert/shadow/textShadow.js.map +1 -0
- package/lib/commonjs/web/convert/style.js +11 -7
- package/lib/commonjs/web/convert/style.js.map +1 -1
- package/lib/commonjs/web/convert/types.js.map +1 -1
- package/lib/commonjs/web/convert/utils.js +8 -4
- package/lib/commonjs/web/convert/utils.js.map +1 -1
- package/lib/commonjs/web/create.js +35 -67
- package/lib/commonjs/web/create.js.map +1 -1
- package/lib/commonjs/web/index.js +18 -7
- package/lib/commonjs/web/index.js.map +1 -1
- package/lib/commonjs/web/listener.js +61 -0
- package/lib/commonjs/web/listener.js.map +1 -0
- package/lib/commonjs/web/mock.js +2 -12
- package/lib/commonjs/web/mock.js.map +1 -1
- package/lib/commonjs/web/registry.js +154 -19
- package/lib/commonjs/web/registry.js.map +1 -1
- package/lib/commonjs/web/runtime.js +22 -13
- package/lib/commonjs/web/runtime.js.map +1 -1
- package/lib/commonjs/web/shadowRegistry.js +143 -0
- package/lib/commonjs/web/shadowRegistry.js.map +1 -0
- package/lib/commonjs/web/state.js +31 -72
- package/lib/commonjs/web/state.js.map +1 -1
- 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 +77 -0
- package/lib/commonjs/web/utils/unistyle.js.map +1 -0
- package/lib/commonjs/web/{variants/getVariants.js → variants.js} +2 -2
- package/lib/commonjs/web/variants.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/Pressable.js +68 -0
- package/lib/module/components/Pressable.js.map +1 -0
- package/lib/module/components/Pressable.web.js +109 -0
- package/lib/module/components/Pressable.web.js.map +1 -0
- package/lib/module/components/index.js +6 -0
- package/lib/module/components/index.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/getBoundArgs.js +13 -0
- package/lib/module/core/getBoundArgs.js.map +1 -0
- package/lib/module/core/getId.js +4 -0
- package/lib/module/core/getId.js.map +1 -0
- package/lib/module/core/index.js +6 -0
- package/lib/module/core/index.js.map +1 -0
- package/lib/module/hooks/index.js +4 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useMedia.js +54 -0
- package/lib/module/hooks/useMedia.js.map +1 -0
- package/lib/module/hooks/useMedia.web.js +38 -0
- package/lib/module/hooks/useMedia.web.js.map +1 -0
- package/lib/module/index.js +2 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/mq.js +27 -17
- 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 +11 -8
- 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/TurboUnistyles/NativeTurboUnistyles.js +1 -2
- package/lib/module/specs/TurboUnistyles/NativeTurboUnistyles.js.map +1 -1
- package/lib/module/specs/UnistylesRuntime/index.js +0 -2
- 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 +0 -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 +23 -20
- package/lib/module/web/convert/index.js.map +1 -1
- 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 +11 -7
- package/lib/module/web/convert/style.js.map +1 -1
- package/lib/module/web/convert/types.js.map +1 -1
- package/lib/module/web/convert/utils.js +5 -3
- package/lib/module/web/convert/utils.js.map +1 -1
- package/lib/module/web/create.js +37 -69
- package/lib/module/web/create.js.map +1 -1
- package/lib/module/web/index.js +9 -3
- package/lib/module/web/index.js.map +1 -1
- package/lib/module/web/listener.js +57 -0
- package/lib/module/web/listener.js.map +1 -0
- package/lib/module/web/mock.js +1 -11
- package/lib/module/web/mock.js.map +1 -1
- package/lib/module/web/registry.js +155 -20
- package/lib/module/web/registry.js.map +1 -1
- package/lib/module/web/runtime.js +23 -14
- package/lib/module/web/runtime.js.map +1 -1
- package/lib/module/web/shadowRegistry.js +139 -0
- package/lib/module/web/shadowRegistry.js.map +1 -0
- package/lib/module/web/state.js +32 -73
- package/lib/module/web/state.js.map +1 -1
- 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 +65 -0
- package/lib/module/web/utils/unistyle.js.map +1 -0
- package/lib/module/web/{variants/getVariants.js → variants.js} +2 -2
- package/lib/module/web/variants.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/Pressable.d.ts +8 -0
- package/lib/typescript/src/components/Pressable.d.ts.map +1 -0
- package/lib/typescript/src/components/Pressable.web.d.ts +14 -0
- package/lib/typescript/src/components/Pressable.web.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +4 -0
- package/lib/typescript/src/components/index.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/getBoundArgs.d.ts +2 -0
- package/lib/typescript/src/core/getBoundArgs.d.ts.map +1 -0
- package/lib/typescript/src/core/getId.d.ts +2 -0
- package/lib/typescript/src/core/getId.d.ts.map +1 -0
- package/lib/typescript/src/core/index.d.ts +4 -0
- package/lib/typescript/src/core/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +2 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useMedia.d.ts +6 -0
- package/lib/typescript/src/hooks/useMedia.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useMedia.web.d.ts +6 -0
- package/lib/typescript/src/hooks/useMedia.web.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 +8 -6
- 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 +4 -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 +5 -3
- 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 +4 -2
- 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 +0 -2
- 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 +2 -0
- package/lib/typescript/src/types/common.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +2 -2
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/stylesheet.d.ts +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 +1 -2
- package/lib/typescript/src/web/convert/index.d.ts.map +1 -1
- 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 +1 -2
- package/lib/typescript/src/web/convert/style.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/types.d.ts +7 -1
- package/lib/typescript/src/web/convert/types.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/utils.d.ts +8 -4
- package/lib/typescript/src/web/convert/utils.d.ts.map +1 -1
- package/lib/typescript/src/web/create.d.ts +215 -1221
- package/lib/typescript/src/web/create.d.ts.map +1 -1
- package/lib/typescript/src/web/index.d.ts +223 -1222
- package/lib/typescript/src/web/index.d.ts.map +1 -1
- package/lib/typescript/src/web/{listener/listener.d.ts → listener.d.ts} +5 -2
- package/lib/typescript/src/web/listener.d.ts.map +1 -0
- package/lib/typescript/src/web/mock.d.ts +0 -9
- package/lib/typescript/src/web/mock.d.ts.map +1 -1
- package/lib/typescript/src/web/registry.d.ts +18 -6
- package/lib/typescript/src/web/registry.d.ts.map +1 -1
- package/lib/typescript/src/web/runtime.d.ts +6 -5
- package/lib/typescript/src/web/runtime.d.ts.map +1 -1
- 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 +3 -9
- package/lib/typescript/src/web/state.d.ts.map +1 -1
- 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 +19 -0
- package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -0
- package/lib/typescript/src/web/{variants/getVariants.d.ts → variants.d.ts} +2 -2
- package/lib/typescript/src/web/variants.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JColorScheme.hpp +2 -2
- 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 +2 -2
- package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +5 -2
- package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +9 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/ColorScheme.kt +5 -1
- 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/Orientation.kt +5 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +6 -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 +24 -37
- package/plugin/common.js +27 -2
- package/plugin/import.js +29 -3
- package/plugin/index.js +104 -15
- package/plugin/ref.js +50 -16
- package/plugin/style.js +443 -9
- package/plugin/stylesheet.js +10 -3
- package/src/components/Display.tsx +12 -0
- package/src/components/Hide.tsx +12 -0
- package/src/components/Pressable.tsx +89 -0
- package/src/components/Pressable.web.tsx +129 -0
- package/src/components/index.ts +3 -0
- package/src/core/createUnistylesComponent.native.tsx +83 -0
- package/src/core/createUnistylesComponent.tsx +84 -0
- package/src/core/getBoundArgs.ts +15 -0
- package/src/core/getId.ts +1 -0
- package/src/core/index.ts +3 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useMedia.ts +64 -0
- package/src/hooks/useMedia.web.ts +47 -0
- package/src/index.ts +3 -12
- package/src/mq.ts +33 -15
- package/src/specs/NativePlatform/NativePlatform.nitro.ts +8 -6
- package/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.ts +0 -1
- package/src/specs/NavigtionBar/index.ts +1 -25
- package/src/specs/ShadowRegistry/index.ts +17 -12
- package/src/specs/ShadowRegistry/types.ts +6 -2
- 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 +7 -3
- package/src/specs/TurboUnistyles/NativeTurboUnistyles.ts +1 -2
- package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.ts +2 -2
- package/src/specs/UnistylesRuntime/index.ts +4 -3
- package/src/specs/index.ts +6 -2
- package/src/specs/index.web.ts +0 -4
- package/src/types/breakpoints.ts +25 -13
- package/src/types/common.ts +2 -0
- package/src/types/index.ts +2 -2
- package/src/types/stylesheet.ts +7 -5
- package/src/types/variants.ts +7 -1
- package/src/utils.ts +22 -0
- package/src/web/convert/index.ts +24 -24
- 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/src/web/convert/style.ts +61 -10
- package/src/web/convert/types.ts +8 -1
- package/src/web/convert/utils.ts +13 -7
- package/src/web/create.ts +35 -83
- package/src/web/index.ts +9 -4
- package/src/web/listener.ts +65 -0
- package/src/web/mock.ts +1 -12
- package/src/web/registry.ts +202 -28
- package/src/web/runtime.ts +29 -18
- package/src/web/shadowRegistry.ts +149 -0
- package/src/web/state.ts +52 -87
- package/src/web/utils/common.ts +45 -0
- package/src/web/utils/index.ts +2 -0
- package/src/web/utils/unistyle.ts +94 -0
- package/src/web/{variants/getVariants.ts → variants.ts} +2 -2
- 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/commonjs/web/convert/boxShadow.js.map +0 -1
- package/lib/commonjs/web/convert/breakpoint.js +0 -25
- package/lib/commonjs/web/convert/breakpoint.js.map +0 -1
- package/lib/commonjs/web/convert/shadow.js +0 -68
- package/lib/commonjs/web/convert/shadow.js.map +0 -1
- package/lib/commonjs/web/convert/textShadow.js.map +0 -1
- package/lib/commonjs/web/convert/transform.js +0 -72
- package/lib/commonjs/web/convert/transform.js.map +0 -1
- package/lib/commonjs/web/listener/index.js +0 -13
- package/lib/commonjs/web/listener/index.js.map +0 -1
- package/lib/commonjs/web/listener/listener.js +0 -36
- package/lib/commonjs/web/listener/listener.js.map +0 -1
- package/lib/commonjs/web/mq.js +0 -23
- package/lib/commonjs/web/mq.js.map +0 -1
- package/lib/commonjs/web/pseudo.js +0 -11
- package/lib/commonjs/web/pseudo.js.map +0 -1
- package/lib/commonjs/web/utils.js +0 -78
- package/lib/commonjs/web/utils.js.map +0 -1
- package/lib/commonjs/web/variants/getVariants.js.map +0 -1
- package/lib/commonjs/web/variants/index.js +0 -28
- package/lib/commonjs/web/variants/index.js.map +0 -1
- package/lib/commonjs/web/variants/useVariants.js +0 -75
- package/lib/commonjs/web/variants/useVariants.js.map +0 -1
- package/lib/module/web/convert/boxShadow.js +0 -72
- package/lib/module/web/convert/boxShadow.js.map +0 -1
- package/lib/module/web/convert/breakpoint.js +0 -20
- package/lib/module/web/convert/breakpoint.js.map +0 -1
- package/lib/module/web/convert/shadow.js +0 -63
- package/lib/module/web/convert/shadow.js.map +0 -1
- package/lib/module/web/convert/textShadow.js +0 -68
- package/lib/module/web/convert/textShadow.js.map +0 -1
- package/lib/module/web/convert/transform.js +0 -67
- package/lib/module/web/convert/transform.js.map +0 -1
- package/lib/module/web/listener/index.js +0 -4
- package/lib/module/web/listener/index.js.map +0 -1
- package/lib/module/web/listener/listener.js +0 -31
- package/lib/module/web/listener/listener.js.map +0 -1
- package/lib/module/web/mq.js +0 -17
- package/lib/module/web/mq.js.map +0 -1
- package/lib/module/web/pseudo.js +0 -6
- package/lib/module/web/pseudo.js.map +0 -1
- package/lib/module/web/utils.js +0 -65
- package/lib/module/web/utils.js.map +0 -1
- package/lib/module/web/variants/getVariants.js.map +0 -1
- package/lib/module/web/variants/index.js +0 -5
- package/lib/module/web/variants/index.js.map +0 -1
- package/lib/module/web/variants/useVariants.js +0 -70
- package/lib/module/web/variants/useVariants.js.map +0 -1
- package/lib/typescript/example/App.d.ts +0 -4
- package/lib/typescript/example/App.d.ts.map +0 -1
- package/lib/typescript/example/Typography.d.ts +0 -11
- package/lib/typescript/example/Typography.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/src/web/convert/boxShadow.d.ts +0 -3
- package/lib/typescript/src/web/convert/boxShadow.d.ts.map +0 -1
- package/lib/typescript/src/web/convert/breakpoint.d.ts +0 -3
- package/lib/typescript/src/web/convert/breakpoint.d.ts.map +0 -1
- package/lib/typescript/src/web/convert/shadow.d.ts +0 -2
- package/lib/typescript/src/web/convert/shadow.d.ts.map +0 -1
- package/lib/typescript/src/web/convert/textShadow.d.ts +0 -3
- package/lib/typescript/src/web/convert/textShadow.d.ts.map +0 -1
- package/lib/typescript/src/web/convert/transform.d.ts +0 -5
- package/lib/typescript/src/web/convert/transform.d.ts.map +0 -1
- package/lib/typescript/src/web/listener/index.d.ts +0 -2
- package/lib/typescript/src/web/listener/index.d.ts.map +0 -1
- package/lib/typescript/src/web/listener/listener.d.ts.map +0 -1
- package/lib/typescript/src/web/mq.d.ts +0 -4
- package/lib/typescript/src/web/mq.d.ts.map +0 -1
- package/lib/typescript/src/web/pseudo.d.ts +0 -4
- package/lib/typescript/src/web/pseudo.d.ts.map +0 -1
- package/lib/typescript/src/web/utils.d.ts +0 -20
- package/lib/typescript/src/web/utils.d.ts.map +0 -1
- package/lib/typescript/src/web/variants/getVariants.d.ts.map +0 -1
- package/lib/typescript/src/web/variants/index.d.ts +0 -3
- package/lib/typescript/src/web/variants/index.d.ts.map +0 -1
- package/lib/typescript/src/web/variants/useVariants.d.ts +0 -3
- package/lib/typescript/src/web/variants/useVariants.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 -438
- package/plugin/__tests__/ref.spec.js +0 -1170
- package/plugin/__tests__/stylesheet.spec.js +0 -489
- package/src/web/convert/boxShadow.ts +0 -72
- package/src/web/convert/breakpoint.ts +0 -21
- package/src/web/convert/shadow.ts +0 -68
- package/src/web/convert/textShadow.ts +0 -69
- package/src/web/convert/transform.ts +0 -89
- package/src/web/listener/index.ts +0 -1
- package/src/web/listener/listener.ts +0 -33
- package/src/web/mq.ts +0 -19
- package/src/web/pseudo.ts +0 -11
- package/src/web/utils.ts +0 -95
- package/src/web/variants/index.ts +0 -2
- package/src/web/variants/useVariants.ts +0 -79
- /package/nitrogen/generated/android/{UnistylesOnLoad.kt → unistylesOnLoad.kt} +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)
|
@@ -91,28 +93,74 @@ void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_
|
|
91
93
|
continue;
|
92
94
|
}
|
93
95
|
|
94
|
-
// todo skip dynamic functions
|
95
96
|
this->rebuildUnistyle(rt, styleSheet, unistyle, variants, std::nullopt);
|
96
97
|
}
|
97
98
|
}
|
98
99
|
|
99
100
|
// rebuild all unistyles that are affected by platform event
|
100
|
-
void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap) {
|
101
|
-
|
102
|
-
|
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
|
+
}
|
103
118
|
|
104
|
-
for (auto&
|
105
|
-
|
106
|
-
auto& unistyle = unistyleData->unistyle;
|
119
|
+
for (auto& unistyleData : unistyles) {
|
120
|
+
auto& unistyle = unistyleData->unistyle;
|
107
121
|
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|
+
}
|
111
130
|
}
|
112
131
|
|
113
|
-
|
114
|
-
|
115
|
-
|
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);
|
116
164
|
}
|
117
165
|
}
|
118
166
|
}
|
@@ -146,7 +194,10 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleShee
|
|
146
194
|
const jsi::Value *argStart = args.data();
|
147
195
|
|
148
196
|
// call cached function with memoized arguments
|
149
|
-
auto functionResult = unistyleFn->
|
197
|
+
auto functionResult = unistyleFn->rawValue
|
198
|
+
.asFunction(rt)
|
199
|
+
.call(rt, argStart, dynamicFunctionMetadata.size())
|
200
|
+
.asObject(rt);
|
150
201
|
|
151
202
|
unistyleFn->unprocessedValue = std::move(functionResult);
|
152
203
|
unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
|
@@ -154,27 +205,19 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleShee
|
|
154
205
|
}
|
155
206
|
|
156
207
|
// convert dependency map to shadow tree updates
|
157
|
-
|
208
|
+
void parser::Parser::rebuildShadowLeafUpdates(jsi::Runtime& rt, core::DependencyMap& dependencyMap) {
|
158
209
|
shadow::ShadowLeafUpdates updates;
|
159
|
-
auto&
|
160
|
-
|
161
|
-
for (const auto& [styleSheet, map] : dependencyMap) {
|
162
|
-
for (const auto& [shadowNode, unistyles] : map) {
|
163
|
-
for (const auto& unistyleData : unistyles) {
|
164
|
-
auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyleData->parsedStyle.value());
|
165
|
-
|
166
|
-
if (updates.contains(shadowNode)) {
|
167
|
-
updates[shadowNode].emplace_back(std::move(rawProps));
|
210
|
+
auto& registry = core::UnistylesRegistry::get();
|
168
211
|
|
169
|
-
|
170
|
-
|
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);
|
171
215
|
|
172
|
-
|
173
|
-
}
|
174
|
-
}
|
216
|
+
updates.emplace(shadowNode, std::move(rawProps));
|
175
217
|
}
|
176
218
|
|
177
|
-
|
219
|
+
registry.trafficController.setUpdates(updates);
|
220
|
+
registry.trafficController.resumeUnistylesTraffic();
|
178
221
|
}
|
179
222
|
|
180
223
|
// first level of StyleSheet, we can expect here different properties than on second level
|
@@ -238,6 +281,18 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
|
|
238
281
|
return;
|
239
282
|
}
|
240
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
|
+
|
241
296
|
if (propertyName == "fontVariant" && propertyValueObject.isArray(rt)) {
|
242
297
|
parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), propertyValue);
|
243
298
|
|
@@ -288,7 +343,9 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
|
|
288
343
|
jsi::PropNameID::forUtf8(rt, unistyle->styleKey),
|
289
344
|
1,
|
290
345
|
[this, unistylesRuntime, unistyle](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) {
|
291
|
-
auto thisObject = thisVal.
|
346
|
+
auto thisObject = thisVal.isObject()
|
347
|
+
? thisVal.asObject(rt)
|
348
|
+
: jsi::Object(rt);
|
292
349
|
auto parser = parser::Parser(unistylesRuntime);
|
293
350
|
|
294
351
|
// call user function
|
@@ -296,23 +353,37 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
|
|
296
353
|
|
297
354
|
// memoize metadata to call it later
|
298
355
|
auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
|
299
|
-
jsi::Array arguments = jsi::Array(rt, count);
|
300
|
-
|
301
|
-
for (size_t i = 0; i < count; i++) {
|
302
|
-
arguments.setValueAtIndex(rt, i, args[i]);
|
303
|
-
}
|
304
356
|
|
305
357
|
unistyleFn->unprocessedValue = jsi::Value(rt, result).asObject(rt);
|
306
358
|
|
307
|
-
|
308
|
-
|
359
|
+
jsi::Value rawVariants = thisObject.hasProperty(rt, helpers::STYLE_VARIANTS.c_str())
|
360
|
+
? thisObject.getProperty(rt, helpers::STYLE_VARIANTS.c_str())
|
361
|
+
: jsi::Value::undefined();
|
362
|
+
std::optional<Variants> variants = rawVariants.isUndefined()
|
363
|
+
? std::nullopt
|
364
|
+
: std::optional<Variants>(helpers::variantsToPairs(rt, rawVariants.asObject(rt)));
|
365
|
+
|
366
|
+
unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
|
309
367
|
unistyleFn->seal();
|
310
368
|
|
311
|
-
|
369
|
+
jsi::Object style = jsi::Value(rt, unistyleFn->parsedStyle.value()).asObject(rt);
|
370
|
+
|
371
|
+
// include dependencies for createUnistylesComponent
|
372
|
+
style.setProperty(rt, "__proto__", generateUnistylesPrototype(rt, unistylesRuntime, unistyle, variants, helpers::functionArgumentsToArray(rt, args, count)));
|
373
|
+
|
374
|
+
// update shadow leaf updates to indicate newest changes
|
375
|
+
auto& registry = core::UnistylesRegistry::get();
|
376
|
+
auto lastArg = count == 0
|
377
|
+
? jsi::Value::undefined()
|
378
|
+
: jsi::Value(rt, args[count - 1]);
|
379
|
+
|
380
|
+
registry.shadowLeafUpdateFromUnistyle(rt, unistyle, lastArg);
|
381
|
+
|
382
|
+
return style;
|
312
383
|
});
|
313
384
|
}
|
314
385
|
|
315
|
-
// function
|
386
|
+
// function converts babel generated dependencies to C++ dependencies
|
316
387
|
std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &rt, jsi::Object&& dependencies) {
|
317
388
|
helpers::assertThat(rt, dependencies.isArray(rt), "Unistyles: Babel transform is invalid - unexpected type for dependencies.");
|
318
389
|
|
@@ -331,10 +402,6 @@ std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &
|
|
331
402
|
|
332
403
|
// eg. [{ scale: 2 }, { translateX: 100 }]
|
333
404
|
jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
|
334
|
-
if (!obj.isArray(rt)) {
|
335
|
-
return jsi::Value::undefined();
|
336
|
-
}
|
337
|
-
|
338
405
|
std::vector<jsi::Value> parsedTransforms{};
|
339
406
|
|
340
407
|
parsedTransforms.reserve(2);
|
@@ -364,6 +431,67 @@ jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared un
|
|
364
431
|
return result;
|
365
432
|
}
|
366
433
|
|
434
|
+
// eg [{offsetX: 5, offsetY: 5, blurRadius: 5, spreadDistance: 0, color: ‘rgba(255, 0, 0, 0.5)’}]
|
435
|
+
jsi::Value parser::Parser::parseBoxShadow(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
|
436
|
+
std::vector<jsi::Value> parsedBoxShadows{};
|
437
|
+
|
438
|
+
parsedBoxShadows.reserve(2);
|
439
|
+
|
440
|
+
helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
|
441
|
+
if (!value.isObject()) {
|
442
|
+
return;
|
443
|
+
}
|
444
|
+
|
445
|
+
auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
|
446
|
+
|
447
|
+
parsedBoxShadows.emplace_back(std::move(parsedResult));
|
448
|
+
});
|
449
|
+
|
450
|
+
// create jsi::Array result with correct box shadows
|
451
|
+
jsi::Array result = jsi::Array(rt, parsedBoxShadows.size());
|
452
|
+
|
453
|
+
for (size_t i = 0; i < parsedBoxShadows.size(); i++) {
|
454
|
+
result.setValueAtIndex(rt, i, parsedBoxShadows[i]);
|
455
|
+
}
|
456
|
+
|
457
|
+
return result;
|
458
|
+
}
|
459
|
+
|
460
|
+
// eg. [{ brightness: 0.5 }, { opacity: 0.25 }]
|
461
|
+
jsi::Value parser::Parser::parseFilters(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
|
462
|
+
std::vector<jsi::Value> parsedFilters{};
|
463
|
+
|
464
|
+
parsedFilters.reserve(2);
|
465
|
+
|
466
|
+
helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
|
467
|
+
if (!value.isObject()) {
|
468
|
+
return;
|
469
|
+
}
|
470
|
+
|
471
|
+
auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
|
472
|
+
|
473
|
+
// take only one filter per object
|
474
|
+
jsi::Array propertyNames = parsedResult.asObject(rt).getPropertyNames(rt);
|
475
|
+
size_t length = propertyNames.size(rt);
|
476
|
+
|
477
|
+
// ignore no filters
|
478
|
+
if (length == 0) {
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
|
482
|
+
parsedFilters.emplace_back(std::move(parsedResult));
|
483
|
+
});
|
484
|
+
|
485
|
+
// create jsi::Array result with correct filters
|
486
|
+
jsi::Array result = jsi::Array(rt, parsedFilters.size());
|
487
|
+
|
488
|
+
for (size_t i = 0; i < parsedFilters.size(); i++) {
|
489
|
+
result.setValueAtIndex(rt, i, parsedFilters[i]);
|
490
|
+
}
|
491
|
+
|
492
|
+
return result;
|
493
|
+
}
|
494
|
+
|
367
495
|
// find value based on breakpoints and mq
|
368
496
|
jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
|
369
497
|
auto& registry = core::UnistylesRegistry::get();
|
@@ -479,8 +607,8 @@ jsi::Value parser::Parser::getStylesForVariant(jsi::Runtime& rt, const std::stri
|
|
479
607
|
: "default";
|
480
608
|
auto hasKey = groupValue.hasProperty(rt, selectedVariantKey);
|
481
609
|
|
482
|
-
if (hasKey
|
483
|
-
// add 'default' selection to variants map
|
610
|
+
if (!hasKey || !selectedVariant.has_value()) {
|
611
|
+
// for no key, add 'default' selection to variants map
|
484
612
|
variants.emplace_back(groupName, selectedVariantKey);
|
485
613
|
}
|
486
614
|
|
@@ -518,7 +646,7 @@ jsi::Object parser::Parser::parseCompoundVariants(jsi::Runtime& rt, Unistyle::Sh
|
|
518
646
|
return parsedCompoundVariants;
|
519
647
|
}
|
520
648
|
|
521
|
-
// check every condition in compound variants,
|
649
|
+
// check every condition in compound variants, supports boolean variants
|
522
650
|
bool parser::Parser::shouldApplyCompoundVariants(jsi::Runtime& rt, const Variants& variants, jsi::Object& compoundVariant) {
|
523
651
|
if (variants.empty()) {
|
524
652
|
return false;
|
@@ -535,7 +663,9 @@ bool parser::Parser::shouldApplyCompoundVariants(jsi::Runtime& rt, const Variant
|
|
535
663
|
auto property = compoundVariant.getProperty(rt, variantKey.c_str());
|
536
664
|
auto propertyName = property.isBool()
|
537
665
|
? (property.asBool() ? "true" : "false")
|
538
|
-
: property.
|
666
|
+
: property.isString()
|
667
|
+
? property.asString(rt).utf8(rt)
|
668
|
+
: "";
|
539
669
|
|
540
670
|
if (propertyName != variantValue) {
|
541
671
|
return false;
|
@@ -613,20 +743,27 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
|
|
613
743
|
return parsedStyle;
|
614
744
|
}
|
615
745
|
|
616
|
-
// convert
|
617
|
-
|
746
|
+
// convert unistyles to folly with int colors
|
747
|
+
folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles) {
|
618
748
|
jsi::Object convertedStyles = jsi::Object(rt);
|
619
749
|
auto& state = core::UnistylesRegistry::get().getState(rt);
|
620
750
|
|
621
|
-
|
622
|
-
|
623
|
-
|
751
|
+
for (const auto& unistyleData : unistyles) {
|
752
|
+
// this can happen for exotic stylesheets
|
753
|
+
if (!unistyleData->parsedStyle.has_value()) {
|
754
|
+
return nullptr;
|
624
755
|
}
|
625
756
|
|
626
|
-
|
627
|
-
|
757
|
+
helpers::enumerateJSIObject(rt, unistyleData->parsedStyle.value(), [&](const std::string& propertyName, jsi::Value& propertyValue){
|
758
|
+
if (this->isColor(propertyName)) {
|
759
|
+
return convertedStyles.setProperty(rt, propertyName.c_str(), jsi::Value(state.parseColor(propertyValue)));
|
760
|
+
}
|
761
|
+
|
762
|
+
convertedStyles.setProperty(rt, propertyName.c_str(), propertyValue);
|
763
|
+
});
|
764
|
+
}
|
628
765
|
|
629
|
-
return
|
766
|
+
return jsi::dynamicFromValue(rt, std::move(convertedStyles));
|
630
767
|
}
|
631
768
|
|
632
769
|
// check is styleKey contains color
|
package/cxx/parser/Parser.h
CHANGED
@@ -24,23 +24,25 @@ struct Parser {
|
|
24
24
|
void buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet);
|
25
25
|
void parseUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet);
|
26
26
|
void rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Variants& variants);
|
27
|
-
void rebuildUnistylesInDependencyMap(jsi::Runtime& rt, core::DependencyMap& dependencyMap);
|
28
|
-
|
27
|
+
void rebuildUnistylesInDependencyMap(jsi::Runtime& rt, core::DependencyMap& dependencyMap, std::vector<std::shared_ptr<core::StyleSheet>>& styleSheets, std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime);
|
28
|
+
void rebuildShadowLeafUpdates(jsi::Runtime& rt, core::DependencyMap& dependencyMap);
|
29
|
+
folly::dynamic parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles);
|
30
|
+
void rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Unistyle::Shared unistyle, const Variants& variants, std::optional<std::vector<folly::dynamic>>);
|
29
31
|
|
30
32
|
private:
|
31
|
-
|
32
|
-
jsi::Object unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet);
|
33
|
+
jsi::Object unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, std::optional<UnistylesNativeMiniRuntime>);
|
33
34
|
jsi::Object parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, std::optional<Variants> variants);
|
34
35
|
jsi::Value parseSecondLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Value& nestedObject);
|
35
36
|
jsi::Function createDynamicFunctionProxy(jsi::Runtime& rt, Unistyle::Shared unistyle);
|
36
37
|
std::vector<UnistyleDependency> parseDependencies(jsi::Runtime &rt, jsi::Object&& dependencies);
|
37
38
|
jsi::Value parseTransforms(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj);
|
39
|
+
jsi::Value parseBoxShadow(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj);
|
40
|
+
jsi::Value parseFilters(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj);
|
38
41
|
jsi::Value getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj);
|
39
42
|
jsi::Object parseVariants(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj, Variants& variants);
|
40
43
|
jsi::Value getStylesForVariant(jsi::Runtime& rt, const std::string groupName, jsi::Object&& groupValue, std::optional<std::string> selectedVariant, Variants& variants);
|
41
44
|
jsi::Object parseCompoundVariants(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj, Variants& variants);
|
42
45
|
bool shouldApplyCompoundVariants(jsi::Runtime& rt, const Variants& variants, jsi::Object& compoundVariant);
|
43
|
-
RawProps parseStylesToShadowTreeStyles(jsi::Runtime& rt, const jsi::Object& parsedStyles);
|
44
46
|
bool isColor(const std::string& propertyName);
|
45
47
|
|
46
48
|
std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
3
|
#include <jsi/jsi.h>
|
4
|
+
#include <folly/dynamic.h>
|
4
5
|
#include <react/renderer/uimanager/UIManager.h>
|
5
6
|
|
6
7
|
namespace margelo::nitro::unistyles::shadow {
|
@@ -8,6 +9,7 @@ namespace margelo::nitro::unistyles::shadow {
|
|
8
9
|
using namespace facebook;
|
9
10
|
using namespace facebook::react;
|
10
11
|
|
11
|
-
|
12
|
+
// translates Unistyles changes to unified shadow tree changes
|
13
|
+
using ShadowLeafUpdates = std::unordered_map<const ShadowNodeFamily*, folly::dynamic>;
|
12
14
|
|
13
15
|
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#import "mutex"
|
4
|
+
#import "ShadowLeafUpdate.h"
|
5
|
+
|
6
|
+
namespace margelo::nitro::unistyles::shadow {
|
7
|
+
|
8
|
+
// Like a traffic officer managing a jam, this struct ensures everything
|
9
|
+
// is synchronized within a set timeframe, controlling flow and preventing chaos.
|
10
|
+
struct ShadowTrafficController {
|
11
|
+
inline bool shouldStop() {
|
12
|
+
return !_canCommit;
|
13
|
+
}
|
14
|
+
|
15
|
+
inline void stopUnistylesTraffic() {
|
16
|
+
this->_canCommit = false;
|
17
|
+
}
|
18
|
+
|
19
|
+
inline void resumeUnistylesTraffic() {
|
20
|
+
this->_canCommit = true;
|
21
|
+
}
|
22
|
+
|
23
|
+
inline shadow::ShadowLeafUpdates& getUpdates() {
|
24
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
25
|
+
|
26
|
+
return _unistylesUpdates;
|
27
|
+
}
|
28
|
+
|
29
|
+
inline void setUpdates(shadow::ShadowLeafUpdates& newUpdates) {
|
30
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
31
|
+
|
32
|
+
auto& targetUpdates = _unistylesUpdates;
|
33
|
+
|
34
|
+
// this is important as overriding updates may skip some interim changes
|
35
|
+
// Unistyles emits different events so this will make sure that everything is synced
|
36
|
+
std::for_each(newUpdates.begin(), newUpdates.end(), [&targetUpdates](auto& pair){
|
37
|
+
if (targetUpdates.contains(pair.first)) {
|
38
|
+
targetUpdates[pair.first] = std::move(pair.second);
|
39
|
+
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
|
43
|
+
targetUpdates.emplace(pair.first, std::move(pair.second));
|
44
|
+
});
|
45
|
+
}
|
46
|
+
|
47
|
+
inline void removeShadowNode(const ShadowNodeFamily* shadowNodeFamily) {
|
48
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
49
|
+
|
50
|
+
if (_unistylesUpdates.contains(shadowNodeFamily)) {
|
51
|
+
_unistylesUpdates.erase(shadowNodeFamily);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
inline void restore() {
|
56
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
57
|
+
|
58
|
+
_unistylesUpdates = {};
|
59
|
+
_canCommit = false;
|
60
|
+
}
|
61
|
+
|
62
|
+
private:
|
63
|
+
std::atomic<bool> _canCommit = false;
|
64
|
+
shadow::ShadowLeafUpdates _unistylesUpdates{};
|
65
|
+
|
66
|
+
// this struct should be accessed in thread-safe manner. Otherwise shadow tree updates
|
67
|
+
// from different threads will break it
|
68
|
+
std::mutex _mutex;
|
69
|
+
};
|
70
|
+
|
71
|
+
}
|
@@ -6,26 +6,29 @@ using namespace facebook;
|
|
6
6
|
|
7
7
|
using AffectedNodes = std::unordered_map<const ShadowNodeFamily*, std::unordered_set<int>>;
|
8
8
|
|
9
|
-
void shadow::ShadowTreeManager::updateShadowTree(
|
10
|
-
auto&
|
11
|
-
|
9
|
+
void shadow::ShadowTreeManager::updateShadowTree(const ShadowTreeRegistry& shadowTreeRegistry) {
|
10
|
+
auto& registry = core::UnistylesRegistry::get();
|
11
|
+
auto updates = registry.trafficController.getUpdates();
|
12
12
|
|
13
|
-
|
13
|
+
if (updates.empty()) {
|
14
|
+
return;
|
15
|
+
}
|
16
|
+
|
17
|
+
shadowTreeRegistry.enumerate([&updates](const ShadowTree& shadowTree, bool& stop){
|
14
18
|
// we could iterate via updates and create multiple commits
|
15
19
|
// but it can cause performance issues for hundreds of nodes
|
16
20
|
// so let's mutate Shadow Tree in single transaction
|
17
21
|
auto transaction = [&](const RootShadowNode& oldRootShadowNode) {
|
18
22
|
auto affectedNodes = shadow::ShadowTreeManager::findAffectedNodes(oldRootShadowNode, updates);
|
19
23
|
auto newRootNode = std::static_pointer_cast<RootShadowNode>(shadow::ShadowTreeManager::cloneShadowTree(
|
20
|
-
rt,
|
21
24
|
oldRootShadowNode,
|
22
25
|
updates,
|
23
26
|
affectedNodes
|
24
27
|
));
|
25
|
-
|
26
|
-
// set unistyles
|
28
|
+
|
29
|
+
// set unistyles trait
|
27
30
|
auto unistylesRootNode = std::reinterpret_pointer_cast<core::UnistylesCommitShadowNode>(newRootNode);
|
28
|
-
|
31
|
+
|
29
32
|
unistylesRootNode->addUnistylesCommitTrait();
|
30
33
|
|
31
34
|
return newRootNode;
|
@@ -36,7 +39,7 @@ void shadow::ShadowTreeManager::updateShadowTree(facebook::jsi::Runtime& rt, sha
|
|
36
39
|
// enableStateReconciliation: https://reactnative.dev/architecture/render-pipeline#react-native-renderer-state-updates
|
37
40
|
// mountSynchronously: must be true as this is update from C++ not React
|
38
41
|
shadowTree.commit(transaction, {false, true});
|
39
|
-
|
42
|
+
|
40
43
|
|
41
44
|
// for now we're assuming single surface, can be improved in the future
|
42
45
|
// stop = true means stop enumerating next shadow tree
|
@@ -83,7 +86,7 @@ AffectedNodes shadow::ShadowTreeManager::findAffectedNodes(const RootShadowNode&
|
|
83
86
|
|
84
87
|
// based on Reanimated algorithm
|
85
88
|
// clone affected nodes recursively, inject props and commit tree
|
86
|
-
ShadowNode::Unshared shadow::ShadowTreeManager::cloneShadowTree(
|
89
|
+
ShadowNode::Unshared shadow::ShadowTreeManager::cloneShadowTree(const ShadowNode &shadowNode, ShadowLeafUpdates& updates, AffectedNodes& affectedNodes) {
|
87
90
|
const auto family = &shadowNode.getFamily();
|
88
91
|
const auto rawPropsIt = updates.find(family);
|
89
92
|
const auto childrenIt = affectedNodes.find(family);
|
@@ -93,7 +96,7 @@ ShadowNode::Unshared shadow::ShadowTreeManager::cloneShadowTree(jsi::Runtime& rt
|
|
93
96
|
if (childrenIt != affectedNodes.end()) {
|
94
97
|
// get all indexes of children and clone it recursively
|
95
98
|
for (const auto index : childrenIt->second) {
|
96
|
-
children[index] = cloneShadowTree(
|
99
|
+
children[index] = cloneShadowTree(*children[index], updates, affectedNodes);
|
97
100
|
}
|
98
101
|
}
|
99
102
|
|
@@ -106,14 +109,20 @@ ShadowNode::Unshared shadow::ShadowTreeManager::cloneShadowTree(jsi::Runtime& rt
|
|
106
109
|
*shadowNode.getContextContainer()
|
107
110
|
};
|
108
111
|
|
109
|
-
|
110
|
-
|
111
|
-
//
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
112
|
+
// this is important and critical
|
113
|
+
// first of all Android doesn't like nullish props (they work perfectly fine on iOS)
|
114
|
+
// second of all Android props MUST be constructed from previous props, otherwise RawProps::~RawProps error occurs
|
115
|
+
// Meta wants to remove shadowNode.getProps()->rawProps, but for now it's the only viable solution
|
116
|
+
#ifdef ANDROID
|
117
|
+
auto safeProps = rawPropsIt->second == nullptr ? folly::dynamic::object() : rawPropsIt->second;
|
118
|
+
auto newProps = folly::dynamic::merge(shadowNode.getProps()->rawProps, safeProps);
|
119
|
+
#else
|
120
|
+
auto newProps = rawPropsIt->second;
|
121
|
+
#endif
|
122
|
+
|
123
|
+
updatedProps = shadowNode
|
124
|
+
.getComponentDescriptor()
|
125
|
+
.cloneProps(propsParserContext, shadowNode.getProps(), RawProps(newProps));
|
117
126
|
}
|
118
127
|
|
119
128
|
return shadowNode.clone({
|
@@ -6,6 +6,7 @@
|
|
6
6
|
#include <ranges>
|
7
7
|
#include "ShadowLeafUpdate.h"
|
8
8
|
#include "UnistylesCommitShadowNode.h"
|
9
|
+
#include "UnistylesRegistry.h"
|
9
10
|
|
10
11
|
namespace margelo::nitro::unistyles::shadow {
|
11
12
|
|
@@ -15,9 +16,9 @@ using namespace facebook;
|
|
15
16
|
using AffectedNodes = std::unordered_map<const ShadowNodeFamily *, std::unordered_set<int>>;
|
16
17
|
|
17
18
|
struct ShadowTreeManager {
|
18
|
-
static void updateShadowTree(
|
19
|
+
static void updateShadowTree(const ShadowTreeRegistry& shadowTreeRegistry);
|
19
20
|
static AffectedNodes findAffectedNodes(const RootShadowNode& rootNode, ShadowLeafUpdates& updates);
|
20
|
-
static ShadowNode::Unshared cloneShadowTree(
|
21
|
+
static ShadowNode::Unshared cloneShadowTree(const ShadowNode &shadowNode, ShadowLeafUpdates& updates, AffectedNodes& affectedNodes);
|
21
22
|
};
|
22
23
|
|
23
24
|
}
|
package/ios/Equatable.swift
CHANGED
@@ -36,7 +36,8 @@ extension UnistylesNativeMiniRuntime {
|
|
36
36
|
dependencies.append(UnistyleDependency.breakpoints)
|
37
37
|
}
|
38
38
|
|
39
|
-
|
39
|
+
// no need to check isLandscape, as it's always opposite
|
40
|
+
if (lhs.isPortrait != rhs.isPortrait) {
|
40
41
|
dependencies.append(UnistyleDependency.orientation)
|
41
42
|
}
|
42
43
|
|