@@ -72,7 +72,7 @@ impl ExtractStyle for StyleSheetProperty {
7272 }
7373}
7474
75- static VAR_RE : Lazy < Regex > = Lazy :: new ( || Regex :: new ( r"\$\w +" ) . unwrap ( ) ) ;
75+ static VAR_RE : Lazy < Regex > = Lazy :: new ( || Regex :: new ( r"\$[\w.] +" ) . unwrap ( ) ) ;
7676static INTERFACE_KEY_RE : Lazy < Regex > =
7777 Lazy :: new ( || Regex :: new ( r"^[a-zA-Z_$][a-zA-Z0-9_$]*$" ) . unwrap ( ) ) ;
7878
@@ -88,7 +88,7 @@ fn convert_theme_variable_value(value: &str) -> String {
8888 if value. contains ( "$" ) {
8989 VAR_RE
9090 . replace_all ( value, |caps : & regex:: Captures | {
91- format ! ( "var(--{})" , & caps[ 0 ] [ 1 ..] )
91+ format ! ( "var(--{})" , & caps[ 0 ] [ 1 ..] . replace ( '.' , "-" ) )
9292 } )
9393 . to_string ( )
9494 } else {
@@ -690,20 +690,22 @@ mod tests {
690690 use extractor:: { ExtractOption , extract} ;
691691 use insta:: assert_debug_snapshot;
692692
693- #[ test]
694- fn test_convert_theme_variable_value ( ) {
695- assert_eq ! ( convert_theme_variable_value( "1px" ) , "1px" ) ;
696- assert_eq ! ( convert_theme_variable_value( "$var" ) , "var(--var)" ) ;
697-
698- assert_eq ! (
699- convert_theme_variable_value( "$var $var" ) ,
700- "var(--var) var(--var)"
701- ) ;
702-
703- assert_eq ! (
704- convert_theme_variable_value( "1px solid $red" ) ,
705- "1px solid var(--red)"
706- ) ;
693+ use rstest:: rstest;
694+
695+ #[ rstest]
696+ #[ case( "1px" , "1px" ) ]
697+ #[ case( "$var" , "var(--var)" ) ]
698+ #[ case( "$var $var" , "var(--var) var(--var)" ) ]
699+ #[ case( "1px solid $red" , "1px solid var(--red)" ) ]
700+ // Test dot notation theme variables (e.g., $primary.100)
701+ // Dots should be converted to dashes for CSS variable names
702+ #[ case( "$primary.100" , "var(--primary-100)" ) ]
703+ #[ case( "$gray.200 $blue.500" , "var(--gray-200) var(--blue-500)" ) ]
704+ #[ case( "1px solid $border.primary" , "1px solid var(--border-primary)" ) ]
705+ // Test deep nested dot notation
706+ #[ case( "$color.brand.primary.100" , "var(--color-brand-primary-100)" ) ]
707+ fn test_convert_theme_variable_value ( #[ case] input : & str , #[ case] expected : & str ) {
708+ assert_eq ! ( convert_theme_variable_value( input) , expected) ;
707709 }
708710
709711 #[ test]
0 commit comments