@@ -2,6 +2,7 @@ import { expect, test } from 'vitest'
2
2
import {
3
3
addThemeValues ,
4
4
evaluateExpression ,
5
+ inlineThemeValues ,
5
6
replaceCssCalc ,
6
7
replaceCssVarsWithFallbacks ,
7
8
} from './index'
@@ -124,6 +125,42 @@ test('recursive theme replacements', () => {
124
125
)
125
126
} )
126
127
128
+ test ( 'recursive theme replacements (inlined)' , ( ) => {
129
+ let map = new Map < string , string > ( [
130
+ [ '--color-a' , 'var(--color-a)' ] ,
131
+ [ '--color-b' , 'rgb(var(--color-b))' ] ,
132
+ [ '--color-c' , 'rgb(var(--channel) var(--channel) var(--channel))' ] ,
133
+ [ '--channel' , '255' ] ,
134
+
135
+ [ '--color-d' , 'rgb(var(--indirect) var(--indirect) var(--indirect))' ] ,
136
+ [ '--indirect' , 'var(--channel)' ] ,
137
+ [ '--channel' , '255' ] ,
138
+
139
+ [ '--mutual-a' , 'calc(var(--mutual-b) * 1)' ] ,
140
+ [ '--mutual-b' , 'calc(var(--mutual-a) + 1)' ] ,
141
+ ] )
142
+
143
+ let state : State = {
144
+ enabled : true ,
145
+ designSystem : {
146
+ theme : { prefix : null } as any ,
147
+ resolveThemeValue : ( name ) => map . get ( name ) ?? null ,
148
+ } as DesignSystem ,
149
+ }
150
+
151
+ expect ( inlineThemeValues ( 'var(--color-a)' , state ) ) . toBe ( 'var(--color-a)' )
152
+ expect ( inlineThemeValues ( 'var(--color-b)' , state ) ) . toBe ( 'rgb(var(--color-b))' )
153
+ expect ( inlineThemeValues ( 'var(--color-c)' , state ) ) . toBe ( 'rgb(255 255 255)' )
154
+
155
+ // This one is wrong but fixing it without breaking the infinite recursion guard is complex
156
+ expect ( inlineThemeValues ( 'var(--color-d)' , state ) ) . toBe (
157
+ 'rgb(255 var(--indirect) var(--indirect))' ,
158
+ )
159
+
160
+ expect ( inlineThemeValues ( 'var(--mutual-a)' , state ) ) . toBe ( 'calc(calc(var(--mutual-a) + 1) * 1)' )
161
+ expect ( inlineThemeValues ( 'var(--mutual-b)' , state ) ) . toBe ( 'calc(calc(var(--mutual-b) * 1) + 1)' )
162
+ } )
163
+
127
164
test ( 'Evaluating CSS calc expressions' , ( ) => {
128
165
expect ( replaceCssCalc ( 'calc(1px + 1px)' , ( node ) => evaluateExpression ( node . value ) ) ) . toBe ( '2px' )
129
166
expect ( replaceCssCalc ( 'calc(1px * 4)' , ( node ) => evaluateExpression ( node . value ) ) ) . toBe ( '4px' )
0 commit comments