@@ -10,13 +10,13 @@ describe("panda preset shape", () => {
1010 } ) ;
1111
1212 it ( "registers the squircleSupported condition" , ( ) => {
13- expect ( preset . conditions . extend [ "squircleSupported" ] ) . toBe (
13+ expect ( preset . conditions ! . extend ! [ "squircleSupported" ] ) . toBe (
1414 "@supports (corner-shape: superellipse(2))" ,
1515 ) ;
1616 } ) ;
1717
1818 it ( "registers a utility for every CAMEL_VARIANTS entry plus squircleAmount" , ( ) => {
19- const keys = Object . keys ( preset . utilities . extend ) . sort ( ) ;
19+ const keys = Object . keys ( preset . utilities ! . extend ! ) . sort ( ) ;
2020 const expected = [
2121 ...CAMEL_VARIANTS . map ( ( v ) => v . property ) ,
2222 "squircleAmount" ,
@@ -26,15 +26,15 @@ describe("panda preset shape", () => {
2626
2727 it ( "uses Panda's built-in `radii` token category for radius utilities" , ( ) => {
2828 for ( const variant of CAMEL_VARIANTS ) {
29- const u = preset . utilities . extend [ variant . property ] ;
29+ const u = preset . utilities ! . extend ! [ variant . property ] ;
3030 if ( ! u ) throw new Error ( `missing utility for ${ variant . property } ` ) ;
3131 expect ( u . values ) . toBe ( "radii" ) ;
3232 expect ( u . shorthand ) . toBe ( variant . shorthand ) ;
3333 }
3434 } ) ;
3535
3636 it ( "squircleAmount accepts numeric values via shorthand squircleAmt" , ( ) => {
37- const u = preset . utilities . extend [ "squircleAmount" ] ! ;
37+ const u = preset . utilities ! . extend ! [ "squircleAmount" ] ! ;
3838 expect ( u . shorthand ) . toBe ( "squircleAmt" ) ;
3939 expect ( u . values ) . toEqual ( { type : "number" } ) ;
4040 } ) ;
@@ -43,11 +43,13 @@ describe("panda preset shape", () => {
4343describe ( "panda preset transform output" , ( ) => {
4444 const preset = squirclePandaPreset ( ) ;
4545 const radiusToken = "var(--radii-md)" ; // Panda passes the resolved CSS variable string
46+ const mockToken = Object . assign ( ( ) => radiusToken , { raw : ( ) => undefined } ) as any ;
4647
4748 it ( "squircleRadius (all corners) emits camelCase keys with @supports block" , ( ) => {
48- const out = preset . utilities . extend [ "squircleRadius" ] ! . transform ! ( radiusToken , {
49- token : ( ) => radiusToken ,
49+ const out = preset . utilities ! . extend ! [ "squircleRadius" ] ! . transform ! ( radiusToken , {
50+ token : mockToken ,
5051 raw : "md" ,
52+ utils : { colorMix : ( ) => ( { invalid : true , value : "" } ) } ,
5153 } ) ;
5254 expect ( out ) . toMatchInlineSnapshot ( `
5355 {
@@ -62,9 +64,10 @@ describe("panda preset transform output", () => {
6264 } ) ;
6365
6466 it ( "squircleTopLeftRadius (single corner) inlines calc without --squircle-r" , ( ) => {
65- const out = preset . utilities . extend [ "squircleTopLeftRadius" ] ! . transform ! ( radiusToken , {
66- token : ( ) => radiusToken ,
67+ const out = preset . utilities ! . extend ! [ "squircleTopLeftRadius" ] ! . transform ! ( radiusToken , {
68+ token : mockToken ,
6769 raw : "md" ,
70+ utils : { colorMix : ( ) => ( { invalid : true , value : "" } ) } ,
6871 } ) ;
6972 expect ( out ) . toMatchInlineSnapshot ( `
7073 {
@@ -78,9 +81,10 @@ describe("panda preset transform output", () => {
7881 } ) ;
7982
8083 it ( "squircleTopRadius (multi-prop side) shares --squircle-r across both corners" , ( ) => {
81- const out = preset . utilities . extend [ "squircleTopRadius" ] ! . transform ! ( radiusToken , {
82- token : ( ) => radiusToken ,
84+ const out = preset . utilities ! . extend ! [ "squircleTopRadius" ] ! . transform ! ( radiusToken , {
85+ token : mockToken ,
8386 raw : "md" ,
87+ utils : { colorMix : ( ) => ( { invalid : true , value : "" } ) } ,
8488 } ) ;
8589 expect ( out ) . toMatchInlineSnapshot ( `
8690 {
@@ -97,9 +101,10 @@ describe("panda preset transform output", () => {
97101 } ) ;
98102
99103 it ( "squircleAmount sets the variable and gates corner-shape" , ( ) => {
100- const out = preset . utilities . extend [ "squircleAmount" ] ! . transform ! ( "3" , {
101- token : ( ) => "3" ,
104+ const out = preset . utilities ! . extend ! [ "squircleAmount" ] ! . transform ! ( "3" , {
105+ token : mockToken ,
102106 raw : "3" ,
107+ utils : { colorMix : ( ) => ( { invalid : true , value : "" } ) } ,
103108 } ) ;
104109 expect ( out ) . toMatchInlineSnapshot ( `
105110 {
@@ -113,61 +118,46 @@ describe("panda preset transform output", () => {
113118} ) ;
114119
115120describe ( "panda preset options" , ( ) => {
121+ const mockToken = Object . assign ( ( ) => "1rem" , { raw : ( ) => undefined } ) as any ;
122+ const mockArgs = ( raw : string ) => ( { token : mockToken , raw, utils : { colorMix : ( ) => ( { invalid : true , value : "" } ) } } ) ;
123+
116124 it ( "custom amtVar lands in every place the default --squircle-amt does" , ( ) => {
117125 const preset = squirclePandaPreset ( { amtVar : "--my-amt" } ) ;
118126
119- // 1. radius transform — @supports calc references the custom var, and
120- // cornerShape uses it as the superellipse argument.
121- const radiusOut = preset . utilities . extend [ "squircleRadius" ] ! . transform ! ( "1rem" , {
122- token : ( ) => "1rem" ,
123- raw : "1rem" ,
124- } ) as Record < string , unknown > ;
127+ const radiusOut = preset . utilities ! . extend ! [ "squircleRadius" ] ! . transform ! ( "1rem" , mockArgs ( "1rem" ) ) as Record < string , unknown > ;
125128 const radiusSupports = radiusOut [
126129 "@supports (corner-shape: superellipse(2))"
127130 ] as Record < string , string > ;
128131 expect ( radiusSupports [ "--squircle-r" ] ) . toContain ( "var(--my-amt, 2)" ) ;
129132 expect ( radiusSupports [ "cornerShape" ] ) . toBe ( "superellipse(var(--my-amt, 2))" ) ;
130133
131- // 2. squircleAmount transform — writes the custom var and the @supports
132- // block reads it back.
133- const amtOut = preset . utilities . extend [ "squircleAmount" ] ! . transform ! ( "3" , {
134- token : ( ) => "3" ,
135- raw : "3" ,
136- } ) as Record < string , unknown > ;
134+ const amtOut = preset . utilities ! . extend ! [ "squircleAmount" ] ! . transform ! ( "3" , mockArgs ( "3" ) ) as Record < string , unknown > ;
137135 expect ( amtOut [ "--my-amt" ] ) . toBe ( "3" ) ;
138136 const amtSupports = amtOut [
139137 "@supports (corner-shape: superellipse(2))"
140138 ] as Record < string , string > ;
141139 expect ( amtSupports [ "cornerShape" ] ) . toBe ( "superellipse(var(--my-amt))" ) ;
142140
143- // 3. The default name does not appear anywhere when overridden.
144141 const allOutput = JSON . stringify ( { radiusOut, amtOut } ) ;
145142 expect ( allOutput ) . not . toContain ( "--squircle-amt" ) ;
146143 } ) ;
147144
148145 it ( "custom rVar threads through multi-prop side transforms" , ( ) => {
149146 const preset = squirclePandaPreset ( { rVar : "--my-r" } ) ;
150- const out = preset . utilities . extend [ "squircleTopRadius" ] ! . transform ! ( "1rem" , {
151- token : ( ) => "1rem" ,
152- raw : "1rem" ,
153- } ) as Record < string , unknown > ;
147+ const out = preset . utilities ! . extend ! [ "squircleTopRadius" ] ! . transform ! ( "1rem" , mockArgs ( "1rem" ) ) as Record < string , unknown > ;
154148 const supports = out [ "@supports (corner-shape: superellipse(2))" ] as Record <
155149 string ,
156150 string
157151 > ;
158152 expect ( supports [ "--my-r" ] ) . toContain ( "calc(1rem" ) ;
159153 expect ( supports [ "borderTopLeftRadius" ] ) . toBe ( "var(--my-r)" ) ;
160154 expect ( supports [ "borderTopRightRadius" ] ) . toBe ( "var(--my-r)" ) ;
161- // And the default --squircle-r is gone.
162155 expect ( JSON . stringify ( out ) ) . not . toContain ( "--squircle-r" ) ;
163156 } ) ;
164157
165158 it ( "amtVar and rVar can both be overridden together" , ( ) => {
166159 const preset = squirclePandaPreset ( { amtVar : "--a" , rVar : "--r" } ) ;
167- const out = preset . utilities . extend [ "squircleRadius" ] ! . transform ! ( "1rem" , {
168- token : ( ) => "1rem" ,
169- raw : "1rem" ,
170- } ) as Record < string , unknown > ;
160+ const out = preset . utilities ! . extend ! [ "squircleRadius" ] ! . transform ! ( "1rem" , mockArgs ( "1rem" ) ) as Record < string , unknown > ;
171161 const supports = out [ "@supports (corner-shape: superellipse(2))" ] as Record <
172162 string ,
173163 string
0 commit comments