react-native-unistyles 2.7.2 → 2.8.0-beta.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 (44) hide show
  1. package/android/CMakeLists.txt +8 -1
  2. package/android/build.gradle +4 -1
  3. package/android/src/main/cxx/cpp-adapter.cpp +10 -100
  4. package/android/src/main/cxx/helpers.h +2 -0
  5. package/android/src/main/cxx/platform.cpp +126 -0
  6. package/android/src/main/cxx/platform.h +15 -0
  7. package/android/src/main/java/com/unistyles/Config.kt +31 -5
  8. package/android/src/main/java/com/unistyles/Platform.kt +24 -0
  9. package/android/src/main/java/com/unistyles/UnistylesModule.kt +24 -87
  10. package/cxx/Macros.h +11 -0
  11. package/cxx/UnistylesImpl.cpp +241 -0
  12. package/cxx/UnistylesModel.cpp +230 -0
  13. package/cxx/UnistylesModel.h +112 -0
  14. package/cxx/UnistylesRuntime.cpp +17 -388
  15. package/cxx/UnistylesRuntime.h +56 -95
  16. package/ios/UnistylesModule.h +8 -0
  17. package/ios/UnistylesModule.mm +12 -89
  18. package/ios/platform/Platform_Shared.h +5 -0
  19. package/ios/platform/Platform_Shared.mm +69 -0
  20. package/ios/platform/Platform_iOS.h +3 -10
  21. package/ios/platform/Platform_iOS.mm +53 -96
  22. package/ios/platform/Platform_macOS.h +2 -7
  23. package/ios/platform/Platform_macOS.mm +36 -36
  24. package/ios/platform/Platform_tvOS.h +2 -9
  25. package/ios/platform/Platform_tvOS.mm +30 -92
  26. package/ios/platform/Platform_visionOS.h +3 -9
  27. package/ios/platform/Platform_visionOS.mm +29 -84
  28. package/lib/commonjs/common.js.map +1 -1
  29. package/lib/commonjs/normalizer/normalizeStyle.js.map +1 -1
  30. package/lib/commonjs/normalizer/normalizer.js +1 -1
  31. package/lib/commonjs/normalizer/normalizer.js.map +1 -1
  32. package/lib/commonjs/utils/cssMediaQuery.js.map +1 -1
  33. package/lib/commonjs/utils/generateId.js.map +1 -1
  34. package/lib/commonjs/utils/mq.js.map +1 -1
  35. package/lib/module/common.js.map +1 -1
  36. package/lib/module/normalizer/normalizeStyle.js.map +1 -1
  37. package/lib/module/normalizer/normalizer.js.map +1 -1
  38. package/lib/module/utils/cssMediaQuery.js.map +1 -1
  39. package/lib/module/utils/generateId.js.map +1 -1
  40. package/lib/module/utils/mq.js.map +1 -1
  41. package/package.json +2 -1
  42. package/react-native-unistyles.podspec +3 -0
  43. package/ios/UnistylesHelpers.h +0 -3
  44. package/ios/UnistylesHelpers.mm +0 -5
@@ -1,5 +1,4 @@
1
1
  #import "UnistylesModule.h"
2
- #import "UnistylesHelpers.h"
3
2
  #import "UnistylesRuntime.h"
4
3
 
5
4
  #import <React/RCTBridge+Private.h>
@@ -47,106 +46,30 @@ RCT_EXPORT_MODULE(Unistyles)
47
46
  #pragma mark - Core
48
47
 
49
48
  RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
50
- RCTBridge* bridge = [RCTBridge currentBridge];
51
- RCTCxxBridge* cxxBridge = (RCTCxxBridge*)bridge;
52
-
53
- if (cxxBridge == nil) {
54
- return @false;
55
- }
56
-
57
- auto jsiRuntime = (jsi::Runtime*)cxxBridge.runtime;
58
-
59
- if (jsiRuntime == nil) {
49
+ UnistylesModule *__weak weakSelf = self;
50
+ RCTBridge *bridge = self.bridge;
51
+
52
+ if (bridge == nullptr) {
60
53
  return @false;
61
54
  }
62
55
 
63
- auto& runtime = *jsiRuntime;
64
- UnistylesModule *__weak weakSelf = self;
65
-
66
- registerUnistylesHostObject(runtime, weakSelf);
56
+ registerUnistylesHostObject(bridge, weakSelf);
67
57
 
68
58
  NSLog(@"Installed Unistyles 🦄!");
69
59
 
70
60
  return @true;
71
61
  }
72
62
 
73
- void registerUnistylesHostObject(jsi::Runtime &runtime, UnistylesModule* weakSelf) {
74
- auto unistylesRuntime = std::make_shared<UnistylesRuntime>(
75
- weakSelf.platform.initialScreen,
76
- weakSelf.platform.initialColorScheme,
77
- weakSelf.platform.initialContentSizeCategory,
78
- weakSelf.platform.initialInsets,
79
- weakSelf.platform.initialStatusBar,
80
- weakSelf.platform.initialNavigationBar
81
- );
82
-
83
- unistylesRuntime.get()->onThemeChange([=](std::string theme) {
84
- NSDictionary *body = @{
85
- @"type": @"theme",
86
- @"payload": @{
87
- @"themeName": cxxStringToNSString(theme)
88
- }
89
- };
90
-
91
- [weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
92
- });
93
-
94
- unistylesRuntime.get()->onLayoutChange([=](std::string breakpoint, std::string orientation, Dimensions& screen, Dimensions& statusBar, Insets& insets, Dimensions& navigationBar) {
95
- NSDictionary *body = @{
96
- @"type": @"layout",
97
- @"payload": @{
98
- @"breakpoint": cxxStringToNSString(breakpoint),
99
- @"orientation": cxxStringToNSString(orientation),
100
- @"screen": @{
101
- @"width": @(screen.width),
102
- @"height": @(screen.height)
103
- },
104
- @"statusBar": @{
105
- @"width": @(statusBar.width),
106
- @"height": @(statusBar.height)
107
- },
108
- @"navigationBar": @{
109
- @"width": @(navigationBar.width),
110
- @"height": @(navigationBar.height)
111
- },
112
- @"insets": @{
113
- @"top": @(insets.top),
114
- @"bottom": @(insets.bottom),
115
- @"left": @(insets.left),
116
- @"right": @(insets.right)
117
- }
118
- }
119
- };
120
-
121
- [weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
122
- });
123
-
124
- unistylesRuntime.get()->onPluginChange([=]() {
125
- NSDictionary *body = @{
126
- @"type": @"plugin"
127
- };
128
-
129
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
130
- [weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
131
- });
132
- });
133
-
134
- unistylesRuntime.get()->onContentSizeCategoryChange([=](std::string contentSizeCategory) {
135
- NSDictionary *body = @{
136
- @"type": @"dynamicTypeSize",
137
- @"payload": @{
138
- @"contentSizeCategory": cxxStringToNSString(contentSizeCategory)
139
- }
140
- };
141
-
142
- [weakSelf emitEvent:@"__unistylesOnChange" withBody:body];
143
- });
63
+ void registerUnistylesHostObject(RCTBridge* bridge, UnistylesModule* weakSelf) {
64
+ std::shared_ptr<react::CallInvoker> callInvoker = bridge.jsCallInvoker;
65
+ jsi::Runtime* runtime = reinterpret_cast<jsi::Runtime*>(bridge.runtime);
66
+ auto unistylesRuntime = std::make_shared<UnistylesRuntime>(*runtime, callInvoker);
144
67
 
145
- weakSelf.platform.unistylesRuntime = unistylesRuntime.get();
68
+ [weakSelf.platform makeShared:unistylesRuntime.get()];
146
69
 
147
- auto hostObject = jsi::Object::createFromHostObject(runtime, unistylesRuntime);
70
+ auto hostObject = jsi::Object::createFromHostObject(*runtime, unistylesRuntime);
148
71
 
149
- runtime.global().setProperty(runtime, "__UNISTYLES__", std::move(hostObject));
72
+ runtime->global().setProperty(*runtime, "__UNISTYLES__", std::move(hostObject));
150
73
  }
151
74
 
152
75
  @end
@@ -0,0 +1,5 @@
1
+ #import "UnistylesRuntime.h"
2
+ #include <string>
3
+
4
+ std::string getContentSizeCategory();
5
+ std::string getColorScheme();
@@ -0,0 +1,69 @@
1
+ #include "Platform_Shared.h"
2
+
3
+ std::string getContentSizeCategory() {
4
+ UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
5
+
6
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) {
7
+ return std::string([@"xxxLarge" UTF8String]);
8
+ }
9
+
10
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraLarge]) {
11
+ return std::string([@"xxLarge" UTF8String]);
12
+ }
13
+
14
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraLarge]) {
15
+ return std::string([@"xLarge" UTF8String]);
16
+ }
17
+
18
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryLarge]) {
19
+ return std::string([@"Large" UTF8String]);
20
+ }
21
+
22
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryMedium]) {
23
+ return std::string([@"Medium" UTF8String]);
24
+ }
25
+
26
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategorySmall]) {
27
+ return std::string([@"Small" UTF8String]);
28
+ }
29
+
30
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraSmall]) {
31
+ return std::string([@"xSmall" UTF8String]);
32
+ }
33
+
34
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityMedium]) {
35
+ return std::string([@"accessibilityMedium" UTF8String]);
36
+ }
37
+
38
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityLarge]) {
39
+ return std::string([@"accessibilityLarge" UTF8String]);
40
+ }
41
+
42
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge]) {
43
+ return std::string([@"accessibilityExtraLarge" UTF8String]);
44
+ }
45
+
46
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge]) {
47
+ return std::string([@"accessibilityExtraExtraLarge" UTF8String]);
48
+ }
49
+
50
+ if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge]) {
51
+ return std::string([@"accessibilityExtraExtraExtraLarge" UTF8String]);
52
+ }
53
+
54
+ return std::string([@"unspecified" UTF8String]);
55
+ }
56
+
57
+ std::string getColorScheme() {
58
+ UIUserInterfaceStyle colorScheme = [UIScreen mainScreen].traitCollection.userInterfaceStyle;
59
+
60
+ switch (colorScheme) {
61
+ case UIUserInterfaceStyleLight:
62
+ return UnistylesLightScheme;
63
+ case UIUserInterfaceStyleDark:
64
+ return UnistylesDarkScheme;
65
+ case UIUserInterfaceStyleUnspecified:
66
+ default:
67
+ return UnistylesUnspecifiedScheme;
68
+ }
69
+ }
@@ -1,25 +1,18 @@
1
1
  #include <string>
2
2
  #include <map>
3
3
  #include <UnistylesRuntime.h>
4
+ #include "Platform_Shared.h"
4
5
 
5
6
  @interface Platform : NSObject
6
7
 
7
- @property (nonatomic, assign) Dimensions initialScreen;
8
- @property (nonatomic, assign) std::string initialColorScheme;
9
- @property (nonatomic, assign) std::string initialContentSizeCategory;
10
- @property (nonatomic, assign) Insets initialInsets;
11
- @property (nonatomic, assign) Dimensions initialStatusBar;
12
- @property (nonatomic, assign) Dimensions initialNavigationBar;
13
8
  @property (nonatomic, assign) void* unistylesRuntime;
14
9
 
15
10
  - (instancetype)init;
16
11
 
17
12
  - (void)setupListeners;
18
- - (void)onOrientationChange:(NSNotification *)notification;
13
+ - (void)makeShared:(void*)runtime;
14
+ - (void)onWindowChange:(NSNotification *)notification;
19
15
  - (void)onAppearanceChange:(NSNotification *)notification;
20
16
  - (void)onContentSizeCategoryChange:(NSNotification *)notification;
21
17
 
22
- - (std::string)getColorScheme;
23
- - (std::string)getContentSizeCategory:(UIContentSizeCategory)contentSizeCategory;
24
-
25
18
  @end
@@ -1,7 +1,6 @@
1
1
  #if TARGET_OS_IOS
2
2
 
3
3
  #import "Platform_iOS.h"
4
- #import "UnistylesRuntime.h"
5
4
  #import <React/RCTAppearance.h>
6
5
 
7
6
  @implementation Platform
@@ -9,15 +8,6 @@
9
8
  - (instancetype)init {
10
9
  self = [super init];
11
10
  if (self) {
12
- UIScreen *screen = [UIScreen mainScreen];
13
- UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
14
-
15
- self.initialScreen = {(int)screen.bounds.size.width, (int)screen.bounds.size.height};
16
- self.initialColorScheme = [self getColorScheme];
17
- self.initialContentSizeCategory = [self getContentSizeCategory:contentSizeCategory];
18
- self.initialStatusBar = [self getStatusBarDimensions];
19
- self.initialInsets = [self getInsets];
20
-
21
11
  [self setupListeners];
22
12
  }
23
13
  return self;
@@ -32,17 +22,17 @@
32
22
  name: UIContentSizeCategoryDidChangeNotification
33
23
  object: nil];
34
24
  [[NSNotificationCenter defaultCenter] removeObserver:self
35
- name: RCTUserInterfaceStyleDidChangeNotification
36
- object: nil];
25
+ name:RCTWindowFrameDidChangeNotification
26
+ object:nil];
37
27
  [[NSNotificationCenter defaultCenter] removeObserver:self
38
- name: UIDeviceOrientationDidChangeNotification
28
+ name: RCTUserInterfaceStyleDidChangeNotification
39
29
  object: nil];
40
30
  }
41
31
 
42
32
  - (void)setupListeners {
43
33
  [[NSNotificationCenter defaultCenter] addObserver:self
44
- selector:@selector(onOrientationChange:)
45
- name:UIDeviceOrientationDidChangeNotification
34
+ selector:@selector(onWindowChange:)
35
+ name:RCTWindowFrameDidChangeNotification
46
36
  object:nil];
47
37
  [[NSNotificationCenter defaultCenter] addObserver:self
48
38
  selector:@selector(onAppearanceChange:)
@@ -54,117 +44,84 @@
54
44
  object:nil];
55
45
  }
56
46
 
57
- - (void)onAppearanceChange:(NSNotification *)notification {
58
- std::string colorScheme = [self getColorScheme];
47
+ - (void)makeShared:(void*)runtime {
48
+ self.unistylesRuntime = runtime;
49
+
50
+ auto unistylesRuntime = ((UnistylesRuntime*)self.unistylesRuntime);
51
+
52
+ unistylesRuntime->setScreenDimensionsCallback([self](){
53
+ return [self getScreenDimensions];
54
+ });
55
+
56
+ unistylesRuntime->setContentSizeCategoryCallback([](){
57
+ return getContentSizeCategory();
58
+ });
59
+
60
+ unistylesRuntime->setColorSchemeCallback([self](){
61
+ return getColorScheme();
62
+ });
63
+
64
+ unistylesRuntime->setStatusBarDimensionsCallback([self](){
65
+ return [self getStatusBarDimensions];
66
+ });
67
+
68
+ unistylesRuntime->setInsetsCallback([self](){
69
+ return [self getInsets];
70
+ });
71
+
72
+ dispatch_async(dispatch_get_main_queue(), ^{
73
+ unistylesRuntime->screen = [self getScreenDimensions];
74
+ unistylesRuntime->contentSizeCategory = getContentSizeCategory();
75
+ unistylesRuntime->colorScheme = getColorScheme();
76
+ unistylesRuntime->statusBar = [self getStatusBarDimensions];
77
+ unistylesRuntime->insets = [self getInsets];
78
+ });
79
+ }
59
80
 
81
+ - (void)onAppearanceChange:(NSNotification *)notification {
60
82
  if (self.unistylesRuntime != nullptr) {
61
- ((UnistylesRuntime*)self.unistylesRuntime)->handleAppearanceChange(colorScheme);
83
+ ((UnistylesRuntime*)self.unistylesRuntime)->handleAppearanceChange(getColorScheme());
62
84
  }
63
85
  }
64
86
 
65
87
  - (void)onContentSizeCategoryChange:(NSNotification *)notification {
66
- UIContentSizeCategory contentSizeCategory = [[UIApplication sharedApplication] preferredContentSizeCategory];
67
-
68
88
  if (self.unistylesRuntime != nullptr) {
69
- ((UnistylesRuntime*)self.unistylesRuntime)->handleContentSizeCategoryChange([self getContentSizeCategory:contentSizeCategory]);
89
+ ((UnistylesRuntime*)self.unistylesRuntime)->handleContentSizeCategoryChange(getContentSizeCategory());
70
90
  }
71
91
  }
72
92
 
73
- - (void)onOrientationChange:(NSNotification *)notification {
93
+ - (void)onWindowChange:(NSNotification *)notification {
74
94
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
75
- UIScreen *mainScreen = [UIScreen mainScreen];
76
- Dimensions screen = {(int)mainScreen.bounds.size.width, (int)mainScreen.bounds.size.height};
95
+ Dimensions screen = [self getScreenDimensions];
77
96
  Insets insets = [self getInsets];
78
97
  Dimensions statusBar = [self getStatusBarDimensions];
79
- Dimensions navigationBar = [self getNavigationBarDimensions];
80
98
 
81
99
  if (self.unistylesRuntime != nullptr) {
82
- ((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(screen, insets, statusBar, navigationBar);
100
+ ((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(screen, insets, statusBar, std::nullopt);
83
101
  }
84
102
  });
85
103
  }
86
104
 
87
- - (std::string)getColorScheme {
88
- UIUserInterfaceStyle colorScheme = [UIScreen mainScreen].traitCollection.userInterfaceStyle;
89
-
90
- switch (colorScheme) {
91
- case UIUserInterfaceStyleLight:
92
- return UnistylesLightScheme;
93
- case UIUserInterfaceStyleDark:
94
- return UnistylesDarkScheme;
95
- case UIUserInterfaceStyleUnspecified:
96
- default:
97
- return UnistylesUnspecifiedScheme;
98
- }
99
- }
100
-
101
105
  - (Insets)getInsets {
102
106
  UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
103
107
  UIEdgeInsets safeArea = window.safeAreaInsets;
104
-
108
+
105
109
  return {(int)safeArea.top, (int)safeArea.bottom, (int)safeArea.left, (int)safeArea.right};
106
110
  }
107
111
 
108
112
  - (Dimensions)getStatusBarDimensions {
109
- CGRect statusBarFrame = UIApplication.sharedApplication.statusBarFrame;
110
-
113
+ UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
114
+ CGRect statusBarFrame = window.windowScene.statusBarManager.statusBarFrame;
115
+
111
116
  return {(int)statusBarFrame.size.width, (int)statusBarFrame.size.height};
112
117
  }
113
118
 
114
- - (Dimensions)getNavigationBarDimensions {
115
- return {0, 0};
116
- }
117
-
118
- - (std::string)getContentSizeCategory:(UIContentSizeCategory)contentSizeCategory {
119
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) {
120
- return std::string([@"xxxLarge" UTF8String]);
121
- }
122
-
123
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraExtraLarge]) {
124
- return std::string([@"xxLarge" UTF8String]);
125
- }
126
-
127
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraLarge]) {
128
- return std::string([@"xLarge" UTF8String]);
129
- }
130
-
131
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryLarge]) {
132
- return std::string([@"Large" UTF8String]);
133
- }
134
-
135
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryMedium]) {
136
- return std::string([@"Medium" UTF8String]);
137
- }
138
-
139
- if ([contentSizeCategory isEqualToString:UIContentSizeCategorySmall]) {
140
- return std::string([@"Small" UTF8String]);
141
- }
142
-
143
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryExtraSmall]) {
144
- return std::string([@"xSmall" UTF8String]);
145
- }
146
-
147
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityMedium]) {
148
- return std::string([@"accessibilityMedium" UTF8String]);
149
- }
150
-
151
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityLarge]) {
152
- return std::string([@"accessibilityLarge" UTF8String]);
153
- }
154
-
155
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraLarge]) {
156
- return std::string([@"accessibilityExtraLarge" UTF8String]);
157
- }
158
-
159
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraLarge]) {
160
- return std::string([@"accessibilityExtraExtraLarge" UTF8String]);
161
- }
162
-
163
- if ([contentSizeCategory isEqualToString:UIContentSizeCategoryAccessibilityExtraExtraExtraLarge]) {
164
- return std::string([@"accessibilityExtraExtraExtraLarge" UTF8String]);
165
- }
119
+ - (Dimensions)getScreenDimensions {
120
+ UIViewController *presentedViewController = RCTPresentedViewController();
121
+ CGRect windowFrame = presentedViewController.view.window.frame;
122
+ Dimensions screenDimension = {(int)windowFrame.size.width, (int)windowFrame.size.height};
166
123
 
167
- return std::string([@"unspecified" UTF8String]);
124
+ return screenDimension;
168
125
  }
169
126
 
170
127
  @end
@@ -4,18 +4,13 @@
4
4
 
5
5
  @interface Platform : NSObject
6
6
 
7
- @property (nonatomic, assign) Dimensions initialScreen;
8
- @property (nonatomic, assign) std::string initialColorScheme;
9
- @property (nonatomic, assign) std::string initialContentSizeCategory;
10
- @property (nonatomic, assign) Insets initialInsets;
11
- @property (nonatomic, assign) Dimensions initialStatusBar;
12
- @property (nonatomic, assign) Dimensions initialNavigationBar;
13
7
  @property (nonatomic, assign) void* unistylesRuntime;
14
8
 
15
9
  - (instancetype)init;
16
10
 
17
11
  - (void)setupListeners;
18
- - (void)onWindowResize;
12
+ - (void)makeShared:(void*)runtime;
13
+ - (void)onWindowChange;
19
14
  - (void)onAppearanceChange;
20
15
 
21
16
  - (std::string)getColorScheme;
@@ -1,7 +1,6 @@
1
1
  #if TARGET_OS_OSX
2
2
 
3
3
  #import "Platform_macOS.h"
4
- #import "UnistylesRuntime.h"
5
4
  #import <React/RCTUtils.h>
6
5
 
7
6
  @implementation Platform
@@ -9,15 +8,6 @@
9
8
  - (instancetype)init {
10
9
  self = [super init];
11
10
  if (self) {
12
- NSWindow *window = RCTSharedApplication().mainWindow;
13
-
14
- self.initialScreen = {(int)window.frame.size.width, (int)window.frame.size.height};
15
- self.initialContentSizeCategory = std::string([@"unspecified" UTF8String]);
16
- self.initialColorScheme = [self getColorScheme];
17
- self.initialStatusBar = [self getStatusBarDimensions];
18
- self.initialNavigationBar = [self getNavigationBarDimensions];
19
- self.initialInsets = [self getInsets];
20
-
21
11
  [self setupListeners];
22
12
  }
23
13
  return self;
@@ -27,27 +17,46 @@
27
17
  if (self.unistylesRuntime != nullptr) {
28
18
  self.unistylesRuntime = nullptr;
29
19
  }
30
-
20
+
31
21
  NSWindow *window = RCTSharedApplication().mainWindow;
32
-
22
+
33
23
  [window removeObserver:self forKeyPath:@"effectiveAppearance"];
34
24
  [window removeObserver:self forKeyPath:@"frame"];
35
25
  }
36
26
 
37
27
  - (void)setupListeners {
38
28
  NSWindow *window = RCTSharedApplication().mainWindow;
39
-
29
+
40
30
  [window addObserver:self forKeyPath:@"effectiveAppearance" options:NSKeyValueObservingOptionNew context:nil];
41
31
  [window addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
42
32
  }
43
33
 
34
+ - (void)makeShared:(void*)runtime {
35
+ self.unistylesRuntime = runtime;
36
+
37
+ auto unistylesRuntime = ((UnistylesRuntime*)self.unistylesRuntime);
38
+
39
+ unistylesRuntime->setScreenDimensionsCallback([self](){
40
+ return [self getScreenDimensions];
41
+ });
42
+
43
+ unistylesRuntime->setColorSchemeCallback([self](){
44
+ return [self getColorScheme];
45
+ });
46
+
47
+ dispatch_async(dispatch_get_main_queue(), ^{
48
+ unistylesRuntime->screen = [self getScreenDimensions];
49
+ unistylesRuntime->colorScheme = [self getColorScheme];
50
+ });
51
+ }
52
+
44
53
  - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
45
54
  if ([keyPath isEqualToString:@"effectiveAppearance"]) {
46
55
  return [self onAppearanceChange];
47
56
  }
48
-
57
+
49
58
  if ([keyPath isEqualToString:@"frame"]) {
50
- return [self onWindowResize];
59
+ return [self onWindowChange];
51
60
  }
52
61
  }
53
62
 
@@ -59,19 +68,15 @@
59
68
  }
60
69
  }
61
70
 
62
- - (void)onWindowResize {
63
- NSWindow *window = RCTSharedApplication().mainWindow;
64
- Dimensions screen = {(int)window.frame.size.width, (int)window.frame.size.height};
65
- Insets insets = [self getInsets];
66
- Dimensions statusBar = [self getStatusBarDimensions];
67
- Dimensions navigationBar = [self getNavigationBarDimensions];
68
-
71
+ - (void)onWindowChange {
72
+ Dimensions screen = [self getScreenDimensions];
73
+
69
74
  if (self.unistylesRuntime != nullptr) {
70
75
  ((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange(
71
76
  screen,
72
- insets,
73
- statusBar,
74
- navigationBar
77
+ std::nullopt,
78
+ std::nullopt,
79
+ std::nullopt
75
80
  );
76
81
  }
77
82
  }
@@ -82,20 +87,15 @@
82
87
  if (appearance.name == NSAppearanceNameDarkAqua) {
83
88
  return UnistylesDarkScheme;
84
89
  }
85
-
86
- return UnistylesLightScheme;
87
- }
88
-
89
- - (Insets)getInsets {
90
- return {0, 0, 0, 0};
91
- }
92
90
 
93
- - (Dimensions)getStatusBarDimensions {
94
- return {0, 0};
91
+ return UnistylesLightScheme;
95
92
  }
96
93
 
97
- - (Dimensions)getNavigationBarDimensions {
98
- return {0, 0};
94
+ - (Dimensions)getScreenDimensions {
95
+ NSWindow *window = RCTSharedApplication().mainWindow;
96
+ Dimensions screenDimension = {(int)window.frame.size.width, (int)window.frame.size.height};
97
+
98
+ return screenDimension;
99
99
  }
100
100
 
101
101
  @end
@@ -1,23 +1,16 @@
1
1
  #include <string>
2
2
  #include <map>
3
- #include <UnistylesRuntime.h>
3
+ #include "Platform_Shared.h"
4
4
 
5
5
  @interface Platform : NSObject
6
6
 
7
- @property (nonatomic, assign) Dimensions initialScreen;
8
- @property (nonatomic, assign) std::string initialColorScheme;
9
- @property (nonatomic, assign) std::string initialContentSizeCategory;
10
- @property (nonatomic, assign) Insets initialInsets;
11
- @property (nonatomic, assign) Dimensions initialStatusBar;
12
- @property (nonatomic, assign) Dimensions initialNavigationBar;
13
7
  @property (nonatomic, assign) void* unistylesRuntime;
14
8
 
15
9
  - (instancetype)init;
16
10
 
11
+ - (void)makeShared:(void*)runtime;
17
12
  - (void)onAppearanceChange:(NSNotification *)notification;
18
13
  - (void)onContentSizeCategoryChange:(NSNotification *)notification;
19
14
 
20
- - (std::string)getColorScheme;
21
-
22
15
  @end
23
16