Skip to content

Commit 2e8d812

Browse files
Merge pull request #167 from umbraco/feature/uui-menu-item-badge-slot
Feature/uui menu item badge slot
2 parents eb58aee + 2fc12cb commit 2e8d812

File tree

3 files changed

+57
-17
lines changed

3 files changed

+57
-17
lines changed

packages/uui-badge/lib/uui-badge.element.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,20 @@ export class UUIBadgeElement extends LitElement {
1414
static styles = [
1515
css`
1616
:host {
17-
position: absolute;
17+
position: var(--uui-badge-position, absolute);
1818
display: flex;
1919
justify-content: center;
2020
align-items: center;
2121
22-
/* top: -8px;
23-
right: -8px; */
2422
padding: var(--uui-size-1) var(--uui-size-2);
25-
--uui-badge-inset: -8px -8px auto auto;
26-
/* 4 different ones */
27-
inset: var(--uui-badge-inset);
23+
inset: var(--uui-badge-inset, -8px -8px auto auto);
2824
2925
text-align: center;
3026
font-size: var(--uui-badge-font-size, var(--uui-type-small-size));
3127
font-weight: 900;
3228
line-height: 1;
3329
34-
margin-right: 0 !important;
30+
margin-right: 0;
3531
3632
min-width: var(--uui-size-8);
3733
min-height: var(--uui-size-8);

packages/uui-menu-item/lib/uui-menu-item.element.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { UUIMenuItemEvent } from './UUIMenuItemEvent';
2020
* @slot default - nested menu items go here
2121
* @slot icon - icon area
2222
* @slot actions - actions area
23-
* @slot label-slot - area to place the label (name: label)
23+
* @slot label - area to place the label
2424
*/
2525
@defineElement('uui-menu-item')
2626
export class UUIMenuItemElement extends SelectOnlyMixin(
@@ -30,17 +30,14 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
3030
css`
3131
:host {
3232
display: block;
33-
background-color: var(--uui-interface-surface);
34-
/** consider transparent. */
3533
--uui-menu-item-child-indent: calc(var(--uui-menu-item-indent, 0) + 1);
3634
3735
user-select: none;
3836
}
3937
4038
#menu-item {
4139
position: relative;
42-
display: flex;
43-
align-items: stretch;
40+
4441
padding-left: calc(var(--uui-menu-item-indent, 0) * var(--uui-size-4));
4542
4643
display: grid;
@@ -74,7 +71,6 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
7471
grid-column-start: 2;
7572
white-space: nowrap;
7673
overflow: hidden;
77-
text-overflow: ellipsis;
7874
7975
display: inline-flex;
8076
align-items: center;
@@ -83,6 +79,12 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
8379
min-height: var(--uui-size-12);
8480
z-index: 1;
8581
}
82+
83+
#label-button .label {
84+
white-space: nowrap;
85+
overflow: hidden;
86+
text-overflow: ellipsis;
87+
}
8688
span#label-button {
8789
pointer-events: none; /* avoid hovering state on this. */
8890
}
@@ -134,6 +136,14 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
134136
margin-right: var(--uui-size-2);
135137
}
136138
139+
#badge {
140+
font-size: 12px;
141+
--uui-badge-position: relative;
142+
--uui-badge-position: auto;
143+
display: block;
144+
margin-left: 6px;
145+
}
146+
137147
:host([disabled]) {
138148
color: var(--uui-interface-surface-contrast-disabled);
139149
}
@@ -285,7 +295,8 @@ export class UUIMenuItemElement extends SelectOnlyMixin(
285295
id="icon"
286296
style=${this.iconSlotHasContent ? '' : 'display: none;'}
287297
@slotchange=${this.iconSlotChanged}></slot>
288-
${this.renderLabel()}`;
298+
${this.renderLabel()}
299+
<slot name="badge" id="badge"> </slot>`;
289300
}
290301

291302
private _renderLabelAsAnchor() {

packages/uui-menu-item/lib/uui-menu-item.story.ts

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,26 @@ const MenuItems = [
5353
title: 'Menu Item 1',
5454
icon: 'document',
5555
loading: false,
56+
badge: false,
5657
},
5758
{
5859
title: 'Menu Item 2',
5960
icon: 'picture',
6061
loading: true,
62+
badge: false,
6163
},
6264
{
6365
title: 'Menu Item 3',
6466
icon: 'info',
6567
loading: false,
68+
badge: true,
6669
},
6770
{
68-
title: 'Menu Item 4',
71+
title:
72+
'Menu Item 4 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9',
6973
icon: 'document',
7074
loading: false,
75+
badge: false,
7176
},
7277
];
7378

@@ -257,17 +262,45 @@ WithActions.parameters = {
257262
},
258263
};
259264

260-
export const Selectable = () =>
265+
export const WithBadge = () =>
261266
html`
262267
${MenuItems.map(
263268
menuItem =>
264-
html`<uui-menu-item label="${menuItem.title}"></uui-menu-item>`
269+
html`
270+
<uui-menu-item label="${menuItem.title}">
271+
${menuItem.badge
272+
? html`<uui-badge slot="badge" look="warning">!</uui-badge>`
273+
: ''}
274+
</uui-menu-item>
275+
`
276+
)}
277+
`;
278+
WithBadge.parameters = {
279+
docs: {
280+
source: {
281+
code: html`
282+
<uui-menu-item label="Menu Item 2">
283+
<uui-badge slot="badge" look="warning">!</uui-badge>
284+
</uui-menu-item>
285+
`.strings,
286+
},
287+
},
288+
};
289+
290+
export const Selectable = (props: any) =>
291+
html`
292+
${MenuItems.map(
293+
menuItem =>
294+
html`<uui-menu-item
295+
label="${menuItem.title}"
296+
?selectable=${props.selectable}></uui-menu-item>`
265297
)}
266298
`;
267299
Selectable.args = {
268300
selectable: true,
269301
};
270302
Selectable.parameters = {
303+
controls: { include: ['selectable'] },
271304
docs: {
272305
source: {
273306
code: html`

0 commit comments

Comments
 (0)