react-native 0.82.0-nightly-20250726-01eaa6db9 → 0.82.0-nightly-20250728-869a976a5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/Libraries/Components/View/View.js +81 -167
  2. package/Libraries/Core/ReactNativeVersion.js +1 -1
  3. package/React/Base/RCTVersion.m +1 -1
  4. package/ReactAndroid/gradle.properties +1 -1
  5. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  6. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  7. package/ReactCommon/react/renderer/components/text/{ParagraphProps.cpp → BaseParagraphProps.cpp} +6 -94
  8. package/ReactCommon/react/renderer/components/text/BaseParagraphProps.h +62 -0
  9. package/ReactCommon/react/renderer/components/text/ParagraphProps.h +2 -49
  10. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/HostPlatformParagraphProps.cpp +198 -0
  11. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/HostPlatformParagraphProps.h +59 -0
  12. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.cpp +1 -1
  13. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/conversions.h +52 -0
  14. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/primitives.h +20 -0
  15. package/ReactCommon/react/renderer/components/text/platform/cxx/react/renderer/components/text/HostPlatformParagraphProps.h +14 -0
  16. package/flow/prettier.js.flow +14 -0
  17. package/package.json +8 -8
  18. package/sdks/hermesc/osx-bin/hermes +0 -0
  19. package/sdks/hermesc/osx-bin/hermesc +0 -0
  20. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  21. package/src/private/featureflags/ReactNativeFeatureFlags.js +1 -7
  22. /package/ReactCommon/react/renderer/components/text/{conversions.h → stateConversions.h} +0 -0
@@ -10,7 +10,6 @@
10
10
 
11
11
  import type {ViewProps} from './ViewPropTypes';
12
12
 
13
- import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
14
13
  import TextAncestorContext from '../../Text/TextAncestorContext';
15
14
  import ViewNativeComponent from './ViewNativeComponent';
16
15
  import * as React from 'react';
@@ -29,182 +28,97 @@ component View(
29
28
  ) {
30
29
  const hasTextAncestor = use(TextAncestorContext);
31
30
 
32
- let actualView;
33
- if (ReactNativeFeatureFlags.reduceDefaultPropsInView()) {
34
- const {
35
- accessibilityState,
36
- accessibilityValue,
37
- 'aria-busy': ariaBusy,
38
- 'aria-checked': ariaChecked,
39
- 'aria-disabled': ariaDisabled,
40
- 'aria-expanded': ariaExpanded,
41
- 'aria-hidden': ariaHidden,
42
- 'aria-label': ariaLabel,
43
- 'aria-labelledby': ariaLabelledBy,
44
- 'aria-live': ariaLive,
45
- 'aria-selected': ariaSelected,
46
- 'aria-valuemax': ariaValueMax,
47
- 'aria-valuemin': ariaValueMin,
48
- 'aria-valuenow': ariaValueNow,
49
- 'aria-valuetext': ariaValueText,
50
- id,
51
- tabIndex,
52
- ...otherProps
53
- } = props;
54
-
55
- // Since we destructured props, we can now treat it as mutable
56
- const processedProps = otherProps as {...ViewProps};
57
-
58
- const parsedAriaLabelledBy = ariaLabelledBy?.split(/\s*,\s*/g);
59
- if (parsedAriaLabelledBy !== undefined) {
60
- processedProps.accessibilityLabelledBy = parsedAriaLabelledBy;
61
- }
31
+ const {
32
+ accessibilityState,
33
+ accessibilityValue,
34
+ 'aria-busy': ariaBusy,
35
+ 'aria-checked': ariaChecked,
36
+ 'aria-disabled': ariaDisabled,
37
+ 'aria-expanded': ariaExpanded,
38
+ 'aria-hidden': ariaHidden,
39
+ 'aria-label': ariaLabel,
40
+ 'aria-labelledby': ariaLabelledBy,
41
+ 'aria-live': ariaLive,
42
+ 'aria-selected': ariaSelected,
43
+ 'aria-valuemax': ariaValueMax,
44
+ 'aria-valuemin': ariaValueMin,
45
+ 'aria-valuenow': ariaValueNow,
46
+ 'aria-valuetext': ariaValueText,
47
+ id,
48
+ tabIndex,
49
+ ...otherProps
50
+ } = props;
51
+
52
+ // Since we destructured props, we can now treat it as mutable
53
+ const processedProps = otherProps as {...ViewProps};
54
+
55
+ const parsedAriaLabelledBy = ariaLabelledBy?.split(/\s*,\s*/g);
56
+ if (parsedAriaLabelledBy !== undefined) {
57
+ processedProps.accessibilityLabelledBy = parsedAriaLabelledBy;
58
+ }
62
59
 
63
- if (ariaLabel !== undefined) {
64
- processedProps.accessibilityLabel = ariaLabel;
65
- }
60
+ if (ariaLabel !== undefined) {
61
+ processedProps.accessibilityLabel = ariaLabel;
62
+ }
66
63
 
67
- if (ariaLive !== undefined) {
68
- processedProps.accessibilityLiveRegion =
69
- ariaLive === 'off' ? 'none' : ariaLive;
70
- }
64
+ if (ariaLive !== undefined) {
65
+ processedProps.accessibilityLiveRegion =
66
+ ariaLive === 'off' ? 'none' : ariaLive;
67
+ }
71
68
 
72
- if (ariaHidden !== undefined) {
73
- processedProps.accessibilityElementsHidden = ariaHidden;
74
- if (ariaHidden === true) {
75
- processedProps.importantForAccessibility = 'no-hide-descendants';
76
- }
69
+ if (ariaHidden !== undefined) {
70
+ processedProps.accessibilityElementsHidden = ariaHidden;
71
+ if (ariaHidden === true) {
72
+ processedProps.importantForAccessibility = 'no-hide-descendants';
77
73
  }
74
+ }
78
75
 
79
- if (id !== undefined) {
80
- processedProps.nativeID = id;
81
- }
76
+ if (id !== undefined) {
77
+ processedProps.nativeID = id;
78
+ }
82
79
 
83
- if (tabIndex !== undefined) {
84
- processedProps.focusable = !tabIndex;
85
- }
80
+ if (tabIndex !== undefined) {
81
+ processedProps.focusable = !tabIndex;
82
+ }
86
83
 
87
- if (
88
- accessibilityState != null ||
89
- ariaBusy != null ||
90
- ariaChecked != null ||
91
- ariaDisabled != null ||
92
- ariaExpanded != null ||
93
- ariaSelected != null
94
- ) {
95
- processedProps.accessibilityState = {
96
- busy: ariaBusy ?? accessibilityState?.busy,
97
- checked: ariaChecked ?? accessibilityState?.checked,
98
- disabled: ariaDisabled ?? accessibilityState?.disabled,
99
- expanded: ariaExpanded ?? accessibilityState?.expanded,
100
- selected: ariaSelected ?? accessibilityState?.selected,
101
- };
102
- }
84
+ if (
85
+ accessibilityState != null ||
86
+ ariaBusy != null ||
87
+ ariaChecked != null ||
88
+ ariaDisabled != null ||
89
+ ariaExpanded != null ||
90
+ ariaSelected != null
91
+ ) {
92
+ processedProps.accessibilityState = {
93
+ busy: ariaBusy ?? accessibilityState?.busy,
94
+ checked: ariaChecked ?? accessibilityState?.checked,
95
+ disabled: ariaDisabled ?? accessibilityState?.disabled,
96
+ expanded: ariaExpanded ?? accessibilityState?.expanded,
97
+ selected: ariaSelected ?? accessibilityState?.selected,
98
+ };
99
+ }
103
100
 
104
- if (
105
- accessibilityValue != null ||
106
- ariaValueMax != null ||
107
- ariaValueMin != null ||
108
- ariaValueNow != null ||
109
- ariaValueText != null
110
- ) {
111
- processedProps.accessibilityValue = {
112
- max: ariaValueMax ?? accessibilityValue?.max,
113
- min: ariaValueMin ?? accessibilityValue?.min,
114
- now: ariaValueNow ?? accessibilityValue?.now,
115
- text: ariaValueText ?? accessibilityValue?.text,
116
- };
117
- }
101
+ if (
102
+ accessibilityValue != null ||
103
+ ariaValueMax != null ||
104
+ ariaValueMin != null ||
105
+ ariaValueNow != null ||
106
+ ariaValueText != null
107
+ ) {
108
+ processedProps.accessibilityValue = {
109
+ max: ariaValueMax ?? accessibilityValue?.max,
110
+ min: ariaValueMin ?? accessibilityValue?.min,
111
+ now: ariaValueNow ?? accessibilityValue?.now,
112
+ text: ariaValueText ?? accessibilityValue?.text,
113
+ };
114
+ }
118
115
 
119
- actualView =
120
- ref == null ? (
121
- <ViewNativeComponent {...processedProps} />
122
- ) : (
123
- <ViewNativeComponent {...processedProps} ref={ref} />
124
- );
125
- } else {
126
- const {
127
- accessibilityElementsHidden,
128
- accessibilityLabel,
129
- accessibilityLabelledBy,
130
- accessibilityLiveRegion,
131
- accessibilityState,
132
- accessibilityValue,
133
- 'aria-busy': ariaBusy,
134
- 'aria-checked': ariaChecked,
135
- 'aria-disabled': ariaDisabled,
136
- 'aria-expanded': ariaExpanded,
137
- 'aria-hidden': ariaHidden,
138
- 'aria-label': ariaLabel,
139
- 'aria-labelledby': ariaLabelledBy,
140
- 'aria-live': ariaLive,
141
- 'aria-selected': ariaSelected,
142
- 'aria-valuemax': ariaValueMax,
143
- 'aria-valuemin': ariaValueMin,
144
- 'aria-valuenow': ariaValueNow,
145
- 'aria-valuetext': ariaValueText,
146
- focusable,
147
- id,
148
- importantForAccessibility,
149
- nativeID,
150
- tabIndex,
151
- ...otherProps
152
- } = props;
153
- const _accessibilityLabelledBy =
154
- ariaLabelledBy?.split(/\s*,\s*/g) ?? accessibilityLabelledBy;
155
-
156
- const _accessibilityState =
157
- accessibilityState != null ||
158
- ariaBusy != null ||
159
- ariaChecked != null ||
160
- ariaDisabled != null ||
161
- ariaExpanded != null ||
162
- ariaSelected != null
163
- ? {
164
- busy: ariaBusy ?? accessibilityState?.busy,
165
- checked: ariaChecked ?? accessibilityState?.checked,
166
- disabled: ariaDisabled ?? accessibilityState?.disabled,
167
- expanded: ariaExpanded ?? accessibilityState?.expanded,
168
- selected: ariaSelected ?? accessibilityState?.selected,
169
- }
170
- : undefined;
171
-
172
- const _accessibilityValue =
173
- accessibilityValue != null ||
174
- ariaValueMax != null ||
175
- ariaValueMin != null ||
176
- ariaValueNow != null ||
177
- ariaValueText != null
178
- ? {
179
- max: ariaValueMax ?? accessibilityValue?.max,
180
- min: ariaValueMin ?? accessibilityValue?.min,
181
- now: ariaValueNow ?? accessibilityValue?.now,
182
- text: ariaValueText ?? accessibilityValue?.text,
183
- }
184
- : undefined;
185
-
186
- actualView = (
187
- <ViewNativeComponent
188
- {...otherProps}
189
- accessibilityLiveRegion={
190
- ariaLive === 'off' ? 'none' : ariaLive ?? accessibilityLiveRegion
191
- }
192
- accessibilityLabel={ariaLabel ?? accessibilityLabel}
193
- focusable={tabIndex !== undefined ? !tabIndex : focusable}
194
- accessibilityState={_accessibilityState}
195
- accessibilityElementsHidden={ariaHidden ?? accessibilityElementsHidden}
196
- accessibilityLabelledBy={_accessibilityLabelledBy}
197
- accessibilityValue={_accessibilityValue}
198
- importantForAccessibility={
199
- ariaHidden === true
200
- ? 'no-hide-descendants'
201
- : importantForAccessibility
202
- }
203
- nativeID={id ?? nativeID}
204
- ref={ref}
205
- />
116
+ const actualView =
117
+ ref == null ? (
118
+ <ViewNativeComponent {...processedProps} />
119
+ ) : (
120
+ <ViewNativeComponent {...processedProps} ref={ref} />
206
121
  );
207
- }
208
122
 
209
123
  if (hasTextAncestor) {
210
124
  return (
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 82;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'nightly-20250726-01eaa6db9';
32
+ static prerelease: string | null = 'nightly-20250728-869a976a5';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(82),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"nightly-20250726-01eaa6db9",
27
+ RCTVersionPrerelease: @"nightly-20250728-869a976a5",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.82.0-nightly-20250726-01eaa6db9
1
+ VERSION_NAME=0.82.0-nightly-20250728-869a976a5
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
 
4
4
  android.useAndroidX=true
@@ -15,6 +15,6 @@ public object ReactNativeVersion {
15
15
  "major" to 0,
16
16
  "minor" to 82,
17
17
  "patch" to 0,
18
- "prerelease" to "nightly-20250726-01eaa6db9"
18
+ "prerelease" to "nightly-20250728-869a976a5"
19
19
  )
20
20
  }
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 82;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "nightly-20250726-01eaa6db9";
25
+ std::string_view Prerelease = "nightly-20250728-869a976a5";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- #include "ParagraphProps.h"
8
+ #include "BaseParagraphProps.h"
9
9
 
10
10
  #include <react/featureflags/ReactNativeFeatureFlags.h>
11
11
  #include <react/renderer/attributedstring/conversions.h>
@@ -17,9 +17,9 @@
17
17
 
18
18
  namespace facebook::react {
19
19
 
20
- ParagraphProps::ParagraphProps(
20
+ BaseParagraphProps::BaseParagraphProps(
21
21
  const PropsParserContext& context,
22
- const ParagraphProps& sourceProps,
22
+ const BaseParagraphProps& sourceProps,
23
23
  const RawProps& rawProps)
24
24
  : ViewProps(context, sourceProps, rawProps),
25
25
  BaseTextProps(context, sourceProps, rawProps),
@@ -57,7 +57,7 @@ ParagraphProps::ParagraphProps(
57
57
  textAttributes.backgroundColor = {};
58
58
  };
59
59
 
60
- void ParagraphProps::setProp(
60
+ void BaseParagraphProps::setProp(
61
61
  const PropsParserContext& context,
62
62
  RawPropsPropNameHash hash,
63
63
  const char* propName,
@@ -68,7 +68,7 @@ void ParagraphProps::setProp(
68
68
  ViewProps::setProp(context, hash, propName, value);
69
69
  BaseTextProps::setProp(context, hash, propName, value);
70
70
 
71
- static auto defaults = ParagraphProps{};
71
+ static auto defaults = BaseParagraphProps{};
72
72
 
73
73
  // ParagraphAttributes has its own switch statement - to keep all
74
74
  // of these fields together, and because there are some collisions between
@@ -150,99 +150,11 @@ void ParagraphProps::setProp(
150
150
  #pragma mark - DebugStringConvertible
151
151
 
152
152
  #if RN_DEBUG_STRING_CONVERTIBLE
153
- SharedDebugStringConvertibleList ParagraphProps::getDebugProps() const {
153
+ SharedDebugStringConvertibleList BaseParagraphProps::getDebugProps() const {
154
154
  return ViewProps::getDebugProps() + BaseTextProps::getDebugProps() +
155
155
  paragraphAttributes.getDebugProps() +
156
156
  SharedDebugStringConvertibleList{
157
157
  debugStringConvertibleItem("selectable", isSelectable)};
158
158
  }
159
- #endif
160
-
161
- #ifdef RN_SERIALIZABLE_STATE
162
-
163
- ComponentName ParagraphProps::getDiffPropsImplementationTarget() const {
164
- return "Paragraph";
165
- }
166
-
167
- folly::dynamic ParagraphProps::getDiffProps(const Props* prevProps) const {
168
- static const auto defaultProps = ParagraphProps();
169
-
170
- const ParagraphProps* oldProps = prevProps == nullptr
171
- ? &defaultProps
172
- : static_cast<const ParagraphProps*>(prevProps);
173
-
174
- folly::dynamic result = ViewProps::getDiffProps(oldProps);
175
-
176
- BaseTextProps::appendTextAttributesProps(result, oldProps);
177
-
178
- if (paragraphAttributes.maximumNumberOfLines !=
179
- oldProps->paragraphAttributes.maximumNumberOfLines) {
180
- result["numberOfLines"] = paragraphAttributes.maximumNumberOfLines;
181
- }
182
-
183
- if (paragraphAttributes.ellipsizeMode !=
184
- oldProps->paragraphAttributes.ellipsizeMode) {
185
- result["ellipsizeMode"] = toString(paragraphAttributes.ellipsizeMode);
186
- }
187
-
188
- if (paragraphAttributes.textBreakStrategy !=
189
- oldProps->paragraphAttributes.textBreakStrategy) {
190
- result["textBreakStrategy"] =
191
- toString(paragraphAttributes.textBreakStrategy);
192
- }
193
-
194
- if (paragraphAttributes.adjustsFontSizeToFit !=
195
- oldProps->paragraphAttributes.adjustsFontSizeToFit) {
196
- result["adjustsFontSizeToFit"] = paragraphAttributes.adjustsFontSizeToFit;
197
- }
198
-
199
- if (!floatEquality(
200
- paragraphAttributes.minimumFontScale,
201
- oldProps->paragraphAttributes.minimumFontScale)) {
202
- result["minimumFontScale"] = paragraphAttributes.minimumFontScale;
203
- }
204
-
205
- if (!floatEquality(
206
- paragraphAttributes.minimumFontSize,
207
- oldProps->paragraphAttributes.minimumFontSize)) {
208
- result["minimumFontSize"] = paragraphAttributes.minimumFontSize;
209
- }
210
-
211
- if (!floatEquality(
212
- paragraphAttributes.maximumFontSize,
213
- oldProps->paragraphAttributes.maximumFontSize)) {
214
- result["maximumFontSize"] = paragraphAttributes.maximumFontSize;
215
- }
216
-
217
- if (paragraphAttributes.includeFontPadding !=
218
- oldProps->paragraphAttributes.includeFontPadding) {
219
- result["includeFontPadding"] = paragraphAttributes.includeFontPadding;
220
- }
221
-
222
- if (paragraphAttributes.android_hyphenationFrequency !=
223
- oldProps->paragraphAttributes.android_hyphenationFrequency) {
224
- result["android_hyphenationFrequency"] =
225
- toString(paragraphAttributes.android_hyphenationFrequency);
226
- }
227
-
228
- if (paragraphAttributes.textAlignVertical !=
229
- oldProps->paragraphAttributes.textAlignVertical) {
230
- result["textAlignVertical"] =
231
- paragraphAttributes.textAlignVertical.has_value()
232
- ? toString(paragraphAttributes.textAlignVertical.value())
233
- : nullptr;
234
- }
235
-
236
- if (isSelectable != oldProps->isSelectable) {
237
- result["selectable"] = isSelectable;
238
- }
239
-
240
- if (onTextLayout != oldProps->onTextLayout) {
241
- result["onTextLayout"] = onTextLayout;
242
- }
243
-
244
- return result;
245
- }
246
-
247
159
  #endif
248
160
  } // namespace facebook::react
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <limits>
11
+ #include <memory>
12
+
13
+ #include <react/renderer/attributedstring/ParagraphAttributes.h>
14
+ #include <react/renderer/components/text/BaseTextProps.h>
15
+ #include <react/renderer/components/view/ViewProps.h>
16
+ #include <react/renderer/core/Props.h>
17
+ #include <react/renderer/core/PropsParserContext.h>
18
+
19
+ namespace facebook::react {
20
+
21
+ /*
22
+ * Props of <Paragraph> component.
23
+ * Most of the props are directly stored in composed `ParagraphAttributes`
24
+ * object.
25
+ */
26
+ class BaseParagraphProps : public ViewProps, public BaseTextProps {
27
+ public:
28
+ BaseParagraphProps() = default;
29
+ BaseParagraphProps(
30
+ const PropsParserContext& context,
31
+ const BaseParagraphProps& sourceProps,
32
+ const RawProps& rawProps);
33
+
34
+ void setProp(
35
+ const PropsParserContext& context,
36
+ RawPropsPropNameHash hash,
37
+ const char* propName,
38
+ const RawValue& value);
39
+
40
+ #pragma mark - Props
41
+
42
+ /*
43
+ * Contains all prop values that affect visual representation of the
44
+ * paragraph.
45
+ */
46
+ ParagraphAttributes paragraphAttributes{};
47
+
48
+ /*
49
+ * Defines can the text be selected (and copied) or not.
50
+ */
51
+ bool isSelectable{};
52
+
53
+ bool onTextLayout{};
54
+
55
+ #pragma mark - DebugStringConvertible
56
+
57
+ #if RN_DEBUG_STRING_CONVERTIBLE
58
+ SharedDebugStringConvertibleList getDebugProps() const override;
59
+ #endif
60
+ };
61
+
62
+ } // namespace facebook::react
@@ -7,14 +7,7 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <limits>
11
- #include <memory>
12
-
13
- #include <react/renderer/attributedstring/ParagraphAttributes.h>
14
- #include <react/renderer/components/text/BaseTextProps.h>
15
- #include <react/renderer/components/view/ViewProps.h>
16
- #include <react/renderer/core/Props.h>
17
- #include <react/renderer/core/PropsParserContext.h>
10
+ #include <react/renderer/components/text/HostPlatformParagraphProps.h>
18
11
 
19
12
  namespace facebook::react {
20
13
 
@@ -23,45 +16,5 @@ namespace facebook::react {
23
16
  * Most of the props are directly stored in composed `ParagraphAttributes`
24
17
  * object.
25
18
  */
26
- class ParagraphProps : public ViewProps, public BaseTextProps {
27
- public:
28
- ParagraphProps() = default;
29
- ParagraphProps(
30
- const PropsParserContext& context,
31
- const ParagraphProps& sourceProps,
32
- const RawProps& rawProps);
33
-
34
- void setProp(
35
- const PropsParserContext& context,
36
- RawPropsPropNameHash hash,
37
- const char* propName,
38
- const RawValue& value);
39
-
40
- #pragma mark - Props
41
-
42
- /*
43
- * Contains all prop values that affect visual representation of the
44
- * paragraph.
45
- */
46
- ParagraphAttributes paragraphAttributes{};
47
-
48
- /*
49
- * Defines can the text be selected (and copied) or not.
50
- */
51
- bool isSelectable{};
52
-
53
- bool onTextLayout{};
54
-
55
- #pragma mark - DebugStringConvertible
56
-
57
- #if RN_DEBUG_STRING_CONVERTIBLE
58
- SharedDebugStringConvertibleList getDebugProps() const override;
59
- #endif
60
-
61
- #ifdef RN_SERIALIZABLE_STATE
62
- ComponentName getDiffPropsImplementationTarget() const override;
63
- folly::dynamic getDiffProps(const Props* prevProps) const override;
64
- #endif
65
- };
66
-
19
+ using ParagraphProps = HostPlatformParagraphProps;
67
20
  } // namespace facebook::react
@@ -0,0 +1,198 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #include "HostPlatformParagraphProps.h"
9
+
10
+ #include <react/featureflags/ReactNativeFeatureFlags.h>
11
+ #include <react/renderer/attributedstring/conversions.h>
12
+ #include <react/renderer/attributedstring/primitives.h>
13
+ #include <react/renderer/components/text/conversions.h>
14
+ #include <react/renderer/core/graphicsConversions.h>
15
+ #include <react/renderer/core/propsConversions.h>
16
+ #include <react/renderer/debug/debugStringConvertibleUtils.h>
17
+
18
+ #include <glog/logging.h>
19
+
20
+ namespace facebook::react {
21
+
22
+ HostPlatformParagraphProps::HostPlatformParagraphProps(
23
+ const PropsParserContext& context,
24
+ const HostPlatformParagraphProps& sourceProps,
25
+ const RawProps& rawProps)
26
+ : BaseParagraphProps(context, sourceProps, rawProps),
27
+ disabled(
28
+ ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
29
+ ? sourceProps.disabled
30
+ : convertRawProp(
31
+ context,
32
+ rawProps,
33
+ "disabled",
34
+ sourceProps.disabled,
35
+ false)),
36
+ selectionColor(
37
+ ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
38
+ ? sourceProps.selectionColor
39
+ : convertRawProp(
40
+ context,
41
+ rawProps,
42
+ "selectionColor",
43
+ sourceProps.selectionColor,
44
+ {})),
45
+ dataDetectorType(
46
+ ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
47
+ ? sourceProps.dataDetectorType
48
+ : convertRawProp(
49
+ context,
50
+ rawProps,
51
+ "dataDetectorType",
52
+ sourceProps.dataDetectorType,
53
+ {}))
54
+
55
+ {};
56
+
57
+ void HostPlatformParagraphProps::setProp(
58
+ const PropsParserContext& context,
59
+ RawPropsPropNameHash hash,
60
+ const char* propName,
61
+ const RawValue& value) {
62
+ // All Props structs setProp methods must always, unconditionally,
63
+ // call all super::setProp methods, since multiple structs may
64
+ // reuse the same values.
65
+ BaseParagraphProps::setProp(context, hash, propName, value);
66
+
67
+ static auto defaults = HostPlatformParagraphProps{};
68
+
69
+ switch (hash) {
70
+ RAW_SET_PROP_SWITCH_CASE_BASIC(disabled);
71
+ RAW_SET_PROP_SWITCH_CASE_BASIC(selectionColor);
72
+ RAW_SET_PROP_SWITCH_CASE_BASIC(dataDetectorType);
73
+ }
74
+ }
75
+
76
+ #pragma mark - DebugStringConvertible
77
+
78
+ #if RN_DEBUG_STRING_CONVERTIBLE
79
+ SharedDebugStringConvertibleList HostPlatformParagraphProps::getDebugProps()
80
+ const {
81
+ return BaseParagraphProps::getDebugProps() +
82
+ SharedDebugStringConvertibleList{
83
+ debugStringConvertibleItem("disabled", disabled),
84
+ debugStringConvertibleItem("selectionColor", selectionColor),
85
+ debugStringConvertibleItem("dataDetectorType", dataDetectorType)};
86
+ }
87
+ #endif
88
+
89
+ #ifdef RN_SERIALIZABLE_STATE
90
+
91
+ ComponentName HostPlatformParagraphProps::getDiffPropsImplementationTarget()
92
+ const {
93
+ return "Paragraph";
94
+ }
95
+
96
+ folly::dynamic HostPlatformParagraphProps::getDiffProps(
97
+ const Props* prevProps) const {
98
+ static const auto defaultProps = HostPlatformParagraphProps();
99
+
100
+ const HostPlatformParagraphProps* oldProps = prevProps == nullptr
101
+ ? &defaultProps
102
+ : static_cast<const HostPlatformParagraphProps*>(prevProps);
103
+
104
+ folly::dynamic result = ViewProps::getDiffProps(oldProps);
105
+
106
+ BaseTextProps::appendTextAttributesProps(result, oldProps);
107
+
108
+ if (paragraphAttributes.maximumNumberOfLines !=
109
+ oldProps->paragraphAttributes.maximumNumberOfLines) {
110
+ result["numberOfLines"] = paragraphAttributes.maximumNumberOfLines;
111
+ }
112
+
113
+ if (paragraphAttributes.ellipsizeMode !=
114
+ oldProps->paragraphAttributes.ellipsizeMode) {
115
+ result["ellipsizeMode"] = toString(paragraphAttributes.ellipsizeMode);
116
+ }
117
+
118
+ if (paragraphAttributes.textBreakStrategy !=
119
+ oldProps->paragraphAttributes.textBreakStrategy) {
120
+ result["textBreakStrategy"] =
121
+ toString(paragraphAttributes.textBreakStrategy);
122
+ }
123
+
124
+ if (paragraphAttributes.adjustsFontSizeToFit !=
125
+ oldProps->paragraphAttributes.adjustsFontSizeToFit) {
126
+ result["adjustsFontSizeToFit"] = paragraphAttributes.adjustsFontSizeToFit;
127
+ }
128
+
129
+ if (!floatEquality(
130
+ paragraphAttributes.minimumFontScale,
131
+ oldProps->paragraphAttributes.minimumFontScale)) {
132
+ result["minimumFontScale"] = paragraphAttributes.minimumFontScale;
133
+ }
134
+
135
+ if (!floatEquality(
136
+ paragraphAttributes.minimumFontSize,
137
+ oldProps->paragraphAttributes.minimumFontSize)) {
138
+ result["minimumFontSize"] = paragraphAttributes.minimumFontSize;
139
+ }
140
+
141
+ if (!floatEquality(
142
+ paragraphAttributes.maximumFontSize,
143
+ oldProps->paragraphAttributes.maximumFontSize)) {
144
+ result["maximumFontSize"] = paragraphAttributes.maximumFontSize;
145
+ }
146
+
147
+ if (paragraphAttributes.includeFontPadding !=
148
+ oldProps->paragraphAttributes.includeFontPadding) {
149
+ result["includeFontPadding"] = paragraphAttributes.includeFontPadding;
150
+ }
151
+
152
+ if (paragraphAttributes.android_hyphenationFrequency !=
153
+ oldProps->paragraphAttributes.android_hyphenationFrequency) {
154
+ result["android_hyphenationFrequency"] =
155
+ toString(paragraphAttributes.android_hyphenationFrequency);
156
+ }
157
+
158
+ if (paragraphAttributes.textAlignVertical !=
159
+ oldProps->paragraphAttributes.textAlignVertical) {
160
+ result["textAlignVertical"] =
161
+ paragraphAttributes.textAlignVertical.has_value()
162
+ ? toString(paragraphAttributes.textAlignVertical.value())
163
+ : nullptr;
164
+ }
165
+
166
+ if (isSelectable != oldProps->isSelectable) {
167
+ result["selectable"] = isSelectable;
168
+ }
169
+
170
+ if (onTextLayout != oldProps->onTextLayout) {
171
+ result["onTextLayout"] = onTextLayout;
172
+ }
173
+
174
+ if (disabled != oldProps->disabled) {
175
+ result["disabled"] = disabled;
176
+ }
177
+
178
+ if (selectionColor != oldProps->selectionColor) {
179
+ if (selectionColor.has_value()) {
180
+ result["selectionColor"] = *selectionColor.value();
181
+ } else {
182
+ result["selectionColor"] = folly::dynamic(nullptr);
183
+ }
184
+ }
185
+
186
+ if (dataDetectorType != oldProps->dataDetectorType) {
187
+ if (dataDetectorType.has_value()) {
188
+ result["dataDetectorType"] = toString(dataDetectorType.value());
189
+ } else {
190
+ result["dataDetectorType"] = folly::dynamic(nullptr);
191
+ }
192
+ }
193
+
194
+ return result;
195
+ }
196
+
197
+ #endif
198
+ } // namespace facebook::react
@@ -0,0 +1,59 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <limits>
11
+ #include <memory>
12
+ #include <optional>
13
+
14
+ #include <react/renderer/components/text/BaseParagraphProps.h>
15
+ #include <react/renderer/components/text/primitives.h>
16
+ #include <react/renderer/core/Props.h>
17
+ #include <react/renderer/core/PropsParserContext.h>
18
+ #include <react/renderer/graphics/Color.h>
19
+
20
+ namespace facebook::react {
21
+
22
+ /*
23
+ * Props of <Paragraph> component.
24
+ * Most of the props are directly stored in composed `ParagraphAttributes`
25
+ * object.
26
+ */
27
+ class HostPlatformParagraphProps : public BaseParagraphProps {
28
+ public:
29
+ HostPlatformParagraphProps() = default;
30
+ HostPlatformParagraphProps(
31
+ const PropsParserContext& context,
32
+ const HostPlatformParagraphProps& sourceProps,
33
+ const RawProps& rawProps);
34
+
35
+ void setProp(
36
+ const PropsParserContext& context,
37
+ RawPropsPropNameHash hash,
38
+ const char* propName,
39
+ const RawValue& value);
40
+
41
+ #pragma mark - Props
42
+
43
+ bool disabled{false};
44
+ std::optional<SharedColor> selectionColor{};
45
+ std::optional<DataDetectorType> dataDetectorType{};
46
+
47
+ #pragma mark - DebugStringConvertible
48
+
49
+ #if RN_DEBUG_STRING_CONVERTIBLE
50
+ SharedDebugStringConvertibleList getDebugProps() const override;
51
+ #endif
52
+
53
+ #ifdef RN_SERIALIZABLE_STATE
54
+ ComponentName getDiffPropsImplementationTarget() const override;
55
+ folly::dynamic getDiffProps(const Props* prevProps) const override;
56
+ #endif
57
+ };
58
+
59
+ } // namespace facebook::react
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "ParagraphState.h"
9
9
 
10
- #include <react/renderer/components/text/conversions.h>
10
+ #include <react/renderer/components/text/stateConversions.h>
11
11
  #include <react/renderer/core/ConcreteState.h>
12
12
  #include <react/renderer/debug/debugStringConvertibleUtils.h>
13
13
 
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <react/renderer/components/text/primitives.h>
11
+ #include <react/renderer/core/PropsParserContext.h>
12
+ #include <react/renderer/core/RawValue.h>
13
+ #include <string>
14
+
15
+ namespace facebook::react {
16
+
17
+ inline void fromRawValue(
18
+ const PropsParserContext& /*context*/,
19
+ const RawValue& value,
20
+ DataDetectorType& result) {
21
+ auto string = static_cast<std::string>(value);
22
+ if (string == "all") {
23
+ result = DataDetectorType::All;
24
+ } else if (string == "email") {
25
+ result = DataDetectorType::Email;
26
+ } else if (string == "link") {
27
+ result = DataDetectorType::Link;
28
+ } else if (string == "none") {
29
+ result = DataDetectorType::None;
30
+ } else if (string == "phoneNumber") {
31
+ result = DataDetectorType::PhoneNumber;
32
+ } else {
33
+ abort();
34
+ }
35
+ }
36
+
37
+ inline std::string toString(const DataDetectorType& value) {
38
+ switch (value) {
39
+ case DataDetectorType::All:
40
+ return "all";
41
+ case DataDetectorType::Email:
42
+ return "email";
43
+ case DataDetectorType::Link:
44
+ return "link";
45
+ case DataDetectorType::None:
46
+ return "none";
47
+ case DataDetectorType::PhoneNumber:
48
+ return "phoneNumber";
49
+ }
50
+ }
51
+
52
+ } // namespace facebook::react
@@ -0,0 +1,20 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ namespace facebook::react {
11
+
12
+ enum class DataDetectorType {
13
+ All,
14
+ Email,
15
+ Link,
16
+ None,
17
+ PhoneNumber,
18
+ };
19
+
20
+ } // namespace facebook::react
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <react/renderer/components/text/BaseParagraphProps.h>
11
+
12
+ namespace facebook::react {
13
+ using HostPlatformParagraphProps = BaseParagraphProps;
14
+ } // namespace facebook::react
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ // $FlowFixMe[unsupported-syntax]
12
+ declare module 'prettier' {
13
+ declare module.exports: $FlowFixMe;
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.82.0-nightly-20250726-01eaa6db9",
3
+ "version": "0.82.0-nightly-20250728-869a976a5",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -162,13 +162,13 @@
162
162
  },
163
163
  "dependencies": {
164
164
  "@jest/create-cache-key-function": "^29.7.0",
165
- "@react-native/assets-registry": "0.82.0-nightly-20250726-01eaa6db9",
166
- "@react-native/codegen": "0.82.0-nightly-20250726-01eaa6db9",
167
- "@react-native/community-cli-plugin": "0.82.0-nightly-20250726-01eaa6db9",
168
- "@react-native/gradle-plugin": "0.82.0-nightly-20250726-01eaa6db9",
169
- "@react-native/js-polyfills": "0.82.0-nightly-20250726-01eaa6db9",
170
- "@react-native/normalize-colors": "0.82.0-nightly-20250726-01eaa6db9",
171
- "@react-native/virtualized-lists": "0.82.0-nightly-20250726-01eaa6db9",
165
+ "@react-native/assets-registry": "0.82.0-nightly-20250728-869a976a5",
166
+ "@react-native/codegen": "0.82.0-nightly-20250728-869a976a5",
167
+ "@react-native/community-cli-plugin": "0.82.0-nightly-20250728-869a976a5",
168
+ "@react-native/gradle-plugin": "0.82.0-nightly-20250728-869a976a5",
169
+ "@react-native/js-polyfills": "0.82.0-nightly-20250728-869a976a5",
170
+ "@react-native/normalize-colors": "0.82.0-nightly-20250728-869a976a5",
171
+ "@react-native/virtualized-lists": "0.82.0-nightly-20250728-869a976a5",
172
172
  "abort-controller": "^3.0.0",
173
173
  "anser": "^1.4.9",
174
174
  "ansi-regex": "^5.0.0",
Binary file
Binary file
Binary file
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<4a82f02f08467a26ec38ec44d21484cf>>
7
+ * @generated SignedSource<<1f567a382688ca9876d17e9ce8d428ff>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -35,7 +35,6 @@ export type ReactNativeFeatureFlagsJsOnly = $ReadOnly<{
35
35
  enableAccessToHostTreeInFabric: Getter<boolean>,
36
36
  fixVirtualizeListCollapseWindowSize: Getter<boolean>,
37
37
  isLayoutAnimationEnabled: Getter<boolean>,
38
- reduceDefaultPropsInView: Getter<boolean>,
39
38
  shouldUseAnimatedObjectForTransform: Getter<boolean>,
40
39
  shouldUseRemoveClippedSubviewsAsDefaultOnIOS: Getter<boolean>,
41
40
  shouldUseSetNativePropsInFabric: Getter<boolean>,
@@ -150,11 +149,6 @@ export const fixVirtualizeListCollapseWindowSize: Getter<boolean> = createJavaSc
150
149
  */
151
150
  export const isLayoutAnimationEnabled: Getter<boolean> = createJavaScriptFlagGetter('isLayoutAnimationEnabled', true);
152
151
 
153
- /**
154
- * Optimize how default (accessibility) props are processed in View to avoid unnecessary keys.
155
- */
156
- export const reduceDefaultPropsInView: Getter<boolean> = createJavaScriptFlagGetter('reduceDefaultPropsInView', true);
157
-
158
152
  /**
159
153
  * Enables use of AnimatedObject for animating transform values.
160
154
  */