@@ -272,6 +272,28 @@ export const sizingRule: UtilityRule = (parsed, config) => {
272272 return { height : value } as Record < string , string >
273273 }
274274
275+ // Size utility (width + height shorthand)
276+ if ( parsed . utility === 'size' && parsed . value ) {
277+ const sizeMap : Record < string , string > = {
278+ full : '100%' ,
279+ auto : 'auto' ,
280+ min : 'min-content' ,
281+ max : 'max-content' ,
282+ fit : 'fit-content' ,
283+ }
284+ // Handle fractions: 1/2 -> 50%
285+ if ( parsed . value . includes ( '/' ) ) {
286+ const [ num , denom ] = parsed . value . split ( '/' ) . map ( Number )
287+ if ( Number . isNaN ( num ) || Number . isNaN ( denom ) || denom === 0 ) {
288+ return undefined
289+ }
290+ const percent = `${ ( num / denom ) * 100 } %`
291+ return { width : percent , height : percent } as Record < string , string >
292+ }
293+ const value = config . theme . spacing [ parsed . value ] || sizeMap [ parsed . value ] || parsed . value
294+ return { width : value , height : value } as Record < string , string >
295+ }
296+
275297 return undefined
276298}
277299
@@ -631,6 +653,44 @@ export const borderRadiusRule: UtilityRule = (parsed, config) => {
631653 const value = parsed . value ? config . theme . borderRadius [ parsed . value ] : config . theme . borderRadius . DEFAULT
632654 return value ? { 'border-radius' : value } : undefined
633655 }
656+
657+ // Logical border-radius utilities (for RTL/LTR support)
658+ // rounded-s-* (start) - applies to start corners
659+ if ( parsed . utility === 'rounded-s' && parsed . value ) {
660+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
661+ return {
662+ 'border-start-start-radius' : value ,
663+ 'border-end-start-radius' : value ,
664+ } as Record < string , string >
665+ }
666+ // rounded-e-* (end) - applies to end corners
667+ if ( parsed . utility === 'rounded-e' && parsed . value ) {
668+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
669+ return {
670+ 'border-start-end-radius' : value ,
671+ 'border-end-end-radius' : value ,
672+ } as Record < string , string >
673+ }
674+ // rounded-ss-* (start-start corner)
675+ if ( parsed . utility === 'rounded-ss' && parsed . value ) {
676+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
677+ return { 'border-start-start-radius' : value } as Record < string , string >
678+ }
679+ // rounded-se-* (start-end corner)
680+ if ( parsed . utility === 'rounded-se' && parsed . value ) {
681+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
682+ return { 'border-start-end-radius' : value } as Record < string , string >
683+ }
684+ // rounded-es-* (end-start corner)
685+ if ( parsed . utility === 'rounded-es' && parsed . value ) {
686+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
687+ return { 'border-end-start-radius' : value } as Record < string , string >
688+ }
689+ // rounded-ee-* (end-end corner)
690+ if ( parsed . utility === 'rounded-ee' && parsed . value ) {
691+ const value = config . theme . borderRadius [ parsed . value ] || parsed . value
692+ return { 'border-end-end-radius' : value } as Record < string , string >
693+ }
634694}
635695
636696// Export all rules (order matters - more specific rules first)
0 commit comments