react-native-unistyles 3.0.0-alpha.14 → 3.0.0-alpha.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,30 +17,30 @@ RootShadowNode::Unshared core::UnistylesCommitHook::shadowTreeWillCommit(
17
17
  ) noexcept {
18
18
  RootShadowNode::Unshared rootNode = newRootShadowNode;
19
19
  auto unistylesRootNode = std::reinterpret_pointer_cast<core::UnistylesCommitShadowNode>(newRootShadowNode);
20
-
20
+
21
21
  // skip only unistyles commits
22
22
  if (unistylesRootNode->hasUnistylesCommitTrait()) {
23
23
  unistylesRootNode->removeUnistylesCommitTrait();
24
24
  unistylesRootNode->addUnistylesMountTrait();
25
-
25
+
26
26
  return newRootShadowNode;
27
27
  }
28
28
 
29
29
  auto& registry = core::UnistylesRegistry::get();
30
-
30
+
31
31
  if (!registry.trafficController.hasUnistylesCommit()) {
32
32
  return newRootShadowNode;
33
33
  }
34
-
34
+
35
35
  auto shadowLeafUpdates = this->getUnistylesUpdates();
36
-
36
+
37
37
  if (shadowLeafUpdates.size() == 0) {
38
38
  return newRootShadowNode;
39
39
  }
40
40
 
41
41
  // this is required, otherwise we end up with old shadow tree in mount hook
42
42
  registry.trafficController.stopUnistylesTraffic();
43
-
43
+
44
44
  auto affectedNodes = shadow::ShadowTreeManager::findAffectedNodes(*rootNode, shadowLeafUpdates);
45
45
 
46
46
  return std::static_pointer_cast<RootShadowNode>(shadow::ShadowTreeManager::cloneShadowTree(
@@ -55,8 +55,8 @@ shadow::ShadowLeafUpdates core::UnistylesCommitHook::getUnistylesUpdates() {
55
55
  auto& registry = core::UnistylesRegistry::get();
56
56
  auto parser = parser::Parser(this->_unistylesRuntime);
57
57
  auto dependencyMap = registry.buildDependencyMap(*this->_rt);
58
-
59
- parser.rebuildUnistylesInDependencyMap(*this->_rt, dependencyMap);
60
-
58
+
59
+ // don't rebuild dependency map, at this point it's already done
60
+
61
61
  return parser.dependencyMapToShadowLeafUpdates(dependencyMap);
62
62
  }
@@ -19,27 +19,11 @@ void core::UnistylesMountHook::shadowTreeDidMount(RootShadowNode::Shared const &
19
19
  return;
20
20
  }
21
21
 
22
- // this is React Native commit
22
+ // React Native commit did mount
23
23
  auto& registry = core::UnistylesRegistry::get();
24
24
 
25
+ // so, resume Unistyles commits
25
26
  registry.trafficController.resumeUnistylesTraffic();
26
-
27
- // this will prevent crash when re-rendering view
28
- // as Unistyles has nothing to commit yet, but dependency map
29
- // will build all the shadow nodes
30
- if (!registry.trafficController.hasUnistylesCommit()) {
31
- return;
32
- }
33
-
34
- registry.trafficController.setHasUnistylesCommit(false);
35
-
36
- auto shadowLeafUpdates = this->getUnistylesUpdates();
37
-
38
- if (shadowLeafUpdates.size() == 0) {
39
- return;
40
- }
41
-
42
- shadow::ShadowTreeManager::updateShadowTree(*this->_rt, shadowLeafUpdates);
43
27
  }
44
28
 
45
29
  shadow::ShadowLeafUpdates core::UnistylesMountHook::getUnistylesUpdates() {
@@ -47,7 +31,7 @@ shadow::ShadowLeafUpdates core::UnistylesMountHook::getUnistylesUpdates() {
47
31
  auto parser = parser::Parser(this->_unistylesRuntime);
48
32
  auto dependencyMap = registry.buildDependencyMap(*this->_rt);
49
33
 
50
- parser.rebuildUnistylesInDependencyMap(*this->_rt, dependencyMap);
34
+ // don't rebuild dependency map, at this point it's already done
51
35
 
52
36
  return parser.dependencyMapToShadowLeafUpdates(dependencyMap);
53
37
  }
@@ -88,8 +88,14 @@ int core::UnistylesState::parseColor(jsi::Value& maybeColor) {
88
88
  return 0;
89
89
  }
90
90
 
91
- // we must convert it to uint32_t first, otherwise color will be broken
92
- uint32_t color = this->_processColorFn.get()->call(*_rt, maybeColor.asString(*_rt)).asNumber();
93
-
94
- return color ? color : 0;
91
+ auto colorString = maybeColor.asString(*_rt);
92
+
93
+ if (!this->_colorCache.contains(colorString.utf8(*_rt).c_str())) {
94
+ // we must convert it to uint32_t first, otherwise color will be broken
95
+ uint32_t color = this->_processColorFn.get()->call(*_rt, colorString).asNumber();
96
+
97
+ this->_colorCache[colorString.utf8(*_rt).c_str()] = color ? color : 0;
98
+ }
99
+
100
+ return this->_colorCache[colorString.utf8(*_rt).c_str()];
95
101
  }
@@ -43,6 +43,7 @@ private:
43
43
  std::vector<std::string> _registeredThemeNames{};
44
44
  std::optional<std::string> _currentThemeName = std::nullopt;
45
45
  std::shared_ptr<jsi::Function> _processColorFn;
46
+ std::unordered_map<std::string, uint32_t> _colorCache{};
46
47
 
47
48
  friend class UnistylesRegistry;
48
49
  };
@@ -236,6 +236,9 @@ void HybridStyleSheet::onPlatformDependenciesChange(std::vector<UnistyleDependen
236
236
 
237
237
  parser.rebuildUnistylesInDependencyMap(rt, dependencyMap);
238
238
 
239
+ // this is required, otherwise shadow tree will ignore Unistyles commit
240
+ registry.trafficController.setHasUnistylesCommit(true);
241
+
239
242
  auto shadowLeafUpdates = parser.dependencyMapToShadowLeafUpdates(dependencyMap);
240
243
 
241
244
  shadow::ShadowTreeManager::updateShadowTree(rt, shadowLeafUpdates);
@@ -100,20 +100,24 @@ void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_
100
100
 
101
101
  // rebuild all unistyles that are affected by platform event
102
102
  void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap) {
103
+ std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value> parsedStyleSheets{};
104
+
103
105
  for (auto& [shadowNode, unistyles] : dependencyMap) {
104
106
  auto styleSheet = unistyles.begin()->get()->unistyle->parent;
105
-
106
- jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet);
107
+
108
+ if (!parsedStyleSheets.contains(styleSheet)) {
109
+ parsedStyleSheets.emplace(styleSheet, this->unwrapStyleSheet(rt, styleSheet));
110
+ }
107
111
 
108
112
  for (auto& unistyleData : unistyles) {
109
113
  auto& unistyle = unistyleData->unistyle;
110
114
 
111
115
  // StyleSheet might have styles that are not affected
112
- if (!unwrappedStyleSheet.hasProperty(rt, unistyle->styleKey.c_str())) {
116
+ if (!parsedStyleSheets[styleSheet].asObject(rt).hasProperty(rt, unistyle->styleKey.c_str())) {
113
117
  continue;
114
118
  }
115
119
 
116
- unistyle->rawValue = unwrappedStyleSheet.getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
120
+ unistyle->rawValue = parsedStyleSheets[styleSheet].asObject(rt).getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
117
121
  this->rebuildUnistyle(rt, styleSheet, unistyle, unistyleData->variants, unistyleData->dynamicFunctionMetadata);
118
122
  unistyleData->parsedStyle = jsi::Value(rt, unistyle->parsedStyle.value()).asObject(rt);
119
123
  }
@@ -162,10 +166,10 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleShee
162
166
  shadow::ShadowLeafUpdates parser::Parser::dependencyMapToShadowLeafUpdates(core::DependencyMap& dependencyMap) {
163
167
  shadow::ShadowLeafUpdates updates;
164
168
  auto& rt = this->_unistylesRuntime->getRuntime();
165
-
169
+
166
170
  for (const auto& [shadowNode, unistyles] : dependencyMap) {
167
171
  auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyles);
168
-
172
+
169
173
  updates.emplace(shadowNode, std::move(rawProps));
170
174
  }
171
175
 
@@ -285,7 +289,7 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
285
289
  [this, unistylesRuntime, unistyle](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) {
286
290
  auto thisObject = thisVal.asObject(rt);
287
291
  auto parser = parser::Parser(unistylesRuntime);
288
-
292
+
289
293
  // call user function
290
294
  auto result = unistyle->rawValue.asFunction(rt).call(rt, args, count);
291
295
 
@@ -300,7 +304,7 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
300
304
  std::optional<Variants> variants = rawVariants.isUndefined()
301
305
  ? std::nullopt
302
306
  : std::optional<Variants>(helpers::variantsToPairs(rt, rawVariants.asObject(rt)));
303
-
307
+
304
308
  unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
305
309
  unistyleFn->seal();
306
310
 
@@ -615,8 +619,13 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
615
619
  RawProps parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles) {
616
620
  jsi::Object convertedStyles = jsi::Object(rt);
617
621
  auto& state = core::UnistylesRegistry::get().getState(rt);
618
-
622
+
619
623
  for (const auto& unistyleData : unistyles) {
624
+ if (!unistyleData->parsedStyle.has_value()) {
625
+ // todo this something happens with large dataset, debug it
626
+ continue;
627
+ }
628
+
620
629
  helpers::enumerateJSIObject(rt, unistyleData->parsedStyle.value(), [&](const std::string& propertyName, jsi::Value& propertyValue){
621
630
  if (this->isColor(propertyName)) {
622
631
  return convertedStyles.setProperty(rt, propertyName.c_str(), jsi::Value(state.parseColor(propertyValue)));
@@ -10,10 +10,10 @@ void shadow::ShadowTreeManager::updateShadowTree(facebook::jsi::Runtime& rt, sha
10
10
  auto& uiManager = UIManagerBinding::getBinding(rt)->getUIManager();
11
11
  const auto &shadowTreeRegistry = uiManager.getShadowTreeRegistry();
12
12
  auto& registry = core::UnistylesRegistry::get();
13
-
13
+
14
14
  if (registry.trafficController.shouldStop()) {
15
15
  registry.trafficController.setHasUnistylesCommit(true);
16
-
16
+
17
17
  return;
18
18
  }
19
19
 
@@ -29,10 +29,10 @@ void shadow::ShadowTreeManager::updateShadowTree(facebook::jsi::Runtime& rt, sha
29
29
  updates,
30
30
  affectedNodes
31
31
  ));
32
-
32
+
33
33
  // set unistyles commit trait
34
34
  auto unistylesRootNode = std::reinterpret_pointer_cast<core::UnistylesCommitShadowNode>(newRootNode);
35
-
35
+
36
36
  unistylesRootNode->addUnistylesCommitTrait();
37
37
 
38
38
  return newRootNode;
@@ -43,7 +43,7 @@ void shadow::ShadowTreeManager::updateShadowTree(facebook::jsi::Runtime& rt, sha
43
43
  // enableStateReconciliation: https://reactnative.dev/architecture/render-pipeline#react-native-renderer-state-updates
44
44
  // mountSynchronously: must be true as this is update from C++ not React
45
45
  shadowTree.commit(transaction, {false, true});
46
-
46
+
47
47
 
48
48
  // for now we're assuming single surface, can be improved in the future
49
49
  // stop = true means stop enumerating next shadow tree
@@ -26,12 +26,29 @@ const createUseVariants = (styles, setSelectedVariants) => {
26
26
  }, [lastSelectedVariantsRef.current]);
27
27
  combinedVariantStyles.forEach(([key]) => {
28
28
  const styleEntry = styles[key];
29
+ if (!styleEntry) {
30
+ return;
31
+ }
29
32
  const selectedVariantStyles = selectedVariantStylesMap.get(key);
30
33
  Object.defineProperties(styleEntry, (0, _utils.reduceObject)(selectedVariantStyles ?? {}, value => ({
31
34
  value,
32
35
  enumerable: false,
33
36
  configurable: true
34
37
  })));
38
+
39
+ // Add __uni__variants to static styles
40
+ Object.keys(styleEntry).forEach(key => {
41
+ if (!key.startsWith('__uni__secrets__')) {
42
+ return;
43
+ }
44
+ const secret = (0, _utils.keyInObject)(styleEntry, key) ? styleEntry[key] : undefined;
45
+ if (!secret) {
46
+ return;
47
+ }
48
+ Object.defineProperty(secret, '__uni__variants', {
49
+ value: selectedVariants
50
+ });
51
+ });
35
52
  });
36
53
  };
37
54
  Object.defineProperty(styles, 'useVariants', {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_utils","_getVariants","createUseVariants","styles","setSelectedVariants","useVariants","selectedVariants","selectedVariantStylesMap","useState","Map","lastSelectedVariantsRef","useRef","variantsChanged","equal","current","combinedVariantStyles","useMemo","result","getVariants","forEach","key","value","set","styleEntry","selectedVariantStyles","get","Object","defineProperties","reduceObject","enumerable","configurable","defineProperty","exports"],"sourceRoot":"../../../../src","sources":["web/variants/useVariants.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEO,MAAMG,iBAAiB,GAAGA,CAACC,MAAyC,EAAEC,mBAA4D,KAAK;EAC1I,MAAMC,WAAW,GAAIC,gBAAqC,IAAK;IAC3D,MAAM,CAACC,wBAAwB,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM,IAAIC,GAAG,CAA8B,CAAC,CAAC;IACzF,MAAMC,uBAAuB,GAAG,IAAAC,aAAM,EAAsB,CAAC;IAC7D;IACA,MAAMC,eAAe,GAAG,CAAC,IAAAC,YAAK,EAACH,uBAAuB,CAACI,OAAO,EAAER,gBAAgB,CAAC;IAEjF,IAAIM,eAAe,EAAE;MACjBF,uBAAuB,CAACI,OAAO,GAAGR,gBAAgB;MAClDF,mBAAmB,CAACE,gBAAgB,CAAC;IACzC;IAEA,MAAMS,qBAAqB,GAAG,IAAAC,cAAO,EAAC,MAAM;MACxC,MAAMC,MAAM,GAAG,IAAAC,wBAAW,EAACf,MAAM,EAAEG,gBAAgB,CAAC;MAEpDW,MAAM,CAACE,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;QAC7Bd,wBAAwB,CAACe,GAAG,CAACF,GAAG,EAAEC,KAAK,CAAC;MAC5C,CAAC,CAAC;MAEF,OAAOJ,MAAM;IACjB,CAAC,EAAE,CAACP,uBAAuB,CAACI,OAAO,CAAC,CAAC;IAErCC,qBAAqB,CAACI,OAAO,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;MACrC,MAAMG,UAAU,GAAGpB,MAAM,CAACiB,GAAG,CAAC;MAC9B,MAAMI,qBAAqB,GAAGjB,wBAAwB,CAACkB,GAAG,CAACL,GAAG,CAAC;MAE/DM,MAAM,CAACC,gBAAgB,CAACJ,UAAU,EAAE,IAAAK,mBAAY,EAACJ,qBAAqB,IAAI,CAAC,CAAC,EAAEH,KAAK,KAAK;QACpFA,KAAK;QACLQ,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE;MAClB,CAAC,CAAC,CAAC,CAAC;IACR,CAAC,CAAC;EACN,CAAC;EAEDJ,MAAM,CAACK,cAAc,CAAC5B,MAAM,EAAE,aAAa,EAAE;IACzCkB,KAAK,EAAEhB;EACX,CAAC,CAAC;AACN,CAAC;AAAA2B,OAAA,CAAA9B,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_utils","_getVariants","createUseVariants","styles","setSelectedVariants","useVariants","selectedVariants","selectedVariantStylesMap","useState","Map","lastSelectedVariantsRef","useRef","variantsChanged","equal","current","combinedVariantStyles","useMemo","result","getVariants","forEach","key","value","set","styleEntry","selectedVariantStyles","get","Object","defineProperties","reduceObject","enumerable","configurable","keys","startsWith","secret","keyInObject","undefined","defineProperty","exports"],"sourceRoot":"../../../../src","sources":["web/variants/useVariants.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEO,MAAMG,iBAAiB,GAAGA,CAACC,MAAyC,EAAEC,mBAA4D,KAAK;EAC1I,MAAMC,WAAW,GAAIC,gBAAqC,IAAK;IAC3D,MAAM,CAACC,wBAAwB,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM,IAAIC,GAAG,CAA8B,CAAC,CAAC;IACzF,MAAMC,uBAAuB,GAAG,IAAAC,aAAM,EAAsB,CAAC;IAC7D;IACA,MAAMC,eAAe,GAAG,CAAC,IAAAC,YAAK,EAACH,uBAAuB,CAACI,OAAO,EAAER,gBAAgB,CAAC;IAEjF,IAAIM,eAAe,EAAE;MACjBF,uBAAuB,CAACI,OAAO,GAAGR,gBAAgB;MAClDF,mBAAmB,CAACE,gBAAgB,CAAC;IACzC;IAEA,MAAMS,qBAAqB,GAAG,IAAAC,cAAO,EAAC,MAAM;MACxC,MAAMC,MAAM,GAAG,IAAAC,wBAAW,EAACf,MAAM,EAAEG,gBAAgB,CAAC;MAEpDW,MAAM,CAACE,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;QAC7Bd,wBAAwB,CAACe,GAAG,CAACF,GAAG,EAAEC,KAAK,CAAC;MAC5C,CAAC,CAAC;MAEF,OAAOJ,MAAM;IACjB,CAAC,EAAE,CAACP,uBAAuB,CAACI,OAAO,CAAC,CAAC;IAErCC,qBAAqB,CAACI,OAAO,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;MACrC,MAAMG,UAAU,GAAGpB,MAAM,CAACiB,GAAG,CAAC;MAE9B,IAAI,CAACG,UAAU,EAAE;QACb;MACJ;MAEA,MAAMC,qBAAqB,GAAGjB,wBAAwB,CAACkB,GAAG,CAACL,GAAG,CAAC;MAE/DM,MAAM,CAACC,gBAAgB,CAACJ,UAAU,EAAE,IAAAK,mBAAY,EAACJ,qBAAqB,IAAI,CAAC,CAAC,EAAEH,KAAK,KAAK;QACpFA,KAAK;QACLQ,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE;MAClB,CAAC,CAAC,CAAC,CAAC;;MAEJ;MACAJ,MAAM,CAACK,IAAI,CAACR,UAAU,CAAC,CAACJ,OAAO,CAACC,GAAG,IAAI;QACnC,IAAI,CAACA,GAAG,CAACY,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACrC;QACJ;QAEA,MAAMC,MAAM,GAAG,IAAAC,kBAAW,EAACX,UAAU,EAAEH,GAAG,CAAC,GAAGG,UAAU,CAACH,GAAG,CAAC,GAAGe,SAAS;QAEzE,IAAI,CAACF,MAAM,EAAE;UACT;QACJ;QAEAP,MAAM,CAACU,cAAc,CAACH,MAAM,EAAE,iBAAiB,EAAE;UAC7CZ,KAAK,EAAEf;QACX,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDoB,MAAM,CAACU,cAAc,CAACjC,MAAM,EAAE,aAAa,EAAE;IACzCkB,KAAK,EAAEhB;EACX,CAAC,CAAC;AACN,CAAC;AAAAgC,OAAA,CAAAnC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { useMemo, useRef, useState } from 'react';
4
- import { equal, reduceObject } from '../utils';
4
+ import { equal, keyInObject, reduceObject } from '../utils';
5
5
  import { getVariants } from './getVariants';
6
6
  export const createUseVariants = (styles, setSelectedVariants) => {
7
7
  const useVariants = selectedVariants => {
@@ -22,12 +22,29 @@ export const createUseVariants = (styles, setSelectedVariants) => {
22
22
  }, [lastSelectedVariantsRef.current]);
23
23
  combinedVariantStyles.forEach(([key]) => {
24
24
  const styleEntry = styles[key];
25
+ if (!styleEntry) {
26
+ return;
27
+ }
25
28
  const selectedVariantStyles = selectedVariantStylesMap.get(key);
26
29
  Object.defineProperties(styleEntry, reduceObject(selectedVariantStyles ?? {}, value => ({
27
30
  value,
28
31
  enumerable: false,
29
32
  configurable: true
30
33
  })));
34
+
35
+ // Add __uni__variants to static styles
36
+ Object.keys(styleEntry).forEach(key => {
37
+ if (!key.startsWith('__uni__secrets__')) {
38
+ return;
39
+ }
40
+ const secret = keyInObject(styleEntry, key) ? styleEntry[key] : undefined;
41
+ if (!secret) {
42
+ return;
43
+ }
44
+ Object.defineProperty(secret, '__uni__variants', {
45
+ value: selectedVariants
46
+ });
47
+ });
31
48
  });
32
49
  };
33
50
  Object.defineProperty(styles, 'useVariants', {
@@ -1 +1 @@
1
- {"version":3,"names":["useMemo","useRef","useState","equal","reduceObject","getVariants","createUseVariants","styles","setSelectedVariants","useVariants","selectedVariants","selectedVariantStylesMap","Map","lastSelectedVariantsRef","variantsChanged","current","combinedVariantStyles","result","forEach","key","value","set","styleEntry","selectedVariantStyles","get","Object","defineProperties","enumerable","configurable","defineProperty"],"sourceRoot":"../../../../src","sources":["web/variants/useVariants.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEjD,SAASC,KAAK,EAAEC,YAAY,QAAQ,UAAU;AAC9C,SAASC,WAAW,QAAQ,eAAe;AAE3C,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,MAAyC,EAAEC,mBAA4D,KAAK;EAC1I,MAAMC,WAAW,GAAIC,gBAAqC,IAAK;IAC3D,MAAM,CAACC,wBAAwB,CAAC,GAAGT,QAAQ,CAAC,MAAM,IAAIU,GAAG,CAA8B,CAAC,CAAC;IACzF,MAAMC,uBAAuB,GAAGZ,MAAM,CAAsB,CAAC;IAC7D;IACA,MAAMa,eAAe,GAAG,CAACX,KAAK,CAACU,uBAAuB,CAACE,OAAO,EAAEL,gBAAgB,CAAC;IAEjF,IAAII,eAAe,EAAE;MACjBD,uBAAuB,CAACE,OAAO,GAAGL,gBAAgB;MAClDF,mBAAmB,CAACE,gBAAgB,CAAC;IACzC;IAEA,MAAMM,qBAAqB,GAAGhB,OAAO,CAAC,MAAM;MACxC,MAAMiB,MAAM,GAAGZ,WAAW,CAACE,MAAM,EAAEG,gBAAgB,CAAC;MAEpDO,MAAM,CAACC,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;QAC7BT,wBAAwB,CAACU,GAAG,CAACF,GAAG,EAAEC,KAAK,CAAC;MAC5C,CAAC,CAAC;MAEF,OAAOH,MAAM;IACjB,CAAC,EAAE,CAACJ,uBAAuB,CAACE,OAAO,CAAC,CAAC;IAErCC,qBAAqB,CAACE,OAAO,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;MACrC,MAAMG,UAAU,GAAGf,MAAM,CAACY,GAAG,CAAC;MAC9B,MAAMI,qBAAqB,GAAGZ,wBAAwB,CAACa,GAAG,CAACL,GAAG,CAAC;MAE/DM,MAAM,CAACC,gBAAgB,CAACJ,UAAU,EAAElB,YAAY,CAACmB,qBAAqB,IAAI,CAAC,CAAC,EAAEH,KAAK,KAAK;QACpFA,KAAK;QACLO,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE;MAClB,CAAC,CAAC,CAAC,CAAC;IACR,CAAC,CAAC;EACN,CAAC;EAEDH,MAAM,CAACI,cAAc,CAACtB,MAAM,EAAE,aAAa,EAAE;IACzCa,KAAK,EAAEX;EACX,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useMemo","useRef","useState","equal","keyInObject","reduceObject","getVariants","createUseVariants","styles","setSelectedVariants","useVariants","selectedVariants","selectedVariantStylesMap","Map","lastSelectedVariantsRef","variantsChanged","current","combinedVariantStyles","result","forEach","key","value","set","styleEntry","selectedVariantStyles","get","Object","defineProperties","enumerable","configurable","keys","startsWith","secret","undefined","defineProperty"],"sourceRoot":"../../../../src","sources":["web/variants/useVariants.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAEjD,SAASC,KAAK,EAAEC,WAAW,EAAEC,YAAY,QAAQ,UAAU;AAC3D,SAASC,WAAW,QAAQ,eAAe;AAE3C,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,MAAyC,EAAEC,mBAA4D,KAAK;EAC1I,MAAMC,WAAW,GAAIC,gBAAqC,IAAK;IAC3D,MAAM,CAACC,wBAAwB,CAAC,GAAGV,QAAQ,CAAC,MAAM,IAAIW,GAAG,CAA8B,CAAC,CAAC;IACzF,MAAMC,uBAAuB,GAAGb,MAAM,CAAsB,CAAC;IAC7D;IACA,MAAMc,eAAe,GAAG,CAACZ,KAAK,CAACW,uBAAuB,CAACE,OAAO,EAAEL,gBAAgB,CAAC;IAEjF,IAAII,eAAe,EAAE;MACjBD,uBAAuB,CAACE,OAAO,GAAGL,gBAAgB;MAClDF,mBAAmB,CAACE,gBAAgB,CAAC;IACzC;IAEA,MAAMM,qBAAqB,GAAGjB,OAAO,CAAC,MAAM;MACxC,MAAMkB,MAAM,GAAGZ,WAAW,CAACE,MAAM,EAAEG,gBAAgB,CAAC;MAEpDO,MAAM,CAACC,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;QAC7BT,wBAAwB,CAACU,GAAG,CAACF,GAAG,EAAEC,KAAK,CAAC;MAC5C,CAAC,CAAC;MAEF,OAAOH,MAAM;IACjB,CAAC,EAAE,CAACJ,uBAAuB,CAACE,OAAO,CAAC,CAAC;IAErCC,qBAAqB,CAACE,OAAO,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;MACrC,MAAMG,UAAU,GAAGf,MAAM,CAACY,GAAG,CAAC;MAE9B,IAAI,CAACG,UAAU,EAAE;QACb;MACJ;MAEA,MAAMC,qBAAqB,GAAGZ,wBAAwB,CAACa,GAAG,CAACL,GAAG,CAAC;MAE/DM,MAAM,CAACC,gBAAgB,CAACJ,UAAU,EAAElB,YAAY,CAACmB,qBAAqB,IAAI,CAAC,CAAC,EAAEH,KAAK,KAAK;QACpFA,KAAK;QACLO,UAAU,EAAE,KAAK;QACjBC,YAAY,EAAE;MAClB,CAAC,CAAC,CAAC,CAAC;;MAEJ;MACAH,MAAM,CAACI,IAAI,CAACP,UAAU,CAAC,CAACJ,OAAO,CAACC,GAAG,IAAI;QACnC,IAAI,CAACA,GAAG,CAACW,UAAU,CAAC,kBAAkB,CAAC,EAAE;UACrC;QACJ;QAEA,MAAMC,MAAM,GAAG5B,WAAW,CAACmB,UAAU,EAAEH,GAAG,CAAC,GAAGG,UAAU,CAACH,GAAG,CAAC,GAAGa,SAAS;QAEzE,IAAI,CAACD,MAAM,EAAE;UACT;QACJ;QAEAN,MAAM,CAACQ,cAAc,CAACF,MAAM,EAAE,iBAAiB,EAAE;UAC7CX,KAAK,EAAEV;QACX,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDe,MAAM,CAACQ,cAAc,CAAC1B,MAAM,EAAE,aAAa,EAAE;IACzCa,KAAK,EAAEX;EACX,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useVariants.d.ts","sourceRoot":"","sources":["../../../../../src/web/variants/useVariants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIpE,eAAO,MAAM,iBAAiB,WAAY,qBAAqB,CAAC,UAAU,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,SAqCxI,CAAA"}
1
+ {"version":3,"file":"useVariants.d.ts","sourceRoot":"","sources":["../../../../../src/web/variants/useVariants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIpE,eAAO,MAAM,iBAAiB,WAAY,qBAAqB,CAAC,UAAU,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,SA2DxI,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-unistyles",
3
- "version": "3.0.0-alpha.14",
3
+ "version": "3.0.0-alpha.16",
4
4
  "description": "Level up your React Native StyleSheet",
5
5
  "scripts": {
6
6
  "test": "jest",
package/plugin/index.js CHANGED
@@ -42,6 +42,37 @@ module.exports = function ({ types: t }) {
42
42
  }
43
43
  }
44
44
  },
45
+ FunctionDeclaration(path, state) {
46
+ const componentName = path.node.id
47
+ ? path.node.id.name
48
+ : null
49
+
50
+ if (componentName) {
51
+ state.file.hasVariants = false
52
+ }
53
+ },
54
+ ClassDeclaration(path, state) {
55
+ const componentName = path.node.id
56
+ ? path.node.id.name
57
+ : null
58
+
59
+ if (componentName) {
60
+ state.file.hasVariants = false
61
+ }
62
+ },
63
+ VariableDeclaration(path, state) {
64
+ path.node.declarations.forEach((declaration) => {
65
+ if (t.isArrowFunctionExpression(declaration.init) || t.isFunctionExpression(declaration.init)) {
66
+ const componentName = declaration.id
67
+ ? declaration.id.name
68
+ : null
69
+
70
+ if (componentName) {
71
+ state.file.hasVariants = false
72
+ }
73
+ }
74
+ })
75
+ },
45
76
  ImportDeclaration(path, state) {
46
77
  const importSource = path.node.source.value
47
78
 
@@ -1,6 +1,6 @@
1
1
  import { useMemo, useRef, useState } from 'react'
2
2
  import type { ReactNativeStyleSheet, StyleSheet } from '../../types'
3
- import { equal, reduceObject } from '../utils'
3
+ import { equal, keyInObject, reduceObject } from '../utils'
4
4
  import { getVariants } from './getVariants'
5
5
 
6
6
  export const createUseVariants = (styles: ReactNativeStyleSheet<StyleSheet>, setSelectedVariants: (variants: Record<string, any>) => void) => {
@@ -27,6 +27,11 @@ export const createUseVariants = (styles: ReactNativeStyleSheet<StyleSheet>, set
27
27
 
28
28
  combinedVariantStyles.forEach(([key]) => {
29
29
  const styleEntry = styles[key]
30
+
31
+ if (!styleEntry) {
32
+ return
33
+ }
34
+
30
35
  const selectedVariantStyles = selectedVariantStylesMap.get(key)
31
36
 
32
37
  Object.defineProperties(styleEntry, reduceObject(selectedVariantStyles ?? {}, value => ({
@@ -34,6 +39,23 @@ export const createUseVariants = (styles: ReactNativeStyleSheet<StyleSheet>, set
34
39
  enumerable: false,
35
40
  configurable: true
36
41
  })))
42
+
43
+ // Add __uni__variants to static styles
44
+ Object.keys(styleEntry).forEach(key => {
45
+ if (!key.startsWith('__uni__secrets__')) {
46
+ return
47
+ }
48
+
49
+ const secret = keyInObject(styleEntry, key) ? styleEntry[key] : undefined
50
+
51
+ if (!secret) {
52
+ return
53
+ }
54
+
55
+ Object.defineProperty(secret, '__uni__variants', {
56
+ value: selectedVariants
57
+ })
58
+ })
37
59
  })
38
60
  }
39
61