Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/core/src/parser/model/BrowserParserCss.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ export const parseNode = (el: CSSStyleSheet | CSSRule) => {
singleAtRule = true;
atRuleType = AT_RULE_NAMES[type];
condition = parseCondition(node);
} else if (AT_RULE_KEYS.indexOf(`${type}`) >= 0 || (!type && getNestableAtRule(node))) {
} else if (AT_RULE_KEYS.indexOf(`${type}`) >= 0 || getNestableAtRule(node)) {
const subRules = parseNode(node);
const subAtRuleType = AT_RULE_NAMES[type] || getNestableAtRule(node);
condition = parseCondition(node);
Expand Down
10 changes: 10 additions & 0 deletions packages/core/test/specs/css_composer/model/CssModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,16 @@ describe('CssRule', () => {
expect(obj.toCSS()).toEqual(`@media ${media}{.test1{color:red;}}`);
});

test('toCSS keeps the space in a named container rule', () => {
const containerText = 'somename (min-width: 300px)';
obj.set('atRuleType', 'container');
obj.set('mediaText', containerText);
obj.getSelectors().add({ name: 'test1' });
obj.setStyle({ height: '100px' });
expect(obj.getAtRule()).toEqual(`@container ${containerText}`);
expect(obj.toCSS()).toEqual(`@container ${containerText}{.test1{height:100px;}}`);
});

test('toCSS with a generic at-rule', () => {
obj.set('atRuleType', 'supports');
obj.getSelectors().add({ name: 'test1' });
Expand Down
22 changes: 18 additions & 4 deletions packages/core/test/specs/parser/model/ParserCss.ts
Original file line number Diff line number Diff line change
Expand Up @@ -375,8 +375,7 @@ describe('ParserCss', () => {
expect(obj.parse(str)).toEqual([result]);
});

// Unsupported by CSSOM parser
test.skip('Parse rule with @container at-rule', () => {
test('Parse rule with @container at-rule', () => {
const atRuleType = 'container';
const atRuleText = 'somename (min-width: 300px)';
const input = `@${atRuleType} ${atRuleText} {
Expand All @@ -386,14 +385,12 @@ describe('ParserCss', () => {
const output = [
{
selectors: ['cls1'],
selectorsAdd: '',
atRuleType,
mediaText: atRuleText,
style: { height: '100px' },
},
{
selectors: ['cls2'],
selectorsAdd: '',
atRuleType,
mediaText: atRuleText,
style: { height: '200px' },
Expand All @@ -402,6 +399,23 @@ describe('ParserCss', () => {
expect(obj.parse(input)).toEqual(output);
});

test('Parse rule with anonymous @container at-rule', () => {
const atRuleType = 'container';
const atRuleText = '(min-width: 300px)';
const input = `@${atRuleType} ${atRuleText} {
.cls1{ height: 100px }
}`;
const output = [
{
selectors: ['cls1'],
atRuleType,
mediaText: atRuleText,
style: { height: '100px' },
},
];
expect(obj.parse(input)).toEqual(output);
});

test('Parses multiple font-face at-rules', () => {
const str = `
@font-face {
Expand Down
Loading