Skip to content

Commit c99938c

Browse files
authored
Merge pull request #73 from umbraco/feature/menu-item-review
2 parents 9b3dc3e + 536e78e commit c99938c

File tree

4 files changed

+293
-157
lines changed

4 files changed

+293
-157
lines changed

package-lock.json

Lines changed: 6 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { LitElement, css, html } from 'lit';
2-
import { property } from 'lit/decorators.js';
2+
import { property, state } from 'lit/decorators.js';
33
import {
44
ActiveMixin,
55
LabelMixin,
@@ -11,6 +11,13 @@ import { UUIMenuItemEvent } from './UUIMenuItemEvent';
1111
* @element uui-menu-item
1212
* @cssprop --uui-menu-item-indent - set indentation of the menu items
1313
* @property label - This functions both as the visible label as well as the aria label.
14+
* @fires {UUIMenuItemEvent} show-children - fires when the expand icon is clicked to show nested menu items
15+
* @fires {UUIMenuItemEvent} hide-children - fires when the expend icon is clicked to hide nested menu items
16+
* @fires {UUIMenuItemEvent} click-label - fires when the label is clicked
17+
* @slot default slot for nested menu items
18+
* @slot icon - icon area
19+
* @slot actions - actions area
20+
*
1421
*/
1522
export class UUIMenuItemElement extends SelectableMixin(
1623
ActiveMixin(LabelMixin('label', LitElement))
@@ -28,7 +35,7 @@ export class UUIMenuItemElement extends SelectableMixin(
2835
position: relative;
2936
display: flex;
3037
align-items: stretch;
31-
padding-left: calc(var(--uui-menu-item-indent, 0) * var(--uui-size-8));
38+
padding-left: calc(var(--uui-menu-item-indent, 0) * var(--uui-size-4));
3239
3340
display: grid;
3441
grid-template-columns: var(--uui-size-8) 1fr;
@@ -62,9 +69,11 @@ export class UUIMenuItemElement extends SelectableMixin(
6269
overflow: hidden;
6370
text-overflow: ellipsis;
6471
}
72+
6573
#caret-button + #label-button {
6674
padding-left: 0;
6775
}
76+
6877
#caret-button {
6978
width: 100%;
7079
height: 100%;
@@ -100,6 +109,13 @@ export class UUIMenuItemElement extends SelectableMixin(
100109
bottom: 0;
101110
}
102111
112+
#icon {
113+
font-size: 16px;
114+
margin-bottom: var(--uui-size-1);
115+
margin-right: var(--uui-size-2);
116+
display: inline-block;
117+
}
118+
103119
:host([disabled]) #label-button {
104120
color: var(--uui-interface-surface-contrast-disabled);
105121
}
@@ -212,6 +228,24 @@ export class UUIMenuItemElement extends SelectableMixin(
212228
private onLabelClicked() {
213229
const event = new UUIMenuItemEvent(UUIMenuItemEvent.CLICK_LABEL);
214230
this.dispatchEvent(event);
231+
this.toggleSelect();
232+
}
233+
234+
/**
235+
* Toggles row selection
236+
* @method
237+
*/
238+
protected toggleSelect() {
239+
if (this.selectable === false) return;
240+
this.selected = !this.selected;
241+
}
242+
243+
@state()
244+
private iconSlotHasContent = false;
245+
246+
private iconSlotChanged(e: any): void {
247+
this.iconSlotHasContent =
248+
(e.target as HTMLSlotElement).assignedNodes({ flatten: true }).length > 0;
215249
}
216250

217251
render() {
@@ -227,6 +261,11 @@ export class UUIMenuItemElement extends SelectableMixin(
227261
@click=${this.onLabelClicked}
228262
?disabled=${this.disabled}
229263
aria-label="${this.label}">
264+
<slot
265+
name="icon"
266+
id="icon"
267+
style=${this.iconSlotHasContent ? '' : 'display: none;'}
268+
@slotchange=${this.iconSlotChanged}></slot>
230269
${this.renderLabel()}
231270
</button>
232271
<div id="label-button-background"></div>

0 commit comments

Comments
 (0)