@@ -163,78 +163,78 @@ const COLOR_PROPS = ['color', 'bg', 'borderColor']
163163const SPACE_PROPS = [ 'm' , 'p' ]
164164const DEFAULT_PROPS_MAP = {
165165 flex : {
166- default : ' 1 0 0' ,
166+ default : / 1 0 0 / ,
167167 value : '1' ,
168168 } ,
169169 p : {
170- default : '0px' ,
170+ default : / \b 0 ( p x ) ? \b / ,
171171 value : null ,
172172 } ,
173173 pr : {
174- default : '0px' ,
174+ default : / \b 0 ( p x ) ? \b / ,
175175 value : null ,
176176 } ,
177177 pt : {
178- default : '0px' ,
178+ default : / \b 0 ( p x ) ? \b / ,
179179 value : null ,
180180 } ,
181181 pb : {
182- default : '0px' ,
182+ default : / \b 0 ( p x ) ? \b / ,
183183 value : null ,
184184 } ,
185185 px : {
186- default : '0px' ,
186+ default : / \b 0 ( p x ) ? \b / ,
187187 value : null ,
188188 } ,
189189 py : {
190- default : '0px' ,
190+ default : / \b 0 ( p x ) ? \b / ,
191191 value : null ,
192192 } ,
193193 pl : {
194- default : '0px' ,
194+ default : / \b 0 ( p x ) ? \b / ,
195195 value : null ,
196196 } ,
197197 m : {
198- default : '0px' ,
198+ default : / \b 0 ( p x ) ? \b / ,
199199 value : null ,
200200 } ,
201201 mt : {
202- default : '0px' ,
202+ default : / \b 0 ( p x ) ? \b / ,
203203 value : null ,
204204 } ,
205205 mb : {
206- default : '0px' ,
206+ default : / \b 0 ( p x ) ? \b / ,
207207 value : null ,
208208 } ,
209209 mr : {
210- default : '0px' ,
210+ default : / \b 0 ( p x ) ? \b / ,
211211 value : null ,
212212 } ,
213213 ml : {
214- default : '0px' ,
214+ default : / \b 0 ( p x ) ? \b / ,
215215 value : null ,
216216 } ,
217217 mx : {
218- default : '0px' ,
218+ default : / \b 0 ( p x ) ? \b / ,
219219 value : null ,
220220 } ,
221221 my : {
222- default : '0px' ,
222+ default : / \b 0 ( p x ) ? \b / ,
223223 value : null ,
224224 } ,
225225} as const
226226
227227const CONVERT_PROPS_MAP = {
228228 p : [
229229 {
230- test : / ^ 0 p x ( \d * [ 1 - 9 ] | \d { 2 , } ) p x $ / ,
230+ test : / ^ 0 ( p x ) ? ( \d * [ 1 - 9 ] | \d { 2 , } ) p x $ / ,
231231 value : {
232232 prop : 'px' ,
233233 value : ( value : string ) => value . split ( ' ' ) [ 1 ] ,
234234 } ,
235235 } ,
236236 {
237- test : / ^ ( \d * [ 1 - 9 ] | \d { 2 , } ) p x 0 p x $ / ,
237+ test : / ^ ( \d * [ 1 - 9 ] | \d { 2 , } ) p x 0 ( p x ) ? $ / ,
238238 value : {
239239 prop : 'py' ,
240240 value : ( value : string ) => value . split ( ' ' ) [ 0 ] ,
@@ -307,14 +307,14 @@ const CONVERT_PROPS_MAP = {
307307 ] ,
308308 m : [
309309 {
310- test : / ^ 0 p x ( \d * [ 1 - 9 ] | \d { 2 , } ) p x $ / ,
310+ test : / ^ 0 ( p x ) ? ( \d * [ 1 - 9 ] | \d { 2 , } ) p x $ / ,
311311 value : {
312312 prop : 'mx' ,
313313 value : ( value : string ) => value . split ( ' ' ) [ 1 ] ,
314314 } ,
315315 } ,
316316 {
317- test : / ^ ( \d * [ 1 - 9 ] | \d { 2 , } ) p x 0 p x $ / ,
317+ test : / ^ ( \d * [ 1 - 9 ] | \d { 2 , } ) p x 0 ( p x ) ? $ / ,
318318 value : {
319319 prop : 'my' ,
320320 value : ( value : string ) => value . split ( ' ' ) [ 0 ] ,
@@ -402,6 +402,34 @@ const CONVERT_PROPS_VALUE_MAP = {
402402 } ,
403403 ] ,
404404}
405+
406+ function replaceAllVarFunctions (
407+ str : string ,
408+ replacer : ( v : string ) => string ,
409+ ) : string {
410+ let result = ''
411+ let i = 0
412+ while ( i < str . length ) {
413+ const varStart = str . indexOf ( 'var(' , i )
414+ if ( varStart === - 1 ) {
415+ result += str . slice ( i )
416+ break
417+ }
418+ result += str . slice ( i , varStart )
419+ let open = 1
420+ let end = varStart + 4
421+ for ( ; end < str . length ; end ++ ) {
422+ if ( str [ end ] === '(' ) open ++
423+ if ( str [ end ] === ')' ) open --
424+ if ( open === 0 ) break
425+ }
426+ const varContent = str . slice ( varStart , end + 1 )
427+ result += replacer ( varContent )
428+ i = end + 1
429+ }
430+ return result
431+ }
432+
405433export function organizeProps ( props : Record < string , string > ) {
406434 const ret = { ...props }
407435 for ( const key of COLOR_PROPS )
@@ -435,11 +463,12 @@ export function organizeProps(props: Record<string, string>) {
435463 delete ret [ key ]
436464 continue
437465 }
466+ if ( ret [ key ] . includes ( '0px' ) ) ret [ key ] = ret [ key ] . replace ( / \b 0 p x \b / g, '0' )
438467 if ( ret [ key ] . startsWith ( '"' ) && ret [ key ] . endsWith ( '"' ) )
439468 ret [ key ] = ret [ key ] . slice ( 1 , - 1 )
440469 if ( ret [ key ] . includes ( '/*' ) ) ret [ key ] = ret [ key ] . split ( '/*' ) [ 0 ] . trim ( )
441470 if ( ret [ key ] . includes ( 'var(--' ) )
442- ret [ key ] = ret [ key ] . replace ( / v a r \( - - [ ^ ) ] * \) / g , extractVariableName )
471+ ret [ key ] = replaceAllVarFunctions ( ret [ key ] , extractVariableName )
443472 }
444473 for ( const key in CONVERT_PROPS_VALUE_MAP ) {
445474 if ( ! ret [ key ] ) continue
@@ -454,8 +483,9 @@ export function organizeProps(props: Record<string, string>) {
454483 }
455484 for ( const key in DEFAULT_PROPS_MAP )
456485 if (
457- ret [ key ] ===
458- DEFAULT_PROPS_MAP [ key as keyof typeof DEFAULT_PROPS_MAP ] . default
486+ DEFAULT_PROPS_MAP [ key as keyof typeof DEFAULT_PROPS_MAP ] . default . test (
487+ ret [ key ] ,
488+ )
459489 ) {
460490 const defaultValue =
461491 DEFAULT_PROPS_MAP [ key as keyof typeof DEFAULT_PROPS_MAP ] . value
0 commit comments