@office-iss/react-native-win32 0.76.2 → 0.77.0-preview.2

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 (249) hide show
  1. package/.eslintignore +1 -1
  2. package/.flowconfig +5 -1
  3. package/CHANGELOG.json +179 -53
  4. package/CHANGELOG.md +82 -28
  5. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  6. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  7. package/Libraries/Animated/AnimatedEvent.js +1 -1
  8. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  9. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  10. package/Libraries/Animated/animations/Animation.js +60 -25
  11. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  12. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  13. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  14. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  15. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  16. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  17. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  19. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  20. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  21. package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
  22. package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  24. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  25. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  26. package/Libraries/Animated/useAnimatedProps.js +41 -35
  27. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  28. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  29. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +82 -5
  30. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  31. package/Libraries/Components/Button.js +9 -4
  32. package/Libraries/Components/Button.win32.js +12 -4
  33. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  34. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  35. package/Libraries/Components/Pressable/Pressable.js +4 -4
  36. package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
  37. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  38. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  39. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  40. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +4 -4
  41. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  42. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  43. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  44. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  45. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  46. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  47. package/Libraries/Components/Switch/Switch.js +8 -6
  48. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  49. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  50. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  51. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  52. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  53. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  54. package/Libraries/Components/TextInput/TextInput.js +37 -13
  55. package/Libraries/Components/TextInput/TextInput.win32.js +40 -15
  56. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  57. package/Libraries/Components/TextInput/TextInputState.win32.js +13 -16
  58. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
  59. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  60. package/Libraries/Components/Touchable/Position.js +7 -2
  61. package/Libraries/Components/Touchable/Touchable.js +4 -0
  62. package/Libraries/Components/Touchable/Touchable.win32.js +4 -0
  63. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  64. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  65. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  66. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  67. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  68. package/Libraries/Components/View/View.js +4 -4
  69. package/Libraries/Components/View/View.win32.js +4 -4
  70. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  71. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  72. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  73. package/Libraries/Components/View/ViewPropTypes.win32.js +0 -3
  74. package/Libraries/Components/View/ViewWin32.js +1 -0
  75. package/Libraries/Core/ExceptionsManager.js +50 -29
  76. package/Libraries/Core/ReactNativeVersion.js +3 -3
  77. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  78. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  79. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  80. package/Libraries/Core/setUpErrorHandling.js +20 -18
  81. package/Libraries/Core/setUpReactDevTools.js +107 -8
  82. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  83. package/Libraries/Core/setUpTimers.js +21 -18
  84. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  85. package/Libraries/Image/AssetSourceResolver.js +12 -1
  86. package/Libraries/Image/Image.android.js +1 -5
  87. package/Libraries/Image/Image.d.ts +20 -29
  88. package/Libraries/Image/Image.ios.js +0 -2
  89. package/Libraries/Image/Image.win32.js +0 -2
  90. package/Libraries/Image/ImageBackground.js +2 -5
  91. package/Libraries/Image/ImageProps.js +7 -6
  92. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  93. package/Libraries/Image/ImageResizeMode.js +4 -1
  94. package/Libraries/Image/ImageSource.d.ts +0 -2
  95. package/Libraries/Image/ImageSource.js +0 -2
  96. package/Libraries/Image/ImageTypes.flow.js +11 -9
  97. package/Libraries/Image/ImageUtils.js +6 -3
  98. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  99. package/Libraries/Inspector/Inspector.js +1 -0
  100. package/Libraries/Inspector/Inspector.win32.js +2 -1
  101. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  102. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  103. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  104. package/Libraries/Interaction/InteractionManager.js +6 -1
  105. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  106. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  107. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  108. package/Libraries/Lists/FlatList.d.ts +1 -2
  109. package/Libraries/Lists/FlatList.js +2 -2
  110. package/Libraries/Lists/SectionListModern.js +7 -7
  111. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  112. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  113. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  114. package/Libraries/LogBox/LogBox.js +18 -5
  115. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  116. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  117. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  118. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  119. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +6 -1
  120. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  121. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
  122. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  123. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  124. package/Libraries/Modal/Modal.d.ts +12 -0
  125. package/Libraries/Modal/Modal.js +31 -4
  126. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  127. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  128. package/Libraries/NativeComponent/BaseViewConfig.win32.js +3 -11
  129. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  130. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  131. package/Libraries/Network/FormData.js +11 -3
  132. package/Libraries/Network/XHRInterceptor.js +63 -14
  133. package/Libraries/Network/XMLHttpRequest.js +26 -1
  134. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  135. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  136. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  137. package/Libraries/Pressability/HoverState.js +2 -0
  138. package/Libraries/Pressability/HoverState.win32.js +2 -0
  139. package/Libraries/Pressability/Pressability.js +2 -3
  140. package/Libraries/Pressability/Pressability.win32.js +2 -3
  141. package/Libraries/Pressability/usePressability.js +4 -1
  142. package/Libraries/ReactNative/AppContainer.js +1 -1
  143. package/Libraries/ReactNative/AppRegistry.js +1 -11
  144. package/Libraries/ReactNative/DisplayMode.js +1 -1
  145. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  146. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  147. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  148. package/Libraries/ReactNative/renderApplication.js +9 -8
  149. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  150. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  151. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  152. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  153. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  154. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  155. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  156. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  157. package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
  158. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  159. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  160. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  161. package/Libraries/StyleSheet/processTransform.js +3 -34
  162. package/Libraries/Text/Text.js +248 -249
  163. package/Libraries/Text/Text.win32.js +282 -295
  164. package/Libraries/Text/TextNativeComponent.js +0 -1
  165. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  166. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  167. package/Libraries/Types/CoreEventTypes.js +4 -6
  168. package/Libraries/Types/CoreEventTypes.win32.js +4 -6
  169. package/Libraries/Utilities/Appearance.js +3 -1
  170. package/Libraries/Utilities/BackHandler.android.js +6 -18
  171. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  172. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  173. package/Libraries/Utilities/BackHandler.win32.js +6 -18
  174. package/Libraries/Utilities/FocusManager.win32.js +1 -1
  175. package/Libraries/Utilities/HMRClient.js +3 -4
  176. package/Libraries/Utilities/Platform.flow.js +2 -2
  177. package/Libraries/Utilities/Platform.flow.win32.js +3 -2
  178. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  179. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  180. package/Libraries/Utilities/useMergeRefs.js +26 -7
  181. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  182. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  183. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  184. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  185. package/index.js +10 -3
  186. package/index.win32.js +10 -3
  187. package/jest/setup.js +36 -1
  188. package/overrides.json +37 -37
  189. package/package.json +20 -20
  190. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  191. package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
  192. package/src/private/animated/useAnimatedPropsMemo.js +356 -0
  193. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  194. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  195. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  196. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  197. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  198. package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
  199. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  200. package/src/private/devmenu/DevMenu.d.ts +20 -0
  201. package/src/private/devmenu/DevMenu.js +31 -0
  202. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  203. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  204. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  205. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  206. package/src/private/setup/setUpDOM.js +14 -6
  207. package/src/private/setup/setUpMutationObserver.js +5 -0
  208. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  209. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  210. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  211. package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
  212. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  213. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  214. package/src/private/specs/modules/NativeAppearance.js +4 -10
  215. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  216. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  217. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  218. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  219. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  220. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  221. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  222. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  223. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  224. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  225. package/src/private/webapis/performance/EventTiming.js +13 -8
  226. package/src/private/webapis/performance/Performance.js +66 -73
  227. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  228. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  229. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  230. package/src/private/webapis/performance/UserTiming.js +11 -7
  231. package/src/private/webapis/performance/Utilities.js +18 -0
  232. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  233. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  234. package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  235. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  236. package/types/index.d.ts +1 -1
  237. package/types/public/ReactNativeTypes.d.ts +4 -8
  238. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  239. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  240. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  241. package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
  242. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  243. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  244. package/src/private/components/useSyncOnScroll.js +0 -48
  245. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  246. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  247. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  248. package/types/experimental.d.ts +0 -59
  249. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -7,15 +7,10 @@
7
7
  * @noformat
8
8
  * @nolint
9
9
  * @flow strict
10
- * @generated SignedSource<<89361333bb6b688486e35849a9c669a6>>
10
+ * @generated SignedSource<<9cf3e28d6ca0299bc0bb5caa75b19556>>
11
11
  */
12
12
 
13
- import type {
14
- ElementRef,
15
- ElementType,
16
- MixedElement,
17
- AbstractComponent,
18
- } from 'react';
13
+ import type {ElementRef, ElementType, MixedElement} from 'react';
19
14
 
20
15
  export type MeasureOnSuccessCallback = (
21
16
  x: number,
@@ -113,38 +108,34 @@ export interface INativeMethods {
113
108
  measure(callback: MeasureOnSuccessCallback): void;
114
109
  measureInWindow(callback: MeasureInWindowOnSuccessCallback): void;
115
110
  measureLayout(
116
- relativeToNativeNode: number | ElementRef<HostComponent<mixed>>,
111
+ relativeToNativeNode: number | HostInstance,
117
112
  onSuccess: MeasureLayoutOnSuccessCallback,
118
113
  onFail?: () => void,
119
114
  ): void;
120
115
  setNativeProps(nativeProps: {...}): void;
121
116
  }
122
117
 
123
- export type NativeMethods = $ReadOnly<{|
118
+ export type NativeMethods = $ReadOnly<{
124
119
  blur(): void,
125
120
  focus(): void,
126
121
  measure(callback: MeasureOnSuccessCallback): void,
127
122
  measureInWindow(callback: MeasureInWindowOnSuccessCallback): void,
128
123
  measureLayout(
129
- relativeToNativeNode: number | ElementRef<HostComponent<mixed>>,
124
+ relativeToNativeNode: number | HostInstance,
130
125
  onSuccess: MeasureLayoutOnSuccessCallback,
131
126
  onFail?: () => void,
132
127
  ): void,
133
128
  setNativeProps(nativeProps: {...}): void,
134
- |}>;
129
+ }>;
135
130
 
136
131
  // This validates that INativeMethods and NativeMethods stay in sync using Flow!
137
132
  declare const ensureNativeMethodsAreSynced: NativeMethods;
138
133
  (ensureNativeMethodsAreSynced: INativeMethods);
139
134
 
140
- export type HostComponent<T> = AbstractComponent<T, $ReadOnly<NativeMethods>>;
141
-
142
- type SecretInternalsType = {
143
- computeComponentStackForErrorReporting(tag: number): string,
144
- // TODO (bvaughn) Decide which additional types to expose here?
145
- // And how much information to fill in for the above types.
146
- ...
147
- };
135
+ export type HostInstance = NativeMethods;
136
+ /*::
137
+ export type HostComponent<Config: {...}> = component(ref: React$RefSetter<HostInstance>, ...Config);
138
+ */
148
139
 
149
140
  type InspectorDataProps = $ReadOnly<{
150
141
  [propName: string]: string,
@@ -180,6 +171,7 @@ export type TouchedViewDataAtPoint = $ReadOnly<{
180
171
  width: number,
181
172
  height: number,
182
173
  }>,
174
+ closestPublicInstance?: PublicInstance,
183
175
  ...InspectorData,
184
176
  }>;
185
177
 
@@ -209,23 +201,22 @@ export type RenderRootOptions = {
209
201
  export type ReactNativeType = {
210
202
  findHostInstance_DEPRECATED<TElementType: ElementType>(
211
203
  componentOrHandle: ?(ElementRef<TElementType> | number),
212
- ): ?ElementRef<HostComponent<mixed>>,
204
+ ): ?HostInstance,
213
205
  findNodeHandle<TElementType: ElementType>(
214
206
  componentOrHandle: ?(ElementRef<TElementType> | number),
215
207
  ): ?number,
216
208
  isChildPublicInstance(
217
- parent: PublicInstance | HostComponent<mixed>,
218
- child: PublicInstance | HostComponent<mixed>,
209
+ // eslint-disable-next-line no-undef
210
+ parent: PublicInstance | HostComponent<empty>,
211
+ // eslint-disable-next-line no-undef
212
+ child: PublicInstance | HostComponent<empty>,
219
213
  ): boolean,
220
214
  dispatchCommand(
221
- handle: ElementRef<HostComponent<mixed>>,
215
+ handle: HostInstance,
222
216
  command: string,
223
217
  args: Array<mixed>,
224
218
  ): void,
225
- sendAccessibilityEvent(
226
- handle: ElementRef<HostComponent<mixed>>,
227
- eventType: string,
228
- ): void,
219
+ sendAccessibilityEvent(handle: HostInstance, eventType: string): void,
229
220
  render(
230
221
  element: MixedElement,
231
222
  containerTag: number,
@@ -234,8 +225,7 @@ export type ReactNativeType = {
234
225
  ): ?ElementRef<ElementType>,
235
226
  unmountComponentAtNode(containerTag: number): void,
236
227
  unmountComponentAtNodeAndRemoveContainer(containerTag: number): void,
237
- unstable_batchedUpdates: <T>(fn: (T) => void, bookkeeping: T) => void,
238
- __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: SecretInternalsType,
228
+ +unstable_batchedUpdates: <T>(fn: (T) => void, bookkeeping: T) => void,
239
229
  ...
240
230
  };
241
231
 
@@ -247,20 +237,17 @@ type PublicTextInstance = mixed;
247
237
  export type ReactFabricType = {
248
238
  findHostInstance_DEPRECATED<TElementType: ElementType>(
249
239
  componentOrHandle: ?(ElementRef<TElementType> | number),
250
- ): ?ElementRef<HostComponent<mixed>>,
240
+ ): ?HostInstance,
251
241
  findNodeHandle<TElementType: ElementType>(
252
242
  componentOrHandle: ?(ElementRef<TElementType> | number),
253
243
  ): ?number,
254
244
  dispatchCommand(
255
- handle: ElementRef<HostComponent<mixed>>,
245
+ handle: HostInstance,
256
246
  command: string,
257
247
  args: Array<mixed>,
258
248
  ): void,
259
249
  isChildPublicInstance(parent: PublicInstance, child: PublicInstance): boolean,
260
- sendAccessibilityEvent(
261
- handle: ElementRef<HostComponent<mixed>>,
262
- eventType: string,
263
- ): void,
250
+ sendAccessibilityEvent(handle: HostInstance, eventType: string): void,
264
251
  render(
265
252
  element: MixedElement,
266
253
  containerTag: number,
@@ -7,7 +7,7 @@
7
7
  * @noformat
8
8
  * @nolint
9
9
  * @flow strict-local
10
- * @generated SignedSource<<69d0cc554d77cddb1c779dfbdf569505>>
10
+ * @generated SignedSource<<83073425aa3f71ced2c8c51f25a25938>>
11
11
  */
12
12
 
13
13
  'use strict';
@@ -94,8 +94,8 @@ export function register(name: string, callback: () => ViewConfig): string {
94
94
  * This configuration will be lazy-loaded from UIManager.
95
95
  */
96
96
  export function get(name: string): ViewConfig {
97
- let viewConfig;
98
- if (!viewConfigs.has(name)) {
97
+ let viewConfig = viewConfigs.get(name);
98
+ if (viewConfig == null) {
99
99
  const callback = viewConfigCallbacks.get(name);
100
100
  if (typeof callback !== 'function') {
101
101
  invariant(
@@ -110,15 +110,14 @@ export function get(name: string): ViewConfig {
110
110
  );
111
111
  }
112
112
  viewConfig = callback();
113
+ invariant(viewConfig, 'View config not found for component `%s`', name);
114
+
113
115
  processEventTypes(viewConfig);
114
116
  viewConfigs.set(name, viewConfig);
115
117
 
116
118
  // Clear the callback after the config is set so that
117
119
  // we don't mask any errors during registration.
118
120
  viewConfigCallbacks.set(name, null);
119
- } else {
120
- viewConfig = viewConfigs.get(name);
121
121
  }
122
- invariant(viewConfig, 'View config not found for name %s', name);
123
122
  return viewConfig;
124
123
  }
@@ -7,7 +7,7 @@
7
7
  * @noformat
8
8
  * @nolint
9
9
  * @flow strict-local
10
- * @generated SignedSource<<62e766b69d440dab0a2d249f0cea38e0>>
10
+ * @generated SignedSource<<52163887de05f1cff05388145cf85b3b>>
11
11
  */
12
12
 
13
13
  'use strict';
@@ -32,4 +32,4 @@ const createReactNativeComponentClass = function (
32
32
  return register(name, callback);
33
33
  };
34
34
 
35
- module.exports = createReactNativeComponentClass;
35
+ export default createReactNativeComponentClass;
@@ -170,7 +170,13 @@ if (hairlineWidth === 0) {
170
170
  hairlineWidth = 1 / PixelRatio.get();
171
171
  }
172
172
 
173
- const absoluteFill = {
173
+ const absoluteFill: {
174
+ +bottom: 0,
175
+ +left: 0,
176
+ +position: 'absolute',
177
+ +right: 0,
178
+ +top: 0,
179
+ } = {
174
180
  position: 'absolute',
175
181
  left: 0,
176
182
  right: 0,
@@ -172,7 +172,13 @@ if (hairlineWidth === 0) {
172
172
  hairlineWidth = 1 / PixelRatio.get();
173
173
  }
174
174
 
175
- const absoluteFill = {
175
+ const absoluteFill: {
176
+ +bottom: 0,
177
+ +left: 0,
178
+ +position: 'absolute',
179
+ +right: 0,
180
+ +top: 0,
181
+ } = {
176
182
  position: 'absolute',
177
183
  left: 0,
178
184
  right: 0,
@@ -55,7 +55,8 @@ export interface FlexStyle {
55
55
  borderTopWidth?: number | undefined;
56
56
  borderWidth?: number | undefined;
57
57
  bottom?: DimensionValue | undefined;
58
- display?: 'none' | 'flex' | undefined;
58
+ boxSizing?: 'border-box' | 'content-box' | undefined;
59
+ display?: 'none' | 'flex' | 'contents' | undefined;
59
60
  end?: DimensionValue | undefined;
60
61
  flex?: number | undefined;
61
62
  flexBasis?: DimensionValue | undefined;
@@ -411,6 +412,10 @@ export interface ViewStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
411
412
  borderTopLeftRadius?: AnimatableNumericValue | string | undefined;
412
413
  borderTopRightRadius?: AnimatableNumericValue | string | undefined;
413
414
  borderTopStartRadius?: AnimatableNumericValue | string | undefined;
415
+ outlineColor?: ColorValue | undefined;
416
+ outlineOffset?: AnimatableNumericValue | undefined;
417
+ outlineStyle?: 'solid' | 'dotted' | 'dashed' | undefined;
418
+ outlineWidth?: AnimatableNumericValue | undefined;
414
419
  opacity?: AnimatableNumericValue | undefined;
415
420
  /**
416
421
  * Sets the elevation of a view, using Android's underlying
@@ -429,6 +434,12 @@ export interface ViewStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
429
434
  cursor?: CursorValue | undefined;
430
435
  boxShadow?: ReadonlyArray<BoxShadowValue> | string | undefined;
431
436
  filter?: ReadonlyArray<FilterFunction> | string | undefined;
437
+
438
+ mixBlendMode?: BlendMode | undefined;
439
+ experimental_backgroundImage?:
440
+ | ReadonlyArray<GradientValue>
441
+ | string
442
+ | undefined;
432
443
  }
433
444
 
434
445
  export type FontVariant =
@@ -557,6 +568,6 @@ export interface ImageStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
557
568
  overlayColor?: ColorValue | undefined;
558
569
  tintColor?: ColorValue | undefined;
559
570
  opacity?: AnimatableNumericValue | undefined;
560
- objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down' | undefined;
571
+ objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down' | 'none' | undefined;
561
572
  cursor?: CursorValue | undefined;
562
573
  }
@@ -11,6 +11,7 @@
11
11
  'use strict';
12
12
 
13
13
  import type AnimatedNode from '../Animated/nodes/AnimatedNode';
14
+ import type {ImageResizeMode} from './../Image/ImageResizeMode';
14
15
  import type {
15
16
  ____DangerouslyImpreciseStyle_InternalOverrides,
16
17
  ____ImageStyle_InternalOverrides,
@@ -58,7 +59,7 @@ type ____LayoutStyle_Internal = $ReadOnly<{
58
59
  * It works similarly to `display` in CSS, but only support 'flex' and 'none'.
59
60
  * 'flex' is the default.
60
61
  */
61
- display?: 'none' | 'flex',
62
+ display?: 'none' | 'flex' | 'contents',
62
63
 
63
64
  /** `width` sets the width of this component.
64
65
  *
@@ -612,6 +613,19 @@ type ____LayoutStyle_Internal = $ReadOnly<{
612
613
  */
613
614
  aspectRatio?: number | string,
614
615
 
616
+ /**
617
+ * Box sizing controls whether certain size properties apply to the node's
618
+ * content box or border box. The size properties in question include `width`,
619
+ * `height`, `minWidth`, `minHeight`, `maxWidth`, `maxHeight`, and `flexBasis`.
620
+ *
621
+ * e.g: Say a node has 10px of padding and 10px of borders on all
622
+ * sides and a defined `width` and `height` of 100px and 50px. Then the total
623
+ * size of the node (content area + padding + border) would be 100px by 50px
624
+ * under `boxSizing: border-box` and 120px by 70px under
625
+ * `boxSizing: content-box`.
626
+ */
627
+ boxSizing?: 'border-box' | 'content-box',
628
+
615
629
  /** `zIndex` controls which components display on top of others.
616
630
  * Normally, you don't use `zIndex`. Components render according to
617
631
  * their order in the document tree, so later components draw over
@@ -785,12 +799,16 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
785
799
  borderStartWidth?: AnimatableNumericValue,
786
800
  borderTopWidth?: AnimatableNumericValue,
787
801
  opacity?: AnimatableNumericValue,
802
+ outlineColor?: ____ColorValue_Internal,
803
+ outlineOffset?: AnimatableNumericValue,
804
+ outlineStyle?: 'solid' | 'dotted' | 'dashed',
805
+ outlineWidth?: AnimatableNumericValue,
788
806
  elevation?: number,
789
807
  pointerEvents?: 'auto' | 'none' | 'box-none' | 'box-only',
790
808
  cursor?: CursorValue,
791
809
  boxShadow?: $ReadOnlyArray<BoxShadowValue> | string,
792
810
  filter?: $ReadOnlyArray<FilterFunction> | string,
793
- experimental_mixBlendMode?: ____BlendMode_Internal,
811
+ mixBlendMode?: ____BlendMode_Internal,
794
812
  experimental_backgroundImage?: $ReadOnlyArray<GradientValue> | string,
795
813
  isolation?: 'auto' | 'isolate',
796
814
  }>;
@@ -924,8 +942,8 @@ export type ____TextStyle_Internal = $ReadOnly<{
924
942
 
925
943
  export type ____ImageStyle_InternalCore = $ReadOnly<{
926
944
  ...$Exact<____ViewStyle_Internal>,
927
- resizeMode?: 'contain' | 'cover' | 'stretch' | 'center' | 'repeat',
928
- objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down',
945
+ resizeMode?: ImageResizeMode,
946
+ objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down' | 'none',
929
947
  tintColor?: ____ColorValue_Internal,
930
948
  overlayColor?: string,
931
949
  }>;
@@ -937,8 +955,8 @@ export type ____ImageStyle_Internal = $ReadOnly<{
937
955
 
938
956
  export type ____DangerouslyImpreciseStyle_InternalCore = $ReadOnly<{
939
957
  ...$Exact<____TextStyle_Internal>,
940
- resizeMode?: 'contain' | 'cover' | 'stretch' | 'center' | 'repeat',
941
- objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down',
958
+ resizeMode?: ImageResizeMode,
959
+ objectFit?: 'cover' | 'contain' | 'fill' | 'scale-down' | 'none',
942
960
  tintColor?: ____ColorValue_Internal,
943
961
  overlayColor?: string,
944
962
  }>;
@@ -14,25 +14,28 @@ import type {ProcessedColorValue} from './processColor';
14
14
  import type {GradientValue} from './StyleSheetTypes';
15
15
 
16
16
  const processColor = require('./processColor').default;
17
- const DIRECTION_REGEX =
18
- /^to\s+(?:top|bottom|left|right)(?:\s+(?:top|bottom|left|right))?/;
17
+ const DIRECTION_KEYWORD_REGEX =
18
+ /^to\s+(?:top|bottom|left|right)(?:\s+(?:top|bottom|left|right))?/i;
19
19
  const ANGLE_UNIT_REGEX = /^([+-]?\d*\.?\d+)(deg|grad|rad|turn)$/i;
20
20
 
21
- const TO_BOTTOM_START_END_POINTS = {
22
- start: {x: 0.5, y: 0},
23
- end: {x: 0.5, y: 1},
24
- };
21
+ type LinearGradientDirection =
22
+ | {type: 'angle', value: number}
23
+ | {type: 'keyword', value: string};
25
24
 
26
25
  type ParsedGradientValue = {
27
26
  type: 'linearGradient',
28
- start: {x: number, y: number},
29
- end: {x: number, y: number},
27
+ direction: LinearGradientDirection,
30
28
  colorStops: $ReadOnlyArray<{
31
29
  color: ProcessedColorValue,
32
30
  position: number,
33
31
  }>,
34
32
  };
35
33
 
34
+ const DEFAULT_DIRECTION: LinearGradientDirection = {
35
+ type: 'angle',
36
+ value: 180,
37
+ };
38
+
36
39
  export default function processBackgroundImage(
37
40
  backgroundImage: ?($ReadOnlyArray<GradientValue> | string),
38
41
  ): $ReadOnlyArray<ParsedGradientValue> {
@@ -76,37 +79,43 @@ export default function processBackgroundImage(
76
79
  }
77
80
  }
78
81
 
79
- let points: {
80
- start: ParsedGradientValue['start'],
81
- end: ParsedGradientValue['end'],
82
- } | null = null;
83
-
84
- if (typeof bgImage.direction === 'undefined') {
85
- points = TO_BOTTOM_START_END_POINTS;
86
- } else if (ANGLE_UNIT_REGEX.test(bgImage.direction)) {
87
- const angle = parseAngle(bgImage.direction);
88
- if (angle != null) {
89
- points = calculateStartEndPointsFromAngle(angle);
90
- }
91
- } else if (DIRECTION_REGEX.test(bgImage.direction)) {
92
- const processedPoints = calculateStartEndPointsFromDirection(
93
- bgImage.direction,
94
- );
95
- if (processedPoints != null) {
96
- points = processedPoints;
82
+ let direction: LinearGradientDirection = DEFAULT_DIRECTION;
83
+ const bgDirection =
84
+ bgImage.direction != null ? bgImage.direction.toLowerCase() : null;
85
+
86
+ if (bgDirection != null) {
87
+ if (ANGLE_UNIT_REGEX.test(bgDirection)) {
88
+ const parsedAngle = getAngleInDegrees(bgDirection);
89
+ if (parsedAngle != null) {
90
+ direction = {
91
+ type: 'angle',
92
+ value: parsedAngle,
93
+ };
94
+ } else {
95
+ // If an angle is invalid, return an empty array and do not apply any gradient. Same as web.
96
+ return [];
97
+ }
98
+ } else if (DIRECTION_KEYWORD_REGEX.test(bgDirection)) {
99
+ const parsedDirection = getDirectionForKeyword(bgDirection);
100
+ if (parsedDirection != null) {
101
+ direction = parsedDirection;
102
+ } else {
103
+ // If a direction is invalid, return an empty array and do not apply any gradient. Same as web.
104
+ return [];
105
+ }
106
+ } else {
107
+ // If a direction is invalid, return an empty array and do not apply any gradient. Same as web.
108
+ return [];
97
109
  }
98
110
  }
99
111
 
100
112
  const fixedColorStops = getFixedColorStops(processedColorStops);
101
113
 
102
- if (points != null) {
103
- result = result.concat({
104
- type: 'linearGradient',
105
- start: points.start,
106
- end: points.end,
107
- colorStops: fixedColorStops,
108
- });
109
- }
114
+ result = result.concat({
115
+ type: 'linearGradient',
116
+ direction,
117
+ colorStops: fixedColorStops,
118
+ });
110
119
  }
111
120
  }
112
121
 
@@ -118,30 +127,39 @@ function parseCSSLinearGradient(
118
127
  ): $ReadOnlyArray<ParsedGradientValue> {
119
128
  const gradients = [];
120
129
  let match;
130
+
131
+ // matches one or more linear-gradient functions in CSS
121
132
  const linearGradientRegex = /linear-gradient\s*\(((?:\([^)]*\)|[^())])*)\)/gi;
122
133
 
123
134
  while ((match = linearGradientRegex.exec(cssString))) {
124
135
  const gradientContent = match[1];
125
136
  const parts = gradientContent.split(',');
126
- let points = TO_BOTTOM_START_END_POINTS;
137
+ let direction: LinearGradientDirection = DEFAULT_DIRECTION;
127
138
  const trimmedDirection = parts[0].trim().toLowerCase();
139
+
140
+ // matches individual color stops in a gradient function
141
+ // supports various color formats: named colors, hex colors, rgb(a), and hsl(a)
142
+ // e.g. "red 20%", "blue 50%", "rgba(0, 0, 0, 0.5) 30% 50%"
143
+ // TODO: does not support color hint syntax yet. It is WIP.
128
144
  const colorStopRegex =
129
145
  /\s*((?:(?:rgba?|hsla?)\s*\([^)]+\))|#[0-9a-fA-F]+|[a-zA-Z]+)(?:\s+(-?[0-9.]+%?)(?:\s+(-?[0-9.]+%?))?)?\s*/gi;
130
146
 
131
147
  if (ANGLE_UNIT_REGEX.test(trimmedDirection)) {
132
- const angle = parseAngle(trimmedDirection);
133
- if (angle != null) {
134
- points = calculateStartEndPointsFromAngle(angle);
148
+ const parsedAngle = getAngleInDegrees(trimmedDirection);
149
+ if (parsedAngle != null) {
150
+ direction = {
151
+ type: 'angle',
152
+ value: parsedAngle,
153
+ };
135
154
  parts.shift();
136
155
  } else {
137
156
  // If an angle is invalid, return an empty array and do not apply any gradient. Same as web.
138
157
  return [];
139
158
  }
140
- } else if (DIRECTION_REGEX.test(trimmedDirection)) {
141
- const parsedPoints =
142
- calculateStartEndPointsFromDirection(trimmedDirection);
143
- if (parsedPoints != null) {
144
- points = parsedPoints;
159
+ } else if (DIRECTION_KEYWORD_REGEX.test(trimmedDirection)) {
160
+ const parsedDirection = getDirectionForKeyword(trimmedDirection);
161
+ if (parsedDirection != null) {
162
+ direction = parsedDirection;
145
163
  parts.shift();
146
164
  } else {
147
165
  // If a direction is invalid, return an empty array and do not apply any gradient. Same as web.
@@ -198,8 +216,7 @@ function parseCSSLinearGradient(
198
216
 
199
217
  gradients.push({
200
218
  type: 'linearGradient',
201
- start: points.start,
202
- end: points.end,
219
+ direction,
203
220
  colorStops: fixedColorStops,
204
221
  });
205
222
  }
@@ -207,83 +224,43 @@ function parseCSSLinearGradient(
207
224
  return gradients;
208
225
  }
209
226
 
210
- function calculateStartEndPointsFromDirection(direction: string): ?{
211
- start: {x: number, y: number},
212
- end: {x: number, y: number},
213
- } {
227
+ function getDirectionForKeyword(direction?: string): ?LinearGradientDirection {
228
+ if (direction == null) {
229
+ return null;
230
+ }
214
231
  // Remove extra whitespace
215
- const normalizedDirection = direction.replace(/\s+/g, ' ');
232
+ const normalized = direction.replace(/\s+/g, ' ').toLowerCase();
216
233
 
217
- switch (normalizedDirection) {
234
+ switch (normalized) {
235
+ case 'to top':
236
+ return {type: 'angle', value: 0};
218
237
  case 'to right':
219
- return {
220
- start: {x: 0, y: 0.5},
221
- end: {x: 1, y: 0.5},
222
- };
223
- case 'to left':
224
- return {
225
- start: {x: 1, y: 0.5},
226
- end: {x: 0, y: 0.5},
227
- };
238
+ return {type: 'angle', value: 90};
228
239
  case 'to bottom':
229
- return TO_BOTTOM_START_END_POINTS;
230
- case 'to top':
231
- return {
232
- start: {x: 0.5, y: 1},
233
- end: {x: 0.5, y: 0},
234
- };
240
+ return {type: 'angle', value: 180};
241
+ case 'to left':
242
+ return {type: 'angle', value: 270};
243
+ case 'to top right':
244
+ case 'to right top':
245
+ return {type: 'keyword', value: 'to top right'};
235
246
  case 'to bottom right':
236
247
  case 'to right bottom':
237
- return {
238
- start: {x: 0, y: 0},
239
- end: {x: 1, y: 1},
240
- };
248
+ return {type: 'keyword', value: 'to bottom right'};
241
249
  case 'to top left':
242
250
  case 'to left top':
243
- return {
244
- start: {x: 1, y: 1},
245
- end: {x: 0, y: 0},
246
- };
251
+ return {type: 'keyword', value: 'to top left'};
247
252
  case 'to bottom left':
248
253
  case 'to left bottom':
249
- return {
250
- start: {x: 1, y: 0},
251
- end: {x: 0, y: 1},
252
- };
253
- case 'to top right':
254
- case 'to right top':
255
- return {
256
- start: {x: 0, y: 1},
257
- end: {x: 1, y: 0},
258
- };
254
+ return {type: 'keyword', value: 'to bottom left'};
259
255
  default:
260
256
  return null;
261
257
  }
262
258
  }
263
259
 
264
- function calculateStartEndPointsFromAngle(angleRadians: number): {
265
- start: {x: number, y: number},
266
- end: {x: number, y: number},
267
- } {
268
- // Normalize angle to be between 0 and 2π
269
- let angleRadiansNormalized = angleRadians % (2 * Math.PI);
270
- if (angleRadiansNormalized < 0) {
271
- angleRadiansNormalized += 2 * Math.PI;
260
+ function getAngleInDegrees(angle?: string): ?number {
261
+ if (angle == null) {
262
+ return null;
272
263
  }
273
-
274
- const endX = 0.5 + 0.5 * Math.sin(angleRadiansNormalized);
275
- const endY = 0.5 - 0.5 * Math.cos(angleRadiansNormalized);
276
-
277
- const startX = 1 - endX;
278
- const startY = 1 - endY;
279
-
280
- return {
281
- start: {x: startX, y: startY},
282
- end: {x: endX, y: endY},
283
- };
284
- }
285
-
286
- function parseAngle(angle: string): ?number {
287
264
  const match = angle.match(ANGLE_UNIT_REGEX);
288
265
  if (!match) {
289
266
  return null;
@@ -294,13 +271,13 @@ function parseAngle(angle: string): ?number {
294
271
  const numericValue = parseFloat(value);
295
272
  switch (unit) {
296
273
  case 'deg':
297
- return (numericValue * Math.PI) / 180;
274
+ return numericValue;
298
275
  case 'grad':
299
- return (numericValue * Math.PI) / 200;
276
+ return numericValue * 0.9; // 1 grad = 0.9 degrees
300
277
  case 'rad':
301
- return numericValue;
278
+ return (numericValue * 180) / Math.PI;
302
279
  case 'turn':
303
- return numericValue * 2 * Math.PI;
280
+ return numericValue * 360; // 1 turn = 360 degrees
304
281
  default:
305
282
  return null;
306
283
  }