react-native-unistyles 3.0.0-nightly-20250617 → 3.0.0-nightly-20250626

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +4 -4
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/unistyles/NativePlatform+android.kt +1 -0
  4. package/android/src/main/java/com/unistyles/NativePlatform+insets.kt +20 -10
  5. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +9 -2
  6. package/lib/commonjs/components/AdaptiveTheme.js +1 -1
  7. package/lib/commonjs/components/AdaptiveTheme.js.map +1 -1
  8. package/lib/commonjs/components/NamedTheme.js +1 -1
  9. package/lib/commonjs/components/NamedTheme.js.map +1 -1
  10. package/lib/commonjs/components/ScopedTheme.js +23 -18
  11. package/lib/commonjs/components/ScopedTheme.js.map +1 -1
  12. package/lib/commonjs/core/createUnistylesElement.js +2 -2
  13. package/lib/commonjs/core/createUnistylesElement.js.map +1 -1
  14. package/lib/commonjs/core/useProxifiedUnistyles/listener.js +1 -1
  15. package/lib/commonjs/core/useProxifiedUnistyles/listener.js.map +1 -1
  16. package/lib/commonjs/core/useProxifiedUnistyles/listener.native.js +2 -1
  17. package/lib/commonjs/core/useProxifiedUnistyles/listener.native.js.map +1 -1
  18. package/lib/commonjs/core/useProxifiedUnistyles/useProxifiedUnistyles.js +14 -2
  19. package/lib/commonjs/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -1
  20. package/lib/commonjs/web/convert/object/boxShadow.js.map +1 -1
  21. package/lib/commonjs/web/convert/utils.js +1 -0
  22. package/lib/commonjs/web/convert/utils.js.map +1 -1
  23. package/lib/commonjs/web/listener.js +2 -2
  24. package/lib/commonjs/web/listener.js.map +1 -1
  25. package/lib/commonjs/web/runtime.js +5 -0
  26. package/lib/commonjs/web/runtime.js.map +1 -1
  27. package/lib/module/components/AdaptiveTheme.js +1 -1
  28. package/lib/module/components/AdaptiveTheme.js.map +1 -1
  29. package/lib/module/components/NamedTheme.js +1 -1
  30. package/lib/module/components/NamedTheme.js.map +1 -1
  31. package/lib/module/components/ScopedTheme.js +23 -18
  32. package/lib/module/components/ScopedTheme.js.map +1 -1
  33. package/lib/module/core/createUnistylesElement.js +2 -2
  34. package/lib/module/core/createUnistylesElement.js.map +1 -1
  35. package/lib/module/core/useProxifiedUnistyles/listener.js +1 -1
  36. package/lib/module/core/useProxifiedUnistyles/listener.js.map +1 -1
  37. package/lib/module/core/useProxifiedUnistyles/listener.native.js +2 -1
  38. package/lib/module/core/useProxifiedUnistyles/listener.native.js.map +1 -1
  39. package/lib/module/core/useProxifiedUnistyles/useProxifiedUnistyles.js +14 -2
  40. package/lib/module/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -1
  41. package/lib/module/web/convert/object/boxShadow.js.map +1 -1
  42. package/lib/module/web/convert/utils.js +1 -0
  43. package/lib/module/web/convert/utils.js.map +1 -1
  44. package/lib/module/web/listener.js +2 -2
  45. package/lib/module/web/listener.js.map +1 -1
  46. package/lib/module/web/runtime.js +5 -0
  47. package/lib/module/web/runtime.js.map +1 -1
  48. package/lib/typescript/src/components/NamedTheme.d.ts +1 -1
  49. package/lib/typescript/src/components/NamedTheme.d.ts.map +1 -1
  50. package/lib/typescript/src/components/ScopedTheme.d.ts +9 -3
  51. package/lib/typescript/src/components/ScopedTheme.d.ts.map +1 -1
  52. package/lib/typescript/src/core/createUnistylesElement.d.ts.map +1 -1
  53. package/lib/typescript/src/core/useProxifiedUnistyles/listener.native.d.ts.map +1 -1
  54. package/lib/typescript/src/core/useProxifiedUnistyles/types.d.ts +1 -1
  55. package/lib/typescript/src/core/useProxifiedUnistyles/types.d.ts.map +1 -1
  56. package/lib/typescript/src/core/useProxifiedUnistyles/useProxifiedUnistyles.d.ts.map +1 -1
  57. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -1
  58. package/lib/typescript/src/web/listener.d.ts +4 -2
  59. package/lib/typescript/src/web/listener.d.ts.map +1 -1
  60. package/lib/typescript/src/web/runtime.d.ts.map +1 -1
  61. package/package.json +1 -1
  62. package/src/components/AdaptiveTheme.tsx +1 -1
  63. package/src/components/NamedTheme.tsx +2 -2
  64. package/src/components/ScopedTheme.tsx +39 -32
  65. package/src/core/createUnistylesElement.tsx +5 -3
  66. package/src/core/useProxifiedUnistyles/listener.native.ts +3 -1
  67. package/src/core/useProxifiedUnistyles/listener.ts +1 -1
  68. package/src/core/useProxifiedUnistyles/types.ts +1 -1
  69. package/src/core/useProxifiedUnistyles/useProxifiedUnistyles.ts +19 -2
  70. package/src/web/convert/object/boxShadow.ts +2 -2
  71. package/src/web/convert/utils.ts +2 -1
  72. package/src/web/listener.ts +8 -6
  73. package/src/web/runtime.ts +7 -0
@@ -10,7 +10,9 @@ export const listener = ({ dependencies, updateTheme, updateRuntime }: ListenerP
10
10
  }
11
11
 
12
12
  if (changedDependencies.some((dependency: UnistyleDependency) => dependencies.includes(dependency))) {
13
- updateRuntime()
13
+ const hasThemeNameChange = changedDependencies.includes(UnistyleDependency.ThemeName)
14
+
15
+ updateRuntime(hasThemeNameChange)
14
16
  }
15
17
  })
16
18
 
@@ -4,7 +4,7 @@ import type { ListenerProps } from './types'
4
4
 
5
5
  export const listener = ({ dependencies, updateTheme, updateRuntime }: ListenerProps) => {
6
6
  const disposeTheme = unistyles.services.listener.addListeners(dependencies.filter(dependency => dependency === UnistyleDependency.Theme), updateTheme)
7
- const disposeRuntime = unistyles.services.listener.addListeners(dependencies.filter(dependency => dependency !== UnistyleDependency.Theme), updateRuntime)
7
+ const disposeRuntime = unistyles.services.listener.addListeners(dependencies.filter(dependency => dependency !== UnistyleDependency.Theme), dependency => updateRuntime(dependency === UnistyleDependency.ThemeName))
8
8
 
9
9
  return () => {
10
10
  disposeTheme()
@@ -2,6 +2,6 @@ import type { UnistyleDependency } from '../../specs'
2
2
 
3
3
  export type ListenerProps = {
4
4
  updateTheme: VoidFunction,
5
- updateRuntime: VoidFunction,
5
+ updateRuntime(themeNameChange: boolean): void,
6
6
  dependencies: Array<UnistyleDependency>
7
7
  }
@@ -28,7 +28,7 @@ const RTDependencyMap = {
28
28
  } satisfies Partial<Record<keyof UnistylesMiniRuntime, UnistyleDependency>>
29
29
 
30
30
  export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
31
- const scopedTheme = forcedTheme ?? UnistylesShadowRegistry.getScopedTheme() as UnistylesTheme
31
+ const [scopedTheme, setScopedTheme] = useState(forcedTheme ?? UnistylesShadowRegistry.getScopedTheme() as UnistylesTheme)
32
32
  const [dependencies] = useState(() => new Set<number>())
33
33
  const [theme, setTheme] = useState(UnistylesRuntime.getTheme(scopedTheme))
34
34
  const [_, runtimeChanged] = useReducer(() => ({}), {})
@@ -45,7 +45,13 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
45
45
 
46
46
  setTheme(UnistylesRuntime.getTheme(scopedTheme))
47
47
  },
48
- updateRuntime: () => runtimeChanged()
48
+ updateRuntime: (hasThemeNameChange: boolean) => {
49
+ if (hasThemeNameChange && scopedTheme) {
50
+ return
51
+ }
52
+
53
+ runtimeChanged()
54
+ }
49
55
  })
50
56
  }
51
57
 
@@ -55,6 +61,13 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
55
61
  return () => disposeRef.current?.()
56
62
  }, [dependencies.size])
57
63
 
64
+
65
+ const maybeNewScopedTheme = UnistylesShadowRegistry.getScopedTheme() as UnistylesTheme
66
+
67
+ if (scopedTheme && maybeNewScopedTheme && scopedTheme !== maybeNewScopedTheme) {
68
+ setScopedTheme(maybeNewScopedTheme)
69
+ }
70
+
58
71
  const proxifiedTheme = new Proxy(theme, {
59
72
  get: (target, prop) => {
60
73
  dependencies.add(UnistyleDependency.Theme)
@@ -84,6 +97,10 @@ export const useProxifiedUnistyles = (forcedTheme?: UnistylesTheme) => {
84
97
  dependencies.add(RTDependencyMap[prop as keyof typeof RTDependencyMap])
85
98
  }
86
99
 
100
+ if (prop === 'themeName' && scopedTheme) {
101
+ return scopedTheme
102
+ }
103
+
87
104
  return target[prop as keyof typeof target]
88
105
  }
89
106
  })
@@ -25,7 +25,7 @@ export const getBoxShadow = (boxShadow: Array<BoxShadowValue>) => {
25
25
  const boxShadowStyle = Object.fromEntries(boxShadow.map(shadow => {
26
26
  const [key] = Object.keys(shadow)
27
27
  return [key, shadow[key as keyof BoxShadowValue]]
28
- }))
28
+ })) as BoxShadowValue
29
29
 
30
30
  return {
31
31
  boxShadow: createBoxShadowValue(boxShadowStyle)
@@ -42,7 +42,7 @@ export const getBoxShadow = (boxShadow: Array<BoxShadowValue>) => {
42
42
  }
43
43
 
44
44
  return [key, value]
45
- }))
45
+ })) as BoxShadowValue
46
46
 
47
47
  return {
48
48
  [breakpoint]: {
@@ -1,5 +1,6 @@
1
1
  // based on react-native-web normalizer
2
2
  // https://github.com/necolas/react-native-web
3
+ /// <reference path="module.d.ts" />
3
4
  import normalizeColors from '@react-native/normalize-colors'
4
5
  import type { BoxShadowValue } from 'react-native'
5
6
  import type { TransformStyles } from '../../types/core'
@@ -30,7 +31,7 @@ export const normalizeColor = (color: string, opacity = 1) => {
30
31
  return color
31
32
  }
32
33
 
33
- const hex = integer.toString(16).padStart(8, '0')
34
+ const hex = integer.toString(16).padStart(8, '0') as string
34
35
 
35
36
  if (hex.length === 8) {
36
37
  const [r = 0, g = 0, b = 0, a = 1] = hex
@@ -1,16 +1,18 @@
1
1
  import { UnistyleDependency } from '../specs/NativePlatform'
2
2
  import type { UnistylesServices } from './types'
3
3
 
4
+ type Listener = (dependency: UnistyleDependency) => void
5
+
4
6
  export class UnistylesListener {
5
7
  private isInitialized = false
6
- private listeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
7
- private stylesheetListeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
8
+ private listeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<Listener>())
9
+ private stylesheetListeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<Listener>())
8
10
 
9
11
  constructor(private services: UnistylesServices) {}
10
12
 
11
13
  emitChange = (dependency: UnistyleDependency) => {
12
- this.stylesheetListeners[dependency]?.forEach(listener => listener())
13
- this.listeners[dependency]?.forEach(listener => listener())
14
+ this.stylesheetListeners[dependency]?.forEach(listener => listener(dependency))
15
+ this.listeners[dependency]?.forEach(listener => listener(dependency))
14
16
  }
15
17
 
16
18
  initListeners = () => {
@@ -49,7 +51,7 @@ export class UnistylesListener {
49
51
  window.addEventListener('resize', () => this.emitChange(UnistyleDependency.Dimensions))
50
52
  }
51
53
 
52
- addListeners = (dependencies: Array<UnistyleDependency>, listener: VoidFunction) => {
54
+ addListeners = (dependencies: Array<UnistyleDependency>, listener: Listener) => {
53
55
  dependencies.forEach(dependency => this.listeners[dependency]?.add(listener))
54
56
 
55
57
  return () => {
@@ -57,7 +59,7 @@ export class UnistylesListener {
57
59
  }
58
60
  }
59
61
 
60
- addStylesheetListeners = (dependencies: Array<UnistyleDependency>, listener: VoidFunction) => {
62
+ addStylesheetListeners = (dependencies: Array<UnistyleDependency>, listener: Listener) => {
61
63
  dependencies.forEach(dependency => this.stylesheetListeners[dependency]?.add(listener))
62
64
 
63
65
  return () => {
@@ -49,6 +49,12 @@ export class UnistylesRuntime {
49
49
  }
50
50
 
51
51
  get themeName() {
52
+ const scopedTheme = this.services.shadowRegistry.getScopedTheme()
53
+
54
+ if (scopedTheme) {
55
+ return scopedTheme
56
+ }
57
+
52
58
  if (this.services.state.hasAdaptiveThemes) {
53
59
  return schemeToTheme(this.colorScheme) as AppThemeName
54
60
  }
@@ -215,6 +221,7 @@ export class UnistylesRuntime {
215
221
  const newTheme = updater(oldTheme)
216
222
 
217
223
  this.services.state.themes.set(themeName, newTheme)
224
+ this.services.listener.emitChange(UnistyleDependency.Theme)
218
225
 
219
226
  if (this.services.state.CSSVars) {
220
227
  this.services.state.cssThemes.set(