diff --git a/packages/core/src/stylable-transformer.ts b/packages/core/src/stylable-transformer.ts index a10693fc4..b7c21a824 100644 --- a/packages/core/src/stylable-transformer.ts +++ b/packages/core/src/stylable-transformer.ts @@ -827,10 +827,15 @@ export class InferredSelector { for (const resolvedContext of this.resolveSet.values()) { /** * search for elements in each resolved selector. - * start at 1 for extended symbols to prefer inherited elements over local + * start at 1 for legacy flat mode to prefer inherited elements over local */ const startIndex = - resolvedContext.length === 1 || resolvedContext[0]?.symbol._kind === 'part' ? 0 : 1; + resolvedContext.length === 1 || + (resolvedContext[0] && + (STStructure.isStructureMode(resolvedContext[0].meta) || + resolvedContext[0].symbol._kind === 'part')) + ? 0 + : 1; resolved: for (let i = startIndex; i < resolvedContext.length; i++) { const { symbol, meta } = resolvedContext[i]; const structureMode = STStructure.isStructureMode(meta); diff --git a/packages/core/test/features/st-structure.spec.ts b/packages/core/test/features/st-structure.spec.ts index 14ec93d78..a14a5df61 100644 --- a/packages/core/test/features/st-structure.spec.ts +++ b/packages/core/test/features/st-structure.spec.ts @@ -458,6 +458,26 @@ describe('@st structure', () => { shouldReportNoDiagnostics(meta); }); + it('should resolve first level definition', () => { + const { sheets } = testStylableCore(` + @st .b { + @st ::title => & > h2; + } + @st .a :is(.b) { + @st ::title => & > h1; + } + + /* @rule .entry__a > h1 */ + .a::title {} + + /* @rule .entry__b > h2 */ + .b::title {} + `); + + const { meta } = sheets['/entry.st.css']; + + shouldReportNoDiagnostics(meta); + }); it('should resolve inherited parts', () => { const { sheets } = testStylableCore({ 'base.st.css': `