@@ -20,7 +20,9 @@ import {
20
20
BooleanExpression ,
21
21
OrExpression ,
22
22
NotExpression ,
23
- AndExpression
23
+ AndExpression ,
24
+ BlockClass ,
25
+ Block
24
26
} from "css-blocks" ;
25
27
import {
26
28
TemplateElement ,
@@ -36,6 +38,7 @@ import {
36
38
import {
37
39
assertNever ,
38
40
unwrap ,
41
+ isSome ,
39
42
} from "@opticss/util" ;
40
43
41
44
const enum SourceExpression {
@@ -130,23 +133,31 @@ function constructTernary(classes: DynamicClasses<TernaryAST>, rewrite: IndexedC
130
133
expr . push ( classes . condition ) ;
131
134
// The true styles
132
135
if ( isTrueCondition ( classes ) ) {
133
- expr . push ( builders . number ( classes . whenTrue . length ) ) ;
134
- // TODO: inheritance
135
- expr . push ( ...classes . whenTrue . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
136
+ let trueClasses = resolveInheritance ( classes . whenTrue , rewrite ) ;
137
+ expr . push ( builders . number ( trueClasses . length ) ) ;
138
+ expr . push ( ...trueClasses . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
136
139
} else {
137
140
expr . push ( builders . number ( 0 ) ) ;
138
141
}
139
142
// The false styles
140
143
if ( isFalseCondition ( classes ) ) {
141
- expr . push ( builders . number ( classes . whenFalse . length ) ) ;
142
- // TODO: inheritance
143
- expr . push ( ...classes . whenFalse . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
144
+ let falseClasses = resolveInheritance ( classes . whenFalse , rewrite ) ;
145
+ expr . push ( builders . number ( falseClasses . length ) ) ;
146
+ expr . push ( ...falseClasses . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
144
147
} else {
145
148
expr . push ( builders . number ( 0 ) ) ;
146
149
}
147
150
return expr ;
148
151
}
149
152
153
+ function resolveInheritance ( classes : Array < BlockClass | Block > , rewrite : IndexedClassRewrite < BlockObject > ) {
154
+ let allClasses = [ ...classes ] ;
155
+ for ( let c of classes ) {
156
+ allClasses . push ( ...c . resolveInheritance ( ) as Set < Block > | Set < BlockClass > ) ;
157
+ }
158
+ return allClasses . filter ( c => isSome ( rewrite . indexOf ( c ) ) ) ;
159
+ }
160
+
150
161
/*
151
162
* if conditional type has a dependency:
152
163
* 3/4: number (d) of style indexes this is dependent on.
0 commit comments