react-native-unistyles 3.0.0-nightly-20250520 → 3.0.0-nightly-20250526
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/README.md +9 -6
- package/android/src/main/cxx/NativeUnistylesModule.cpp +3 -7
- package/android/src/main/cxx/NativeUnistylesModule.h +0 -4
- package/android/src/main/java/com/unistyles/UnistylesModule.kt +1 -7
- package/cxx/core/UnistylesCommitShadowNode.h +0 -21
- package/cxx/core/UnistylesRegistry.cpp +45 -43
- package/cxx/hybridObjects/HybridStyleSheet.cpp +0 -13
- package/cxx/hybridObjects/HybridStyleSheet.h +2 -7
- package/cxx/parser/Parser.cpp +150 -107
- package/cxx/shadowTree/ShadowTreeManager.cpp +36 -33
- package/cxx/shadowTree/ShadowTreeManager.h +0 -1
- package/ios/UnistylesModuleOnLoad.h +1 -5
- package/ios/UnistylesModuleOnLoad.mm +5 -13
- package/lib/commonjs/components/ScopedTheme.js +1 -2
- package/lib/commonjs/components/ScopedTheme.js.map +1 -1
- package/lib/commonjs/components/native/Image.js +1 -2
- package/lib/commonjs/components/native/Image.js.map +1 -1
- package/lib/commonjs/components/native/ImageBackground.js +1 -2
- package/lib/commonjs/components/native/ImageBackground.js.map +1 -1
- package/lib/commonjs/components/native/Pressable.js +1 -2
- package/lib/commonjs/components/native/Pressable.js.map +1 -1
- package/lib/commonjs/components/native/Pressable.native.js +1 -2
- package/lib/commonjs/components/native/Pressable.native.js.map +1 -1
- package/lib/commonjs/core/createUnistylesElement.native.js +2 -28
- package/lib/commonjs/core/createUnistylesElement.native.js.map +1 -1
- package/lib/commonjs/core/createUnistylesImageBackground.js +6 -21
- package/lib/commonjs/core/createUnistylesImageBackground.js.map +1 -1
- package/lib/commonjs/core/getClassname.js +1 -2
- package/lib/commonjs/core/getClassname.js.map +1 -1
- package/lib/commonjs/core/useProxifiedUnistyles/listener.js +1 -2
- package/lib/commonjs/core/useProxifiedUnistyles/listener.js.map +1 -1
- package/lib/commonjs/core/withUnistyles/withUnistyles.js +1 -2
- package/lib/commonjs/core/withUnistyles/withUnistyles.js.map +1 -1
- package/lib/commonjs/core/withUnistyles/withUnistyles.native.js +1 -2
- package/lib/commonjs/core/withUnistyles/withUnistyles.native.js.map +1 -1
- package/lib/commonjs/index.js +6 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/server/getServerUnistyles.js +1 -2
- package/lib/commonjs/server/getServerUnistyles.js.map +1 -1
- package/lib/commonjs/server/hydrateServerUnistyles.js +1 -2
- package/lib/commonjs/server/hydrateServerUnistyles.js.map +1 -1
- package/lib/commonjs/server/resetServerUnistyles.js +1 -2
- package/lib/commonjs/server/resetServerUnistyles.js.map +1 -1
- package/lib/commonjs/web/create.js +1 -2
- package/lib/commonjs/web/create.js.map +1 -1
- package/lib/commonjs/web/index.js +1 -2
- package/lib/commonjs/web/index.js.map +1 -1
- package/lib/commonjs/web/shadowRegistry.js +1 -1
- package/lib/commonjs/web/shadowRegistry.js.map +1 -1
- package/lib/commonjs/web/utils/createUnistylesRef.js +1 -2
- package/lib/commonjs/web/utils/createUnistylesRef.js.map +1 -1
- package/lib/commonjs/web/utils/unistyle.js +1 -2
- package/lib/commonjs/web/utils/unistyle.js.map +1 -1
- package/lib/module/core/createUnistylesElement.native.js +1 -26
- package/lib/module/core/createUnistylesElement.native.js.map +1 -1
- package/lib/module/core/createUnistylesImageBackground.js +5 -19
- package/lib/module/core/createUnistylesImageBackground.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/web/shadowRegistry.js +1 -1
- package/lib/module/web/shadowRegistry.js.map +1 -1
- package/lib/typescript/src/components/native/Animated.d.ts.map +1 -1
- package/lib/typescript/src/core/createUnistylesElement.d.ts.map +1 -1
- package/lib/typescript/src/core/createUnistylesElement.native.d.ts.map +1 -1
- package/lib/typescript/src/core/createUnistylesImageBackground.d.ts.map +1 -1
- package/lib/typescript/src/core/getClassname.d.ts.map +1 -1
- package/lib/typescript/src/core/passForwardRef.d.ts.map +1 -1
- package/lib/typescript/src/core/useProxifiedUnistyles/listener.d.ts.map +1 -1
- package/lib/typescript/src/core/useProxifiedUnistyles/listener.native.d.ts.map +1 -1
- package/lib/typescript/src/core/useProxifiedUnistyles/useProxifiedUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/core/warn.d.ts.map +1 -1
- package/lib/typescript/src/core/withUnistyles/withUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/core/withUnistyles/withUnistyles.native.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useMedia.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useMedia.native.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/server/getServerUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/server/serialize.d.ts.map +1 -1
- package/lib/typescript/src/server/useServerUnistyles.d.ts.map +1 -1
- package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
- package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/index.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/object/boxShadow.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/object/filter.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/object/objectStyle.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/object/transform.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/shadow/textShadow.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/style.d.ts.map +1 -1
- package/lib/typescript/src/web/convert/utils.d.ts.map +1 -1
- package/lib/typescript/src/web/create.d.ts.map +1 -1
- package/lib/typescript/src/web/css/core.d.ts.map +1 -1
- package/lib/typescript/src/web/css/state.d.ts.map +1 -1
- package/lib/typescript/src/web/css/utils.d.ts.map +1 -1
- package/lib/typescript/src/web/listener.d.ts.map +1 -1
- package/lib/typescript/src/web/registry.d.ts.map +1 -1
- package/lib/typescript/src/web/runtime.d.ts.map +1 -1
- package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -1
- package/lib/typescript/src/web/state.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/common.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/createUnistylesRef.d.ts.map +1 -1
- package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -1
- package/lib/typescript/src/web/variants.d.ts.map +1 -1
- package/lib/typescript/src/web-only/getWebProps.d.ts.map +1 -1
- package/package.json +17 -20
- package/plugin/index.d.ts +5 -4
- package/plugin/index.js +9 -1
- package/src/core/createUnistylesElement.native.tsx +1 -29
- package/src/core/createUnistylesImageBackground.tsx +7 -22
- package/src/index.ts +8 -0
- package/src/web/shadowRegistry.ts +1 -1
- package/cxx/core/UnistylesCommitHook.cpp +0 -59
- package/cxx/core/UnistylesCommitHook.h +0 -27
- package/cxx/core/UnistylesMountHook.cpp +0 -26
- package/cxx/core/UnistylesMountHook.h +0 -24
- package/lib/module/package.json +0 -1
package/cxx/parser/Parser.cpp
CHANGED
@@ -213,113 +213,115 @@ void parser::Parser::rebuildUnistyleWithVariants(jsi::Runtime& rt, std::shared_p
|
|
213
213
|
}
|
214
214
|
|
215
215
|
// rebuild all unistyles that are affected by platform event
|
216
|
-
void parser::Parser::rebuildUnistylesInDependencyMap(
|
217
|
-
|
218
|
-
|
219
|
-
std::
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
216
|
+
void parser::Parser::rebuildUnistylesInDependencyMap(
|
217
|
+
jsi::Runtime& rt,
|
218
|
+
DependencyMap& dependencyMap,
|
219
|
+
std::vector<std::shared_ptr<core::StyleSheet>>& styleSheets,
|
220
|
+
std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime
|
221
|
+
) {
|
222
|
+
std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value> parsedStyleSheetsWithDefaultTheme;
|
223
|
+
std::unordered_map<std::string, std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value>> parsedStyleSheetsWithScopedTheme;
|
224
|
+
std::unordered_set<std::shared_ptr<core::Unistyle>> parsedUnistyles;
|
225
|
+
|
226
|
+
// Parse all stylesheets that depend on changes
|
227
|
+
for (const auto& styleSheet : styleSheets) {
|
228
|
+
parsedStyleSheetsWithDefaultTheme.emplace(
|
229
|
+
styleSheet,
|
230
|
+
this->unwrapStyleSheet(rt, styleSheet, maybeMiniRuntime)
|
231
|
+
);
|
224
232
|
}
|
225
233
|
|
226
|
-
//
|
234
|
+
// Parse all visible Unistyles managed by Unistyle
|
227
235
|
for (auto& [shadowNode, unistyles] : dependencyMap) {
|
228
|
-
auto styleSheet = unistyles.
|
236
|
+
auto styleSheet = unistyles.front()->unistyle->parent;
|
229
237
|
|
230
|
-
//
|
231
|
-
if (styleSheet
|
232
|
-
parsedStyleSheetsWithDefaultTheme.emplace(
|
238
|
+
// Stylesheet may be optional for exotic unistyles
|
239
|
+
if (styleSheet && parsedStyleSheetsWithDefaultTheme.find(styleSheet) == parsedStyleSheetsWithDefaultTheme.end()) {
|
240
|
+
parsedStyleSheetsWithDefaultTheme.emplace(
|
241
|
+
styleSheet,
|
242
|
+
this->unwrapStyleSheet(rt, styleSheet, maybeMiniRuntime)
|
243
|
+
);
|
233
244
|
}
|
234
245
|
|
235
246
|
for (auto& unistyleData : unistyles) {
|
236
247
|
auto& unistyle = unistyleData->unistyle;
|
237
248
|
|
238
|
-
//
|
249
|
+
// For RN styles or inline styles, compute styles only once
|
239
250
|
if (unistyle->styleKey == helpers::EXOTIC_STYLE_KEY) {
|
240
251
|
if (!unistyleData->parsedStyle.has_value()) {
|
241
252
|
unistyleData->parsedStyle = jsi::Value(rt, unistyle->rawValue).asObject(rt);
|
242
|
-
|
243
|
-
if (!parsedUnistyles.contains(unistyle)) {
|
244
|
-
parsedUnistyles.emplace(unistyle, true);
|
245
|
-
}
|
253
|
+
parsedUnistyles.insert(unistyle);
|
246
254
|
}
|
247
255
|
|
248
256
|
continue;
|
249
257
|
}
|
250
258
|
|
251
|
-
//
|
259
|
+
// Reference Unistyles StyleSheet as we may mix them for one style
|
252
260
|
auto unistyleStyleSheet = unistyle->parent;
|
253
261
|
|
254
|
-
//
|
255
|
-
if (unistyleStyleSheet
|
256
|
-
parsedStyleSheetsWithDefaultTheme.emplace(
|
262
|
+
// We may hit now other StyleSheets that are referenced from affected nodes
|
263
|
+
if (unistyleStyleSheet && parsedStyleSheetsWithDefaultTheme.find(unistyleStyleSheet) == parsedStyleSheetsWithDefaultTheme.end()) {
|
264
|
+
parsedStyleSheetsWithDefaultTheme.emplace(
|
265
|
+
unistyleStyleSheet,
|
266
|
+
this->unwrapStyleSheet(rt, unistyleStyleSheet, maybeMiniRuntime)
|
267
|
+
);
|
257
268
|
}
|
258
269
|
|
259
270
|
// StyleSheet might have styles that are not affected
|
260
|
-
|
271
|
+
auto& parsedSheetValue = parsedStyleSheetsWithDefaultTheme[unistyleStyleSheet];
|
272
|
+
auto parsedSheetObj = parsedSheetValue.asObject(rt);
|
273
|
+
|
274
|
+
if (!parsedSheetObj.hasProperty(rt, unistyle->styleKey.c_str())) {
|
261
275
|
continue;
|
262
276
|
}
|
263
277
|
|
264
|
-
//
|
278
|
+
// For scoped themes we need to parse unistyle exclusively
|
265
279
|
if (unistyleData->scopedTheme.has_value()) {
|
266
|
-
|
280
|
+
auto& scopedThemeName = unistyleData->scopedTheme.value();
|
281
|
+
auto& scopedThemeMap = parsedStyleSheetsWithScopedTheme[scopedThemeName];
|
267
282
|
|
268
|
-
|
269
|
-
|
270
|
-
}
|
283
|
+
jsi::Value parsedStyleSheet = jsi::Value::undefined();
|
284
|
+
auto it = scopedThemeMap.find(unistyle->parent);
|
271
285
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
// check if we have theme in cache
|
276
|
-
if (parsedStyleSheetsWithScopedTheme.contains(scopedThemeName)) {
|
277
|
-
if (parsedStyleSheetsWithScopedTheme[scopedThemeName].contains(unistyle->parent)) {
|
278
|
-
parsedStyleSheet = jsi::Value(rt, parsedStyleSheetsWithScopedTheme[scopedThemeName][unistyle->parent]);
|
279
|
-
}
|
286
|
+
if (it != scopedThemeMap.end()) {
|
287
|
+
parsedStyleSheet = jsi::Value(rt, it->second);
|
280
288
|
}
|
281
289
|
|
282
|
-
// if not, let's build it
|
283
290
|
if (parsedStyleSheet.isUndefined()) {
|
284
|
-
parsedStyleSheet = this->getParsedStyleSheetForScopedTheme(rt, unistyle,
|
285
|
-
|
286
|
-
if (!parsedStyleSheetsWithScopedTheme.contains(scopedThemeName)) {
|
287
|
-
parsedStyleSheetsWithScopedTheme.emplace(
|
288
|
-
scopedThemeName,
|
289
|
-
std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value>{}
|
290
|
-
);
|
291
|
-
}
|
292
|
-
|
293
|
-
parsedStyleSheetsWithScopedTheme[scopedThemeName].emplace(
|
291
|
+
parsedStyleSheet = this->getParsedStyleSheetForScopedTheme(rt, unistyle, scopedThemeName);
|
292
|
+
scopedThemeMap.emplace(
|
294
293
|
unistyle->parent,
|
295
294
|
jsi::Value(rt, parsedStyleSheet)
|
296
295
|
);
|
297
296
|
}
|
298
297
|
|
299
|
-
this->rebuildUnistyleWithScopedTheme(
|
300
|
-
rt,
|
301
|
-
parsedStyleSheet,
|
302
|
-
unistyleData
|
303
|
-
);
|
298
|
+
this->rebuildUnistyleWithScopedTheme(rt, parsedStyleSheet, unistyleData);
|
304
299
|
} else {
|
305
|
-
unistyle->rawValue =
|
306
|
-
|
300
|
+
unistyle->rawValue = parsedSheetObj
|
301
|
+
.getProperty(rt, unistyle->styleKey.c_str())
|
302
|
+
.asObject(rt);
|
303
|
+
this->rebuildUnistyle(
|
304
|
+
rt, unistyle, unistyleData->variants,
|
305
|
+
unistyleData->dynamicFunctionMetadata
|
306
|
+
);
|
307
307
|
unistyleData->parsedStyle = jsi::Value(rt, unistyle->parsedStyle.value()).asObject(rt);
|
308
308
|
unistyle->isDirty = true;
|
309
309
|
}
|
310
310
|
|
311
|
-
|
312
|
-
parsedUnistyles.emplace(unistyle, true);
|
313
|
-
}
|
311
|
+
parsedUnistyles.insert(unistyle);
|
314
312
|
}
|
315
313
|
}
|
316
314
|
|
317
|
-
//
|
318
|
-
|
319
|
-
|
315
|
+
// Parse whatever left in StyleSheets to be later accessible
|
316
|
+
for (const auto& styleSheet : styleSheets) {
|
317
|
+
auto& parsedSheetValue = parsedStyleSheetsWithDefaultTheme[styleSheet];
|
318
|
+
auto parsedSheetObj = parsedSheetValue.asObject(rt);
|
319
|
+
|
320
320
|
for (auto& [_, unistyle] : styleSheet->unistyles) {
|
321
321
|
if (!parsedUnistyles.contains(unistyle)) {
|
322
|
-
unistyle->rawValue =
|
322
|
+
unistyle->rawValue = parsedSheetObj
|
323
|
+
.getProperty(rt, unistyle->styleKey.c_str())
|
324
|
+
.asObject(rt);
|
323
325
|
unistyle->isDirty = true;
|
324
326
|
}
|
325
327
|
}
|
@@ -372,11 +374,12 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, Unistyle::Shared unistyle
|
|
372
374
|
void parser::Parser::rebuildShadowLeafUpdates(jsi::Runtime& rt, core::DependencyMap& dependencyMap) {
|
373
375
|
auto& registry = core::UnistylesRegistry::get();
|
374
376
|
|
375
|
-
registry.trafficController.withLock([this, &rt, &dependencyMap, ®istry](){
|
377
|
+
registry.trafficController.withLock([this, &rt, &dependencyMap, ®istry]() {
|
376
378
|
shadow::ShadowLeafUpdates updates;
|
377
|
-
|
379
|
+
updates.reserve(dependencyMap.size());
|
380
|
+
|
378
381
|
for (const auto& [shadowNode, unistyles] : dependencyMap) {
|
379
|
-
//
|
382
|
+
// Parse string colors (e.g., "#000000") to int representation
|
380
383
|
auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyles);
|
381
384
|
|
382
385
|
updates.emplace(shadowNode, std::move(rawProps));
|
@@ -387,6 +390,7 @@ void parser::Parser::rebuildShadowLeafUpdates(jsi::Runtime& rt, core::Dependency
|
|
387
390
|
});
|
388
391
|
}
|
389
392
|
|
393
|
+
|
390
394
|
// first level of StyleSheet, we can expect here different properties than on second level
|
391
395
|
// eg. variants, compoundVariants, mq, breakpoints etc.
|
392
396
|
jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, std::optional<Variants> variants) {
|
@@ -884,13 +888,13 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
|
|
884
888
|
|
885
889
|
return;
|
886
890
|
}
|
887
|
-
|
891
|
+
|
888
892
|
auto isArray = nestedObjectStyle.isArray(rt);
|
889
|
-
|
893
|
+
|
890
894
|
if (!isArray) {
|
891
895
|
parsedStyle.setProperty(rt, propertyName.c_str(), this->getValueFromBreakpoints(rt, unistyle, nestedObjectStyle));
|
892
896
|
}
|
893
|
-
|
897
|
+
|
894
898
|
// possible with variants and compoundVariants
|
895
899
|
if (propertyName == "transform") {
|
896
900
|
parsedStyle.setProperty(rt, propertyName.c_str(), parseTransforms(rt, unistyle, nestedObjectStyle));
|
@@ -928,69 +932,108 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
|
|
928
932
|
|
929
933
|
// convert unistyles to folly with int colors
|
930
934
|
folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles) {
|
931
|
-
jsi::Object convertedStyles
|
935
|
+
jsi::Object convertedStyles(rt);
|
932
936
|
auto& state = core::UnistylesRegistry::get().getState(rt);
|
933
937
|
|
934
938
|
for (const auto& unistyleData : unistyles) {
|
935
|
-
// this can happen for exotic stylesheets
|
936
939
|
if (!unistyleData->parsedStyle.has_value()) {
|
937
940
|
continue;
|
938
941
|
}
|
939
942
|
|
940
|
-
helpers::enumerateJSIObject(
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
if (!objValue.isArray(rt)) {
|
952
|
-
return convertedStyles.setProperty(rt, propertyName.c_str(), propertyValue);
|
953
|
-
}
|
954
|
-
|
955
|
-
// parse nested arrays like boxShadow
|
956
|
-
auto arrValue = objValue.asArray(rt);
|
957
|
-
auto parsedArray = jsi::Array(rt, arrValue.length(rt));
|
943
|
+
helpers::enumerateJSIObject(
|
944
|
+
rt,
|
945
|
+
unistyleData->parsedStyle.value(),
|
946
|
+
[this, &rt, &state, &convertedStyles](const std::string& propertyName, jsi::Value& propertyValue) {
|
947
|
+
if (this->isColor(propertyName)) {
|
948
|
+
convertedStyles.setProperty(
|
949
|
+
rt,
|
950
|
+
propertyName.c_str(),
|
951
|
+
jsi::Value(state.parseColor(propertyValue))
|
952
|
+
);
|
958
953
|
|
959
|
-
|
960
|
-
|
961
|
-
jsi::Object obj = jsi::Object(rt);
|
954
|
+
return;
|
955
|
+
}
|
962
956
|
|
963
|
-
|
964
|
-
|
965
|
-
|
957
|
+
if (!propertyValue.isObject()) {
|
958
|
+
convertedStyles.setProperty(
|
959
|
+
rt,
|
960
|
+
propertyName.c_str(),
|
961
|
+
propertyValue
|
962
|
+
);
|
966
963
|
|
967
|
-
|
968
|
-
|
964
|
+
return;
|
965
|
+
}
|
969
966
|
|
970
|
-
|
971
|
-
});
|
967
|
+
jsi::Object objValue = propertyValue.asObject(rt);
|
972
968
|
|
973
|
-
|
969
|
+
if (!objValue.isArray(rt)) {
|
970
|
+
convertedStyles.setProperty(
|
971
|
+
rt,
|
972
|
+
propertyName.c_str(),
|
973
|
+
propertyValue
|
974
|
+
);
|
974
975
|
|
975
976
|
return;
|
976
977
|
}
|
977
978
|
|
978
|
-
|
979
|
-
|
979
|
+
// parse nested arrays like boxShadow
|
980
|
+
jsi::Array arrValue = objValue.asArray(rt);
|
981
|
+
size_t arrLen = arrValue.length(rt);
|
982
|
+
jsi::Array parsedArray(rt, arrLen);
|
980
983
|
|
981
|
-
|
982
|
-
|
984
|
+
helpers::iterateJSIArray(
|
985
|
+
rt,
|
986
|
+
arrValue,
|
987
|
+
[this, &rt, &state, &propertyName, &parsedArray](size_t i, jsi::Value& nestedValue) {
|
988
|
+
if (nestedValue.isObject()) {
|
989
|
+
jsi::Object obj(rt);
|
990
|
+
|
991
|
+
helpers::enumerateJSIObject(
|
992
|
+
rt,
|
993
|
+
nestedValue.asObject(rt),
|
994
|
+
[this, &rt, &state, &obj](const std::string& nestedPropName, jsi::Value& nestedPropValue) {
|
995
|
+
if (this->isColor(nestedPropName)) {
|
996
|
+
obj.setProperty(
|
997
|
+
rt,
|
998
|
+
nestedPropName.c_str(),
|
999
|
+
state.parseColor(nestedPropValue)
|
1000
|
+
);
|
1001
|
+
} else {
|
1002
|
+
obj.setProperty(
|
1003
|
+
rt,
|
1004
|
+
nestedPropName.c_str(),
|
1005
|
+
nestedPropValue
|
1006
|
+
);
|
1007
|
+
}
|
1008
|
+
}
|
1009
|
+
);
|
1010
|
+
|
1011
|
+
parsedArray.setValueAtIndex(rt, i, obj);
|
983
1012
|
|
984
|
-
|
985
|
-
|
1013
|
+
return;
|
1014
|
+
}
|
986
1015
|
|
987
|
-
|
988
|
-
|
1016
|
+
if (this->isColor(propertyName)) {
|
1017
|
+
parsedArray.setValueAtIndex(
|
1018
|
+
rt,
|
1019
|
+
i,
|
1020
|
+
jsi::Value(state.parseColor(nestedValue))
|
1021
|
+
);
|
1022
|
+
} else {
|
1023
|
+
parsedArray.setValueAtIndex(rt, i, nestedValue);
|
1024
|
+
}
|
1025
|
+
}
|
1026
|
+
);
|
1027
|
+
|
1028
|
+
convertedStyles.setProperty(rt, propertyName.c_str(), parsedArray);
|
1029
|
+
}
|
1030
|
+
);
|
989
1031
|
}
|
990
1032
|
|
991
|
-
return jsi::dynamicFromValue(rt,
|
1033
|
+
return jsi::dynamicFromValue(rt, jsi::Value(rt, convertedStyles));
|
992
1034
|
}
|
993
1035
|
|
1036
|
+
|
994
1037
|
// check is styleKey contains color
|
995
1038
|
bool parser::Parser::isColor(const std::string& propertyName) {
|
996
1039
|
std::string str = propertyName;
|
@@ -8,7 +8,7 @@ using AffectedNodes = std::unordered_map<const ShadowNodeFamily*, std::unordered
|
|
8
8
|
|
9
9
|
void shadow::ShadowTreeManager::updateShadowTree(const ShadowTreeRegistry& shadowTreeRegistry) {
|
10
10
|
auto& registry = core::UnistylesRegistry::get();
|
11
|
-
|
11
|
+
|
12
12
|
registry.trafficController.withLock([&](){
|
13
13
|
auto updates = registry.trafficController.getUpdates();
|
14
14
|
|
@@ -20,20 +20,14 @@ void shadow::ShadowTreeManager::updateShadowTree(const ShadowTreeRegistry& shado
|
|
20
20
|
// we could iterate via updates and create multiple commits
|
21
21
|
// but it can cause performance issues for hundreds of nodes
|
22
22
|
// so let's mutate Shadow Tree in single transaction
|
23
|
-
auto transaction = [&](const RootShadowNode& oldRootShadowNode) {
|
23
|
+
auto transaction = [&updates](const RootShadowNode& oldRootShadowNode) {
|
24
24
|
auto affectedNodes = shadow::ShadowTreeManager::findAffectedNodes(oldRootShadowNode, updates);
|
25
|
-
|
25
|
+
|
26
|
+
return std::static_pointer_cast<RootShadowNode>(shadow::ShadowTreeManager::cloneShadowTree(
|
26
27
|
oldRootShadowNode,
|
27
28
|
updates,
|
28
29
|
affectedNodes
|
29
30
|
));
|
30
|
-
|
31
|
-
// set unistyles trait
|
32
|
-
auto unistylesRootNode = std::reinterpret_pointer_cast<core::UnistylesCommitShadowNode>(newRootNode);
|
33
|
-
|
34
|
-
unistylesRootNode->addUnistylesCommitTrait();
|
35
|
-
|
36
|
-
return newRootNode;
|
37
31
|
};
|
38
32
|
|
39
33
|
// commit once!
|
@@ -71,18 +65,17 @@ void shadow::ShadowTreeManager::updateShadowTree(const ShadowTreeRegistry& shado
|
|
71
65
|
AffectedNodes shadow::ShadowTreeManager::findAffectedNodes(const RootShadowNode& rootNode, ShadowLeafUpdates& updates) {
|
72
66
|
AffectedNodes affectedNodes;
|
73
67
|
|
74
|
-
|
75
|
-
|
76
|
-
const auto& [family, _] = pair;
|
77
|
-
const auto familyAncestors = family->getAncestors(rootNode);
|
68
|
+
for (const auto& [family, _] : updates) {
|
69
|
+
auto familyAncestors = family->getAncestors(rootNode);
|
78
70
|
|
79
|
-
for (
|
71
|
+
for (auto it = familyAncestors.rbegin(); it != familyAncestors.rend(); ++it) {
|
72
|
+
const auto& [parentNode, index] = *it;
|
80
73
|
const auto parentFamily = &parentNode.get().getFamily();
|
81
|
-
|
74
|
+
auto [setIt, inserted] = affectedNodes.try_emplace(parentFamily, std::unordered_set<int>{});
|
82
75
|
|
83
|
-
|
76
|
+
setIt->second.insert(index);
|
84
77
|
}
|
85
|
-
}
|
78
|
+
}
|
86
79
|
|
87
80
|
return affectedNodes;
|
88
81
|
}
|
@@ -93,44 +86,54 @@ ShadowNode::Unshared shadow::ShadowTreeManager::cloneShadowTree(const ShadowNode
|
|
93
86
|
const auto family = &shadowNode.getFamily();
|
94
87
|
const auto rawPropsIt = updates.find(family);
|
95
88
|
const auto childrenIt = affectedNodes.find(family);
|
96
|
-
auto children = shadowNode.getChildren();
|
97
89
|
|
98
|
-
//
|
90
|
+
// Only copy children if we need to update them
|
91
|
+
std::shared_ptr<ShadowNode::ListOfShared> childrenPtr;
|
92
|
+
const auto& originalChildren = shadowNode.getChildren();
|
93
|
+
|
99
94
|
if (childrenIt != affectedNodes.end()) {
|
100
|
-
|
95
|
+
auto children = originalChildren;
|
96
|
+
|
101
97
|
for (const auto index : childrenIt->second) {
|
102
98
|
children[index] = cloneShadowTree(*children[index], updates, affectedNodes);
|
103
99
|
}
|
100
|
+
|
101
|
+
childrenPtr = std::make_shared<ShadowNode::ListOfShared>(std::move(children));
|
102
|
+
} else {
|
103
|
+
childrenPtr = std::make_shared<ShadowNode::ListOfShared>(originalChildren);
|
104
104
|
}
|
105
105
|
|
106
106
|
Props::Shared updatedProps = nullptr;
|
107
107
|
|
108
|
-
// clone props for our target shadow node and place fresh RawProps
|
109
108
|
if (rawPropsIt != updates.end()) {
|
109
|
+
const auto& componentDescriptor = shadowNode.getComponentDescriptor();
|
110
|
+
const auto& props = shadowNode.getProps();
|
111
|
+
|
110
112
|
PropsParserContext propsParserContext{
|
111
113
|
shadowNode.getSurfaceId(),
|
112
114
|
*shadowNode.getContextContainer()
|
113
115
|
};
|
114
116
|
|
115
|
-
|
116
|
-
// first of all Android doesn't like nullish props (they work perfectly fine on iOS)
|
117
|
-
// second of all Android props MUST be constructed from previous props, otherwise RawProps::~RawProps error occurs
|
118
|
-
// Meta wants to remove shadowNode.getProps()->rawProps, but for now it's the only viable solution
|
117
|
+
folly::dynamic newProps;
|
119
118
|
#ifdef ANDROID
|
120
|
-
auto safeProps = rawPropsIt->second == nullptr
|
121
|
-
|
119
|
+
auto safeProps = rawPropsIt->second == nullptr
|
120
|
+
? folly::dynamic::object()
|
121
|
+
: rawPropsIt->second;
|
122
|
+
newProps = folly::dynamic::merge(props->rawProps, safeProps);
|
122
123
|
#else
|
123
|
-
|
124
|
+
newProps = rawPropsIt->second;
|
124
125
|
#endif
|
125
126
|
|
126
|
-
updatedProps =
|
127
|
-
|
128
|
-
|
127
|
+
updatedProps = componentDescriptor.cloneProps(
|
128
|
+
propsParserContext,
|
129
|
+
props,
|
130
|
+
RawProps(newProps)
|
131
|
+
);
|
129
132
|
}
|
130
133
|
|
131
134
|
return shadowNode.clone({
|
132
135
|
updatedProps ? updatedProps : ShadowNodeFragment::propsPlaceholder(),
|
133
|
-
|
136
|
+
childrenPtr,
|
134
137
|
shadowNode.getState()
|
135
138
|
});
|
136
139
|
}
|
@@ -6,13 +6,9 @@
|
|
6
6
|
|
7
7
|
#import <React/RCTEventEmitter.h>
|
8
8
|
#import "TurboUnistyles/TurboUnistyles.h"
|
9
|
-
#import <React/RCTSurfacePresenter.h>
|
10
|
-
#import <React/RCTScheduler.h>
|
11
|
-
#import <React/RCTCallInvoker.h>
|
12
|
-
#import <React/RCTCallInvokerModule.h>
|
13
9
|
#import <ReactCommon/RCTTurboModuleWithJSIBindings.h>
|
14
10
|
|
15
|
-
@interface UnistylesModule: RCTEventEmitter<NativeTurboUnistylesSpec
|
11
|
+
@interface UnistylesModule: RCTEventEmitter<NativeTurboUnistylesSpec>
|
16
12
|
@end
|
17
13
|
|
18
14
|
@interface UnistylesModule()<RCTTurboModuleWithJSIBindings>
|
@@ -10,18 +10,11 @@ using namespace margelo::nitro;
|
|
10
10
|
|
11
11
|
RCT_EXPORT_MODULE(Unistyles)
|
12
12
|
|
13
|
-
__weak RCTSurfacePresenter* _surfacePresenter;
|
14
|
-
@synthesize callInvoker = _callInvoker;
|
15
|
-
|
16
13
|
+ (BOOL)requiresMainQueueSetup {
|
17
14
|
return YES;
|
18
15
|
}
|
19
16
|
|
20
|
-
- (void)
|
21
|
-
_surfacePresenter = surfacePresenter;
|
22
|
-
}
|
23
|
-
|
24
|
-
- (void)installJSIBindingsWithRuntime:(jsi::Runtime&)rt {
|
17
|
+
- (void)installJSIBindingsWithRuntime:(jsi::Runtime&)rt callInvoker:(const std::shared_ptr<facebook::react::CallInvoker> &)callInvoker {
|
25
18
|
// function is called on: first init and every live reload
|
26
19
|
// check if this is live reload, if so let's replace UnistylesRuntime with new runtime
|
27
20
|
auto hasUnistylesRuntime = HybridObjectRegistry::hasHybridObject("UnistylesRuntime");
|
@@ -32,18 +25,17 @@ __weak RCTSurfacePresenter* _surfacePresenter;
|
|
32
25
|
HybridObjectRegistry::unregisterHybridObjectConstructor("UnistylesShadowRegistry");
|
33
26
|
}
|
34
27
|
|
35
|
-
[self createHybrids:rt];
|
28
|
+
[self createHybrids:rt callInvoker:callInvoker];
|
36
29
|
}
|
37
30
|
|
38
|
-
- (void)createHybrids:(jsi::Runtime&)rt {
|
39
|
-
auto runOnJSThread = [callInvoker
|
31
|
+
- (void)createHybrids:(jsi::Runtime&)rt callInvoker:(const std::shared_ptr<facebook::react::CallInvoker> &)callInvoker {
|
32
|
+
auto runOnJSThread = [callInvoker](std::function<void(jsi::Runtime& rt)> &&callback){
|
40
33
|
callInvoker->invokeAsync(std::move(callback));
|
41
34
|
};
|
42
35
|
|
43
36
|
auto nativePlatform = Unistyles::NativePlatform::create().getCxxPart();
|
44
37
|
auto unistylesRuntime = std::make_shared<HybridUnistylesRuntime>(nativePlatform, rt, runOnJSThread);
|
45
|
-
auto
|
46
|
-
auto styleSheet = std::make_shared<HybridStyleSheet>(unistylesRuntime, uiManager);
|
38
|
+
auto styleSheet = std::make_shared<HybridStyleSheet>(unistylesRuntime);
|
47
39
|
|
48
40
|
HybridObjectRegistry::registerHybridObjectConstructor("UnistylesRuntime", [unistylesRuntime]() -> std::shared_ptr<HybridObject>{
|
49
41
|
return unistylesRuntime;
|
@@ -7,8 +7,7 @@ exports.ScopedTheme = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
8
8
|
var _specs = require("../specs");
|
9
9
|
var _jsxRuntime = require("react/jsx-runtime");
|
10
|
-
function
|
11
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
12
11
|
const Apply = ({
|
13
12
|
name
|
14
13
|
}) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_specs","_jsxRuntime","
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_specs","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Apply","name","UnistylesShadowRegistry","setScopedTheme","useLayoutEffect","ScopedTheme","children","previousScopedTheme","getScopedTheme","mappedChildren","jsx","Fragment","exports"],"sourceRoot":"../../../src","sources":["components/ScopedTheme.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAAkD,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAMlD,MAAMkB,KAAK,GAAGA,CAAC;EAAEC;AAAuC,CAAC,KAAK;EAC1DC,8BAAuB,CAACC,cAAc,CAACF,IAAI,CAAC;EAE5C,IAAAG,sBAAe,EAAC,MAAM;IAClBF,8BAAuB,CAACC,cAAc,CAACF,IAAI,CAAC;EAChD,CAAC,CAAC;EAEF,OAAO,IAAI;AACf,CAAC;AAEM,MAAMI,WAAyE,GAAGA,CAAC;EAAEJ,IAAI;EAAEK;AAAS,CAAC,KAAK;EAC7G,MAAMC,mBAAmB,GAAGL,8BAAuB,CAACM,cAAc,CAAC,CAAC;EACpE,MAAMC,cAAc,GAAG,cACnB,IAAA7B,WAAA,CAAA8B,GAAA,EAACV,KAAK;IAAYC,IAAI,EAAEA;EAAK,GAAjBA,IAAmB,CAAC,EAChCK,QAAQ,eACR,IAAA1B,WAAA,CAAA8B,GAAA,EAACV,KAAK;IAAeC,IAAI,EAAEM;EAAyD,GAAzE,SAA2E,CAAC,CAC1F;EAED,oBACI,IAAA3B,WAAA,CAAA8B,GAAA,EAAClC,MAAA,CAAAe,OAAK,CAACoB,QAAQ;IAAAL,QAAA,EACVG;EAAc,CACH,CAAC;AAEzB,CAAC;AAAAG,OAAA,CAAAP,WAAA,GAAAA,WAAA","ignoreList":[]}
|
@@ -12,8 +12,7 @@ var _utils = require("../../utils");
|
|
12
12
|
var _utils2 = require("../../web/utils");
|
13
13
|
var _createUnistylesRef = require("../../web/utils/createUnistylesRef");
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
15
|
-
function
|
16
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
17
16
|
const UnistylesImage = /*#__PURE__*/(0, _react.forwardRef)((props, forwardedRef) => {
|
18
17
|
const classNames = (0, _core.getClassName)(props.style);
|
19
18
|
const ref = (0, _createUnistylesRef.createUnistylesRef)(classNames, forwardedRef);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_core","_warn","_utils","_utils2","_createUnistylesRef","_jsxRuntime","
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_core","_warn","_utils","_utils2","_createUnistylesRef","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UnistylesImage","forwardRef","props","forwardedRef","classNames","getClassName","style","ref","createUnistylesRef","hasWidthStyle","checkForProp","hasHeightStyle","maybeWarnAboutMultipleUnistyles","jsx","Image","width","height","exports","copyComponentProperties","NativeImage"],"sourceRoot":"../../../../src","sources":["components/native/Image.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,mBAAA,GAAAN,OAAA;AAAuE,IAAAO,WAAA,GAAAP,OAAA;AAAA,SAAAD,wBAAAS,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAS,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAOvE,MAAMkB,cAAc,gBAAG,IAAAC,iBAAU,EAAiB,CAACC,KAAK,EAAEC,YAAY,KAAK;EACvE,MAAMC,UAAU,GAAG,IAAAC,kBAAY,EAACH,KAAK,CAACI,KAAK,CAAC;EAC5C,MAAMC,GAAG,GAAG,IAAAC,sCAAkB,EAACJ,UAAU,EAAED,YAAY,CAAC;EACxD,MAAMM,aAAa,GAAG,IAAAC,oBAAY,EAACR,KAAK,CAACI,KAAK,EAAE,OAAO,CAAC;EACxD,MAAMK,cAAc,GAAG,IAAAD,oBAAY,EAACR,KAAK,CAACI,KAAK,EAAE,QAAQ,CAAC;EAE1D,IAAAM,qCAA+B,EAACV,KAAK,CAACI,KAAK,EAAe,OAAO,CAAC;EAElE,oBACI,IAAA1B,WAAA,CAAAiC,GAAA,EAACvC,YAAA,CAAAwC,KAAW;IAAA,GACJZ,KAAK;IACTI,KAAK,EAAE,CACHF,UAAU;IACV;IACAK,aAAa,IAAI;MAAEM,KAAK,EAAE;IAAG,CAAC,EAC9BJ,cAAc,IAAI;MAAEK,MAAM,EAAE;IAAG,CAAC,CACT;IAC3BT,GAAG,EAAEA;EAAI,CACZ,CAAC;AAEV,CAAC,CAAC;AAEK,MAAMO,KAAK,GAAAG,OAAA,CAAAH,KAAA,GAAG,IAAAI,8BAAuB,EAACC,kBAAW,EAAEnB,cAAc,CAAC","ignoreList":[]}
|