@react-native-ohos/react-native-reanimated 4.0.1 → 4.0.2-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.
Files changed (235) hide show
  1. package/compatibility.json +161 -161
  2. package/harmony/reanimated/BuildProfile.ets +1 -1
  3. package/harmony/reanimated/build-profile.json5 +18 -18
  4. package/harmony/reanimated/hvigorfile.ts +4 -4
  5. package/harmony/reanimated/index.ets +4 -4
  6. package/harmony/reanimated/oh-package-lock.json5 +39 -0
  7. package/harmony/reanimated/oh-package.json5 +12 -12
  8. package/harmony/reanimated/src/main/cpp/CMakeLists.txt +65 -62
  9. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.cpp +81 -81
  10. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.h +46 -46
  11. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.cpp +390 -390
  12. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.h +16 -16
  13. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/definitions.h +30 -30
  14. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.cpp +46 -46
  15. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.h +23 -23
  16. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.cpp +53 -53
  17. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.h +21 -21
  18. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.cpp +166 -166
  19. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.h +71 -71
  20. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.cpp +368 -368
  21. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.h +53 -53
  22. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.cpp +594 -594
  23. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.h +67 -67
  24. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.cpp +52 -52
  25. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.h +26 -26
  26. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.cpp +156 -156
  27. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.h +76 -76
  28. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.cpp +94 -94
  29. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.h +33 -33
  30. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.cpp +48 -48
  31. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.h +31 -31
  32. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.cpp +135 -135
  33. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.h +61 -61
  34. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.cpp +100 -100
  35. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.h +45 -45
  36. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.cpp +81 -81
  37. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.h +53 -53
  38. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.cpp +122 -122
  39. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.h +38 -38
  40. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.cpp +82 -82
  41. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.h +63 -63
  42. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValue.h +118 -118
  43. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.cpp +174 -174
  44. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.h +111 -111
  45. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.cpp +196 -196
  46. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.h +66 -66
  47. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.cpp +134 -134
  48. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.h +44 -44
  49. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.cpp +174 -174
  50. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.h +49 -49
  51. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.cpp +45 -45
  52. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.h +26 -26
  53. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.cpp +90 -90
  54. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.h +43 -43
  55. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.cpp +17 -17
  56. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.h +13 -13
  57. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.cpp +127 -127
  58. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.h +51 -51
  59. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.cpp +145 -145
  60. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.h +47 -47
  61. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.cpp +69 -69
  62. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.h +22 -22
  63. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.cpp +66 -66
  64. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.h +15 -15
  65. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.cpp +28 -28
  66. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.h +15 -15
  67. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.cpp +13 -13
  68. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.h +12 -12
  69. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.cpp +157 -157
  70. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.h +189 -189
  71. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.cpp +76 -76
  72. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.h +66 -66
  73. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/configs.h +20 -20
  74. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.cpp +136 -136
  75. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.h +40 -40
  76. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.cpp +38 -38
  77. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.h +24 -24
  78. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.cpp +58 -58
  79. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.h +24 -24
  80. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/blur.h +14 -14
  81. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/brightness.h +14 -14
  82. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/contrast.h +14 -14
  83. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/dropShadow.h +17 -17
  84. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/grayscale.h +14 -14
  85. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/hueRotate.h +14 -14
  86. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/invert.h +14 -14
  87. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/opacity.h +14 -14
  88. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/saturate.h +14 -14
  89. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/sepia.h +14 -14
  90. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.cpp +95 -95
  91. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.h +36 -36
  92. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.cpp +41 -41
  93. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.h +32 -32
  94. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.cpp +99 -99
  95. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.h +37 -37
  96. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.cpp +308 -308
  97. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.h +100 -100
  98. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.cpp +19 -19
  99. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.h +94 -94
  100. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.cpp +18 -18
  101. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.h +43 -43
  102. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/AnimationStyleInterpolator.h +26 -26
  103. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.cpp +103 -103
  104. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.h +42 -42
  105. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.cpp +224 -224
  106. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.h +52 -52
  107. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.cpp +218 -218
  108. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.h +89 -89
  109. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.cpp +149 -149
  110. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.h +33 -33
  111. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.cpp +208 -208
  112. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.h +56 -56
  113. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.cpp +42 -42
  114. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.h +20 -20
  115. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.cpp +41 -41
  116. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.h +39 -39
  117. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.cpp +28 -28
  118. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.h +25 -25
  119. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.cpp +14 -14
  120. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.h +20 -20
  121. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.cpp +39 -39
  122. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.h +25 -25
  123. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.cpp +47 -47
  124. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.h +43 -43
  125. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.cpp +70 -70
  126. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.h +40 -40
  127. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.cpp +146 -146
  128. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.h +71 -71
  129. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.cpp +155 -155
  130. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.h +53 -53
  131. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.cpp +170 -170
  132. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.h +67 -67
  133. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/KeyframeProgressProvider.h +12 -12
  134. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.cpp +41 -41
  135. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.h +31 -31
  136. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.cpp +193 -193
  137. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.h +77 -77
  138. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.cpp +340 -340
  139. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.h +80 -80
  140. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.cpp +45 -45
  141. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.h +29 -29
  142. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.cpp +167 -167
  143. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.h +51 -51
  144. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.cpp +61 -61
  145. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.h +33 -33
  146. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.cpp +80 -80
  147. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.h +39 -39
  148. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.cpp +93 -93
  149. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.h +36 -36
  150. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.cpp +111 -111
  151. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.h +33 -33
  152. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.cpp +75 -75
  153. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.h +45 -45
  154. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.cpp +12 -12
  155. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.h +10 -10
  156. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.cpp +36 -36
  157. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.h +23 -23
  158. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.cpp +149 -149
  159. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.h +32 -32
  160. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.cpp +113 -113
  161. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.h +49 -49
  162. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitShadowNode.h +46 -46
  163. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.cpp +56 -56
  164. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.h +37 -37
  165. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +104 -104
  166. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.h +22 -22
  167. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.cpp +72 -72
  168. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.h +25 -25
  169. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.cpp +160 -160
  170. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.h +71 -71
  171. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.cpp +161 -161
  172. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.h +65 -65
  173. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationType.h +11 -11
  174. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.cpp +137 -137
  175. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.h +82 -82
  176. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.cpp +79 -79
  177. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.h +81 -81
  178. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.cpp +864 -864
  179. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.h +214 -214
  180. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.cpp +897 -897
  181. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.h +220 -220
  182. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.cpp +31 -31
  183. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.h +146 -146
  184. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.cpp +456 -456
  185. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.h +102 -102
  186. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/SharedTransitions.cpp +544 -544
  187. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.cpp +119 -119
  188. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.h +39 -39
  189. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +1380 -1380
  190. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h +230 -230
  191. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp +183 -183
  192. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h +93 -93
  193. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp +54 -54
  194. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h +28 -28
  195. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.cpp +58 -58
  196. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.h +31 -31
  197. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.cpp +18 -18
  198. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.h +44 -44
  199. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/PlatformDepMethodsHolder.h +67 -67
  200. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedSystraceSection.h +114 -114
  201. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedVersion.cpp +46 -46
  202. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedVersion.h +18 -18
  203. package/harmony/reanimated/src/main/cpp/ReanimatedModule.cpp +233 -233
  204. package/harmony/reanimated/src/main/cpp/ReanimatedModule.h +23 -23
  205. package/harmony/reanimated/src/main/cpp/ReanimatedNodesManager.cpp +56 -56
  206. package/harmony/reanimated/src/main/cpp/ReanimatedNodesManager.h +30 -30
  207. package/harmony/reanimated/src/main/cpp/ReanimatedPackage.cpp +44 -44
  208. package/harmony/reanimated/src/main/cpp/ReanimatedPackage.h +16 -16
  209. package/harmony/reanimated/src/main/cpp/ReanimatedSensor.cpp +265 -265
  210. package/harmony/reanimated/src/main/cpp/ReanimatedSensor.h +36 -36
  211. package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.cpp +35 -35
  212. package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.h +23 -23
  213. package/harmony/reanimated/src/main/cpp/ReanimatedUIScheduler.cpp +23 -23
  214. package/harmony/reanimated/src/main/cpp/ReanimatedUIScheduler.h +19 -19
  215. package/harmony/reanimated/src/main/cpp/TransformParser.h +93 -93
  216. package/harmony/reanimated/src/main/ets/AnimationManager.ts +60 -60
  217. package/harmony/reanimated/src/main/ets/ReanimatedModule.ts +51 -51
  218. package/harmony/reanimated/src/main/ets/ReanimatedPackage.ts +25 -25
  219. package/harmony/reanimated/src/main/module.json5 +12 -12
  220. package/harmony/reanimated/src/main/resources/base/element/color.json +7 -7
  221. package/harmony/reanimated/src/main/resources/base/element/string.json +15 -15
  222. package/harmony/reanimated/src/main/resources/base/profile/main_pages.json +5 -5
  223. package/harmony/reanimated/src/main/resources/en_US/element/string.json +15 -15
  224. package/harmony/reanimated/src/main/resources/zh_CN/element/string.json +15 -15
  225. package/harmony/reanimated/ts.ts +6 -6
  226. package/harmony/reanimated.har +0 -0
  227. package/package.json +70 -69
  228. package/scripts/deploy.js +191 -191
  229. package/scripts/set-reanimated-version.js +37 -37
  230. package/scripts/update-version.js +119 -119
  231. package/scripts/validate-react-native-version.js +46 -46
  232. package/scripts/validate-worklets-build.js +17 -17
  233. package/scripts/validate-worklets-version.js +84 -84
  234. package/scripts/worklets-version.json +4 -4
  235. package/src/index.ts +9 -9
@@ -1,368 +1,368 @@
1
- #include <reanimated/CSS/common/transforms/TransformMatrix2D.h>
2
-
3
- #include <cmath>
4
-
5
- namespace reanimated::css {
6
-
7
- TransformMatrix2D::TransformMatrix2D(jsi::Runtime &rt, const jsi::Value &value)
8
- : TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
9
- const auto &array = value.asObject(rt).asArray(rt);
10
- const auto size = array.size(rt);
11
-
12
- if (size == SIZE) {
13
- // Direct 3x3 matrix
14
- for (size_t i = 0; i < SIZE; ++i) {
15
- matrix_[i] = array.getValueAtIndex(rt, i).asNumber();
16
- }
17
- } else if (size == 16) {
18
- // Convert 4x4 matrix to 3x3
19
- // (we should call canConstruct first to ensure that the matrix is
20
- // convertible to 3x3)
21
- //
22
- // [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
23
- // [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
24
- // [ 0, 0, 1, 0] [m[6], m[7], m[8]]
25
- // [m[6], m[7], 0, m[8]]
26
- matrix_[0] = array.getValueAtIndex(rt, 0).asNumber();
27
- matrix_[1] = array.getValueAtIndex(rt, 1).asNumber();
28
- matrix_[2] = array.getValueAtIndex(rt, 3).asNumber();
29
- matrix_[3] = array.getValueAtIndex(rt, 4).asNumber();
30
- matrix_[4] = array.getValueAtIndex(rt, 5).asNumber();
31
- matrix_[5] = array.getValueAtIndex(rt, 7).asNumber();
32
- matrix_[6] = array.getValueAtIndex(rt, 12).asNumber();
33
- matrix_[7] = array.getValueAtIndex(rt, 13).asNumber();
34
- matrix_[8] = array.getValueAtIndex(rt, 15).asNumber();
35
- } else {
36
- throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
37
- }
38
- }
39
-
40
- TransformMatrix2D::TransformMatrix2D(const folly::dynamic &array)
41
- : TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
42
- const auto size = array.size();
43
-
44
- if (size == SIZE) {
45
- // Direct 3x3 matrix
46
- for (size_t i = 0; i < SIZE; ++i) {
47
- matrix_[i] = array[i].asDouble();
48
- }
49
- } else if (size == 16) {
50
- // Convert 4x4 matrix to 3x3
51
- // (we should call canConstruct first to ensure that the matrix is
52
- // convertible to 3x3)
53
- //
54
- // [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
55
- // [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
56
- // [ 0, 0, 1, 0] [m[6], m[7], m[8]]
57
- // [m[6], m[7], 0, m[8]]
58
- matrix_[0] = array[0].asDouble();
59
- matrix_[1] = array[1].asDouble();
60
- matrix_[2] = array[3].asDouble();
61
- matrix_[3] = array[4].asDouble();
62
- matrix_[4] = array[5].asDouble();
63
- matrix_[5] = array[7].asDouble();
64
- matrix_[6] = array[12].asDouble();
65
- matrix_[7] = array[13].asDouble();
66
- matrix_[8] = array[15].asDouble();
67
- } else {
68
- throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
69
- }
70
- }
71
-
72
- bool TransformMatrix2D::canConstruct(jsi::Runtime &rt, const jsi::Value &value) {
73
- if (!value.isObject()) {
74
- return false;
75
- }
76
-
77
- const auto &obj = value.asObject(rt);
78
- if (!obj.isArray(rt)) {
79
- return false;
80
- }
81
-
82
- const auto &array = obj.asArray(rt);
83
- const auto size = array.size(rt);
84
-
85
- // Check if it's a 3x3 matrix (9 elements)
86
- if (size == 9) {
87
- return true;
88
- }
89
-
90
- // Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
91
- if (size == 16) {
92
- // A 4x4 matrix can be converted to 2D if it has this pattern
93
- // (where x means any number)
94
- // [x, x, 0, x]
95
- // [x, x, 0, x]
96
- // [0, 0, 1, 0]
97
- // [x, x, 0, x]
98
- return array.getValueAtIndex(rt, 2).asNumber() == 0.0 && array.getValueAtIndex(rt, 6).asNumber() == 0.0 &&
99
- array.getValueAtIndex(rt, 10).asNumber() == 1.0 && array.getValueAtIndex(rt, 11).asNumber() == 0.0 &&
100
- array.getValueAtIndex(rt, 14).asNumber() == 0.0 && array.getValueAtIndex(rt, 15).asNumber() == 1.0;
101
- }
102
-
103
- return false;
104
- }
105
-
106
- bool TransformMatrix2D::canConstruct(const folly::dynamic &array) {
107
- if (!array.isArray()) {
108
- return false;
109
- }
110
- const auto size = array.size();
111
-
112
- // Check if it's a 3x3 matrix (9 elements)
113
- if (size == 9) {
114
- return true;
115
- }
116
-
117
- // Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
118
- if (size == 16) {
119
- // A 4x4 matrix can be converted to 2D if it has this pattern:
120
- // (where x means any number)
121
- // [x, x, 0, x]
122
- // [x, x, 0, x]
123
- // [0, 0, 1, 0]
124
- // [x, x, 0, x]
125
- return array[2].asDouble() == 0.0 && array[6].asDouble() == 0.0 && array[10].asDouble() == 1.0 &&
126
- array[11].asDouble() == 0.0 && array[14].asDouble() == 0.0 && array[15].asDouble() == 1.0;
127
- }
128
-
129
- return false;
130
- }
131
-
132
- TransformMatrix2D::Decomposed TransformMatrix2D::Decomposed::interpolate(
133
- const double progress,
134
- const TransformMatrix2D::Decomposed &target) const {
135
- // Compute shortest signed angular delta (in range −π..π]
136
- const double angleDelta = std::remainder(target.rotation - rotation, 2.0 * M_PI);
137
-
138
- return {
139
- .scale = scale.interpolate(progress, target.scale),
140
- .skew = skew + (target.skew - skew) * progress,
141
- .rotation = rotation + progress * angleDelta,
142
- .translation = translation.interpolate(progress, target.translation),
143
- };
144
- }
145
-
146
- #ifndef NDEBUG
147
-
148
- std::ostream &operator<<(std::ostream &os, const TransformMatrix2D::Decomposed &decomposed) {
149
- os << "TransformMatrix2D::Decomposed(scale=" << decomposed.scale << ", skew=" << decomposed.skew
150
- << ", rotation=" << decomposed.rotation << ", translation=" << decomposed.translation << ")";
151
- return os;
152
- }
153
-
154
- #endif // NDEBUG
155
-
156
- template <>
157
- TransformMatrix2D TransformMatrix2D::create<TransformOp::Rotate>(double v) {
158
- const auto cosVal = std::cos(v);
159
- const auto sinVal = std::sin(v);
160
- // clang-format off
161
- return TransformMatrix2D({
162
- cosVal, sinVal, 0,
163
- -sinVal, cosVal, 0,
164
- 0, 0, 1
165
- });
166
- // clang-format on
167
- }
168
-
169
- template <>
170
- TransformMatrix2D TransformMatrix2D::create<TransformOp::Scale>(double v) {
171
- // clang-format off
172
- return TransformMatrix2D({
173
- v, 0, 0,
174
- 0, v, 0,
175
- 0, 0, 1
176
- });
177
- // clang-format on
178
- }
179
-
180
- template <>
181
- TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleX>(double v) {
182
- // clang-format off
183
- return TransformMatrix2D({
184
- v, 0, 0,
185
- 0, 1, 0,
186
- 0, 0, 1
187
- });
188
- // clang-format on
189
- }
190
-
191
- template <>
192
- TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleY>(double v) {
193
- // clang-format off
194
- return TransformMatrix2D({
195
- 1, 0, 0,
196
- 0, v, 0,
197
- 0, 0, 1
198
- });
199
- // clang-format on
200
- }
201
-
202
- template <>
203
- TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateX>(double v) {
204
- // clang-format off
205
- return TransformMatrix2D({
206
- 1, 0, 0,
207
- 0, 1, 0,
208
- v, 0, 1
209
- });
210
- // clang-format on
211
- }
212
-
213
- template <>
214
- TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateY>(double v) {
215
- // clang-format off
216
- return TransformMatrix2D({
217
- 1, 0, 0,
218
- 0, 1, 0,
219
- 0, v, 1
220
- });
221
- // clang-format on
222
- }
223
-
224
- template <>
225
- TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewX>(double v) {
226
- const auto tanVal = std::tan(v);
227
- // clang-format off
228
- return TransformMatrix2D({
229
- 1, 0, 0,
230
- tanVal, 1, 0,
231
- 0, 0, 1
232
- });
233
- // clang-format on
234
- }
235
-
236
- template <>
237
- TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewY>(double v) {
238
- const auto tanVal = std::tan(v);
239
- // clang-format off
240
- return TransformMatrix2D({
241
- 1, tanVal, 0,
242
- 0, 1, 0,
243
- 0, 0, 1
244
- });
245
- // clang-format on
246
- }
247
-
248
- template <TransformOp TOperation>
249
- TransformMatrix2D TransformMatrix2D::create(double value) {
250
- throw std::invalid_argument(
251
- "[Reanimated] Cannot create TransformMatrix2D from: " + getTransformOperationName(TOperation));
252
- }
253
-
254
- double TransformMatrix2D::determinant() const {
255
- return (matrix_[0] * matrix_[4] * matrix_[8]) + (matrix_[1] * matrix_[5] * matrix_[6]) +
256
- (matrix_[2] * matrix_[3] * matrix_[7]) - (matrix_[2] * matrix_[4] * matrix_[6]) -
257
- (matrix_[1] * matrix_[3] * matrix_[8]) - (matrix_[0] * matrix_[5] * matrix_[7]);
258
- }
259
-
260
- void TransformMatrix2D::translate2d(const Vector2D &translation) {
261
- for (size_t i = 0; i < 3; ++i) {
262
- matrix_[6 + i] += translation[0] * matrix_[i] + translation[1] * matrix_[3 + i];
263
- }
264
- }
265
-
266
- void TransformMatrix2D::scale2d(const Vector2D &scale) {
267
- for (size_t i = 0; i < 3; ++i) {
268
- matrix_[i] *= scale[0];
269
- matrix_[3 + i] *= scale[1];
270
- }
271
- }
272
-
273
- std::optional<TransformMatrix2D::Decomposed> TransformMatrix2D::decompose() const {
274
- auto matrixCp = *this;
275
-
276
- if (!matrixCp.normalize()) {
277
- return std::nullopt;
278
- }
279
-
280
- const auto translation = matrixCp.getTranslation();
281
-
282
- // Take the 2×2 linear part into two column vectors
283
- std::array<Vector2D, 2> rows;
284
- for (size_t i = 0; i < 2; ++i) {
285
- rows[i] = Vector2D(matrixCp[i * 3], matrixCp[i * 3 + 1]);
286
- }
287
-
288
- auto [scale, skew] = computeScaleAndSkew(rows);
289
-
290
- // At this point, the matrix (in rows) is orthonormal.
291
- // Check for a coordinate system flip. If the determinant
292
- // is negative, then negate the matrix and the scaling factors.
293
- if (rows[0].cross(rows[1]) < 0) {
294
- scale *= -1;
295
- for (auto &row : rows) {
296
- row *= -1;
297
- }
298
- }
299
-
300
- const auto rotation = computeRotation(rows);
301
-
302
- return TransformMatrix2D::Decomposed{.scale = scale, .skew = skew, .rotation = rotation, .translation = translation};
303
- }
304
-
305
- TransformMatrix2D TransformMatrix2D::recompose(const TransformMatrix2D::Decomposed &decomposed) {
306
- auto result = TransformMatrix2D();
307
-
308
- // Apply Translation
309
- result.translate2d(decomposed.translation);
310
-
311
- // Apply Rotation
312
- if (decomposed.rotation != 0) {
313
- const auto rotationMatrix = TransformMatrix2D::create<TransformOp::Rotate>(decomposed.rotation);
314
- result = rotationMatrix * result;
315
- }
316
-
317
- // Apply XY shear
318
- if (decomposed.skew != 0) {
319
- auto tmp = TransformMatrix2D();
320
- tmp[3] = decomposed.skew;
321
- result = tmp * result;
322
- }
323
-
324
- // Apply Scale
325
- result.scale2d(decomposed.scale);
326
-
327
- return result;
328
- }
329
-
330
- Vector2D TransformMatrix2D::getTranslation() const {
331
- return Vector2D(matrix_[6], matrix_[7]);
332
- }
333
-
334
- std::pair<Vector2D, double> TransformMatrix2D::computeScaleAndSkew(std::array<Vector2D, 2> &rows) {
335
- Vector2D scale;
336
-
337
- // Compute X scale and normalize first row
338
- scale[0] = rows[0].length();
339
- rows[0].normalize();
340
-
341
- // Compute XY shear and orthogonalize second row against first
342
- double skew = rows[0].dot(rows[1]);
343
- rows[1] = rows[1].addScaled(rows[0], -skew);
344
-
345
- // Now, compute Y scale and normalize second row
346
- scale[1] = rows[1].length();
347
- rows[1].normalize();
348
-
349
- // Next, Normalize shear by Y scale
350
- skew /= scale[1];
351
-
352
- return {scale, skew};
353
- }
354
-
355
- double TransformMatrix2D::computeRotation(std::array<Vector2D, 2> &rows) {
356
- // For 2D, we can compute rotation directly from the orthonormal matrix
357
- // The rotation angle is atan2(m01, m00) where m01 is rows[0][1] and m00 is
358
- // rows[0][0]
359
- return std::atan2(rows[0][1], rows[0][0]);
360
- }
361
- // Explicit template instantiations for unsupported operations
362
- // These will use the fallback template function that throws an error
363
- template TransformMatrix2D TransformMatrix2D::create<TransformOp::Perspective>(double);
364
- template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateX>(double);
365
- template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateY>(double);
366
- template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateZ>(double);
367
-
368
- } // namespace reanimated::css
1
+ #include <reanimated/CSS/common/transforms/TransformMatrix2D.h>
2
+
3
+ #include <cmath>
4
+
5
+ namespace reanimated::css {
6
+
7
+ TransformMatrix2D::TransformMatrix2D(jsi::Runtime &rt, const jsi::Value &value)
8
+ : TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
9
+ const auto &array = value.asObject(rt).asArray(rt);
10
+ const auto size = array.size(rt);
11
+
12
+ if (size == SIZE) {
13
+ // Direct 3x3 matrix
14
+ for (size_t i = 0; i < SIZE; ++i) {
15
+ matrix_[i] = array.getValueAtIndex(rt, i).asNumber();
16
+ }
17
+ } else if (size == 16) {
18
+ // Convert 4x4 matrix to 3x3
19
+ // (we should call canConstruct first to ensure that the matrix is
20
+ // convertible to 3x3)
21
+ //
22
+ // [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
23
+ // [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
24
+ // [ 0, 0, 1, 0] [m[6], m[7], m[8]]
25
+ // [m[6], m[7], 0, m[8]]
26
+ matrix_[0] = array.getValueAtIndex(rt, 0).asNumber();
27
+ matrix_[1] = array.getValueAtIndex(rt, 1).asNumber();
28
+ matrix_[2] = array.getValueAtIndex(rt, 3).asNumber();
29
+ matrix_[3] = array.getValueAtIndex(rt, 4).asNumber();
30
+ matrix_[4] = array.getValueAtIndex(rt, 5).asNumber();
31
+ matrix_[5] = array.getValueAtIndex(rt, 7).asNumber();
32
+ matrix_[6] = array.getValueAtIndex(rt, 12).asNumber();
33
+ matrix_[7] = array.getValueAtIndex(rt, 13).asNumber();
34
+ matrix_[8] = array.getValueAtIndex(rt, 15).asNumber();
35
+ } else {
36
+ throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
37
+ }
38
+ }
39
+
40
+ TransformMatrix2D::TransformMatrix2D(const folly::dynamic &array)
41
+ : TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
42
+ const auto size = array.size();
43
+
44
+ if (size == SIZE) {
45
+ // Direct 3x3 matrix
46
+ for (size_t i = 0; i < SIZE; ++i) {
47
+ matrix_[i] = array[i].asDouble();
48
+ }
49
+ } else if (size == 16) {
50
+ // Convert 4x4 matrix to 3x3
51
+ // (we should call canConstruct first to ensure that the matrix is
52
+ // convertible to 3x3)
53
+ //
54
+ // [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
55
+ // [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
56
+ // [ 0, 0, 1, 0] [m[6], m[7], m[8]]
57
+ // [m[6], m[7], 0, m[8]]
58
+ matrix_[0] = array[0].asDouble();
59
+ matrix_[1] = array[1].asDouble();
60
+ matrix_[2] = array[3].asDouble();
61
+ matrix_[3] = array[4].asDouble();
62
+ matrix_[4] = array[5].asDouble();
63
+ matrix_[5] = array[7].asDouble();
64
+ matrix_[6] = array[12].asDouble();
65
+ matrix_[7] = array[13].asDouble();
66
+ matrix_[8] = array[15].asDouble();
67
+ } else {
68
+ throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
69
+ }
70
+ }
71
+
72
+ bool TransformMatrix2D::canConstruct(jsi::Runtime &rt, const jsi::Value &value) {
73
+ if (!value.isObject()) {
74
+ return false;
75
+ }
76
+
77
+ const auto &obj = value.asObject(rt);
78
+ if (!obj.isArray(rt)) {
79
+ return false;
80
+ }
81
+
82
+ const auto &array = obj.asArray(rt);
83
+ const auto size = array.size(rt);
84
+
85
+ // Check if it's a 3x3 matrix (9 elements)
86
+ if (size == 9) {
87
+ return true;
88
+ }
89
+
90
+ // Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
91
+ if (size == 16) {
92
+ // A 4x4 matrix can be converted to 2D if it has this pattern
93
+ // (where x means any number)
94
+ // [x, x, 0, x]
95
+ // [x, x, 0, x]
96
+ // [0, 0, 1, 0]
97
+ // [x, x, 0, x]
98
+ return array.getValueAtIndex(rt, 2).asNumber() == 0.0 && array.getValueAtIndex(rt, 6).asNumber() == 0.0 &&
99
+ array.getValueAtIndex(rt, 10).asNumber() == 1.0 && array.getValueAtIndex(rt, 11).asNumber() == 0.0 &&
100
+ array.getValueAtIndex(rt, 14).asNumber() == 0.0 && array.getValueAtIndex(rt, 15).asNumber() == 1.0;
101
+ }
102
+
103
+ return false;
104
+ }
105
+
106
+ bool TransformMatrix2D::canConstruct(const folly::dynamic &array) {
107
+ if (!array.isArray()) {
108
+ return false;
109
+ }
110
+ const auto size = array.size();
111
+
112
+ // Check if it's a 3x3 matrix (9 elements)
113
+ if (size == 9) {
114
+ return true;
115
+ }
116
+
117
+ // Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
118
+ if (size == 16) {
119
+ // A 4x4 matrix can be converted to 2D if it has this pattern:
120
+ // (where x means any number)
121
+ // [x, x, 0, x]
122
+ // [x, x, 0, x]
123
+ // [0, 0, 1, 0]
124
+ // [x, x, 0, x]
125
+ return array[2].asDouble() == 0.0 && array[6].asDouble() == 0.0 && array[10].asDouble() == 1.0 &&
126
+ array[11].asDouble() == 0.0 && array[14].asDouble() == 0.0 && array[15].asDouble() == 1.0;
127
+ }
128
+
129
+ return false;
130
+ }
131
+
132
+ TransformMatrix2D::Decomposed TransformMatrix2D::Decomposed::interpolate(
133
+ const double progress,
134
+ const TransformMatrix2D::Decomposed &target) const {
135
+ // Compute shortest signed angular delta (in range −π..π]
136
+ const double angleDelta = std::remainder(target.rotation - rotation, 2.0 * M_PI);
137
+
138
+ return {
139
+ .scale = scale.interpolate(progress, target.scale),
140
+ .skew = skew + (target.skew - skew) * progress,
141
+ .rotation = rotation + progress * angleDelta,
142
+ .translation = translation.interpolate(progress, target.translation),
143
+ };
144
+ }
145
+
146
+ #ifndef NDEBUG
147
+
148
+ std::ostream &operator<<(std::ostream &os, const TransformMatrix2D::Decomposed &decomposed) {
149
+ os << "TransformMatrix2D::Decomposed(scale=" << decomposed.scale << ", skew=" << decomposed.skew
150
+ << ", rotation=" << decomposed.rotation << ", translation=" << decomposed.translation << ")";
151
+ return os;
152
+ }
153
+
154
+ #endif // NDEBUG
155
+
156
+ template <>
157
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::Rotate>(double v) {
158
+ const auto cosVal = std::cos(v);
159
+ const auto sinVal = std::sin(v);
160
+ // clang-format off
161
+ return TransformMatrix2D({
162
+ cosVal, sinVal, 0,
163
+ -sinVal, cosVal, 0,
164
+ 0, 0, 1
165
+ });
166
+ // clang-format on
167
+ }
168
+
169
+ template <>
170
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::Scale>(double v) {
171
+ // clang-format off
172
+ return TransformMatrix2D({
173
+ v, 0, 0,
174
+ 0, v, 0,
175
+ 0, 0, 1
176
+ });
177
+ // clang-format on
178
+ }
179
+
180
+ template <>
181
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleX>(double v) {
182
+ // clang-format off
183
+ return TransformMatrix2D({
184
+ v, 0, 0,
185
+ 0, 1, 0,
186
+ 0, 0, 1
187
+ });
188
+ // clang-format on
189
+ }
190
+
191
+ template <>
192
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleY>(double v) {
193
+ // clang-format off
194
+ return TransformMatrix2D({
195
+ 1, 0, 0,
196
+ 0, v, 0,
197
+ 0, 0, 1
198
+ });
199
+ // clang-format on
200
+ }
201
+
202
+ template <>
203
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateX>(double v) {
204
+ // clang-format off
205
+ return TransformMatrix2D({
206
+ 1, 0, 0,
207
+ 0, 1, 0,
208
+ v, 0, 1
209
+ });
210
+ // clang-format on
211
+ }
212
+
213
+ template <>
214
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateY>(double v) {
215
+ // clang-format off
216
+ return TransformMatrix2D({
217
+ 1, 0, 0,
218
+ 0, 1, 0,
219
+ 0, v, 1
220
+ });
221
+ // clang-format on
222
+ }
223
+
224
+ template <>
225
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewX>(double v) {
226
+ const auto tanVal = std::tan(v);
227
+ // clang-format off
228
+ return TransformMatrix2D({
229
+ 1, 0, 0,
230
+ tanVal, 1, 0,
231
+ 0, 0, 1
232
+ });
233
+ // clang-format on
234
+ }
235
+
236
+ template <>
237
+ TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewY>(double v) {
238
+ const auto tanVal = std::tan(v);
239
+ // clang-format off
240
+ return TransformMatrix2D({
241
+ 1, tanVal, 0,
242
+ 0, 1, 0,
243
+ 0, 0, 1
244
+ });
245
+ // clang-format on
246
+ }
247
+
248
+ template <TransformOp TOperation>
249
+ TransformMatrix2D TransformMatrix2D::create(double value) {
250
+ throw std::invalid_argument(
251
+ "[Reanimated] Cannot create TransformMatrix2D from: " + getTransformOperationName(TOperation));
252
+ }
253
+
254
+ double TransformMatrix2D::determinant() const {
255
+ return (matrix_[0] * matrix_[4] * matrix_[8]) + (matrix_[1] * matrix_[5] * matrix_[6]) +
256
+ (matrix_[2] * matrix_[3] * matrix_[7]) - (matrix_[2] * matrix_[4] * matrix_[6]) -
257
+ (matrix_[1] * matrix_[3] * matrix_[8]) - (matrix_[0] * matrix_[5] * matrix_[7]);
258
+ }
259
+
260
+ void TransformMatrix2D::translate2d(const Vector2D &translation) {
261
+ for (size_t i = 0; i < 3; ++i) {
262
+ matrix_[6 + i] += translation[0] * matrix_[i] + translation[1] * matrix_[3 + i];
263
+ }
264
+ }
265
+
266
+ void TransformMatrix2D::scale2d(const Vector2D &scale) {
267
+ for (size_t i = 0; i < 3; ++i) {
268
+ matrix_[i] *= scale[0];
269
+ matrix_[3 + i] *= scale[1];
270
+ }
271
+ }
272
+
273
+ std::optional<TransformMatrix2D::Decomposed> TransformMatrix2D::decompose() const {
274
+ auto matrixCp = *this;
275
+
276
+ if (!matrixCp.normalize()) {
277
+ return std::nullopt;
278
+ }
279
+
280
+ const auto translation = matrixCp.getTranslation();
281
+
282
+ // Take the 2×2 linear part into two column vectors
283
+ std::array<Vector2D, 2> rows;
284
+ for (size_t i = 0; i < 2; ++i) {
285
+ rows[i] = Vector2D(matrixCp[i * 3], matrixCp[i * 3 + 1]);
286
+ }
287
+
288
+ auto [scale, skew] = computeScaleAndSkew(rows);
289
+
290
+ // At this point, the matrix (in rows) is orthonormal.
291
+ // Check for a coordinate system flip. If the determinant
292
+ // is negative, then negate the matrix and the scaling factors.
293
+ if (rows[0].cross(rows[1]) < 0) {
294
+ scale *= -1;
295
+ for (auto &row : rows) {
296
+ row *= -1;
297
+ }
298
+ }
299
+
300
+ const auto rotation = computeRotation(rows);
301
+
302
+ return TransformMatrix2D::Decomposed{.scale = scale, .skew = skew, .rotation = rotation, .translation = translation};
303
+ }
304
+
305
+ TransformMatrix2D TransformMatrix2D::recompose(const TransformMatrix2D::Decomposed &decomposed) {
306
+ auto result = TransformMatrix2D();
307
+
308
+ // Apply Translation
309
+ result.translate2d(decomposed.translation);
310
+
311
+ // Apply Rotation
312
+ if (decomposed.rotation != 0) {
313
+ const auto rotationMatrix = TransformMatrix2D::create<TransformOp::Rotate>(decomposed.rotation);
314
+ result = rotationMatrix * result;
315
+ }
316
+
317
+ // Apply XY shear
318
+ if (decomposed.skew != 0) {
319
+ auto tmp = TransformMatrix2D();
320
+ tmp[3] = decomposed.skew;
321
+ result = tmp * result;
322
+ }
323
+
324
+ // Apply Scale
325
+ result.scale2d(decomposed.scale);
326
+
327
+ return result;
328
+ }
329
+
330
+ Vector2D TransformMatrix2D::getTranslation() const {
331
+ return Vector2D(matrix_[6], matrix_[7]);
332
+ }
333
+
334
+ std::pair<Vector2D, double> TransformMatrix2D::computeScaleAndSkew(std::array<Vector2D, 2> &rows) {
335
+ Vector2D scale;
336
+
337
+ // Compute X scale and normalize first row
338
+ scale[0] = rows[0].length();
339
+ rows[0].normalize();
340
+
341
+ // Compute XY shear and orthogonalize second row against first
342
+ double skew = rows[0].dot(rows[1]);
343
+ rows[1] = rows[1].addScaled(rows[0], -skew);
344
+
345
+ // Now, compute Y scale and normalize second row
346
+ scale[1] = rows[1].length();
347
+ rows[1].normalize();
348
+
349
+ // Next, Normalize shear by Y scale
350
+ skew /= scale[1];
351
+
352
+ return {scale, skew};
353
+ }
354
+
355
+ double TransformMatrix2D::computeRotation(std::array<Vector2D, 2> &rows) {
356
+ // For 2D, we can compute rotation directly from the orthonormal matrix
357
+ // The rotation angle is atan2(m01, m00) where m01 is rows[0][1] and m00 is
358
+ // rows[0][0]
359
+ return std::atan2(rows[0][1], rows[0][0]);
360
+ }
361
+ // Explicit template instantiations for unsupported operations
362
+ // These will use the fallback template function that throws an error
363
+ template TransformMatrix2D TransformMatrix2D::create<TransformOp::Perspective>(double);
364
+ template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateX>(double);
365
+ template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateY>(double);
366
+ template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateZ>(double);
367
+
368
+ } // namespace reanimated::css