@redvars/peacock 3.6.1 → 3.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/components.css.map +1 -1
- package/dist/assets/styles.css +1 -1
- package/dist/assets/styles.css.map +1 -1
- package/dist/assets/tokens.css +1 -1
- package/dist/assets/tokens.css.map +1 -1
- package/dist/{button-colors-Ccys3hvS.js → button-colors-Cg6oxiz-.js} +126 -116
- package/dist/{button-colors-Ccys3hvS.js.map → button-colors-Cg6oxiz-.js.map} +1 -1
- package/dist/button-group.js +2 -2
- package/dist/button.js +18 -16
- package/dist/button.js.map +1 -1
- package/dist/canvas.js +126 -107
- package/dist/canvas.js.map +1 -1
- package/dist/card.js +1 -1
- package/dist/card.js.map +1 -1
- package/dist/code-highlighter.js +34 -9
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +4306 -3215
- package/dist/custom-elements.json +8344 -7173
- package/dist/{flow-designer-node-BWrPuxAR.js → flow-designer-node-9Bqyn6qx.js} +2 -1
- package/dist/flow-designer-node-9Bqyn6qx.js.map +1 -0
- package/dist/flow-designer-node.js +1 -1
- package/dist/flow-designer.js +1402 -8
- package/dist/flow-designer.js.map +1 -1
- package/dist/icon-CueRR7wx.js +260 -0
- package/dist/icon-CueRR7wx.js.map +1 -0
- package/dist/{icon-button-CK1ZuE-2.js → icon-button-AdJBEoNy.js} +34 -30
- package/dist/icon-button-AdJBEoNy.js.map +1 -0
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/modal.js +11 -11
- package/dist/modal.js.map +1 -1
- package/dist/{navigation-rail-DTTkqohi.js → navigation-rail-DAUuJ_Yp.js} +975 -486
- package/dist/navigation-rail-DAUuJ_Yp.js.map +1 -0
- package/dist/peacock-loader.js +33 -30
- package/dist/peacock-loader.js.map +1 -1
- package/dist/{popover-NC7b1lTq.js → popover-DUPmMVWS.js} +9 -4
- package/dist/{popover-NC7b1lTq.js.map → popover-DUPmMVWS.js.map} +1 -1
- package/dist/popover-content.js +1 -1
- package/dist/popover-content.js.map +1 -1
- package/dist/popover.js +1 -1
- package/dist/search.js +11 -14
- package/dist/search.js.map +1 -1
- package/dist/src/__controllers/floating-controller.d.ts +1 -0
- package/dist/src/avatar/avatar.d.ts +1 -1
- package/dist/src/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
- package/dist/src/canvas/canvas.d.ts +3 -3
- package/dist/src/chip/chip/chip.d.ts +14 -11
- package/dist/src/chip/chip-set/chip-set.d.ts +20 -0
- package/dist/src/chip/chip-set/index.d.ts +1 -0
- package/dist/src/code-highlighter/code-highlighter.d.ts +4 -0
- package/dist/src/field/field.d.ts +1 -0
- package/dist/src/flow-designer/flow-designer-node.d.ts +1 -0
- package/dist/src/image/image.d.ts +2 -2
- package/dist/src/index.d.ts +2 -0
- package/dist/src/input/input.d.ts +1 -3
- package/dist/src/item/index.d.ts +1 -0
- package/dist/src/item/item.d.ts +48 -0
- package/dist/src/menu/menu/menu.d.ts +1 -0
- package/dist/src/menu/menu-item/menu-item.d.ts +8 -9
- package/dist/src/menu/sub-menu/sub-menu.d.ts +1 -0
- package/dist/src/modal/modal.d.ts +1 -1
- package/dist/src/navigation-rail/navigation-rail.d.ts +2 -6
- package/dist/src/popover/popover-content.d.ts +1 -1
- package/dist/src/search/search.d.ts +2 -6
- package/dist/test/chip.test.d.ts +1 -0
- package/dist/test/item.test.d.ts +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/readme.md +2 -2
- package/scss/mixin.scss +23 -0
- package/scss/styles.scss +3 -3
- package/scss/tokens.css +1 -1
- package/src/__controllers/floating-controller.ts +9 -3
- package/src/avatar/avatar.scss +4 -4
- package/src/avatar/avatar.ts +1 -1
- package/src/breadcrumb/breadcrumb/breadcrumb.ts +0 -1
- package/src/button/button/button-sizes.scss +11 -11
- package/src/button/button/button.scss +96 -122
- package/src/button/button/button.ts +38 -36
- package/src/button/icon-button/icon-button-sizes.scss +8 -8
- package/src/button/icon-button/icon-button.ts +23 -20
- package/src/canvas/canvas.scss +18 -6
- package/src/canvas/canvas.ts +125 -103
- package/src/card/card.ts +1 -1
- package/src/chip/chip/chip.scss +120 -46
- package/src/chip/chip/chip.ts +97 -38
- package/src/chip/chip-set/chip-set.scss +13 -0
- package/src/chip/chip-set/chip-set.ts +25 -0
- package/src/chip/chip-set/index.ts +1 -0
- package/src/code-highlighter/code-highlighter.ts +33 -6
- package/src/empty-state/empty-state.scss +1 -0
- package/src/field/field.scss +1 -1
- package/src/field/field.ts +6 -0
- package/src/flow-designer/flow-designer-node.ts +1 -0
- package/src/image/image.scss +21 -16
- package/src/image/image.ts +13 -14
- package/src/index.ts +2 -0
- package/src/input/input.ts +16 -25
- package/src/item/index.ts +1 -0
- package/src/item/item.scss +184 -0
- package/src/item/item.ts +340 -0
- package/src/menu/menu/menu.ts +16 -9
- package/src/menu/menu-item/menu-item.scss +30 -108
- package/src/menu/menu-item/menu-item.ts +89 -129
- package/src/menu/sub-menu/sub-menu.ts +6 -2
- package/src/modal/modal.scss +10 -10
- package/src/modal/modal.ts +1 -1
- package/src/navigation-rail/navigation-rail.ts +2 -6
- package/src/peacock-loader.ts +28 -22
- package/src/popover/popover-content.ts +1 -1
- package/src/search/search.ts +11 -16
- package/src/select/option.ts +1 -1
- package/src/select/select.scss +1 -10
- package/src/select/select.ts +2 -0
- package/dist/flow-designer-DvTUrDp5.js +0 -1656
- package/dist/flow-designer-DvTUrDp5.js.map +0 -1
- package/dist/flow-designer-node-BWrPuxAR.js.map +0 -1
- package/dist/icon-button-CK1ZuE-2.js.map +0 -1
- package/dist/navigation-rail-DTTkqohi.js.map +0 -1
- package/src/chip/chip/chip-colors.scss +0 -31
package/src/menu/menu/menu.ts
CHANGED
|
@@ -235,9 +235,7 @@ export class Menu extends LitElement {
|
|
|
235
235
|
private _isEventFromThisMenu(event: Event) {
|
|
236
236
|
const path = event.composedPath();
|
|
237
237
|
const sourceMenu = path.find(
|
|
238
|
-
target =>
|
|
239
|
-
target instanceof HTMLElement &&
|
|
240
|
-
target.tagName.toLowerCase() === 'wc-menu',
|
|
238
|
+
target => target instanceof Menu,
|
|
241
239
|
);
|
|
242
240
|
|
|
243
241
|
return sourceMenu === this;
|
|
@@ -252,12 +250,10 @@ export class Menu extends LitElement {
|
|
|
252
250
|
const ownedItems = this.items;
|
|
253
251
|
|
|
254
252
|
for (const target of path) {
|
|
255
|
-
if (target instanceof
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return ownedItem;
|
|
260
|
-
}
|
|
253
|
+
if (target instanceof MenuItem) {
|
|
254
|
+
const ownedItem = ownedItems.find(item => item === target);
|
|
255
|
+
if (ownedItem) {
|
|
256
|
+
return ownedItem;
|
|
261
257
|
}
|
|
262
258
|
}
|
|
263
259
|
}
|
|
@@ -276,6 +272,16 @@ export class Menu extends LitElement {
|
|
|
276
272
|
this._syncRovingTabIndex();
|
|
277
273
|
}
|
|
278
274
|
|
|
275
|
+
private _dispatchItemActivate(item: MenuItem) {
|
|
276
|
+
this.dispatchEvent(
|
|
277
|
+
new CustomEvent('menu-item-activate', {
|
|
278
|
+
bubbles: true,
|
|
279
|
+
composed: true,
|
|
280
|
+
detail: { item },
|
|
281
|
+
}),
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
279
285
|
private _onClick = (event: Event) => {
|
|
280
286
|
if (!this.open) {
|
|
281
287
|
return;
|
|
@@ -287,6 +293,7 @@ export class Menu extends LitElement {
|
|
|
287
293
|
}
|
|
288
294
|
|
|
289
295
|
this._setActiveItem(item);
|
|
296
|
+
this._dispatchItemActivate(item);
|
|
290
297
|
if (item.keepOpen) {
|
|
291
298
|
return;
|
|
292
299
|
}
|
|
@@ -3,118 +3,40 @@
|
|
|
3
3
|
@include mixin.base-styles;
|
|
4
4
|
|
|
5
5
|
:host {
|
|
6
|
-
padding-inline: var(--spacing-050);
|
|
7
6
|
outline: none;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.menu-item {
|
|
11
|
-
position: relative;
|
|
12
|
-
height: 3rem;
|
|
13
|
-
display: flex;
|
|
14
|
-
align-items: center;
|
|
15
|
-
padding-inline: 0.75rem;
|
|
16
|
-
outline: 0;
|
|
17
|
-
text-decoration: none;
|
|
18
|
-
|
|
19
|
-
@include mixin.get-typography(label-large);
|
|
20
|
-
|
|
21
|
-
.menu-item-content {
|
|
22
|
-
display: flex;
|
|
23
|
-
align-items: center;
|
|
24
|
-
z-index: 1;
|
|
25
|
-
width: 100%;
|
|
26
|
-
gap: var(--spacing-100);
|
|
27
|
-
|
|
28
|
-
color: var(--_label-text-color);
|
|
29
|
-
opacity: var(--_label-text-opacity, 1);
|
|
30
|
-
--icon-size: var(--button-icon-size, var(--_button-icon-size));
|
|
31
|
-
--icon-color: var(--_label-text-color);
|
|
32
|
-
|
|
33
|
-
.slot-container {
|
|
34
|
-
flex: 1;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
.background {
|
|
40
|
-
display: block;
|
|
41
|
-
position: absolute;
|
|
42
|
-
left: 0;
|
|
43
|
-
top: 0;
|
|
44
|
-
width: 100%;
|
|
45
|
-
height: 100%;
|
|
46
|
-
background-color: var(--_container-color);
|
|
47
|
-
opacity: var(--_container-opacity, 1);
|
|
48
7
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
corner-shape: var(--_container-corner-shape-variant);
|
|
54
|
-
pointer-events: none;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/*
|
|
58
|
-
Background layers
|
|
59
|
-
*/
|
|
60
|
-
.focus-ring {
|
|
61
|
-
z-index: 2;
|
|
62
|
-
--focus-ring-container-shape-start-start: var(--_container-shape-start-start);
|
|
63
|
-
--focus-ring-container-shape-start-end: var(--_container-shape-start-end);
|
|
64
|
-
--focus-ring-container-shape-end-start: var(--_container-shape-end-start);
|
|
65
|
-
--focus-ring-container-shape-end-end: var(--_container-shape-end-end);
|
|
66
|
-
--focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.ripple {
|
|
70
|
-
--ripple-state-opacity: var(--_container-state-opacity, 0);
|
|
71
|
-
--ripple-pressed-color: var(--_container-state-color);
|
|
72
|
-
border-start-start-radius: var(--_container-shape-start-start);
|
|
73
|
-
border-start-end-radius: var(--_container-shape-start-end);
|
|
74
|
-
border-end-start-radius: var(--_container-shape-end-start);
|
|
75
|
-
border-end-end-radius: var(--_container-shape-end-end);
|
|
76
|
-
corner-shape: var(--_container-corner-shape-variant);
|
|
77
|
-
}
|
|
8
|
+
--menu-item-container-shape-start-start: var(--shape-corner-extra-small);
|
|
9
|
+
--menu-item-container-shape-start-end: var(--shape-corner-extra-small);
|
|
10
|
+
--menu-item-container-shape-end-start: var(--shape-corner-extra-small);
|
|
11
|
+
--menu-item-container-shape-end-end: var(--shape-corner-extra-small);
|
|
78
12
|
}
|
|
79
13
|
|
|
80
|
-
|
|
81
14
|
.menu-item {
|
|
15
|
+
width: 100%;
|
|
16
|
+
--item-height: 3rem;
|
|
17
|
+
--item-container-shape-start-start: var(--menu-item-container-shape-start-start);
|
|
18
|
+
--item-container-shape-start-end: var(--menu-item-container-shape-start-end);
|
|
19
|
+
--item-container-shape-end-start: var(--menu-item-container-shape-end-start);
|
|
20
|
+
--item-container-shape-end-end: var(--menu-item-container-shape-end-end);
|
|
21
|
+
--item-container-shape-variant: none;
|
|
22
|
+
|
|
23
|
+
--item-label-font-family: var(--typography-label-large-font-family);
|
|
24
|
+
--item-label-font-size: var(--typography-label-large-font-size);
|
|
25
|
+
--item-label-font-weight: var(--typography-label-large-font-weight);
|
|
26
|
+
--item-label-line-height: var(--typography-label-large-line-height);
|
|
27
|
+
--item-label-letter-spacing: var(--typography-label-large-letter-spacing);
|
|
28
|
+
|
|
29
|
+
--item-label-text-color: var(--menu-item-label-color);
|
|
30
|
+
--item-leading-trailing-color: var(--menu-item-label-color);
|
|
31
|
+
--item-supporting-text-color: var(--menu-item-label-color);
|
|
32
|
+
--item-container-selected-color: var(--menu-item-container-selected-color);
|
|
33
|
+
--item-label-text-selected-color: var(--menu-item-label-selected-color);
|
|
34
|
+
--item-icon-size: var(--button-icon-size, var(--_button-icon-size));
|
|
35
|
+
}
|
|
82
36
|
|
|
83
|
-
|
|
84
|
-
--
|
|
85
|
-
--
|
|
86
|
-
--
|
|
87
|
-
--
|
|
88
|
-
--_label-text-color: var(--menu-item-label-color);
|
|
89
|
-
--_container-state-color: var(--_label-text-color);
|
|
90
|
-
|
|
91
|
-
&:hover:not(:where(.disabled, .selected)) {
|
|
92
|
-
--_container-state-opacity: 0.08;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
&.pressed:not(:where(.disabled)) {
|
|
96
|
-
--_container-state-opacity: 0.12;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
&.selected {
|
|
100
|
-
--_container-color: var(--menu-item-container-selected-color);
|
|
101
|
-
--_label-text-color: var(--menu-item-label-selected-color);
|
|
102
|
-
--_container-shape-start-start: var(--shape-corner-large);
|
|
103
|
-
--_container-shape-start-end: var(--shape-corner-large);
|
|
104
|
-
--_container-shape-end-start: var(--shape-corner-large);
|
|
105
|
-
--_container-shape-end-end: var(--shape-corner-large);
|
|
106
|
-
--_container-corner-shape-variant: none;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
&.disabled {
|
|
110
|
-
cursor: not-allowed;
|
|
111
|
-
--_container-color: var(--color-on-surface);
|
|
112
|
-
--_container-opacity: 0.1;
|
|
113
|
-
--_label-text-color: var(--color-on-surface);
|
|
114
|
-
--_label-text-opacity: 0.38;
|
|
115
|
-
|
|
116
|
-
.ripple {
|
|
117
|
-
display: none;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
37
|
+
:host([selected]) {
|
|
38
|
+
--menu-item-container-shape-start-start: var(--shape-corner-large);
|
|
39
|
+
--menu-item-container-shape-start-end: var(--shape-corner-large);
|
|
40
|
+
--menu-item-container-shape-end-start: var(--shape-corner-large);
|
|
41
|
+
--menu-item-container-shape-end-end: var(--shape-corner-large);
|
|
120
42
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { html, LitElement, nothing } from 'lit';
|
|
2
|
-
import { property, query
|
|
3
|
-
import {
|
|
2
|
+
import { property, query } from 'lit/decorators.js';
|
|
3
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
4
4
|
import styles from './menu-item.scss';
|
|
5
5
|
import colorStyles from './menu-item-colors.scss';
|
|
6
6
|
import BaseButtonMixin from '@/__mixins/BaseButtonMixin.js';
|
|
7
7
|
import BaseHyperlinkMixin from '@/__mixins/BaseHyperlinkMixin.js';
|
|
8
|
-
import {
|
|
8
|
+
import { Item } from '@/item/item.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* @label Menu Item
|
|
@@ -21,7 +21,6 @@ import { dispatchActivationClick, isActivationClick } from '@/__utils/dispatch-e
|
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
23
|
export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
|
|
24
|
-
|
|
25
24
|
@property({ type: String }) value = '';
|
|
26
25
|
|
|
27
26
|
@property({ type: Boolean, reflect: true }) selected = false;
|
|
@@ -37,31 +36,40 @@ export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
|
|
|
37
36
|
|
|
38
37
|
static styles = [styles, colorStyles];
|
|
39
38
|
|
|
40
|
-
@query('
|
|
39
|
+
@query('wc-item') readonly itemElement!: Item | null;
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
private readonly _contentObserver = new MutationObserver(() => {
|
|
42
|
+
this.requestUpdate();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
private _rovingTabIndex = -1;
|
|
47
46
|
|
|
48
47
|
connectedCallback() {
|
|
49
48
|
// eslint-disable-next-line wc/guard-super-call
|
|
50
49
|
super.connectedCallback();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
this._contentObserver.observe(this, {
|
|
51
|
+
subtree: true,
|
|
52
|
+
childList: true,
|
|
53
|
+
characterData: true,
|
|
54
|
+
attributes: true,
|
|
55
|
+
attributeFilter: ['slot'],
|
|
56
|
+
});
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
disconnectedCallback() {
|
|
60
|
-
|
|
61
|
-
this.removeEventListener('click', this.__dispatchClickWithThrottle);
|
|
60
|
+
this._contentObserver.disconnect();
|
|
62
61
|
super.disconnectedCallback();
|
|
63
62
|
}
|
|
64
63
|
|
|
64
|
+
override get tabIndex() {
|
|
65
|
+
return this._rovingTabIndex;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
override set tabIndex(value: number) {
|
|
69
|
+
this._rovingTabIndex = value;
|
|
70
|
+
this.requestUpdate();
|
|
71
|
+
}
|
|
72
|
+
|
|
65
73
|
override focus() {
|
|
66
74
|
this.itemElement?.focus();
|
|
67
75
|
}
|
|
@@ -70,129 +78,81 @@ export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
|
|
|
70
78
|
this.itemElement?.blur();
|
|
71
79
|
}
|
|
72
80
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
__dispatchClick = (event: MouseEvent | KeyboardEvent) => {
|
|
79
|
-
// If the button is soft-disabled or a disabled link, we need to explicitly
|
|
80
|
-
// prevent the click from propagating to other event listeners as well as
|
|
81
|
-
// prevent the default action.
|
|
82
|
-
if (this.softDisabled || (this.disabled && this.href)) {
|
|
83
|
-
event.stopImmediatePropagation();
|
|
84
|
-
event.preventDefault();
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (!isActivationClick(event) || !this.itemElement) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
this.focus();
|
|
93
|
-
dispatchActivationClick(this.itemElement);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
__handleKeyDown = (event: KeyboardEvent) => {
|
|
97
|
-
this.__handlePress(event);
|
|
98
|
-
|
|
99
|
-
if (this.disabled || this.softDisabled || !this.itemElement) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (event.key === ' ') {
|
|
104
|
-
event.preventDefault();
|
|
105
|
-
this.itemElement.click();
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (event.key === 'Enter' && !this.__isLink()) {
|
|
110
|
-
event.preventDefault();
|
|
111
|
-
this.itemElement.click();
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
__handlePress = (event: KeyboardEvent | MouseEvent) => {
|
|
116
|
-
if (this.disabled || this.softDisabled) return;
|
|
117
|
-
if (
|
|
118
|
-
event instanceof KeyboardEvent &&
|
|
119
|
-
event.type === 'keydown' &&
|
|
120
|
-
(event.key === 'Enter' || event.key === ' ')
|
|
121
|
-
) {
|
|
122
|
-
this.isPressed = true;
|
|
123
|
-
} else if (event.type === 'mousedown') {
|
|
124
|
-
this.isPressed = true;
|
|
125
|
-
} else {
|
|
126
|
-
this.isPressed = false;
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
render() {
|
|
131
|
-
const isLink = this.__isLink();
|
|
81
|
+
private _hasNamedSlot(...names: string[]) {
|
|
82
|
+
return names.some(name =>
|
|
83
|
+
Array.from(this.children).some(child => child.getAttribute('slot') === name),
|
|
84
|
+
);
|
|
85
|
+
}
|
|
132
86
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
87
|
+
private _hasDefaultSlot() {
|
|
88
|
+
return Array.from(this.childNodes).some(node => {
|
|
89
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
90
|
+
return Boolean(node.textContent?.trim());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
node.nodeType === Node.ELEMENT_NODE &&
|
|
95
|
+
!(node as Element).hasAttribute('slot')
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
139
99
|
|
|
100
|
+
render() {
|
|
140
101
|
const controls = this.getAttribute('aria-controls');
|
|
141
102
|
|
|
142
|
-
|
|
143
|
-
|
|
103
|
+
return html`
|
|
104
|
+
<wc-item
|
|
144
105
|
id="item"
|
|
145
|
-
class
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
106
|
+
class="menu-item"
|
|
107
|
+
role="menuitem"
|
|
108
|
+
tabindex=${String(this.tabIndex)}
|
|
109
|
+
?selected=${this.selected}
|
|
110
|
+
?disabled=${this.disabled}
|
|
111
|
+
.softDisabled=${this.softDisabled}
|
|
112
|
+
.htmlType=${this.htmlType}
|
|
113
|
+
.href=${this.href}
|
|
114
|
+
.target=${this.target}
|
|
115
|
+
.rel=${this.rel}
|
|
116
|
+
.download=${this.download}
|
|
156
117
|
aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
|
|
157
|
-
aria-controls=${this.hasSubmenu && controls ? controls :
|
|
158
|
-
aria-expanded=${this.hasSubmenu ? String(this.submenuOpen) :
|
|
118
|
+
aria-controls=${ifDefined(this.hasSubmenu && controls ? controls : undefined)}
|
|
119
|
+
aria-expanded=${ifDefined(this.hasSubmenu ? String(this.submenuOpen) : undefined)}
|
|
159
120
|
>
|
|
160
121
|
${this.renderContent()}
|
|
161
|
-
</
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return html`<div
|
|
165
|
-
id="item"
|
|
166
|
-
class=${classMap(cssClasses)}
|
|
167
|
-
tabindex=${this.disabled ? '-1' : '0'}
|
|
168
|
-
|
|
169
|
-
@click=${this.__dispatchClick}
|
|
170
|
-
@mousedown=${this.__handlePress}
|
|
171
|
-
@keydown=${this.__handleKeyDown}
|
|
172
|
-
@keyup=${this.__handlePress}
|
|
173
|
-
|
|
174
|
-
aria-disabled=${String(this.disabled)}
|
|
175
|
-
aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
|
|
176
|
-
aria-controls=${this.hasSubmenu && controls ? controls : nothing}
|
|
177
|
-
aria-expanded=${this.hasSubmenu ? String(this.submenuOpen) : nothing}
|
|
178
|
-
>
|
|
179
|
-
${this.renderContent()}
|
|
180
|
-
</div>`;
|
|
122
|
+
</wc-item>
|
|
123
|
+
`;
|
|
181
124
|
}
|
|
182
125
|
|
|
183
126
|
renderContent() {
|
|
127
|
+
const hasStart = this._hasNamedSlot('start');
|
|
128
|
+
const hasOverline = this._hasNamedSlot('overline');
|
|
129
|
+
const hasHeadline = this._hasNamedSlot('headline');
|
|
130
|
+
const hasDefault = this._hasDefaultSlot();
|
|
131
|
+
const hasSupportingText = this._hasNamedSlot('supporting-text');
|
|
132
|
+
const hasTrailingSupportingText = this._hasNamedSlot(
|
|
133
|
+
'trailing-supporting-text',
|
|
134
|
+
);
|
|
135
|
+
const hasEnd = this._hasNamedSlot('end');
|
|
136
|
+
|
|
184
137
|
return html`
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
138
|
+
${hasStart ? html`<slot name="start" slot="start"></slot>` : nothing}
|
|
139
|
+
${hasOverline
|
|
140
|
+
? html`<slot name="overline" slot="overline"></slot>`
|
|
141
|
+
: nothing}
|
|
142
|
+
${hasHeadline ? html`<slot name="headline" slot="headline"></slot>` : nothing}
|
|
143
|
+
${hasDefault ? html`<slot></slot>` : nothing}
|
|
144
|
+
${hasSupportingText
|
|
145
|
+
? html`<slot name="supporting-text" slot="supporting-text"></slot>`
|
|
146
|
+
: nothing}
|
|
147
|
+
${hasTrailingSupportingText
|
|
148
|
+
? html`
|
|
149
|
+
<slot
|
|
150
|
+
name="trailing-supporting-text"
|
|
151
|
+
slot="trailing-supporting-text"
|
|
152
|
+
></slot>
|
|
153
|
+
`
|
|
154
|
+
: nothing}
|
|
155
|
+
${hasEnd ? html`<slot name="end" slot="end"></slot>` : nothing}
|
|
196
156
|
`;
|
|
197
157
|
}
|
|
198
158
|
}
|
|
@@ -38,6 +38,10 @@ export class SubMenu extends LitElement {
|
|
|
38
38
|
|
|
39
39
|
private _closeTimeout?: number;
|
|
40
40
|
|
|
41
|
+
private _resolveAnchorElement(item: MenuItem) {
|
|
42
|
+
return item.itemElement?.itemElement ?? item.itemElement ?? item;
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
private readonly _onChildMenuOpened = () => {
|
|
42
46
|
const { item } = this;
|
|
43
47
|
if (!item) {
|
|
@@ -91,7 +95,7 @@ export class SubMenu extends LitElement {
|
|
|
91
95
|
return;
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
menu.anchorElement = item;
|
|
98
|
+
menu.anchorElement = this._resolveAnchorElement(item);
|
|
95
99
|
menu.isSubmenu = true;
|
|
96
100
|
menu.show();
|
|
97
101
|
|
|
@@ -152,7 +156,7 @@ export class SubMenu extends LitElement {
|
|
|
152
156
|
menu.addEventListener('closed', this._onChildMenuClosed);
|
|
153
157
|
|
|
154
158
|
menu.isSubmenu = true;
|
|
155
|
-
menu.anchorElement = item;
|
|
159
|
+
menu.anchorElement = this._resolveAnchorElement(item);
|
|
156
160
|
menu.placement =
|
|
157
161
|
getComputedStyle(this).direction === 'rtl' ? 'left-start' : 'right-start';
|
|
158
162
|
menu.offset = 4;
|
package/src/modal/modal.scss
CHANGED
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
:host {
|
|
6
6
|
display: contents;
|
|
7
7
|
|
|
8
|
-
--modal-container-color: var(--color-surface-container-high
|
|
9
|
-
--modal-scrim-color:
|
|
10
|
-
--modal-shape: var(--shape-corner-extra-large
|
|
8
|
+
--modal-container-color: var(--color-surface-container-high);
|
|
9
|
+
--modal-scrim-color: color-mix(in srgb, var(--color-scrim), transparent 32%);
|
|
10
|
+
--modal-shape: var(--shape-corner-extra-large);
|
|
11
11
|
--modal-min-width: 280px;
|
|
12
12
|
--modal-max-width: 560px;
|
|
13
13
|
--modal-max-height: 90dvh;
|
|
14
|
-
--modal-transition-duration: var(--duration-medium2
|
|
15
|
-
--modal-transition-easing: var(--easing-emphasized
|
|
16
|
-
--modal-heading-color: var(--color-on-surface
|
|
17
|
-
--modal-subheading-color: var(--color-on-surface-variant
|
|
18
|
-
--modal-content-color: var(--color-on-surface-variant
|
|
19
|
-
--modal-divider-color: var(--color-outline-variant
|
|
20
|
-
--modal-elevation: var(--elevation-level3
|
|
14
|
+
--modal-transition-duration: var(--duration-medium2);
|
|
15
|
+
--modal-transition-easing: var(--easing-emphasized);
|
|
16
|
+
--modal-heading-color: var(--color-on-surface);
|
|
17
|
+
--modal-subheading-color: var(--color-on-surface-variant);
|
|
18
|
+
--modal-content-color: var(--color-on-surface-variant);
|
|
19
|
+
--modal-divider-color: var(--color-outline-variant);
|
|
20
|
+
--modal-elevation: var(--elevation-level3);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/* Scrim backdrop */
|
package/src/modal/modal.ts
CHANGED
|
@@ -9,7 +9,7 @@ type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'fullscreen';
|
|
|
9
9
|
/**
|
|
10
10
|
* @label Modal
|
|
11
11
|
* @tag wc-modal
|
|
12
|
-
* @rawTag modal
|
|
12
|
+
* @rawTag modal
|
|
13
13
|
* @summary A Material Design 3 dialog/modal for displaying content in a layer above the page, with optional header, body, and footer slots.
|
|
14
14
|
*
|
|
15
15
|
* @cssprop --modal-container-color - Background color of the dialog container.
|
|
@@ -32,17 +32,13 @@ import { NavigationRailItem } from './navigation-rail-item.js';
|
|
|
32
32
|
* ```html
|
|
33
33
|
* <wc-navigation-rail>
|
|
34
34
|
* <wc-navigation-rail-item active>
|
|
35
|
-
* <wc-icon slot="icon"
|
|
35
|
+
* <wc-icon slot="icon" name="home"></wc-icon>
|
|
36
36
|
* Home
|
|
37
37
|
* </wc-navigation-rail-item>
|
|
38
38
|
* <wc-navigation-rail-item>
|
|
39
|
-
* <wc-icon slot="icon"
|
|
39
|
+
* <wc-icon slot="icon" name="search"></wc-icon>
|
|
40
40
|
* Search
|
|
41
41
|
* </wc-navigation-rail-item>
|
|
42
|
-
* <wc-navigation-rail-item>
|
|
43
|
-
* <wc-icon slot="icon">settings</wc-icon>
|
|
44
|
-
* Settings
|
|
45
|
-
* </wc-navigation-rail-item>
|
|
46
42
|
* </wc-navigation-rail>
|
|
47
43
|
* ```
|
|
48
44
|
* @tags navigation
|