Skip to content

Commit 4013f04

Browse files
committed
Fix: CSS - Support for styles that return CSSRule #114
1 parent f021bef commit 4013f04

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

packages/transform-to-vanilla/src/transform.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from "./transform-object/index";
77
import type { ComplexStyleRule, StyleRule } from "@vanilla-extract/css";
88
import type {
9+
CSSRule,
910
ComplexCSSRule,
1011
ComplexCSSItem,
1112
ClassNames
@@ -19,15 +20,15 @@ export function transform(
1920
if (Array.isArray(style)) {
2021
const contexts: TransformContext[] = [];
2122
const results = style.map((eachStyle) => {
22-
if (isClassNames(eachStyle)) {
23-
return eachStyle;
24-
}
25-
if (typeof eachStyle === "function") {
26-
return eachStyle();
23+
const styleValue =
24+
typeof eachStyle === "function" ? eachStyle() : eachStyle;
25+
26+
if (isClassNames(styleValue)) {
27+
return styleValue;
2728
}
2829

2930
const tempContext = structuredClone(context);
30-
const result = transformStyle(eachStyle, tempContext);
31+
const result = transformStyle(styleValue, tempContext);
3132
contexts.push(tempContext);
3233
return result;
3334
});
@@ -72,10 +73,16 @@ if (import.meta.vitest) {
7273
it("Functions", () => {
7374
const classNameFunctions = [
7475
() => "myClassName1",
75-
(_arg: number) => "myClassName2"
76+
(_arg: number) => "myClassName2",
77+
(size = 10) =>
78+
({ padding: size, margin: size, border: "none" }) satisfies CSSRule
7679
];
7780
const result = transform(classNameFunctions);
78-
expect(result).toStrictEqual(["myClassName1", "myClassName2"]);
81+
expect(result).toStrictEqual([
82+
"myClassName1",
83+
"myClassName2",
84+
{ padding: 10, margin: 10, border: "none" } satisfies CSSRule
85+
]);
7986
});
8087

8188
it("Style", () => {

packages/transform-to-vanilla/src/types/style-rule.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export type ComplexCSSItem =
2828
| CSSRule
2929
| ClassNames
3030
// eslint-disable-next-line @typescript-eslint/no-explicit-any
31-
| ((...args: any[]) => ClassNames);
31+
| ((...args: any[]) => ClassNames | CSSRule);
3232

3333
export interface CSSRule
3434
extends CSSPropertiesWithConditions,
@@ -546,7 +546,8 @@ if (import.meta.vitest) {
546546
assertType<ComplexCSSRule>([
547547
() => "className1",
548548
(_arg: number) => "className2",
549-
(_arg: CSSRule, _debugId: string) => "className3"
549+
(_arg: CSSRule, _debugId: string) => "className3",
550+
(_arg: CSSRule, _debugId: string) => ({ padding: 10 }) satisfies CSSRule
550551
]);
551552
});
552553

@@ -576,10 +577,8 @@ if (import.meta.vitest) {
576577
() => "className3",
577578
(_arg: number) => "className4",
578579
(_arg: CSSRule, _debugId: string) => "className5",
579-
{
580-
padding: 10,
581-
marginTop: 25
582-
},
580+
(_arg: CSSRule, _debugId: string) =>
581+
({ padding: 10, marginTop: 25 }) satisfies CSSRule,
583582
{
584583
color: "red",
585584
_hover: {

0 commit comments

Comments
 (0)