react-native 0.84.0-rc.1 → 0.84.0-rc.3

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.
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 84;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'rc.1';
32
+ static prerelease: string | null = 'rc.3';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(84),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"rc.1",
27
+ RCTVersionPrerelease: @"rc.3",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.84.0-rc.1
1
+ VERSION_NAME=0.84.0-rc.3
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -149,28 +149,55 @@ val installCMake by
149
149
  )
150
150
  }
151
151
 
152
+ fun configureBuildForHermesCommandLineArgs(
153
+ hermesBuildDir: File,
154
+ jsiDir: File,
155
+ enableDebugger: Boolean,
156
+ ): List<String> {
157
+ var cmakeCommandLine =
158
+ windowsAwareCommandLine(
159
+ cmakeBinaryPath,
160
+ // Suppress all warnings as this is the Hermes build and we can't fix them.
161
+ "--log-level=ERROR",
162
+ "-Wno-dev",
163
+ "-S",
164
+ ".",
165
+ "-B",
166
+ hermesBuildDir.toString(),
167
+ "-DJSI_DIR=" + jsiDir.absolutePath,
168
+ "-DCMAKE_BUILD_TYPE=Release",
169
+ )
170
+ if (enableDebugger) {
171
+ cmakeCommandLine = cmakeCommandLine + "-DHERMES_ENABLE_DEBUGGER=True"
172
+ }
173
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
174
+ cmakeCommandLine = cmakeCommandLine + "-GNMake Makefiles"
175
+ }
176
+ if (hermesV1Enabled) {
177
+ cmakeCommandLine = cmakeCommandLine + "-DHERMESVM_HEAP_HV_MODE=HEAP_HV_PREFER32"
178
+ }
179
+
180
+ return cmakeCommandLine
181
+ }
182
+
183
+ fun buildHermesCCommandLineArgs() =
184
+ listOf(
185
+ cmakeBinaryPath,
186
+ "--build",
187
+ hermesBuildDir.toString(),
188
+ "--target",
189
+ "hermesc",
190
+ "-j",
191
+ ndkBuildJobs,
192
+ )
193
+
152
194
  val configureBuildForHermes by
153
195
  tasks.registering(CustomExecTask::class) {
154
196
  dependsOn(installCMake)
155
197
  workingDir(hermesDir)
156
198
  inputs.dir(hermesDir)
157
199
  outputs.files(hermesBuildOutputFileTree)
158
- var cmakeCommandLine =
159
- windowsAwareCommandLine(
160
- cmakeBinaryPath,
161
- // Suppress all warnings as this is the Hermes build and we can't fix them.
162
- "--log-level=ERROR",
163
- "-Wno-dev",
164
- "-S",
165
- ".",
166
- "-B",
167
- hermesBuildDir.toString(),
168
- "-DJSI_DIR=" + jsiDir.absolutePath,
169
- "-DCMAKE_BUILD_TYPE=Release",
170
- )
171
- if (Os.isFamily(Os.FAMILY_WINDOWS)) {
172
- cmakeCommandLine = cmakeCommandLine + "-GNMake Makefiles"
173
- }
200
+ val cmakeCommandLine = configureBuildForHermesCommandLineArgs(hermesBuildDir, jsiDir, false)
174
201
  commandLine(cmakeCommandLine)
175
202
  standardOutputFile.set(project.file("$buildDir/configure-hermesc.log"))
176
203
  }
@@ -181,22 +208,69 @@ val buildHermesC by
181
208
  workingDir(hermesDir)
182
209
  inputs.files(hermesBuildOutputFileTree)
183
210
  outputs.file(hermesCOutputBinary)
211
+ val cmakeCommandLine = buildHermesCCommandLineArgs()
212
+ commandLine(cmakeCommandLine)
213
+ standardOutputFile.set(project.file("$buildDir/build-hermesc.log"))
214
+ errorOutputFile.set(project.file("$buildDir/build-hermesc.error.log"))
215
+ }
216
+
217
+ val prepareHeadersForPrefab by
218
+ tasks.registering(Copy::class) {
219
+ dependsOn(buildHermesC)
220
+ from("$hermesDir/API")
221
+ from("$hermesDir/public")
222
+ include("**/*.h")
223
+ exclude("jsi/**")
224
+ into(prefabHeadersDir)
225
+ }
226
+
227
+ val buildHermesLib by
228
+ tasks.registering(CustomExecTask::class) {
229
+ dependsOn(buildHermesC)
230
+ workingDir(hermesDir)
231
+ inputs.files(hermesBuildOutputFileTree)
184
232
  commandLine(
185
233
  cmakeBinaryPath,
186
234
  "--build",
187
235
  hermesBuildDir.toString(),
188
236
  "--target",
189
- "hermesc",
237
+ "hermesvm",
190
238
  "-j",
191
239
  ndkBuildJobs,
192
240
  )
241
+ standardOutputFile.set(project.file("$buildDir/build-hermes-lib.log"))
242
+ errorOutputFile.set(project.file("$buildDir/build-hermes-lib.error.log"))
243
+ }
244
+
245
+ // The repeated tasks below named "*WithDebugger" are required by Fantom.
246
+ // Hermes V1 by default builds with the debugger disabled, while Fantom needs
247
+ // it to be enabled as it does a debug build of React Native.
248
+ val configureBuildForHermesWithDebugger by
249
+ tasks.registering(CustomExecTask::class) {
250
+ dependsOn(installCMake)
251
+ workingDir(hermesDir)
252
+ inputs.dir(hermesDir)
253
+ outputs.files(hermesBuildOutputFileTree)
254
+ val cmakeCommandLine = configureBuildForHermesCommandLineArgs(hermesBuildDir, jsiDir, true)
255
+ commandLine(cmakeCommandLine)
256
+ standardOutputFile.set(project.file("$buildDir/configure-hermesc.log"))
257
+ }
258
+
259
+ val buildHermesCWithDebugger by
260
+ tasks.registering(CustomExecTask::class) {
261
+ dependsOn(configureBuildForHermesWithDebugger)
262
+ workingDir(hermesDir)
263
+ inputs.files(hermesBuildOutputFileTree)
264
+ outputs.file(hermesCOutputBinary)
265
+ val cmakeCommandLine = buildHermesCCommandLineArgs()
266
+ commandLine(cmakeCommandLine)
193
267
  standardOutputFile.set(project.file("$buildDir/build-hermesc.log"))
194
268
  errorOutputFile.set(project.file("$buildDir/build-hermesc.error.log"))
195
269
  }
196
270
 
197
- val prepareHeadersForPrefab by
271
+ val prepareHeadersForPrefabWithDebugger by
198
272
  tasks.registering(Copy::class) {
199
- dependsOn(buildHermesC)
273
+ dependsOn(buildHermesCWithDebugger)
200
274
  from("$hermesDir/API")
201
275
  from("$hermesDir/public")
202
276
  include("**/*.h")
@@ -204,9 +278,9 @@ val prepareHeadersForPrefab by
204
278
  into(prefabHeadersDir)
205
279
  }
206
280
 
207
- val buildHermesLib by
281
+ val buildHermesLibWithDebugger by
208
282
  tasks.registering(CustomExecTask::class) {
209
- dependsOn(buildHermesC)
283
+ dependsOn(buildHermesCWithDebugger)
210
284
  workingDir(hermesDir)
211
285
  inputs.files(hermesBuildOutputFileTree)
212
286
  commandLine(
@@ -370,6 +444,8 @@ afterEvaluate {
370
444
  // download/unzip Hermes from Github then.
371
445
  tasks.getByName("configureBuildForHermes").dependsOn(unzipHermes)
372
446
  tasks.getByName("prepareHeadersForPrefab").dependsOn(unzipHermes)
447
+ tasks.getByName("configureBuildForHermesWithDebugger").dependsOn(unzipHermes)
448
+ tasks.getByName("prepareHeadersForPrefabWithDebugger").dependsOn(unzipHermes)
373
449
  }
374
450
  tasks.getByName("preBuild").dependsOn(buildHermesC)
375
451
  tasks.getByName("preBuild").dependsOn(prepareHeadersForPrefab)
@@ -15,6 +15,6 @@ public object ReactNativeVersion {
15
15
  "major" to 0,
16
16
  "minor" to 84,
17
17
  "patch" to 0,
18
- "prerelease" to "rc.1"
18
+ "prerelease" to "rc.3"
19
19
  )
20
20
  }
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 84;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "rc.1";
25
+ std::string_view Prerelease = "rc.3";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -74,6 +74,34 @@ void packTransform(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) {
74
74
  folly::dynamic::array(folly::dynamic::object("matrix", matrixArray)));
75
75
  }
76
76
 
77
+ std::string unitTypeToString(UnitType unit) {
78
+ switch (unit) {
79
+ case UnitType::Undefined:
80
+ return "undefined";
81
+ case UnitType::Point:
82
+ return "point";
83
+ case UnitType::Percent:
84
+ return "percent";
85
+ default:
86
+ throw std::runtime_error("Unknown unit type");
87
+ }
88
+ }
89
+
90
+ void packTransformOrigin(
91
+ folly::dynamic& dyn,
92
+ const AnimatedPropBase& animatedProp) {
93
+ const auto& transformOrigin = get<TransformOrigin>(animatedProp);
94
+ auto originArray = folly::dynamic::array();
95
+ for (const auto& xyValue : transformOrigin.xy) {
96
+ folly::dynamic valueObj = folly::dynamic::object();
97
+ valueObj["value"] = xyValue.value;
98
+ valueObj["unit"] = unitTypeToString(xyValue.unit);
99
+ originArray.push_back(valueObj);
100
+ }
101
+ originArray.push_back(transformOrigin.z);
102
+ dyn.insert("transformOrigin", originArray);
103
+ }
104
+
77
105
  void packBackgroundColor(
78
106
  folly::dynamic& dyn,
79
107
  const AnimatedPropBase& animatedProp) {
@@ -198,6 +226,346 @@ void packOutlineWidth(
198
226
  dyn.insert("outlineWidth", get<Float>(animatedProp));
199
227
  }
200
228
 
229
+ void packBorderCurveEdge(
230
+ folly::dynamic& dyn,
231
+ const std::string& propName,
232
+ const std::optional<BorderCurve>& curveValue) {
233
+ if (curveValue.has_value()) {
234
+ std::string curveStr;
235
+ switch (curveValue.value()) {
236
+ case BorderCurve::Circular:
237
+ curveStr = "circular";
238
+ break;
239
+ case BorderCurve::Continuous:
240
+ curveStr = "continuous";
241
+ break;
242
+ default:
243
+ throw std::runtime_error("Unknown border curve");
244
+ }
245
+ dyn.insert(propName, curveStr);
246
+ }
247
+ }
248
+
249
+ void packBorderCurves(
250
+ folly::dynamic& dyn,
251
+ const AnimatedPropBase& animatedProp) {
252
+ const auto& borderCurves = get<CascadedBorderCurves>(animatedProp);
253
+
254
+ packBorderCurveEdge(dyn, "borderTopLeftCurve", borderCurves.topLeft);
255
+ packBorderCurveEdge(dyn, "borderTopRightCurve", borderCurves.topRight);
256
+ packBorderCurveEdge(dyn, "borderBottomLeftCurve", borderCurves.bottomLeft);
257
+ packBorderCurveEdge(dyn, "borderBottomRightCurve", borderCurves.bottomRight);
258
+
259
+ if (borderCurves.all.has_value()) {
260
+ std::string curveStr;
261
+ switch (borderCurves.all.value()) {
262
+ case BorderCurve::Circular:
263
+ curveStr = "circular";
264
+ break;
265
+ case BorderCurve::Continuous:
266
+ curveStr = "continuous";
267
+ break;
268
+ default:
269
+ throw std::runtime_error("Unknown border curve");
270
+ }
271
+ dyn.insert("borderCurve", curveStr);
272
+ }
273
+ }
274
+
275
+ std::string borderStyleToString(BorderStyle style) {
276
+ switch (style) {
277
+ case BorderStyle::Solid:
278
+ return "solid";
279
+ case BorderStyle::Dotted:
280
+ return "dotted";
281
+ case BorderStyle::Dashed:
282
+ return "dashed";
283
+ default:
284
+ throw std::runtime_error("Unknown border style");
285
+ }
286
+ }
287
+
288
+ void packBorderStyleEdge(
289
+ folly::dynamic& dyn,
290
+ const std::string& propName,
291
+ const std::optional<BorderStyle>& styleValue) {
292
+ if (styleValue.has_value()) {
293
+ dyn.insert(propName, borderStyleToString(styleValue.value()));
294
+ }
295
+ }
296
+
297
+ void packBorderStyles(
298
+ folly::dynamic& dyn,
299
+ const AnimatedPropBase& animatedProp) {
300
+ const auto& borderStyles = get<CascadedBorderStyles>(animatedProp);
301
+
302
+ packBorderStyleEdge(dyn, "borderLeftStyle", borderStyles.left);
303
+ packBorderStyleEdge(dyn, "borderTopStyle", borderStyles.top);
304
+ packBorderStyleEdge(dyn, "borderRightStyle", borderStyles.right);
305
+ packBorderStyleEdge(dyn, "borderBottomStyle", borderStyles.bottom);
306
+ packBorderStyleEdge(dyn, "borderStartStyle", borderStyles.start);
307
+ packBorderStyleEdge(dyn, "borderEndStyle", borderStyles.end);
308
+
309
+ if (borderStyles.all.has_value()) {
310
+ dyn.insert("borderStyle", borderStyleToString(borderStyles.all.value()));
311
+ }
312
+ }
313
+
314
+ void packPointerEvents(
315
+ folly::dynamic& dyn,
316
+ const AnimatedPropBase& animatedProp) {
317
+ const auto& pointerEvents = get<PointerEventsMode>(animatedProp);
318
+ std::string pointerEventsStr;
319
+ switch (pointerEvents) {
320
+ case PointerEventsMode::Auto:
321
+ pointerEventsStr = "auto";
322
+ break;
323
+ case PointerEventsMode::None:
324
+ pointerEventsStr = "none";
325
+ break;
326
+ case PointerEventsMode::BoxNone:
327
+ pointerEventsStr = "box-none";
328
+ break;
329
+ case PointerEventsMode::BoxOnly:
330
+ pointerEventsStr = "box-only";
331
+ break;
332
+ default:
333
+ throw std::runtime_error("Unknown pointer events mode");
334
+ }
335
+ dyn.insert("pointerEvents", pointerEventsStr);
336
+ }
337
+
338
+ void packIsolation(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) {
339
+ const auto& isolation = get<Isolation>(animatedProp);
340
+ std::string isolationStr;
341
+ switch (isolation) {
342
+ case Isolation::Auto:
343
+ isolationStr = "auto";
344
+ break;
345
+ case Isolation::Isolate:
346
+ isolationStr = "isolate";
347
+ break;
348
+ default:
349
+ throw std::runtime_error("Unknown isolation mode");
350
+ }
351
+ dyn.insert("isolation", isolationStr);
352
+ }
353
+
354
+ void packCursor(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) {
355
+ const auto& cursor = get<Cursor>(animatedProp);
356
+ std::string cursorStr;
357
+ switch (cursor) {
358
+ case Cursor::Auto:
359
+ cursorStr = "auto";
360
+ break;
361
+ case Cursor::Alias:
362
+ cursorStr = "alias";
363
+ break;
364
+ case Cursor::AllScroll:
365
+ cursorStr = "all-scroll";
366
+ break;
367
+ case Cursor::Cell:
368
+ cursorStr = "cell";
369
+ break;
370
+ case Cursor::ColResize:
371
+ cursorStr = "col-resize";
372
+ break;
373
+ case Cursor::ContextMenu:
374
+ cursorStr = "context-menu";
375
+ break;
376
+ case Cursor::Copy:
377
+ cursorStr = "copy";
378
+ break;
379
+ case Cursor::Crosshair:
380
+ cursorStr = "crosshair";
381
+ break;
382
+ case Cursor::Default:
383
+ cursorStr = "default";
384
+ break;
385
+ case Cursor::EResize:
386
+ cursorStr = "e-resize";
387
+ break;
388
+ case Cursor::EWResize:
389
+ cursorStr = "ew-resize";
390
+ break;
391
+ case Cursor::Grab:
392
+ cursorStr = "grab";
393
+ break;
394
+ case Cursor::Grabbing:
395
+ cursorStr = "grabbing";
396
+ break;
397
+ case Cursor::Help:
398
+ cursorStr = "help";
399
+ break;
400
+ case Cursor::Move:
401
+ cursorStr = "move";
402
+ break;
403
+ case Cursor::NResize:
404
+ cursorStr = "n-resize";
405
+ break;
406
+ case Cursor::NEResize:
407
+ cursorStr = "ne-resize";
408
+ break;
409
+ case Cursor::NESWResize:
410
+ cursorStr = "nesw-resize";
411
+ break;
412
+ case Cursor::NSResize:
413
+ cursorStr = "ns-resize";
414
+ break;
415
+ case Cursor::NWResize:
416
+ cursorStr = "nw-resize";
417
+ break;
418
+ case Cursor::NWSEResize:
419
+ cursorStr = "nwse-resize";
420
+ break;
421
+ case Cursor::NoDrop:
422
+ cursorStr = "no-drop";
423
+ break;
424
+ case Cursor::None:
425
+ cursorStr = "none";
426
+ break;
427
+ case Cursor::NotAllowed:
428
+ cursorStr = "not-allowed";
429
+ break;
430
+ case Cursor::Pointer:
431
+ cursorStr = "pointer";
432
+ break;
433
+ case Cursor::Progress:
434
+ cursorStr = "progress";
435
+ break;
436
+ case Cursor::RowResize:
437
+ cursorStr = "row-resize";
438
+ break;
439
+ case Cursor::SResize:
440
+ cursorStr = "s-resize";
441
+ break;
442
+ case Cursor::SEResize:
443
+ cursorStr = "se-resize";
444
+ break;
445
+ case Cursor::SWResize:
446
+ cursorStr = "sw-resize";
447
+ break;
448
+ case Cursor::Text:
449
+ cursorStr = "text";
450
+ break;
451
+ case Cursor::Url:
452
+ cursorStr = "url";
453
+ break;
454
+ case Cursor::WResize:
455
+ cursorStr = "w-resize";
456
+ break;
457
+ case Cursor::Wait:
458
+ cursorStr = "wait";
459
+ break;
460
+ case Cursor::ZoomIn:
461
+ cursorStr = "zoom-in";
462
+ break;
463
+ case Cursor::ZoomOut:
464
+ cursorStr = "zoom-out";
465
+ break;
466
+ default:
467
+ throw std::runtime_error("Unknown cursor type");
468
+ }
469
+ dyn.insert("cursor", cursorStr);
470
+ }
471
+
472
+ void packBoxShadow(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) {
473
+ const auto& boxShadows = get<std::vector<BoxShadow>>(animatedProp);
474
+ auto shadowArray = folly::dynamic::array();
475
+ for (const auto& shadow : boxShadows) {
476
+ folly::dynamic shadowObj = folly::dynamic::object();
477
+ shadowObj["offsetX"] = shadow.offsetX;
478
+ shadowObj["offsetY"] = shadow.offsetY;
479
+ shadowObj["blurRadius"] = shadow.blurRadius;
480
+ shadowObj["spreadDistance"] = shadow.spreadDistance;
481
+ shadowObj["inset"] = shadow.inset;
482
+ if (shadow.color) {
483
+ shadowObj["color"] = static_cast<int32_t>(*shadow.color);
484
+ }
485
+ shadowArray.push_back(shadowObj);
486
+ }
487
+ dyn.insert("boxShadow", shadowArray);
488
+ }
489
+
490
+ void packMixBlendMode(
491
+ folly::dynamic& dyn,
492
+ const AnimatedPropBase& animatedProp) {
493
+ const auto& mixBlendMode = get<BlendMode>(animatedProp);
494
+ std::string blendModeStr;
495
+ switch (mixBlendMode) {
496
+ case BlendMode::Normal:
497
+ blendModeStr = "normal";
498
+ break;
499
+ case BlendMode::Multiply:
500
+ blendModeStr = "multiply";
501
+ break;
502
+ case BlendMode::Screen:
503
+ blendModeStr = "screen";
504
+ break;
505
+ case BlendMode::Overlay:
506
+ blendModeStr = "overlay";
507
+ break;
508
+ case BlendMode::Darken:
509
+ blendModeStr = "darken";
510
+ break;
511
+ case BlendMode::Lighten:
512
+ blendModeStr = "lighten";
513
+ break;
514
+ case BlendMode::ColorDodge:
515
+ blendModeStr = "color-dodge";
516
+ break;
517
+ case BlendMode::ColorBurn:
518
+ blendModeStr = "color-burn";
519
+ break;
520
+ case BlendMode::HardLight:
521
+ blendModeStr = "hard-light";
522
+ break;
523
+ case BlendMode::SoftLight:
524
+ blendModeStr = "soft-light";
525
+ break;
526
+ case BlendMode::Difference:
527
+ blendModeStr = "difference";
528
+ break;
529
+ case BlendMode::Exclusion:
530
+ blendModeStr = "exclusion";
531
+ break;
532
+ case BlendMode::Hue:
533
+ blendModeStr = "hue";
534
+ break;
535
+ case BlendMode::Saturation:
536
+ blendModeStr = "saturation";
537
+ break;
538
+ case BlendMode::Color:
539
+ blendModeStr = "color";
540
+ break;
541
+ case BlendMode::Luminosity:
542
+ blendModeStr = "luminosity";
543
+ break;
544
+ default:
545
+ throw std::runtime_error("Unknown blend mode");
546
+ }
547
+ dyn.insert("mixBlendMode", blendModeStr);
548
+ }
549
+
550
+ void packBackfaceVisibility(
551
+ folly::dynamic& dyn,
552
+ const AnimatedPropBase& animatedProp) {
553
+ const auto& backfaceVisibility = get<BackfaceVisibility>(animatedProp);
554
+ std::string visibilityStr;
555
+ switch (backfaceVisibility) {
556
+ case BackfaceVisibility::Auto:
557
+ visibilityStr = "auto";
558
+ break;
559
+ case BackfaceVisibility::Visible:
560
+ visibilityStr = "visible";
561
+ break;
562
+ case BackfaceVisibility::Hidden:
563
+ visibilityStr = "hidden";
564
+ break;
565
+ }
566
+ dyn.insert("backfaceVisibility", visibilityStr);
567
+ }
568
+
201
569
  void packAnimatedProp(
202
570
  folly::dynamic& dyn,
203
571
  const std::unique_ptr<AnimatedPropBase>& animatedProp) {
@@ -210,6 +578,10 @@ void packAnimatedProp(
210
578
  packTransform(dyn, *animatedProp);
211
579
  break;
212
580
 
581
+ case TRANSFORM_ORIGIN:
582
+ packTransformOrigin(dyn, *animatedProp);
583
+ break;
584
+
213
585
  case BACKGROUND_COLOR:
214
586
  packBackgroundColor(dyn, *animatedProp);
215
587
  break;
@@ -258,6 +630,38 @@ void packAnimatedProp(
258
630
  packOutlineWidth(dyn, *animatedProp);
259
631
  break;
260
632
 
633
+ case BORDER_CURVES:
634
+ packBorderCurves(dyn, *animatedProp);
635
+ break;
636
+
637
+ case BORDER_STYLES:
638
+ packBorderStyles(dyn, *animatedProp);
639
+ break;
640
+
641
+ case POINTER_EVENTS:
642
+ packPointerEvents(dyn, *animatedProp);
643
+ break;
644
+
645
+ case ISOLATION:
646
+ packIsolation(dyn, *animatedProp);
647
+ break;
648
+
649
+ case CURSOR:
650
+ packCursor(dyn, *animatedProp);
651
+ break;
652
+
653
+ case BOX_SHADOW:
654
+ packBoxShadow(dyn, *animatedProp);
655
+ break;
656
+
657
+ case MIX_BLEND_MODE:
658
+ packMixBlendMode(dyn, *animatedProp);
659
+ break;
660
+
661
+ case BACKFACE_VISIBILITY:
662
+ packBackfaceVisibility(dyn, *animatedProp);
663
+ break;
664
+
261
665
  case WIDTH:
262
666
  case HEIGHT:
263
667
  case FLEX:
@@ -283,6 +687,10 @@ void packAnimatedProp(
283
687
  case MAX_WIDTH:
284
688
  case MIN_HEIGHT:
285
689
  case MIN_WIDTH:
690
+ case STYLE_OVERFLOW:
691
+ case POSITION_TYPE:
692
+ case Z_INDEX:
693
+ case DIRECTION:
286
694
  throw std::runtime_error("Tried to synchronously update layout props");
287
695
  }
288
696
  }
@@ -24,6 +24,7 @@ enum PropName {
24
24
  POSITION,
25
25
  FLEX,
26
26
  TRANSFORM,
27
+ TRANSFORM_ORIGIN,
27
28
  BACKGROUND_COLOR,
28
29
  SHADOW_COLOR,
29
30
  SHADOW_OFFSET,
@@ -51,7 +52,19 @@ enum PropName {
51
52
  MAX_HEIGHT,
52
53
  MAX_WIDTH,
53
54
  MIN_HEIGHT,
54
- MIN_WIDTH
55
+ MIN_WIDTH,
56
+ STYLE_OVERFLOW,
57
+ POSITION_TYPE,
58
+ Z_INDEX,
59
+ DIRECTION,
60
+ BORDER_CURVES,
61
+ BORDER_STYLES,
62
+ POINTER_EVENTS,
63
+ ISOLATION,
64
+ CURSOR,
65
+ BOX_SHADOW,
66
+ MIX_BLEND_MODE,
67
+ BACKFACE_VISIBILITY
55
68
  };
56
69
 
57
70
  struct AnimatedPropBase {
@@ -243,6 +256,10 @@ inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animated
243
256
  viewProps.transform = get<Transform>(animatedProp);
244
257
  break;
245
258
 
259
+ case TRANSFORM_ORIGIN:
260
+ viewProps.transformOrigin = get<TransformOrigin>(animatedProp);
261
+ break;
262
+
246
263
  case BACKGROUND_COLOR:
247
264
  viewProps.backgroundColor = get<SharedColor>(animatedProp);
248
265
  break;
@@ -355,6 +372,54 @@ inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animated
355
372
  viewProps.yogaStyle.setMinDimension(yoga::Dimension::Width, get<yoga::Style::SizeLength>(animatedProp));
356
373
  break;
357
374
 
375
+ case STYLE_OVERFLOW:
376
+ viewProps.yogaStyle.setOverflow(get<yoga::Overflow>(animatedProp));
377
+ break;
378
+
379
+ case POSITION_TYPE:
380
+ viewProps.yogaStyle.setPositionType(get<yoga::PositionType>(animatedProp));
381
+ break;
382
+
383
+ case Z_INDEX:
384
+ viewProps.zIndex = get<std::optional<int>>(animatedProp);
385
+ break;
386
+
387
+ case DIRECTION:
388
+ viewProps.yogaStyle.setDirection(get<yoga::Direction>(animatedProp));
389
+ break;
390
+
391
+ case BORDER_CURVES:
392
+ viewProps.borderCurves = get<CascadedBorderCurves>(animatedProp);
393
+ break;
394
+
395
+ case BORDER_STYLES:
396
+ viewProps.borderStyles = get<CascadedBorderStyles>(animatedProp);
397
+ break;
398
+
399
+ case POINTER_EVENTS:
400
+ viewProps.pointerEvents = get<PointerEventsMode>(animatedProp);
401
+ break;
402
+
403
+ case ISOLATION:
404
+ viewProps.isolation = get<Isolation>(animatedProp);
405
+ break;
406
+
407
+ case CURSOR:
408
+ viewProps.cursor = get<Cursor>(animatedProp);
409
+ break;
410
+
411
+ case BOX_SHADOW:
412
+ viewProps.boxShadow = get<std::vector<BoxShadow>>(animatedProp);
413
+ break;
414
+
415
+ case MIX_BLEND_MODE:
416
+ viewProps.mixBlendMode = get<BlendMode>(animatedProp);
417
+ break;
418
+
419
+ case BACKFACE_VISIBILITY:
420
+ viewProps.backfaceVisibility = get<BackfaceVisibility>(animatedProp);
421
+ break;
422
+
358
423
  default:
359
424
  break;
360
425
  }
@@ -52,9 +52,17 @@ struct AnimatedPropsBuilder {
52
52
  {
53
53
  props.push_back(std::make_unique<AnimatedProp<CascadedRectangleEdges<yoga::StyleLength>>>(POSITION, value));
54
54
  }
55
- void setTransform(Transform &t)
55
+ void setFlex(yoga::FloatOptional value)
56
56
  {
57
- props.push_back(std::make_unique<AnimatedProp<Transform>>(TRANSFORM, std::move(t)));
57
+ props.push_back(std::make_unique<AnimatedProp<yoga::FloatOptional>>(FLEX, value));
58
+ }
59
+ void setTransform(const Transform &t)
60
+ {
61
+ props.push_back(std::make_unique<AnimatedProp<Transform>>(TRANSFORM, t));
62
+ }
63
+ void setTransformOrigin(const TransformOrigin &value)
64
+ {
65
+ props.push_back(std::make_unique<AnimatedProp<TransformOrigin>>(TRANSFORM_ORIGIN, value));
58
66
  }
59
67
  void setBackgroundColor(SharedColor value)
60
68
  {
@@ -168,6 +176,54 @@ struct AnimatedPropsBuilder {
168
176
  {
169
177
  props.push_back(std::make_unique<AnimatedProp<yoga::Style::SizeLength>>(MIN_WIDTH, value));
170
178
  }
179
+ void setOverflow(yoga::Overflow value)
180
+ {
181
+ props.push_back(std::make_unique<AnimatedProp<yoga::Overflow>>(STYLE_OVERFLOW, value));
182
+ }
183
+ void setPositionType(yoga::PositionType value)
184
+ {
185
+ props.push_back(std::make_unique<AnimatedProp<yoga::PositionType>>(POSITION_TYPE, value));
186
+ }
187
+ void setZIndex(std::optional<int> value)
188
+ {
189
+ props.push_back(std::make_unique<AnimatedProp<std::optional<int>>>(Z_INDEX, value));
190
+ }
191
+ void setDirection(yoga::Direction value)
192
+ {
193
+ props.push_back(std::make_unique<AnimatedProp<yoga::Direction>>(DIRECTION, value));
194
+ }
195
+ void setBorderCurves(CascadedBorderCurves &value)
196
+ {
197
+ props.push_back(std::make_unique<AnimatedProp<CascadedBorderCurves>>(BORDER_CURVES, value));
198
+ }
199
+ void setBorderStyles(CascadedBorderStyles &value)
200
+ {
201
+ props.push_back(std::make_unique<AnimatedProp<CascadedBorderStyles>>(BORDER_STYLES, value));
202
+ }
203
+ void setPointerEvents(PointerEventsMode value)
204
+ {
205
+ props.push_back(std::make_unique<AnimatedProp<PointerEventsMode>>(POINTER_EVENTS, value));
206
+ }
207
+ void setIsolation(Isolation value)
208
+ {
209
+ props.push_back(std::make_unique<AnimatedProp<Isolation>>(ISOLATION, value));
210
+ }
211
+ void setCursor(Cursor value)
212
+ {
213
+ props.push_back(std::make_unique<AnimatedProp<Cursor>>(CURSOR, value));
214
+ }
215
+ void setBoxShadow(const std::vector<BoxShadow> &value)
216
+ {
217
+ props.push_back(std::make_unique<AnimatedProp<std::vector<BoxShadow>>>(BOX_SHADOW, value));
218
+ }
219
+ void setMixBlendMode(BlendMode value)
220
+ {
221
+ props.push_back(std::make_unique<AnimatedProp<BlendMode>>(MIX_BLEND_MODE, value));
222
+ }
223
+ void setBackfaceVisibility(BackfaceVisibility value)
224
+ {
225
+ props.push_back(std::make_unique<AnimatedProp<BackfaceVisibility>>(BACKFACE_VISIBILITY, value));
226
+ }
171
227
  void storeDynamic(folly::dynamic &d)
172
228
  {
173
229
  rawProps = std::make_unique<RawProps>(std::move(d));
@@ -68,6 +68,10 @@ inline void updateProp(const PropName propName, BaseViewProps &viewProps, const
68
68
  viewProps.transform = snapshot.props.transform;
69
69
  break;
70
70
 
71
+ case TRANSFORM_ORIGIN:
72
+ viewProps.transformOrigin = snapshot.props.transformOrigin;
73
+ break;
74
+
71
75
  case BORDER_RADII:
72
76
  viewProps.borderRadii = snapshot.props.borderRadii;
73
77
  break;
@@ -240,6 +244,54 @@ inline void updateProp(const PropName propName, BaseViewProps &viewProps, const
240
244
  viewProps.yogaStyle.setMinDimension(
241
245
  yoga::Dimension::Width, snapshot.props.yogaStyle.minDimension(yoga::Dimension::Width));
242
246
  break;
247
+
248
+ case STYLE_OVERFLOW:
249
+ viewProps.yogaStyle.setOverflow(snapshot.props.yogaStyle.overflow());
250
+ break;
251
+
252
+ case POSITION_TYPE:
253
+ viewProps.yogaStyle.setPositionType(snapshot.props.yogaStyle.positionType());
254
+ break;
255
+
256
+ case Z_INDEX:
257
+ viewProps.zIndex = snapshot.props.zIndex;
258
+ break;
259
+
260
+ case DIRECTION:
261
+ viewProps.yogaStyle.setDirection(snapshot.props.yogaStyle.direction());
262
+ break;
263
+
264
+ case BORDER_CURVES:
265
+ viewProps.borderCurves = snapshot.props.borderCurves;
266
+ break;
267
+
268
+ case BORDER_STYLES:
269
+ viewProps.borderStyles = snapshot.props.borderStyles;
270
+ break;
271
+
272
+ case POINTER_EVENTS:
273
+ viewProps.pointerEvents = snapshot.props.pointerEvents;
274
+ break;
275
+
276
+ case ISOLATION:
277
+ viewProps.isolation = snapshot.props.isolation;
278
+ break;
279
+
280
+ case CURSOR:
281
+ viewProps.cursor = snapshot.props.cursor;
282
+ break;
283
+
284
+ case BOX_SHADOW:
285
+ viewProps.boxShadow = snapshot.props.boxShadow;
286
+ break;
287
+
288
+ case MIX_BLEND_MODE:
289
+ viewProps.mixBlendMode = snapshot.props.mixBlendMode;
290
+ break;
291
+
292
+ case BACKFACE_VISIBILITY:
293
+ viewProps.backfaceVisibility = snapshot.props.backfaceVisibility;
294
+ break;
243
295
  }
244
296
  }
245
297
 
@@ -16,15 +16,12 @@
16
16
  namespace facebook::react {
17
17
 
18
18
  static const auto layoutProps = std::set<PropName>{
19
- PropName::WIDTH, PropName::HEIGHT, PropName::FLEX,
20
- PropName::MARGIN, PropName::PADDING, PropName::POSITION,
21
- PropName::BORDER_WIDTH, PropName::ALIGN_CONTENT, PropName::ALIGN_ITEMS,
22
- PropName::ALIGN_SELF, PropName::ASPECT_RATIO, PropName::BOX_SIZING,
23
- PropName::DISPLAY, PropName::FLEX_BASIS, PropName::FLEX_DIRECTION,
24
- PropName::ROW_GAP, PropName::COLUMN_GAP, PropName::FLEX_GROW,
25
- PropName::FLEX_SHRINK, PropName::FLEX_WRAP, PropName::JUSTIFY_CONTENT,
26
- PropName::MAX_HEIGHT, PropName::MAX_WIDTH, PropName::MIN_HEIGHT,
27
- PropName::MIN_WIDTH,
19
+ WIDTH, HEIGHT, FLEX, MARGIN, PADDING,
20
+ POSITION, BORDER_WIDTH, ALIGN_CONTENT, ALIGN_ITEMS, ALIGN_SELF,
21
+ ASPECT_RATIO, BOX_SIZING, DISPLAY, FLEX_BASIS, FLEX_DIRECTION,
22
+ ROW_GAP, COLUMN_GAP, FLEX_GROW, FLEX_SHRINK, FLEX_WRAP,
23
+ JUSTIFY_CONTENT, MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH,
24
+ STYLE_OVERFLOW, POSITION_TYPE, DIRECTION, Z_INDEX,
28
25
  };
29
26
 
30
27
  UIManagerNativeAnimatedDelegateBackendImpl::
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.84.0-rc.1",
3
+ "version": "0.84.0-rc.3",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -160,13 +160,13 @@
160
160
  },
161
161
  "dependencies": {
162
162
  "@jest/create-cache-key-function": "^29.7.0",
163
- "@react-native/assets-registry": "0.84.0-rc.1",
164
- "@react-native/codegen": "0.84.0-rc.1",
165
- "@react-native/community-cli-plugin": "0.84.0-rc.1",
166
- "@react-native/gradle-plugin": "0.84.0-rc.1",
167
- "@react-native/js-polyfills": "0.84.0-rc.1",
168
- "@react-native/normalize-colors": "0.84.0-rc.1",
169
- "@react-native/virtualized-lists": "0.84.0-rc.1",
163
+ "@react-native/assets-registry": "0.84.0-rc.3",
164
+ "@react-native/codegen": "0.84.0-rc.3",
165
+ "@react-native/community-cli-plugin": "0.84.0-rc.3",
166
+ "@react-native/gradle-plugin": "0.84.0-rc.3",
167
+ "@react-native/js-polyfills": "0.84.0-rc.3",
168
+ "@react-native/normalize-colors": "0.84.0-rc.3",
169
+ "@react-native/virtualized-lists": "0.84.0-rc.3",
170
170
  "abort-controller": "^3.0.0",
171
171
  "anser": "^1.4.9",
172
172
  "ansi-regex": "^5.0.0",
@@ -169,11 +169,10 @@ function findFilesWithExtension(
169
169
  return null;
170
170
  }
171
171
 
172
- // Skip hidden folders, that starts with `.` but allow `.pnpm`
173
- if (
174
- absolutePath.includes(`${path.sep}.`) &&
175
- !absolutePath.includes(`${path.sep}.pnpm`)
176
- ) {
172
+ // Skip hidden files/folders (starting with `.`) but allow `.pnpm`
173
+ // Note: Only check the filename, not the entire path, to avoid false positives
174
+ // when the workspace itself is under a hidden folder (e.g., ~/.jenkins/)
175
+ if (file.startsWith('.') && file !== '.pnpm') {
177
176
  return null;
178
177
  }
179
178
 
@@ -226,5 +225,6 @@ function findRCTComponentViewProtocolClass(filepath /*: string */) {
226
225
  }
227
226
 
228
227
  module.exports = {
228
+ findFilesWithExtension,
229
229
  generateRCTThirdPartyComponents,
230
230
  };
@@ -102,3 +102,21 @@ cp -f src/glog/logging.h "$EXPORTED_INCLUDE_DIR/"
102
102
  cp -f src/glog/raw_logging.h "$EXPORTED_INCLUDE_DIR/"
103
103
  cp -f src/glog/stl_logging.h "$EXPORTED_INCLUDE_DIR/"
104
104
  cp -f src/glog/vlog_is_on.h "$EXPORTED_INCLUDE_DIR/"
105
+
106
+
107
+ # Create a custom module.modulemap that works with Swift C++ interop
108
+ # The issue is that glog headers include other headers inside namespace blocks
109
+ # which Clang treats as module imports inside namespaces (which is illegal)
110
+ # Solution: Use textual headers to prevent submodule creation
111
+ cat > src/glog/module.modulemap << 'MODULEMAP'
112
+ module glog {
113
+ // Use textual headers to avoid submodule generation
114
+ // This prevents the "import within namespace" error with Swift C++ interop
115
+ textual header "log_severity.h"
116
+ textual header "logging.h"
117
+ textual header "raw_logging.h"
118
+ textual header "stl_logging.h"
119
+ textual header "vlog_is_on.h"
120
+ export *
121
+ }
122
+ MODULEMAP
@@ -33,6 +33,7 @@ Pod::Spec.new do |spec|
33
33
  spec.exclude_files = "src/windows/**/*"
34
34
  spec.compiler_flags = '-Wno-shorten-64-to-32'
35
35
  spec.resource_bundles = {'glog_privacy' => 'glog/PrivacyInfo.xcprivacy'}
36
+ spec.module_map = 'src/glog/module.modulemap'
36
37
 
37
38
  spec.pod_target_xcconfig = {
38
39
  "USE_HEADERMAP" => "NO",