@react-native-ohos/react-native-reanimated 3.18.1-rc.6 → 4.0.0-rc.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.
Files changed (275) hide show
  1. package/compatibility.json +161 -0
  2. package/harmony/reanimated/BuildProfile.ets +1 -1
  3. package/harmony/reanimated/build-profile.json5 +8 -1
  4. package/harmony/reanimated/oh-package.json5 +3 -2
  5. package/harmony/reanimated/src/main/cpp/CMakeLists.txt +31 -40
  6. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.cpp +11 -16
  7. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.h +3 -4
  8. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.cpp +390 -0
  9. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.h +16 -0
  10. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/definitions.h +30 -0
  11. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.cpp +46 -0
  12. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.h +23 -0
  13. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.cpp +53 -0
  14. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.h +21 -0
  15. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.cpp +166 -0
  16. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.h +71 -0
  17. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.cpp +368 -0
  18. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.h +53 -0
  19. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.cpp +594 -0
  20. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.h +67 -0
  21. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.cpp +52 -0
  22. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.h +26 -0
  23. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.cpp +156 -0
  24. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.h +76 -0
  25. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.cpp +93 -0
  26. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.h +33 -0
  27. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.cpp +48 -0
  28. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.h +31 -0
  29. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.cpp +135 -0
  30. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.h +61 -0
  31. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.cpp +100 -0
  32. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.h +44 -0
  33. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.cpp +81 -0
  34. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.h +53 -0
  35. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.cpp +122 -0
  36. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.h +38 -0
  37. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.cpp +82 -0
  38. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.h +63 -0
  39. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValue.h +118 -0
  40. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.cpp +174 -0
  41. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.h +111 -0
  42. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.cpp +196 -0
  43. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.h +66 -0
  44. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.cpp +134 -0
  45. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.h +44 -0
  46. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.cpp +174 -0
  47. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.h +49 -0
  48. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.cpp +45 -0
  49. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.h +26 -0
  50. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.cpp +90 -0
  51. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.h +43 -0
  52. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.cpp +17 -0
  53. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.h +13 -0
  54. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.cpp +127 -0
  55. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.h +51 -0
  56. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.cpp +145 -0
  57. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.h +47 -0
  58. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.cpp +69 -0
  59. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.h +22 -0
  60. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.cpp +66 -0
  61. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.h +15 -0
  62. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.cpp +28 -0
  63. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.h +15 -0
  64. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.cpp +13 -0
  65. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.h +12 -0
  66. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.cpp +157 -0
  67. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.h +189 -0
  68. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.cpp +76 -0
  69. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.h +66 -0
  70. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/configs.h +20 -0
  71. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.cpp +136 -0
  72. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.h +40 -0
  73. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.cpp +38 -0
  74. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.h +24 -0
  75. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.cpp +58 -0
  76. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.h +24 -0
  77. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/blur.h +14 -0
  78. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/brightness.h +14 -0
  79. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/contrast.h +14 -0
  80. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/dropShadow.h +17 -0
  81. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/grayscale.h +14 -0
  82. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/hueRotate.h +14 -0
  83. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/invert.h +14 -0
  84. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/opacity.h +14 -0
  85. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/saturate.h +14 -0
  86. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/sepia.h +14 -0
  87. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.cpp +95 -0
  88. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.h +36 -0
  89. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.cpp +41 -0
  90. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.h +32 -0
  91. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.cpp +99 -0
  92. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.h +37 -0
  93. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.cpp +308 -0
  94. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.h +100 -0
  95. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.cpp +19 -0
  96. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.h +94 -0
  97. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.cpp +18 -0
  98. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.h +43 -0
  99. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/AnimationStyleInterpolator.h +26 -0
  100. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.cpp +103 -0
  101. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.h +42 -0
  102. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.cpp +224 -0
  103. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.h +52 -0
  104. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.cpp +218 -0
  105. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.h +89 -0
  106. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.cpp +149 -0
  107. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.h +33 -0
  108. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.cpp +208 -0
  109. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.h +56 -0
  110. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.cpp +42 -0
  111. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.h +20 -0
  112. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.cpp +41 -0
  113. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.h +39 -0
  114. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.cpp +28 -0
  115. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.h +25 -0
  116. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.cpp +14 -0
  117. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.h +20 -0
  118. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.cpp +39 -0
  119. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.h +25 -0
  120. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.cpp +47 -0
  121. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.h +43 -0
  122. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.cpp +70 -0
  123. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.h +40 -0
  124. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.cpp +146 -0
  125. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.h +71 -0
  126. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.cpp +155 -0
  127. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.h +53 -0
  128. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.cpp +170 -0
  129. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.h +67 -0
  130. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/KeyframeProgressProvider.h +12 -0
  131. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.cpp +41 -0
  132. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.h +31 -0
  133. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.cpp +193 -0
  134. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.h +77 -0
  135. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.cpp +340 -0
  136. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.h +80 -0
  137. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.cpp +45 -0
  138. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.h +29 -0
  139. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.cpp +167 -0
  140. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.h +51 -0
  141. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.cpp +61 -0
  142. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.h +33 -0
  143. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.cpp +80 -0
  144. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.h +39 -0
  145. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.cpp +93 -0
  146. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.h +36 -0
  147. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.cpp +110 -0
  148. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.h +33 -0
  149. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.cpp +75 -0
  150. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.h +45 -0
  151. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.cpp +12 -0
  152. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.h +10 -0
  153. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.cpp +36 -0
  154. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.h +23 -0
  155. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.cpp +149 -0
  156. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.h +32 -0
  157. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.cpp +51 -39
  158. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.h +13 -15
  159. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitShadowNode.h +0 -3
  160. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.cpp +22 -53
  161. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.h +12 -8
  162. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +46 -37
  163. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.h +3 -10
  164. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.cpp +72 -0
  165. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.h +25 -0
  166. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.cpp +160 -0
  167. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.h +71 -0
  168. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.cpp +161 -0
  169. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.h +65 -0
  170. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationType.h +4 -2
  171. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.cpp +62 -157
  172. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.h +38 -46
  173. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.cpp +79 -0
  174. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.h +81 -0
  175. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.cpp +864 -0
  176. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.h +214 -0
  177. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/{LayoutAnimationsProxy.cpp → LayoutAnimationsProxy_Legacy.cpp} +303 -276
  178. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.h +220 -0
  179. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.cpp +5 -65
  180. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.h +52 -82
  181. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.cpp +456 -0
  182. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.h +102 -0
  183. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/SharedTransitions.cpp +544 -0
  184. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.cpp +119 -0
  185. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.h +39 -0
  186. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +957 -552
  187. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h +87 -111
  188. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp +115 -163
  189. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h +38 -54
  190. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp +34 -36
  191. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h +8 -0
  192. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.cpp +46 -58
  193. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.h +5 -9
  194. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.cpp +18 -0
  195. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.h +44 -0
  196. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/PlatformDepMethodsHolder.h +26 -57
  197. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedSystraceSection.h +12 -33
  198. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedVersion.cpp +46 -0
  199. package/harmony/reanimated/src/main/cpp/Common/cpp/{worklets → reanimated}/Tools/ReanimatedVersion.h +3 -4
  200. package/harmony/reanimated/src/main/cpp/ReanimatedModule.cpp +60 -85
  201. package/harmony/reanimated/src/main/cpp/ReanimatedNodesManager.cpp +1 -0
  202. package/harmony/reanimated/src/main/cpp/ReanimatedPackage.cpp +0 -3
  203. package/harmony/reanimated/src/main/cpp/ReanimatedSensor.cpp +266 -0
  204. package/harmony/reanimated/src/main/cpp/ReanimatedSensor.h +36 -0
  205. package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.cpp +36 -0
  206. package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.h +23 -0
  207. package/harmony/reanimated/src/main/cpp/ReanimatedUIScheduler.h +3 -3
  208. package/harmony/reanimated/src/main/ets/ReanimatedModule.ts +12 -1
  209. package/harmony/reanimated/src/main/ets/ReanimatedPackage.ts +1 -4
  210. package/harmony/reanimated.har +0 -0
  211. package/package.json +36 -18
  212. package/scripts/deploy.js +191 -0
  213. package/scripts/set-reanimated-version.js +37 -0
  214. package/scripts/update-version.js +119 -0
  215. package/scripts/validate-react-native-version.js +46 -0
  216. package/scripts/validate-worklets-build.js +17 -0
  217. package/scripts/validate-worklets-version.js +79 -0
  218. package/scripts/worklets-version.json +4 -0
  219. package/LICENSE +0 -21
  220. package/README.OpenSource +0 -11
  221. package/README.md +0 -10
  222. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/PropsRegistry.cpp +0 -68
  223. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/PropsRegistry.h +0 -68
  224. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h +0 -147
  225. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/CollectionUtils.h +0 -14
  226. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeaturesConfig.cpp +0 -5
  227. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeaturesConfig.h +0 -19
  228. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +0 -47
  229. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +0 -59
  230. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp +0 -27
  231. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h +0 -25
  232. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +0 -94
  233. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/EventHandlerRegistry.h +0 -49
  234. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +0 -8
  235. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +0 -39
  236. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/SharedItems/Shareables.cpp +0 -326
  237. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/SharedItems/Shareables.h +0 -345
  238. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/AsyncQueue.cpp +0 -52
  239. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/AsyncQueue.h +0 -35
  240. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/Defs.h +0 -10
  241. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSISerializer.cpp +0 -342
  242. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSISerializer.h +0 -47
  243. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSLogger.cpp +0 -16
  244. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSLogger.h +0 -20
  245. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSScheduler.cpp +0 -20
  246. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSScheduler.h +0 -29
  247. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/PlatformLogger.h +0 -16
  248. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedJSIUtils.cpp +0 -26
  249. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedJSIUtils.h +0 -199
  250. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedVersion.cpp +0 -95
  251. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/SingleInstanceChecker.h +0 -72
  252. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ThreadSafeQueue.h +0 -49
  253. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/UIScheduler.cpp +0 -20
  254. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/UIScheduler.h +0 -22
  255. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +0 -29
  256. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/WorkletEventHandler.h +0 -41
  257. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +0 -16
  258. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +0 -19
  259. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedHermesRuntime.cpp +0 -112
  260. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedHermesRuntime.h +0 -127
  261. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedRuntime.cpp +0 -53
  262. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedRuntime.h +0 -22
  263. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RuntimeInitialization.md +0 -191
  264. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +0 -155
  265. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +0 -90
  266. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +0 -36
  267. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +0 -182
  268. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +0 -22
  269. package/harmony/reanimated/src/main/cpp/ReanimatedLogger.cpp +0 -33
  270. package/harmony/reanimated/src/main/cpp/WorkletsModule.cpp +0 -61
  271. package/harmony/reanimated/src/main/cpp/WorkletsModule.h +0 -22
  272. package/harmony/reanimated/src/main/cpp/patches/AnimatedSensor/AnimatedSensorModule.cpp +0 -89
  273. package/harmony/reanimated/src/main/cpp/patches/Fabric/ShadowTreeCloner.cpp +0 -95
  274. package/harmony/reanimated/src/main/cpp/patches/NativeModules/ReanimatedModuleProxy.cpp +0 -964
  275. package/harmony/reanimated/src/main/ets/WorkletsModule.ts +0 -15
@@ -0,0 +1,594 @@
1
+ #include <reanimated/CSS/common/transforms/TransformMatrix3D.h>
2
+ #include <reanimated/CSS/interpolation/transforms/TransformOperation.h>
3
+
4
+ #include <string>
5
+
6
+ namespace reanimated::css {
7
+
8
+ TransformMatrix3D::TransformMatrix3D(jsi::Runtime &rt, const jsi::Value &value)
9
+ : TransformMatrixBase<TransformMatrix3D, MATRIX_3D_DIMENSION>() {
10
+ const auto &array = value.asObject(rt).asArray(rt);
11
+ const auto size = array.size(rt);
12
+
13
+ if (size != SIZE) {
14
+ throw std::invalid_argument("[Reanimated] TransformMatrix3D: Invalid matrix size: " + std::to_string(size));
15
+ }
16
+
17
+ for (size_t i = 0; i < SIZE; ++i) {
18
+ matrix_[i] = array.getValueAtIndex(rt, i).asNumber();
19
+ }
20
+ }
21
+
22
+ TransformMatrix3D::TransformMatrix3D(const folly::dynamic &array)
23
+ : TransformMatrixBase<TransformMatrix3D, MATRIX_3D_DIMENSION>() {
24
+ const auto size = array.size();
25
+
26
+ if (size != SIZE) {
27
+ throw std::invalid_argument("[Reanimated] TransformMatrix3D: Invalid matrix size: " + std::to_string(size));
28
+ }
29
+
30
+ for (size_t i = 0; i < SIZE; ++i) {
31
+ matrix_[i] = array[i].asDouble();
32
+ }
33
+ }
34
+
35
+ TransformMatrix3D::Decomposed TransformMatrix3D::Decomposed::interpolate(
36
+ const double progress,
37
+ const TransformMatrix3D::Decomposed &to) const {
38
+ return {
39
+ .scale = scale.interpolate(progress, to.scale),
40
+ .skew = skew.interpolate(progress, to.skew),
41
+ .quaternion = quaternion.interpolate(progress, to.quaternion),
42
+ .translation = translation.interpolate(progress, to.translation),
43
+ .perspective = perspective.interpolate(progress, to.perspective)};
44
+ }
45
+
46
+ #ifndef NDEBUG
47
+
48
+ std::ostream &operator<<(std::ostream &os, const TransformMatrix3D::Decomposed &decomposed) {
49
+ os << "TransformMatrix3D::Decomposed(scale=" << decomposed.scale << ", skew=" << decomposed.skew
50
+ << ", quaternion=" << decomposed.quaternion << ", translation=" << decomposed.translation
51
+ << ", perspective=" << decomposed.perspective << ")";
52
+ return os;
53
+ }
54
+
55
+ #endif // NDEBUG
56
+
57
+ // Template specializations for TransformMatrix3D::create
58
+ template <>
59
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::Perspective>(double v) {
60
+ if (v == 0) {
61
+ // Ignore perspective if it is invalid
62
+ return TransformMatrix3D();
63
+ }
64
+ // clang-format off
65
+ return TransformMatrix3D({
66
+ 1, 0, 0, 0,
67
+ 0, 1, 0, 0,
68
+ 0, 0, 1, -1.0 / v,
69
+ 0, 0, 0, 1
70
+ });
71
+ // clang-format on
72
+ }
73
+
74
+ template <>
75
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::RotateX>(double v) {
76
+ const auto cosVal = std::cos(v);
77
+ const auto sinVal = std::sin(v);
78
+ // clang-format off
79
+ return TransformMatrix3D({
80
+ 1, 0, 0, 0,
81
+ 0, cosVal, sinVal, 0,
82
+ 0, -sinVal, cosVal, 0,
83
+ 0, 0, 0, 1
84
+ });
85
+ // clang-format on
86
+ }
87
+
88
+ template <>
89
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::RotateY>(double v) {
90
+ const auto cosVal = std::cos(v);
91
+ const auto sinVal = std::sin(v);
92
+ // clang-format off
93
+ return TransformMatrix3D({
94
+ cosVal, 0, -sinVal, 0,
95
+ 0, 1, 0, 0,
96
+ sinVal, 0, cosVal, 0,
97
+ 0, 0, 0, 1
98
+ });
99
+ // clang-format on
100
+ }
101
+
102
+ template <>
103
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::RotateZ>(double v) {
104
+ const auto cosVal = std::cos(v);
105
+ const auto sinVal = std::sin(v);
106
+ // clang-format off
107
+ return TransformMatrix3D({
108
+ cosVal, sinVal, 0, 0,
109
+ -sinVal, cosVal, 0, 0,
110
+ 0, 0, 1, 0,
111
+ 0, 0, 0, 1
112
+ });
113
+ // clang-format on
114
+ }
115
+
116
+ template <>
117
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::Rotate>(double v) {
118
+ return TransformMatrix3D::create<TransformOp::RotateZ>(v);
119
+ }
120
+
121
+ template <>
122
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::Scale>(double v) {
123
+ // clang-format off
124
+ return TransformMatrix3D({
125
+ v, 0, 0, 0,
126
+ 0, v, 0, 0,
127
+ 0, 0, v, 0,
128
+ 0, 0, 0, 1
129
+ });
130
+ // clang-format on
131
+ }
132
+
133
+ template <>
134
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::ScaleX>(double v) {
135
+ // clang-format off
136
+ return TransformMatrix3D({
137
+ v, 0, 0, 0,
138
+ 0, 1, 0, 0,
139
+ 0, 0, 1, 0,
140
+ 0, 0, 0, 1
141
+ });
142
+ // clang-format on
143
+ }
144
+
145
+ template <>
146
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::ScaleY>(double v) {
147
+ // clang-format off
148
+ return TransformMatrix3D({
149
+ 1, 0, 0, 0,
150
+ 0, v, 0, 0,
151
+ 0, 0, 1, 0,
152
+ 0, 0, 0, 1
153
+ });
154
+ // clang-format on
155
+ }
156
+
157
+ template <>
158
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::TranslateX>(double v) {
159
+ // clang-format off
160
+ return TransformMatrix3D({
161
+ 1, 0, 0, 0,
162
+ 0, 1, 0, 0,
163
+ 0, 0, 1, 0,
164
+ v, 0, 0, 1
165
+ });
166
+ // clang-format on
167
+ }
168
+
169
+ template <>
170
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::TranslateY>(double v) {
171
+ // clang-format off
172
+ return TransformMatrix3D({
173
+ 1, 0, 0, 0,
174
+ 0, 1, 0, 0,
175
+ 0, 0, 1, 0,
176
+ 0, v, 0, 1
177
+ });
178
+ // clang-format on
179
+ }
180
+
181
+ template <>
182
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::SkewX>(double v) {
183
+ const auto tanVal = std::tan(v);
184
+ // clang-format off
185
+ return TransformMatrix3D({
186
+ 1, 0, 0, 0,
187
+ tanVal, 1, 0, 0,
188
+ 0, 0, 1, 0,
189
+ 0, 0, 0, 1
190
+ });
191
+ // clang-format on
192
+ }
193
+
194
+ template <>
195
+ TransformMatrix3D TransformMatrix3D::create<TransformOp::SkewY>(double v) {
196
+ const auto tanVal = std::tan(v);
197
+ // clang-format off
198
+ return TransformMatrix3D({
199
+ 1, tanVal, 0, 0,
200
+ 0, 1, 0, 0,
201
+ 0, 0, 1, 0,
202
+ 0, 0, 0, 1
203
+ });
204
+ // clang-format on
205
+ }
206
+
207
+ template <TransformOp TOperation>
208
+ TransformMatrix3D TransformMatrix3D::create(double value) {
209
+ throw std::invalid_argument(
210
+ "[Reanimated] Cannot create TransformMatrix3D from: " + getTransformOperationName(TOperation));
211
+ }
212
+
213
+ TransformMatrix3D TransformMatrix3D::from2D(const TransformMatrix2D &m) {
214
+ // clang-format off
215
+ return TransformMatrix3D({
216
+ m[0], m[1], 0, m[2],
217
+ m[3], m[4], 0, m[5],
218
+ 0, 0, 1, 0,
219
+ m[6], m[7], 0, m[8]
220
+ });
221
+ // clang-format on
222
+ }
223
+
224
+ Vector4D operator*(const Vector4D &v, const TransformMatrix3D &m) {
225
+ Vector4D result;
226
+
227
+ for (size_t i = 0; i < 4; ++i) {
228
+ for (size_t j = 0; j < 4; ++j) {
229
+ result[i] += v[j] * m[j * 4 + i];
230
+ }
231
+ }
232
+
233
+ return result;
234
+ }
235
+
236
+ #ifndef NDEBUG
237
+
238
+ std::ostream &operator<<(std::ostream &os, const TransformMatrix3D &matrix) {
239
+ std::string result = "TransformMatrix3D{";
240
+ for (size_t i = 0; i < 16; ++i) {
241
+ result += std::to_string(matrix[i]);
242
+ if (i < 15) {
243
+ result += ", ";
244
+ }
245
+ }
246
+ result += "}";
247
+ return os << result;
248
+ }
249
+
250
+ #endif // NDEBUG
251
+
252
+ /**
253
+ * Calculates the determinant of the 4x4 matrix using the minor (Laplace
254
+ * expansion) method.
255
+ *
256
+ * | a1 a2 a3 a4 |
257
+ * | b1 b2 b3 b4 |
258
+ * | c1 c2 c3 c4 |
259
+ * | d1 d2 d3 d4 |
260
+ */
261
+ double TransformMatrix3D::determinant() const {
262
+ const double a1 = matrix_[0];
263
+ const double b1 = matrix_[1];
264
+ const double c1 = matrix_[2];
265
+ const double d1 = matrix_[3];
266
+
267
+ const double a2 = matrix_[4];
268
+ const double b2 = matrix_[5];
269
+ const double c2 = matrix_[6];
270
+ const double d2 = matrix_[7];
271
+
272
+ const double a3 = matrix_[8];
273
+ const double b3 = matrix_[9];
274
+ const double c3 = matrix_[10];
275
+ const double d3 = matrix_[11];
276
+
277
+ const double a4 = matrix_[12];
278
+ const double b4 = matrix_[13];
279
+ const double c4 = matrix_[14];
280
+ const double d4 = matrix_[15];
281
+
282
+ return a1 * determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4) -
283
+ b1 * determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4) +
284
+ c1 * determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4) - d1 * determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
285
+ }
286
+
287
+ void TransformMatrix3D::adjugate() {
288
+ const double a1 = matrix_[0];
289
+ const double b1 = matrix_[1];
290
+ const double c1 = matrix_[2];
291
+ const double d1 = matrix_[3];
292
+
293
+ const double a2 = matrix_[4];
294
+ const double b2 = matrix_[5];
295
+ const double c2 = matrix_[6];
296
+ const double d2 = matrix_[7];
297
+
298
+ const double a3 = matrix_[8];
299
+ const double b3 = matrix_[9];
300
+ const double c3 = matrix_[10];
301
+ const double d3 = matrix_[11];
302
+
303
+ const double a4 = matrix_[12];
304
+ const double b4 = matrix_[13];
305
+ const double c4 = matrix_[14];
306
+ const double d4 = matrix_[15];
307
+
308
+ matrix_[0] = determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
309
+ matrix_[4] = -determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
310
+ matrix_[8] = determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
311
+ matrix_[12] = -determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
312
+
313
+ matrix_[1] = -determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
314
+ matrix_[5] = determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
315
+ matrix_[9] = -determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
316
+ matrix_[13] = determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
317
+
318
+ matrix_[2] = determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
319
+ matrix_[6] = -determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
320
+ matrix_[10] = determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
321
+ matrix_[14] = -determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
322
+
323
+ matrix_[3] = -determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
324
+ matrix_[7] = determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
325
+ matrix_[11] = -determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
326
+ matrix_[15] = determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
327
+ }
328
+
329
+ bool TransformMatrix3D::invert() {
330
+ const auto det = determinant();
331
+
332
+ // If the determinant is invalid (zero, very small number, etc.), then the
333
+ // matrix is not invertible
334
+ if (!std::isnormal(det)) {
335
+ return false;
336
+ }
337
+
338
+ adjugate();
339
+ for (size_t i = 0; i < 16; ++i) {
340
+ matrix_[i] /= det;
341
+ }
342
+
343
+ return true;
344
+ }
345
+
346
+ void TransformMatrix3D::translate3d(const Vector3D &translation) {
347
+ for (size_t i = 0; i < 4; ++i) {
348
+ matrix_[12 + i] += translation[0] * matrix_[i] + translation[1] * matrix_[4 + i] + translation[2] * matrix_[8 + i];
349
+ }
350
+ }
351
+
352
+ void TransformMatrix3D::scale3d(const Vector3D &scale) {
353
+ for (size_t i = 0; i < 4; ++i) {
354
+ matrix_[i] *= scale[0];
355
+ matrix_[4 + i] *= scale[1];
356
+ matrix_[8 + i] *= scale[2];
357
+ }
358
+ }
359
+
360
+ std::optional<TransformMatrix3D::Decomposed> TransformMatrix3D::decompose() const {
361
+ auto matrixCp = *this;
362
+
363
+ if (!matrixCp.normalize()) {
364
+ return std::nullopt;
365
+ }
366
+ const auto perspective = matrixCp.computePerspective();
367
+ if (!perspective) {
368
+ return std::nullopt;
369
+ }
370
+ const auto translation = matrixCp.getTranslation();
371
+
372
+ // Move the remaining matrix to 3 separate column vectors for easier
373
+ // processing
374
+ std::array<Vector3D, 3> rows;
375
+ for (size_t i = 0; i < 3; ++i) {
376
+ rows[i] = Vector3D(matrixCp[i * 4], matrixCp[i * 4 + 1], matrixCp[i * 4 + 2]);
377
+ }
378
+
379
+ auto [scale, skew] = computeScaleAndSkew(rows);
380
+
381
+ // At this point, the matrix (in rows) is orthonormal.
382
+ // Check for a coordinate system flip. If the determinant
383
+ // is negative, then negate the matrix and the scaling factors.
384
+ if (rows[0].dot(rows[1].cross(rows[2])) < 0) {
385
+ scale *= -1;
386
+ for (auto &row : rows) {
387
+ row *= -1;
388
+ }
389
+ }
390
+ const auto rotation = computeQuaternion(rows);
391
+
392
+ return TransformMatrix3D::Decomposed{
393
+ .scale = scale,
394
+ .skew = skew,
395
+ .quaternion = rotation,
396
+ .translation = translation,
397
+ .perspective = perspective.value()};
398
+ }
399
+
400
+ TransformMatrix3D TransformMatrix3D::recompose(const TransformMatrix3D::Decomposed &decomposed) {
401
+ auto result = TransformMatrix3D();
402
+
403
+ // Start from applying perspective
404
+ for (size_t i = 0; i < 4; ++i) {
405
+ result[3 + i * 4] = decomposed.perspective[i];
406
+ }
407
+
408
+ // Apply translation
409
+ result.translate3d(decomposed.translation);
410
+
411
+ // Apply rotation
412
+ result = fromQuaternion(decomposed.quaternion) * result;
413
+
414
+ // Apply skew
415
+ auto hasSkewYZ = decomposed.skew[2] != 0;
416
+ auto hasSkewXZ = decomposed.skew[1] != 0;
417
+ auto hasSkewXY = decomposed.skew[0] != 0;
418
+
419
+ if (hasSkewYZ || hasSkewXZ || hasSkewXY) {
420
+ auto tmp = TransformMatrix3D();
421
+ if (hasSkewYZ) { // YZ
422
+ tmp[9] = decomposed.skew[2];
423
+ result = tmp * result;
424
+ }
425
+ if (hasSkewXZ) { // XZ
426
+ tmp[8] = decomposed.skew[1];
427
+ result = tmp * result;
428
+ }
429
+ if (hasSkewXY) { // XY
430
+ tmp[4] = decomposed.skew[0];
431
+ result = tmp * result;
432
+ }
433
+ }
434
+
435
+ // Apply scale
436
+ result.scale3d(decomposed.scale);
437
+
438
+ return result;
439
+ }
440
+
441
+ TransformMatrix3D TransformMatrix3D::fromQuaternion(const Quaternion &q) {
442
+ const double xx = q.x * q.x;
443
+ const double yy = q.y * q.y;
444
+ const double zz = q.z * q.z;
445
+ const double xz = q.x * q.z;
446
+ const double xy = q.x * q.y;
447
+ const double yz = q.y * q.z;
448
+ const double xw = q.w * q.x;
449
+ const double yw = q.w * q.y;
450
+ const double zw = q.w * q.z;
451
+
452
+ // clang-format off
453
+ return TransformMatrix3D({
454
+ 1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), 0,
455
+ 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), 0,
456
+ 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0,
457
+ 0, 0, 0, 1
458
+ });
459
+ // clang-format on
460
+ }
461
+
462
+ std::optional<Vector4D> TransformMatrix3D::computePerspective() const {
463
+ auto perspectiveMatrix = *this;
464
+
465
+ for (size_t i = 0; i < 3; ++i) {
466
+ perspectiveMatrix[3 + i * 4] = 0;
467
+ }
468
+ perspectiveMatrix[15] = 1;
469
+
470
+ if (perspectiveMatrix.isSingular()) {
471
+ return std::nullopt;
472
+ }
473
+
474
+ if (matrix_[3] == 0 && matrix_[7] == 0 && matrix_[11] == 0) {
475
+ // No perspective
476
+ return Vector4D{0, 0, 0, 1};
477
+ }
478
+
479
+ // Invert and transpose the perspective matrix (we will solve the equation
480
+ // by multiplying the rhs vector by the inverse of the perspective matrix)
481
+ if (!perspectiveMatrix.invert()) {
482
+ return std::nullopt;
483
+ }
484
+ perspectiveMatrix.transpose();
485
+
486
+ // rhs is the right hand side of the equation we are trying to solve
487
+ const Vector4D rhs(matrix_[3], matrix_[7], matrix_[11], matrix_[15]);
488
+ // Solve the equation
489
+ return rhs * perspectiveMatrix;
490
+ }
491
+
492
+ Vector3D TransformMatrix3D::getTranslation() const {
493
+ return Vector3D(matrix_[12], matrix_[13], matrix_[14]);
494
+ }
495
+
496
+ std::pair<Vector3D, Vector3D> TransformMatrix3D::computeScaleAndSkew(std::array<Vector3D, 3> &rows) {
497
+ Vector3D scale, skew;
498
+
499
+ // Compute X scale factor and normalize first row
500
+ scale[0] = rows[0].length();
501
+ rows[0].normalize();
502
+
503
+ // Compute XY shear factor and make 2nd row orthogonal to 1st.
504
+ skew[0] = rows[0].dot(rows[1]);
505
+ rows[1] = rows[1].addScaled(rows[0], -skew[0]);
506
+
507
+ // Now, compute Y scale and normalize 2nd row.
508
+ scale[1] = rows[1].length();
509
+ rows[1].normalize();
510
+ skew[0] /= scale[1]; // normalize XY shear
511
+
512
+ // Compute XZ and YZ shears, orthogonalize 3rd row
513
+ skew[1] = rows[0].dot(rows[2]);
514
+ rows[2] = rows[2].addScaled(rows[0], -skew[1]);
515
+ skew[2] = rows[1].dot(rows[2]);
516
+ rows[2] = rows[2].addScaled(rows[1], -skew[2]);
517
+
518
+ // Next, get Z scale and normalize 3rd row
519
+ scale[2] = rows[2].length();
520
+ rows[2].normalize();
521
+ skew[1] /= scale[2]; // normalize XZ shear
522
+ skew[2] /= scale[2]; // normalize YZ shear
523
+
524
+ return {scale, skew};
525
+ }
526
+
527
+ Quaternion TransformMatrix3D::computeQuaternion(std::array<Vector3D, 3> &rows) {
528
+ double m00 = rows[0][0];
529
+ double m01 = rows[0][1];
530
+ double m02 = rows[0][2];
531
+
532
+ double m10 = rows[1][0];
533
+ double m11 = rows[1][1];
534
+ double m12 = rows[1][2];
535
+
536
+ double m20 = rows[2][0];
537
+ double m21 = rows[2][1];
538
+ double m22 = rows[2][2];
539
+
540
+ Quaternion q;
541
+ double trace = m00 + m11 + m22; // Trace of the matrix
542
+
543
+ if (trace > 0.0) {
544
+ double s = 0.5 / sqrt(trace + 1.0);
545
+ q.w = 0.25 / s;
546
+ q.x = (m21 - m12) * s;
547
+ q.y = (m02 - m20) * s;
548
+ q.z = (m10 - m01) * s;
549
+ } else {
550
+ if (m00 > m11 && m00 > m22) {
551
+ double s = 2.0 * sqrt(1.0 + m00 - m11 - m22);
552
+ q.w = (m21 - m12) / s;
553
+ q.x = 0.25 * s;
554
+ q.y = (m01 + m10) / s;
555
+ q.z = (m02 + m20) / s;
556
+ } else if (m11 > m22) {
557
+ double s = 2.0 * sqrt(1.0 + m11 - m00 - m22);
558
+ q.w = (m02 - m20) / s;
559
+ q.x = (m01 + m10) / s;
560
+ q.y = 0.25 * s;
561
+ q.z = (m12 + m21) / s;
562
+ } else {
563
+ double s = 2.0 * sqrt(1.0 + m22 - m00 - m11);
564
+ q.w = (m10 - m01) / s;
565
+ q.x = (m02 + m20) / s;
566
+ q.y = (m12 + m21) / s;
567
+ q.z = 0.25 * s;
568
+ }
569
+ }
570
+
571
+ return q;
572
+ }
573
+
574
+ /**
575
+ * Calculate the determinant of a 3x3 matrix
576
+ *
577
+ * | a b c |
578
+ * | d e f |
579
+ * | g h i |
580
+ */
581
+ double TransformMatrix3D::determinant3x3(
582
+ const double a,
583
+ const double b,
584
+ const double c,
585
+ const double d,
586
+ const double e,
587
+ const double f,
588
+ const double g,
589
+ const double h,
590
+ const double i) {
591
+ return (a * e * i) + (b * f * g) + (c * d * h) - (c * e * g) - (b * d * i) - (a * f * h);
592
+ }
593
+
594
+ } // namespace reanimated::css
@@ -0,0 +1,67 @@
1
+ #pragma once
2
+
3
+ #include <reanimated/CSS/common/transforms/Quaternion.h>
4
+ #include <reanimated/CSS/common/transforms/TransformMatrix2D.h>
5
+ #include <reanimated/CSS/common/transforms/TransformOp.h>
6
+ #include <reanimated/CSS/common/transforms/vectors.h>
7
+
8
+ #include <folly/dynamic.h>
9
+ #include <utility>
10
+
11
+ namespace reanimated::css {
12
+
13
+ static constexpr size_t MATRIX_3D_DIMENSION = 4; // 4x4 matrix
14
+
15
+ class TransformMatrix3D : public TransformMatrixBase<TransformMatrix3D, MATRIX_3D_DIMENSION> {
16
+ public:
17
+ struct Decomposed {
18
+ Vector3D scale;
19
+ Vector3D skew;
20
+ Quaternion quaternion;
21
+ Vector3D translation;
22
+ Vector4D perspective;
23
+
24
+ #ifndef NDEBUG
25
+ friend std::ostream &operator<<(std::ostream &os, const Decomposed &decomposed);
26
+ #endif // NDEBUG
27
+
28
+ Decomposed interpolate(double progress, const Decomposed &to) const;
29
+ };
30
+
31
+ using TransformMatrixBase<TransformMatrix3D, MATRIX_3D_DIMENSION>::TransformMatrixBase;
32
+
33
+ explicit TransformMatrix3D(jsi::Runtime &rt, const jsi::Value &value);
34
+ explicit TransformMatrix3D(const folly::dynamic &array);
35
+
36
+ template <TransformOp TOperation>
37
+ static TransformMatrix3D create(double value);
38
+ static TransformMatrix3D from2D(const TransformMatrix2D &matrix);
39
+
40
+ #ifndef NDEBUG
41
+ friend std::ostream &operator<<(std::ostream &os, const TransformMatrix3D &matrix);
42
+ #endif // NDEBUG
43
+
44
+ double determinant() const override;
45
+ void adjugate();
46
+ bool invert();
47
+ void translate3d(const Vector3D &translation);
48
+ void scale3d(const Vector3D &scale);
49
+
50
+ std::optional<Decomposed> decompose() const;
51
+ static TransformMatrix3D recompose(const Decomposed &decomposed);
52
+ static TransformMatrix3D fromQuaternion(const Quaternion &q);
53
+
54
+ private:
55
+ std::optional<Vector4D> computePerspective() const;
56
+
57
+ Vector3D getTranslation() const;
58
+ static std::pair<Vector3D, Vector3D> computeScaleAndSkew(std::array<Vector3D, 3> &rows);
59
+ static Quaternion computeQuaternion(std::array<Vector3D, 3> &columns);
60
+
61
+ inline static double
62
+ determinant3x3(double a, double b, double c, double d, double e, double f, double g, double h, double i);
63
+ };
64
+
65
+ Vector4D operator*(const Vector4D &v, const TransformMatrix3D &m);
66
+
67
+ } // namespace reanimated::css
@@ -0,0 +1,52 @@
1
+ #include <reanimated/CSS/common/transforms/TransformOp.h>
2
+
3
+ #include <array>
4
+ #include <string>
5
+ #include <unordered_map>
6
+
7
+ namespace reanimated::css {
8
+
9
+ constexpr std::array<const char *, 13> transformOperationStrings = {
10
+ "perspective",
11
+ "rotate",
12
+ "rotateX",
13
+ "rotateY",
14
+ "rotateZ",
15
+ "scale",
16
+ "scaleX",
17
+ "scaleY",
18
+ "translateX",
19
+ "translateY",
20
+ "skewX",
21
+ "skewY",
22
+ "matrix"};
23
+
24
+ TransformOp getTransformOperationType(const std::string &property) {
25
+ static const std::unordered_map<std::string, TransformOp> stringToEnumMap = {
26
+ {"perspective", TransformOp::Perspective},
27
+ {"rotate", TransformOp::Rotate},
28
+ {"rotateX", TransformOp::RotateX},
29
+ {"rotateY", TransformOp::RotateY},
30
+ {"rotateZ", TransformOp::RotateZ},
31
+ {"scale", TransformOp::Scale},
32
+ {"scaleX", TransformOp::ScaleX},
33
+ {"scaleY", TransformOp::ScaleY},
34
+ {"translateX", TransformOp::TranslateX},
35
+ {"translateY", TransformOp::TranslateY},
36
+ {"skewX", TransformOp::SkewX},
37
+ {"skewY", TransformOp::SkewY},
38
+ {"matrix", TransformOp::Matrix}};
39
+
40
+ auto it = stringToEnumMap.find(property);
41
+ if (it != stringToEnumMap.end()) {
42
+ return it->second;
43
+ } else {
44
+ throw std::invalid_argument("[Reanimated] Unknown transform operation: " + property);
45
+ }
46
+ }
47
+
48
+ std::string getTransformOperationName(const TransformOp type) {
49
+ return transformOperationStrings[static_cast<uint8_t>(type)];
50
+ }
51
+
52
+ } // namespace reanimated::css