@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.
- package/.eslintignore +1 -1
- package/.flowconfig +5 -1
- package/CHANGELOG.json +179 -53
- package/CHANGELOG.md +82 -28
- package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
- package/Libraries/Animated/animations/Animation.js +60 -25
- package/Libraries/Animated/animations/DecayAnimation.js +26 -38
- package/Libraries/Animated/animations/SpringAnimation.js +33 -39
- package/Libraries/Animated/animations/TimingAnimation.js +34 -42
- package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
- package/Libraries/Animated/createAnimatedComponent.js +60 -33
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
- package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
- package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
- package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
- package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
- package/Libraries/Animated/useAnimatedProps.js +41 -35
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +82 -5
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
- package/Libraries/Components/Button.js +9 -4
- package/Libraries/Components/Button.win32.js +12 -4
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
- package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +4 -4
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
- package/Libraries/Components/ScrollView/ScrollView.js +49 -88
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
- package/Libraries/Components/Switch/Switch.js +8 -6
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
- package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
- package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
- package/Libraries/Components/TextInput/TextInput.js +37 -13
- package/Libraries/Components/TextInput/TextInput.win32.js +40 -15
- package/Libraries/Components/TextInput/TextInputState.js +11 -13
- package/Libraries/Components/TextInput/TextInputState.win32.js +13 -16
- package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
- package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
- package/Libraries/Components/Touchable/Position.js +7 -2
- package/Libraries/Components/Touchable/Touchable.js +4 -0
- package/Libraries/Components/Touchable/Touchable.win32.js +4 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
- package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
- package/Libraries/Components/View/View.js +4 -4
- package/Libraries/Components/View/View.win32.js +4 -4
- package/Libraries/Components/View/ViewNativeComponent.js +6 -98
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/Libraries/Components/View/ViewPropTypes.js +0 -3
- package/Libraries/Components/View/ViewPropTypes.win32.js +0 -3
- package/Libraries/Components/View/ViewWin32.js +1 -0
- package/Libraries/Core/ExceptionsManager.js +50 -29
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
- package/Libraries/Core/setUpBatchedBridge.js +1 -10
- package/Libraries/Core/setUpDeveloperTools.js +1 -5
- package/Libraries/Core/setUpErrorHandling.js +20 -18
- package/Libraries/Core/setUpReactDevTools.js +107 -8
- package/Libraries/Core/setUpSegmentFetcher.js +1 -0
- package/Libraries/Core/setUpTimers.js +21 -18
- package/Libraries/Debugging/DebuggingOverlay.js +4 -5
- package/Libraries/Image/AssetSourceResolver.js +12 -1
- package/Libraries/Image/Image.android.js +1 -5
- package/Libraries/Image/Image.d.ts +20 -29
- package/Libraries/Image/Image.ios.js +0 -2
- package/Libraries/Image/Image.win32.js +0 -2
- package/Libraries/Image/ImageBackground.js +2 -5
- package/Libraries/Image/ImageProps.js +7 -6
- package/Libraries/Image/ImageResizeMode.d.ts +8 -1
- package/Libraries/Image/ImageResizeMode.js +4 -1
- package/Libraries/Image/ImageSource.d.ts +0 -2
- package/Libraries/Image/ImageSource.js +0 -2
- package/Libraries/Image/ImageTypes.flow.js +11 -9
- package/Libraries/Image/ImageUtils.js +6 -3
- package/Libraries/Image/ImageViewNativeComponent.js +5 -3
- package/Libraries/Inspector/Inspector.js +1 -0
- package/Libraries/Inspector/Inspector.win32.js +2 -1
- package/Libraries/Inspector/NetworkOverlay.js +4 -0
- package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
- package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
- package/Libraries/Interaction/InteractionManager.js +6 -1
- package/Libraries/Interaction/InteractionManagerStub.js +176 -0
- package/Libraries/Interaction/TouchHistoryMath.js +22 -19
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +1 -2
- package/Libraries/Lists/FlatList.js +2 -2
- package/Libraries/Lists/SectionListModern.js +7 -7
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +3 -3
- package/Libraries/LogBox/LogBox.js +18 -5
- package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
- package/Libraries/Modal/Modal.d.ts +12 -0
- package/Libraries/Modal/Modal.js +31 -4
- package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.win32.js +3 -11
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
- package/Libraries/Network/FormData.js +11 -3
- package/Libraries/Network/XHRInterceptor.js +63 -14
- package/Libraries/Network/XMLHttpRequest.js +26 -1
- package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/HoverState.js +2 -0
- package/Libraries/Pressability/HoverState.win32.js +2 -0
- package/Libraries/Pressability/Pressability.js +2 -3
- package/Libraries/Pressability/Pressability.win32.js +2 -3
- package/Libraries/Pressability/usePressability.js +4 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.js +1 -11
- package/Libraries/ReactNative/DisplayMode.js +1 -1
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
- package/Libraries/ReactNative/RendererImplementation.js +18 -17
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
- package/Libraries/ReactNative/renderApplication.js +9 -8
- package/Libraries/ReactNative/requireNativeComponent.js +5 -2
- package/Libraries/Renderer/shims/ReactFabric.js +3 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +3 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +7 -1
- package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
- package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
- package/Libraries/StyleSheet/processTransform.js +3 -34
- package/Libraries/Text/Text.js +248 -249
- package/Libraries/Text/Text.win32.js +282 -295
- package/Libraries/Text/TextNativeComponent.js +0 -1
- package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
- package/Libraries/Types/CoreEventTypes.d.ts +3 -10
- package/Libraries/Types/CoreEventTypes.js +4 -6
- package/Libraries/Types/CoreEventTypes.win32.js +4 -6
- package/Libraries/Utilities/Appearance.js +3 -1
- package/Libraries/Utilities/BackHandler.android.js +6 -18
- package/Libraries/Utilities/BackHandler.d.ts +0 -4
- package/Libraries/Utilities/BackHandler.ios.js +0 -7
- package/Libraries/Utilities/BackHandler.win32.js +6 -18
- package/Libraries/Utilities/FocusManager.win32.js +1 -1
- package/Libraries/Utilities/HMRClient.js +3 -4
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.win32.js +3 -2
- package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +26 -7
- package/Libraries/WebSocket/WebSocketEvent.js +4 -1
- package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
- package/Libraries/promiseRejectionTrackingOptions.js +1 -1
- package/index.js +10 -3
- package/index.win32.js +10 -3
- package/jest/setup.js +36 -1
- package/overrides.json +37 -37
- package/package.json +20 -20
- package/src/private/animated/NativeAnimatedHelper.js +18 -16
- package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
- package/src/private/animated/useAnimatedPropsMemo.js +356 -0
- package/src/private/components/HScrollViewNativeComponents.js +1 -27
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
- package/src/private/components/VScrollViewNativeComponents.js +2 -25
- package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
- package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
- package/src/private/devmenu/DevMenu.d.ts +20 -0
- package/src/private/devmenu/DevMenu.js +31 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
- package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
- package/src/private/setup/setUpDOM.js +14 -6
- package/src/private/setup/setUpMutationObserver.js +5 -0
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
- package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
- package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
- package/src/private/specs/modules/NativeAppearance.js +4 -10
- package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
- package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
- package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
- package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
- package/src/private/webapis/performance/EventTiming.js +13 -8
- package/src/private/webapis/performance/Performance.js +66 -73
- package/src/private/webapis/performance/PerformanceEntry.js +2 -5
- package/src/private/webapis/performance/PerformanceObserver.js +65 -164
- package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
- package/src/private/webapis/performance/UserTiming.js +11 -7
- package/src/private/webapis/performance/Utilities.js +18 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
- package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/types/index.d.ts +1 -1
- package/types/public/ReactNativeTypes.d.ts +4 -8
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
- package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
- package/src/private/components/useSyncOnScroll.js +0 -48
- package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
- package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
- package/types/experimental.d.ts +0 -59
- /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<<
|
|
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 |
|
|
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 |
|
|
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
|
|
141
|
-
|
|
142
|
-
type
|
|
143
|
-
|
|
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
|
-
): ?
|
|
204
|
+
): ?HostInstance,
|
|
213
205
|
findNodeHandle<TElementType: ElementType>(
|
|
214
206
|
componentOrHandle: ?(ElementRef<TElementType> | number),
|
|
215
207
|
): ?number,
|
|
216
208
|
isChildPublicInstance(
|
|
217
|
-
|
|
218
|
-
|
|
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:
|
|
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
|
-
): ?
|
|
240
|
+
): ?HostInstance,
|
|
251
241
|
findNodeHandle<TElementType: ElementType>(
|
|
252
242
|
componentOrHandle: ?(ElementRef<TElementType> | number),
|
|
253
243
|
): ?number,
|
|
254
244
|
dispatchCommand(
|
|
255
|
-
handle:
|
|
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<<
|
|
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 (
|
|
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<<
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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?:
|
|
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?:
|
|
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
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (
|
|
96
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
|
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
|
|
133
|
-
if (
|
|
134
|
-
|
|
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 (
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
|
|
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
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
227
|
+
function getDirectionForKeyword(direction?: string): ?LinearGradientDirection {
|
|
228
|
+
if (direction == null) {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
214
231
|
// Remove extra whitespace
|
|
215
|
-
const
|
|
232
|
+
const normalized = direction.replace(/\s+/g, ' ').toLowerCase();
|
|
216
233
|
|
|
217
|
-
switch (
|
|
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
|
|
230
|
-
case 'to
|
|
231
|
-
return {
|
|
232
|
-
|
|
233
|
-
|
|
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
|
|
265
|
-
|
|
266
|
-
|
|
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
|
|
274
|
+
return numericValue;
|
|
298
275
|
case 'grad':
|
|
299
|
-
return
|
|
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 *
|
|
280
|
+
return numericValue * 360; // 1 turn = 360 degrees
|
|
304
281
|
default:
|
|
305
282
|
return null;
|
|
306
283
|
}
|