@@ -545,99 +545,62 @@ fn remap_style_names(
545545 // Track the last processed theme's vars_object_json for ThemeVars handling
546546 let mut last_theme_vars_json: Option < String > = None ;
547547
548- // First pass: collect old entries preserving all fields
549- let old_styles: HashMap < String , StyleEntry > = collected. styles . drain ( ) . collect ( ) ;
550- let old_keyframes: HashMap < String , StyleEntry > = collected. keyframes . drain ( ) . collect ( ) ;
551- let old_style_variants: HashMap < String , HashMap < String , StyleVariant > > = collected
552- . style_variants
553- . drain ( )
554- . map ( |( k, v) | ( k, v. 0 ) )
555- . collect ( ) ;
556- let old_vars: HashMap < String , String > = collected. vars . drain ( ) . map ( |( k, v) | ( k, v. 0 ) ) . collect ( ) ;
557- let old_containers: HashMap < String , String > = collected
558- . containers
559- . drain ( )
560- . map ( |( k, v) | ( k, v. 0 ) )
561- . collect ( ) ;
562- let old_layers: HashMap < String , String > =
563- collected. layers . drain ( ) . map ( |( k, v) | ( k, v. 0 ) ) . collect ( ) ;
564- // font_faces: placeholder_id -> (json, font_family, exported)
565- let old_font_faces: HashMap < String , ( String , String ) > = collected
566- . font_faces
567- . drain ( )
568- . map ( |( k, v) | ( k, ( v. 0 , v. 1 ) ) )
569- . collect ( ) ;
570- // global_themes: placeholder_id -> GlobalThemeEntry (without exported flag for remapping)
571- let old_global_themes: HashMap < String , GlobalThemeEntry > =
572- collected. global_themes . drain ( ) . collect ( ) ;
573- // themes: placeholder_id -> ThemeEntry (without exported flag for remapping)
574- let old_themes: HashMap < String , ThemeEntry > = collected. themes . drain ( ) . collect ( ) ;
548+ // First pass: take ownership of old entries (avoids drain+collect overhead)
549+ let mut old_styles = std:: mem:: take ( & mut collected. styles ) ;
550+ let mut old_keyframes = std:: mem:: take ( & mut collected. keyframes ) ;
551+ let mut old_style_variants = std:: mem:: take ( & mut collected. style_variants ) ;
552+ let mut old_vars = std:: mem:: take ( & mut collected. vars ) ;
553+ let mut old_containers = std:: mem:: take ( & mut collected. containers ) ;
554+ let mut old_layers = std:: mem:: take ( & mut collected. layers ) ;
555+ let mut old_font_faces = std:: mem:: take ( & mut collected. font_faces ) ;
556+ let mut old_global_themes = std:: mem:: take ( & mut collected. global_themes ) ;
557+ let mut old_themes = std:: mem:: take ( & mut collected. themes ) ;
575558
576559 for ( name, info) in vars {
577560 match info {
578561 VarInfo :: StyleApi { exported } => {
579562 // First check if this is a fontFace (uses __font_N__ placeholder)
580563 let font_placeholder = format ! ( "__font_{}__" , font_idx) ;
581- if let Some ( ( json, font_family) ) = old_font_faces. get ( & font_placeholder) {
582- font_placeholder_to_name. insert ( font_placeholder. clone ( ) , name. clone ( ) ) ;
583- new_font_faces
584- . insert ( name. clone ( ) , ( json. clone ( ) , font_family. clone ( ) , * exported) ) ;
564+ if let Some ( ( json, font_family, _) ) = old_font_faces. remove ( & font_placeholder) {
565+ font_placeholder_to_name. insert ( font_placeholder, name. clone ( ) ) ;
566+ new_font_faces. insert ( name. clone ( ) , ( json, font_family, * exported) ) ;
585567 font_idx += 1 ;
586568 continue ;
587569 }
588570
589571 // Check if this is a createGlobalTheme (uses __global_theme_N__ placeholder)
590572 let global_theme_placeholder = format ! ( "__global_theme_{}__" , global_theme_idx) ;
591- if let Some ( entry) = old_global_themes. get ( & global_theme_placeholder) {
592- new_global_themes. insert (
593- name. clone ( ) ,
594- GlobalThemeEntry {
595- selector : entry. selector . clone ( ) ,
596- css_vars : entry. css_vars . clone ( ) ,
597- vars_object_json : entry. vars_object_json . clone ( ) ,
598- exported : * exported,
599- } ,
600- ) ;
573+ if let Some ( mut entry) = old_global_themes. remove ( & global_theme_placeholder) {
574+ entry. exported = * exported;
575+ new_global_themes. insert ( name. clone ( ) , entry) ;
601576 global_theme_idx += 1 ;
602577 continue ;
603578 }
604579
605580 let placeholder = format ! ( "__style_{}__" , style_idx) ;
606581 placeholder_to_name. insert ( placeholder. clone ( ) , name. clone ( ) ) ;
607582
608- if let Some ( entry) = old_styles. get ( & placeholder) {
609- new_styles. insert (
610- name. clone ( ) ,
611- StyleEntry {
612- json : entry. json . clone ( ) ,
613- exported : * exported,
614- bases : entry. bases . clone ( ) ,
615- } ,
616- ) ;
583+ if let Some ( mut entry) = old_styles. remove ( & placeholder) {
584+ entry. exported = * exported;
585+ new_styles. insert ( name. clone ( ) , entry) ;
617586 style_idx += 1 ;
618- } else if let Some ( entry) = old_keyframes. get ( & placeholder) {
619- new_keyframes. insert (
620- name. clone ( ) ,
621- StyleEntry {
622- json : entry. json . clone ( ) ,
623- exported : * exported,
624- bases : entry. bases . clone ( ) ,
625- } ,
626- ) ;
587+ } else if let Some ( mut entry) = old_keyframes. remove ( & placeholder) {
588+ entry. exported = * exported;
589+ new_keyframes. insert ( name. clone ( ) , entry) ;
627590 style_idx += 1 ;
628- } else if let Some ( variants) = old_style_variants. get ( & placeholder) {
629- new_style_variants. insert ( name. clone ( ) , ( variants. clone ( ) , * exported) ) ;
591+ } else if let Some ( ( variants, _ ) ) = old_style_variants. remove ( & placeholder) {
592+ new_style_variants. insert ( name. clone ( ) , ( variants, * exported) ) ;
630593 style_idx += 1 ;
631- } else if let Some ( value) = old_vars. get ( & placeholder) {
632- new_vars. insert ( name. clone ( ) , ( value. clone ( ) , * exported) ) ;
594+ } else if let Some ( ( value, _ ) ) = old_vars. remove ( & placeholder) {
595+ new_vars. insert ( name. clone ( ) , ( value, * exported) ) ;
633596 style_idx += 1 ;
634- } else if let Some ( value) = old_containers. get ( & placeholder) {
635- new_containers. insert ( name. clone ( ) , ( value. clone ( ) , * exported) ) ;
597+ } else if let Some ( ( value, _ ) ) = old_containers. remove ( & placeholder) {
598+ new_containers. insert ( name. clone ( ) , ( value, * exported) ) ;
636599 style_idx += 1 ;
637- } else if let Some ( value) = old_layers. get ( & placeholder) {
638- new_layers. insert ( name. clone ( ) , ( value. clone ( ) , * exported) ) ;
600+ } else if let Some ( ( value, _ ) ) = old_layers. remove ( & placeholder) {
601+ new_layers. insert ( name. clone ( ) , ( value, * exported) ) ;
639602 style_idx += 1 ;
640- } else if let Some ( entry) = old_themes. get ( & placeholder) {
603+ } else if let Some ( mut entry) = old_themes. remove ( & placeholder) {
641604 // Track this theme name for the next ThemeVars entry
642605 if entry. vars_object_json . is_some ( ) {
643606 last_theme_vars_json = Some ( name. clone ( ) ) ;
@@ -662,16 +625,10 @@ fn remap_style_names(
662625 . push ( ( format ! ( ".{}" , class_name) , vars_json) ) ;
663626 }
664627
665- new_themes. insert (
666- name. clone ( ) ,
667- ThemeEntry {
668- css_vars : entry. css_vars . clone ( ) ,
669- exported : * exported,
670- vars_object_json : entry. vars_object_json . clone ( ) ,
671- vars_name : None , // Will be set by ThemeVars if present
672- class_name,
673- } ,
674- ) ;
628+ entry. exported = * exported;
629+ entry. vars_name = None ;
630+ entry. class_name = class_name;
631+ new_themes. insert ( name. clone ( ) , entry) ;
675632 style_idx += 1 ;
676633 }
677634 }
@@ -705,30 +662,27 @@ fn remap_style_names(
705662
706663 // Remap base references in styles (for composition)
707664 for entry in new_styles. values_mut ( ) {
708- entry . bases = entry
709- . bases
710- . iter ( )
665+ let old_bases = std :: mem :: take ( & mut entry. bases ) ;
666+ entry . bases = old_bases
667+ . into_iter ( )
711668 . map ( |b| {
712- placeholder_to_name
713- . get ( b)
714- . cloned ( )
715- . unwrap_or_else ( || b. clone ( ) )
669+ if let Some ( name) = placeholder_to_name. get ( & b) {
670+ name. clone ( )
671+ } else {
672+ b
673+ }
716674 } )
717675 . collect ( ) ;
718676 }
719677
720678 // Replace font placeholders in style JSONs with actual font-family names
721679 // Build a mapping from placeholder to font-family name
722- let font_family_map: HashMap < String , String > = new_font_faces
680+ let font_family_map: HashMap < & str , & str > = font_placeholder_to_name
723681 . iter ( )
724- . map ( |( name, ( _, font_family, _) ) | {
725- // Find the placeholder that maps to this name
726- let placeholder = font_placeholder_to_name
727- . iter ( )
728- . find ( |( _, n) | * n == name)
729- . map ( |( p, _) | p. clone ( ) )
730- . unwrap_or_default ( ) ;
731- ( placeholder, font_family. clone ( ) )
682+ . filter_map ( |( placeholder, name) | {
683+ new_font_faces
684+ . get ( name)
685+ . map ( |( _, font_family, _) | ( placeholder. as_str ( ) , font_family. as_str ( ) ) )
732686 } )
733687 . collect ( ) ;
734688
0 commit comments