@@ -21,7 +21,7 @@ static SELECTOR_ORDER_MAP: Lazy<HashMap<String, u8>> = Lazy::new(|| {
2121 . into_iter ( )
2222 . enumerate ( )
2323 {
24- map. insert ( format ! ( "& :{selector}" ) , idx as u8 ) ;
24+ map. insert ( format ! ( ":{selector}" ) , idx as u8 ) ;
2525 }
2626 map
2727} ) ;
@@ -41,6 +41,7 @@ pub fn is_debug() -> bool {
4141pub enum StyleSelector {
4242 Media ( String ) ,
4343 Selector ( String ) ,
44+ Global ( String ) ,
4445}
4546
4647impl PartialOrd for StyleSelector {
@@ -55,7 +56,7 @@ fn get_selector_order(selector: &str) -> u8 {
5556 selector
5657 . split ( '&' )
5758 . next_back ( )
58- . map ( |a| format ! ( "& {a}" ) )
59+ . map ( |a| format ! ( "{a}" ) )
5960 . unwrap_or ( selector. to_string ( ) )
6061 } else {
6162 selector. to_string ( )
@@ -75,6 +76,37 @@ impl Ord for StyleSelector {
7576 }
7677 ( StyleSelector :: Media ( _) , StyleSelector :: Selector ( _) ) => Ordering :: Greater ,
7778 ( StyleSelector :: Selector ( _) , StyleSelector :: Media ( _) ) => Ordering :: Less ,
79+ ( StyleSelector :: Global ( a) , StyleSelector :: Global ( b) ) => {
80+ if a == b {
81+ return Ordering :: Equal ;
82+ }
83+ match ( a. contains ( ":" ) , b. contains ( ":" ) ) {
84+ ( true , true ) => {
85+ let a_order = a. split ( ":" ) . next ( ) . unwrap ( ) ;
86+ let b_order = b. split ( ":" ) . next ( ) . unwrap ( ) ;
87+ let mut a_order_value = 0 ;
88+ let mut b_order_value = 0 ;
89+ for ( order, order_value) in SELECTOR_ORDER_MAP . iter ( ) {
90+ if a_order. contains ( order) {
91+ a_order_value = * order_value;
92+ }
93+ if b_order. contains ( order) {
94+ b_order_value = * order_value;
95+ }
96+ }
97+ if a_order_value == b_order_value {
98+ a. cmp ( b)
99+ } else {
100+ a_order_value. cmp ( & b_order_value)
101+ }
102+ }
103+ ( true , false ) => Ordering :: Greater ,
104+ ( false , true ) => Ordering :: Less ,
105+ ( false , false ) => a. cmp ( b) ,
106+ }
107+ }
108+ ( StyleSelector :: Global ( _) , _) => Ordering :: Less ,
109+ ( _, StyleSelector :: Global ( _) ) => Ordering :: Greater ,
78110 }
79111 }
80112}
@@ -121,6 +153,21 @@ impl From<[&str; 2]> for StyleSelector {
121153 ) )
122154 }
123155}
156+ impl From < ( & StyleSelector , & str ) > for StyleSelector {
157+ fn from ( value : ( & StyleSelector , & str ) ) -> Self {
158+ if let StyleSelector :: Global ( _) = value. 0 {
159+ let post = to_kebab_case ( value. 1 ) ;
160+ StyleSelector :: Global ( format ! (
161+ "{}{}{}" ,
162+ value. 0 ,
163+ get_selector_separator( & post) ,
164+ post
165+ ) )
166+ } else {
167+ StyleSelector :: from ( [ & value. 0 . to_string ( ) , value. 1 ] )
168+ }
169+ }
170+ }
124171
125172impl Display for StyleSelector {
126173 fn fmt ( & self , f : & mut Formatter ) -> std:: fmt:: Result {
@@ -130,6 +177,7 @@ impl Display for StyleSelector {
130177 match self {
131178 StyleSelector :: Selector ( value) => value. to_string( ) ,
132179 StyleSelector :: Media ( value) => format!( "@{value}" ) ,
180+ StyleSelector :: Global ( value) => format!( "{value}" ) ,
133181 }
134182 )
135183 }
@@ -140,6 +188,7 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str
140188 match selector {
141189 StyleSelector :: Selector ( value) => value. replace ( "&" , & format ! ( ".{class_name}" ) ) ,
142190 StyleSelector :: Media ( _) => format ! ( ".{class_name}" ) ,
191+ StyleSelector :: Global ( v) => format ! ( "{v}" ) ,
143192 }
144193 } else {
145194 format ! ( ".{class_name}" )
@@ -468,13 +517,11 @@ pub fn sheet_to_variable_name(property: &str, level: u8, selector: Option<&str>)
468517 } else {
469518 let key = format ! ( "{}-{}-{}" , property, level, selector. unwrap_or( "" ) . trim( ) ) ;
470519 let mut map = GLOBAL_CLASS_MAP . lock ( ) . unwrap ( ) ;
471- map. get ( & key)
472- . map ( |v| format ! ( "--d{v}" ) )
473- . unwrap_or_else ( || {
474- let len = map. len ( ) ;
475- map. insert ( key, len as i32 ) ;
476- format ! ( "--d{}" , map. len( ) - 1 )
477- } )
520+ map. get ( & key) . map ( |v| format ! ( "--d{v}" ) ) . unwrap_or_else ( || {
521+ let len = map. len ( ) ;
522+ map. insert ( key, len as i32 ) ;
523+ format ! ( "--d{}" , map. len( ) - 1 )
524+ } )
478525 }
479526}
480527
0 commit comments