@@ -310,3 +310,85 @@ describe("parseSizing - custom spacing", () => {
310310 expect ( parseSizing ( "h-8" ) ) . toEqual ( { height : 32 } ) ; // Default behavior
311311 } ) ;
312312} ) ;
313+
314+ describe ( "parseSizing - size (width + height)" , ( ) => {
315+ it ( "should parse size with numeric values" , ( ) => {
316+ expect ( parseSizing ( "size-0" ) ) . toEqual ( { width : 0 , height : 0 } ) ;
317+ expect ( parseSizing ( "size-4" ) ) . toEqual ( { width : 16 , height : 16 } ) ;
318+ expect ( parseSizing ( "size-8" ) ) . toEqual ( { width : 32 , height : 32 } ) ;
319+ expect ( parseSizing ( "size-96" ) ) . toEqual ( { width : 384 , height : 384 } ) ;
320+ } ) ;
321+
322+ it ( "should parse size with fractional values" , ( ) => {
323+ expect ( parseSizing ( "size-0.5" ) ) . toEqual ( { width : 2 , height : 2 } ) ;
324+ expect ( parseSizing ( "size-1.5" ) ) . toEqual ( { width : 6 , height : 6 } ) ;
325+ expect ( parseSizing ( "size-2.5" ) ) . toEqual ( { width : 10 , height : 10 } ) ;
326+ } ) ;
327+
328+ it ( "should parse size with percentage values" , ( ) => {
329+ expect ( parseSizing ( "size-full" ) ) . toEqual ( { width : "100%" , height : "100%" } ) ;
330+ expect ( parseSizing ( "size-1/2" ) ) . toEqual ( { width : "50%" , height : "50%" } ) ;
331+ expect ( parseSizing ( "size-1/3" ) ) . toEqual ( { width : "33.333333%" , height : "33.333333%" } ) ;
332+ expect ( parseSizing ( "size-2/3" ) ) . toEqual ( { width : "66.666667%" , height : "66.666667%" } ) ;
333+ expect ( parseSizing ( "size-1/4" ) ) . toEqual ( { width : "25%" , height : "25%" } ) ;
334+ expect ( parseSizing ( "size-3/4" ) ) . toEqual ( { width : "75%" , height : "75%" } ) ;
335+ } ) ;
336+
337+ it ( "should parse size with special values" , ( ) => {
338+ expect ( parseSizing ( "size-auto" ) ) . toEqual ( { width : "auto" , height : "auto" } ) ;
339+ } ) ;
340+
341+ it ( "should parse size with arbitrary pixel values" , ( ) => {
342+ expect ( parseSizing ( "size-[123px]" ) ) . toEqual ( { width : 123 , height : 123 } ) ;
343+ expect ( parseSizing ( "size-[200]" ) ) . toEqual ( { width : 200 , height : 200 } ) ;
344+ expect ( parseSizing ( "size-[50px]" ) ) . toEqual ( { width : 50 , height : 50 } ) ;
345+ } ) ;
346+
347+ it ( "should parse size with arbitrary percentage values" , ( ) => {
348+ expect ( parseSizing ( "size-[50%]" ) ) . toEqual ( { width : "50%" , height : "50%" } ) ;
349+ expect ( parseSizing ( "size-[33.333%]" ) ) . toEqual ( { width : "33.333%" , height : "33.333%" } ) ;
350+ expect ( parseSizing ( "size-[85%]" ) ) . toEqual ( { width : "85%" , height : "85%" } ) ;
351+ } ) ;
352+
353+ it ( "should support custom spacing values for size" , ( ) => {
354+ const customSpacing = { sm : 8 , md : 16 , lg : 32 , xl : 64 } ;
355+ expect ( parseSizing ( "size-sm" , customSpacing ) ) . toEqual ( { width : 8 , height : 8 } ) ;
356+ expect ( parseSizing ( "size-md" , customSpacing ) ) . toEqual ( { width : 16 , height : 16 } ) ;
357+ expect ( parseSizing ( "size-lg" , customSpacing ) ) . toEqual ( { width : 32 , height : 32 } ) ;
358+ expect ( parseSizing ( "size-xl" , customSpacing ) ) . toEqual ( { width : 64 , height : 64 } ) ;
359+ } ) ;
360+
361+ it ( "should allow custom spacing to override preset values" , ( ) => {
362+ const customSpacing = { "4" : 20 } ; // Override default (16)
363+ expect ( parseSizing ( "size-4" , customSpacing ) ) . toEqual ( { width : 20 , height : 20 } ) ;
364+ } ) ;
365+
366+ it ( "should prefer arbitrary values over custom spacing" , ( ) => {
367+ expect ( parseSizing ( "size-[24px]" , { "4" : 20 } ) ) . toEqual ( { width : 24 , height : 24 } ) ;
368+ expect ( parseSizing ( "size-[50]" , { sm : 8 } ) ) . toEqual ( { width : 50 , height : 50 } ) ;
369+ } ) ;
370+
371+ it ( "should handle all fractional percentage variants" , ( ) => {
372+ expect ( parseSizing ( "size-1/5" ) ) . toEqual ( { width : "20%" , height : "20%" } ) ;
373+ expect ( parseSizing ( "size-2/5" ) ) . toEqual ( { width : "40%" , height : "40%" } ) ;
374+ expect ( parseSizing ( "size-3/5" ) ) . toEqual ( { width : "60%" , height : "60%" } ) ;
375+ expect ( parseSizing ( "size-4/5" ) ) . toEqual ( { width : "80%" , height : "80%" } ) ;
376+ expect ( parseSizing ( "size-1/6" ) ) . toEqual ( { width : "16.666667%" , height : "16.666667%" } ) ;
377+ expect ( parseSizing ( "size-5/6" ) ) . toEqual ( { width : "83.333333%" , height : "83.333333%" } ) ;
378+ } ) ;
379+
380+ it ( "should handle edge case size values" , ( ) => {
381+ expect ( parseSizing ( "size-0" ) ) . toEqual ( { width : 0 , height : 0 } ) ;
382+ } ) ;
383+
384+ it ( "should return null for invalid size values" , ( ) => {
385+ expect ( parseSizing ( "size-invalid" ) ) . toBeNull ( ) ;
386+ expect ( parseSizing ( "size-999" ) ) . toBeNull ( ) ;
387+ } ) ;
388+
389+ it ( "should return null for arbitrary values with unsupported units" , ( ) => {
390+ expect ( parseSizing ( "size-[16rem]" ) ) . toBeNull ( ) ;
391+ expect ( parseSizing ( "size-[2em]" ) ) . toBeNull ( ) ;
392+ expect ( parseSizing ( "size-[50vh]" ) ) . toBeNull ( ) ;
393+ } ) ;
394+ } ) ;
0 commit comments