@@ -64,25 +64,43 @@ export function completionsFromClassList(
64
64
}
65
65
66
66
if ( state . jit ) {
67
+ let { variants : existingVariants , offset } = getVariantsFromClassName ( state , partialClassName )
68
+
67
69
if (
68
70
context &&
69
71
( context . triggerKind === 1 ||
70
72
( context . triggerKind === 2 && context . triggerCharacter === '/' ) ) &&
71
73
partialClassName . includes ( '/' )
72
74
) {
73
- // opacity modifiers
75
+ // modifiers
76
+ let modifiers : string [ ]
74
77
let beforeSlash = partialClassName . split ( '/' ) . slice ( 0 , - 1 ) . join ( '/' )
75
- let testClass = beforeSlash + '/[0]'
76
- let { rules } = jit . generateRules ( state , [ testClass ] )
77
- if ( rules . length > 0 ) {
78
- let opacities = dlv ( state . config , 'theme.opacity' , { } )
79
- if ( ! isObject ( opacities ) ) {
80
- opacities = { }
78
+ let classListContainsModifiers = state . classList . some (
79
+ ( cls ) => Array . isArray ( cls ) && cls [ 1 ] . modifiers
80
+ )
81
+
82
+ if ( classListContainsModifiers ) {
83
+ let baseClassName = beforeSlash . slice ( offset )
84
+ modifiers = state . classList . find (
85
+ ( cls ) => Array . isArray ( cls ) && cls [ 0 ] === baseClassName
86
+ ) ?. [ 1 ] . modifiers
87
+ } else {
88
+ let testClass = beforeSlash + '/[0]'
89
+ let { rules } = jit . generateRules ( state , [ testClass ] )
90
+ if ( rules . length > 0 ) {
91
+ let opacities = dlv ( state . config , 'theme.opacity' , { } )
92
+ if ( ! isObject ( opacities ) ) {
93
+ opacities = { }
94
+ }
95
+ modifiers = Object . keys ( opacities )
81
96
}
97
+ }
98
+
99
+ if ( modifiers ) {
82
100
return {
83
101
isIncomplete : false ,
84
- items : Object . keys ( opacities ) . map ( ( opacity , index ) => {
85
- let className = `${ beforeSlash } /${ opacity } `
102
+ items : modifiers . map ( ( modifier , index ) => {
103
+ let className = `${ beforeSlash } /${ modifier } `
86
104
let kind : CompletionItemKind = 21
87
105
let documentation : string = null
88
106
@@ -110,8 +128,6 @@ export function completionsFromClassList(
110
128
}
111
129
}
112
130
113
- let { variants : existingVariants , offset } = getVariantsFromClassName ( state , partialClassName )
114
-
115
131
replacementRange . start . character += offset
116
132
117
133
let important = partialClassName . substr ( offset ) . startsWith ( '!' )
0 commit comments