@@ -359,19 +359,15 @@ export class Twind {
359
359
for ( const parsed of parse ( rule ) ) {
360
360
if ( / \$ { x* } / . test ( parsed . name ) ) continue
361
361
362
- const [ , arbitrayValue ] = parsed . name . match ( / - ( \[ [ ^ \] ] + ] ) / ) || [ ]
362
+ const hasArbitrayValue = / - ( \[ [ ^ \] ] + ] ) / . test ( parsed . name )
363
363
364
364
const utilitiyExists =
365
365
! parsed . name ||
366
366
completions . tokens . some ( ( completion ) => {
367
367
if ( completion . kind != 'utility' ) return false
368
368
369
- if ( arbitrayValue ) {
370
- return (
371
- completion . theme &&
372
- completion . raw . replace ( `{{theme(${ completion . theme ?. section } )}}` , arbitrayValue ) ===
373
- parsed . name
374
- )
369
+ if ( hasArbitrayValue ) {
370
+ return parsed . name . startsWith ( completion . value ) && parsed . name != completion . value
375
371
}
376
372
377
373
switch ( completion . interpolation ) {
@@ -536,6 +532,7 @@ export class Twind {
536
532
// | `nonzero` // PositiveNumber
537
533
if ( value . startsWith ( 'theme(' ) && value . endsWith ( ')' ) ) {
538
534
const sectionKey = value . slice ( 6 , - 1 )
535
+
539
536
const section = theme ( sectionKey as keyof Theme ) ( context )
540
537
541
538
Object . keys ( section )
@@ -547,6 +544,7 @@ export class Twind {
547
544
548
545
// Is this the base object for nested values
549
546
const value = section [ key ]
547
+
550
548
if (
551
549
typeof value === 'object' &&
552
550
Object . keys ( value ) . every ( ( nestedKey ) => keys . includes ( `${ key } -${ nestedKey } ` ) )
@@ -556,22 +554,33 @@ export class Twind {
556
554
557
555
return true
558
556
} )
557
+ // Add marker for arbitrary value
558
+ . concat ( '[' )
559
559
. forEach ( ( key ) => {
560
+ if ( key == '[' && suffix ) {
561
+ return
562
+ }
563
+
560
564
let className = prefix
561
565
if ( key && key != 'DEFAULT' ) {
562
566
className += key
563
567
}
564
568
if ( className . endsWith ( '-' ) ) {
565
569
className = className . slice ( 0 , - 1 )
566
570
}
571
+
567
572
className += suffix
568
573
569
574
completionTokens . set (
570
575
className ,
571
576
createCompletionToken ( className , {
572
577
kind : screens . has ( className ) ? 'screen' : undefined ,
573
578
raw : directive ,
574
- theme : { section : sectionKey as keyof Theme , key, value : section [ key ] } ,
579
+ detail : key == '[' ? 'arbitrary value' : undefined ,
580
+ theme :
581
+ key == '['
582
+ ? { section : sectionKey as keyof Theme , key : '' , value : '' }
583
+ : { section : sectionKey as keyof Theme , key, value : section [ key ] } ,
575
584
} ) ,
576
585
)
577
586
} )
0 commit comments