@@ -24,11 +24,30 @@ export class UUICardContentNodeElement extends UUICardElement {
24
24
@property ( { type : String } )
25
25
name = '' ;
26
26
27
+ /**
28
+ * Node details
29
+ * @type {string }
30
+ * @attr
31
+ * @default ''
32
+ */
33
+ @property ( { type : String } )
34
+ detail = '' ;
35
+
27
36
@state ( )
28
37
private _iconSlotHasContent = false ;
29
38
30
- protected fallbackIcon =
31
- '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M396.441 138.878l-83.997-83.993-7.331-7.333H105.702v416.701h298.071V146.214l-7.332-7.336zM130.74 439.217V72.591h141.613c37.201 0 19.274 88.18 19.274 88.18s86-20.901 87.104 18.534v259.912H130.74z"></path></svg>' ;
39
+ protected fallbackIcon = `<svg
40
+ xmlns="http://www.w3.org/2000/svg"
41
+ viewBox="0 0 24 24"
42
+ fill="none"
43
+ stroke="currentColor"
44
+ stroke-width="1.75"
45
+ stroke-linecap="round"
46
+ stroke-linejoin="round"
47
+ id="icon">
48
+ <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
49
+ <path d="M14 2v4a2 2 0 0 0 2 2h4" />
50
+ </svg>` ;
32
51
33
52
private _onSlotIconChange ( event : Event ) {
34
53
this . _iconSlotHasContent =
@@ -41,18 +60,37 @@ export class UUICardContentNodeElement extends UUICardElement {
41
60
return html `<uui- icon .svg = "${ this . fallbackIcon } " > </ uui- icon> ` ;
42
61
}
43
62
63
+ protected renderDetail ( ) {
64
+ return html `<small id= "detail"
65
+ > ${ this . detail } <slot name= "detail" > </ slot> </ small
66
+ > <slot id= "default" > </ slot> ` ;
67
+ }
68
+
69
+ #renderContent( ) {
70
+ return html `
71
+ <span id= "content" >
72
+ <span id= "item" >
73
+ <span id= "icon" >
74
+ <slot name= "icon" @slotchange = ${ this . _onSlotIconChange } > </ slot>
75
+ ${ this . _iconSlotHasContent === false
76
+ ? this . _renderFallbackIcon ( )
77
+ : '' }
78
+ </ span>
79
+ <div id= "name" > ${ this . name } <slot name= "name" > </ slot> </ div>
80
+ </ span>
81
+ ${ this . renderDetail ( ) }
82
+ </ span>
83
+ ` ;
84
+ }
85
+
44
86
#renderButton( ) {
45
- return html `<div
87
+ return html `<but to n
46
88
id= "open-part"
47
89
tabindex = ${ this . disabled ? ( nothing as any ) : 0 }
48
90
@click = ${ this . handleOpenClick }
49
91
@keydown = ${ this . handleOpenKeydown } >
50
- <span id= "icon" >
51
- <slot name= "icon" @slotchange = ${ this . _onSlotIconChange } > </ slot>
52
- ${ this . _iconSlotHasContent === false ? this . _renderFallbackIcon ( ) : '' }
53
- </ span>
54
- <span id= "name" > ${ this . name } </ span>
55
- </ div> ` ;
92
+ ${ this . #renderContent( ) }
93
+ </ butto n> ` ;
56
94
}
57
95
58
96
#renderLink( ) {
@@ -67,11 +105,7 @@ export class UUICardContentNodeElement extends UUICardElement {
67
105
this . target === '_blank' ? 'noopener noreferrer' : undefined ,
68
106
) ,
69
107
) } >
70
- <span id= "icon" >
71
- <slot name= "icon" @slotchange = ${ this . _onSlotIconChange } > </ slot>
72
- ${ this . _iconSlotHasContent === false ? this . _renderFallbackIcon ( ) : '' }
73
- </ span>
74
- <span id= "name" > ${ this . name } </ span>
108
+ ${ this . #renderContent( ) }
75
109
</ a> ` ;
76
110
}
77
111
@@ -81,7 +115,6 @@ export class UUICardContentNodeElement extends UUICardElement {
81
115
<!- - Select bor der must be right after # open-part -- >
82
116
<div id= "select-border" > </ div>
83
117
84
- <slot> </ slot>
85
118
<slot name= "tag" > </ slot>
86
119
<slot name= "actions" > </ slot>
87
120
` ;
@@ -94,7 +127,6 @@ export class UUICardContentNodeElement extends UUICardElement {
94
127
min-width : 250px ;
95
128
flex-direction : column;
96
129
justify-content : space-between;
97
- padding : var (--uui-size-3 ) var (--uui-size-4 );
98
130
}
99
131
100
132
slot [name = 'tag' ] {
@@ -132,30 +164,57 @@ export class UUICardContentNodeElement extends UUICardElement {
132
164
line-height : calc (2 * var (--uui-size-3 ));
133
165
}
134
166
135
- # icon {
136
- font-size : 1.2em ;
137
- margin-right : var (--uui-size-1 );
138
- }
139
-
140
167
# open-part {
141
168
display : flex;
142
169
position : relative;
143
170
font-weight : 700 ;
144
171
align-items : center;
145
172
cursor : pointer;
173
+ flex-grow : 1 ;
174
+ padding : var (--uui-size-space-4 ) var (--uui-size-space-5 );
175
+ }
176
+
177
+ # content {
178
+ align-self : stretch;
179
+ display : flex;
180
+ flex-direction : column;
146
181
}
147
182
148
- : host ([disabled ]) # open-part {
183
+ # item {
184
+ position : relative;
185
+ display : flex;
186
+ align-self : stretch;
187
+ line-height : normal;
188
+ align-items : center;
189
+ margin-top : var (--uui-size-1 );
190
+ }
191
+
192
+ # icon {
193
+ font-size : 1.2em ;
194
+ margin-right : var (--uui-size-1 );
195
+ }
196
+
197
+ : host ([selectable ]) # open-part {
198
+ padding : 0 ;
199
+ margin : var (--uui-size-space-4 ) var (--uui-size-space-5 );
200
+ }
201
+
202
+ : host ([disabled ]) # name {
149
203
pointer-events : none;
150
204
}
151
205
152
- # open-part : hover {
206
+ : host (: not ([disabled ])) # open-part : hover # icon {
207
+ color : var (--uui-color-interactive-emphasis );
208
+ }
209
+ : host (: not ([disabled ])) # open-part : hover # name {
153
210
text-decoration : underline;
154
211
color : var (--uui-color-interactive-emphasis );
155
212
}
156
-
157
- # name {
158
- margin-top : 4px ;
213
+ : host (: not ([disabled ])) # open-part : hover # detail {
214
+ color : var (--uui-color-interactive-emphasis );
215
+ }
216
+ : host (: not ([disabled ])) # open-part : hover # default {
217
+ color : var (--uui-color-interactive-emphasis );
159
218
}
160
219
` ,
161
220
] ;
0 commit comments