@mgdis/mg-components 5.7.0 → 5.8.1
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/cjs/loader.cjs.js +1 -1
- package/dist/cjs/mg-action-more_31.cjs.entry.js +351 -600
- package/dist/cjs/mg-components.cjs.js +1 -1
- package/dist/cjs/mg-item-more.cjs.entry.js +273 -0
- package/dist/cjs/mg-menu.conf-9afe6571.js +242 -0
- package/dist/collection/collection-manifest.json +2 -1
- package/dist/collection/components/atoms/mg-button/mg-button.js +24 -0
- package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +8 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +6 -2
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +14 -10
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +91 -21
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +0 -13
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +80 -76
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +7 -5
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +174 -78
- package/dist/collection/components/molecules/mg-form/mg-form.js +1 -1
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js +1 -0
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +30 -0
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +200 -0
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -2
- package/dist/collection/styles/navigation-button.scss +1 -1
- package/dist/collection/utils/behaviors.utils.js +33 -29
- package/dist/collection/utils/components.utils.js +2 -4
- package/dist/collection/utils/unit.test.utils.js +25 -0
- package/dist/components/components.utils.js +2 -4
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/mg-action-more.js +2 -1
- package/dist/components/mg-button2.js +4 -1
- package/dist/components/mg-form.js +1 -1
- package/dist/components/mg-icon2.js +8 -0
- package/dist/components/mg-input-checkbox.js +5 -4
- package/dist/components/mg-input-select2.js +83 -17
- package/dist/components/mg-item-more.d.ts +11 -0
- package/dist/components/mg-item-more.js +336 -0
- package/dist/components/mg-menu-item2.js +138 -251
- package/dist/components/mg-menu.conf.js +14 -0
- package/dist/components/mg-menu2.js +76 -111
- package/dist/components/mg-tabs.js +1 -1
- package/dist/components/mg-tooltip2.js +6 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mg-action-more_31.entry.js +321 -570
- package/dist/esm/mg-components.js +1 -1
- package/dist/esm/mg-item-more.entry.js +269 -0
- package/dist/esm/mg-menu.conf-881fbd82.js +235 -0
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/p-1221773c.entry.js +1 -0
- package/dist/mg-components/p-30bc87db.entry.js +1 -0
- package/dist/mg-components/p-367f92d2.js +1 -0
- package/dist/mg-components/styles/navigation-button.scss +1 -1
- package/dist/types/components/atoms/mg-button/mg-button.d.ts +5 -0
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +3 -3
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +39 -4
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +3 -27
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +38 -30
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +5 -0
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +69 -16
- package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +26 -0
- package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +74 -0
- package/dist/types/components.d.ts +75 -17
- package/dist/types/utils/behaviors.utils.d.ts +12 -5
- package/dist/types/utils/components.utils.d.ts +2 -2
- package/dist/types/utils/unit.test.utils.d.ts +11 -0
- package/package.json +1 -1
- package/dist/mg-components/p-4cfd5423.entry.js +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
2
|
-
import { C as ClassList } from './components.utils.js';
|
|
2
|
+
import { c as createID, C as ClassList } from './components.utils.js';
|
|
3
3
|
import { i as initLocales } from './index2.js';
|
|
4
|
+
import { D as Direction } from './mg-menu.conf.js';
|
|
4
5
|
import { d as defineCustomElement$5 } from './mg-badge2.js';
|
|
5
6
|
import { d as defineCustomElement$4 } from './mg-button2.js';
|
|
6
7
|
import { d as defineCustomElement$3 } from './mg-card2.js';
|
|
@@ -26,223 +27,128 @@ var Status;
|
|
|
26
27
|
Status["ACTIVE"] = "active";
|
|
27
28
|
})(Status || (Status = {}));
|
|
28
29
|
|
|
29
|
-
/**
|
|
30
|
-
* Menu direction type
|
|
31
|
-
*/
|
|
32
|
-
var Direction;
|
|
33
|
-
(function (Direction) {
|
|
34
|
-
Direction["VERTICAL"] = "vertical";
|
|
35
|
-
Direction["HORIZONTAL"] = "horizontal";
|
|
36
|
-
})(Direction || (Direction = {}));
|
|
37
|
-
/**
|
|
38
|
-
* More item type guard
|
|
39
|
-
*
|
|
40
|
-
* @param {unknown} element element to control
|
|
41
|
-
* @returns {boolean} truthy if element is more-item
|
|
42
|
-
*/
|
|
43
|
-
const isMoreItem = (element) => {
|
|
44
|
-
var _a, _b, _c;
|
|
45
|
-
const item = element;
|
|
46
|
-
return (item === undefined ||
|
|
47
|
-
(typeof item === 'object' &&
|
|
48
|
-
(typeof item.size === 'string' || typeof ((_a = item.mgIcon) === null || _a === void 0 ? void 0 : _a.icon) === 'string' || typeof ((_b = item.slotLabel) === null || _b === void 0 ? void 0 : _b.label) === 'string' || typeof ((_c = item.slotLabel) === null || _c === void 0 ? void 0 : _c.display) === 'boolean')));
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* List of all possibles sizes
|
|
52
|
-
*/
|
|
53
|
-
const sizes = ['regular', 'medium', 'large'];
|
|
30
|
+
const mgMenuItemCss = ".sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion){.mg-a11y-animation{animation:none !important;transition:none !important}}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding:1rem 2rem;height:3.8rem}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=metadata]){font-size:var(--font-size)}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular.mg-menu-item__navigation-button--vertical{padding-left:calc(2rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding:1rem 3rem;height:5.1rem}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--vertical{padding-left:calc(3rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding:1rem 4rem;height:7.1rem}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--vertical{padding-left:calc(4rem - 0.3rem)}.mg-menu-item__navigation-button{display:flex;align-items:center;column-gap:var(--mg-menu-item-navigation-button-column-gap, 1rem);background-color:unset;border:none;font-family:var(--font-family);font-weight:400;color:hsl(var(--mg-menu-item-color-hsl, var(--color-dark)));line-height:var(--line-height);text-decoration:none;white-space:nowrap;box-sizing:border-box;cursor:pointer}.mg-menu-item__navigation-button:disabled,.mg-menu-item__navigation-button--disabled{cursor:default;opacity:var(--mg-disabled-opacity)}.mg-menu-item__navigation-button:focus-visible{z-index:10}.mg-menu-item__navigation-button:hover:not(.mg-menu-item__navigation-button--disabled),.mg-menu-item__navigation-button:focus-visible:not(.mg-menu-item__navigation-button--disabled){background-color:hsl(var(--mg-menu-item-focused-background-color-hsl), 0.1)}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active{color:hsl(var(--mg-menu-item-color-active-hsl));font-weight:600}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active.mg-menu-item__navigation-button--horizontal{border-bottom-color:hsl(var(--mg-menu-item-border-color-active-hsl))}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active.mg-menu-item__navigation-button--vertical{border-left-color:hsl(var(--mg-menu-item-border-color-active-hsl))}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--hidden{display:none}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal{border-bottom:0.3rem solid transparent}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical{border-left:0.3rem solid transparent}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(1 * 2rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(2 * 2rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(3 * 2rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(4 * 2rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(5 * 2rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(6 * 2rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(1 * 3rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(2 * 3rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(3 * 3rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(4 * 3rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(5 * 3rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(6 * 3rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(1 * 4rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(2 * 4rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(3 * 4rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(4 * 4rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(5 * 4rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(6 * 4rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host{position:relative;display:flex;--mg-popover-padding-vertical:0;--mg-popover-padding-horizontal:0}:host([data-style-direction-vertical]){flex-direction:column}:host([data-style-direction-vertical]) .mg-menu-item__navigation-button{width:100%}:host([data-style-direction-vertical]) .mg-menu-item__collapse-container{left:unset;top:unset;position:unset;width:unset}:host([data-style-direction-vertical]) .mg-menu-item-chevron{margin-left:auto}:host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level,:host([data-overflow-more]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level{background-color:hsl(var(--color-light))}:host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level ::slotted(mg-menu),:host([data-overflow-more]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level ::slotted(mg-menu){padding:1rem 0}:host([data-overflow-more]){--mg-menu-item-navigation-button-column-gap:0}:host([data-overflow-more]) .mg-menu-item__navigation-button-chevron{display:none}:host([data-overflow-more]) .mg-menu-item__navigation-button-text-content ::slotted([slot=information]){margin-left:0}:host([data-overflow-more]) ::slotted(mg-menu){--mg-menu-item-navigation-button-column-gap:1rem}.mg-menu-item{max-width:var(--mg-menu-item-navigation-button-max-width)}.mg-menu-item__collapse-container{width:max-content;z-index:10}.mg-menu-item__navigation-button-center{min-width:0}.mg-menu-item__navigation-button-text-content{width:100%;display:flex;align-items:center}.mg-menu-item__navigation-button-text-content-notification,.mg-menu-item__navigation-button-text-content ::slotted([slot=information]){margin-left:1rem;font-size:var(--font-size)}.mg-menu-item__navigation-button-chevron{margin-left:auto;transition:200ms}.mg-menu-item__navigation-button-chevron--rotate.mg-menu-item__navigation-button-chevron{transform:rotate(180deg)}::slotted([slot=label]),::slotted([slot=metadata]){display:block;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::slotted(*){display:flex;flex-direction:column}:host([status=disabled]){pointer-events:none}:host([hidden]){display:none}";
|
|
54
31
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
var OverflowBehaviorElements;
|
|
63
|
-
(function (OverflowBehaviorElements) {
|
|
64
|
-
OverflowBehaviorElements["MORE"] = "data-overflow-more";
|
|
65
|
-
OverflowBehaviorElements["BASE_INDEX"] = "data-overflow-base-index";
|
|
66
|
-
OverflowBehaviorElements["PROXY_INDEX"] = "data-overflow-proxy-index";
|
|
67
|
-
})(OverflowBehaviorElements || (OverflowBehaviorElements = {}));
|
|
68
|
-
class OverflowBehavior {
|
|
69
|
-
constructor(element, render) {
|
|
70
|
-
this.element = element;
|
|
71
|
-
this.render = render;
|
|
72
|
-
/**********
|
|
73
|
-
* Public *
|
|
74
|
-
**********/
|
|
75
|
-
/**
|
|
76
|
-
* Disconnect ResizeObserver
|
|
77
|
-
*
|
|
78
|
-
* @returns {void}
|
|
79
|
-
*/
|
|
80
|
-
this.disconnect = () => {
|
|
81
|
-
this.resizeObserver.disconnect();
|
|
82
|
-
};
|
|
32
|
+
const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
this.__registerHost();
|
|
36
|
+
this.__attachShadow();
|
|
37
|
+
this.statusChange = createEvent(this, "status-change", 7);
|
|
38
|
+
this.itemLoaded = createEvent(this, "item-loaded", 7);
|
|
83
39
|
/************
|
|
84
40
|
* Internal *
|
|
85
41
|
************/
|
|
42
|
+
this.name = 'mg-menu-item';
|
|
43
|
+
this.navigationButton = `${this.name}__navigation-button`;
|
|
44
|
+
/***********
|
|
45
|
+
* Methods *
|
|
46
|
+
**********/
|
|
86
47
|
/**
|
|
87
|
-
*
|
|
48
|
+
* Toggle expanded prop value
|
|
88
49
|
*
|
|
89
|
-
* @param {number} width width of the container
|
|
90
50
|
* @returns {void}
|
|
91
51
|
*/
|
|
92
|
-
this.
|
|
93
|
-
|
|
94
|
-
// set moreElement
|
|
95
|
-
this.moreElement = this.render();
|
|
96
|
-
this.moreElement.setAttribute(OverflowBehaviorElements.MORE, '');
|
|
97
|
-
// set children
|
|
98
|
-
this.children = Array.from(this.element.children);
|
|
99
|
-
let moreElementChildren;
|
|
100
|
-
const allowedElements = ['MG-MENU-ITEM', 'MG-BUTTON'];
|
|
101
|
-
if (isMgMenuItem(this.moreElement)) {
|
|
102
|
-
moreElementChildren = Array.from(this.moreElement.querySelector('mg-menu').children).filter(element => allowedElements.includes(element.nodeName));
|
|
103
|
-
}
|
|
104
|
-
this.children.forEach((child, index) => {
|
|
105
|
-
child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);
|
|
106
|
-
if (child.getAttribute(OverflowBehaviorElements.MORE) === null) {
|
|
107
|
-
// set moreElement children
|
|
108
|
-
moreElementChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
this.updateDisplayedItems(width);
|
|
52
|
+
this.toggleExpanded = () => {
|
|
53
|
+
this.expanded = !this.expanded;
|
|
113
54
|
};
|
|
114
55
|
/**
|
|
115
|
-
*
|
|
56
|
+
* Does an Element have given Status
|
|
116
57
|
*
|
|
117
|
-
* @param {
|
|
118
|
-
* @
|
|
58
|
+
* @param {HTMLMgMenuItemElement} mgMenuItemElement to parse
|
|
59
|
+
* @param {MgMenuItem['status']} status to check
|
|
60
|
+
* @returns {boolean} true if element with status is found
|
|
119
61
|
*/
|
|
120
|
-
this.
|
|
121
|
-
this.restoreItems();
|
|
122
|
-
const acc = { accWidth: 0, previousItem: null };
|
|
123
|
-
this.children.forEach((child) => {
|
|
124
|
-
acc.accWidth += child.offsetWidth;
|
|
125
|
-
const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
|
|
126
|
-
// if previous item is hidden AND is NOT more element we hidde current
|
|
127
|
-
// OR if item has an overflow we hidde current
|
|
128
|
-
// OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
|
|
129
|
-
// ELSE current is a display item
|
|
130
|
-
this.toggleItem(child, (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden));
|
|
131
|
-
// update previous item with current item
|
|
132
|
-
acc.previousItem = child;
|
|
133
|
-
});
|
|
134
|
-
};
|
|
62
|
+
this.hasStatus = (mgMenuItemElement, status) => mgMenuItemElement.status === status;
|
|
135
63
|
/**
|
|
136
|
-
*
|
|
64
|
+
* Is component contextual direction match the given direction
|
|
137
65
|
*
|
|
138
|
-
* @param {
|
|
139
|
-
* @param {
|
|
140
|
-
* @
|
|
141
|
-
* @returns {boolean} truthy if element is overflow
|
|
66
|
+
* @param {MgMenuItem['direction']} direction in parent menu
|
|
67
|
+
* @param {MgMenuItem['direction']} compareWith direction to compare with. Default: `this.direction`
|
|
68
|
+
* @returns {boolean} true is direction match the direction propertie
|
|
142
69
|
*/
|
|
143
|
-
this.
|
|
144
|
-
if (item.previousElementSibling === null || this.isMoreElement(item))
|
|
145
|
-
return false;
|
|
146
|
-
else if (!this.isMoreElement(item.nextElementSibling))
|
|
147
|
-
return cumulateWidth + this.moreElement.offsetWidth > availableWidth;
|
|
148
|
-
else
|
|
149
|
-
return cumulateWidth > availableWidth;
|
|
150
|
-
};
|
|
70
|
+
this.isDirection = (direction, compareWith = this.direction) => direction === compareWith;
|
|
151
71
|
/**
|
|
152
|
-
*
|
|
72
|
+
* Update displayNotificationBadge
|
|
73
|
+
* current component notification badge have priority over the slot badge when submenu contain badge
|
|
153
74
|
*
|
|
154
|
-
* @
|
|
155
|
-
* @returns {boolean} truthy if element is the 'MORE' element
|
|
75
|
+
* @returns {void} update displayNotificationBadge value
|
|
156
76
|
*/
|
|
157
|
-
this.
|
|
77
|
+
this.updateDisplayNotificationBadge = () => {
|
|
78
|
+
const childMenu = this.element.querySelector('mg-menu');
|
|
79
|
+
this.displayNotificationBadge =
|
|
80
|
+
childMenu !== null &&
|
|
81
|
+
Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
|
|
82
|
+
};
|
|
158
83
|
/**
|
|
159
|
-
*
|
|
84
|
+
* Method to control if one of component children have active status
|
|
160
85
|
*
|
|
161
|
-
* @
|
|
162
|
-
* @param {boolean} isHidden is item hidden
|
|
163
|
-
* @returns {void}
|
|
86
|
+
* @returns {boolean} truthy if component has active child
|
|
164
87
|
*/
|
|
165
|
-
this.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this.toggleElement(this.moreElement, isHidden);
|
|
169
|
-
else if (mgActionMenuindex >= 0) {
|
|
170
|
-
this.toggleElement(item, isHidden);
|
|
171
|
-
this.toggleElement(this.moreElement.querySelector(`[${OverflowBehaviorElements.PROXY_INDEX}="${mgActionMenuindex}"]`), !isHidden);
|
|
172
|
-
}
|
|
88
|
+
this.hasActiveChild = () => {
|
|
89
|
+
var _a;
|
|
90
|
+
return Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).some((element) => element.nodeName === 'MG-MENU-ITEM' && this.hasStatus(element, Status.ACTIVE) && element.getAttribute('hidden') === null);
|
|
173
91
|
};
|
|
174
92
|
/**
|
|
175
|
-
*
|
|
93
|
+
* Validate slots
|
|
176
94
|
*
|
|
177
|
-
* @param {
|
|
178
|
-
* @param {boolean} isHidden element is hidden
|
|
95
|
+
* @param {boolean} guard prevent action whith guard. Default: false.
|
|
179
96
|
* @returns {void}
|
|
180
97
|
*/
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
98
|
+
this.validateSlot = (guard = false) => {
|
|
99
|
+
// slot title AND metadata validation
|
|
100
|
+
// add title on label AND metada slots due to text-overflow on these element
|
|
101
|
+
if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
|
|
102
|
+
throw new Error(`<${this.name}> slot "label" is required.`);
|
|
103
|
+
['label', 'metadata'].forEach(slot => {
|
|
104
|
+
Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
|
|
105
|
+
if (element.textContent.trim().length < 1)
|
|
106
|
+
throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
|
|
107
|
+
if ((guard && element.getAttribute('title') === null) || !guard)
|
|
108
|
+
element.setAttribute('title', element.textContent);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
186
111
|
};
|
|
187
112
|
/**
|
|
188
|
-
*
|
|
113
|
+
* Update status
|
|
189
114
|
*
|
|
115
|
+
* @param {Status[]} guard status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
|
|
190
116
|
* @returns {void}
|
|
191
117
|
*/
|
|
192
|
-
this.
|
|
193
|
-
|
|
118
|
+
this.updateStatus = (guard = []) => {
|
|
119
|
+
if (![Status.HIDDEN, Status.DISABLED, ...guard].includes(this.status)) {
|
|
120
|
+
this.status = this.hasActiveChild() ? Status.ACTIVE : Status.VISIBLE;
|
|
121
|
+
}
|
|
194
122
|
};
|
|
195
|
-
if (this.resizeObserver === undefined) {
|
|
196
|
-
// add resize observer
|
|
197
|
-
this.resizeObserver = new ResizeObserver(entries => {
|
|
198
|
-
entries.forEach(entry => {
|
|
199
|
-
this.run(entry.contentRect.width);
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
this.resizeObserver.observe(this.element);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
const mgMenuItemCss = ".sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion){.mg-a11y-animation{animation:none !important;transition:none !important}}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding:1rem 2rem;height:calc(3.8rem)}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=metadata]){font-size:var(--font-size)}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular.mg-menu-item__navigation-button--vertical{padding-left:calc(2rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding:1rem 3rem;height:calc(5.1rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--vertical{padding-left:calc(3rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding:1rem 4rem;height:calc(7.1rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button ::slotted([slot=label]),.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button ::slotted([slot=metadata]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=label]),.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,.mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--vertical{padding-left:calc(4rem - 0.3rem)}.mg-menu-item__navigation-button{display:flex;align-items:center;column-gap:var(--mg-menu-item-navigation-button-column-gap, 1rem);background-color:unset;border:none;font-family:var(--font-family);font-weight:400;color:hsl(var(--mg-menu-item-color-hsl, var(--color-dark)));line-height:var(--line-height);text-decoration:none;white-space:nowrap;box-sizing:border-box;cursor:pointer}.mg-menu-item__navigation-button:disabled,.mg-menu-item__navigation-button--disabled{cursor:default;opacity:var(--mg-disabled-opacity)}.mg-menu-item__navigation-button:focus-visible{z-index:10}.mg-menu-item__navigation-button:hover:not(.mg-menu-item__navigation-button--disabled),.mg-menu-item__navigation-button:focus-visible:not(.mg-menu-item__navigation-button--disabled){background-color:hsl(var(--mg-menu-item-focused-background-color-hsl), 0.1)}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active{color:hsl(var(--mg-menu-item-color-active-hsl));font-weight:600}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active.mg-menu-item__navigation-button--horizontal{border-bottom-color:hsl(var(--mg-menu-item-border-color-active-hsl))}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--active.mg-menu-item__navigation-button--vertical{border-left-color:hsl(var(--mg-menu-item-border-color-active-hsl))}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--hidden{display:none}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal{border-bottom:0.3rem solid transparent}.mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical{border-left:0.3rem solid transparent}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(1 * 2rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(2 * 2rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(3 * 2rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(4 * 2rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(5 * 2rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular{padding-left:calc(6 * 2rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(1 * 3rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(2 * 3rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(3 * 3rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(4 * 3rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(5 * 3rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium{padding-left:calc(6 * 3rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host([data-style-direction-vertical][data-level=\"1\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(1 * 4rem - 0.3rem)}:host([data-level=\"1\"]) .mg-menu-item__collapse-container{z-index:calc(1 * 10)}:host([data-style-direction-vertical][data-level=\"2\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(2 * 4rem - 0.3rem)}:host([data-level=\"2\"]) .mg-menu-item__collapse-container{z-index:calc(2 * 10)}:host([data-style-direction-vertical][data-level=\"3\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(3 * 4rem - 0.3rem)}:host([data-level=\"3\"]) .mg-menu-item__collapse-container{z-index:calc(3 * 10)}:host([data-style-direction-vertical][data-level=\"4\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(4 * 4rem - 0.3rem)}:host([data-level=\"4\"]) .mg-menu-item__collapse-container{z-index:calc(4 * 10)}:host([data-style-direction-vertical][data-level=\"5\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(5 * 4rem - 0.3rem)}:host([data-level=\"5\"]) .mg-menu-item__collapse-container{z-index:calc(5 * 10)}:host([data-style-direction-vertical][data-level=\"6\"]) .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large{padding-left:calc(6 * 4rem - 0.3rem)}:host([data-level=\"6\"]) .mg-menu-item__collapse-container{z-index:calc(6 * 10)}:host{position:relative;display:flex;--mg-popover-padding-vertical:0;--mg-popover-padding-horizontal:0}:host([data-style-direction-vertical]){flex-direction:column}:host([data-style-direction-vertical]) .mg-menu-item__navigation-button{width:100%}:host([data-style-direction-vertical]) .mg-menu-item__collapse-container{left:unset;top:unset;position:unset;width:unset}:host([data-style-direction-vertical]) .mg-menu-item-chevron{margin-left:auto}:host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level{background-color:hsl(var(--color-light))}:host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level ::slotted(mg-menu){padding:1rem 0}:host([data-overflow-more]){--mg-menu-item-navigation-button-column-gap:0}:host([data-overflow-more]) .mg-menu-item__navigation-button-chevron{display:none}:host([data-overflow-more]) .mg-menu-item__navigation-button-text-content ::slotted([slot=information]){margin-left:0}:host([data-overflow-more]) ::slotted(mg-menu){--mg-menu-item-navigation-button-column-gap:1rem}.mg-menu-item{max-width:var(--mg-menu-item-navigation-button-max-width)}.mg-menu-item__collapse-container{width:max-content;z-index:10}.mg-menu-item__navigation-button-center{min-width:0}.mg-menu-item__navigation-button-text-content{width:100%;display:flex;align-items:center}.mg-menu-item__navigation-button-text-content-notification,.mg-menu-item__navigation-button-text-content ::slotted([slot=information]){margin-left:1rem;font-size:var(--font-size)}.mg-menu-item__navigation-button-chevron{margin-left:auto;transition:200ms}.mg-menu-item__navigation-button-chevron--rotate.mg-menu-item__navigation-button-chevron{transform:rotate(180deg)}::slotted([slot=label]),::slotted([slot=metadata]){display:block;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::slotted(*){display:flex;flex-direction:column}:host([status=disabled]){pointer-events:none}:host([hidden]){display:none}";
|
|
208
|
-
|
|
209
|
-
const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
210
|
-
constructor() {
|
|
211
|
-
super();
|
|
212
|
-
this.__registerHost();
|
|
213
|
-
this.__attachShadow();
|
|
214
|
-
this.statusChange = createEvent(this, "status-change", 7);
|
|
215
|
-
/************
|
|
216
|
-
* Internal *
|
|
217
|
-
************/
|
|
218
|
-
this.name = 'mg-menu-item';
|
|
219
|
-
this.navigationButton = `${this.name}__navigation-button`;
|
|
220
|
-
/***********
|
|
221
|
-
* Methods *
|
|
222
|
-
**********/
|
|
223
123
|
/**
|
|
224
|
-
*
|
|
124
|
+
* Init event-listeners
|
|
225
125
|
*
|
|
226
126
|
* @returns {void}
|
|
227
127
|
*/
|
|
228
|
-
this.
|
|
229
|
-
|
|
128
|
+
this.initListeners = () => {
|
|
129
|
+
var _a;
|
|
130
|
+
// manage first sub-level menu-items
|
|
131
|
+
Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).forEach(item => {
|
|
132
|
+
if (item.nodeName === 'MG-MENU-ITEM') {
|
|
133
|
+
// manage child menu listener
|
|
134
|
+
item.addEventListener('status-change', () => {
|
|
135
|
+
this.updateStatus();
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
});
|
|
230
139
|
};
|
|
231
140
|
/**
|
|
232
|
-
*
|
|
141
|
+
* Get mg-popover identifier
|
|
233
142
|
*
|
|
234
|
-
* @
|
|
235
|
-
* @param {MgMenuItem['status']} status to check
|
|
236
|
-
* @returns {boolean} true if element with status is found
|
|
143
|
+
* @returns {MgPopover['identifier']} generated mg-popover identifier
|
|
237
144
|
*/
|
|
238
|
-
this.
|
|
145
|
+
this.getPopoverIdentifier = () => `${this.identifier}-popover`;
|
|
239
146
|
/**
|
|
240
|
-
*
|
|
147
|
+
* Condition to know if component should display a mg-popover
|
|
241
148
|
*
|
|
242
|
-
* @
|
|
243
|
-
* @returns {boolean} true is direction match the direction propertie
|
|
149
|
+
* @returns {boolean} truthy if component display popover
|
|
244
150
|
*/
|
|
245
|
-
this.
|
|
151
|
+
this.displayPopover = () => this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined;
|
|
246
152
|
/************
|
|
247
153
|
* Handlers *
|
|
248
154
|
************/
|
|
@@ -270,35 +176,13 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
270
176
|
this.handlePopoverDisplay = (event) => {
|
|
271
177
|
this.expanded = event.detail;
|
|
272
178
|
};
|
|
273
|
-
/**
|
|
274
|
-
* Update displayNotificationBadge
|
|
275
|
-
* current component notification badge have priority over the slot badge when submenu contain badge
|
|
276
|
-
*
|
|
277
|
-
* @returns {void} update displayNotificationBadge value
|
|
278
|
-
*/
|
|
279
|
-
this.updateDisplayNotificationBadge = () => {
|
|
280
|
-
const childMenu = this.element.querySelector('mg-menu');
|
|
281
|
-
this.displayNotificationBadge =
|
|
282
|
-
childMenu !== null &&
|
|
283
|
-
Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
|
|
284
|
-
};
|
|
285
|
-
/**
|
|
286
|
-
* Method to control if one of component children have active status
|
|
287
|
-
*
|
|
288
|
-
* @returns {boolean} truthy if component has active child
|
|
289
|
-
*/
|
|
290
|
-
this.hasActiveChild = () => {
|
|
291
|
-
var _a;
|
|
292
|
-
return Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || [])
|
|
293
|
-
.filter(element => element.nodeName === 'MG-MENU-ITEM')
|
|
294
|
-
.some((element) => this.hasStatus(element, Status.ACTIVE) && element.getAttribute('hidden') === null);
|
|
295
|
-
};
|
|
296
179
|
/**
|
|
297
180
|
* Render slot
|
|
298
181
|
*
|
|
299
182
|
* @returns {HTMLElement} HTML Element
|
|
300
183
|
*/
|
|
301
184
|
this.renderSlot = () => h("slot", null);
|
|
185
|
+
this.identifier = createID('mg-menu-item');
|
|
302
186
|
this.href = undefined;
|
|
303
187
|
this.status = Status.VISIBLE;
|
|
304
188
|
this.expanded = false;
|
|
@@ -306,6 +190,7 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
306
190
|
this.navigationButtonClassList = new ClassList([this.navigationButton]);
|
|
307
191
|
this.direction = undefined;
|
|
308
192
|
this.isInMainMenu = undefined;
|
|
193
|
+
this.isItemMore = undefined;
|
|
309
194
|
this.hasChildren = false;
|
|
310
195
|
this.displayNotificationBadge = undefined;
|
|
311
196
|
}
|
|
@@ -342,11 +227,33 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
342
227
|
this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
|
|
343
228
|
this.navigationButtonClassList.add(`${this.navigationButton}--size-${newValue}`);
|
|
344
229
|
}
|
|
230
|
+
validateDirection(newValue) {
|
|
231
|
+
// manage menu items style depending to parent menu horientation
|
|
232
|
+
this.element.setAttribute(`data-style-direction-${newValue}`, '');
|
|
233
|
+
this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
|
|
234
|
+
// manage all sub levels child menu-items level with data-level attribut
|
|
235
|
+
if (this.isDirection(Direction.VERTICAL, newValue)) {
|
|
236
|
+
Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
|
|
237
|
+
item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
345
241
|
validateHasChildren(newValue) {
|
|
346
242
|
if (newValue && this.element.href !== undefined) {
|
|
347
243
|
throw new Error(`<${this.name}> prop "href" is unauthorizied when element is a parent.`);
|
|
348
244
|
}
|
|
349
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Render popover clickoutside guard for content slot
|
|
248
|
+
*
|
|
249
|
+
* @returns {void}
|
|
250
|
+
*/
|
|
251
|
+
updatePopoverGuard() {
|
|
252
|
+
if (this.displayPopover())
|
|
253
|
+
Array.from(this.element.children)
|
|
254
|
+
.filter((child) => child.getAttribute('slot') === null && child.nodeName !== 'MG-MENU' && Boolean(child.dataset))
|
|
255
|
+
.forEach((slot) => (slot.dataset.mgPopoverGuard = this.getPopoverIdentifier()));
|
|
256
|
+
}
|
|
350
257
|
/*************
|
|
351
258
|
* Lifecycle *
|
|
352
259
|
*************/
|
|
@@ -359,11 +266,13 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
359
266
|
// has children items that is NOT [slot='image' | 'information' | 'label' | 'metadata'] element
|
|
360
267
|
// we store only matching elements
|
|
361
268
|
this.hasChildren = Array.from(this.element.children).some(child => !['image', 'information', 'label', 'metadata'].includes(child.getAttribute('slot')));
|
|
269
|
+
this.badgeLabel = initLocales(this.element).messages.plusMenu.badgeLabel;
|
|
270
|
+
this.isItemMore = this.element.dataset.overflowMore !== undefined;
|
|
362
271
|
// Validate props
|
|
363
|
-
this.validateSize(this.size);
|
|
364
272
|
this.validateStatus(this.status);
|
|
365
273
|
this.validateExpanded(this.expanded);
|
|
366
|
-
|
|
274
|
+
// Validate states
|
|
275
|
+
this.validateSize(this.size);
|
|
367
276
|
}
|
|
368
277
|
/**
|
|
369
278
|
* Check if component slots configuration
|
|
@@ -371,63 +280,38 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
371
280
|
* @returns {ReturnType<typeof setTimeout>} timeout
|
|
372
281
|
*/
|
|
373
282
|
componentDidLoad() {
|
|
374
|
-
//
|
|
375
|
-
|
|
376
|
-
if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
|
|
377
|
-
throw new Error(`<${this.name}> slot "label" is required.`);
|
|
378
|
-
['label', 'metadata'].forEach(slot => {
|
|
379
|
-
Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
|
|
380
|
-
if (element.textContent.trim().length < 1)
|
|
381
|
-
throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
|
|
382
|
-
if (element.getAttribute('title') === null)
|
|
383
|
-
element.setAttribute('title', element.textContent);
|
|
384
|
-
});
|
|
385
|
-
});
|
|
283
|
+
// validation
|
|
284
|
+
this.validateSlot(true);
|
|
386
285
|
// update props and states after componentDidLoad hook
|
|
387
286
|
// return a promise to process action only in the FIRST render().
|
|
388
287
|
// https://stenciljs.com/docs/component-lifecycle#componentwillload
|
|
389
288
|
return setTimeout(() => {
|
|
390
|
-
var _a;
|
|
391
289
|
// define menu-item context states
|
|
392
290
|
const menu = this.element.closest('mg-menu');
|
|
393
|
-
this.direction = this.
|
|
394
|
-
this.
|
|
395
|
-
|
|
291
|
+
this.direction = this.isItemMore || menu === null ? Direction.HORIZONTAL : menu.direction;
|
|
292
|
+
this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
|
|
293
|
+
if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined)
|
|
294
|
+
this.size = menu.size;
|
|
295
|
+
if (this.isItemMore)
|
|
296
|
+
this.size = this.element.dataset.size;
|
|
396
297
|
// when main menu item contain an active item it will get the active style
|
|
397
298
|
// AND if item is in vertical menu it will be expanded
|
|
398
|
-
if (this.hasActiveChild())
|
|
399
|
-
this.
|
|
400
|
-
|
|
401
|
-
this.expanded = this.isDirection(Direction.VERTICAL);
|
|
402
|
-
}
|
|
403
|
-
// manage menu items style depending to parent menu horientation
|
|
404
|
-
this.element.setAttribute(`data-style-direction-${this.direction}`, '');
|
|
405
|
-
this.navigationButtonClassList.add(`${this.navigationButton}--${this.direction}`);
|
|
299
|
+
if (this.hasActiveChild() && this.isInMainMenu)
|
|
300
|
+
this.expanded = this.isDirection(Direction.VERTICAL);
|
|
301
|
+
this.updateStatus([Status.ACTIVE]);
|
|
406
302
|
this.updateDisplayNotificationBadge();
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
}
|
|
420
|
-
};
|
|
421
|
-
// manage child menu listener
|
|
422
|
-
item.addEventListener('status-change', () => {
|
|
423
|
-
updateStatus();
|
|
424
|
-
});
|
|
425
|
-
new MutationObserver(mutationsList => {
|
|
426
|
-
if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
|
|
427
|
-
updateStatus();
|
|
428
|
-
this.updateDisplayNotificationBadge();
|
|
429
|
-
}).observe(item, { attributes: true });
|
|
430
|
-
});
|
|
303
|
+
this.updatePopoverGuard();
|
|
304
|
+
// manage child dom changes with mutationObserver and listzners
|
|
305
|
+
this.initListeners();
|
|
306
|
+
// emit loaded event when component is fully loaded
|
|
307
|
+
this.itemLoaded.emit();
|
|
308
|
+
new MutationObserver(mutationsList => {
|
|
309
|
+
if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
|
|
310
|
+
this.updateStatus();
|
|
311
|
+
if (mutationsList.some(mutation => mutation.type === 'characterData'))
|
|
312
|
+
this.validateSlot();
|
|
313
|
+
this.updateDisplayNotificationBadge();
|
|
314
|
+
}).observe(this.element, { attributes: true, childList: true, characterData: true, subtree: true });
|
|
431
315
|
}, 0);
|
|
432
316
|
}
|
|
433
317
|
/**
|
|
@@ -451,9 +335,9 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
451
335
|
render() {
|
|
452
336
|
const getContainerClasses = () => ({
|
|
453
337
|
[`${this.name}__collapse-container`]: true,
|
|
454
|
-
[`${this.name}__collapse-container--first-level`]: this.isInMainMenu && this.isDirection(Direction.HORIZONTAL),
|
|
338
|
+
[`${this.name}__collapse-container--first-level`]: (this.isInMainMenu || this.isItemMore) && this.isDirection(Direction.HORIZONTAL),
|
|
455
339
|
});
|
|
456
|
-
return (h(Host, { role:
|
|
340
|
+
return (h(Host, { role: !this.isItemMore && 'menuitem', "aria-haspopup": !this.isItemMore && this.hasChildren.toString() }, this.displayPopover() ? (h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay, identifier: this.getPopoverIdentifier() }, this.renderInteractiveElement(), h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
|
|
457
341
|
this.renderInteractiveElement(),
|
|
458
342
|
h("div", { key: "vertical-container", class: getContainerClasses(), hidden: !this.expanded }, this.renderSlot()),
|
|
459
343
|
])));
|
|
@@ -463,10 +347,12 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
463
347
|
"status": ["validateStatus"],
|
|
464
348
|
"expanded": ["validateExpanded"],
|
|
465
349
|
"size": ["validateSize"],
|
|
350
|
+
"direction": ["validateDirection"],
|
|
466
351
|
"hasChildren": ["validateHasChildren"]
|
|
467
352
|
}; }
|
|
468
353
|
static get style() { return mgMenuItemCss; }
|
|
469
354
|
}, [1, "mg-menu-item", {
|
|
355
|
+
"identifier": [1],
|
|
470
356
|
"href": [1],
|
|
471
357
|
"status": [1537],
|
|
472
358
|
"expanded": [1028],
|
|
@@ -474,6 +360,7 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
474
360
|
"navigationButtonClassList": [32],
|
|
475
361
|
"direction": [32],
|
|
476
362
|
"isInMainMenu": [32],
|
|
363
|
+
"isItemMore": [32],
|
|
477
364
|
"hasChildren": [32],
|
|
478
365
|
"displayNotificationBadge": [32]
|
|
479
366
|
}]);
|
|
@@ -517,4 +404,4 @@ function defineCustomElement() {
|
|
|
517
404
|
}
|
|
518
405
|
defineCustomElement();
|
|
519
406
|
|
|
520
|
-
export {
|
|
407
|
+
export { MgMenuItem as M, Status as S, defineCustomElement as d };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Menu direction type
|
|
3
|
+
*/
|
|
4
|
+
var Direction;
|
|
5
|
+
(function (Direction) {
|
|
6
|
+
Direction["VERTICAL"] = "vertical";
|
|
7
|
+
Direction["HORIZONTAL"] = "horizontal";
|
|
8
|
+
})(Direction || (Direction = {}));
|
|
9
|
+
/**
|
|
10
|
+
* List of all possibles sizes
|
|
11
|
+
*/
|
|
12
|
+
const sizes = ['regular', 'medium', 'large'];
|
|
13
|
+
|
|
14
|
+
export { Direction as D, sizes as s };
|