From 87611d41432d47964b9859dfbf636946a2628a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fo=C5=99t?= Date: Tue, 25 Apr 2023 16:36:33 +0200 Subject: [PATCH 01/17] Fix test e2e script (#37081) --- scripts/test-manual-e2e.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/test-manual-e2e.sh b/scripts/test-manual-e2e.sh index 80b66b4ecd1597..e1426510e9d158 100755 --- a/scripts/test-manual-e2e.sh +++ b/scripts/test-manual-e2e.sh @@ -113,22 +113,22 @@ init_template_app(){ success "Preparing version $PACKAGE_VERSION" - npm pack - TIMESTAMP=$(date +%s) PACKAGE=$(pwd)/react-native-$PACKAGE_VERSION-$TIMESTAMP.tgz - success "Package bundled ($PACKAGE)" - - mv "$(pwd)/react-native-$PACKAGE_VERSION.tgz" "$PACKAGE" node scripts/set-rn-template-version.js "file:$PACKAGE" success "React Native version changed in the template" + npm pack + success "Package bundled ($PACKAGE)" + + mv "$(pwd)/react-native-$PACKAGE_VERSION.tgz" "$PACKAGE" + project_name="RNTestProject" cd /tmp/ || exit rm -rf "$project_name" - node "$repo_root/cli.js" init "$project_name" --template "$repo_root" + node "$repo_root/cli.js" init "$project_name" --template "$PACKAGE" info "Double checking the versions in package.json are correct:" grep "\"react-native\": \".*react-native-$PACKAGE_VERSION-$TIMESTAMP.tgz\"" "/tmp/${project_name}/package.json" || error "Incorrect version number in /tmp/${project_name}/package.json" From ccb9366575d24f0dfae62fddd888b70b9a71d93d Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 9 Feb 2023 09:56:05 -0800 Subject: [PATCH 02/17] Fix measurement of uncontrolled TextInput after edit Summary: D42721684 (https://github.com/facebook/react-native/commit/be69c8b5a77ae60cced1b2af64e48b90d9955be5) left a pretty bad bug when using Fabric for Android. I missed that in Fabric specifically, on edit we will cache the Spannable backing the EditText for use in future measurement. Because we've stripped the sizing spans, Spannable measurement has incorrect font size, and the TextInput size will change (collapsing) after the first edit. This effectively breaks any uncontrolled TextInput which does not have explicit dimensions set. Changelog: [Android][Fixed] - Fix measurement of uncontrolled TextInput after edit Reviewed By: sammy-SC Differential Revision: D43158407 fbshipit-source-id: 51602eab06c9a50e2b60ef0ed87bdb4df025e51e --- .../react/views/textinput/ReactEditText.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 7e00b87edce484..eed878fa5b12af 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -551,7 +551,7 @@ public void maybeSetText(ReactTextUpdate reactTextUpdate) { manageSpans(spannableStringBuilder, reactTextUpdate.mContainsMultipleFragments); // Mitigation for https://github.com/facebook/react-native/issues/35936 (S318090) - stripAbsoluteSizeSpans(spannableStringBuilder); + stripAtributeEquivalentSpans(spannableStringBuilder); mContainsImages = reactTextUpdate.containsImages(); @@ -626,7 +626,7 @@ private void manageSpans( } } - private void stripAbsoluteSizeSpans(SpannableStringBuilder sb) { + private void stripAtributeEquivalentSpans(SpannableStringBuilder sb) { // We have already set a font size on the EditText itself. We can safely remove sizing spans // which are the same as the set font size, and not otherwise overlapped. final int effectiveFontSize = mTextAttributes.getEffectiveFontSize(); @@ -647,6 +647,31 @@ private void stripAbsoluteSizeSpans(SpannableStringBuilder sb) { } } + private void unstripAttributeEquivalentSpans( + SpannableStringBuilder workingText, Spannable originalText) { + // We must add spans back for Fabric to be able to measure, at lower precedence than any + // existing spans. Remove all spans, add the attributes, then re-add the spans over + workingText.append(originalText); + + for (Object span : workingText.getSpans(0, workingText.length(), Object.class)) { + workingText.removeSpan(span); + } + + workingText.setSpan( + new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()), + 0, + workingText.length(), + Spanned.SPAN_INCLUSIVE_INCLUSIVE); + + for (Object span : originalText.getSpans(0, originalText.length(), Object.class)) { + workingText.setSpan( + span, + originalText.getSpanStart(span), + originalText.getSpanEnd(span), + originalText.getSpanFlags(span)); + } + } + private static boolean sameTextForSpan( final Editable oldText, final SpannableStringBuilder newText, @@ -1061,7 +1086,8 @@ private void updateCachedSpannable(boolean resetStyles) { // ... // - android.app.Activity.dispatchKeyEvent (Activity.java:3447) try { - sb.append(currentText.subSequence(0, currentText.length())); + Spannable text = (Spannable) currentText.subSequence(0, currentText.length()); + unstripAttributeEquivalentSpans(sb, text); } catch (IndexOutOfBoundsException e) { ReactSoftExceptionLogger.logSoftException(TAG, e); } From 11755c1d69cb533749e5f9308b5e812ddfe5178e Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 05:24:09 -0700 Subject: [PATCH 03/17] Minimize EditText Spans 1/9: Fix precedence (#36543) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36543 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. We cache the backing EditText span on text change to later measure. To measure outside of a TextInput we need to restore any spans we removed. Spans may overlap, so base attributes should be behind everything else. The logic here for dealing with precedence is incorrect, and we should instead accomplish this by twiddling with the `SPAN_PRIORITY` bits. Changelog: [Android][Fixed] - Minimize Spans 1/N: Fix precedence Reviewed By: javache Differential Revision: D44240779 fbshipit-source-id: f731b353587888faad946b8cf1e868095cdeced3 --- .../react/views/textinput/ReactEditText.java | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index eed878fa5b12af..2d9e8d04530861 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -647,29 +647,18 @@ private void stripAtributeEquivalentSpans(SpannableStringBuilder sb) { } } - private void unstripAttributeEquivalentSpans( - SpannableStringBuilder workingText, Spannable originalText) { - // We must add spans back for Fabric to be able to measure, at lower precedence than any - // existing spans. Remove all spans, add the attributes, then re-add the spans over - workingText.append(originalText); + private void unstripAttributeEquivalentSpans(SpannableStringBuilder workingText) { + int spanFlags = Spannable.SPAN_INCLUSIVE_INCLUSIVE; - for (Object span : workingText.getSpans(0, workingText.length(), Object.class)) { - workingText.removeSpan(span); - } + // Set all bits for SPAN_PRIORITY so that this span has the highest possible priority + // (least precedence). This ensures the span is behind any overlapping spans. + spanFlags |= Spannable.SPAN_PRIORITY; workingText.setSpan( new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()), 0, workingText.length(), - Spanned.SPAN_INCLUSIVE_INCLUSIVE); - - for (Object span : originalText.getSpans(0, originalText.length(), Object.class)) { - workingText.setSpan( - span, - originalText.getSpanStart(span), - originalText.getSpanEnd(span), - originalText.getSpanFlags(span)); - } + spanFlags); } private static boolean sameTextForSpan( @@ -1086,8 +1075,8 @@ private void updateCachedSpannable(boolean resetStyles) { // ... // - android.app.Activity.dispatchKeyEvent (Activity.java:3447) try { - Spannable text = (Spannable) currentText.subSequence(0, currentText.length()); - unstripAttributeEquivalentSpans(sb, text); + sb.append(currentText.subSequence(0, currentText.length())); + unstripAttributeEquivalentSpans(sb); } catch (IndexOutOfBoundsException e) { ReactSoftExceptionLogger.logSoftException(TAG, e); } From 485b8ef1566af169d0da8bcb489105cdb1f92f46 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 05:24:09 -0700 Subject: [PATCH 04/17] Minimize EditText Spans 2/9: Make stripAttributeEquivalentSpans generic (#36546) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36546 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This change generalizes `stripAttributeEquivalentSpans()` to allow plugging in different spans. Changelog: [Internal] Reviewed By: rshest Differential Revision: D44240781 fbshipit-source-id: 89005266020f216368e9ad9ce382699bd8db85a8 # Conflicts: # ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java --- .../react/views/textinput/ReactEditText.java | 54 ++++++++++++------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 2d9e8d04530861..fef3b9f6dceb6d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -549,9 +549,7 @@ public void maybeSetText(ReactTextUpdate reactTextUpdate) { new SpannableStringBuilder(reactTextUpdate.getText()); manageSpans(spannableStringBuilder, reactTextUpdate.mContainsMultipleFragments); - - // Mitigation for https://github.com/facebook/react-native/issues/35936 (S318090) - stripAtributeEquivalentSpans(spannableStringBuilder); + stripStyleEquivalentSpans(spannableStringBuilder); mContainsImages = reactTextUpdate.containsImages(); @@ -626,28 +624,44 @@ private void manageSpans( } } - private void stripAtributeEquivalentSpans(SpannableStringBuilder sb) { - // We have already set a font size on the EditText itself. We can safely remove sizing spans - // which are the same as the set font size, and not otherwise overlapped. - final int effectiveFontSize = mTextAttributes.getEffectiveFontSize(); - ReactAbsoluteSizeSpan[] spans = sb.getSpans(0, sb.length(), ReactAbsoluteSizeSpan.class); + // TODO: Replace with Predicate and lambdas once Java 8 builds in OSS + interface SpanPredicate { + boolean test(T span); + } - outerLoop: - for (ReactAbsoluteSizeSpan span : spans) { - ReactAbsoluteSizeSpan[] overlappingSpans = - sb.getSpans(sb.getSpanStart(span), sb.getSpanEnd(span), ReactAbsoluteSizeSpan.class); + /** + * Remove spans from the SpannableStringBuilder which can be represented by TextAppearance + * attributes on the underlying EditText. This works around instability on Samsung devices with + * the presence of spans https://github.com/facebook/react-native/issues/35936 (S318090) + */ + private void stripStyleEquivalentSpans(SpannableStringBuilder sb) { + stripSpansOfKind( + sb, + ReactAbsoluteSizeSpan.class, + new SpanPredicate() { + @Override + public boolean test(ReactAbsoluteSizeSpan span) { + return span.getSize() == mTextAttributes.getEffectiveFontSize(); + } + }); + } - for (ReactAbsoluteSizeSpan overlappingSpan : overlappingSpans) { - if (span.getSize() != effectiveFontSize) { - continue outerLoop; - } - } + private void stripSpansOfKind( + SpannableStringBuilder sb, Class clazz, SpanPredicate shouldStrip) { + T[] spans = sb.getSpans(0, sb.length(), clazz); - sb.removeSpan(span); + for (T span : spans) { + if (shouldStrip.test(span)) { + sb.removeSpan(span); + } } } - private void unstripAttributeEquivalentSpans(SpannableStringBuilder workingText) { + /** + * Copy back styles represented as attributes to the underlying span, for later measurement + * outside the ReactEditText. + */ + private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { int spanFlags = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // Set all bits for SPAN_PRIORITY so that this span has the highest possible priority @@ -1076,7 +1090,7 @@ private void updateCachedSpannable(boolean resetStyles) { // - android.app.Activity.dispatchKeyEvent (Activity.java:3447) try { sb.append(currentText.subSequence(0, currentText.length())); - unstripAttributeEquivalentSpans(sb); + restoreStyleEquivalentSpans(sb); } catch (IndexOutOfBoundsException e) { ReactSoftExceptionLogger.logSoftException(TAG, e); } From 3cdcbe7e72ef2e744d499eb77067e82dfc8de96d Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 05:24:09 -0700 Subject: [PATCH 05/17] Minimize EditText Spans 3/9: ReactBackgroundColorSpan (#36547) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36547 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This adds `ReactBackgroundColorSpan` to the list of spans eligible to be stripped. Changelog: [Android][Fixed] - Minimize Spans 3/N: ReactBackgroundColorSpan Reviewed By: javache Differential Revision: D44240782 fbshipit-source-id: 2ded1a1687a41cf6d5f83e89ffadd2d932089969 --- .../react/views/textinput/ReactEditText.java | 28 +++++++++++++++---- .../view/ReactViewBackgroundManager.java | 5 ++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index fef3b9f6dceb6d..95e111cf70a9a0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -11,6 +11,7 @@ import static com.facebook.react.views.text.TextAttributeProps.UNSET; import android.content.Context; +import android.graphics.Color; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -50,6 +51,7 @@ import com.facebook.react.views.text.CustomLineHeightSpan; import com.facebook.react.views.text.CustomStyleSpan; import com.facebook.react.views.text.ReactAbsoluteSizeSpan; +import com.facebook.react.views.text.ReactBackgroundColorSpan; import com.facebook.react.views.text.ReactSpan; import com.facebook.react.views.text.ReactTextUpdate; import com.facebook.react.views.text.ReactTypefaceUtils; @@ -644,6 +646,16 @@ public boolean test(ReactAbsoluteSizeSpan span) { return span.getSize() == mTextAttributes.getEffectiveFontSize(); } }); + + stripSpansOfKind( + sb, + ReactBackgroundColorSpan.class, + new SpanPredicate() { + @Override + public boolean test(ReactBackgroundColorSpan span) { + return span.getBackgroundColor() == mReactBackgroundManager.getBackgroundColor(); + } + }); } private void stripSpansOfKind( @@ -668,11 +680,17 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { // (least precedence). This ensures the span is behind any overlapping spans. spanFlags |= Spannable.SPAN_PRIORITY; - workingText.setSpan( - new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()), - 0, - workingText.length(), - spanFlags); + List spans = new ArrayList<>(); + spans.add(new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize())); + + int backgroundColor = mReactBackgroundManager.getBackgroundColor(); + if (backgroundColor != Color.TRANSPARENT) { + spans.add(new ReactBackgroundColorSpan(backgroundColor)); + } + + for (Object span : spans) { + workingText.setSpan(span, 0, workingText.length(), spanFlags); + } } private static boolean sameTextForSpan( diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java index c89b4e3ad0c8e9..f59c3800720817 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java @@ -19,6 +19,7 @@ public class ReactViewBackgroundManager { private @Nullable ReactViewBackgroundDrawable mReactBackgroundDrawable; private View mView; + private int mColor = Color.TRANSPARENT; public ReactViewBackgroundManager(View view) { this.mView = view; @@ -50,6 +51,10 @@ public void setBackgroundColor(int color) { } } + public int getBackgroundColor() { + return mColor; + } + public void setBorderWidth(int position, float width) { getOrCreateReactViewBackground().setBorderWidth(position, width); } From b164055130de04162a092d3b28a62b1579a55f8d Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 05:24:09 -0700 Subject: [PATCH 06/17] Minimize EditText Spans 4/9: ReactForegroundColorSpan (#36545) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36545 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This adds ReactForegroundColorSpan to the list of spans eligible to be stripped. Changelog: [Android][Fixed] - Minimize Spans 4/N: ReactForegroundColorSpan Reviewed By: javache Differential Revision: D44240780 fbshipit-source-id: d86939cc2d7ed9116a4167026c7d48928fc51757 --- .../react/views/textinput/ReactEditText.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 95e111cf70a9a0..92462c41b089b7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -52,6 +52,7 @@ import com.facebook.react.views.text.CustomStyleSpan; import com.facebook.react.views.text.ReactAbsoluteSizeSpan; import com.facebook.react.views.text.ReactBackgroundColorSpan; +import com.facebook.react.views.text.ReactForegroundColorSpan; import com.facebook.react.views.text.ReactSpan; import com.facebook.react.views.text.ReactTextUpdate; import com.facebook.react.views.text.ReactTypefaceUtils; @@ -656,6 +657,16 @@ public boolean test(ReactBackgroundColorSpan span) { return span.getBackgroundColor() == mReactBackgroundManager.getBackgroundColor(); } }); + + stripSpansOfKind( + sb, + ReactForegroundColorSpan.class, + new SpanPredicate() { + @Override + public boolean test(ReactForegroundColorSpan span) { + return span.getForegroundColor() == getCurrentTextColor(); + } + }); } private void stripSpansOfKind( @@ -682,6 +693,7 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { List spans = new ArrayList<>(); spans.add(new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize())); + spans.add(new ReactForegroundColorSpan(getCurrentTextColor())); int backgroundColor = mReactBackgroundManager.getBackgroundColor(); if (backgroundColor != Color.TRANSPARENT) { From 54cc78aa0557b396aa4b441586c6b5b001dc5f13 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 12:31:22 -0700 Subject: [PATCH 07/17] Minimize EditText Spans 5/9: Strikethrough and Underline (#36544) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36544 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This change makes us apply strikethrough and underline as paint flags to the underlying EditText, instead of just the spans. We then opt ReactUnderlineSpan and ReactStrikethroughSpan into being strippable. This does actually create visual behavior changes, where child text will inherit any underline or strikethrough of the root EditText (including if the child specifies `textDecorationLine: "none"`. The new behavior is consistent with both iOS and web though, so it seems like more of a bugfix than a regression. Changelog: [Android][Fixed] - Minimize Spans 5/N: Strikethrough and Underline Reviewed By: rshest Differential Revision: D44240778 fbshipit-source-id: d564dfc0121057a5e3b09bb71b8f5662e28be17e --- .../react/views/textinput/ReactEditText.java | 31 +++++++++++++++++++ .../textinput/ReactTextInputManager.java | 15 +++++++++ 2 files changed, 46 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 92462c41b089b7..7bb6e0f8e05f5d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -12,6 +12,7 @@ import android.content.Context; import android.graphics.Color; +import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -54,8 +55,10 @@ import com.facebook.react.views.text.ReactBackgroundColorSpan; import com.facebook.react.views.text.ReactForegroundColorSpan; import com.facebook.react.views.text.ReactSpan; +import com.facebook.react.views.text.ReactStrikethroughSpan; import com.facebook.react.views.text.ReactTextUpdate; import com.facebook.react.views.text.ReactTypefaceUtils; +import com.facebook.react.views.text.ReactUnderlineSpan; import com.facebook.react.views.text.TextAttributes; import com.facebook.react.views.text.TextInlineImageSpan; import com.facebook.react.views.text.TextLayoutManager; @@ -667,6 +670,26 @@ public boolean test(ReactForegroundColorSpan span) { return span.getForegroundColor() == getCurrentTextColor(); } }); + + stripSpansOfKind( + sb, + ReactStrikethroughSpan.class, + new SpanPredicate() { + @Override + public boolean test(ReactStrikethroughSpan span) { + return (getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) != 0; + } + }); + + stripSpansOfKind( + sb, + ReactUnderlineSpan.class, + new SpanPredicate() { + @Override + public boolean test(ReactUnderlineSpan span) { + return (getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) != 0; + } + }); } private void stripSpansOfKind( @@ -700,6 +723,14 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { spans.add(new ReactBackgroundColorSpan(backgroundColor)); } + if ((getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) != 0) { + spans.add(new ReactStrikethroughSpan()); + } + + if ((getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) != 0) { + spans.add(new ReactUnderlineSpan()); + } + for (Object span : spans) { workingText.setSpan(span, 0, workingText.length(), spanFlags); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index df6cc09407b081..49e90cb2b64458 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -13,6 +13,7 @@ import android.content.res.ColorStateList; import android.graphics.BlendMode; import android.graphics.BlendModeColorFilter; +import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Build; @@ -903,6 +904,20 @@ public void setAutoFocus(ReactEditText view, boolean autoFocus) { view.setAutoFocus(autoFocus); } + @ReactProp(name = ViewProps.TEXT_DECORATION_LINE) + public void setTextDecorationLine(ReactEditText view, @Nullable String textDecorationLineString) { + view.setPaintFlags( + view.getPaintFlags() & ~(Paint.STRIKE_THRU_TEXT_FLAG | Paint.UNDERLINE_TEXT_FLAG)); + + for (String token : textDecorationLineString.split(" ")) { + if (token.equals("underline")) { + view.setPaintFlags(view.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); + } else if (token.equals("line-through")) { + view.setPaintFlags(view.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } + } + } + @ReactPropGroup( names = { ViewProps.BORDER_WIDTH, From 7f1009000b5886564877f0ed1d2b8dfcc331af17 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 12:31:22 -0700 Subject: [PATCH 08/17] Minimize EditText Spans 6/9: letterSpacing (#36548) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36548 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This change lets us set `letterSpacing` on the EditText instead of using our custom span. Changelog: [Android][Fixed] - Minimize EditText Spans 6/N: letterSpacing Reviewed By: rshest Differential Revision: D44240777 fbshipit-source-id: 9bd10c3261257037d8cacf37971011aaa94d1a77 --- .../views/text/CustomLetterSpacingSpan.java | 4 ++++ .../react/views/textinput/ReactEditText.java | 23 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLetterSpacingSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLetterSpacingSpan.java index 3b9cf58e33d3a1..d537cd5dccc101 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLetterSpacingSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLetterSpacingSpan.java @@ -37,6 +37,10 @@ public void updateMeasureState(TextPaint paint) { apply(paint); } + public float getSpacing() { + return mLetterSpacing; + } + private void apply(TextPaint paint) { if (!Float.isNaN(mLetterSpacing)) { paint.setLetterSpacing(mLetterSpacing); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 7bb6e0f8e05f5d..7aa3ec7bbdc213 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -690,6 +690,18 @@ public boolean test(ReactUnderlineSpan span) { return (getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) != 0; } }); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + stripSpansOfKind( + sb, + CustomLetterSpacingSpan.class, + new SpanPredicate() { + @Override + public boolean test(CustomLetterSpacingSpan span) { + return span.getSpacing() == mTextAttributes.getEffectiveLetterSpacing(); + } + }); + } } private void stripSpansOfKind( @@ -731,6 +743,13 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { spans.add(new ReactUnderlineSpan()); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + float effectiveLetterSpacing = mTextAttributes.getEffectiveLetterSpacing(); + if (!Float.isNaN(effectiveLetterSpacing)) { + spans.add(new CustomLetterSpacingSpan(effectiveLetterSpacing)); + } + } + for (Object span : spans) { workingText.setSpan(span, 0, workingText.length(), spanFlags); } @@ -1078,7 +1097,9 @@ protected void applyTextAttributes() { float effectiveLetterSpacing = mTextAttributes.getEffectiveLetterSpacing(); if (!Float.isNaN(effectiveLetterSpacing)) { - setLetterSpacing(effectiveLetterSpacing); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setLetterSpacing(effectiveLetterSpacing); + } } } From 3b07e7e9be5febbabef9d668c9f0607ca45c00ed Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 12:31:22 -0700 Subject: [PATCH 09/17] Minimize EditText Spans 7/9: Avoid temp list (#36576) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36576 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This change addresses some minor CR feedback and removes the temporary list of spans in favor of applying them directly. Changelog: [Internal] Reviewed By: javache Differential Revision: D44295190 fbshipit-source-id: bd784e2c514301d45d0bacd8ee6de5c512fc565c --- .../react/views/textinput/ReactEditText.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 7aa3ec7bbdc213..b77dfd4bab9fca 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -726,33 +726,39 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { // (least precedence). This ensures the span is behind any overlapping spans. spanFlags |= Spannable.SPAN_PRIORITY; - List spans = new ArrayList<>(); - spans.add(new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize())); - spans.add(new ReactForegroundColorSpan(getCurrentTextColor())); + workingText.setSpan( + new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()), + 0, + workingText.length(), + spanFlags); + + workingText.setSpan( + new ReactForegroundColorSpan(getCurrentTextColor()), 0, workingText.length(), spanFlags); int backgroundColor = mReactBackgroundManager.getBackgroundColor(); if (backgroundColor != Color.TRANSPARENT) { - spans.add(new ReactBackgroundColorSpan(backgroundColor)); + workingText.setSpan( + new ReactBackgroundColorSpan(backgroundColor), 0, workingText.length(), spanFlags); } if ((getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) != 0) { - spans.add(new ReactStrikethroughSpan()); + workingText.setSpan(new ReactStrikethroughSpan(), 0, workingText.length(), spanFlags); } if ((getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) != 0) { - spans.add(new ReactUnderlineSpan()); + workingText.setSpan(new ReactUnderlineSpan(), 0, workingText.length(), spanFlags); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { float effectiveLetterSpacing = mTextAttributes.getEffectiveLetterSpacing(); if (!Float.isNaN(effectiveLetterSpacing)) { - spans.add(new CustomLetterSpacingSpan(effectiveLetterSpacing)); + workingText.setSpan( + new CustomLetterSpacingSpan(effectiveLetterSpacing), + 0, + workingText.length(), + spanFlags); } } - - for (Object span : spans) { - workingText.setSpan(span, 0, workingText.length(), spanFlags); - } } private static boolean sameTextForSpan( From e89f919b92c766549db3e201ea540bce6ac5a076 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Fri, 24 Mar 2023 12:31:22 -0700 Subject: [PATCH 10/17] Minimize EditText Spans 8/9: CustomStyleSpan (#36577) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/36577 This is part of a series of changes to minimize the number of spans committed to EditText, as a mitigation for platform issues on Samsung devices. See this [GitHub thread]( https://github.com/facebook/react-native/issues/35936#issuecomment-1411437789) for greater context on the platform behavior. This change allows us to strip CustomStyleSpan. We already set all but `fontVariant` on the underlying EditText, so we just need to route that through as well. Note that because this span is non-parcelable, it is seemingly not subject to the buggy behavior on Samsung devices of infinitely cloning the spans, but non-parcelable spans have different issues on the devices (they disappear), so moving `fontVariant` to the top-level makes sense here. Changelog: [Android][Fixed] - Minimize EditText Spans 8/N: CustomStyleSpan Reviewed By: javache Differential Revision: D44297384 fbshipit-source-id: ed4c000e961dd456a2a8f4397e27c23a87defb6e --- .../react/views/text/CustomStyleSpan.java | 4 ++ .../react/views/textinput/ReactEditText.java | 49 +++++++++++++++++++ .../textinput/ReactTextInputManager.java | 6 +++ 3 files changed, 59 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java index b249126cf95750..7866390bfa09bd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java @@ -71,6 +71,10 @@ public int getWeight() { return mFontFamily; } + public @Nullable String getFontFeatureSettings() { + return mFeatureSettings; + } + private static void apply( Paint paint, int style, diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index b77dfd4bab9fca..9b38c072c6486c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -65,6 +65,7 @@ import com.facebook.react.views.view.ReactViewBackgroundManager; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * A wrapper around the EditText that lets us better control what happens when an EditText gets @@ -482,6 +483,14 @@ public void setFontStyle(String fontStyleString) { } } + @Override + public void setFontFeatureSettings(String fontFeatureSettings) { + if (!Objects.equals(fontFeatureSettings, getFontFeatureSettings())) { + super.setFontFeatureSettings(fontFeatureSettings); + mTypefaceDirty = true; + } + } + public void maybeUpdateTypeface() { if (!mTypefaceDirty) { return; @@ -493,6 +502,17 @@ public void maybeUpdateTypeface() { ReactTypefaceUtils.applyStyles( getTypeface(), mFontStyle, mFontWeight, mFontFamily, getContext().getAssets()); setTypeface(newTypeface); + + // Match behavior of CustomStyleSpan and enable SUBPIXEL_TEXT_FLAG when setting anything + // nonstandard + if (mFontStyle != UNSET + || mFontWeight != UNSET + || mFontFamily != null + || getFontFeatureSettings() != null) { + setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); + } else { + setPaintFlags(getPaintFlags() & (~Paint.SUBPIXEL_TEXT_FLAG)); + } } // VisibleForTesting from {@link TextInputEventsTestCase}. @@ -702,6 +722,19 @@ public boolean test(CustomLetterSpacingSpan span) { } }); } + + stripSpansOfKind( + sb, + CustomStyleSpan.class, + new SpanPredicate() { + @Override + public boolean test(CustomStyleSpan span) { + return span.getStyle() == mFontStyle + && Objects.equals(span.getFontFamily(), mFontFamily) + && span.getWeight() == mFontWeight + && Objects.equals(span.getFontFeatureSettings(), getFontFeatureSettings()); + } + }); } private void stripSpansOfKind( @@ -759,6 +792,22 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { spanFlags); } } + + if (mFontStyle != UNSET + || mFontWeight != UNSET + || mFontFamily != null + || getFontFeatureSettings() != null) { + workingText.setSpan( + new CustomStyleSpan( + mFontStyle, + mFontWeight, + getFontFeatureSettings(), + mFontFamily, + getContext().getAssets()), + 0, + workingText.length(), + spanFlags); + } } private static boolean sameTextForSpan( diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 49e90cb2b64458..03a53ac77475b6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -68,6 +68,7 @@ import com.facebook.react.views.text.ReactBaseTextShadowNode; import com.facebook.react.views.text.ReactTextUpdate; import com.facebook.react.views.text.ReactTextViewManagerCallback; +import com.facebook.react.views.text.ReactTypefaceUtils; import com.facebook.react.views.text.TextAttributeProps; import com.facebook.react.views.text.TextInlineImageSpan; import com.facebook.react.views.text.TextLayoutManager; @@ -397,6 +398,11 @@ public void setFontStyle(ReactEditText view, @Nullable String fontStyle) { view.setFontStyle(fontStyle); } + @ReactProp(name = ViewProps.FONT_VARIANT) + public void setFontVariant(ReactEditText view, @Nullable ReadableArray fontVariant) { + view.setFontFeatureSettings(ReactTypefaceUtils.parseFontVariant(fontVariant)); + } + @ReactProp(name = ViewProps.INCLUDE_FONT_PADDING, defaultBoolean = true) public void setIncludeFontPadding(ReactEditText view, boolean includepad) { view.setIncludeFontPadding(includepad); From c3ad8ec7eb01b7236e0081ac7c7f888630caac21 Mon Sep 17 00:00:00 2001 From: Hugo Cuvillier Date: Tue, 12 Apr 2022 09:27:25 -0700 Subject: [PATCH 11/17] Use logical operator instead of bit operation Summary: I guess it's the same since we're working on a `bool` but... this causes some compilation error. Changelog: [General][iOS] - Fix compilation warning in yoga Reviewed By: Andrey-Mishanin Differential Revision: D35438992 fbshipit-source-id: 22bb848dfee435ede66af0a740605d4618585e18 --- ReactCommon/yoga/yoga/Yoga.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactCommon/yoga/yoga/Yoga.cpp b/ReactCommon/yoga/yoga/Yoga.cpp index 99862797b9bb59..20389d4f2404f3 100644 --- a/ReactCommon/yoga/yoga/Yoga.cpp +++ b/ReactCommon/yoga/yoga/Yoga.cpp @@ -2229,7 +2229,7 @@ static float YGDistributeFreeSpaceSecondPass( depth, generationCount); node->setLayoutHadOverflow( - node->getLayout().hadOverflow() | + node->getLayout().hadOverflow() || currentRelativeChild->getLayout().hadOverflow()); } return deltaFreeSpace; From b97a32825784fd6cc7f1b0705b12aea4456e0800 Mon Sep 17 00:00:00 2001 From: Distiller Date: Wed, 26 Apr 2023 13:11:21 +0000 Subject: [PATCH 12/17] [0.68.7] Bump version numbers --- Gemfile.lock | 26 +- Libraries/Core/ReactNativeVersion.js | 2 +- React/Base/RCTVersion.m | 2 +- ReactAndroid/gradle.properties | 2 +- .../systeminfo/ReactNativeVersion.java | 2 +- ReactCommon/cxxreact/ReactNativeVersion.h | 2 +- package.json | 2 +- packages/rn-tester/Podfile.lock | 1148 ++++++++--------- template/Gemfile.lock | 26 +- template/package.json | 2 +- 10 files changed, 605 insertions(+), 609 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 341240a23bf4ad..0910298628b659 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,28 +3,27 @@ GEM specs: CFPropertyList (3.0.6) rexml - activesupport (6.1.7.2) + activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.1) + addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) claide (1.1.0) - cocoapods (1.11.3) + cocoapods (1.12.1) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) + cocoapods-core (= 1.12.1) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-downloader (>= 1.6.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) @@ -32,10 +31,10 @@ GEM gh_inspector (~> 1.0) molinillo (~> 0.8.0) nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) + ruby-macho (>= 2.3.0, < 3.0) xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) + cocoapods-core (1.12.1) + activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) @@ -54,7 +53,7 @@ GEM netrc (~> 0.11) cocoapods-try (1.2.0) colored2 (3.1.2) - concurrent-ruby (1.2.0) + concurrent-ruby (1.2.2) escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) @@ -63,10 +62,10 @@ GEM fuzzy_match (2.0.4) gh_inspector (1.1.3) httpclient (2.8.3) - i18n (1.12.0) + i18n (1.13.0) concurrent-ruby (~> 1.0) json (2.6.3) - minitest (5.17.0) + minitest (5.18.0) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) @@ -85,7 +84,6 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (~> 3.2.4) - zeitwerk (2.6.6) PLATFORMS ruby diff --git a/Libraries/Core/ReactNativeVersion.js b/Libraries/Core/ReactNativeVersion.js index 4afbc70d778f57..1741ac09570830 100644 --- a/Libraries/Core/ReactNativeVersion.js +++ b/Libraries/Core/ReactNativeVersion.js @@ -12,6 +12,6 @@ exports.version = { major: 0, minor: 68, - patch: 6, + patch: 7, prerelease: null, }; diff --git a/React/Base/RCTVersion.m b/React/Base/RCTVersion.m index ffa6b0fe0d1986..72cc0cf82ae95e 100644 --- a/React/Base/RCTVersion.m +++ b/React/Base/RCTVersion.m @@ -23,7 +23,7 @@ __rnVersion = @{ RCTVersionMajor: @(0), RCTVersionMinor: @(68), - RCTVersionPatch: @(6), + RCTVersionPatch: @(7), RCTVersionPrerelease: [NSNull null], }; }); diff --git a/ReactAndroid/gradle.properties b/ReactAndroid/gradle.properties index c66b198ae42cee..d308c46827e01d 100644 --- a/ReactAndroid/gradle.properties +++ b/ReactAndroid/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=0.68.6 +VERSION_NAME=0.68.7 GROUP=com.facebook.react POM_NAME=ReactNative diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java b/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java index 71c617050b5323..419b1012c39edb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java @@ -17,6 +17,6 @@ public class ReactNativeVersion { public static final Map VERSION = MapBuilder.of( "major", 0, "minor", 68, - "patch", 6, + "patch", 7, "prerelease", null); } diff --git a/ReactCommon/cxxreact/ReactNativeVersion.h b/ReactCommon/cxxreact/ReactNativeVersion.h index b834346d372e73..821ed34819f76b 100644 --- a/ReactCommon/cxxreact/ReactNativeVersion.h +++ b/ReactCommon/cxxreact/ReactNativeVersion.h @@ -17,7 +17,7 @@ namespace facebook::react { constexpr struct { int32_t Major = 0; int32_t Minor = 68; - int32_t Patch = 6; + int32_t Patch = 7; std::string_view Prerelease = ""; } ReactNativeVersion; diff --git a/package.json b/package.json index f94ea716b7d225..a197849c987e82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native", - "version": "0.68.6", + "version": "0.68.7", "bin": "./cli.js", "description": "A framework for building native apps using React", "license": "MIT", diff --git a/packages/rn-tester/Podfile.lock b/packages/rn-tester/Podfile.lock index 88c2b7fc4c311d..a9498ee398f3c2 100644 --- a/packages/rn-tester/Podfile.lock +++ b/packages/rn-tester/Podfile.lock @@ -2,14 +2,14 @@ PODS: - boost (1.76.0) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.68.6) - - FBReactNativeSpec (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-Core (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) + - FBLazyVector (0.68.7) + - FBReactNativeSpec (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-Core (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) - Flipper (0.125.0): - Flipper-Folly (~> 2.6) - Flipper-RSocket (~> 1.4) @@ -91,623 +91,623 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog - - RCTRequired (0.68.6) - - RCTTypeSafety (0.68.6): - - FBLazyVector (= 0.68.6) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - React-Core (= 0.68.6) - - React (0.68.6): - - React-Core (= 0.68.6) - - React-Core/DevSupport (= 0.68.6) - - React-Core/RCTWebSocket (= 0.68.6) - - React-RCTActionSheet (= 0.68.6) - - React-RCTAnimation (= 0.68.6) - - React-RCTBlob (= 0.68.6) - - React-RCTImage (= 0.68.6) - - React-RCTLinking (= 0.68.6) - - React-RCTNetwork (= 0.68.6) - - React-RCTSettings (= 0.68.6) - - React-RCTText (= 0.68.6) - - React-RCTVibration (= 0.68.6) - - React-callinvoker (0.68.6) - - React-Codegen (0.68.6): - - FBReactNativeSpec (= 0.68.6) - - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-Core (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-rncore (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Core (0.68.6): + - RCTRequired (0.68.7) + - RCTTypeSafety (0.68.7): + - FBLazyVector (= 0.68.7) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - React-Core (= 0.68.7) + - React (0.68.7): + - React-Core (= 0.68.7) + - React-Core/DevSupport (= 0.68.7) + - React-Core/RCTWebSocket (= 0.68.7) + - React-RCTActionSheet (= 0.68.7) + - React-RCTAnimation (= 0.68.7) + - React-RCTBlob (= 0.68.7) + - React-RCTImage (= 0.68.7) + - React-RCTLinking (= 0.68.7) + - React-RCTNetwork (= 0.68.7) + - React-RCTSettings (= 0.68.7) + - React-RCTText (= 0.68.7) + - React-RCTVibration (= 0.68.7) + - React-callinvoker (0.68.7) + - React-Codegen (0.68.7): + - FBReactNativeSpec (= 0.68.7) + - RCT-Folly (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-Core (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-rncore (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Core (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.6) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-Core/Default (= 0.68.7) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/CoreModulesHeaders (0.68.6): + - React-Core/CoreModulesHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/Default (0.68.6): + - React-Core/Default (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/DevSupport (0.68.6): + - React-Core/DevSupport (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.6) - - React-Core/RCTWebSocket (= 0.68.6) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-jsinspector (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-Core/Default (= 0.68.7) + - React-Core/RCTWebSocket (= 0.68.7) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-jsinspector (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTActionSheetHeaders (0.68.6): + - React-Core/RCTActionSheetHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTAnimationHeaders (0.68.6): + - React-Core/RCTAnimationHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTBlobHeaders (0.68.6): + - React-Core/RCTBlobHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTImageHeaders (0.68.6): + - React-Core/RCTImageHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTLinkingHeaders (0.68.6): + - React-Core/RCTLinkingHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTNetworkHeaders (0.68.6): + - React-Core/RCTNetworkHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTPushNotificationHeaders (0.68.6): + - React-Core/RCTPushNotificationHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTSettingsHeaders (0.68.6): + - React-Core/RCTSettingsHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTTextHeaders (0.68.6): + - React-Core/RCTTextHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTVibrationHeaders (0.68.6): + - React-Core/RCTVibrationHeaders (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-Core/RCTWebSocket (0.68.6): + - React-Core/RCTWebSocket (0.68.7): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.6) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-perflogger (= 0.68.6) + - React-Core/Default (= 0.68.7) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-perflogger (= 0.68.7) - Yoga - - React-CoreModules (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/CoreModulesHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - React-RCTImage (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-cxxreact (0.68.6): + - React-CoreModules (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/CoreModulesHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - React-RCTImage (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-cxxreact (0.68.7): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsinspector (= 0.68.6) - - React-logger (= 0.68.6) - - React-perflogger (= 0.68.6) - - React-runtimeexecutor (= 0.68.6) - - React-Fabric (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-Fabric/animations (= 0.68.6) - - React-Fabric/attributedstring (= 0.68.6) - - React-Fabric/butter (= 0.68.6) - - React-Fabric/componentregistry (= 0.68.6) - - React-Fabric/componentregistrynative (= 0.68.6) - - React-Fabric/components (= 0.68.6) - - React-Fabric/config (= 0.68.6) - - React-Fabric/core (= 0.68.6) - - React-Fabric/debug_core (= 0.68.6) - - React-Fabric/debug_renderer (= 0.68.6) - - React-Fabric/imagemanager (= 0.68.6) - - React-Fabric/leakchecker (= 0.68.6) - - React-Fabric/mounting (= 0.68.6) - - React-Fabric/runtimescheduler (= 0.68.6) - - React-Fabric/scheduler (= 0.68.6) - - React-Fabric/telemetry (= 0.68.6) - - React-Fabric/templateprocessor (= 0.68.6) - - React-Fabric/textlayoutmanager (= 0.68.6) - - React-Fabric/uimanager (= 0.68.6) - - React-Fabric/utils (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/animations (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/attributedstring (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/butter (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/componentregistry (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/componentregistrynative (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-Fabric/components/activityindicator (= 0.68.6) - - React-Fabric/components/image (= 0.68.6) - - React-Fabric/components/inputaccessory (= 0.68.6) - - React-Fabric/components/legacyviewmanagerinterop (= 0.68.6) - - React-Fabric/components/modal (= 0.68.6) - - React-Fabric/components/root (= 0.68.6) - - React-Fabric/components/safeareaview (= 0.68.6) - - React-Fabric/components/scrollview (= 0.68.6) - - React-Fabric/components/slider (= 0.68.6) - - React-Fabric/components/text (= 0.68.6) - - React-Fabric/components/textinput (= 0.68.6) - - React-Fabric/components/unimplementedview (= 0.68.6) - - React-Fabric/components/view (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/activityindicator (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/image (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/inputaccessory (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/legacyviewmanagerinterop (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/modal (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/root (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/safeareaview (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/scrollview (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/slider (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/text (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/textinput (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/unimplementedview (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/components/view (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) + - React-callinvoker (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsinspector (= 0.68.7) + - React-logger (= 0.68.7) + - React-perflogger (= 0.68.7) + - React-runtimeexecutor (= 0.68.7) + - React-Fabric (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-Fabric/animations (= 0.68.7) + - React-Fabric/attributedstring (= 0.68.7) + - React-Fabric/butter (= 0.68.7) + - React-Fabric/componentregistry (= 0.68.7) + - React-Fabric/componentregistrynative (= 0.68.7) + - React-Fabric/components (= 0.68.7) + - React-Fabric/config (= 0.68.7) + - React-Fabric/core (= 0.68.7) + - React-Fabric/debug_core (= 0.68.7) + - React-Fabric/debug_renderer (= 0.68.7) + - React-Fabric/imagemanager (= 0.68.7) + - React-Fabric/leakchecker (= 0.68.7) + - React-Fabric/mounting (= 0.68.7) + - React-Fabric/runtimescheduler (= 0.68.7) + - React-Fabric/scheduler (= 0.68.7) + - React-Fabric/telemetry (= 0.68.7) + - React-Fabric/templateprocessor (= 0.68.7) + - React-Fabric/textlayoutmanager (= 0.68.7) + - React-Fabric/uimanager (= 0.68.7) + - React-Fabric/utils (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/animations (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/attributedstring (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/butter (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/componentregistry (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/componentregistrynative (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-Fabric/components/activityindicator (= 0.68.7) + - React-Fabric/components/image (= 0.68.7) + - React-Fabric/components/inputaccessory (= 0.68.7) + - React-Fabric/components/legacyviewmanagerinterop (= 0.68.7) + - React-Fabric/components/modal (= 0.68.7) + - React-Fabric/components/root (= 0.68.7) + - React-Fabric/components/safeareaview (= 0.68.7) + - React-Fabric/components/scrollview (= 0.68.7) + - React-Fabric/components/slider (= 0.68.7) + - React-Fabric/components/text (= 0.68.7) + - React-Fabric/components/textinput (= 0.68.7) + - React-Fabric/components/unimplementedview (= 0.68.7) + - React-Fabric/components/view (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/activityindicator (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/image (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/inputaccessory (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/legacyviewmanagerinterop (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/modal (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/root (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/safeareaview (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/scrollview (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/slider (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/text (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/textinput (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/unimplementedview (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/components/view (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) - Yoga - - React-Fabric/config (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/core (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/debug_core (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/debug_renderer (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/imagemanager (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - React-RCTImage (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/leakchecker (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/mounting (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/runtimescheduler (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/scheduler (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/telemetry (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/templateprocessor (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/textlayoutmanager (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) + - React-Fabric/config (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/core (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/debug_core (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/debug_renderer (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/imagemanager (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - React-RCTImage (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/leakchecker (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/mounting (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/runtimescheduler (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/scheduler (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/telemetry (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/templateprocessor (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/textlayoutmanager (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) - React-Fabric/uimanager - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/uimanager (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-Fabric/utils (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.6) - - RCTTypeSafety (= 0.68.6) - - React-graphics (= 0.68.6) - - React-jsi (= 0.68.6) - - React-jsiexecutor (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-graphics (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.6) - - React-jsi (0.68.6): + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/uimanager (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-Fabric/utils (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - RCTRequired (= 0.68.7) + - RCTTypeSafety (= 0.68.7) + - React-graphics (= 0.68.7) + - React-jsi (= 0.68.7) + - React-jsiexecutor (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-graphics (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core/Default (= 0.68.7) + - React-jsi (0.68.7): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.68.6) - - React-jsi/Default (0.68.6): + - React-jsi/Default (= 0.68.7) + - React-jsi/Default (0.68.7): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Fabric (0.68.6): + - React-jsi/Fabric (0.68.7): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.68.6): + - React-jsiexecutor (0.68.7): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-perflogger (= 0.68.6) - - React-jsinspector (0.68.6) - - React-logger (0.68.6): + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-perflogger (= 0.68.7) + - React-jsinspector (0.68.7) + - React-logger (0.68.7): - glog - - React-perflogger (0.68.6) - - React-RCTActionSheet (0.68.6): - - React-Core/RCTActionSheetHeaders (= 0.68.6) - - React-RCTAnimation (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/RCTAnimationHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTBlob (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.6) - - React-Core/RCTBlobHeaders (= 0.68.6) - - React-Core/RCTWebSocket (= 0.68.6) - - React-jsi (= 0.68.6) - - React-RCTNetwork (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTFabric (0.68.6): - - RCT-Folly/Fabric (= 2021.06.28.00-v2) - - React-Core (= 0.68.6) - - React-Fabric (= 0.68.6) - - React-RCTImage (= 0.68.6) - - React-RCTImage (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/RCTImageHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - React-RCTNetwork (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTLinking (0.68.6): - - React-Codegen (= 0.68.6) - - React-Core/RCTLinkingHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTNetwork (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/RCTNetworkHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTPushNotification (0.68.6): - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/RCTPushNotificationHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTSettings (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.6) - - React-Codegen (= 0.68.6) - - React-Core/RCTSettingsHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTTest (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Core (= 0.68.6) - - React-CoreModules (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-RCTText (0.68.6): - - React-Core/RCTTextHeaders (= 0.68.6) - - React-RCTVibration (0.68.6): - - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.6) - - React-Core/RCTVibrationHeaders (= 0.68.6) - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) - - React-rncore (0.68.6) - - React-runtimeexecutor (0.68.6): - - React-jsi (= 0.68.6) - - ReactCommon/turbomodule/core (0.68.6): + - React-perflogger (0.68.7) + - React-RCTActionSheet (0.68.7): + - React-Core/RCTActionSheetHeaders (= 0.68.7) + - React-RCTAnimation (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/RCTAnimationHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTBlob (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.68.7) + - React-Core/RCTBlobHeaders (= 0.68.7) + - React-Core/RCTWebSocket (= 0.68.7) + - React-jsi (= 0.68.7) + - React-RCTNetwork (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTFabric (0.68.7): + - RCT-Folly/Fabric (= 2021.06.28.00-v2) + - React-Core (= 0.68.7) + - React-Fabric (= 0.68.7) + - React-RCTImage (= 0.68.7) + - React-RCTImage (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/RCTImageHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - React-RCTNetwork (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTLinking (0.68.7): + - React-Codegen (= 0.68.7) + - React-Core/RCTLinkingHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTNetwork (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/RCTNetworkHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTPushNotification (0.68.7): + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/RCTPushNotificationHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTSettings (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - RCTTypeSafety (= 0.68.7) + - React-Codegen (= 0.68.7) + - React-Core/RCTSettingsHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTTest (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Core (= 0.68.7) + - React-CoreModules (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-RCTText (0.68.7): + - React-Core/RCTTextHeaders (= 0.68.7) + - React-RCTVibration (0.68.7): + - RCT-Folly (= 2021.06.28.00-v2) + - React-Codegen (= 0.68.7) + - React-Core/RCTVibrationHeaders (= 0.68.7) + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) + - React-rncore (0.68.7) + - React-runtimeexecutor (0.68.7): + - React-jsi (= 0.68.7) + - ReactCommon/turbomodule/core (0.68.7): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.6) - - React-Core (= 0.68.6) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-logger (= 0.68.6) - - React-perflogger (= 0.68.6) - - ReactCommon/turbomodule/samples (0.68.6): + - React-callinvoker (= 0.68.7) + - React-Core (= 0.68.7) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-logger (= 0.68.7) + - React-perflogger (= 0.68.7) + - ReactCommon/turbomodule/samples (0.68.7): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.6) - - React-Core (= 0.68.6) - - React-cxxreact (= 0.68.6) - - React-jsi (= 0.68.6) - - React-logger (= 0.68.6) - - React-perflogger (= 0.68.6) - - ReactCommon/turbomodule/core (= 0.68.6) + - React-callinvoker (= 0.68.7) + - React-Core (= 0.68.7) + - React-cxxreact (= 0.68.7) + - React-jsi (= 0.68.7) + - React-logger (= 0.68.7) + - React-perflogger (= 0.68.7) + - ReactCommon/turbomodule/core (= 0.68.7) - ScreenshotManager (0.0.1): - RCT-Folly (= 2021.06.28.00-v2) - React-Core @@ -883,8 +883,8 @@ SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 74b042924fe14da854ac4e87cefc417f583b22b1 - FBReactNativeSpec: 6703cb46edb5a2f777a634e6497946e853657aec + FBLazyVector: 63b89dc85804d5817261f56dc4cfb43a9b6d57f5 + FBReactNativeSpec: 25c592de48a23731f089fdea9f62d14d94721936 Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c Flipper-DoubleConversion: 3d3d04a078d4f3a1b6c6916587f159dc11f232c4 @@ -899,39 +899,39 @@ SPEC CHECKSUMS: libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 - RCTRequired: 92cbd71369a2de6add25fd2403ac39838f1b694f - RCTTypeSafety: 494e8af41d7410ed0b877210859ee3984f37e6b4 - React: 59989499c0e8926a90d34a9ae0bdb2d1b5b53406 - React-callinvoker: 8187db1c71cf2c1c66e8f7328a0cf77a2b255d94 - React-Codegen: 738b54eb089c2abf44333521ff4c46b600907dbd - React-Core: fc7339b493e368ae079850a4721bdf716cf3dba2 - React-CoreModules: 2f54f6bbf2764044379332089fcbdaf79197021e - React-cxxreact: ee119270006794976e1ab271f0111a5a88b16bcf - React-Fabric: f9df43accfac37c886b555784d42153fdc8c35ed - React-graphics: eddce5260cf63d41af22b06b1e9ed3eb36ba5c18 - React-jsi: ec691b2a475d13b1fd39f697145a526eeeb6661c - React-jsiexecutor: b4ce4afc5dd9c8fdd2ac59049ccf420f288ecef7 - React-jsinspector: e396d5e56af08fce39f50571726b68a40f1e302d - React-logger: cec52b3f8fb0be0d47b2cb75dec69de60f2de3b6 - React-perflogger: 46620fc6d1c3157b60ed28434e08f7fd7f3f3353 - React-RCTActionSheet: b1f7e72a0ba760ec684df335c61f730b5179f5ff - React-RCTAnimation: d73b62d42867ab608dfb10e100d8b91106275b18 - React-RCTBlob: b5f59693721d50967c35598158e6ca01b474c7de - React-RCTFabric: 47e2f72519e70b6a3e906424cb737f84a75d298a - React-RCTImage: 37cf34d0c2fbef2e0278d42a7c5e8ea06a9fed6b - React-RCTLinking: a11dced20019cf1c2ec7fd120f18b08f2851f79e - React-RCTNetwork: ba097188e5eac42e070029e7cedd9b978940833a - React-RCTPushNotification: 395ad18eddebdd063b81b85f217224e96b9b351c - React-RCTSettings: 147073708a1c1bde521cf3af045a675682772726 - React-RCTTest: f1faf872d6fe4f16538af3fa7901afcb319b7e3d - React-RCTText: 23f76ebfb2717d181476432e5ecf1c6c4a104c5e - React-RCTVibration: be5f18ffc644f96f904e0e673ab639ca5d673ee8 - React-rncore: 203f189cc762c8a8ccc587d3f1239db3b0deeecb - React-runtimeexecutor: d5498cfb7059bf8397b6416db4777843f3f4c1e7 - ReactCommon: 1974dab5108c79b40199f12a4833d2499b9f6303 + RCTRequired: 530916cd48c5f7cf1fc16966ad5ea01638ca4799 + RCTTypeSafety: 5fb4cb3080efd582e5563c3e9a0e459fc51396c5 + React: 097b19fbc7aecb3bd23de54b462d2051d7ca8a38 + React-callinvoker: 4f118545cf884f0d8fce5bcd6e1847147ea9cc05 + React-Codegen: 2c371dc7aae8190893a5a51e8d3bd4c44ecec579 + React-Core: 0b464d0bec18dde90fa819c4be14dbcbdbf3077f + React-CoreModules: 9bb7d5d5530d474cf8514e2dc8274af82a0bcf2f + React-cxxreact: 027e192b8008ba5c200163ab6ded55d134c839d5 + React-Fabric: ccc089184ae026786c8700e31624af5f3bb446b7 + React-graphics: b63b4415bf9791b32845efb14c94d625c970694d + React-jsi: 9019a0a0b42e9eac6c1e8c251a8dffe65055a2f1 + React-jsiexecutor: 7c0bd030a84f2ec446fb104b7735af2f5ed11eea + React-jsinspector: cab4d37ebde480f84c79ac89568abbf76b916c3e + React-logger: b75b80500ea80457b2cf169427d66de986cdcb29 + React-perflogger: 44436b315d757100a53dfb1ab6b77c58cb646d7d + React-RCTActionSheet: 1888a229684762c40cc96c7ff4716f809655dc09 + React-RCTAnimation: f05da175751867521d14b02ab4d3994a7b96f131 + React-RCTBlob: 792b966e48d599383d7a0753f75e8f2ff71be1ce + React-RCTFabric: 51229f5cfd38ac69399c8b46431230804ddd119a + React-RCTImage: 065cf66546f625295efd36bce3a1806a9b93399c + React-RCTLinking: 8246290c072bd2d1f336792038d7ec4b91f9847a + React-RCTNetwork: 6b2331c74684fae61b1ef38f4510fe5da3de3f3a + React-RCTPushNotification: e3ba41509b78493a24b3cf72248ccd5398680fc3 + React-RCTSettings: 2898e15b249b085f8b8c7401cfab71983a2d40da + React-RCTTest: 88ccb4b14eb573e525c57046cc37beb8a6817a9b + React-RCTText: bd1da1cd805e0765e3ba9089a9fd807d4860a901 + React-RCTVibration: 2a4bf853281d4981ab471509102300d3c9e6c693 + React-rncore: 2f170b85a36080735268ee9ce3cdc6677320089e + React-runtimeexecutor: 18932e685b4893be88d1efc18f5f8ca1c9cd39d8 + ReactCommon: 29bb6fad3242e30e9d049bc9d592736fa3da9e50 ScreenshotManager: 8a08e488cb533b83ebe069ad6109d9c1df9cea79 SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: 7929b92b1828675c1bebeb114dae8cb8fa7ef6a3 + Yoga: 0bc4b37c3b8a345336ff601e2cf7d9704bab7e93 YogaKit: f782866e155069a2cca2517aafea43200b01fd5a PODFILE CHECKSUM: 064c91fbb8ac895e453a791ebaaae5cfe9c8557d diff --git a/template/Gemfile.lock b/template/Gemfile.lock index 341240a23bf4ad..0910298628b659 100644 --- a/template/Gemfile.lock +++ b/template/Gemfile.lock @@ -3,28 +3,27 @@ GEM specs: CFPropertyList (3.0.6) rexml - activesupport (6.1.7.2) + activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.1) + addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) claide (1.1.0) - cocoapods (1.11.3) + cocoapods (1.12.1) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) + cocoapods-core (= 1.12.1) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-downloader (>= 1.6.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) @@ -32,10 +31,10 @@ GEM gh_inspector (~> 1.0) molinillo (~> 0.8.0) nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) + ruby-macho (>= 2.3.0, < 3.0) xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) + cocoapods-core (1.12.1) + activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) @@ -54,7 +53,7 @@ GEM netrc (~> 0.11) cocoapods-try (1.2.0) colored2 (3.1.2) - concurrent-ruby (1.2.0) + concurrent-ruby (1.2.2) escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) @@ -63,10 +62,10 @@ GEM fuzzy_match (2.0.4) gh_inspector (1.1.3) httpclient (2.8.3) - i18n (1.12.0) + i18n (1.13.0) concurrent-ruby (~> 1.0) json (2.6.3) - minitest (5.17.0) + minitest (5.18.0) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) @@ -85,7 +84,6 @@ GEM colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (~> 3.2.4) - zeitwerk (2.6.6) PLATFORMS ruby diff --git a/template/package.json b/template/package.json index 91957e70f25f60..942bbc4d3fc5a7 100644 --- a/template/package.json +++ b/template/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "react": "17.0.2", - "react-native": "0.68.6" + "react-native": "0.68.7" }, "devDependencies": { "@babel/core": "^7.12.9", From d90a0450a3bb008122ed3bb035e7e5e8f8bb7393 Mon Sep 17 00:00:00 2001 From: elliscwc Date: Wed, 2 Jun 2021 11:39:07 +0800 Subject: [PATCH 13/17] feat: iOS textinput highlight and return function --- Libraries/Text/RCTTextAttributes.m | 11 +++++++---- Libraries/Text/TextInput/Multiline/RCTUITextView.h | 2 ++ .../TextInput/RCTBackedTextInputDelegateAdapter.m | 5 +++++ .../Text/TextInput/RCTBackedTextInputViewProtocol.h | 2 ++ Libraries/Text/TextInput/RCTBaseTextInputView.h | 2 ++ .../Text/TextInput/RCTBaseTextInputViewManager.m | 2 ++ 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Libraries/Text/RCTTextAttributes.m b/Libraries/Text/RCTTextAttributes.m index 01131cfb20e2fb..058b1ec74787dd 100644 --- a/Libraries/Text/RCTTextAttributes.m +++ b/Libraries/Text/RCTTextAttributes.m @@ -135,10 +135,6 @@ - (NSParagraphStyle *)effectiveParagraphStyle attributes[NSForegroundColorAttributeName] = effectiveForegroundColor; } - if (_backgroundColor || !isnan(_opacity)) { - attributes[NSBackgroundColorAttributeName] = self.effectiveBackgroundColor; - } - // Kerning if (!isnan(_letterSpacing)) { attributes[NSKernAttributeName] = @(_letterSpacing); @@ -169,6 +165,13 @@ - (NSParagraphStyle *)effectiveParagraphStyle attributes[NSUnderlineColorAttributeName] = _textDecorationColor ?: effectiveForegroundColor; } + // @Taskadev1 Turn background color into underline highlight + if (_backgroundColor || !isnan(_opacity)) { + isTextDecorationEnabled = YES; + attributes[NSUnderlineColorAttributeName] = self.effectiveBackgroundColor; + attributes[NSUnderlineStyleAttributeName] = @(NSUnderlineStyleThick + NSUnderlineStyleThick); + } + // Shadow if (!isnan(_textShadowRadius)) { NSShadow *shadow = [NSShadow new]; diff --git a/Libraries/Text/TextInput/Multiline/RCTUITextView.h b/Libraries/Text/TextInput/Multiline/RCTUITextView.h index 5ccb6b6d7d3fc6..3b38820c261b29 100644 --- a/Libraries/Text/TextInput/Multiline/RCTUITextView.h +++ b/Libraries/Text/TextInput/Multiline/RCTUITextView.h @@ -34,6 +34,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) UITextFieldViewMode clearButtonMode; @property (nonatomic, assign) BOOL caretHidden; +//@Taskadev1 Editor input prop declaration +@property (nonatomic, assign) BOOL editorInput; @property (nonatomic, strong, nullable) NSString *inputAccessoryViewID; diff --git a/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m b/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m index c6c254ce5dbea6..4ca4d959e5f53c 100644 --- a/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m +++ b/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m @@ -222,6 +222,11 @@ - (BOOL)textView:(__unused UITextView *)textView shouldChangeTextInRange:(NSRang if (newText == nil) { return NO; } + + //@Taskadev1 Prevent enter for editor input + if (_backedTextInputView.editorInput && [text isEqualToString:@"\n"]) { + return NO; + } if ([newText isEqualToString:text]) { _textDidChangeIsComing = YES; diff --git a/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h b/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h index c235907d796a15..52a6cfafc3ed02 100644 --- a/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h +++ b/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h @@ -27,6 +27,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) BOOL contextMenuHidden; @property (nonatomic, assign, getter=isEditable) BOOL editable; @property (nonatomic, assign) BOOL caretHidden; +//@Taskadev1 Editor input declaration +@property (nonatomic, assign) BOOL editorInput; @property (nonatomic, assign) BOOL enablesReturnKeyAutomatically; @property (nonatomic, assign) UITextFieldViewMode clearButtonMode; @property (nonatomic, getter=isScrollEnabled) BOOL scrollEnabled; diff --git a/Libraries/Text/TextInput/RCTBaseTextInputView.h b/Libraries/Text/TextInput/RCTBaseTextInputView.h index 5c6c5cfcfa4b5c..881a5514f68465 100644 --- a/Libraries/Text/TextInput/RCTBaseTextInputView.h +++ b/Libraries/Text/TextInput/RCTBaseTextInputView.h @@ -46,6 +46,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, assign) BOOL selectTextOnFocus; @property (nonatomic, assign) BOOL clearTextOnFocus; @property (nonatomic, assign) BOOL secureTextEntry; +//@Taskadev1 Editor input prop declaration +@property (nonatomic, assign) BOOL editorInput; @property (nonatomic, copy) RCTTextSelection *selection; @property (nonatomic, strong, nullable) NSNumber *maxLength; @property (nonatomic, copy, nullable) NSAttributedString *attributedText; diff --git a/Libraries/Text/TextInput/RCTBaseTextInputViewManager.m b/Libraries/Text/TextInput/RCTBaseTextInputViewManager.m index b1ecf854330bbe..ac20f434d21a83 100644 --- a/Libraries/Text/TextInput/RCTBaseTextInputViewManager.m +++ b/Libraries/Text/TextInput/RCTBaseTextInputViewManager.m @@ -48,6 +48,8 @@ @implementation RCTBaseTextInputViewManager RCT_REMAP_VIEW_PROPERTY(clearButtonMode, backedTextInputView.clearButtonMode, UITextFieldViewMode) RCT_REMAP_VIEW_PROPERTY(scrollEnabled, backedTextInputView.scrollEnabled, BOOL) RCT_REMAP_VIEW_PROPERTY(secureTextEntry, backedTextInputView.secureTextEntry, BOOL) +//@Taskadev1 Editor input map property +RCT_REMAP_VIEW_PROPERTY(editorInput, backedTextInputView.editorInput, BOOL) RCT_EXPORT_VIEW_PROPERTY(autoFocus, BOOL) RCT_EXPORT_VIEW_PROPERTY(blurOnSubmit, BOOL) RCT_EXPORT_VIEW_PROPERTY(clearTextOnFocus, BOOL) From 22e071728258f5ac880eae674f5d1b15f4a9c6e8 Mon Sep 17 00:00:00 2001 From: elliscwc <29953232+elliscwc@users.noreply.github.com> Date: Wed, 16 Jun 2021 09:49:23 +0800 Subject: [PATCH 14/17] feat: Android changes --- .../views/text/ReactBaseTextShadowNode.java | 8 ++++--- .../react/views/text/TextLayoutManager.java | 3 --- .../react/views/text/UnderlineStyleSpan.java | 24 +++++++++++++++++++ .../react/views/textinput/ReactEditText.java | 9 ++++++- .../textinput/ReactTextInputManager.java | 21 +++++++++++++++- 5 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/views/text/UnderlineStyleSpan.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java index cdffdb37c71e0b..f25fd98467792c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java @@ -174,9 +174,11 @@ private static void buildSpannedFromShadowNode( new SetSpanOperation(start, end, new ReactForegroundColorSpan(textShadowNode.mColor))); } if (textShadowNode.mIsBackgroundColorSet) { - ops.add( - new SetSpanOperation( - start, end, new ReactBackgroundColorSpan(textShadowNode.mBackgroundColor))); + // @Taskadev1 Draw underline highlight + ops.add(new SetSpanOperation( + start, + end, + new UnderlineStyleSpan(textShadowNode.mBackgroundColor))); } float effectiveLetterSpacing = textAttributes.getEffectiveLetterSpacing(); if (!Float.isNaN(effectiveLetterSpacing) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index ecf50f5df77990..fdc90151d4a019 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -136,9 +136,6 @@ private static void buildSpannableFromFragment( start, end, new ReactForegroundColorSpan(textAttributes.mColor))); } if (textAttributes.mIsBackgroundColorSet) { - ops.add( - new SetSpanOperation( - start, end, new ReactBackgroundColorSpan(textAttributes.mBackgroundColor))); } if (!Float.isNaN(textAttributes.getLetterSpacing())) { ops.add( diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/UnderlineStyleSpan.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/UnderlineStyleSpan.java new file mode 100644 index 00000000000000..bb3de2006e1562 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/UnderlineStyleSpan.java @@ -0,0 +1,24 @@ +package com.facebook.react.views.text; + +import android.text.TextPaint; +import android.text.style.CharacterStyle; +import java.lang.reflect.Method; + +// @Taskadev1 Color underline highlight span +public class UnderlineStyleSpan extends CharacterStyle implements ReactSpan { + private final int mColor; + + public UnderlineStyleSpan(final int color) { + mColor = color; + } + + @Override + public void updateDrawState(TextPaint textPaint) { + try { + final Method method = TextPaint.class.getMethod("setUnderlineText", Integer.TYPE, Float.TYPE); + method.invoke(textPaint, mColor, 8.0f); + } catch (final Exception e) { + textPaint.setUnderlineText(true); + } + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index 9b38c072c6486c..0e1ea6ee844545 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -124,7 +124,9 @@ public class ReactEditText extends AppCompatEditText private final @Nullable FabricViewStateManager mFabricViewStateManager = new FabricViewStateManager(); protected boolean mDisableTextDiffing = false; - + + // @Taskadev1 Editor input prop declaration + protected boolean mIsEditorInput = false; protected boolean mIsSettingTextFromState = false; private static final KeyListener sKeyListener = QwertyKeyListener.getInstanceForFullKeyboard(); @@ -392,6 +394,11 @@ public void setBlurOnSubmit(@Nullable Boolean blurOnSubmit) { public void setOnKeyPress(boolean onKeyPress) { mOnKeyPress = onKeyPress; } + + // @Taskadev1 Set editor input prop + public void setIsEditorInput(boolean isEditorInput) { + mIsEditorInput = isEditorInput; + } public boolean getBlurOnSubmit() { if (mBlurOnSubmit == null) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 03a53ac77475b6..fac97a9e127911 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -476,6 +476,11 @@ public void setOnKeyPress(final ReactEditText view, boolean onKeyPress) { view.setOnKeyPress(onKeyPress); } + @ReactProp(name = "editorInput", defaultBoolean = false) + public void setEditorInput(final ReactEditText view, boolean isEditorInput) { + view.setIsEditorInput(isEditorInput); + } + // Sets the letter spacing as an absolute point size. // This extra handling, on top of what ReactBaseTextShadowNode already does, is required for the // correct display of spacing in placeholder (hint) text. @@ -1024,6 +1029,19 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { return; } + // @Taskadev1 Prevent newline from being created + if (mEditText.mIsEditorInput) { + int mIndex = mEditText.getText().toString().lastIndexOf("\n"); + if(mIndex != -1) { + if (mEditText.getText().length() > 0) { + mEditText.setText(mEditText.getText().delete(mIndex , mIndex + 1)); + } + mEditText.setSelection(mEditText.getText().length()); + mEventDispatcher.dispatchEvent(new ReactTextInputKeyPressEvent(mEditText.getId(), "Enter")); + return; + } + } + if (mEditText.getFabricViewStateManager().hasStateWrapper()) { // Fabric: communicate to C++ layer that text has changed // We need to call `incrementAndGetEventCounter` here explicitly because this @@ -1059,7 +1077,8 @@ public WritableMap getStateUpdate() { } @Override - public void afterTextChanged(Editable s) {} + public void afterTextChanged(Editable s) { + } } @Override From 21893913c806425b8a901a55d5912c354d3f5513 Mon Sep 17 00:00:00 2001 From: elliscwc <29953232+elliscwc@users.noreply.github.com> Date: Fri, 11 Mar 2022 11:29:40 +0800 Subject: [PATCH 15/17] feat: Gapless underline text --- Libraries/Text/RCTTextAttributes.m | 4 +-- Libraries/Text/Text/RCTTextShadowView.m | 46 ++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/Libraries/Text/RCTTextAttributes.m b/Libraries/Text/RCTTextAttributes.m index 058b1ec74787dd..c7c974aa9a83bd 100644 --- a/Libraries/Text/RCTTextAttributes.m +++ b/Libraries/Text/RCTTextAttributes.m @@ -165,11 +165,11 @@ - (NSParagraphStyle *)effectiveParagraphStyle attributes[NSUnderlineColorAttributeName] = _textDecorationColor ?: effectiveForegroundColor; } - // @Taskadev1 Turn background color into underline highlight + // @Taskadev1 Turn background highlight into underline highlight if (_backgroundColor || !isnan(_opacity)) { isTextDecorationEnabled = YES; attributes[NSUnderlineColorAttributeName] = self.effectiveBackgroundColor; - attributes[NSUnderlineStyleAttributeName] = @(NSUnderlineStyleThick + NSUnderlineStyleThick); + attributes[NSUnderlineStyleAttributeName] = @(NSUnderlineStyleThick + NSUnderlineStyleSingle); } // Shadow diff --git a/Libraries/Text/Text/RCTTextShadowView.m b/Libraries/Text/Text/RCTTextShadowView.m index 5e39196cefd10b..ad913e0fcf429b 100644 --- a/Libraries/Text/Text/RCTTextShadowView.m +++ b/Libraries/Text/Text/RCTTextShadowView.m @@ -15,6 +15,50 @@ #import "NSTextStorage+FontScaling.h" #import +// @Taskadev1 A custom layout manager to support gapless underlined text +@interface CustomLayoutManager : NSLayoutManager { +} + - (void)drawUnderlineForRect:(CGRect)rect; + - (void)drawUnderlineForGlyphRange:(NSRange)glyphRange + underlineType:(NSUnderlineStyle)underlineVal + baselineOffset:(CGFloat)baselineOffset + lineFragmentRect:(CGRect)lineRect + lineFragmentGlyphRange:(NSRange)lineGlyphRange + containerOrigin:(CGPoint)containerOrigin; +@end + +@implementation CustomLayoutManager + +- (void)drawUnderlineForRect:(CGRect)rect +{ + UIBezierPath *path = [UIBezierPath new]; + path.lineWidth = 3.5; + [path moveToPoint: CGPointMake(CGRectGetMinX(rect), CGRectGetMaxY(rect))]; + [path addLineToPoint: CGPointMake(CGRectGetMaxX(rect), CGRectGetMaxY(rect))]; + [path stroke]; +} + +- (void)drawUnderlineForGlyphRange:(NSRange)glyphRange + underlineType:(NSUnderlineStyle)underlineVal + baselineOffset:(CGFloat)baselineOffset + lineFragmentRect:(CGRect)lineRect + lineFragmentGlyphRange:(NSRange)lineGlyphRange + containerOrigin:(CGPoint)containerOrigin +{ + NSTextContainer *textContainer = [self textContainerForGlyphAtIndex:glyphRange.location effectiveRange: nil]; + CGRect boundingRect = [self boundingRectForGlyphRange:glyphRange inTextContainer:textContainer]; + CGRect offsetRect = CGRectOffset(boundingRect, containerOrigin.x, containerOrigin.y ); + UIColor *color = [self.textStorage attribute:NSUnderlineColorAttributeName atIndex:glyphRange.location effectiveRange: nil]; + + if (color) { + [color setStroke]; + } + + [self drawUnderlineForRect:offsetRect]; +} + +@end + @implementation RCTTextShadowView { __weak RCTBridge *_bridge; @@ -232,7 +276,7 @@ - (NSTextStorage *)textStorageAndLayoutManagerThatFitsSize:(CGSize)size _maximumNumberOfLines > 0 ? _lineBreakMode : NSLineBreakByClipping; textContainer.maximumNumberOfLines = _maximumNumberOfLines; - NSLayoutManager *layoutManager = [NSLayoutManager new]; + CustomLayoutManager *layoutManager = [CustomLayoutManager new]; layoutManager.usesFontLeading = NO; [layoutManager addTextContainer:textContainer]; From 9e5dae35b6872664d6a94c068f3f2376b4196901 Mon Sep 17 00:00:00 2001 From: elliscwc Date: Thu, 30 Mar 2023 14:15:12 +0800 Subject: [PATCH 16/17] fix: Move to afterTextChanged --- .../textinput/ReactTextInputManager.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index fac97a9e127911..80a4e0d2fb0b9b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -1029,19 +1029,6 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { return; } - // @Taskadev1 Prevent newline from being created - if (mEditText.mIsEditorInput) { - int mIndex = mEditText.getText().toString().lastIndexOf("\n"); - if(mIndex != -1) { - if (mEditText.getText().length() > 0) { - mEditText.setText(mEditText.getText().delete(mIndex , mIndex + 1)); - } - mEditText.setSelection(mEditText.getText().length()); - mEventDispatcher.dispatchEvent(new ReactTextInputKeyPressEvent(mEditText.getId(), "Enter")); - return; - } - } - if (mEditText.getFabricViewStateManager().hasStateWrapper()) { // Fabric: communicate to C++ layer that text has changed // We need to call `incrementAndGetEventCounter` here explicitly because this @@ -1078,6 +1065,16 @@ public WritableMap getStateUpdate() { @Override public void afterTextChanged(Editable s) { + // @Taskadev1 Prevent newline from being created + if (mEditText.mIsEditorInput) { + for(int i = s.length()-1; i >= 0; i--) { + if(s.charAt(i) == '\n'){ + s.delete(i, i + 1); + mEventDispatcher.dispatchEvent(new ReactTextInputKeyPressEvent(mEditText.getId(), "Enter")); + return; + } + } + } } } From a945bf69b3567a71e9c06d748e15112bc2658128 Mon Sep 17 00:00:00 2001 From: Amos Date: Tue, 4 Apr 2023 15:52:08 +0800 Subject: [PATCH 17/17] fix(xcode): backport Xcode 14.3 fix to 68 --- packages/rn-tester/Podfile | 10 +++++----- scripts/react_native_pods.rb | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/rn-tester/Podfile b/packages/rn-tester/Podfile index 041804c4a88d59..03164d0c7216ae 100644 --- a/packages/rn-tester/Podfile +++ b/packages/rn-tester/Podfile @@ -26,11 +26,6 @@ def pods(options = {}) prefix_path = "../.." - if ENV['USE_CODEGEN_DISCOVERY'] == '1' - # Custom fabric component is only supported when using codegen discovery. - pod 'MyNativeView', :path => "NativeComponentExample" - end - use_react_native!( path: prefix_path, fabric_enabled: fabric_enabled, @@ -38,6 +33,11 @@ def pods(options = {}) app_path: "#{Dir.pwd}", config_file_dir: "#{Dir.pwd}/node_modules", ) + + if ENV['USE_CODEGEN_DISCOVERY'] == '1' + # Custom fabric component is only supported when using codegen discovery. + pod 'MyNativeView', :path => "NativeComponentExample" + end pod 'ReactCommon/turbomodule/samples', :path => "#{prefix_path}/ReactCommon" # Additional Pods which aren't included in the default Podfile diff --git a/scripts/react_native_pods.rb b/scripts/react_native_pods.rb index f2ceeda5348d7d..587286c87fffde 100644 --- a/scripts/react_native_pods.rb +++ b/scripts/react_native_pods.rb @@ -14,6 +14,13 @@ DEFAULT_OTHER_CPLUSPLUSFLAGS = '$(inherited)' NEW_ARCH_OTHER_CPLUSPLUSFLAGS = '$(inherited) -DRCT_NEW_ARCH_ENABLED=1 -DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1' +# This function returns the min iOS version supported by React Native +# By using this function, you won't have to manually change your Podfile +# when we change the minimum version supported by the framework. +def min_ios_version_supported + return '12.0' +end + def use_react_native! (options={}) # The prefix to react-native prefix = options[:path] ||= "../node_modules/react-native" @@ -363,7 +370,7 @@ def get_react_codegen_spec(options={}) 'source' => { :git => '' }, 'header_mappings_dir' => './', 'platforms' => { - 'ios' => '11.0', + 'ios' => min_ios_version_supported, }, 'source_files' => "**/*.{h,mm,cpp}", 'pod_target_xcconfig' => { "HEADER_SEARCH_PATHS" =>