@@ -22,8 +22,15 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
2222 construct : function ( ) {
2323 this . base ( arguments ) ;
2424
25+ this . set ( {
26+ decorator : null ,
27+ padding : 0 ,
28+ backgroundColor : null ,
29+ } ) ;
2530 this . _setLayout ( new qx . ui . layout . HBox ( ) ) ;
2631
32+ this . __avatarSize = 30 ;
33+ this . __maxVisible = 5 ;
2734 this . __users = [
2835 { name : "Alice" , avatar : "https://i.pravatar.cc/150?img=1" } ,
2936 { name : "Bob" , avatar : "https://i.pravatar.cc/150?img=2" } ,
@@ -32,7 +39,6 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
3239 { name : "Eve" , avatar : "https://i.pravatar.cc/150?img=5" } ,
3340 { name : "Frank" , avatar : "https://i.pravatar.cc/150?img=6" } ,
3441 ] ;
35- this . __maxVisible = 5 ;
3642 this . __avatars = [ ] ;
3743
3844 this . __buildAvatars ( ) ;
@@ -43,28 +49,30 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
4349 } ,
4450
4551 members : {
46- __avatars : null ,
47- __users : null ,
52+ __avatarSize : null ,
4853 __maxVisible : null ,
54+ __users : null ,
55+ __avatars : null ,
4956
5057 __buildAvatars ( ) {
58+ const overlap = Math . floor ( this . __avatarSize * 0.5 ) ; // 50% overlap
59+ const overlapPx = `-${ overlap } px` ;
5160 const usersToShow = this . __users . slice ( 0 , this . __maxVisible ) ;
5261
5362 usersToShow . forEach ( ( user , index ) => {
5463 const avatar = new qx . ui . basic . Image ( user . avatar ) ;
5564 avatar . set ( {
56- width : 40 ,
57- height : 40 ,
65+ width : this . __avatarSize ,
66+ height : this . __avatarSize ,
5867 scale : true ,
59- decorator : "main" , // You can use or define a circle decorator
6068 toolTipText : user . name ,
6169 } ) ;
6270
6371 avatar . getContentElement ( ) . setStyles ( {
6472 borderRadius : "50%" ,
65- border : "2px solid white " ,
73+ border : "1px solid gray " ,
6674 boxShadow : "0 0 0 1px rgba(0,0,0,0.1)" ,
67- marginLeft : index === 0 ? "0px" : "-12px" ,
75+ marginLeft : index === 0 ? "0px" : overlapPx ,
6876 transition : "margin 0.3s ease" ,
6977 } ) ;
7078
@@ -76,22 +84,21 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
7684 const remaining = this . __users . length - this . __maxVisible ;
7785 const label = new qx . ui . basic . Label ( "+" + remaining ) ;
7886 label . set ( {
79- width : 40 ,
80- height : 40 ,
87+ width : this . __avatarSize ,
88+ height : this . __avatarSize ,
8189 textAlign : "center" ,
8290 backgroundColor : "#ddd" ,
8391 font : "bold" ,
84- allowGrowX : false ,
85- allowGrowY : false ,
8692 toolTipText : `${ remaining } more` ,
8793 } ) ;
8894
8995 label . getContentElement ( ) . setStyles ( {
90- lineHeight : "40px ",
96+ lineHeight : this . __avatarSize + "px ",
9197 borderRadius : "50%" ,
92- border : "2px solid white " ,
98+ border : "1px solid gray " ,
9399 boxShadow : "0 0 0 1px rgba(0,0,0,0.1)" ,
94- marginLeft : "-12px"
100+ marginLeft : overlapPx ,
101+ transition : "margin 0.3s ease" ,
95102 } ) ;
96103
97104 this . __avatars . push ( label ) ;
@@ -102,13 +109,15 @@ qx.Class.define("osparc.ui.basic.AvatarGroup", {
102109 __expand ( ) {
103110 this . __avatars . forEach ( avatar => {
104111 avatar . getContentElement ( ) . setStyle ( "marginLeft" , "8px" ) ;
105- avatar . setZIndex ( 1 ) ;
112+ avatar . setZIndex ( 10 ) ;
106113 } ) ;
107114 } ,
108115
109116 __collapse ( ) {
117+ const overlap = Math . floor ( this . __avatarSize * 0.5 ) ;
110118 this . __avatars . forEach ( ( avatar , index ) => {
111- avatar . getContentElement ( ) . setStyle ( "marginLeft" , index === 0 ? "0px" : "-12px" ) ;
119+ const margin = index === 0 ? "0px" : `-${ overlap } px` ;
120+ avatar . getContentElement ( ) . setStyle ( "marginLeft" , margin ) ;
112121 avatar . setZIndex ( index ) ;
113122 } ) ;
114123 } ,
0 commit comments