react-native-unistyles 3.0.22 → 3.0.24

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 CHANGED
@@ -21,14 +21,14 @@ yarn add react-native-unistyles
21
21
  Install dependencies:
22
22
 
23
23
  ```shell
24
- yarn add react-native-edge-to-edge react-native-nitro-modules@0.33.2
24
+ yarn add react-native-edge-to-edge react-native-nitro-modules@0.33.8
25
25
  ```
26
26
 
27
27
  > To avoid unexpected behavior, always use a fixed version of `react-native-nitro-modules`
28
28
 
29
29
  | react-native-unistyles | react-native-nitro-modules |
30
30
  |------------------------|----------------------------|
31
- | 3.0.0 | 0.33.2 |
31
+ | 3.0.0 | 0.33.8 |
32
32
 
33
33
  Then follow [installation guides](https://unistyl.es/v3/start/getting-started) for your platform.
34
34
 
@@ -59,9 +59,6 @@ Then follow [installation guides](https://unistyl.es/v3/start/getting-started) f
59
59
  <a href="https://galaxies.dev">
60
60
  <img src="https://avatars.githubusercontent.com/u/118431096?s=200&v=4" height="70px" width="70px" alt="galaxies-dev" />
61
61
  </a>
62
- <a href="https://github.com/biw">
63
- <img src="https://avatars.githubusercontent.com/u/6139501?v=4" height="70px" width="70px" alt="biw" />
64
- </a>
65
62
  <a href="https://github.com/ryanlanciaux">
66
63
  <img src="https://avatars.githubusercontent.com/u/85041?v=4" height="70px" width="70px" alt="ryanlanciaux" />
67
64
  </a>
@@ -74,6 +71,12 @@ Then follow [installation guides](https://unistyl.es/v3/start/getting-started) f
74
71
  <a href="https://github.com/andkindness">
75
72
  <img src="https://avatars.githubusercontent.com/u/143941782?v=4" height="70px" width="70px" alt="andkindness" />
76
73
  </a>
74
+ <a href="https://github.com/AdiRishi">
75
+ <img src="https://avatars.githubusercontent.com/u/8351234?v=4" height="70px" width="70px" alt="AdiRishi" />
76
+ </a>
77
+ <a href="https://github.com/cybercarrot">
78
+ <img src="https://avatars.githubusercontent.com/u/6837094?v=4" height="70px" width="70px" alt="cybercarrot" />
79
+ </a>
77
80
 
78
81
 
79
82
  ## Past sponsors
@@ -147,6 +150,9 @@ Then follow [installation guides](https://unistyl.es/v3/start/getting-started) f
147
150
  <a href="https://github.com/oliverloops">
148
151
  <img src="https://avatars.githubusercontent.com/u/33361399?v=4" height="60px" width="60px" alt="oliverloops" />
149
152
  </a>
153
+ <a href="https://github.com/biw">
154
+ <img src="https://avatars.githubusercontent.com/u/6139501?v=4" height="60px" width="60px" alt="biw" />
155
+ </a>
150
156
 
151
157
  ## Sponsor my work
152
158
 
@@ -11,8 +11,7 @@ fun Dimensions.isEqualTo(other: Dimensions): Boolean {
11
11
 
12
12
  fun Insets.isEqualTo(other: Insets): Boolean {
13
13
  return this.top == other.top && this.bottom == other.bottom &&
14
- this.left == other.left && this.right == other.right &&
15
- this.ime == other.ime
14
+ this.left == other.left && this.right == other.right
16
15
  }
17
16
 
18
17
  fun NativePlatformAndroid.diffMiniRuntimes(lhs: UnistylesNativeMiniRuntime, rhs: UnistylesNativeMiniRuntime): Array<UnistyleDependency> {
@@ -67,6 +67,8 @@ class NativePlatformInsets(
67
67
  }
68
68
 
69
69
  fun setInsets(insetsCompat: WindowInsetsCompat, window: Window, animatedBottomInsets: Double?, skipUpdate: Boolean = false) {
70
+ val previousInsets = this._insets
71
+
70
72
  // below Android 11, we need to use window flags to detect status bar visibility
71
73
  val isStatusBarVisible = when(Build.VERSION.SDK_INT) {
72
74
  in 30..Int.MAX_VALUE -> {
@@ -91,36 +93,59 @@ class NativePlatformInsets(
91
93
  }
92
94
 
93
95
  val insets = insetsCompat.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout())
96
+ val imeInsetValue = insetsCompat.getInsets(WindowInsetsCompat.Type.ime()).bottom
97
+
98
+ // When a keyboard management library (e.g. react-native-keyboard-controller) is active,
99
+ // systemBars().bottom can get polluted with the IME height on certain interactions
100
+ // (like double-tapping to select text). Detect this by checking if systemBars bottom
101
+ // is >= IME bottom (normally systemBars bottom is just the nav bar, much smaller than IME).
102
+ // Fall back to getInsetsIgnoringVisibility which returns stable nav bar values.
103
+ val bottomInset = if (imeInsetValue > 0 && insets.bottom >= imeInsetValue) {
104
+ insetsCompat.getInsetsIgnoringVisibility(
105
+ WindowInsetsCompat.Type.navigationBars() or WindowInsetsCompat.Type.displayCutout()
106
+ ).bottom
107
+ } else {
108
+ insets.bottom
109
+ }
94
110
 
95
111
  // Android 10 and below - set bottom insets to 0 while keyboard is visible and use default bottom insets otherwise
96
112
  // Android 11 and above - animate bottom insets while keyboard is appearing and disappearing
97
113
  val imeInsets = when {
98
114
  animatedBottomInsets != null && Build.VERSION.SDK_INT >= 30 -> animatedBottomInsets
99
115
  Build.VERSION.SDK_INT < 30 -> {
100
- val nextBottomInset = insetsCompat.getInsets(WindowInsetsCompat.Type.ime()).bottom - insets.bottom
116
+ val nextBottomInset = imeInsetValue - bottomInset
101
117
  maxOf(nextBottomInset, 0).toDouble()
102
118
  }
103
119
  else -> 0.0
104
120
  }
105
121
 
106
- val shouldEmitImeEvent = Build.VERSION.SDK_INT < 30 && imeInsets != this._insets.ime || animatedBottomInsets != null && Build.VERSION.SDK_INT >= 30
107
-
108
122
  this._insets = Insets(
109
123
  statusBarTopInset.toDouble(),
110
- insets.bottom.toDouble(),
124
+ bottomInset.toDouble(),
111
125
  insets.left.toDouble(),
112
126
  insets.right.toDouble(),
113
127
  imeInsets
114
128
  )
129
+ val didInsetsChange = !previousInsets.isEqualTo(this._insets)
130
+ val didImeChange = previousInsets.ime != this._insets.ime
131
+ val shouldEmitImeEvent =
132
+ didImeChange && (
133
+ Build.VERSION.SDK_INT < 30 ||
134
+ animatedBottomInsets != null && Build.VERSION.SDK_INT >= 30
135
+ )
115
136
 
116
137
  if (skipUpdate) {
117
138
  return
118
139
  }
119
140
 
120
- this@NativePlatformInsets.onConfigChange()
141
+ if (didInsetsChange) {
142
+ this@NativePlatformInsets.onConfigChange()
143
+ }
121
144
 
122
145
  if (shouldEmitImeEvent) {
123
- this@NativePlatformInsets.emitImeEvent(this.getMiniRuntime())
146
+ this@NativePlatformInsets.emitImeEvent(
147
+ this.getMiniRuntime().copy(insets = this.getInsets())
148
+ )
124
149
  }
125
150
  }
126
151
 
@@ -148,7 +173,9 @@ class NativePlatformInsets(
148
173
  return insets
149
174
  }
150
175
 
151
- runningAnimations.firstOrNull()?.let {
176
+ runningAnimations.firstOrNull { animation ->
177
+ animation.typeMask and WindowInsetsCompat.Type.ime() != 0
178
+ }?.let {
152
179
  val bottomInset = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom.toDouble() - this@NativePlatformInsets._insets.bottom
153
180
  val nextBottomInset = if (bottomInset < 0) {
154
181
  0.0
@@ -1,5 +1,9 @@
1
1
  #include "Parser.h"
2
2
  #include "UnistyleWrapper.h"
3
+ #include <iomanip>
4
+ #include <sstream>
5
+ #include <react/renderer/css/CSSFilter.h>
6
+ #include <react/renderer/css/CSSValueParser.h>
3
7
 
4
8
  using namespace margelo::nitro::unistyles;
5
9
  using namespace facebook;
@@ -7,6 +11,59 @@ using namespace facebook::react;
7
11
 
8
12
  using Variants = std::vector<std::pair<std::string, std::string>>;
9
13
 
14
+ namespace {
15
+
16
+ bool isSupportedLength(const CSSLength& length) {
17
+ return length.unit == CSSLengthUnit::Px;
18
+ }
19
+
20
+ std::string cssColorToRgbaString(const CSSColor& color) {
21
+ std::ostringstream stream;
22
+
23
+ stream << "rgba("
24
+ << static_cast<int>(color.r) << ", "
25
+ << static_cast<int>(color.g) << ", "
26
+ << static_cast<int>(color.b) << ", "
27
+ << std::fixed << std::setprecision(3)
28
+ << (static_cast<float>(color.a) / 255.0f)
29
+ << ")";
30
+
31
+ return stream.str();
32
+ }
33
+
34
+ std::optional<jsi::Object> parseDropShadowString(jsi::Runtime& rt, const std::string& dropShadowString) {
35
+ auto maybeParsedDropShadow = parseCSSProperty<CSSDropShadowFilter>(std::string("drop-shadow(") + dropShadowString + ")");
36
+
37
+ if (!std::holds_alternative<CSSDropShadowFilter>(maybeParsedDropShadow)) {
38
+ return std::nullopt;
39
+ }
40
+
41
+ auto parsedDropShadow = std::get<CSSDropShadowFilter>(maybeParsedDropShadow);
42
+
43
+ if (
44
+ !isSupportedLength(parsedDropShadow.offsetX) ||
45
+ !isSupportedLength(parsedDropShadow.offsetY) ||
46
+ !isSupportedLength(parsedDropShadow.standardDeviation)
47
+ ) {
48
+ return std::nullopt;
49
+ }
50
+
51
+ jsi::Object shadowObject(rt);
52
+
53
+ shadowObject.setProperty(rt, "offsetX", parsedDropShadow.offsetX.value);
54
+ shadowObject.setProperty(rt, "offsetY", parsedDropShadow.offsetY.value);
55
+ shadowObject.setProperty(rt, "standardDeviation", parsedDropShadow.standardDeviation.value);
56
+ shadowObject.setProperty(
57
+ rt,
58
+ "color",
59
+ jsi::String::createFromUtf8(rt, cssColorToRgbaString(parsedDropShadow.color))
60
+ );
61
+
62
+ return shadowObject;
63
+ }
64
+
65
+ }
66
+
10
67
  // called only once while processing StyleSheet.create
11
68
  void parser::Parser::buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
12
69
  jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet, std::nullopt);
@@ -651,8 +708,42 @@ jsi::Value parser::Parser::parseFilters(jsi::Runtime &rt, Unistyle::Shared unist
651
708
 
652
709
  auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
653
710
 
711
+ if (!parsedResult.isObject()) {
712
+ return;
713
+ }
714
+
715
+ auto parsedResultObject = parsedResult.asObject(rt);
716
+ auto filterPropertyNames = parsedResultObject.getPropertyNames(rt);
717
+ auto filterPropertyCount = filterPropertyNames.size(rt);
718
+
719
+ for (size_t index = 0; index < filterPropertyCount; index++) {
720
+ auto filterName = filterPropertyNames.getValueAtIndex(rt, index).asString(rt).utf8(rt);
721
+
722
+ if (filterName != "dropShadow") {
723
+ continue;
724
+ }
725
+
726
+ auto filterValue = parsedResultObject.getProperty(rt, filterName.c_str());
727
+
728
+ if (filterValue.isString()) {
729
+ auto maybeParsedDropShadow = parseDropShadowString(rt, filterValue.asString(rt).utf8(rt));
730
+
731
+ if (!maybeParsedDropShadow.has_value()) {
732
+ return;
733
+ }
734
+
735
+ auto dropShadowObject = std::move(maybeParsedDropShadow.value());
736
+ parsedResultObject.setProperty(rt, filterName.c_str(), std::move(dropShadowObject));
737
+ continue;
738
+ }
739
+
740
+ if (!filterValue.isObject()) {
741
+ return;
742
+ }
743
+ }
744
+
654
745
  // take only one filter per object
655
- jsi::Array propertyNames = parsedResult.asObject(rt).getPropertyNames(rt);
746
+ jsi::Array propertyNames = parsedResultObject.getPropertyNames(rt);
656
747
  size_t length = propertyNames.size(rt);
657
748
 
658
749
  // ignore no filters
@@ -660,7 +751,7 @@ jsi::Value parser::Parser::parseFilters(jsi::Runtime &rt, Unistyle::Shared unist
660
751
  return;
661
752
  }
662
753
 
663
- parsedFilters.emplace_back(std::move(parsedResult));
754
+ parsedFilters.emplace_back(std::move(parsedResultObject));
664
755
  });
665
756
 
666
757
  // create jsi::Array result with correct filters
@@ -973,11 +1064,19 @@ folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, c
973
1064
  unistyleData->parsedStyle.value(),
974
1065
  [this, &rt, &state, &convertedStyles](const std::string& propertyName, jsi::Value& propertyValue) {
975
1066
  if (this->isColor(propertyName)) {
976
- convertedStyles.setProperty(
977
- rt,
978
- propertyName.c_str(),
979
- jsi::Value(state.parseColor(propertyValue))
980
- );
1067
+ if (propertyValue.isString()) {
1068
+ convertedStyles.setProperty(
1069
+ rt,
1070
+ propertyName.c_str(),
1071
+ jsi::Value(state.parseColor(propertyValue))
1072
+ );
1073
+ } else {
1074
+ convertedStyles.setProperty(
1075
+ rt,
1076
+ propertyName.c_str(),
1077
+ propertyValue
1078
+ );
1079
+ }
981
1080
 
982
1081
  return;
983
1082
  }
@@ -1021,10 +1120,60 @@ folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, c
1021
1120
  nestedValue.asObject(rt),
1022
1121
  [this, &rt, &state, &obj](const std::string& nestedPropName, jsi::Value& nestedPropValue) {
1023
1122
  if (this->isColor(nestedPropName)) {
1123
+ if (nestedPropValue.isString()) {
1124
+ obj.setProperty(
1125
+ rt,
1126
+ nestedPropName.c_str(),
1127
+ state.parseColor(nestedPropValue)
1128
+ );
1129
+ } else {
1130
+ obj.setProperty(
1131
+ rt,
1132
+ nestedPropName.c_str(),
1133
+ nestedPropValue
1134
+ );
1135
+ }
1136
+ } else if (nestedPropValue.isObject()) {
1137
+ auto nestedObj = nestedPropValue.asObject(rt);
1138
+
1139
+ if (nestedObj.isArray(rt) || nestedObj.isFunction(rt)) {
1140
+ obj.setProperty(
1141
+ rt,
1142
+ nestedPropName.c_str(),
1143
+ nestedPropValue
1144
+ );
1145
+
1146
+ return;
1147
+ }
1148
+
1149
+ jsi::Object parsedNestedObj(rt);
1150
+
1151
+ helpers::enumerateJSIObject(
1152
+ rt,
1153
+ nestedObj,
1154
+ [this, &rt, &state, &parsedNestedObj](const std::string& secondLevelPropName, jsi::Value& secondLevelPropValue) {
1155
+ if (this->isColor(secondLevelPropName) && secondLevelPropValue.isString()) {
1156
+ parsedNestedObj.setProperty(
1157
+ rt,
1158
+ secondLevelPropName.c_str(),
1159
+ state.parseColor(secondLevelPropValue)
1160
+ );
1161
+
1162
+ return;
1163
+ }
1164
+
1165
+ parsedNestedObj.setProperty(
1166
+ rt,
1167
+ secondLevelPropName.c_str(),
1168
+ secondLevelPropValue
1169
+ );
1170
+ }
1171
+ );
1172
+
1024
1173
  obj.setProperty(
1025
1174
  rt,
1026
1175
  nestedPropName.c_str(),
1027
- state.parseColor(nestedPropValue)
1176
+ parsedNestedObj
1028
1177
  );
1029
1178
  } else {
1030
1179
  obj.setProperty(
@@ -1042,11 +1191,15 @@ folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, c
1042
1191
  }
1043
1192
 
1044
1193
  if (this->isColor(propertyName)) {
1045
- parsedArray.setValueAtIndex(
1046
- rt,
1047
- i,
1048
- jsi::Value(state.parseColor(nestedValue))
1049
- );
1194
+ if (nestedValue.isString()) {
1195
+ parsedArray.setValueAtIndex(
1196
+ rt,
1197
+ i,
1198
+ jsi::Value(state.parseColor(nestedValue))
1199
+ );
1200
+ } else {
1201
+ parsedArray.setValueAtIndex(rt, i, nestedValue);
1202
+ }
1050
1203
  } else {
1051
1204
  parsedArray.setValueAtIndex(rt, i, nestedValue);
1052
1205
  }
@@ -36,6 +36,8 @@ const useProxifiedUnistyles = forcedTheme => {
36
36
  const [theme, setTheme] = (0, _react.useState)(_specs.UnistylesRuntime.getTheme(scopedTheme));
37
37
  const [_, runtimeChanged] = (0, _react.useReducer)(() => ({}), {});
38
38
  const disposeRef = (0, _react.useRef)(undefined);
39
+ const syncedDependenciesSizeRef = (0, _react.useRef)(-1);
40
+ const syncedScopedThemeRef = (0, _react.useRef)(undefined);
39
41
  const reinitListener = () => {
40
42
  disposeRef.current?.();
41
43
  disposeRef.current = (0, _listener.listener)({
@@ -55,9 +57,8 @@ const useProxifiedUnistyles = forcedTheme => {
55
57
  });
56
58
  };
57
59
  (0, _react.useEffect)(() => {
58
- reinitListener();
59
60
  return () => disposeRef.current?.();
60
- }, [dependencies.size]);
61
+ }, [disposeRef]);
61
62
  const maybeNewScopedTheme = _specs.UnistylesShadowRegistry.getScopedTheme();
62
63
  if (scopedTheme && maybeNewScopedTheme && scopedTheme !== maybeNewScopedTheme) {
63
64
  setScopedTheme(maybeNewScopedTheme);
@@ -91,6 +92,16 @@ const useProxifiedUnistyles = forcedTheme => {
91
92
  return target[prop];
92
93
  }
93
94
  });
95
+ (0, _react.useLayoutEffect)(() => {
96
+ const sameDeps = syncedDependenciesSizeRef.current === dependencies.size;
97
+ const sameScopedTheme = syncedScopedThemeRef.current === scopedTheme;
98
+ if (sameDeps && sameScopedTheme) {
99
+ return;
100
+ }
101
+ syncedDependenciesSizeRef.current = dependencies.size;
102
+ syncedScopedThemeRef.current = scopedTheme;
103
+ reinitListener();
104
+ }, [proxifiedTheme, proxifiedRuntime, scopedTheme]);
94
105
  return {
95
106
  proxifiedTheme,
96
107
  proxifiedRuntime,
@@ -102,6 +113,8 @@ const useProxifiedUnistyles = forcedTheme => {
102
113
  if (dependenciesSize === dependencies.size) {
103
114
  return;
104
115
  }
116
+ syncedDependenciesSizeRef.current = dependencies.size;
117
+ syncedScopedThemeRef.current = scopedTheme;
105
118
  reinitListener();
106
119
  }
107
120
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_specs","_NativePlatform","_listener","getMiniRuntime","UnistylesRuntime","miniRuntime","RTDependencyMap","breakpoint","UnistyleDependency","Breakpoints","colorScheme","ColorScheme","contentSizeCategory","ContentSizeCategory","hasAdaptiveThemes","AdaptiveThemes","insets","Insets","fontScale","FontScale","isLandscape","Orientation","isPortrait","navigationBar","NavigationBar","screen","Dimensions","statusBar","StatusBar","pixelRatio","PixelRatio","themeName","ThemeName","rtl","Rtl","useProxifiedUnistyles","forcedTheme","scopedTheme","setScopedTheme","useState","UnistylesShadowRegistry","getScopedTheme","dependencies","Set","theme","setTheme","getTheme","_","runtimeChanged","useReducer","disposeRef","useRef","undefined","reinitListener","current","listener","Array","from","updateTheme","updateRuntime","hasThemeNameChange","useEffect","size","maybeNewScopedTheme","proxifiedTheme","Proxy","get","target","prop","add","Theme","proxifiedRuntime","Ime","addDependencies","newDependencies","dependenciesSize","forEach","dependency","exports"],"sourceRoot":"../../../../src","sources":["core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_specs","_NativePlatform","_listener","getMiniRuntime","UnistylesRuntime","miniRuntime","RTDependencyMap","breakpoint","UnistyleDependency","Breakpoints","colorScheme","ColorScheme","contentSizeCategory","ContentSizeCategory","hasAdaptiveThemes","AdaptiveThemes","insets","Insets","fontScale","FontScale","isLandscape","Orientation","isPortrait","navigationBar","NavigationBar","screen","Dimensions","statusBar","StatusBar","pixelRatio","PixelRatio","themeName","ThemeName","rtl","Rtl","useProxifiedUnistyles","forcedTheme","scopedTheme","setScopedTheme","useState","UnistylesShadowRegistry","getScopedTheme","dependencies","Set","theme","setTheme","getTheme","_","runtimeChanged","useReducer","disposeRef","useRef","undefined","syncedDependenciesSizeRef","syncedScopedThemeRef","reinitListener","current","listener","Array","from","updateTheme","updateRuntime","hasThemeNameChange","useEffect","maybeNewScopedTheme","proxifiedTheme","Proxy","get","target","prop","add","Theme","proxifiedRuntime","Ime","useLayoutEffect","sameDeps","size","sameScopedTheme","addDependencies","newDependencies","dependenciesSize","forEach","dependency","exports"],"sourceRoot":"../../../../src","sources":["core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useReducer, useRef, useState } from 'react';
3
+ import { useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react';
4
4
  import { UnistylesRuntime, UnistylesShadowRegistry } from '../../specs';
5
5
  // It's imported that way because of circular dependency
6
6
  import { UnistyleDependency } from '../../specs/NativePlatform';
@@ -31,6 +31,8 @@ export const useProxifiedUnistyles = forcedTheme => {
31
31
  const [theme, setTheme] = useState(UnistylesRuntime.getTheme(scopedTheme));
32
32
  const [_, runtimeChanged] = useReducer(() => ({}), {});
33
33
  const disposeRef = useRef(undefined);
34
+ const syncedDependenciesSizeRef = useRef(-1);
35
+ const syncedScopedThemeRef = useRef(undefined);
34
36
  const reinitListener = () => {
35
37
  disposeRef.current?.();
36
38
  disposeRef.current = listener({
@@ -50,9 +52,8 @@ export const useProxifiedUnistyles = forcedTheme => {
50
52
  });
51
53
  };
52
54
  useEffect(() => {
53
- reinitListener();
54
55
  return () => disposeRef.current?.();
55
- }, [dependencies.size]);
56
+ }, [disposeRef]);
56
57
  const maybeNewScopedTheme = UnistylesShadowRegistry.getScopedTheme();
57
58
  if (scopedTheme && maybeNewScopedTheme && scopedTheme !== maybeNewScopedTheme) {
58
59
  setScopedTheme(maybeNewScopedTheme);
@@ -86,6 +87,16 @@ export const useProxifiedUnistyles = forcedTheme => {
86
87
  return target[prop];
87
88
  }
88
89
  });
90
+ useLayoutEffect(() => {
91
+ const sameDeps = syncedDependenciesSizeRef.current === dependencies.size;
92
+ const sameScopedTheme = syncedScopedThemeRef.current === scopedTheme;
93
+ if (sameDeps && sameScopedTheme) {
94
+ return;
95
+ }
96
+ syncedDependenciesSizeRef.current = dependencies.size;
97
+ syncedScopedThemeRef.current = scopedTheme;
98
+ reinitListener();
99
+ }, [proxifiedTheme, proxifiedRuntime, scopedTheme]);
89
100
  return {
90
101
  proxifiedTheme,
91
102
  proxifiedRuntime,
@@ -97,6 +108,8 @@ export const useProxifiedUnistyles = forcedTheme => {
97
108
  if (dependenciesSize === dependencies.size) {
98
109
  return;
99
110
  }
111
+ syncedDependenciesSizeRef.current = dependencies.size;
112
+ syncedScopedThemeRef.current = scopedTheme;
100
113
  reinitListener();
101
114
  }
102
115
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useReducer","useRef","useState","UnistylesRuntime","UnistylesShadowRegistry","UnistyleDependency","listener","getMiniRuntime","miniRuntime","RTDependencyMap","breakpoint","Breakpoints","colorScheme","ColorScheme","contentSizeCategory","ContentSizeCategory","hasAdaptiveThemes","AdaptiveThemes","insets","Insets","fontScale","FontScale","isLandscape","Orientation","isPortrait","navigationBar","NavigationBar","screen","Dimensions","statusBar","StatusBar","pixelRatio","PixelRatio","themeName","ThemeName","rtl","Rtl","useProxifiedUnistyles","forcedTheme","scopedTheme","setScopedTheme","getScopedTheme","dependencies","Set","theme","setTheme","getTheme","_","runtimeChanged","disposeRef","undefined","reinitListener","current","Array","from","updateTheme","updateRuntime","hasThemeNameChange","size","maybeNewScopedTheme","proxifiedTheme","Proxy","get","target","prop","add","Theme","proxifiedRuntime","Ime","addDependencies","newDependencies","dependenciesSize","forEach","dependency"],"sourceRoot":"../../../../src","sources":["core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,UAAU,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC/D,SAAoCC,gBAAgB,EAAEC,uBAAuB,QAAQ,aAAa;AAClG;AACA,SAASC,kBAAkB,QAAQ,4BAA4B;AAE/D,SAASC,QAAQ,QAAQ,YAAY;AAErC,MAAMC,cAAc,GAAGA,CAAA,KAA4B;EAC/C;EACA,OAAOJ,gBAAgB,CAACK,WAAW;AACvC,CAAC;AAED,MAAMC,eAAe,GAAG;EACpBC,UAAU,EAAEL,kBAAkB,CAACM,WAAW;EAC1CC,WAAW,EAAEP,kBAAkB,CAACQ,WAAW;EAC3CC,mBAAmB,EAAET,kBAAkB,CAACU,mBAAmB;EAC3DC,iBAAiB,EAAEX,kBAAkB,CAACY,cAAc;EACpDC,MAAM,EAAEb,kBAAkB,CAACc,MAAM;EACjCC,SAAS,EAAEf,kBAAkB,CAACgB,SAAS;EACvCC,WAAW,EAAEjB,kBAAkB,CAACkB,WAAW;EAC3CC,UAAU,EAAEnB,kBAAkB,CAACkB,WAAW;EAC1CE,aAAa,EAAEpB,kBAAkB,CAACqB,aAAa;EAC/CC,MAAM,EAAEtB,kBAAkB,CAACuB,UAAU;EACrCC,SAAS,EAAExB,kBAAkB,CAACyB,SAAS;EACvCC,UAAU,EAAE1B,kBAAkB,CAAC2B,UAAU;EACzCC,SAAS,EAAE5B,kBAAkB,CAAC6B,SAAS;EACvCC,GAAG,EAAE9B,kBAAkB,CAAC+B;AAC5B,CAA2E;AAE3E,OAAO,MAAMC,qBAAqB,GAAIC,WAA4B,IAAK;EACnE,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAGtC,QAAQ,CAACoC,WAAW,IAAIlC,uBAAuB,CAACqC,cAAc,CAAC,CAAmB,CAAC;EACzH,MAAM,CAACC,YAAY,CAAC,GAAGxC,QAAQ,CAAC,MAAM,IAAIyC,GAAG,CAAS,CAAC,CAAC;EACxD,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG3C,QAAQ,CAACC,gBAAgB,CAAC2C,QAAQ,CAACP,WAAW,CAAC,CAAC;EAC1E,MAAM,CAACQ,CAAC,EAAEC,cAAc,CAAC,GAAGhD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACtD,MAAMiD,UAAU,GAAGhD,MAAM,CAAeiD,SAAS,CAAC;EAElD,MAAMC,cAAc,GAAGA,CAAA,KAAM;IACzBF,UAAU,CAACG,OAAO,GAAG,CAAC;IACtBH,UAAU,CAACG,OAAO,GAAG9C,QAAQ,CAAC;MAC1BoC,YAAY,EAAEW,KAAK,CAACC,IAAI,CAACZ,YAAY,CAAC;MACtCa,WAAW,EAAEA,CAAA,KAAM;QACf,IAAIhB,WAAW,EAAE;UACb;QACJ;QAEAM,QAAQ,CAAC1C,gBAAgB,CAAC2C,QAAQ,CAACP,WAAW,CAAC,CAAC;MACpD,CAAC;MACDiB,aAAa,EAAGC,kBAA2B,IAAK;QAC5C,IAAIA,kBAAkB,IAAIlB,WAAW,EAAE;UACnC;QACJ;QAEAS,cAAc,CAAC,CAAC;MACpB;IACJ,CAAC,CAAC;EACN,CAAC;EAEDjD,SAAS,CAAC,MAAM;IACZoD,cAAc,CAAC,CAAC;IAEhB,OAAO,MAAMF,UAAU,CAACG,OAAO,GAAG,CAAC;EACvC,CAAC,EAAE,CAACV,YAAY,CAACgB,IAAI,CAAC,CAAC;EAGvB,MAAMC,mBAAmB,GAAGvD,uBAAuB,CAACqC,cAAc,CAAC,CAAmB;EAEtF,IAAIF,WAAW,IAAIoB,mBAAmB,IAAIpB,WAAW,KAAKoB,mBAAmB,EAAE;IAC3EnB,cAAc,CAACmB,mBAAmB,CAAC;EACvC;EAEA,MAAMC,cAAc,GAAG,IAAIC,KAAK,CAACjB,KAAK,EAAE;IACpCkB,GAAG,EAAEA,CAACC,MAAM,EAAEC,IAAI,KAAK;MACnBtB,YAAY,CAACuB,GAAG,CAAC5D,kBAAkB,CAAC6D,KAAK,CAAC;MAE1C,OAAOH,MAAM,CAACC,IAAI,CAAC;IACvB;EACJ,CAAC,CAAC;EACF,MAAMG,gBAAgB,GAAG,IAAIN,KAAK,CAACtD,cAAc,CAAC,CAAC,EAAE;IACjDuD,GAAG,EAAEA,CAACC,MAAM,EAAEC,IAAI,KAAK;MACnB,IAAIA,IAAI,KAAK,QAAQ,EAAE;QACnB,OAAO,IAAIH,KAAK,CAACE,MAAM,CAAC7C,MAAM,EAAE;UAC5B4C,GAAG,EAAEA,CAACC,MAAM,EAAEC,IAAI,KAAK;YACnB,IAAIA,IAAI,KAAK,KAAK,EAAE;cAChBtB,YAAY,CAACuB,GAAG,CAAC5D,kBAAkB,CAAC+D,GAAG,CAAC;cAExC,OAAOL,MAAM,CAACC,IAAI,CAAwB;YAC9C;YAEAtB,YAAY,CAACuB,GAAG,CAAC5D,kBAAkB,CAACc,MAAM,CAAC;YAE3C,OAAO4C,MAAM,CAACC,IAAI,CAAwB;UAC9C;QACJ,CAAC,CAAC;MACN;MAEA,IAAIA,IAAI,IAAIvD,eAAe,EAAE;QACzBiC,YAAY,CAACuB,GAAG,CAACxD,eAAe,CAACuD,IAAI,CAAiC,CAAC;MAC3E;MAEA,IAAIA,IAAI,KAAK,WAAW,IAAIzB,WAAW,EAAE;QACrC,OAAOA,WAAW;MACtB;MAEA,OAAOwB,MAAM,CAACC,IAAI,CAAwB;IAC9C;EACJ,CAAC,CAAC;EAEF,OAAO;IACHJ,cAAc;IACdO,gBAAgB;IAChBE,eAAe,EAAGC,eAA0C,IAAK;MAC7D,MAAMC,gBAAgB,GAAG7B,YAAY,CAACgB,IAAI;MAE1CY,eAAe,CAACE,OAAO,CAACC,UAAU,IAAI;QAClC/B,YAAY,CAACuB,GAAG,CAACQ,UAAU,CAAC;MAChC,CAAC,CAAC;MAEF,IAAIF,gBAAgB,KAAK7B,YAAY,CAACgB,IAAI,EAAE;QACxC;MACJ;MAEAP,cAAc,CAAC,CAAC;IACpB;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useLayoutEffect","useReducer","useRef","useState","UnistylesRuntime","UnistylesShadowRegistry","UnistyleDependency","listener","getMiniRuntime","miniRuntime","RTDependencyMap","breakpoint","Breakpoints","colorScheme","ColorScheme","contentSizeCategory","ContentSizeCategory","hasAdaptiveThemes","AdaptiveThemes","insets","Insets","fontScale","FontScale","isLandscape","Orientation","isPortrait","navigationBar","NavigationBar","screen","Dimensions","statusBar","StatusBar","pixelRatio","PixelRatio","themeName","ThemeName","rtl","Rtl","useProxifiedUnistyles","forcedTheme","scopedTheme","setScopedTheme","getScopedTheme","dependencies","Set","theme","setTheme","getTheme","_","runtimeChanged","disposeRef","undefined","syncedDependenciesSizeRef","syncedScopedThemeRef","reinitListener","current","Array","from","updateTheme","updateRuntime","hasThemeNameChange","maybeNewScopedTheme","proxifiedTheme","Proxy","get","target","prop","add","Theme","proxifiedRuntime","Ime","sameDeps","size","sameScopedTheme","addDependencies","newDependencies","dependenciesSize","forEach","dependency"],"sourceRoot":"../../../../src","sources":["core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useProxifiedUnistyles.d.ts","sourceRoot":"","sources":["../../../../../src/core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAA6C,MAAM,aAAa,CAAA;AAElG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAyBjD,eAAO,MAAM,qBAAqB,GAAI,cAAc,cAAc;;;uCAiFvB,KAAK,CAAC,kBAAkB,CAAC;CAcnE,CAAA"}
1
+ {"version":3,"file":"useProxifiedUnistyles.d.ts","sourceRoot":"","sources":["../../../../../src/core/useProxifiedUnistyles/useProxifiedUnistyles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAA6C,MAAM,aAAa,CAAA;AAElG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAyBjD,eAAO,MAAM,qBAAqB,GAAI,cAAc,cAAc;;;uCA8FvB,KAAK,CAAC,kBAAkB,CAAC;CAgBnE,CAAA"}
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /// See ``HybridNativePlatformSpec``
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
@@ -5,7 +5,6 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
- import Foundation
9
8
  import NitroModules
10
9
 
11
10
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-unistyles",
3
- "version": "3.0.22",
3
+ "version": "3.0.24",
4
4
  "description": "Level up your React Native StyleSheet",
5
5
  "scripts": {
6
6
  "test": "NODE_ENV=babel-test jest ./plugin",
@@ -146,11 +146,11 @@
146
146
  "husky": "9.1.7",
147
147
  "jest": "29.7.0",
148
148
  "metro-react-native-babel-preset": "0.77.0",
149
- "nitrogen": "0.33.2",
149
+ "nitrogen": "0.33.8",
150
150
  "react": "19.1.0",
151
151
  "react-native": "0.79.2",
152
152
  "react-native-builder-bob": "0.40.10",
153
- "react-native-nitro-modules": "0.33.2",
153
+ "react-native-nitro-modules": "0.33.8",
154
154
  "react-native-reanimated": "3.17.5",
155
155
  "react-native-web": "0.20.0",
156
156
  "react-test-renderer": "19.1.0",
@@ -1,4 +1,4 @@
1
- import { useEffect, useReducer, useRef, useState } from 'react'
1
+ import { useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react'
2
2
  import { type UnistylesMiniRuntime, UnistylesRuntime, UnistylesShadowRegistry } from '../../specs'
3
3
  // It's imported that way because of circular dependency
4
4
  import { UnistyleDependency } from '../../specs/NativePlatform'
@@ -33,6 +33,8 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
33
33
  const [theme, setTheme] = useState(UnistylesRuntime.getTheme(scopedTheme))
34
34
  const [_, runtimeChanged] = useReducer(() => ({}), {})
35
35
  const disposeRef = useRef<VoidFunction>(undefined)
36
+ const syncedDependenciesSizeRef = useRef(-1)
37
+ const syncedScopedThemeRef = useRef<UnistylesTheme | undefined>(undefined)
36
38
 
37
39
  const reinitListener = () => {
38
40
  disposeRef.current?.()
@@ -56,11 +58,8 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
56
58
  }
57
59
 
58
60
  useEffect(() => {
59
- reinitListener()
60
-
61
61
  return () => disposeRef.current?.()
62
- }, [dependencies.size])
63
-
62
+ }, [disposeRef])
64
63
 
65
64
  const maybeNewScopedTheme = UnistylesShadowRegistry.getScopedTheme() as UnistylesTheme
66
65
 
@@ -105,6 +104,20 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
105
104
  }
106
105
  })
107
106
 
107
+ useLayoutEffect(() => {
108
+ const sameDeps = syncedDependenciesSizeRef.current === dependencies.size
109
+ const sameScopedTheme = syncedScopedThemeRef.current === scopedTheme
110
+
111
+ if (sameDeps && sameScopedTheme) {
112
+ return
113
+ }
114
+
115
+ syncedDependenciesSizeRef.current = dependencies.size
116
+ syncedScopedThemeRef.current = scopedTheme
117
+
118
+ reinitListener()
119
+ }, [proxifiedTheme, proxifiedRuntime, scopedTheme])
120
+
108
121
  return {
109
122
  proxifiedTheme,
110
123
  proxifiedRuntime,
@@ -119,6 +132,8 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
119
132
  return
120
133
  }
121
134
 
135
+ syncedDependenciesSizeRef.current = dependencies.size
136
+ syncedScopedThemeRef.current = scopedTheme
122
137
  reinitListener()
123
138
  }
124
139
  }