react-nitro-yoga 0.0.0-stage → 0.0.1-alpha.7

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 (529) hide show
  1. package/Generated/.gitattributes +1 -0
  2. package/Generated/api.d.ts +100 -0
  3. package/Generated/ffigen_yoga_adapters.h +52 -0
  4. package/Generated/native.d.ts +84 -0
  5. package/Generated/native.ts +283 -0
  6. package/Generated/yoga.c +1087 -0
  7. package/LICENSE +21 -0
  8. package/Package.swift +57 -0
  9. package/README.md +61 -2
  10. package/Sources/ReactNitroYoga/InstallHermesBindings.cpp +11 -0
  11. package/Sources/ReactNitroYoga/SHUnit.h +16 -0
  12. package/include/ReactNitroYoga/InstallHermesBindings.hpp +12 -0
  13. package/package.json +26 -4
  14. package/yoga/.clang-format +109 -0
  15. package/yoga/.clang-tidy +217 -0
  16. package/yoga/.editorconfig +11 -0
  17. package/yoga/.eslintrc.cjs +84 -0
  18. package/yoga/.github/ISSUE_TEMPLATE.md +21 -0
  19. package/yoga/.github/actions/black/action.yml +25 -0
  20. package/yoga/.github/actions/cache-emsdk/action.yml +10 -0
  21. package/yoga/.github/actions/install-ninja/action.yml +14 -0
  22. package/yoga/.github/actions/setup-android/action.yml +12 -0
  23. package/yoga/.github/actions/setup-apple/action.yml +8 -0
  24. package/yoga/.github/actions/setup-cpp/action.yml +34 -0
  25. package/yoga/.github/actions/setup-js/action.yml +18 -0
  26. package/yoga/.github/workflows/publish-android-release.yml +38 -0
  27. package/yoga/.github/workflows/publish-android-snashot.yml +36 -0
  28. package/yoga/.github/workflows/publish-npm-release.yml +25 -0
  29. package/yoga/.github/workflows/validate-android.yml +30 -0
  30. package/yoga/.github/workflows/validate-cpp.yml +101 -0
  31. package/yoga/.github/workflows/validate-format.yml +36 -0
  32. package/yoga/.github/workflows/validate-js.yml +119 -0
  33. package/yoga/.github/workflows/validate-swiftpm.yml +29 -0
  34. package/yoga/.github/workflows/validate-tests.yml +35 -0
  35. package/yoga/.github/workflows/validate-website.yml +45 -0
  36. package/yoga/.prettierignore +3 -0
  37. package/yoga/.prettierrc.js +16 -0
  38. package/yoga/.vscode/extensions.json +7 -0
  39. package/yoga/.vscode/launch.json +25 -0
  40. package/yoga/.vscode/settings.json +20 -0
  41. package/yoga/.vscode/tasks.json +23 -0
  42. package/yoga/CMakeLists.txt +58 -0
  43. package/yoga/CODE_OF_CONDUCT.md +76 -0
  44. package/yoga/CONTRIBUTING.md +44 -0
  45. package/yoga/LICENSE +21 -0
  46. package/yoga/LICENSE-examples +9 -0
  47. package/yoga/Package.swift +32 -0
  48. package/yoga/README.md +36 -0
  49. package/yoga/benchmark/Benchmark.cpp +400 -0
  50. package/yoga/benchmark/Benchmark.h +39 -0
  51. package/yoga/benchmark/CMakeLists.txt +27 -0
  52. package/yoga/benchmark/TreeDeserialization.cpp +248 -0
  53. package/yoga/benchmark/TreeDeserialization.h +52 -0
  54. package/yoga/benchmark/YGBenchmark.c +183 -0
  55. package/yoga/benchmark/benchmark +15 -0
  56. package/yoga/benchmark/captures/chat-mac.json +24426 -0
  57. package/yoga/benchmark/captures/feed-android.json +10335 -0
  58. package/yoga/benchmark/captures/profile-ios.json +1955 -0
  59. package/yoga/benchmark/captures/rendering-sample-mac.json +1927 -0
  60. package/yoga/build.gradle +46 -0
  61. package/yoga/build_fuzz_tests +28 -0
  62. package/yoga/capture/CMakeLists.txt +23 -0
  63. package/yoga/capture/CaptureTree.cpp +100 -0
  64. package/yoga/capture/CaptureTree.h +47 -0
  65. package/yoga/capture/NodeToString.cpp +359 -0
  66. package/yoga/capture/NodeToString.h +40 -0
  67. package/yoga/cmake/project-defaults.cmake +50 -0
  68. package/yoga/cmake/yoga-config.cmake.in +10 -0
  69. package/yoga/enums.py +394 -0
  70. package/yoga/fuzz/CMakeLists.txt +21 -0
  71. package/yoga/fuzz/FuzzLayout.cpp +57 -0
  72. package/yoga/gentest/babel.config.cjs +12 -0
  73. package/yoga/gentest/fixtures/YGAbsolutePositionTest.html +168 -0
  74. package/yoga/gentest/fixtures/YGAlignContentTest.html +479 -0
  75. package/yoga/gentest/fixtures/YGAlignItemsTest.html +227 -0
  76. package/yoga/gentest/fixtures/YGAlignSelfTest.html +23 -0
  77. package/yoga/gentest/fixtures/YGAndroidNewsFeed.html +28 -0
  78. package/yoga/gentest/fixtures/YGAspectRatioTest.html +3 -0
  79. package/yoga/gentest/fixtures/YGAutoTest.html +25 -0
  80. package/yoga/gentest/fixtures/YGBorderTest.html +18 -0
  81. package/yoga/gentest/fixtures/YGBoxSizingTest.html +240 -0
  82. package/yoga/gentest/fixtures/YGDimensionTest.html +9 -0
  83. package/yoga/gentest/fixtures/YGDisplayTest.html +89 -0
  84. package/yoga/gentest/fixtures/YGFlexBasisFitContentTest.html +55 -0
  85. package/yoga/gentest/fixtures/YGFlexDirectionTest.html +391 -0
  86. package/yoga/gentest/fixtures/YGFlexTest.html +53 -0
  87. package/yoga/gentest/fixtures/YGFlexWrapTest.html +160 -0
  88. package/yoga/gentest/fixtures/YGGapTest.html +233 -0
  89. package/yoga/gentest/fixtures/YGIntrinsicSizeTest.html +295 -0
  90. package/yoga/gentest/fixtures/YGJustifyContentTest.html +164 -0
  91. package/yoga/gentest/fixtures/YGMarginTest.html +157 -0
  92. package/yoga/gentest/fixtures/YGMinMaxDimensionTest.html +116 -0
  93. package/yoga/gentest/fixtures/YGPaddingTest.html +29 -0
  94. package/yoga/gentest/fixtures/YGPercentageTest.html +125 -0
  95. package/yoga/gentest/fixtures/YGRoundingTest.html +95 -0
  96. package/yoga/gentest/fixtures/YGSizeOverflowTest.html +17 -0
  97. package/yoga/gentest/fixtures/YGStaticPositionTest.html +712 -0
  98. package/yoga/gentest/fonts/Ahem.ttf +0 -0
  99. package/yoga/gentest/gentest-driver.ts +141 -0
  100. package/yoga/gentest/gentest-validate.ts +43 -0
  101. package/yoga/gentest/package.json +24 -0
  102. package/yoga/gentest/scripts/gentest-validate.ts +43 -0
  103. package/yoga/gentest/signedsource.d.ts +10 -0
  104. package/yoga/gentest/src/ChromePool.ts +78 -0
  105. package/yoga/gentest/src/CssToYoga.ts +958 -0
  106. package/yoga/gentest/src/buildLayoutTree.ts +98 -0
  107. package/yoga/gentest/src/cli.ts +163 -0
  108. package/yoga/gentest/src/emitters/CppEmitter.ts +452 -0
  109. package/yoga/gentest/src/emitters/Emitter.ts +204 -0
  110. package/yoga/gentest/src/emitters/JavaEmitter.ts +469 -0
  111. package/yoga/gentest/src/emitters/JavascriptEmitter.ts +353 -0
  112. package/yoga/gentest/src/types.ts +41 -0
  113. package/yoga/gentest/test-template.html +42 -0
  114. package/yoga/gentest/tsconfig.json +13 -0
  115. package/yoga/gradle/wrapper/gradle-wrapper.jar +0 -0
  116. package/yoga/gradle/wrapper/gradle-wrapper.properties +7 -0
  117. package/yoga/gradle.properties +14 -0
  118. package/yoga/gradlew +251 -0
  119. package/yoga/gradlew.bat +94 -0
  120. package/yoga/java/AndroidManifest.xml +14 -0
  121. package/yoga/java/CMakeLists.txt +22 -0
  122. package/yoga/java/build.gradle.kts +127 -0
  123. package/yoga/java/com/facebook/yoga/LayoutPassReason.kt +35 -0
  124. package/yoga/java/com/facebook/yoga/YogaAlign.kt +45 -0
  125. package/yoga/java/com/facebook/yoga/YogaBaselineFunction.kt +16 -0
  126. package/yoga/java/com/facebook/yoga/YogaBoxSizing.kt +27 -0
  127. package/yoga/java/com/facebook/yoga/YogaConfig.kt +48 -0
  128. package/yoga/java/com/facebook/yoga/YogaConfigFactory.kt +12 -0
  129. package/yoga/java/com/facebook/yoga/YogaConfigJNIBase.kt +70 -0
  130. package/yoga/java/com/facebook/yoga/YogaConfigJNIFinalizer.kt +30 -0
  131. package/yoga/java/com/facebook/yoga/YogaConstants.kt +18 -0
  132. package/yoga/java/com/facebook/yoga/YogaDimension.kt +27 -0
  133. package/yoga/java/com/facebook/yoga/YogaDirection.kt +29 -0
  134. package/yoga/java/com/facebook/yoga/YogaDisplay.kt +31 -0
  135. package/yoga/java/com/facebook/yoga/YogaEdge.kt +41 -0
  136. package/yoga/java/com/facebook/yoga/YogaErrata.kt +39 -0
  137. package/yoga/java/com/facebook/yoga/YogaExperimentalFeature.kt +27 -0
  138. package/yoga/java/com/facebook/yoga/YogaFlexDirection.kt +31 -0
  139. package/yoga/java/com/facebook/yoga/YogaGridTrackType.kt +33 -0
  140. package/yoga/java/com/facebook/yoga/YogaGutter.kt +29 -0
  141. package/yoga/java/com/facebook/yoga/YogaJustify.kt +43 -0
  142. package/yoga/java/com/facebook/yoga/YogaLayoutType.kt +27 -0
  143. package/yoga/java/com/facebook/yoga/YogaLogLevel.kt +39 -0
  144. package/yoga/java/com/facebook/yoga/YogaLogger.kt +19 -0
  145. package/yoga/java/com/facebook/yoga/YogaMeasureFunction.kt +19 -0
  146. package/yoga/java/com/facebook/yoga/YogaMeasureMode.kt +29 -0
  147. package/yoga/java/com/facebook/yoga/YogaMeasureOutput.kt +29 -0
  148. package/yoga/java/com/facebook/yoga/YogaNative.kt +347 -0
  149. package/yoga/java/com/facebook/yoga/YogaNode.kt +254 -0
  150. package/yoga/java/com/facebook/yoga/YogaNodeFactory.kt +14 -0
  151. package/yoga/java/com/facebook/yoga/YogaNodeJNIBase.kt +762 -0
  152. package/yoga/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +33 -0
  153. package/yoga/java/com/facebook/yoga/YogaNodeType.kt +27 -0
  154. package/yoga/java/com/facebook/yoga/YogaOverflow.kt +29 -0
  155. package/yoga/java/com/facebook/yoga/YogaPositionType.kt +29 -0
  156. package/yoga/java/com/facebook/yoga/YogaProps.kt +205 -0
  157. package/yoga/java/com/facebook/yoga/YogaStyleInputs.kt +51 -0
  158. package/yoga/java/com/facebook/yoga/YogaUnit.kt +37 -0
  159. package/yoga/java/com/facebook/yoga/YogaValue.kt +66 -0
  160. package/yoga/java/com/facebook/yoga/YogaWrap.kt +29 -0
  161. package/yoga/java/com/facebook/yoga/annotations/DoNotStrip.kt +19 -0
  162. package/yoga/java/gen/com/facebook/yoga/BuildConfig.java +15 -0
  163. package/yoga/java/jni/LayoutContext.cpp +34 -0
  164. package/yoga/java/jni/LayoutContext.h +29 -0
  165. package/yoga/java/jni/ScopedGlobalRef.h +140 -0
  166. package/yoga/java/jni/ScopedLocalRef.h +141 -0
  167. package/yoga/java/jni/YGJNI.h +77 -0
  168. package/yoga/java/jni/YGJNIVanilla.cpp +1178 -0
  169. package/yoga/java/jni/YGJNIVanilla.h +12 -0
  170. package/yoga/java/jni/YGJTypesVanilla.h +52 -0
  171. package/yoga/java/jni/YogaJniException.cpp +49 -0
  172. package/yoga/java/jni/YogaJniException.h +35 -0
  173. package/yoga/java/jni/common.cpp +109 -0
  174. package/yoga/java/jni/common.h +73 -0
  175. package/yoga/java/jni/corefunctions.cpp +91 -0
  176. package/yoga/java/jni/corefunctions.h +50 -0
  177. package/yoga/java/jni/macros.h +23 -0
  178. package/yoga/java/jni/tests/corefunctionsTest.cpp +247 -0
  179. package/yoga/java/jni/yogajni.cpp +18 -0
  180. package/yoga/java/proguard-rules.pro +10 -0
  181. package/yoga/java/res/values/strings.xml +12 -0
  182. package/yoga/java/tests/com/facebook/yoga/TestParametrization.kt +29 -0
  183. package/yoga/java/tests/com/facebook/yoga/YGAlignBaselineTest.kt +117 -0
  184. package/yoga/java/tests/com/facebook/yoga/YogaExceptionTest.kt +140 -0
  185. package/yoga/java/tests/com/facebook/yoga/YogaLoggerTest.kt +77 -0
  186. package/yoga/java/tests/com/facebook/yoga/YogaNodeStylePropertiesTest.kt +1020 -0
  187. package/yoga/java/tests/com/facebook/yoga/YogaNodeTest.kt +319 -0
  188. package/yoga/java/tests/com/facebook/yoga/YogaValueTest.kt +23 -0
  189. package/yoga/java/tests/com/facebook/yoga/utils/TestUtils.kt +99 -0
  190. package/yoga/java/tests/generated/com/facebook/yoga/YGAbsolutePositionTest.java +1670 -0
  191. package/yoga/java/tests/generated/com/facebook/yoga/YGAlignContentTest.java +5440 -0
  192. package/yoga/java/tests/generated/com/facebook/yoga/YGAlignItemsTest.java +2132 -0
  193. package/yoga/java/tests/generated/com/facebook/yoga/YGAlignSelfTest.java +271 -0
  194. package/yoga/java/tests/generated/com/facebook/yoga/YGAndroidNewsFeed.java +313 -0
  195. package/yoga/java/tests/generated/com/facebook/yoga/YGAspectRatioTest.java +73 -0
  196. package/yoga/java/tests/generated/com/facebook/yoga/YGAutoTest.java +326 -0
  197. package/yoga/java/tests/generated/com/facebook/yoga/YGBorderTest.java +222 -0
  198. package/yoga/java/tests/generated/com/facebook/yoga/YGBoxSizingTest.java +2165 -0
  199. package/yoga/java/tests/generated/com/facebook/yoga/YGDimensionTest.java +122 -0
  200. package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayContentsTest.java +107 -0
  201. package/yoga/java/tests/generated/com/facebook/yoga/YGDisplayTest.java +1021 -0
  202. package/yoga/java/tests/generated/com/facebook/yoga/YGFlexBasisFitContentTest.java +391 -0
  203. package/yoga/java/tests/generated/com/facebook/yoga/YGFlexDirectionTest.java +4118 -0
  204. package/yoga/java/tests/generated/com/facebook/yoga/YGFlexTest.java +630 -0
  205. package/yoga/java/tests/generated/com/facebook/yoga/YGFlexWrapTest.java +1863 -0
  206. package/yoga/java/tests/generated/com/facebook/yoga/YGGapTest.java +2988 -0
  207. package/yoga/java/tests/generated/com/facebook/yoga/YGIntrinsicSizeTest.java +926 -0
  208. package/yoga/java/tests/generated/com/facebook/yoga/YGJustifyContentTest.java +1865 -0
  209. package/yoga/java/tests/generated/com/facebook/yoga/YGMarginTest.java +1796 -0
  210. package/yoga/java/tests/generated/com/facebook/yoga/YGMinMaxDimensionTest.java +1210 -0
  211. package/yoga/java/tests/generated/com/facebook/yoga/YGPaddingTest.java +307 -0
  212. package/yoga/java/tests/generated/com/facebook/yoga/YGPercentageTest.java +1345 -0
  213. package/yoga/java/tests/generated/com/facebook/yoga/YGRoundingTest.java +1099 -0
  214. package/yoga/java/tests/generated/com/facebook/yoga/YGSizeOverflowTest.java +195 -0
  215. package/yoga/java/tests/generated/com/facebook/yoga/YGStaticPositionTest.java +5992 -0
  216. package/yoga/java/yogajni.version +13 -0
  217. package/yoga/javascript/CMakeLists.txt +59 -0
  218. package/yoga/javascript/README.md +27 -0
  219. package/yoga/javascript/babel.config.cjs +30 -0
  220. package/yoga/javascript/jest.config.js +14 -0
  221. package/yoga/javascript/jest.setup.js +12 -0
  222. package/yoga/javascript/just.config.cjs +258 -0
  223. package/yoga/javascript/package.json +52 -0
  224. package/yoga/javascript/src/generated/YGEnums.ts +249 -0
  225. package/yoga/javascript/src/index.ts +23 -0
  226. package/yoga/javascript/src/load.ts +25 -0
  227. package/yoga/javascript/src/wasm_bridge.c +155 -0
  228. package/yoga/javascript/src/wrapAssembly.ts +1025 -0
  229. package/yoga/javascript/tests/Benchmarks/YGBenchmark.test.ts +110 -0
  230. package/yoga/javascript/tests/YGAlignBaselineTest.test.ts +104 -0
  231. package/yoga/javascript/tests/YGComputedBorderTest.test.ts +25 -0
  232. package/yoga/javascript/tests/YGComputedMarginTest.test.ts +25 -0
  233. package/yoga/javascript/tests/YGComputedPaddingTest.test.ts +25 -0
  234. package/yoga/javascript/tests/YGDirtiedTest.test.ts +149 -0
  235. package/yoga/javascript/tests/YGErrataTest.test.ts +34 -0
  236. package/yoga/javascript/tests/YGFlexBasisAuto.test.ts +21 -0
  237. package/yoga/javascript/tests/YGHadOverflowTest.test.ts +110 -0
  238. package/yoga/javascript/tests/YGHasNewLayout.test.ts +81 -0
  239. package/yoga/javascript/tests/YGMeasureCacheTest.test.ts +29 -0
  240. package/yoga/javascript/tests/YGMeasureTest.test.ts +66 -0
  241. package/yoga/javascript/tests/bin/run-bench.ts +60 -0
  242. package/yoga/javascript/tests/generated/YGAbsolutePositionTest.test.ts +1531 -0
  243. package/yoga/javascript/tests/generated/YGAlignContentTest.test.ts +5181 -0
  244. package/yoga/javascript/tests/generated/YGAlignItemsTest.test.ts +2013 -0
  245. package/yoga/javascript/tests/generated/YGAlignSelfTest.test.ts +248 -0
  246. package/yoga/javascript/tests/generated/YGAndroidNewsFeed.test.ts +306 -0
  247. package/yoga/javascript/tests/generated/YGAspectRatioTest.test.ts +66 -0
  248. package/yoga/javascript/tests/generated/YGAutoTest.test.ts +303 -0
  249. package/yoga/javascript/tests/generated/YGBorderTest.test.ts +199 -0
  250. package/yoga/javascript/tests/generated/YGBoxSizingTest.test.ts +1978 -0
  251. package/yoga/javascript/tests/generated/YGDimensionTest.test.ts +111 -0
  252. package/yoga/javascript/tests/generated/YGDisplayContentsTest.test.ts +99 -0
  253. package/yoga/javascript/tests/generated/YGDisplayTest.test.ts +962 -0
  254. package/yoga/javascript/tests/generated/YGFlexBasisFitContentTest.test.ts +364 -0
  255. package/yoga/javascript/tests/generated/YGFlexDirectionTest.test.ts +3903 -0
  256. package/yoga/javascript/tests/generated/YGFlexTest.test.ts +587 -0
  257. package/yoga/javascript/tests/generated/YGFlexWrapTest.test.ts +1768 -0
  258. package/yoga/javascript/tests/generated/YGGapTest.test.ts +2857 -0
  259. package/yoga/javascript/tests/generated/YGIntrinsicSizeTest.test.ts +843 -0
  260. package/yoga/javascript/tests/generated/YGJustifyContentTest.test.ts +1750 -0
  261. package/yoga/javascript/tests/generated/YGMarginTest.test.ts +1657 -0
  262. package/yoga/javascript/tests/generated/YGMinMaxDimensionTest.test.ts +1111 -0
  263. package/yoga/javascript/tests/generated/YGPaddingTest.test.ts +276 -0
  264. package/yoga/javascript/tests/generated/YGPercentageTest.test.ts +1246 -0
  265. package/yoga/javascript/tests/generated/YGRoundingTest.test.ts +1044 -0
  266. package/yoga/javascript/tests/generated/YGSizeOverflowTest.test.ts +180 -0
  267. package/yoga/javascript/tests/generated/YGStaticPositionTest.test.ts +5741 -0
  268. package/yoga/javascript/tests/tools/MeasureCounter.ts +66 -0
  269. package/yoga/javascript/tests/tools/globals.ts +19 -0
  270. package/yoga/javascript/tests/tools/utils.ts +90 -0
  271. package/yoga/javascript/tsconfig.json +23 -0
  272. package/yoga/lib/jni/jni.h +13 -0
  273. package/yoga/lib/jni/real/jni.h +1141 -0
  274. package/yoga/lib/jsr-305/jsr305.jar +0 -0
  275. package/yoga/lib/nlohmann/json.hpp +24766 -0
  276. package/yoga/lib/soloader/soloader-0.5.1.aar +0 -0
  277. package/yoga/package.json +44 -0
  278. package/yoga/scripts/clang-format +52 -0
  279. package/yoga/scripts/clang-format.js +93 -0
  280. package/yoga/scripts/format-kotlin.js +88 -0
  281. package/yoga/scripts/format-python.js +150 -0
  282. package/yoga/scripts/format-utils.js +82 -0
  283. package/yoga/set-version.py +37 -0
  284. package/yoga/settings.gradle.kts +29 -0
  285. package/yoga/test/AssertFatalTest.cpp +70 -0
  286. package/yoga/tests/.clang-tidy +7 -0
  287. package/yoga/tests/CMakeLists.txt +35 -0
  288. package/yoga/tests/CacheTest.cpp +229 -0
  289. package/yoga/tests/EventPublisherTest.cpp +162 -0
  290. package/yoga/tests/EventsTest.cpp +362 -0
  291. package/yoga/tests/FlexGapTest.cpp +93 -0
  292. package/yoga/tests/FloatOptionalTest.cpp +214 -0
  293. package/yoga/tests/GridStyleTest.cpp +103 -0
  294. package/yoga/tests/OrdinalsTest.cpp +35 -0
  295. package/yoga/tests/SmallValueBufferTest.cpp +161 -0
  296. package/yoga/tests/StyleTest.cpp +48 -0
  297. package/yoga/tests/StyleValuePoolTest.cpp +146 -0
  298. package/yoga/tests/YGAlignBaselineTest.cpp +837 -0
  299. package/yoga/tests/YGAspectRatioTest.cpp +898 -0
  300. package/yoga/tests/YGAutoMinSizeTest.cpp +581 -0
  301. package/yoga/tests/YGBaselineFuncTest.cpp +62 -0
  302. package/yoga/tests/YGCloneNodeTest.cpp +131 -0
  303. package/yoga/tests/YGComputedMarginTest.cpp +117 -0
  304. package/yoga/tests/YGComputedPaddingTest.cpp +119 -0
  305. package/yoga/tests/YGConfigTest.cpp +239 -0
  306. package/yoga/tests/YGContentsNodeHasNewLayoutTest.cpp +190 -0
  307. package/yoga/tests/YGDefaultValuesTest.cpp +175 -0
  308. package/yoga/tests/YGDirtiedTest.cpp +110 -0
  309. package/yoga/tests/YGDirtyMarkingTest.cpp +341 -0
  310. package/yoga/tests/YGEdgeTest.cpp +161 -0
  311. package/yoga/tests/YGFirstChildMinWidthTest.cpp +133 -0
  312. package/yoga/tests/YGFlexBasisFitContentTest.cpp +241 -0
  313. package/yoga/tests/YGFlexShrinkBorderBugTest.cpp +48 -0
  314. package/yoga/tests/YGHadOverflowTest.cpp +135 -0
  315. package/yoga/tests/YGLayoutableChildrenTest.cpp +191 -0
  316. package/yoga/tests/YGMeasureCacheTest.cpp +178 -0
  317. package/yoga/tests/YGMeasureModeTest.cpp +332 -0
  318. package/yoga/tests/YGMeasureTest.cpp +1010 -0
  319. package/yoga/tests/YGNodeCallbackTest.cpp +80 -0
  320. package/yoga/tests/YGNodeChildTest.cpp +68 -0
  321. package/yoga/tests/YGPersistenceTest.cpp +291 -0
  322. package/yoga/tests/YGPersistentNodeCloningTest.cpp +214 -0
  323. package/yoga/tests/YGRelayoutTest.cpp +255 -0
  324. package/yoga/tests/YGRoundingFunctionTest.cpp +186 -0
  325. package/yoga/tests/YGRoundingMeasureFuncTest.cpp +139 -0
  326. package/yoga/tests/YGScaleChangeTest.cpp +176 -0
  327. package/yoga/tests/YGStyleTest.cpp +75 -0
  328. package/yoga/tests/YGTreeMutationTest.cpp +115 -0
  329. package/yoga/tests/YGValueTest.cpp +23 -0
  330. package/yoga/tests/YGZeroOutLayoutRecursivelyTest.cpp +37 -0
  331. package/yoga/tests/generated/YGAbsolutePositionTest.cpp +1685 -0
  332. package/yoga/tests/generated/YGAlignContentTest.cpp +5485 -0
  333. package/yoga/tests/generated/YGAlignItemsTest.cpp +2142 -0
  334. package/yoga/tests/generated/YGAlignSelfTest.cpp +257 -0
  335. package/yoga/tests/generated/YGAndroidNewsFeed.cpp +295 -0
  336. package/yoga/tests/generated/YGAspectRatioTest.cpp +55 -0
  337. package/yoga/tests/generated/YGAutoTest.cpp +312 -0
  338. package/yoga/tests/generated/YGBorderTest.cpp +208 -0
  339. package/yoga/tests/generated/YGBoxSizingTest.cpp +2192 -0
  340. package/yoga/tests/generated/YGDimensionTest.cpp +105 -0
  341. package/yoga/tests/generated/YGDisplayContentsTest.cpp +89 -0
  342. package/yoga/tests/generated/YGDisplayTest.cpp +1016 -0
  343. package/yoga/tests/generated/YGFlexBasisFitContentTest.cpp +378 -0
  344. package/yoga/tests/generated/YGFlexDirectionTest.cpp +4152 -0
  345. package/yoga/tests/generated/YGFlexTest.cpp +621 -0
  346. package/yoga/tests/generated/YGFlexWrapTest.cpp +1867 -0
  347. package/yoga/tests/generated/YGGapTest.cpp +3001 -0
  348. package/yoga/tests/generated/YGIntrinsicSizeTest.cpp +924 -0
  349. package/yoga/tests/generated/YGJustifyContentTest.cpp +1874 -0
  350. package/yoga/tests/generated/YGMarginTest.cpp +1811 -0
  351. package/yoga/tests/generated/YGMinMaxDimensionTest.cpp +1215 -0
  352. package/yoga/tests/generated/YGPaddingTest.cpp +295 -0
  353. package/yoga/tests/generated/YGPercentageTest.cpp +1350 -0
  354. package/yoga/tests/generated/YGRoundingTest.cpp +1093 -0
  355. package/yoga/tests/generated/YGSizeOverflowTest.cpp +179 -0
  356. package/yoga/tests/generated/YGStaticPositionTest.cpp +6035 -0
  357. package/yoga/tests/util/TestUtil.cpp +164 -0
  358. package/yoga/tests/util/TestUtil.h +43 -0
  359. package/yoga/unit_tests +25 -0
  360. package/yoga/unit_tests.bat +28 -0
  361. package/yoga/website/.eslintrc.cjs +26 -0
  362. package/yoga/website/README.md +41 -0
  363. package/yoga/website/babel.config.cjs +10 -0
  364. package/yoga/website/blog/2023-06-30-announcing-yoga-2.0.md +183 -0
  365. package/yoga/website/blog/2024-06-24-announcing-yoga-3.1.md +67 -0
  366. package/yoga/website/blog/2024-12-02-announcing-yoga-3.2.md +84 -0
  367. package/yoga/website/blog/authors.yml +10 -0
  368. package/yoga/website/blog/yoga-3-release/2024-03-14-announcing-yoga-3.0.md +586 -0
  369. package/yoga/website/blog/yoga-3-release/img/image1.png +0 -0
  370. package/yoga/website/blog/yoga-3-release/img/image10.png +0 -0
  371. package/yoga/website/blog/yoga-3-release/img/image11.png +0 -0
  372. package/yoga/website/blog/yoga-3-release/img/image12.png +0 -0
  373. package/yoga/website/blog/yoga-3-release/img/image13.png +0 -0
  374. package/yoga/website/blog/yoga-3-release/img/image14.png +0 -0
  375. package/yoga/website/blog/yoga-3-release/img/image15.png +0 -0
  376. package/yoga/website/blog/yoga-3-release/img/image16.png +0 -0
  377. package/yoga/website/blog/yoga-3-release/img/image17.png +0 -0
  378. package/yoga/website/blog/yoga-3-release/img/image2.png +0 -0
  379. package/yoga/website/blog/yoga-3-release/img/image3.png +0 -0
  380. package/yoga/website/blog/yoga-3-release/img/image4.png +0 -0
  381. package/yoga/website/blog/yoga-3-release/img/image5.png +0 -0
  382. package/yoga/website/blog/yoga-3-release/img/image6.png +0 -0
  383. package/yoga/website/blog/yoga-3-release/img/image7.png +0 -0
  384. package/yoga/website/blog/yoga-3-release/img/image8.png +0 -0
  385. package/yoga/website/blog/yoga-3-release/img/image9.png +0 -0
  386. package/yoga/website/docs/about-yoga.md +13 -0
  387. package/yoga/website/docs/advanced/_category_.json +4 -0
  388. package/yoga/website/docs/advanced/containing-block.md +89 -0
  389. package/yoga/website/docs/advanced/external-layout-systems.mdx +106 -0
  390. package/yoga/website/docs/advanced/incremental-layout.mdx +87 -0
  391. package/yoga/website/docs/getting-started/_category_.json +4 -0
  392. package/yoga/website/docs/getting-started/configuring-yoga.mdx +165 -0
  393. package/yoga/website/docs/getting-started/laying-out-a-tree.mdx +178 -0
  394. package/yoga/website/docs/img/config-contextual.svg +17 -0
  395. package/yoga/website/docs/img/config-per-node.svg +17 -0
  396. package/yoga/website/docs/img/config-uniform.svg +17 -0
  397. package/yoga/website/docs/img/invalidation-clean-tree.svg +17 -0
  398. package/yoga/website/docs/img/invalidation-dirtied-tree.svg +17 -0
  399. package/yoga/website/docs/img/invalidation-new-layout-tree.svg +17 -0
  400. package/yoga/website/docs/img/pixel-grid-after.png +0 -0
  401. package/yoga/website/docs/img/pixel-grid-before.png +0 -0
  402. package/yoga/website/docs/img/wireframe-example.svg +105 -0
  403. package/yoga/website/docs/styling/_category_.json +4 -0
  404. package/yoga/website/docs/styling/align-content.mdx +47 -0
  405. package/yoga/website/docs/styling/align-items-self.mdx +48 -0
  406. package/yoga/website/docs/styling/aspect-ratio.mdx +27 -0
  407. package/yoga/website/docs/styling/display.mdx +25 -0
  408. package/yoga/website/docs/styling/flex-basis-grow-shrink.mdx +65 -0
  409. package/yoga/website/docs/styling/flex-direction.mdx +37 -0
  410. package/yoga/website/docs/styling/flex-wrap.mdx +33 -0
  411. package/yoga/website/docs/styling/gap.mdx +49 -0
  412. package/yoga/website/docs/styling/index.md +48 -0
  413. package/yoga/website/docs/styling/insets.mdx +62 -0
  414. package/yoga/website/docs/styling/justify-content.mdx +43 -0
  415. package/yoga/website/docs/styling/layout-direction.mdx +34 -0
  416. package/yoga/website/docs/styling/margin-padding-border.mdx +41 -0
  417. package/yoga/website/docs/styling/min-max-width-height.mdx +52 -0
  418. package/yoga/website/docs/styling/position.mdx +37 -0
  419. package/yoga/website/docs/styling/width-height.mdx +37 -0
  420. package/yoga/website/docusaurus.config.js +113 -0
  421. package/yoga/website/package.json +43 -0
  422. package/yoga/website/sidebars.cjs +27 -0
  423. package/yoga/website/src/components/EditorToolbar.module.css +77 -0
  424. package/yoga/website/src/components/EditorToolbar.tsx +72 -0
  425. package/yoga/website/src/components/FlexStyle.ts +439 -0
  426. package/yoga/website/src/components/LayoutBox.module.css +68 -0
  427. package/yoga/website/src/components/LayoutBox.tsx +61 -0
  428. package/yoga/website/src/components/Playground.module.css +130 -0
  429. package/yoga/website/src/components/Playground.tsx +187 -0
  430. package/yoga/website/src/components/YogaViewer.tsx +128 -0
  431. package/yoga/website/src/css/custom.css +37 -0
  432. package/yoga/website/src/pages/index.module.css +34 -0
  433. package/yoga/website/src/pages/index.tsx +84 -0
  434. package/yoga/website/src/pages/markdown-page.md +7 -0
  435. package/yoga/website/src/pages/playground.module.css +11 -0
  436. package/yoga/website/src/pages/playground.tsx +56 -0
  437. package/yoga/website/static/.nojekyll +0 -0
  438. package/yoga/website/static/img/docusaurus.png +0 -0
  439. package/yoga/website/static/img/favicon.svg +17 -0
  440. package/yoga/website/static/img/link.svg +4 -0
  441. package/yoga/website/static/img/logo.svg +17 -0
  442. package/yoga/website/static/img/meta_oss.svg +1 -0
  443. package/yoga/website/static/img/opengraph.png +0 -0
  444. package/yoga/website/static/img/undraw_docusaurus_mountain.svg +171 -0
  445. package/yoga/website/static/img/undraw_docusaurus_react.svg +170 -0
  446. package/yoga/website/static/img/undraw_docusaurus_tree.svg +40 -0
  447. package/yoga/website/tsconfig.json +10 -0
  448. package/yoga/yarn.lock +11499 -0
  449. package/yoga/yoga/CMakeLists.txt +41 -0
  450. package/yoga/yoga/YGConfig.cpp +92 -0
  451. package/yoga/yoga/YGConfig.h +158 -0
  452. package/yoga/yoga/YGEnums.cpp +304 -0
  453. package/yoga/yoga/YGEnums.h +163 -0
  454. package/yoga/yoga/YGMacros.h +101 -0
  455. package/yoga/yoga/YGNode.cpp +407 -0
  456. package/yoga/yoga/YGNode.h +373 -0
  457. package/yoga/yoga/YGNodeLayout.cpp +100 -0
  458. package/yoga/yoga/YGNodeLayout.h +43 -0
  459. package/yoga/yoga/YGNodeStyle.cpp +774 -0
  460. package/yoga/yoga/YGNodeStyle.h +243 -0
  461. package/yoga/yoga/YGPixelGrid.cpp +22 -0
  462. package/yoga/yoga/YGPixelGrid.h +29 -0
  463. package/yoga/yoga/YGValue.cpp +20 -0
  464. package/yoga/yoga/YGValue.h +83 -0
  465. package/yoga/yoga/Yoga.h +21 -0
  466. package/yoga/yoga/algorithm/AbsoluteLayout.cpp +595 -0
  467. package/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
  468. package/yoga/yoga/algorithm/Align.h +83 -0
  469. package/yoga/yoga/algorithm/Baseline.cpp +78 -0
  470. package/yoga/yoga/algorithm/Baseline.h +21 -0
  471. package/yoga/yoga/algorithm/BoundAxis.h +79 -0
  472. package/yoga/yoga/algorithm/Cache.cpp +121 -0
  473. package/yoga/yoga/algorithm/Cache.h +30 -0
  474. package/yoga/yoga/algorithm/CalculateLayout.cpp +2968 -0
  475. package/yoga/yoga/algorithm/CalculateLayout.h +60 -0
  476. package/yoga/yoga/algorithm/FlexDirection.h +120 -0
  477. package/yoga/yoga/algorithm/FlexLine.cpp +124 -0
  478. package/yoga/yoga/algorithm/FlexLine.h +75 -0
  479. package/yoga/yoga/algorithm/PixelGrid.cpp +138 -0
  480. package/yoga/yoga/algorithm/PixelGrid.h +29 -0
  481. package/yoga/yoga/algorithm/SizingMode.h +73 -0
  482. package/yoga/yoga/algorithm/TrailingPosition.h +44 -0
  483. package/yoga/yoga/config/Config.cpp +135 -0
  484. package/yoga/yoga/config/Config.h +93 -0
  485. package/yoga/yoga/debug/AssertFatal.cpp +54 -0
  486. package/yoga/yoga/debug/AssertFatal.h +29 -0
  487. package/yoga/yoga/debug/Log.cpp +107 -0
  488. package/yoga/yoga/debug/Log.h +34 -0
  489. package/yoga/yoga/enums/Align.h +49 -0
  490. package/yoga/yoga/enums/BoxSizing.h +40 -0
  491. package/yoga/yoga/enums/Dimension.h +40 -0
  492. package/yoga/yoga/enums/Direction.h +41 -0
  493. package/yoga/yoga/enums/Display.h +42 -0
  494. package/yoga/yoga/enums/Edge.h +47 -0
  495. package/yoga/yoga/enums/Errata.h +43 -0
  496. package/yoga/yoga/enums/ExperimentalFeature.h +40 -0
  497. package/yoga/yoga/enums/FlexDirection.h +42 -0
  498. package/yoga/yoga/enums/GridTrackType.h +43 -0
  499. package/yoga/yoga/enums/Gutter.h +41 -0
  500. package/yoga/yoga/enums/Justify.h +48 -0
  501. package/yoga/yoga/enums/LogLevel.h +44 -0
  502. package/yoga/yoga/enums/MeasureMode.h +41 -0
  503. package/yoga/yoga/enums/NodeType.h +40 -0
  504. package/yoga/yoga/enums/Overflow.h +41 -0
  505. package/yoga/yoga/enums/PhysicalEdge.h +21 -0
  506. package/yoga/yoga/enums/PositionType.h +41 -0
  507. package/yoga/yoga/enums/Unit.h +45 -0
  508. package/yoga/yoga/enums/Wrap.h +41 -0
  509. package/yoga/yoga/enums/YogaEnums.h +84 -0
  510. package/yoga/yoga/event/event.cpp +89 -0
  511. package/yoga/yoga/event/event.h +131 -0
  512. package/yoga/yoga/module.modulemap +21 -0
  513. package/yoga/yoga/node/CachedMeasurement.h +53 -0
  514. package/yoga/yoga/node/LayoutResults.cpp +48 -0
  515. package/yoga/yoga/node/LayoutResults.h +136 -0
  516. package/yoga/yoga/node/LayoutableChildren.h +148 -0
  517. package/yoga/yoga/node/Node.cpp +509 -0
  518. package/yoga/yoga/node/Node.h +372 -0
  519. package/yoga/yoga/numeric/Comparison.h +81 -0
  520. package/yoga/yoga/numeric/FloatOptional.h +84 -0
  521. package/yoga/yoga/style/GridLine.h +53 -0
  522. package/yoga/yoga/style/GridStyle.h +80 -0
  523. package/yoga/yoga/style/GridTrack.h +63 -0
  524. package/yoga/yoga/style/SmallValueBuffer.h +133 -0
  525. package/yoga/yoga/style/Style.h +932 -0
  526. package/yoga/yoga/style/StyleLength.h +121 -0
  527. package/yoga/yoga/style/StyleSizeLength.h +152 -0
  528. package/yoga/yoga/style/StyleValueHandle.h +114 -0
  529. package/yoga/yoga/style/StyleValuePool.h +194 -0
@@ -0,0 +1,372 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <cstdint>
11
+ #include <cstdio>
12
+ #include <vector>
13
+
14
+ #include <yoga/Yoga.h>
15
+ #include <yoga/node/LayoutableChildren.h>
16
+
17
+ #include <yoga/config/Config.h>
18
+ #include <yoga/enums/Dimension.h>
19
+ #include <yoga/enums/Direction.h>
20
+ #include <yoga/enums/Edge.h>
21
+ #include <yoga/enums/Errata.h>
22
+ #include <yoga/enums/MeasureMode.h>
23
+ #include <yoga/enums/NodeType.h>
24
+ #include <yoga/enums/PhysicalEdge.h>
25
+ #include <yoga/node/LayoutResults.h>
26
+ #include <yoga/style/Style.h>
27
+
28
+ // Tag struct used to form the opaque YGNodeRef for the public C API
29
+ struct YGNode {};
30
+
31
+ namespace facebook::yoga {
32
+
33
+ class YG_EXPORT Node : public ::YGNode {
34
+ public:
35
+ using LayoutableChildren = yoga::LayoutableChildren<Node>;
36
+ Node();
37
+ explicit Node(const Config* config);
38
+
39
+ Node(Node&& node) noexcept;
40
+
41
+ // Does not expose true value semantics, as children are not cloned eagerly.
42
+ // Should we remove this?
43
+ Node(const Node& node) = default;
44
+
45
+ // assignment means potential leaks of existing children, or alternatively
46
+ // freeing unowned memory, double free, or freeing stack memory.
47
+ Node& operator=(const Node&) = delete;
48
+
49
+ // Getters
50
+ void* getContext() const {
51
+ return context_;
52
+ }
53
+
54
+ bool alwaysFormsContainingBlock() const {
55
+ return alwaysFormsContainingBlock_;
56
+ }
57
+
58
+ bool getHasNewLayout() const {
59
+ return hasNewLayout_;
60
+ }
61
+
62
+ NodeType getNodeType() const {
63
+ return nodeType_;
64
+ }
65
+
66
+ bool hasMeasureFunc() const noexcept {
67
+ return measureFunc_ != nullptr;
68
+ }
69
+
70
+ YGSize measure(
71
+ float availableWidth,
72
+ MeasureMode widthMode,
73
+ float availableHeight,
74
+ MeasureMode heightMode);
75
+
76
+ bool hasMinContentMeasureFunc() const noexcept {
77
+ return minContentMeasureFunc_ != nullptr;
78
+ }
79
+
80
+ YGSize measureMinContent(
81
+ float availableWidth,
82
+ MeasureMode widthMode,
83
+ float availableHeight,
84
+ MeasureMode heightMode);
85
+
86
+ FloatOptional getMinContentWidth() const noexcept {
87
+ return minContentWidth_;
88
+ }
89
+
90
+ FloatOptional getMinContentHeight() const noexcept {
91
+ return minContentHeight_;
92
+ }
93
+
94
+ bool hasBaselineFunc() const noexcept {
95
+ return baselineFunc_ != nullptr;
96
+ }
97
+
98
+ float baseline(float width, float height) const;
99
+
100
+ float dimensionWithMargin(FlexDirection axis, float widthSize);
101
+
102
+ bool isLayoutDimensionDefined(FlexDirection axis);
103
+
104
+ /**
105
+ * Whether the node has a "definite length" along the given axis.
106
+ * https://www.w3.org/TR/css-sizing-3/#definite
107
+ */
108
+ inline bool hasDefiniteLength(Dimension dimension, float ownerSize) {
109
+ auto usedValue = getProcessedDimension(dimension).resolve(ownerSize);
110
+ return usedValue.isDefined() && usedValue.unwrap() >= 0.0f;
111
+ }
112
+
113
+ bool hasErrata(Errata errata) const {
114
+ return config_->hasErrata(errata);
115
+ }
116
+
117
+ bool hasContentsChildren() const {
118
+ return contentsChildrenCount_ != 0;
119
+ }
120
+
121
+ YGDirtiedFunc getDirtiedFunc() const {
122
+ return dirtiedFunc_;
123
+ }
124
+
125
+ // For Performance reasons passing as reference.
126
+ Style& style() {
127
+ return style_;
128
+ }
129
+
130
+ const Style& style() const {
131
+ return style_;
132
+ }
133
+
134
+ // For Performance reasons passing as reference.
135
+ LayoutResults& getLayout() {
136
+ return layout_;
137
+ }
138
+
139
+ const LayoutResults& getLayout() const {
140
+ return layout_;
141
+ }
142
+
143
+ size_t getLineIndex() const {
144
+ return lineIndex_;
145
+ }
146
+
147
+ bool isReferenceBaseline() const {
148
+ return isReferenceBaseline_;
149
+ }
150
+
151
+ // returns the Node that owns this Node. An owner is used to identify
152
+ // the YogaTree that a Node belongs to. This method will return the parent
153
+ // of the Node when a Node only belongs to one YogaTree or nullptr when
154
+ // the Node is shared between two or more YogaTrees.
155
+ Node* getOwner() const {
156
+ return owner_;
157
+ }
158
+
159
+ const std::vector<Node*>& getChildren() const {
160
+ return children_;
161
+ }
162
+
163
+ Node* getChild(size_t index) const {
164
+ return children_.at(index);
165
+ }
166
+
167
+ size_t getChildCount() const {
168
+ return children_.size();
169
+ }
170
+
171
+ LayoutableChildren getLayoutChildren() const {
172
+ return LayoutableChildren(this);
173
+ }
174
+
175
+ size_t getLayoutChildCount() const {
176
+ if (contentsChildrenCount_ == 0) {
177
+ return children_.size();
178
+ } else {
179
+ size_t count = 0;
180
+ for (auto iter = getLayoutChildren().begin();
181
+ iter != getLayoutChildren().end();
182
+ iter++) {
183
+ count++;
184
+ }
185
+ return count;
186
+ }
187
+ }
188
+
189
+ const Config* getConfig() const {
190
+ return config_;
191
+ }
192
+
193
+ bool isDirty() const {
194
+ return isDirty_;
195
+ }
196
+
197
+ Style::SizeLength getProcessedDimension(Dimension dimension) const {
198
+ return processedDimensions_[static_cast<size_t>(dimension)];
199
+ }
200
+
201
+ FloatOptional getResolvedDimension(
202
+ Direction direction,
203
+ Dimension dimension,
204
+ float referenceLength,
205
+ float ownerWidth) const {
206
+ FloatOptional value =
207
+ getProcessedDimension(dimension).resolve(referenceLength);
208
+ if (style_.boxSizing() == BoxSizing::BorderBox) {
209
+ return value;
210
+ }
211
+
212
+ FloatOptional dimensionPaddingAndBorder =
213
+ FloatOptional{style_.computePaddingAndBorderForDimension(
214
+ direction, dimension, ownerWidth)};
215
+
216
+ return value +
217
+ (dimensionPaddingAndBorder.isDefined() ? dimensionPaddingAndBorder
218
+ : FloatOptional{0.0});
219
+ }
220
+
221
+ // Setters
222
+
223
+ void setContext(void* context) {
224
+ context_ = context;
225
+ }
226
+
227
+ void setAlwaysFormsContainingBlock(bool alwaysFormsContainingBlock) {
228
+ alwaysFormsContainingBlock_ = alwaysFormsContainingBlock;
229
+ }
230
+
231
+ void setHasNewLayout(bool hasNewLayout) {
232
+ hasNewLayout_ = hasNewLayout;
233
+ }
234
+
235
+ void setNodeType(NodeType nodeType) {
236
+ nodeType_ = nodeType;
237
+ }
238
+
239
+ void setMeasureFunc(YGMeasureFunc measureFunc);
240
+
241
+ void setMinContentMeasureFunc(YGMinContentMeasureFunc minContentMeasureFunc) {
242
+ minContentMeasureFunc_ = minContentMeasureFunc;
243
+ }
244
+
245
+ void setMinContentWidth(FloatOptional minContentWidth) noexcept {
246
+ minContentWidth_ = minContentWidth;
247
+ }
248
+
249
+ void setMinContentHeight(FloatOptional minContentHeight) noexcept {
250
+ minContentHeight_ = minContentHeight;
251
+ }
252
+
253
+ void setBaselineFunc(YGBaselineFunc baseLineFunc) {
254
+ baselineFunc_ = baseLineFunc;
255
+ }
256
+
257
+ void setDirtiedFunc(YGDirtiedFunc dirtiedFunc) {
258
+ dirtiedFunc_ = dirtiedFunc;
259
+ }
260
+
261
+ void setStyle(const Style& style) {
262
+ style_ = style;
263
+ }
264
+
265
+ void setLayout(const LayoutResults& layout) {
266
+ layout_ = layout;
267
+ }
268
+
269
+ void setLineIndex(size_t lineIndex) {
270
+ lineIndex_ = lineIndex;
271
+ }
272
+
273
+ void setIsReferenceBaseline(bool isReferenceBaseline) {
274
+ isReferenceBaseline_ = isReferenceBaseline;
275
+ }
276
+
277
+ void setOwner(Node* owner) {
278
+ owner_ = owner;
279
+ }
280
+
281
+ // TODO: rvalue override for setChildren
282
+
283
+ void setConfig(Config* config);
284
+
285
+ void setDirty(bool isDirty);
286
+ void setChildren(const std::vector<Node*>& children);
287
+ void setLayoutLastOwnerDirection(Direction direction);
288
+ void setLayoutComputedFlexBasis(FloatOptional computedFlexBasis);
289
+ void setLayoutComputedFlexBasisGeneration(
290
+ uint32_t computedFlexBasisGeneration);
291
+ void setLayoutMeasuredDimension(float measuredDimension, Dimension dimension);
292
+ void setLayoutHadOverflow(bool hadOverflow);
293
+ void setLayoutDimension(float lengthValue, Dimension dimension);
294
+ void setLayoutDirection(Direction direction);
295
+ void setLayoutMargin(float margin, PhysicalEdge edge);
296
+ void setLayoutBorder(float border, PhysicalEdge edge);
297
+ void setLayoutPadding(float padding, PhysicalEdge edge);
298
+ void setLayoutPosition(float position, PhysicalEdge edge);
299
+ void setPosition(Direction direction, float ownerWidth, float ownerHeight);
300
+
301
+ // Other methods
302
+ Style::SizeLength processFlexBasis() const;
303
+ FloatOptional resolveFlexBasis(
304
+ Direction direction,
305
+ FlexDirection flexDirection,
306
+ float referenceLength,
307
+ float ownerWidth) const;
308
+ void processDimensions();
309
+ Direction resolveDirection(Direction ownerDirection);
310
+ void clearChildren();
311
+ /// Replaces the occurrences of oldChild with newChild
312
+ void replaceChild(Node* oldChild, Node* newChild);
313
+ void replaceChild(Node* child, size_t index);
314
+ void insertChild(Node* child, size_t index);
315
+ /// Removes the first occurrence of child
316
+ bool removeChild(Node* child);
317
+ void removeChild(size_t index);
318
+
319
+ void cloneChildrenIfNeeded();
320
+ void cloneContentsChildrenIfNeeded();
321
+ void markDirtyAndPropagate();
322
+ float resolveFlexGrow() const;
323
+ float resolveFlexShrink() const;
324
+ bool isNodeFlexible();
325
+ void reset();
326
+
327
+ float relativePosition(
328
+ FlexDirection axis,
329
+ Direction direction,
330
+ float axisSize) const;
331
+
332
+ private:
333
+ // Used to allow resetting the node
334
+ Node& operator=(Node&&) noexcept = default;
335
+
336
+ void useWebDefaults() {
337
+ style_.setFlexDirection(FlexDirection::Row);
338
+ style_.setAlignContent(Align::Stretch);
339
+ }
340
+
341
+ bool hasNewLayout_ : 1 = true;
342
+ bool isReferenceBaseline_ : 1 = false;
343
+ bool isDirty_ : 1 = true;
344
+ bool alwaysFormsContainingBlock_ : 1 = false;
345
+ NodeType nodeType_ : bitCount<NodeType>() = NodeType::Default;
346
+ void* context_ = nullptr;
347
+ YGMeasureFunc measureFunc_ = nullptr;
348
+ YGMinContentMeasureFunc minContentMeasureFunc_ = nullptr;
349
+ FloatOptional minContentWidth_{};
350
+ FloatOptional minContentHeight_{};
351
+ YGBaselineFunc baselineFunc_ = nullptr;
352
+ YGDirtiedFunc dirtiedFunc_ = nullptr;
353
+ Style style_;
354
+ LayoutResults layout_;
355
+ size_t lineIndex_ = 0;
356
+ size_t contentsChildrenCount_ = 0;
357
+ Node* owner_ = nullptr;
358
+ std::vector<Node*> children_;
359
+ const Config* config_;
360
+ std::array<Style::SizeLength, 2> processedDimensions_{
361
+ {StyleSizeLength::undefined(), StyleSizeLength::undefined()}};
362
+ };
363
+
364
+ inline Node* resolveRef(const YGNodeRef ref) {
365
+ return static_cast<Node*>(ref);
366
+ }
367
+
368
+ inline const Node* resolveRef(const YGNodeConstRef ref) {
369
+ return static_cast<const Node*>(ref);
370
+ }
371
+
372
+ } // namespace facebook::yoga
@@ -0,0 +1,81 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <algorithm>
11
+ #include <array>
12
+ #include <cmath>
13
+ #include <concepts>
14
+
15
+ #include <yoga/Yoga.h>
16
+
17
+ namespace facebook::yoga {
18
+
19
+ constexpr bool isUndefined(std::floating_point auto value) {
20
+ return value != value;
21
+ }
22
+
23
+ constexpr bool isDefined(std::floating_point auto value) {
24
+ return !isUndefined(value);
25
+ }
26
+
27
+ /**
28
+ * Constexpr version of `std::isinf` before C++ 23
29
+ */
30
+ constexpr bool isinf(auto value) {
31
+ return value == +std::numeric_limits<decltype(value)>::infinity() ||
32
+ value == -std::numeric_limits<decltype(value)>::infinity();
33
+ }
34
+
35
+ constexpr auto maxOrDefined(
36
+ std::floating_point auto a,
37
+ std::floating_point auto b) {
38
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
39
+ return std::max(a, b);
40
+ }
41
+ return yoga::isUndefined(a) ? b : a;
42
+ }
43
+
44
+ constexpr auto minOrDefined(
45
+ std::floating_point auto a,
46
+ std::floating_point auto b) {
47
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
48
+ return std::min(a, b);
49
+ }
50
+
51
+ return yoga::isUndefined(a) ? b : a;
52
+ }
53
+
54
+ // Custom equality functions using a hardcoded epsilon of 0.0001f, or returning
55
+ // true if both floats are NaN.
56
+ inline bool inexactEquals(float a, float b) {
57
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
58
+ return std::abs(a - b) < 0.0001f;
59
+ }
60
+ return yoga::isUndefined(a) && yoga::isUndefined(b);
61
+ }
62
+
63
+ inline bool inexactEquals(double a, double b) {
64
+ if (yoga::isDefined(a) && yoga::isDefined(b)) {
65
+ return std::abs(a - b) < 0.0001;
66
+ }
67
+ return yoga::isUndefined(a) && yoga::isUndefined(b);
68
+ }
69
+
70
+ template <std::size_t Size, typename ElementT>
71
+ bool inexactEquals(
72
+ const std::array<ElementT, Size>& val1,
73
+ const std::array<ElementT, Size>& val2) {
74
+ bool areEqual = true;
75
+ for (std::size_t i = 0; i < Size && areEqual; ++i) {
76
+ areEqual = inexactEquals(val1[i], val2[i]);
77
+ }
78
+ return areEqual;
79
+ }
80
+
81
+ } // namespace facebook::yoga
@@ -0,0 +1,84 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <yoga/numeric/Comparison.h>
11
+ #include <limits>
12
+
13
+ namespace facebook::yoga {
14
+
15
+ struct FloatOptional {
16
+ private:
17
+ float value_ = std::numeric_limits<float>::quiet_NaN();
18
+
19
+ public:
20
+ explicit constexpr FloatOptional(float value) : value_(value) {}
21
+ constexpr FloatOptional() = default;
22
+
23
+ // returns the wrapped value, or a value x with YGIsUndefined(x) == true
24
+ constexpr float unwrap() const {
25
+ return value_;
26
+ }
27
+
28
+ constexpr float unwrapOrDefault(float defaultValue) const {
29
+ return isUndefined() ? defaultValue : value_;
30
+ }
31
+
32
+ constexpr bool isUndefined() const {
33
+ return yoga::isUndefined(value_);
34
+ }
35
+
36
+ constexpr bool isDefined() const {
37
+ return yoga::isDefined(value_);
38
+ }
39
+ };
40
+
41
+ // operators take FloatOptional by value, as it is a 32bit value
42
+
43
+ constexpr bool operator==(FloatOptional lhs, FloatOptional rhs) {
44
+ return lhs.unwrap() == rhs.unwrap() ||
45
+ (lhs.isUndefined() && rhs.isUndefined());
46
+ }
47
+
48
+ constexpr bool operator==(FloatOptional lhs, float rhs) {
49
+ return lhs == FloatOptional{rhs};
50
+ }
51
+
52
+ constexpr bool operator==(float lhs, FloatOptional rhs) {
53
+ return rhs == lhs;
54
+ }
55
+
56
+ constexpr FloatOptional operator+(FloatOptional lhs, FloatOptional rhs) {
57
+ return FloatOptional{lhs.unwrap() + rhs.unwrap()};
58
+ }
59
+
60
+ constexpr bool operator>(FloatOptional lhs, FloatOptional rhs) {
61
+ return lhs.unwrap() > rhs.unwrap();
62
+ }
63
+
64
+ constexpr bool operator<(FloatOptional lhs, FloatOptional rhs) {
65
+ return lhs.unwrap() < rhs.unwrap();
66
+ }
67
+
68
+ constexpr bool operator>=(FloatOptional lhs, FloatOptional rhs) {
69
+ return lhs > rhs || lhs == rhs;
70
+ }
71
+
72
+ constexpr bool operator<=(FloatOptional lhs, FloatOptional rhs) {
73
+ return lhs < rhs || lhs == rhs;
74
+ }
75
+
76
+ constexpr FloatOptional maxOrDefined(FloatOptional lhs, FloatOptional rhs) {
77
+ return FloatOptional{yoga::maxOrDefined(lhs.unwrap(), rhs.unwrap())};
78
+ }
79
+
80
+ inline bool inexactEquals(FloatOptional lhs, FloatOptional rhs) {
81
+ return yoga::inexactEquals(lhs.unwrap(), rhs.unwrap());
82
+ }
83
+
84
+ } // namespace facebook::yoga
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <cstdint>
11
+
12
+ namespace facebook::yoga {
13
+
14
+ // https://www.w3.org/TR/css-grid-1/#typedef-grid-row-start-grid-line
15
+ enum class GridLineType : uint8_t {
16
+ Auto,
17
+ Integer,
18
+ Span,
19
+ };
20
+
21
+ struct GridLine {
22
+ GridLineType type{};
23
+ // Line position (1, 2, -1, -2, etc)
24
+ int32_t integer{};
25
+
26
+ constexpr static GridLine auto_() {
27
+ return GridLine{.type = GridLineType::Auto, .integer = 0};
28
+ }
29
+
30
+ constexpr static GridLine fromInteger(int32_t value) {
31
+ return GridLine{.type = GridLineType::Integer, .integer = value};
32
+ }
33
+
34
+ constexpr static GridLine span(int32_t value) {
35
+ return GridLine{.type = GridLineType::Span, .integer = value};
36
+ }
37
+
38
+ constexpr bool isAuto() const {
39
+ return type == GridLineType::Auto;
40
+ }
41
+
42
+ constexpr bool isInteger() const {
43
+ return type == GridLineType::Integer;
44
+ }
45
+
46
+ constexpr bool isSpan() const {
47
+ return type == GridLineType::Span;
48
+ }
49
+
50
+ bool operator==(const GridLine& other) const = default;
51
+ };
52
+
53
+ } // namespace facebook::yoga
@@ -0,0 +1,80 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <memory>
11
+
12
+ #include <yoga/style/GridLine.h>
13
+ #include <yoga/style/GridTrack.h>
14
+
15
+ namespace facebook::yoga {
16
+
17
+ /**
18
+ * The CSS Grid properties of a single node.
19
+ */
20
+ struct GridStyle {
21
+ // Grid container properties
22
+ GridTrackList templateColumns{};
23
+ GridTrackList templateRows{};
24
+ GridTrackList autoColumns{};
25
+ GridTrackList autoRows{};
26
+
27
+ // Grid item properties
28
+ GridLine columnStart{};
29
+ GridLine columnEnd{};
30
+ GridLine rowStart{};
31
+ GridLine rowEnd{};
32
+
33
+ bool operator==(const GridStyle& other) const = default;
34
+ };
35
+
36
+ /**
37
+ * Storage for a GridStyle which stays empty until the first grid property is
38
+ * set.
39
+ */
40
+ class GridStyleStorage {
41
+ public:
42
+ GridStyleStorage() = default;
43
+ GridStyleStorage(GridStyleStorage&&) noexcept = default;
44
+ GridStyleStorage& operator=(GridStyleStorage&&) noexcept = default;
45
+
46
+ GridStyleStorage(const GridStyleStorage& other) {
47
+ *this = other;
48
+ }
49
+
50
+ GridStyleStorage& operator=(const GridStyleStorage& other) {
51
+ grid_ = other.grid_ == nullptr ? nullptr
52
+ : std::make_unique<GridStyle>(*other.grid_);
53
+ return *this;
54
+ }
55
+
56
+ const GridStyle& get() const {
57
+ return grid_ == nullptr ? defaults() : *grid_;
58
+ }
59
+
60
+ GridStyle& ensure() {
61
+ if (grid_ == nullptr) {
62
+ grid_ = std::make_unique<GridStyle>();
63
+ }
64
+ return *grid_;
65
+ }
66
+
67
+ bool operator==(const GridStyleStorage& other) const {
68
+ return grid_ == other.grid_ || get() == other.get();
69
+ }
70
+
71
+ private:
72
+ static const GridStyle& defaults() {
73
+ static const GridStyle kDefaults{};
74
+ return kDefaults;
75
+ }
76
+
77
+ std::unique_ptr<GridStyle> grid_{};
78
+ };
79
+
80
+ } // namespace facebook::yoga