@@ -15,7 +15,9 @@ import {
15
15
BooleanExpression ,
16
16
OrExpression ,
17
17
NotExpression ,
18
- AndExpression
18
+ AndExpression ,
19
+ BlockClass ,
20
+ Block
19
21
} from 'css-blocks' ;
20
22
import {
21
23
JSXElementAnalysis ,
@@ -31,6 +33,7 @@ import {
31
33
import {
32
34
assertNever ,
33
35
unwrap ,
36
+ isSome ,
34
37
} from '@opticss/util' ;
35
38
import {
36
39
arrayExpression ,
@@ -142,23 +145,31 @@ function constructTernary(classes: DynamicClasses<TernaryAST>, rewrite: IndexedC
142
145
expr . push ( classes . condition ) ;
143
146
// The true styles
144
147
if ( isTrueCondition ( classes ) ) {
145
- expr . push ( builders . number ( classes . whenTrue . length ) ) ;
146
- // TODO: inheritance
147
- expr . push ( ...classes . whenTrue . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
148
+ let trueClasses = resolveInheritance ( classes . whenTrue , rewrite ) ;
149
+ expr . push ( builders . number ( trueClasses . length ) ) ;
150
+ expr . push ( ...trueClasses . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
148
151
} else {
149
152
expr . push ( builders . number ( 0 ) ) ;
150
153
}
151
154
// The false styles
152
155
if ( isFalseCondition ( classes ) ) {
153
- expr . push ( builders . number ( classes . whenFalse . length ) ) ;
154
- // TODO: inheritance
155
- expr . push ( ...classes . whenFalse . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
156
+ let falseClasses = resolveInheritance ( classes . whenFalse , rewrite ) ;
157
+ expr . push ( builders . number ( falseClasses . length ) ) ;
158
+ expr . push ( ...falseClasses . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
156
159
} else {
157
160
expr . push ( builders . number ( 0 ) ) ;
158
161
}
159
162
return expr ;
160
163
}
161
164
165
+ function resolveInheritance ( classes : Array < BlockClass | Block > , rewrite : IndexedClassRewrite < BlockObject > ) {
166
+ let allClasses = [ ...classes ] ;
167
+ for ( let c of classes ) {
168
+ allClasses . push ( ...c . resolveInheritance ( ) as Set < Block > | Set < BlockClass > ) ;
169
+ }
170
+ return allClasses . filter ( c => isSome ( rewrite . indexOf ( c ) ) ) ;
171
+ }
172
+
162
173
/*
163
174
* if conditional type has a dependency:
164
175
* 3/4: number (d) of style indexes this is dependent on.
0 commit comments