react-native-tvos 0.83.6-0 → 0.83.9-0
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/Libraries/Core/ReactNativeVersion.js +1 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
- package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
- package/React/CoreModules/RCTRedBox+Internal.h +42 -0
- package/React/CoreModules/RCTRedBox.mm +30 -471
- package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
- package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
- package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
- package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
- package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
- package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
- package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
- package/React/CoreModules/RCTRedBoxController.mm +447 -0
- package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
- package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
- package/React/CoreModules/React-CoreModules.podspec +1 -0
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +24 -0
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +1 -2
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/publish.gradle +20 -46
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +19 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +31 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +34 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +7 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +43 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +10 -1
- package/ReactCommon/React-Fabric.podspec +6 -0
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/ReactCommon/react/debug/CMakeLists.txt +2 -1
- package/ReactCommon/react/debug/React-debug.podspec +7 -1
- package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
- package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
- package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
- package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
- package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +13 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +16 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +106 -52
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +8 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +13 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +28 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +4 -1
- package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
- package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
- package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +16 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +7 -1
- package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
- package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
- package/package.json +8 -8
- package/scripts/react_native_pods.rb +1 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +16 -1
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +4 -1
- package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
|
@@ -0,0 +1,125 @@
|
|
|
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
|
+
#import "RCTRedBoxHMRClient+Internal.h"
|
|
9
|
+
|
|
10
|
+
#if RCT_DEV_MENU
|
|
11
|
+
|
|
12
|
+
@implementation RCTRedBoxHMRClient {
|
|
13
|
+
NSURL *_bundleURL;
|
|
14
|
+
NSURLSessionWebSocketTask *_webSocketTask;
|
|
15
|
+
NSURLSession *_session;
|
|
16
|
+
void (^_onFileChange)(void);
|
|
17
|
+
BOOL _stopped;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
- (instancetype)initWithBundleURL:(NSURL *)bundleURL onFileChange:(void (^)(void))onFileChange
|
|
21
|
+
{
|
|
22
|
+
if (self = [super init]) {
|
|
23
|
+
_bundleURL = bundleURL;
|
|
24
|
+
_onFileChange = [onFileChange copy];
|
|
25
|
+
}
|
|
26
|
+
return self;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
- (void)start
|
|
30
|
+
{
|
|
31
|
+
if (![_bundleURL.scheme hasPrefix:@"http"]) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
NSURLComponents *components = [[NSURLComponents alloc] initWithURL:_bundleURL resolvingAgainstBaseURL:NO];
|
|
36
|
+
components.scheme = [_bundleURL.scheme isEqualToString:@"https"] ? @"wss" : @"ws";
|
|
37
|
+
components.path = @"/hot";
|
|
38
|
+
components.query = nil;
|
|
39
|
+
components.fragment = nil;
|
|
40
|
+
NSURL *wsURL = components.URL;
|
|
41
|
+
if (!wsURL) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
|
|
46
|
+
delegate:self
|
|
47
|
+
delegateQueue:nil];
|
|
48
|
+
_webSocketTask = [_session webSocketTaskWithURL:wsURL];
|
|
49
|
+
[_webSocketTask resume];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
- (void)stop
|
|
53
|
+
{
|
|
54
|
+
_stopped = YES;
|
|
55
|
+
_onFileChange = nil;
|
|
56
|
+
[_webSocketTask cancel];
|
|
57
|
+
_webSocketTask = nil;
|
|
58
|
+
[_session invalidateAndCancel];
|
|
59
|
+
_session = nil;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
- (void)URLSession:(__unused NSURLSession *)session
|
|
63
|
+
webSocketTask:(__unused NSURLSessionWebSocketTask *)webSocketTask
|
|
64
|
+
didOpenWithProtocol:(__unused NSString *)protocol
|
|
65
|
+
{
|
|
66
|
+
NSDictionary *registration = @{
|
|
67
|
+
@"type" : @"register-entrypoints",
|
|
68
|
+
@"entryPoints" : @[ _bundleURL.absoluteString ],
|
|
69
|
+
};
|
|
70
|
+
NSData *json = [NSJSONSerialization dataWithJSONObject:registration options:0 error:nil];
|
|
71
|
+
NSURLSessionWebSocketMessage *msg = [[NSURLSessionWebSocketMessage alloc]
|
|
72
|
+
initWithString:[[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding]];
|
|
73
|
+
[_webSocketTask sendMessage:msg
|
|
74
|
+
completionHandler:^(__unused NSError *error){
|
|
75
|
+
}];
|
|
76
|
+
[self _listenForNextMessage];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
- (void)_listenForNextMessage
|
|
80
|
+
{
|
|
81
|
+
if (_stopped) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
__weak __typeof(self) weakSelf = self;
|
|
85
|
+
[_webSocketTask receiveMessageWithCompletionHandler:^(NSURLSessionWebSocketMessage *message, NSError *error) {
|
|
86
|
+
if (error || !message) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
[weakSelf _handleMessage:message];
|
|
90
|
+
[weakSelf _listenForNextMessage];
|
|
91
|
+
}];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
- (void)_handleMessage:(NSURLSessionWebSocketMessage *)message
|
|
95
|
+
{
|
|
96
|
+
if (message.type != NSURLSessionWebSocketMessageTypeString || _stopped) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
NSData *data = [message.string dataUsingEncoding:NSUTF8StringEncoding];
|
|
100
|
+
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
|
|
101
|
+
if ([json[@"type"] isEqualToString:@"update-start"]) {
|
|
102
|
+
// Ignore the initial update that fires when the client first registers.
|
|
103
|
+
// Only react to subsequent file changes.
|
|
104
|
+
NSDictionary *body = json[@"body"];
|
|
105
|
+
if ([body isKindOfClass:[NSDictionary class]] && [body[@"isInitialUpdate"] boolValue]) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
109
|
+
if (self->_onFileChange) {
|
|
110
|
+
self->_onFileChange();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
- (void)URLSession:(__unused NSURLSession *)session
|
|
117
|
+
webSocketTask:(__unused NSURLSessionWebSocketTask *)task
|
|
118
|
+
didCloseWithCode:(__unused NSURLSessionWebSocketCloseCode)closeCode
|
|
119
|
+
reason:(__unused NSData *)reason
|
|
120
|
+
{
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@end
|
|
124
|
+
|
|
125
|
+
#endif
|
|
@@ -51,6 +51,7 @@ Pod::Spec.new do |s|
|
|
|
51
51
|
s.dependency "React-Core/CoreModulesHeaders", version
|
|
52
52
|
s.dependency "React-RCTImage", version
|
|
53
53
|
s.dependency "React-jsi", version
|
|
54
|
+
add_dependency(s, "React-featureflags")
|
|
54
55
|
s.dependency 'React-RCTBlob'
|
|
55
56
|
add_dependency(s, "React-debug")
|
|
56
57
|
add_dependency(s, "React-runtimeexecutor", :additional_framework_paths => ["platform/ios"])
|
|
@@ -260,6 +260,7 @@ protected:
|
|
|
260
260
|
methodMap_["enableLayoutAnimationsOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableLayoutAnimationsOnIOS};
|
|
261
261
|
methodMap_["enableMainQueueCoordinatorOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableMainQueueCoordinatorOnIOS};
|
|
262
262
|
methodMap_["enableModuleArgumentNSNullConversionIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableModuleArgumentNSNullConversionIOS};
|
|
263
|
+
methodMap_["enableMutationObserverByDefault"] = MethodMetadata {.argCount = 0, .invoker = __enableMutationObserverByDefault};
|
|
263
264
|
methodMap_["enableNativeCSSParsing"] = MethodMetadata {.argCount = 0, .invoker = __enableNativeCSSParsing};
|
|
264
265
|
methodMap_["enableNetworkEventReporting"] = MethodMetadata {.argCount = 0, .invoker = __enableNetworkEventReporting};
|
|
265
266
|
methodMap_["enablePreparedTextLayout"] = MethodMetadata {.argCount = 0, .invoker = __enablePreparedTextLayout};
|
|
@@ -290,6 +291,8 @@ protected:
|
|
|
290
291
|
methodMap_["perfMonitorV2Enabled"] = MethodMetadata {.argCount = 0, .invoker = __perfMonitorV2Enabled};
|
|
291
292
|
methodMap_["preparedTextCacheSize"] = MethodMetadata {.argCount = 0, .invoker = __preparedTextCacheSize};
|
|
292
293
|
methodMap_["preventShadowTreeCommitExhaustion"] = MethodMetadata {.argCount = 0, .invoker = __preventShadowTreeCommitExhaustion};
|
|
294
|
+
methodMap_["redBoxV2Android"] = MethodMetadata {.argCount = 0, .invoker = __redBoxV2Android};
|
|
295
|
+
methodMap_["redBoxV2IOS"] = MethodMetadata {.argCount = 0, .invoker = __redBoxV2IOS};
|
|
293
296
|
methodMap_["shouldPressibilityUseW3CPointerEventsForHover"] = MethodMetadata {.argCount = 0, .invoker = __shouldPressibilityUseW3CPointerEventsForHover};
|
|
294
297
|
methodMap_["shouldTriggerResponderTransferOnScrollAndroid"] = MethodMetadata {.argCount = 0, .invoker = __shouldTriggerResponderTransferOnScrollAndroid};
|
|
295
298
|
methodMap_["skipActivityIdentityAssertionOnHostPause"] = MethodMetadata {.argCount = 0, .invoker = __skipActivityIdentityAssertionOnHostPause};
|
|
@@ -573,6 +576,13 @@ private:
|
|
|
573
576
|
return bridging::callFromJs<bool>(rt, &T::enableModuleArgumentNSNullConversionIOS, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
|
|
574
577
|
}
|
|
575
578
|
|
|
579
|
+
static jsi::Value __enableMutationObserverByDefault(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
|
|
580
|
+
static_assert(
|
|
581
|
+
bridging::getParameterCount(&T::enableMutationObserverByDefault) == 1,
|
|
582
|
+
"Expected enableMutationObserverByDefault(...) to have 1 parameters");
|
|
583
|
+
return bridging::callFromJs<bool>(rt, &T::enableMutationObserverByDefault, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
|
|
584
|
+
}
|
|
585
|
+
|
|
576
586
|
static jsi::Value __enableNativeCSSParsing(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
|
|
577
587
|
static_assert(
|
|
578
588
|
bridging::getParameterCount(&T::enableNativeCSSParsing) == 1,
|
|
@@ -783,6 +793,20 @@ private:
|
|
|
783
793
|
return bridging::callFromJs<bool>(rt, &T::preventShadowTreeCommitExhaustion, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
|
|
784
794
|
}
|
|
785
795
|
|
|
796
|
+
static jsi::Value __redBoxV2Android(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
|
|
797
|
+
static_assert(
|
|
798
|
+
bridging::getParameterCount(&T::redBoxV2Android) == 1,
|
|
799
|
+
"Expected redBoxV2Android(...) to have 1 parameters");
|
|
800
|
+
return bridging::callFromJs<bool>(rt, &T::redBoxV2Android, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
static jsi::Value __redBoxV2IOS(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
|
|
804
|
+
static_assert(
|
|
805
|
+
bridging::getParameterCount(&T::redBoxV2IOS) == 1,
|
|
806
|
+
"Expected redBoxV2IOS(...) to have 1 parameters");
|
|
807
|
+
return bridging::callFromJs<bool>(rt, &T::redBoxV2IOS, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
|
|
808
|
+
}
|
|
809
|
+
|
|
786
810
|
static jsi::Value __shouldPressibilityUseW3CPointerEventsForHover(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
|
|
787
811
|
static_assert(
|
|
788
812
|
bridging::getParameterCount(&T::shouldPressibilityUseW3CPointerEventsForHover) == 1,
|
|
@@ -610,11 +610,10 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
610
610
|
// [self isTVFocusGuide] is false when autofocus and destinations are not used, so we cannot use that.
|
|
611
611
|
// Generally speaking, it would happen for any non-collapsable `View`.
|
|
612
612
|
} else if (context.previouslyFocusedView == self) {
|
|
613
|
-
[self disableDirectionalFocusGuides];
|
|
614
613
|
[coordinator addCoordinatedAnimations:^(void){
|
|
615
614
|
[self removeParallaxMotionEffects];
|
|
616
615
|
if (self->_eventEmitter) self->_eventEmitter->onBlur();
|
|
617
|
-
} completion:^(void){}];
|
|
616
|
+
} completion:^(void){[self disableDirectionalFocusGuides];}];
|
|
618
617
|
[self resignFirstResponder];
|
|
619
618
|
}
|
|
620
619
|
}
|
|
@@ -3,25 +3,17 @@
|
|
|
3
3
|
*
|
|
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
|
-
*
|
|
7
|
-
* This file is modified from the original Meta source to work in the
|
|
8
|
-
* `react-native-ci` project.
|
|
9
6
|
*/
|
|
10
|
-
/* groovylint-disable CompileStatic, DuplicateStringLiteral, LineLength, NestedBlockDepth, NoDef, UnusedVariable, VariableTypeRequired */
|
|
11
7
|
|
|
12
8
|
apply plugin: 'maven-publish'
|
|
13
9
|
apply plugin: 'signing'
|
|
14
10
|
|
|
15
|
-
def isSnapshot =
|
|
16
|
-
|
|
17
|
-
def
|
|
18
|
-
def signingPwd = findProperty('SIGNING_PWD')
|
|
19
|
-
def sonatypeUsername = findProperty('SONATYPE_USERNAME')
|
|
20
|
-
def sonatypePassword = findProperty('SONATYPE_PASSWORD')
|
|
11
|
+
def isSnapshot = findProperty("isSnapshot")?.toBoolean()
|
|
12
|
+
def signingKey = findProperty("SIGNING_KEY")
|
|
13
|
+
def signingPwd = findProperty("SIGNING_PWD")
|
|
21
14
|
|
|
22
15
|
def reactAndroidProjectDir = project(':packages:react-native:ReactAndroid').projectDir
|
|
23
|
-
def mavenTempLocalUrl =
|
|
24
|
-
// Rewritten when copying this to ReactAndroid/publish.gradle
|
|
16
|
+
def mavenTempLocalUrl = "file:///tmp/maven-local"
|
|
25
17
|
|
|
26
18
|
publishing {
|
|
27
19
|
publications {
|
|
@@ -29,7 +21,7 @@ publishing {
|
|
|
29
21
|
afterEvaluate {
|
|
30
22
|
// We do a multi variant release, so for Android libraries
|
|
31
23
|
// we publish `components.release`
|
|
32
|
-
if (plugins.hasPlugin(
|
|
24
|
+
if (plugins.hasPlugin("com.android.library")) {
|
|
33
25
|
from components.default
|
|
34
26
|
}
|
|
35
27
|
}
|
|
@@ -37,35 +29,35 @@ publishing {
|
|
|
37
29
|
// We populate the publishing version using the project version,
|
|
38
30
|
// appending -SNAPSHOT if on nightly or prerelase.
|
|
39
31
|
if (isSnapshot) {
|
|
40
|
-
version = this.version +
|
|
32
|
+
version = this.version + "-SNAPSHOT"
|
|
41
33
|
} else {
|
|
42
34
|
version = this.version
|
|
43
35
|
}
|
|
44
36
|
|
|
45
37
|
pom {
|
|
46
|
-
name =
|
|
47
|
-
description =
|
|
48
|
-
url =
|
|
38
|
+
name = "react-native"
|
|
39
|
+
description = "A framework for building native apps with React"
|
|
40
|
+
url = "https://github.com/facebook/react-native"
|
|
49
41
|
|
|
50
42
|
developers {
|
|
51
43
|
developer {
|
|
52
|
-
id =
|
|
53
|
-
name =
|
|
44
|
+
id = "facebook"
|
|
45
|
+
name = "Facebook"
|
|
54
46
|
}
|
|
55
47
|
}
|
|
56
48
|
|
|
57
49
|
licenses {
|
|
58
50
|
license {
|
|
59
|
-
name =
|
|
60
|
-
url =
|
|
61
|
-
distribution =
|
|
51
|
+
name = "MIT License"
|
|
52
|
+
url = "https://github.com/facebook/react-native/blob/HEAD/LICENSE"
|
|
53
|
+
distribution = "repo"
|
|
62
54
|
}
|
|
63
55
|
}
|
|
64
56
|
|
|
65
57
|
scm {
|
|
66
|
-
url =
|
|
67
|
-
connection =
|
|
68
|
-
developerConnection =
|
|
58
|
+
url = "https://github.com/facebook/react-native.git"
|
|
59
|
+
connection = "scm:git:https://github.com/facebook/react-native.git"
|
|
60
|
+
developerConnection = "scm:git:git@github.com:facebook/react-native.git"
|
|
69
61
|
}
|
|
70
62
|
}
|
|
71
63
|
}
|
|
@@ -73,36 +65,18 @@ publishing {
|
|
|
73
65
|
|
|
74
66
|
repositories {
|
|
75
67
|
maven {
|
|
76
|
-
name =
|
|
68
|
+
name = "mavenTempLocal"
|
|
77
69
|
url = mavenTempLocalUrl
|
|
78
70
|
}
|
|
79
|
-
maven {
|
|
80
|
-
name = 'sonatypeRelease'
|
|
81
|
-
url = 'https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/'
|
|
82
|
-
// url = 'https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/'
|
|
83
|
-
credentials(PasswordCredentials) {
|
|
84
|
-
username = sonatypeUsername
|
|
85
|
-
password = sonatypePassword
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
maven {
|
|
89
|
-
name = 'sonatypeSnapshot'
|
|
90
|
-
url = 'https://central.sonatype.com/repository/maven-snapshots/'
|
|
91
|
-
// url = 'https://s01.oss.sonatype.org/content/repositories/snapshots/'
|
|
92
|
-
credentials(PasswordCredentials) {
|
|
93
|
-
username = sonatypeUsername
|
|
94
|
-
password = sonatypePassword
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
71
|
}
|
|
98
72
|
|
|
99
73
|
if (signingKey && signingPwd) {
|
|
100
|
-
logger.info(
|
|
74
|
+
logger.info("PGP Key found - Signing enabled")
|
|
101
75
|
signing {
|
|
102
76
|
useInMemoryPgpKeys(signingKey, signingPwd)
|
|
103
77
|
sign(publishing.publications.release)
|
|
104
78
|
}
|
|
105
79
|
} else {
|
|
106
|
-
logger.info(
|
|
80
|
+
logger.info("Signing disabled as the PGP key was not found")
|
|
107
81
|
}
|
|
108
82
|
}
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<b700a02133f84260647574d2f7a0f165>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -246,6 +246,12 @@ public object ReactNativeFeatureFlags {
|
|
|
246
246
|
@JvmStatic
|
|
247
247
|
public fun enableModuleArgumentNSNullConversionIOS(): Boolean = accessor.enableModuleArgumentNSNullConversionIOS()
|
|
248
248
|
|
|
249
|
+
/**
|
|
250
|
+
* Enables the MutationObserver Web API in React Native.
|
|
251
|
+
*/
|
|
252
|
+
@JvmStatic
|
|
253
|
+
public fun enableMutationObserverByDefault(): Boolean = accessor.enableMutationObserverByDefault()
|
|
254
|
+
|
|
249
255
|
/**
|
|
250
256
|
* Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
|
|
251
257
|
*/
|
|
@@ -426,6 +432,18 @@ public object ReactNativeFeatureFlags {
|
|
|
426
432
|
@JvmStatic
|
|
427
433
|
public fun preventShadowTreeCommitExhaustion(): Boolean = accessor.preventShadowTreeCommitExhaustion()
|
|
428
434
|
|
|
435
|
+
/**
|
|
436
|
+
* Use the redesigned RedBox error overlay on Android, styled to match the LogBox visual language.
|
|
437
|
+
*/
|
|
438
|
+
@JvmStatic
|
|
439
|
+
public fun redBoxV2Android(): Boolean = accessor.redBoxV2Android()
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Use the redesigned RedBox error overlay on iOS, styled to match the LogBox visual language.
|
|
443
|
+
*/
|
|
444
|
+
@JvmStatic
|
|
445
|
+
public fun redBoxV2IOS(): Boolean = accessor.redBoxV2IOS()
|
|
446
|
+
|
|
429
447
|
/**
|
|
430
448
|
* Function used to enable / disable Pressibility from using W3C Pointer Events for its hover callbacks
|
|
431
449
|
*/
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<d9309c7f772c314b78b329e5d1ad7216>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -56,6 +56,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
56
56
|
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
|
57
57
|
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
|
58
58
|
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
|
59
|
+
private var enableMutationObserverByDefaultCache: Boolean? = null
|
|
59
60
|
private var enableNativeCSSParsingCache: Boolean? = null
|
|
60
61
|
private var enableNetworkEventReportingCache: Boolean? = null
|
|
61
62
|
private var enablePreparedTextLayoutCache: Boolean? = null
|
|
@@ -86,6 +87,8 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
86
87
|
private var perfMonitorV2EnabledCache: Boolean? = null
|
|
87
88
|
private var preparedTextCacheSizeCache: Double? = null
|
|
88
89
|
private var preventShadowTreeCommitExhaustionCache: Boolean? = null
|
|
90
|
+
private var redBoxV2AndroidCache: Boolean? = null
|
|
91
|
+
private var redBoxV2IOSCache: Boolean? = null
|
|
89
92
|
private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
|
|
90
93
|
private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
|
|
91
94
|
private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
|
|
@@ -432,6 +435,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
432
435
|
return cached
|
|
433
436
|
}
|
|
434
437
|
|
|
438
|
+
override fun enableMutationObserverByDefault(): Boolean {
|
|
439
|
+
var cached = enableMutationObserverByDefaultCache
|
|
440
|
+
if (cached == null) {
|
|
441
|
+
cached = ReactNativeFeatureFlagsCxxInterop.enableMutationObserverByDefault()
|
|
442
|
+
enableMutationObserverByDefaultCache = cached
|
|
443
|
+
}
|
|
444
|
+
return cached
|
|
445
|
+
}
|
|
446
|
+
|
|
435
447
|
override fun enableNativeCSSParsing(): Boolean {
|
|
436
448
|
var cached = enableNativeCSSParsingCache
|
|
437
449
|
if (cached == null) {
|
|
@@ -702,6 +714,24 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
702
714
|
return cached
|
|
703
715
|
}
|
|
704
716
|
|
|
717
|
+
override fun redBoxV2Android(): Boolean {
|
|
718
|
+
var cached = redBoxV2AndroidCache
|
|
719
|
+
if (cached == null) {
|
|
720
|
+
cached = ReactNativeFeatureFlagsCxxInterop.redBoxV2Android()
|
|
721
|
+
redBoxV2AndroidCache = cached
|
|
722
|
+
}
|
|
723
|
+
return cached
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
override fun redBoxV2IOS(): Boolean {
|
|
727
|
+
var cached = redBoxV2IOSCache
|
|
728
|
+
if (cached == null) {
|
|
729
|
+
cached = ReactNativeFeatureFlagsCxxInterop.redBoxV2IOS()
|
|
730
|
+
redBoxV2IOSCache = cached
|
|
731
|
+
}
|
|
732
|
+
return cached
|
|
733
|
+
}
|
|
734
|
+
|
|
705
735
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean {
|
|
706
736
|
var cached = shouldPressibilityUseW3CPointerEventsForHoverCache
|
|
707
737
|
if (cached == null) {
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<1081d2d4673967a11e8f9ac287c89f02>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -100,6 +100,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
100
100
|
|
|
101
101
|
@DoNotStrip @JvmStatic public external fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
|
102
102
|
|
|
103
|
+
@DoNotStrip @JvmStatic public external fun enableMutationObserverByDefault(): Boolean
|
|
104
|
+
|
|
103
105
|
@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean
|
|
104
106
|
|
|
105
107
|
@DoNotStrip @JvmStatic public external fun enableNetworkEventReporting(): Boolean
|
|
@@ -160,6 +162,10 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
160
162
|
|
|
161
163
|
@DoNotStrip @JvmStatic public external fun preventShadowTreeCommitExhaustion(): Boolean
|
|
162
164
|
|
|
165
|
+
@DoNotStrip @JvmStatic public external fun redBoxV2Android(): Boolean
|
|
166
|
+
|
|
167
|
+
@DoNotStrip @JvmStatic public external fun redBoxV2IOS(): Boolean
|
|
168
|
+
|
|
163
169
|
@DoNotStrip @JvmStatic public external fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
|
|
164
170
|
|
|
165
171
|
@DoNotStrip @JvmStatic public external fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<e40518ddbe70d708d85e504be47a2d82>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -95,6 +95,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
95
95
|
|
|
96
96
|
override fun enableModuleArgumentNSNullConversionIOS(): Boolean = false
|
|
97
97
|
|
|
98
|
+
override fun enableMutationObserverByDefault(): Boolean = false
|
|
99
|
+
|
|
98
100
|
override fun enableNativeCSSParsing(): Boolean = false
|
|
99
101
|
|
|
100
102
|
override fun enableNetworkEventReporting(): Boolean = true
|
|
@@ -155,6 +157,10 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
155
157
|
|
|
156
158
|
override fun preventShadowTreeCommitExhaustion(): Boolean = false
|
|
157
159
|
|
|
160
|
+
override fun redBoxV2Android(): Boolean = false
|
|
161
|
+
|
|
162
|
+
override fun redBoxV2IOS(): Boolean = false
|
|
163
|
+
|
|
158
164
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean = false
|
|
159
165
|
|
|
160
166
|
override fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean = false
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<6deac57c7f55d6d7406f7dffb1abe487>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -60,6 +60,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
60
60
|
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
|
61
61
|
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
|
62
62
|
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
|
63
|
+
private var enableMutationObserverByDefaultCache: Boolean? = null
|
|
63
64
|
private var enableNativeCSSParsingCache: Boolean? = null
|
|
64
65
|
private var enableNetworkEventReportingCache: Boolean? = null
|
|
65
66
|
private var enablePreparedTextLayoutCache: Boolean? = null
|
|
@@ -90,6 +91,8 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
90
91
|
private var perfMonitorV2EnabledCache: Boolean? = null
|
|
91
92
|
private var preparedTextCacheSizeCache: Double? = null
|
|
92
93
|
private var preventShadowTreeCommitExhaustionCache: Boolean? = null
|
|
94
|
+
private var redBoxV2AndroidCache: Boolean? = null
|
|
95
|
+
private var redBoxV2IOSCache: Boolean? = null
|
|
93
96
|
private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
|
|
94
97
|
private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
|
|
95
98
|
private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
|
|
@@ -472,6 +475,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
472
475
|
return cached
|
|
473
476
|
}
|
|
474
477
|
|
|
478
|
+
override fun enableMutationObserverByDefault(): Boolean {
|
|
479
|
+
var cached = enableMutationObserverByDefaultCache
|
|
480
|
+
if (cached == null) {
|
|
481
|
+
cached = currentProvider.enableMutationObserverByDefault()
|
|
482
|
+
accessedFeatureFlags.add("enableMutationObserverByDefault")
|
|
483
|
+
enableMutationObserverByDefaultCache = cached
|
|
484
|
+
}
|
|
485
|
+
return cached
|
|
486
|
+
}
|
|
487
|
+
|
|
475
488
|
override fun enableNativeCSSParsing(): Boolean {
|
|
476
489
|
var cached = enableNativeCSSParsingCache
|
|
477
490
|
if (cached == null) {
|
|
@@ -772,6 +785,26 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
772
785
|
return cached
|
|
773
786
|
}
|
|
774
787
|
|
|
788
|
+
override fun redBoxV2Android(): Boolean {
|
|
789
|
+
var cached = redBoxV2AndroidCache
|
|
790
|
+
if (cached == null) {
|
|
791
|
+
cached = currentProvider.redBoxV2Android()
|
|
792
|
+
accessedFeatureFlags.add("redBoxV2Android")
|
|
793
|
+
redBoxV2AndroidCache = cached
|
|
794
|
+
}
|
|
795
|
+
return cached
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
override fun redBoxV2IOS(): Boolean {
|
|
799
|
+
var cached = redBoxV2IOSCache
|
|
800
|
+
if (cached == null) {
|
|
801
|
+
cached = currentProvider.redBoxV2IOS()
|
|
802
|
+
accessedFeatureFlags.add("redBoxV2IOS")
|
|
803
|
+
redBoxV2IOSCache = cached
|
|
804
|
+
}
|
|
805
|
+
return cached
|
|
806
|
+
}
|
|
807
|
+
|
|
775
808
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean {
|
|
776
809
|
var cached = shouldPressibilityUseW3CPointerEventsForHoverCache
|
|
777
810
|
if (cached == null) {
|
|
@@ -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<<
|
|
7
|
+
* @generated SignedSource<<99e9d1149773ffdb867c2abed02b0302>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -95,6 +95,8 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
95
95
|
|
|
96
96
|
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
|
97
97
|
|
|
98
|
+
@DoNotStrip public fun enableMutationObserverByDefault(): Boolean
|
|
99
|
+
|
|
98
100
|
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
|
|
99
101
|
|
|
100
102
|
@DoNotStrip public fun enableNetworkEventReporting(): Boolean
|
|
@@ -155,6 +157,10 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
155
157
|
|
|
156
158
|
@DoNotStrip public fun preventShadowTreeCommitExhaustion(): Boolean
|
|
157
159
|
|
|
160
|
+
@DoNotStrip public fun redBoxV2Android(): Boolean
|
|
161
|
+
|
|
162
|
+
@DoNotStrip public fun redBoxV2IOS(): Boolean
|
|
163
|
+
|
|
158
164
|
@DoNotStrip public fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
|
|
159
165
|
|
|
160
166
|
@DoNotStrip public fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean
|
|
@@ -115,6 +115,7 @@ add_react_common_subdir(react/renderer/components/safeareaview)
|
|
|
115
115
|
add_react_common_subdir(react/renderer/leakchecker)
|
|
116
116
|
add_react_common_subdir(react/renderer/observers/events)
|
|
117
117
|
add_react_common_subdir(react/renderer/observers/intersection)
|
|
118
|
+
add_react_common_subdir(react/renderer/observers/mutation)
|
|
118
119
|
add_react_common_subdir(react/renderer/textlayoutmanager)
|
|
119
120
|
add_react_common_subdir(react/utils)
|
|
120
121
|
add_react_common_subdir(react/bridging)
|
|
@@ -126,6 +127,7 @@ add_react_common_subdir(react/nativemodule/featureflags)
|
|
|
126
127
|
add_react_common_subdir(react/nativemodule/microtasks)
|
|
127
128
|
add_react_common_subdir(react/nativemodule/idlecallbacks)
|
|
128
129
|
add_react_common_subdir(react/nativemodule/intersectionobserver)
|
|
130
|
+
add_react_common_subdir(react/nativemodule/mutationobserver)
|
|
129
131
|
add_react_common_subdir(react/nativemodule/webperformance)
|
|
130
132
|
add_react_common_subdir(react/networking)
|
|
131
133
|
add_react_common_subdir(jserrorhandler)
|
|
@@ -195,6 +197,7 @@ add_library(reactnative
|
|
|
195
197
|
$<TARGET_OBJECTS:react_nativemodule_idlecallbacks>
|
|
196
198
|
$<TARGET_OBJECTS:react_nativemodule_intersectionobserver>
|
|
197
199
|
$<TARGET_OBJECTS:react_nativemodule_microtasks>
|
|
200
|
+
$<TARGET_OBJECTS:react_nativemodule_mutationobserver>
|
|
198
201
|
$<TARGET_OBJECTS:react_nativemodule_webperformance>
|
|
199
202
|
$<TARGET_OBJECTS:react_networking>
|
|
200
203
|
$<TARGET_OBJECTS:react_newarchdefaults>
|
|
@@ -215,6 +218,7 @@ add_library(reactnative
|
|
|
215
218
|
$<TARGET_OBJECTS:react_renderer_mounting>
|
|
216
219
|
$<TARGET_OBJECTS:react_renderer_observers_events>
|
|
217
220
|
$<TARGET_OBJECTS:react_renderer_observers_intersection>
|
|
221
|
+
$<TARGET_OBJECTS:react_renderer_observers_mutation>
|
|
218
222
|
$<TARGET_OBJECTS:react_renderer_runtimescheduler>
|
|
219
223
|
$<TARGET_OBJECTS:react_renderer_scheduler>
|
|
220
224
|
$<TARGET_OBJECTS:react_renderer_telemetry>
|
|
@@ -288,6 +292,7 @@ target_include_directories(reactnative
|
|
|
288
292
|
$<TARGET_PROPERTY:react_nativemodule_idlecallbacks,INTERFACE_INCLUDE_DIRECTORIES>
|
|
289
293
|
$<TARGET_PROPERTY:react_nativemodule_intersectionobserver,INTERFACE_INCLUDE_DIRECTORIES>
|
|
290
294
|
$<TARGET_PROPERTY:react_nativemodule_microtasks,INTERFACE_INCLUDE_DIRECTORIES>
|
|
295
|
+
$<TARGET_PROPERTY:react_nativemodule_mutationobserver,INTERFACE_INCLUDE_DIRECTORIES>
|
|
291
296
|
$<TARGET_PROPERTY:react_nativemodule_webperformance,INTERFACE_INCLUDE_DIRECTORIES>
|
|
292
297
|
$<TARGET_PROPERTY:react_networking,INTERFACE_INCLUDE_DIRECTORIES>
|
|
293
298
|
$<TARGET_PROPERTY:react_newarchdefaults,INTERFACE_INCLUDE_DIRECTORIES>
|
|
@@ -309,6 +314,8 @@ target_include_directories(reactnative
|
|
|
309
314
|
$<TARGET_PROPERTY:react_renderer_mapbuffer,INTERFACE_INCLUDE_DIRECTORIES>
|
|
310
315
|
$<TARGET_PROPERTY:react_renderer_mounting,INTERFACE_INCLUDE_DIRECTORIES>
|
|
311
316
|
$<TARGET_PROPERTY:react_renderer_observers_events,INTERFACE_INCLUDE_DIRECTORIES>
|
|
317
|
+
$<TARGET_PROPERTY:react_renderer_observers_intersection,INTERFACE_INCLUDE_DIRECTORIES>
|
|
318
|
+
$<TARGET_PROPERTY:react_renderer_observers_mutation,INTERFACE_INCLUDE_DIRECTORIES>
|
|
312
319
|
$<TARGET_PROPERTY:react_renderer_runtimescheduler,INTERFACE_INCLUDE_DIRECTORIES>
|
|
313
320
|
$<TARGET_PROPERTY:react_renderer_scheduler,INTERFACE_INCLUDE_DIRECTORIES>
|
|
314
321
|
$<TARGET_PROPERTY:react_renderer_telemetry,INTERFACE_INCLUDE_DIRECTORIES>
|