@@ -963,12 +963,13 @@ export function VersionExplorer({ data }: VersionExplorerProps) {
963963 event . stopPropagation ( ) ;
964964 handleOpenWizard ( ) ;
965965 } }
966- className = "absolute bottom-3 right-3 z-10 inline-flex items-center gap-1.5 rounded-full border border-white/20 bg-gradient-to-br from- white/25 to-white/10 px-3 py-1 text-[10px] font-medium text-white shadow-[0_4px_16px_rgba(0,0,0 ,0.15),inset_0_1px_0_rgba (255,255,255,0.3)] backdrop-blur-md transition-all hover:-translate-y-0.5 hover:from -white/35 hover:to-white/20 hover: shadow-[0_8px_20px_rgba(0,0,0 ,0.2),inset_0_1px_0_rgba (255,255,255,0.4 )] active:translate-y-0 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/50"
966+ className = "group/wizard absolute bottom-3 right-3 z-10 inline-flex items-center gap-1.5 overflow-hidden rounded-full border-none bg-white/20 px-3 py-1 text-[10px] font-medium text-white shadow-[inset_1px_1px_0_0_rgba(255,255,255 ,0.6),inset_-1px_-1px_0_0_rgba (255,255,255,0.3),0_4px_16px_rgba(0,0,0,0.2) ] backdrop-blur-[14px] backdrop-saturate-150 transition-all hover:-translate-y-0.5 hover:bg -white/30 hover:shadow-[inset_1px_1px_0_0_rgba(255,255,255 ,0.8),inset_-1px_-1px_0_0_rgba (255,255,255,0.5),0_6px_20px_rgba(0,0,0,0.25 )] active:translate-y-0 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/50"
967967 aria-label = "Open tag update wizard"
968968 title = "Open tag update wizard"
969969 >
970- < MapPinned className = "h-3.5 w-3.5" />
971- update tag to this
970+ < span className = "absolute inset-0 -z-10 bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.3),transparent_50%),radial-gradient(circle_at_bottom_right,rgba(255,255,255,0.15),transparent_50%)] opacity-100 transition-opacity group-hover/wizard:opacity-100" />
971+ < MapPinned className = "h-3.5 w-3.5 drop-shadow-sm" />
972+ < span className = "drop-shadow-sm" > update tag to this</ span >
972973 </ button >
973974 ) : null }
974975 { showDiffIcon ? (
@@ -978,7 +979,7 @@ export function VersionExplorer({ data }: VersionExplorerProps) {
978979 event . stopPropagation ( ) ;
979980 openDiffModal ( version . version ) ;
980981 } }
981- className = "absolute bottom-3 right-3 z-10 inline-flex items-center gap-1.5 rounded-full border border-primary/10 bg-gradient-to-br from-primary/10 to-primary/ 5 px-3 py-1 text-[10px] font-medium text-foreground shadow-[0_4px_12px_rgba(0, 0,0,0.05),inset_0_1px_0_rgba(255,255,255 ,0.4 )] backdrop-blur-md transition-all hover:-translate-y-0.5 hover:from-primary/20 hover:to-primary/ 10 hover:shadow-[0_8px_16px_rgba(0, 0,0,0.1),inset_0_1px_0_rgba(255,255,255 ,0.6 )] active:translate-y-0 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 dark:shadow-[0_4px_12px_rgba(0,0,0 ,0.2),inset_0_1px_0_rgba (255,255,255,0.1)] dark:hover:shadow-[0_8px_16px_rgba(0,0,0 ,0.3),inset_0_1px_0_rgba (255,255,255,0.15)]"
982+ className = "group/diff absolute bottom-3 right-3 z-10 inline-flex items-center gap-1.5 overflow-hidden rounded-full border-none bg-black/ 5 px-3 py-1 text-[10px] font-medium text-foreground shadow-[inset_1px_1px_0_0_rgba(255,255,255,0.7),inset_-1px_-1px_0_0_rgba( 0,0,0,0 .05),0_4px_12px_rgba(0,0,0 ,0.05 )] backdrop-blur-[14px] backdrop-saturate-150 transition-all hover:-translate-y-0.5 hover:bg-black/ 10 hover:shadow-[inset_1px_1px_0_0_rgba(255,255,255,0.9),inset_-1px_-1px_0_0_rgba( 0,0,0,0 .1),0_6px_16px_rgba(0,0,0 ,0.1 )] active:translate-y-0 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 dark:bg-white/10 dark: shadow-[inset_1px_1px_0_0_rgba(255,255,255 ,0.3),inset_-1px_-1px_0_0_rgba (255,255,255,0.1),0_4px_12px_rgba(0,0,0,0.2) ] dark:hover:bg-white/20 dark:hover: shadow-[inset_1px_1px_0_0_rgba(255,255,255 ,0.4),inset_-1px_-1px_0_0_rgba (255,255,255,0.15),0_6px_16px_rgba(0,0,0,0.3 )]"
982983 aria-label = {
983984 selectedVersion
984985 ? `Compare v${ version . version } with v${ selectedVersion } `
@@ -990,8 +991,9 @@ export function VersionExplorer({ data }: VersionExplorerProps) {
990991 : "Compare versions"
991992 }
992993 >
993- < FileDiff className = "h-3.5 w-3.5" />
994- diff
994+ < span className = "absolute inset-0 -z-10 bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.4),transparent_50%),radial-gradient(circle_at_bottom_right,rgba(255,255,255,0.1),transparent_50%)] opacity-0 transition-opacity group-hover/diff:opacity-100 dark:bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.2),transparent_50%),radial-gradient(circle_at_bottom_right,rgba(255,255,255,0.05),transparent_50%)]" />
995+ < FileDiff className = "h-3.5 w-3.5 drop-shadow-sm" />
996+ < span className = "drop-shadow-sm" > diff</ span >
995997 </ button >
996998 ) : null }
997999 </ div >
@@ -1022,18 +1024,18 @@ export function VersionExplorer({ data }: VersionExplorerProps) {
10221024 ) : null }
10231025
10241026 < div className = "flex flex-1 flex-col gap-4 overflow-hidden" >
1025- < div className = "flex items-center justify-center gap-4" >
1026- < div className = "relative flex w-full justify-center rounded-full border border-border/40 bg-muted/30 p-1.5 backdrop-blur-sm shadow-inner " >
1027+ < div className = "relative z-30 flex items-center justify-center gap-4 py-2 " >
1028+ < div className = "relative flex w-full justify-center rounded-full bg-black/10 p-1 dark:bg-muted/50 " >
10271029 { artifactTabs . map ( ( tab ) => {
10281030 const isActive = tab . id === activeTab . id ;
10291031 return (
10301032 < motion . button
10311033 key = { tab . id }
10321034 type = "button"
10331035 onClick = { ( ) => setActiveArtifact ( tab . id ) }
1034- className = { `relative z-10 flex-1 rounded-full px-4 py-2 text-xs font-semibold uppercase tracking-[0.25em] transition-colors ${ isActive
1035- ? "text-primary-foreground shadow-sm"
1036- : "text-muted-foreground hover:text-foreground"
1036+ className = { `relative flex-1 rounded-full px-4 py-2 text-xs font-semibold uppercase tracking-[0.25em] transition-colors ${ isActive
1037+ ? "z-20 text-primary-foreground shadow-sm"
1038+ : "z-10 text-muted-foreground hover:text-foreground"
10371039 } `}
10381040 whileHover = {
10391041 ! isActive
@@ -1055,13 +1057,32 @@ export function VersionExplorer({ data }: VersionExplorerProps) {
10551057 { isActive && (
10561058 < motion . div
10571059 layoutId = "artifact-tab-indicator"
1058- className = "absolute inset-0 rounded-full border border-primary/20 bg-gradient-to-br from-primary to-primary/80 shadow-[0_4px_12px_rgba(0,51,255,0.3),inset_0_1px_0_rgba(255,255,255,0.2)] backdrop-blur-md"
1060+ className = "absolute inset-0 rounded-full bg-primary shadow-[inset_1px_1px_0_0_rgba(255,255,255,0.4),inset_-1px_-1px_0_0_rgba(0,0,0,0.2),0_4px_12px_rgba(0,0,0,0.3)] backdrop-blur-md"
1061+ initial = { { scale : 1 , filter : "blur(0px)" } }
1062+ animate = { {
1063+ scale : [ 1 , 1.4 , 1 ] ,
1064+ filter : [ "blur(0px) brightness(1)" , "blur(12px) brightness(2)" , "blur(0px) brightness(1)" ]
1065+ } }
10591066 transition = { {
1060- type : "spring" ,
1061- stiffness : 500 ,
1062- damping : 35 ,
1067+ layout : {
1068+ type : "spring" ,
1069+ stiffness : 350 ,
1070+ damping : 40 ,
1071+ } ,
1072+ scale : {
1073+ duration : 0.25 ,
1074+ ease : "easeInOut" ,
1075+ times : [ 0 , 0.35 , 1 ]
1076+ } ,
1077+ filter : {
1078+ duration : 0.25 ,
1079+ ease : "easeInOut" ,
1080+ times : [ 0 , 0.35 , 1 ]
1081+ }
10631082 } }
1064- />
1083+ >
1084+ < div className = "absolute inset-0 rounded-full bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.25),transparent_60%),radial-gradient(circle_at_bottom_right,rgba(255,255,255,0.1),transparent_60%)]" />
1085+ </ motion . div >
10651086 ) }
10661087 { /* Hover 状态的微妙高光效果 */ }
10671088 { ! isActive && (
0 commit comments