react-native-unistyles 2.0.0-alpha.1 → 2.0.0-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. package/README.md +4 -4
  2. package/ios/UnistylesModule.h +12 -0
  3. package/ios/UnistylesModule.mm +163 -0
  4. package/ios/UnistylesRuntime.h +48 -0
  5. package/ios/UnistylesRuntime.mm +228 -0
  6. package/lib/commonjs/UnistyleRegistry.js +34 -0
  7. package/lib/commonjs/UnistyleRegistry.js.map +1 -0
  8. package/lib/commonjs/Unistyles.js +36 -0
  9. package/lib/commonjs/Unistyles.js.map +1 -0
  10. package/lib/commonjs/UnistylesEngine.js +22 -0
  11. package/lib/commonjs/UnistylesEngine.js.map +1 -0
  12. package/lib/commonjs/UnistylesModule.js +9 -0
  13. package/lib/commonjs/UnistylesModule.js.map +1 -0
  14. package/lib/commonjs/UnistylesRuntime.js +63 -0
  15. package/lib/commonjs/UnistylesRuntime.js.map +1 -0
  16. package/lib/commonjs/createStyleSheet.js +14 -0
  17. package/lib/commonjs/createStyleSheet.js.map +1 -0
  18. package/lib/commonjs/global.js +2 -0
  19. package/lib/commonjs/global.js.map +1 -0
  20. package/lib/commonjs/hooks/useDimensions.web.js +3 -2
  21. package/lib/commonjs/hooks/useDimensions.web.js.map +1 -1
  22. package/lib/commonjs/index.js +33 -6
  23. package/lib/commonjs/index.js.map +1 -1
  24. package/lib/commonjs/types/cxx.js +23 -0
  25. package/lib/commonjs/types/cxx.js.map +1 -0
  26. package/lib/commonjs/types/index.js +26 -0
  27. package/lib/commonjs/types/index.js.map +1 -1
  28. package/lib/commonjs/types/normalizer.js +6 -0
  29. package/lib/commonjs/types/normalizer.js.map +1 -0
  30. package/lib/commonjs/useInitialTheme.js +13 -0
  31. package/lib/commonjs/useInitialTheme.js.map +1 -0
  32. package/lib/commonjs/useStyles.js +48 -0
  33. package/lib/commonjs/useStyles.js.map +1 -0
  34. package/lib/commonjs/useUnistyles.js +57 -0
  35. package/lib/commonjs/useUnistyles.js.map +1 -0
  36. package/lib/commonjs/utils/breakpoints.js +4 -2
  37. package/lib/commonjs/utils/breakpoints.js.map +1 -1
  38. package/lib/commonjs/utils/common.js +3 -3
  39. package/lib/commonjs/utils/common.js.map +1 -1
  40. package/lib/commonjs/utils/index.js +34 -0
  41. package/lib/commonjs/utils/index.js.map +1 -1
  42. package/lib/commonjs/utils/module.d.js +2 -0
  43. package/lib/commonjs/utils/module.d.js.map +1 -0
  44. package/lib/commonjs/utils/normalizeStyles.web.js +13 -13
  45. package/lib/commonjs/utils/normalizeStyles.web.js.map +1 -1
  46. package/lib/commonjs/utils/normalizer.js +89 -0
  47. package/lib/commonjs/utils/normalizer.js.map +1 -0
  48. package/lib/commonjs/utils/styles.js +7 -7
  49. package/lib/commonjs/utils/styles.js.map +1 -1
  50. package/lib/module/UnistyleRegistry.js +27 -0
  51. package/lib/module/UnistyleRegistry.js.map +1 -0
  52. package/lib/module/Unistyles.js +30 -0
  53. package/lib/module/Unistyles.js.map +1 -0
  54. package/lib/module/UnistylesEngine.js +15 -0
  55. package/lib/module/UnistylesEngine.js.map +1 -0
  56. package/lib/module/UnistylesModule.js +3 -0
  57. package/lib/module/UnistylesModule.js.map +1 -0
  58. package/lib/module/UnistylesRuntime.js +56 -0
  59. package/lib/module/UnistylesRuntime.js.map +1 -0
  60. package/lib/module/createStyleSheet.js +7 -0
  61. package/lib/module/createStyleSheet.js.map +1 -0
  62. package/lib/module/global.js +2 -0
  63. package/lib/module/global.js.map +1 -0
  64. package/lib/module/hooks/useDimensions.web.js +3 -2
  65. package/lib/module/hooks/useDimensions.web.js.map +1 -1
  66. package/lib/module/index.js +18 -2
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/module/types/cxx.js +17 -0
  69. package/lib/module/types/cxx.js.map +1 -0
  70. package/lib/module/types/index.js +2 -1
  71. package/lib/module/types/index.js.map +1 -1
  72. package/lib/module/types/normalizer.js +2 -0
  73. package/lib/module/types/normalizer.js.map +1 -0
  74. package/lib/module/useInitialTheme.js +6 -0
  75. package/lib/module/useInitialTheme.js.map +1 -0
  76. package/lib/module/useStyles.js +42 -0
  77. package/lib/module/useStyles.js.map +1 -0
  78. package/lib/module/useUnistyles.js +50 -0
  79. package/lib/module/useUnistyles.js.map +1 -0
  80. package/lib/module/utils/breakpoints.js +4 -3
  81. package/lib/module/utils/breakpoints.js.map +1 -1
  82. package/lib/module/utils/common.js +2 -1
  83. package/lib/module/utils/common.js.map +1 -1
  84. package/lib/module/utils/index.js +2 -0
  85. package/lib/module/utils/index.js.map +1 -1
  86. package/lib/module/utils/module.d.js +2 -0
  87. package/lib/module/utils/module.d.js.map +1 -0
  88. package/lib/module/utils/normalizeStyles.web.js +13 -13
  89. package/lib/module/utils/normalizeStyles.web.js.map +1 -1
  90. package/lib/module/utils/normalizer.js +79 -0
  91. package/lib/module/utils/normalizer.js.map +1 -0
  92. package/lib/module/utils/styles.js +7 -8
  93. package/lib/module/utils/styles.js.map +1 -1
  94. package/lib/typescript/examples/expo/src/App.d.ts +3 -0
  95. package/lib/typescript/examples/expo/src/App.d.ts.map +1 -0
  96. package/lib/typescript/examples/expo/src/examples/Cxx.d.ts +3 -0
  97. package/lib/typescript/examples/expo/src/examples/Cxx.d.ts.map +1 -0
  98. package/lib/typescript/examples/expo/src/examples/index.d.ts +2 -0
  99. package/lib/typescript/examples/expo/src/examples/index.d.ts.map +1 -0
  100. package/lib/typescript/examples/expo/src/index.d.ts +2 -0
  101. package/lib/typescript/examples/expo/src/index.d.ts.map +1 -0
  102. package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts +8 -0
  103. package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts.map +1 -0
  104. package/lib/typescript/examples/expo/src/styles/index.d.ts +16 -0
  105. package/lib/typescript/examples/expo/src/styles/index.d.ts.map +1 -0
  106. package/lib/typescript/examples/expo/src/styles/theme.d.ts +40 -0
  107. package/lib/typescript/examples/expo/src/styles/theme.d.ts.map +1 -0
  108. package/lib/typescript/src/UnistyleRegistry.d.ts +14 -0
  109. package/lib/typescript/src/UnistyleRegistry.d.ts.map +1 -0
  110. package/lib/typescript/src/Unistyles.d.ts +16 -0
  111. package/lib/typescript/src/Unistyles.d.ts.map +1 -0
  112. package/lib/typescript/src/UnistylesEngine.d.ts +8 -0
  113. package/lib/typescript/src/UnistylesEngine.d.ts.map +1 -0
  114. package/lib/typescript/src/UnistylesModule.d.ts +6 -0
  115. package/lib/typescript/src/UnistylesModule.d.ts.map +1 -0
  116. package/lib/typescript/src/UnistylesRuntime.d.ts +60 -0
  117. package/lib/typescript/src/UnistylesRuntime.d.ts.map +1 -0
  118. package/lib/typescript/src/createStyleSheet.d.ts +6 -0
  119. package/lib/typescript/src/createStyleSheet.d.ts.map +1 -0
  120. package/lib/typescript/src/global.d.ts +5 -0
  121. package/lib/typescript/src/global.d.ts.map +1 -0
  122. package/lib/typescript/src/hooks/useDimensions.web.d.ts.map +1 -1
  123. package/lib/typescript/src/index.d.ts +14 -2
  124. package/lib/typescript/src/index.d.ts.map +1 -1
  125. package/lib/typescript/src/types/breakpoints.d.ts +6 -7
  126. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  127. package/lib/typescript/src/types/core.d.ts +4 -4
  128. package/lib/typescript/src/types/core.d.ts.map +1 -1
  129. package/lib/typescript/src/types/cxx.d.ts +53 -0
  130. package/lib/typescript/src/types/cxx.d.ts.map +1 -0
  131. package/lib/typescript/src/types/index.d.ts +4 -1
  132. package/lib/typescript/src/types/index.d.ts.map +1 -1
  133. package/lib/typescript/src/types/normalizer.d.ts +20 -0
  134. package/lib/typescript/src/types/normalizer.d.ts.map +1 -0
  135. package/lib/typescript/src/useInitialTheme.d.ts +3 -0
  136. package/lib/typescript/src/useInitialTheme.d.ts.map +1 -0
  137. package/lib/typescript/src/useStyles.d.ts +46 -0
  138. package/lib/typescript/src/useStyles.d.ts.map +1 -0
  139. package/lib/typescript/src/useUnistyles.d.ts +45 -0
  140. package/lib/typescript/src/useUnistyles.d.ts.map +1 -0
  141. package/lib/typescript/src/utils/breakpoints.d.ts +5 -4
  142. package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
  143. package/lib/typescript/src/utils/common.d.ts +2 -1
  144. package/lib/typescript/src/utils/common.d.ts.map +1 -1
  145. package/lib/typescript/src/utils/index.d.ts +2 -0
  146. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  147. package/lib/typescript/src/utils/normalizeStyles.web.d.ts +4 -1
  148. package/lib/typescript/src/utils/normalizeStyles.web.d.ts.map +1 -1
  149. package/lib/typescript/src/utils/normalizer.d.ts +11 -0
  150. package/lib/typescript/src/utils/normalizer.d.ts.map +1 -0
  151. package/lib/typescript/src/utils/styles.d.ts +4 -3
  152. package/lib/typescript/src/utils/styles.d.ts.map +1 -1
  153. package/package.json +13 -3
  154. package/react-native-unistyles.podspec +21 -0
  155. package/src/UnistyleRegistry.ts +35 -0
  156. package/src/Unistyles.ts +41 -0
  157. package/src/UnistylesEngine.ts +15 -0
  158. package/src/UnistylesModule.ts +7 -0
  159. package/src/UnistylesRuntime.ts +69 -0
  160. package/src/createStyleSheet.ts +12 -0
  161. package/src/global.ts +2 -0
  162. package/src/hooks/useDimensions.web.ts +3 -2
  163. package/src/index.ts +30 -2
  164. package/src/types/breakpoints.ts +9 -11
  165. package/src/types/core.ts +6 -6
  166. package/src/types/cxx.ts +65 -0
  167. package/src/types/index.ts +4 -3
  168. package/src/types/normalizer.ts +29 -0
  169. package/src/useInitialTheme.ts +7 -0
  170. package/src/useStyles.ts +49 -0
  171. package/src/useUnistyles.ts +66 -0
  172. package/src/utils/breakpoints.ts +16 -14
  173. package/src/utils/common.ts +2 -1
  174. package/src/utils/index.ts +2 -0
  175. package/src/utils/module.d.ts +3 -0
  176. package/src/utils/normalizeStyles.web.ts +21 -42
  177. package/src/utils/normalizer.ts +99 -0
  178. package/src/utils/styles.ts +17 -19
  179. package/lib/commonjs/UnistylesTheme.js +0 -21
  180. package/lib/commonjs/UnistylesTheme.js.map +0 -1
  181. package/lib/commonjs/createUnistyles.js +0 -57
  182. package/lib/commonjs/createUnistyles.js.map +0 -1
  183. package/lib/module/UnistylesTheme.js +0 -12
  184. package/lib/module/UnistylesTheme.js.map +0 -1
  185. package/lib/module/createUnistyles.js +0 -50
  186. package/lib/module/createUnistyles.js.map +0 -1
  187. package/lib/typescript/src/UnistylesTheme.d.ts +0 -9
  188. package/lib/typescript/src/UnistylesTheme.d.ts.map +0 -1
  189. package/lib/typescript/src/createUnistyles.d.ts +0 -10
  190. package/lib/typescript/src/createUnistyles.d.ts.map +0 -1
  191. package/src/UnistylesTheme.tsx +0 -17
  192. package/src/__tests__/createUnistyles.spec.tsx +0 -192
  193. package/src/createUnistyles.ts +0 -70
package/README.md CHANGED
@@ -8,10 +8,9 @@
8
8
 
9
9
  ![GitHub package.json version](https://img.shields.io/github/package-json/v/jpudysz/react-native-unistyles?style=for-the-badge)
10
10
  [![npm downloads](https://img.shields.io/npm/dm/react-native-unistyles.svg?style=for-the-badge)](https://www.npmjs.com/package/react-native-unistyles)
11
- ![Platform - Android and iOS](https://img.shields.io/badge/platform-Android%20%7C%20iOS%20%7C%20RNWeb-blue.svg?style=for-the-badge)
11
+ ![Platform - Android and iOS](https://img.shields.io/badge/platform-Android%20%7C%20IOS%20%7C%20SSR%20%7C%20Web-blue.svg?style=for-the-badge)
12
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
13
13
 
14
-
15
14
  ## Features
16
15
  - ⚡ Blazing fast, adds around ~3ms on top of StyleSheet*
17
16
  - 🎳 Share up to 100% of your styles across platforms in monorepo
@@ -19,7 +18,8 @@
19
18
  - 🖥️ Supports custom breakpoints and css-like media queries
20
19
  - 🎨 Access theme in your StyleSheets and components
21
20
  - 🪄 Supports dynamic functions to access values from JSX
22
- - 🥳 Compatible with Expo, Expo Go, Bare React Native and React Native Web
21
+ - 🥳 Compatible with Expo, Expo Go, Bare React Native, React Native Web and SSR
22
+ - 🛡️ ~99% Test coverage
23
23
  - ⚔️ No 3rd party dependencies
24
24
 
25
25
  *-based on this [benchmark](https://github.com/efstathiosntonas/react-native-style-libraries-benchmark)
@@ -41,7 +41,7 @@ There is ongoing work on branch [2.0](https://github.com/jpudysz/react-native-un
41
41
 
42
42
  ---
43
43
 
44
- Join early testers and discussion [here](https://github.com/jpudysz/react-native-unistyles/discussions/41)
44
+ Join early testers and discussion [here](https://github.com/jpudysz/react-native-unistyles/discussions/41).
45
45
 
46
46
  ```cmd
47
47
  yarn add react-native-unistyles@next
@@ -0,0 +1,12 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+ #import <string>
4
+
5
+ typedef void(^UnistylesThemeChangeEvent)(std::string);
6
+ typedef void(^UnistylesBreakpointChangeEvent)(std::string);
7
+
8
+ @interface UnistylesModule : RCTEventEmitter<RCTBridgeModule>
9
+
10
+ @property (nonatomic, assign) void* unistylesRuntime;
11
+
12
+ @end
@@ -0,0 +1,163 @@
1
+ #import "UnistylesModule.h"
2
+ #import "UnistylesRuntime.h"
3
+ #import "UnistylesModule.h"
4
+
5
+
6
+ #import <React/RCTAppearance.h>
7
+ #import <React/RCTBridge+Private.h>
8
+ #import <jsi/jsi.h>
9
+
10
+ @implementation UnistylesModule
11
+
12
+ BOOL hasListeners;
13
+
14
+ using namespace facebook;
15
+
16
+ RCT_EXPORT_MODULE(Unistyles)
17
+
18
+ - (instancetype)init {
19
+ if ((self = [super init])) {
20
+ [[NSNotificationCenter defaultCenter] addObserver:self
21
+ selector:@selector(handleOrientationChange:)
22
+ name:UIDeviceOrientationDidChangeNotification
23
+ object:nil];
24
+ // todo from iOS 13
25
+ [[NSNotificationCenter defaultCenter] addObserver:self
26
+ selector:@selector(appearanceChanged:)
27
+ name:RCTUserInterfaceStyleDidChangeNotification
28
+ object:nil];
29
+ }
30
+ return self;
31
+ }
32
+
33
+ - (void)handleOrientationChange:(NSNotification *)notification {
34
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
35
+ CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
36
+ CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
37
+
38
+ ((UnistylesRuntime*)self.unistylesRuntime)->handleScreenSizeChange((int)screenWidth, (int)screenHeight);
39
+ });
40
+ }
41
+
42
+ - (void)appearanceChanged:(NSNotification *)notification
43
+ {
44
+ std::string colorScheme = [self getColorScheme];
45
+
46
+ ((UnistylesRuntime*)self.unistylesRuntime)->handleAppearanceChange(colorScheme);
47
+ }
48
+
49
+ - (std::string)getColorScheme {
50
+ UIUserInterfaceStyle colorScheme = [UIScreen mainScreen].traitCollection.userInterfaceStyle;
51
+
52
+ // todo enums
53
+ switch (colorScheme) {
54
+ case UIUserInterfaceStyleLight:
55
+ return "light";
56
+ case UIUserInterfaceStyleDark:
57
+ return "dark";
58
+ case UIUserInterfaceStyleUnspecified:
59
+ default:
60
+ return "";
61
+ }
62
+ }
63
+
64
+ - (void)dealloc {
65
+ delete (UnistylesRuntime*)self.unistylesRuntime;
66
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
67
+ }
68
+
69
+ + (BOOL)requiresMainQueueSetup
70
+ {
71
+ return YES;
72
+ }
73
+
74
+ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
75
+ {
76
+ NSLog(@"Installing Unistyles 🦄...");
77
+
78
+ RCTBridge* bridge = [RCTBridge currentBridge];
79
+ RCTCxxBridge* cxxBridge = (RCTCxxBridge*)bridge;
80
+
81
+ if (cxxBridge == nil) {
82
+ return @false;
83
+ }
84
+
85
+ auto jsiRuntime = (jsi::Runtime*)cxxBridge.runtime;
86
+
87
+ if (jsiRuntime == nil) {
88
+ return @false;
89
+ }
90
+
91
+ auto& runtime = *jsiRuntime;
92
+ UnistylesModule *__weak weakSelf = self;
93
+
94
+ registerUnistylesHostObject(runtime, weakSelf);
95
+
96
+ NSLog(@"Installed Unistyles 🦄!");
97
+
98
+ return @true;
99
+ }
100
+
101
+ - (NSArray<NSString *> *)supportedEvents {
102
+ return @[@"onChange"];
103
+ }
104
+
105
+ - (void)startObserving
106
+ {
107
+ hasListeners = YES;
108
+ }
109
+
110
+ - (void)stopObserving
111
+ {
112
+ hasListeners = NO;
113
+ }
114
+
115
+ - (void)emitEvent:(NSString *)eventName withBody:(NSDictionary *)body {
116
+ if (hasListeners) {
117
+ [self sendEventWithName:@"onChange" body:body];
118
+ }
119
+ }
120
+
121
+ void registerUnistylesHostObject(jsi::Runtime &runtime, UnistylesModule* weakSelf) {
122
+ CGFloat initialScreenWidth = [UIScreen mainScreen].bounds.size.width;
123
+ CGFloat initialScreenHeight = [UIScreen mainScreen].bounds.size.height;
124
+ std::string initalColorScheme = [weakSelf getColorScheme];
125
+ UnistylesThemeChangeEvent onThemeChange = ^(std::string theme) {
126
+ NSString *nextTheme = [NSString stringWithUTF8String:theme.c_str()];
127
+ NSDictionary *body = @{
128
+ @"type": @"theme",
129
+ @"payload": @{
130
+ @"themeName": nextTheme
131
+ }
132
+ };
133
+
134
+ [weakSelf emitEvent:@"onChange" withBody:body];
135
+ };
136
+ UnistylesBreakpointChangeEvent onBreakpointChange = ^(std::string breakpoint) {
137
+ NSString *nextBreakpoint = [NSString stringWithUTF8String:breakpoint.c_str()];
138
+ NSDictionary *body = @{
139
+ @"type": @"breakpoint",
140
+ @"payload": @{
141
+ @"breakpoint": nextBreakpoint
142
+ }
143
+ };
144
+
145
+ [weakSelf emitEvent:@"onChange" withBody:body];
146
+ };
147
+
148
+ auto unistylesRuntime = std::make_shared<UnistylesRuntime>(
149
+ onThemeChange,
150
+ onBreakpointChange,
151
+ (int)initialScreenWidth,
152
+ (int)initialScreenHeight,
153
+ initalColorScheme
154
+ );
155
+
156
+ weakSelf.unistylesRuntime = unistylesRuntime.get();
157
+
158
+ auto hostObject = jsi::Object::createFromHostObject(runtime, unistylesRuntime);
159
+
160
+ runtime.global().setProperty(runtime, "__UNISTYLES__", std::move(hostObject));
161
+ }
162
+
163
+ @end
@@ -0,0 +1,48 @@
1
+ #pragma once
2
+
3
+ #import "UnistylesModule.h"
4
+ #import <jsi/jsi.h>
5
+ #import <vector>
6
+
7
+ using namespace facebook;
8
+
9
+ class JSI_EXPORT UnistylesRuntime : public jsi::HostObject {
10
+ private:
11
+ UnistylesThemeChangeEvent onThemeChange;
12
+ UnistylesBreakpointChangeEvent onBreakpointChange;
13
+
14
+ int screenWidth;
15
+ int screenHeight;
16
+ std::string colorScheme;
17
+
18
+ public:
19
+ UnistylesRuntime(
20
+ UnistylesThemeChangeEvent onThemeChange,
21
+ UnistylesBreakpointChangeEvent onBreakpointChange,
22
+ float screenWidth,
23
+ float screenHeight,
24
+ std::string colorScheme
25
+ ): onThemeChange(onThemeChange),
26
+ onBreakpointChange(onBreakpointChange),
27
+ screenWidth(screenWidth),
28
+ screenHeight(screenHeight),
29
+ colorScheme(colorScheme) {}
30
+
31
+ bool hasAdaptiveThemes;
32
+ bool supportsAutomaticColorScheme;
33
+
34
+ std::string theme;
35
+ std::string breakpoint;
36
+ std::vector<std::string> themes;
37
+ std::vector<std::pair<std::string, double>> sortedBreakpointEntries;
38
+
39
+ jsi::Value get(jsi::Runtime&, const jsi::PropNameID& name) override;
40
+ void set(jsi::Runtime& runtime, const jsi::PropNameID& propNameId, const jsi::Value& value) override;
41
+ std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& runtime) override;
42
+
43
+ void handleScreenSizeChange(int width, int height);
44
+ void handleAppearanceChange(std::string colorScheme);
45
+
46
+ jsi::Value getThemeOrFail(jsi::Runtime&);
47
+ std::string getBreakpointFromScreenWidth(double width, const std::vector<std::pair<std::string, double>>& sortedBreakpointEntries);
48
+ };
@@ -0,0 +1,228 @@
1
+ #import "UnistylesRuntime.h"
2
+
3
+ std::vector<jsi::PropNameID> UnistylesRuntime::getPropertyNames(jsi::Runtime& rt) {
4
+ std::vector<jsi::PropNameID> properties;
5
+
6
+ // getters
7
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("screenWidth")));
8
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("screenHeight")));
9
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("hasAdaptiveThemes")));
10
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("theme")));
11
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("breakpoint")));
12
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("colorScheme")));
13
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("sortedBreakpointPairs")));
14
+
15
+ // setters
16
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("themes")));
17
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("useBreakpoints")));
18
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("useTheme")));
19
+ properties.push_back(jsi::PropNameID::forUtf8(rt, std::string("useAdaptiveThemes")));
20
+
21
+ return properties;
22
+ }
23
+
24
+
25
+ jsi::Value UnistylesRuntime::get(jsi::Runtime& runtime, const jsi::PropNameID& propNameId) {
26
+ std::string propName = propNameId.utf8(runtime);
27
+
28
+ if (propName == "screenWidth") {
29
+ return jsi::Value(this->screenWidth);
30
+ }
31
+
32
+ if (propName == "screenHeight") {
33
+ return jsi::Value(this->screenHeight);
34
+ }
35
+
36
+ if (propName == "hasAdaptiveThemes") {
37
+ return jsi::Value(this->hasAdaptiveThemes);
38
+ }
39
+
40
+ if (propName == "theme") {
41
+ return !this->theme.empty()
42
+ ? jsi::Value(jsi::String::createFromUtf8(runtime, this->theme))
43
+ : this->getThemeOrFail(runtime);
44
+ }
45
+
46
+ if (propName == "breakpoint") {
47
+ return !this->breakpoint.empty()
48
+ ? jsi::Value(jsi::String::createFromUtf8(runtime, this->breakpoint))
49
+ : jsi::Value::undefined();
50
+ }
51
+
52
+ if (propName == "colorScheme") {
53
+ return jsi::Value(jsi::String::createFromUtf8(runtime, this->colorScheme));
54
+ }
55
+
56
+ if (propName == "sortedBreakpointPairs") {
57
+ std::unique_ptr<jsi::Array> sortedBreakpointEntriesArray = std::make_unique<jsi::Array>(runtime, this->sortedBreakpointEntries.size());
58
+
59
+ for (size_t i = 0; i < this->sortedBreakpointEntries.size(); ++i) {
60
+ std::unique_ptr<jsi::Array> pairArray = std::make_unique<jsi::Array>(runtime, 2);
61
+ jsi::String nameValue = jsi::String::createFromUtf8(runtime, this->sortedBreakpointEntries[i].first);
62
+
63
+ pairArray->setValueAtIndex(runtime, 0, nameValue);
64
+ pairArray->setValueAtIndex(runtime, 1, jsi::Value(this->sortedBreakpointEntries[i].second));
65
+ sortedBreakpointEntriesArray->setValueAtIndex(runtime, i, *pairArray);
66
+ }
67
+
68
+ return jsi::Value(runtime, *sortedBreakpointEntriesArray);
69
+ }
70
+
71
+ if (propName == "useBreakpoints") {
72
+ return jsi::Function::createFromHostFunction(
73
+ runtime,
74
+ jsi::PropNameID::forAscii(runtime, "useBreakpoints"),
75
+ 1,
76
+ [this](jsi::Runtime &runtime, const jsi::Value &thisVal, const jsi::Value *arguments, size_t count) -> jsi::Value {
77
+ jsi::Object breakpointsObj = arguments[0].asObject(runtime);
78
+ jsi::Array propertyNames = breakpointsObj.getPropertyNames(runtime);
79
+ std::vector<std::pair<std::string, double>> sortedBreakpointEntriesVec;
80
+
81
+ for (size_t i = 0; i < propertyNames.size(runtime); ++i) {
82
+ jsi::Value propNameValue = propertyNames.getValueAtIndex(runtime, i);
83
+ std::string name = propNameValue.asString(runtime).utf8(runtime);
84
+ jsi::PropNameID propNameID = jsi::PropNameID::forUtf8(runtime, name);
85
+ jsi::Value value = breakpointsObj.getProperty(runtime, propNameID);
86
+
87
+ if (value.isNumber()) {
88
+ double breakpointValue = value.asNumber();
89
+ sortedBreakpointEntriesVec.push_back(std::make_pair(name, breakpointValue));
90
+ }
91
+ }
92
+
93
+ std::sort(sortedBreakpointEntriesVec.begin(), sortedBreakpointEntriesVec.end(), [](const std::pair<std::string, double>& a, const std::pair<std::string, double>& b) {
94
+ return a.second < b.second;
95
+ });
96
+
97
+ this->sortedBreakpointEntries = sortedBreakpointEntriesVec;
98
+
99
+ std::string breakpoint = this->getBreakpointFromScreenWidth(this->screenWidth, sortedBreakpointEntriesVec);
100
+
101
+ this->breakpoint = breakpoint;
102
+
103
+ return jsi::Value::undefined();
104
+ }
105
+ );
106
+ }
107
+
108
+ if (propName == "useTheme") {
109
+ return jsi::Function::createFromHostFunction(runtime,
110
+ jsi::PropNameID::forAscii(runtime, "useTheme"),
111
+ 1,
112
+ [this](jsi::Runtime &runtime, const jsi::Value &thisVal, const jsi::Value *arguments, size_t count) -> jsi::Value {
113
+ std::string themeName = arguments[0].asString(runtime).utf8(runtime);
114
+ NSString *currentTheme = [NSString stringWithUTF8String:themeName.c_str()];
115
+
116
+ this->theme = themeName;
117
+ this->onThemeChange(themeName);
118
+
119
+ return jsi::Value::undefined();
120
+ }
121
+ );
122
+ }
123
+
124
+ if (propName == "useAdaptiveThemes") {
125
+ return jsi::Function::createFromHostFunction(runtime,
126
+ jsi::PropNameID::forAscii(runtime, "useAdaptiveThemes"),
127
+ 1,
128
+ [this](jsi::Runtime &runtime, const jsi::Value &thisVal, const jsi::Value *arguments, size_t count) -> jsi::Value {
129
+ bool enableAdaptiveThemes = arguments[0].asBool();
130
+
131
+ this->hasAdaptiveThemes = enableAdaptiveThemes;
132
+
133
+ if (!enableAdaptiveThemes || !this->supportsAutomaticColorScheme) {
134
+ return jsi::Value::undefined();
135
+ }
136
+
137
+ this->theme = this->colorScheme;
138
+ // this->onThemeChange(this->theme);
139
+
140
+ return jsi::Value::undefined();
141
+ }
142
+ );
143
+ }
144
+
145
+ return jsi::Value::undefined();
146
+ }
147
+
148
+ void UnistylesRuntime::set(jsi::Runtime& runtime, const jsi::PropNameID& propNameId, const jsi::Value& value) {
149
+ std::string propName = propNameId.utf8(runtime);
150
+
151
+ if (propName == "themes" && value.isObject()) {
152
+ jsi::Array themes = value.asObject(runtime).asArray(runtime);
153
+ std::vector<std::string> themesVector;
154
+ size_t length = themes.size(runtime);
155
+
156
+ for (size_t i = 0; i < length; ++i) {
157
+ jsi::Value element = themes.getValueAtIndex(runtime, i);
158
+
159
+ if (element.isString()) {
160
+ std::string theme = element.asString(runtime).utf8(runtime);
161
+ themesVector.push_back(theme);
162
+ }
163
+ }
164
+
165
+ this->themes = themesVector;
166
+
167
+ bool hasLightTheme = std::find(themesVector.begin(), themesVector.end(), "light") != themesVector.end();
168
+ bool hasDarkTheme = std::find(themesVector.begin(), themesVector.end(), "dark") != themesVector.end();
169
+
170
+ this->supportsAutomaticColorScheme = hasLightTheme && hasDarkTheme;
171
+
172
+ return;
173
+ }
174
+ }
175
+
176
+ std::string UnistylesRuntime::getBreakpointFromScreenWidth(double width, const std::vector<std::pair<std::string, double>>& sortedBreakpointEntries) {
177
+ for (size_t i = 0; i < sortedBreakpointEntries.size(); ++i) {
178
+ const auto& [key, value] = sortedBreakpointEntries[i];
179
+ const double maxVal = (i + 1 < sortedBreakpointEntries.size()) ? sortedBreakpointEntries[i + 1].second : std::numeric_limits<double>::infinity();
180
+
181
+ if (width >= value && width < maxVal) {
182
+ return key;
183
+ }
184
+ }
185
+
186
+ return sortedBreakpointEntries.empty() ? "" : sortedBreakpointEntries.back().first;
187
+ }
188
+
189
+ void UnistylesRuntime::handleScreenSizeChange(int width, int height) {
190
+ if (width != this->screenWidth) {
191
+ this->screenWidth = width;
192
+ }
193
+
194
+ if (height != this->screenHeight) {
195
+ this->screenHeight = height;
196
+ }
197
+
198
+ std::string currentBreakpoint = this->breakpoint;
199
+ std::string nextBreakpoint = this->getBreakpointFromScreenWidth(width, this->sortedBreakpointEntries);
200
+
201
+ if (currentBreakpoint != nextBreakpoint) {
202
+ this->breakpoint = nextBreakpoint;
203
+ this->onBreakpointChange(nextBreakpoint);
204
+ }
205
+ }
206
+
207
+ void UnistylesRuntime::handleAppearanceChange(std::string colorScheme) {
208
+ this->colorScheme = colorScheme;
209
+
210
+ if (!this->supportsAutomaticColorScheme || !this->hasAdaptiveThemes) {
211
+ return;
212
+ }
213
+
214
+ this->theme = this->colorScheme;
215
+ this->onThemeChange(this->theme);
216
+ }
217
+
218
+ jsi::Value UnistylesRuntime::getThemeOrFail(jsi::Runtime& runtime) {
219
+ if (this->themes.size() == 1) {
220
+ std::string themeName = this->themes.at(0);
221
+
222
+ this->theme = themeName;
223
+
224
+ return jsi::String::createFromUtf8(runtime, themeName);
225
+ }
226
+
227
+ return jsi::Value().undefined();
228
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UnistyleRegistry = void 0;
7
+ class UnistyleRegistry {
8
+ config = {};
9
+ themes = {};
10
+ breakpoints = {};
11
+ sortedBreakpointPairs = [];
12
+ constructor(unistylesBridge) {
13
+ this.unistylesBridge = unistylesBridge;
14
+ }
15
+ addThemes = themes => {
16
+ this.themes = themes;
17
+ this.unistylesBridge.themes = Object.keys(themes);
18
+ return this;
19
+ };
20
+ addBreakpoints = breakpoints => {
21
+ this.unistylesBridge.useBreakpoints(breakpoints);
22
+ this.sortedBreakpointPairs = this.unistylesBridge.sortedBreakpointPairs;
23
+ return this;
24
+ };
25
+ addConfig = config => {
26
+ this.config = config;
27
+ if (config.adaptiveThemes) {
28
+ this.unistylesBridge.useAdaptiveThemes(config.adaptiveThemes);
29
+ }
30
+ return this;
31
+ };
32
+ }
33
+ exports.UnistyleRegistry = UnistyleRegistry;
34
+ //# sourceMappingURL=UnistyleRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UnistyleRegistry","config","themes","breakpoints","sortedBreakpointPairs","constructor","unistylesBridge","addThemes","Object","keys","addBreakpoints","useBreakpoints","addConfig","adaptiveThemes","useAdaptiveThemes","exports"],"sourceRoot":"../../src","sources":["UnistyleRegistry.ts"],"mappings":";;;;;;AAGO,MAAMA,gBAAgB,CAAC;EACnBC,MAAM,GAAoB,CAAC,CAAC;EAC5BC,MAAM,GAAoB,CAAC,CAAC;EAC5BC,WAAW,GAAyB,CAAC,CAAC;EACtCC,qBAAqB,GAA0F,EAAE;EAExHC,WAAWA,CAASC,eAAgC,EAAE;IAAA,KAAlCA,eAAgC,GAAhCA,eAAgC;EAAG;EAEhDC,SAAS,GAAIL,MAAuB,IAAK;IAC5C,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACI,eAAe,CAACJ,MAAM,GAAGM,MAAM,CAACC,IAAI,CAACP,MAAM,CAAiC;IAEjF,OAAO,IAAI;EACf,CAAC;EAEMQ,cAAc,GAAIP,WAAiC,IAAK;IAC3D,IAAI,CAACG,eAAe,CAACK,cAAc,CAACR,WAAW,CAAC;IAChD,IAAI,CAACC,qBAAqB,GAAG,IAAI,CAACE,eAAe,CAACF,qBAAqB;IAEvE,OAAO,IAAI;EACf,CAAC;EAEMQ,SAAS,GAAIX,MAAuB,IAAK;IAC5C,IAAI,CAACA,MAAM,GAAGA,MAAM;IAEpB,IAAIA,MAAM,CAACY,cAAc,EAAE;MACvB,IAAI,CAACP,eAAe,CAACQ,iBAAiB,CAACb,MAAM,CAACY,cAAc,CAAC;IACjE;IAEA,OAAO,IAAI;EACf,CAAC;AACL;AAACE,OAAA,CAAAf,gBAAA,GAAAA,gBAAA"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.unistyles = void 0;
7
+ var _UnistylesModule = require("./UnistylesModule");
8
+ var _UnistylesRuntime = require("./UnistylesRuntime");
9
+ var _UnistylesEngine = require("./UnistylesEngine");
10
+ var _UnistyleRegistry = require("./UnistyleRegistry");
11
+ var _types = require("./types");
12
+ class Unistyles {
13
+ constructor() {
14
+ const isInstalled = _UnistylesModule.UnistylesModule?.install() ?? false;
15
+ if (!isInstalled) {
16
+ throw new Error(_types.UnistylesError.RuntimeUnavailable);
17
+ }
18
+
19
+ // @ts-ignore
20
+ this._bridge = global.__UNISTYLES__;
21
+ this._registry = new _UnistyleRegistry.UnistyleRegistry(this._bridge);
22
+ this._runtime = new _UnistylesRuntime.UnistylesRuntime(this._bridge, this._registry);
23
+ this._engine = new _UnistylesEngine.UnistylesEngine(this._registry, this._runtime);
24
+ }
25
+ get registry() {
26
+ return this._registry;
27
+ }
28
+ get runtime() {
29
+ return this._runtime;
30
+ }
31
+ get engine() {
32
+ return this._engine;
33
+ }
34
+ }
35
+ const unistyles = exports.unistyles = new Unistyles();
36
+ //# sourceMappingURL=Unistyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_UnistylesModule","require","_UnistylesRuntime","_UnistylesEngine","_UnistyleRegistry","_types","Unistyles","constructor","isInstalled","UnistylesModule","install","Error","UnistylesError","RuntimeUnavailable","_bridge","global","__UNISTYLES__","_registry","UnistyleRegistry","_runtime","UnistylesRuntime","_engine","UnistylesEngine","registry","runtime","engine","unistyles","exports"],"sourceRoot":"../../src","sources":["Unistyles.ts"],"mappings":";;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AAEA,MAAMK,SAAS,CAAC;EAMZC,WAAWA,CAAA,EAAG;IACV,MAAMC,WAAW,GAAGC,gCAAe,EAAEC,OAAO,CAAC,CAAC,IAAI,KAAK;IAEvD,IAAI,CAACF,WAAW,EAAE;MACd,MAAM,IAAIG,KAAK,CAACC,qBAAc,CAACC,kBAAkB,CAAC;IACtD;;IAEA;IACA,IAAI,CAACC,OAAO,GAAGC,MAAM,CAACC,aAAgC;IACtD,IAAI,CAACC,SAAS,GAAG,IAAIC,kCAAgB,CAAC,IAAI,CAACJ,OAAO,CAAC;IACnD,IAAI,CAACK,QAAQ,GAAG,IAAIC,kCAAgB,CAAC,IAAI,CAACN,OAAO,EAAE,IAAI,CAACG,SAAS,CAAC;IAClE,IAAI,CAACI,OAAO,GAAG,IAAIC,gCAAe,CAAC,IAAI,CAACL,SAAS,EAAE,IAAI,CAACE,QAAQ,CAAC;EACrE;EAEA,IAAWI,QAAQA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACN,SAAS;EACzB;EAEA,IAAWO,OAAOA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACL,QAAQ;EACxB;EAEA,IAAWM,MAAMA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACJ,OAAO;EACvB;AACJ;AAEO,MAAMK,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,IAAIpB,SAAS,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UnistylesEngine = void 0;
7
+ // todo implement engine
8
+ class UnistylesEngine {
9
+ // @ts-ignore
10
+ constructor(registry, runtime) {
11
+ this.registry = registry;
12
+ this.runtime = runtime;
13
+ this.registry = registry;
14
+ this.runtime = runtime;
15
+ }
16
+
17
+ // UnistylesEngine.parseStyleSheet
18
+ // UnistylesEngine.parseStyle
19
+ // UnistylesEngine.proxify
20
+ }
21
+ exports.UnistylesEngine = UnistylesEngine;
22
+ //# sourceMappingURL=UnistylesEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UnistylesEngine","constructor","registry","runtime","exports"],"sourceRoot":"../../src","sources":["UnistylesEngine.ts"],"mappings":";;;;;;AAGA;AACO,MAAMA,eAAe,CAAC;EACzB;EACAC,WAAWA,CAASC,QAA0B,EAAUC,OAAyB,EAAE;IAAA,KAA/DD,QAA0B,GAA1BA,QAA0B;IAAA,KAAUC,OAAyB,GAAzBA,OAAyB;IAC7E,IAAI,CAACD,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAGA,OAAO;EAC1B;;EAEA;EACA;EACA;AACJ;AAACC,OAAA,CAAAJ,eAAA,GAAAA,eAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UnistylesModule = void 0;
7
+ var _reactNative = require("react-native");
8
+ const UnistylesModule = exports.UnistylesModule = _reactNative.NativeModules?.Unistyles;
9
+ //# sourceMappingURL=UnistylesModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","UnistylesModule","exports","NativeModules","Unistyles"],"sourceRoot":"../../src","sources":["UnistylesModule.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAMO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAGE,0BAAa,EAAEC,SAAkC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.UnistylesRuntime = void 0;
7
+ var _types = require("./types");
8
+ class UnistylesRuntime {
9
+ constructor(unistylesBridge, registry) {
10
+ this.unistylesBridge = unistylesBridge;
11
+ this.registry = registry;
12
+ }
13
+ get colorScheme() {
14
+ return this.unistylesBridge.colorScheme;
15
+ }
16
+ get hasAdaptiveThemes() {
17
+ return this.unistylesBridge.hasAdaptiveThemes;
18
+ }
19
+ get sortedBreakpoints() {
20
+ return this.registry.sortedBreakpointPairs;
21
+ }
22
+ get themeName() {
23
+ return this.unistylesBridge.theme;
24
+ }
25
+ get breakpoint() {
26
+ return this.unistylesBridge.breakpoint;
27
+ }
28
+ get screen() {
29
+ return {
30
+ width: this.unistylesBridge.screenWidth,
31
+ height: this.unistylesBridge.screenHeight
32
+ };
33
+ }
34
+ get orientation() {
35
+ const {
36
+ width,
37
+ height
38
+ } = this.screen;
39
+ if (width > height) {
40
+ return _types.ScreenOrientation.Landscape;
41
+ }
42
+ return _types.ScreenOrientation.Portrait;
43
+ }
44
+ setTheme = name => {
45
+ if (name !== this.themeName && this.hasTheme(name)) {
46
+ this.unistylesBridge.useTheme(name);
47
+ return true;
48
+ }
49
+ return false;
50
+ };
51
+ getTheme = forName => {
52
+ if (!this.hasTheme(forName)) {
53
+ throw new Error(_types.UnistylesError.ThemeNotFound);
54
+ }
55
+ return this.registry.themes[forName];
56
+ };
57
+ setAdaptiveThemes = enable => {
58
+ this.unistylesBridge.useAdaptiveThemes(enable);
59
+ };
60
+ hasTheme = name => name in this.registry.themes;
61
+ }
62
+ exports.UnistylesRuntime = UnistylesRuntime;
63
+ //# sourceMappingURL=UnistylesRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","UnistylesRuntime","constructor","unistylesBridge","registry","colorScheme","hasAdaptiveThemes","sortedBreakpoints","sortedBreakpointPairs","themeName","theme","breakpoint","screen","width","screenWidth","height","screenHeight","orientation","ScreenOrientation","Landscape","Portrait","setTheme","name","hasTheme","useTheme","getTheme","forName","Error","UnistylesError","ThemeNotFound","themes","setAdaptiveThemes","enable","useAdaptiveThemes","exports"],"sourceRoot":"../../src","sources":["UnistylesRuntime.ts"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAGO,MAAMC,gBAAgB,CAAC;EAC1BC,WAAWA,CAASC,eAAgC,EAAUC,QAA0B,EAAE;IAAA,KAAtED,eAAgC,GAAhCA,eAAgC;IAAA,KAAUC,QAA0B,GAA1BA,QAA0B;EAAG;EAE3F,IAAWC,WAAWA,CAAA,EAAG;IACrB,OAAO,IAAI,CAACF,eAAe,CAACE,WAAW;EAC3C;EAEA,IAAWC,iBAAiBA,CAAA,EAAG;IAC3B,OAAO,IAAI,CAACH,eAAe,CAACG,iBAAiB;EACjD;EAEA,IAAWC,iBAAiBA,CAAA,EAAG;IAC3B,OAAO,IAAI,CAACH,QAAQ,CAACI,qBAAqB;EAC9C;EAEA,IAAWC,SAASA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACN,eAAe,CAACO,KAAK;EACrC;EAEA,IAAWC,UAAUA,CAAA,EAAG;IACpB,OAAO,IAAI,CAACR,eAAe,CAACQ,UAAU;EAC1C;EAEA,IAAWC,MAAMA,CAAA,EAAG;IAChB,OAAO;MACHC,KAAK,EAAE,IAAI,CAACV,eAAe,CAACW,WAAW;MACvCC,MAAM,EAAE,IAAI,CAACZ,eAAe,CAACa;IACjC,CAAC;EACL;EAEA,IAAWC,WAAWA,CAAA,EAAG;IACrB,MAAM;MAAEJ,KAAK;MAAEE;IAAO,CAAC,GAAG,IAAI,CAACH,MAAM;IAErC,IAAIC,KAAK,GAAGE,MAAM,EAAE;MAChB,OAAOG,wBAAiB,CAACC,SAAS;IACtC;IAEA,OAAOD,wBAAiB,CAACE,QAAQ;EACrC;EAEOC,QAAQ,GAAIC,IAA2B,IAAK;IAC/C,IAAIA,IAAI,KAAK,IAAI,CAACb,SAAS,IAAI,IAAI,CAACc,QAAQ,CAACD,IAAI,CAAC,EAAE;MAChD,IAAI,CAACnB,eAAe,CAACqB,QAAQ,CAACF,IAAI,CAAC;MAEnC,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB,CAAC;EAEMG,QAAQ,GAAIC,OAA8B,IAAK;IAClD,IAAI,CAAC,IAAI,CAACH,QAAQ,CAACG,OAAO,CAAC,EAAE;MACzB,MAAM,IAAIC,KAAK,CAACC,qBAAc,CAACC,aAAa,CAAC;IACjD;IAEA,OAAO,IAAI,CAACzB,QAAQ,CAAC0B,MAAM,CAACJ,OAAO,CAAC;EACxC,CAAC;EAEMK,iBAAiB,GAAIC,MAAe,IAAK;IAC5C,IAAI,CAAC7B,eAAe,CAAC8B,iBAAiB,CAACD,MAAM,CAAC;EAClD,CAAC;EAEOT,QAAQ,GAAID,IAA2B,IAAKA,IAAI,IAAI,IAAI,CAAClB,QAAQ,CAAC0B,MAAM;AACpF;AAACI,OAAA,CAAAjC,gBAAA,GAAAA,gBAAA"}