@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,225 +1,5 @@
|
|
|
1
1
|
import { r as registerInstance, h, H as Host, g as getElement, c as createEvent } from './index-03cceb11.js';
|
|
2
|
-
|
|
3
|
-
const errors$1 = {
|
|
4
|
-
required: "This field is required.",
|
|
5
|
-
date: {
|
|
6
|
-
badInput: "The date format must be <span aria-hidden=\"true\">mm/dd/yyyy</span><span class=\"sr-only\">m m / d d / y y y y</span> and the date must be greater than {min}",
|
|
7
|
-
min: "The date cannot be earlier than {min}",
|
|
8
|
-
max: "The date cannot be later than {max}",
|
|
9
|
-
minMax: "The date must be between {min} and {max}"
|
|
10
|
-
},
|
|
11
|
-
numeric: {
|
|
12
|
-
min: "The value cannot be less than {min}",
|
|
13
|
-
max: "The value cannot be greater than {max}",
|
|
14
|
-
minMax: "The value must be between {min} et {max}"
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
const nbCharLeft$1 = "{counter} characters left.";
|
|
18
|
-
const input$1 = {
|
|
19
|
-
select: {
|
|
20
|
-
placeholder: "Select a value"
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
const form$1 = {
|
|
24
|
-
required: "Fields with a <strong class=\"is-asterisk\">*</strong> are required",
|
|
25
|
-
requiredSingle: "Field with a <strong class=\"is-asterisk\">*</strong> is required",
|
|
26
|
-
allRequired: "All fields are required",
|
|
27
|
-
allRequiredSingle: "The field is required"
|
|
28
|
-
};
|
|
29
|
-
const message$1 = {
|
|
30
|
-
closeButton: "Close message"
|
|
31
|
-
};
|
|
32
|
-
const modal$1 = {
|
|
33
|
-
closeButton: "Close modal"
|
|
34
|
-
};
|
|
35
|
-
const pagination$1 = {
|
|
36
|
-
label: "Pagination",
|
|
37
|
-
page: "page",
|
|
38
|
-
pages: "pages",
|
|
39
|
-
nextPage: "Next page",
|
|
40
|
-
previousPage: "Previous page",
|
|
41
|
-
selectPage: "Select the page to display."
|
|
42
|
-
};
|
|
43
|
-
const panel$1 = {
|
|
44
|
-
editLabel: "Edit section title."
|
|
45
|
-
};
|
|
46
|
-
const skipLinks$1 = {
|
|
47
|
-
navLabel: "Quick access"
|
|
48
|
-
};
|
|
49
|
-
const general$1 = {
|
|
50
|
-
confirm: "Confirm",
|
|
51
|
-
cancel: "Cancel",
|
|
52
|
-
close: "Close",
|
|
53
|
-
next: "next",
|
|
54
|
-
previous: "previous"
|
|
55
|
-
};
|
|
56
|
-
const plusMenu$1 = {
|
|
57
|
-
moreLabel: "Additional menu",
|
|
58
|
-
badgeLabel: "Include notification(s)"
|
|
59
|
-
};
|
|
60
|
-
const actionMore$1 = {
|
|
61
|
-
label: "Actions"
|
|
62
|
-
};
|
|
63
|
-
const en = {
|
|
64
|
-
errors: errors$1,
|
|
65
|
-
nbCharLeft: nbCharLeft$1,
|
|
66
|
-
input: input$1,
|
|
67
|
-
form: form$1,
|
|
68
|
-
message: message$1,
|
|
69
|
-
modal: modal$1,
|
|
70
|
-
pagination: pagination$1,
|
|
71
|
-
panel: panel$1,
|
|
72
|
-
skipLinks: skipLinks$1,
|
|
73
|
-
general: general$1,
|
|
74
|
-
plusMenu: plusMenu$1,
|
|
75
|
-
actionMore: actionMore$1
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const errors = {
|
|
79
|
-
required: "Ce champ est obligatoire.",
|
|
80
|
-
date: {
|
|
81
|
-
badInput: "Le format de la date doit être du type <span aria-hidden=\"true\">jj/mm/aaaa</span><span class=\"sr-only\">j j / m m / a a a a</span> et la date supérieure au {min}",
|
|
82
|
-
min: "La date ne peut pas être antérieure au {min}",
|
|
83
|
-
max: "La date ne peut pas être postérieure au {max}",
|
|
84
|
-
minMax: "La date doit être comprise entre le {min} et le {max}"
|
|
85
|
-
},
|
|
86
|
-
numeric: {
|
|
87
|
-
min: "La valeur ne peut pas être inférieure à {min}",
|
|
88
|
-
max: "La valeur ne peut pas être supérieure à {max}",
|
|
89
|
-
minMax: "La valeur doit être comprise entre {min} et {max}"
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
const nbCharLeft = "{counter} caractères disponibles.";
|
|
93
|
-
const input = {
|
|
94
|
-
select: {
|
|
95
|
-
placeholder: "Sélectionnez une valeur"
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
const form = {
|
|
99
|
-
required: "Les champs marqués d'un <strong class=\"is-asterisk\">*</strong> sont obligatoires",
|
|
100
|
-
requiredSingle: "Le champ marqué d'un <strong class=\"is-asterisk\">*</strong> est obligatoire",
|
|
101
|
-
allRequired: "Tous les champs sont obligatoires",
|
|
102
|
-
allRequiredSingle: "Le champ est obligatoire"
|
|
103
|
-
};
|
|
104
|
-
const message = {
|
|
105
|
-
closeButton: "Fermer le message"
|
|
106
|
-
};
|
|
107
|
-
const modal = {
|
|
108
|
-
closeButton: "Fermer la modale"
|
|
109
|
-
};
|
|
110
|
-
const pagination = {
|
|
111
|
-
label: "Pagination",
|
|
112
|
-
page: "page",
|
|
113
|
-
pages: "pages",
|
|
114
|
-
nextPage: "Page suivante",
|
|
115
|
-
previousPage: "Page précédente",
|
|
116
|
-
selectPage: "Sélectionner la page à afficher."
|
|
117
|
-
};
|
|
118
|
-
const panel = {
|
|
119
|
-
editLabel: "Modifier le titre de la section."
|
|
120
|
-
};
|
|
121
|
-
const skipLinks = {
|
|
122
|
-
navLabel: "Accès rapide"
|
|
123
|
-
};
|
|
124
|
-
const general = {
|
|
125
|
-
confirm: "Valider",
|
|
126
|
-
cancel: "Annuler",
|
|
127
|
-
close: "Fermer",
|
|
128
|
-
next: "suivant",
|
|
129
|
-
previous: "précédent"
|
|
130
|
-
};
|
|
131
|
-
const plusMenu = {
|
|
132
|
-
moreLabel: "Menu complémentaire",
|
|
133
|
-
badgeLabel: "Notification(s) incluse(s)"
|
|
134
|
-
};
|
|
135
|
-
const actionMore = {
|
|
136
|
-
label: "Actions"
|
|
137
|
-
};
|
|
138
|
-
const fr = {
|
|
139
|
-
errors: errors,
|
|
140
|
-
nbCharLeft: nbCharLeft,
|
|
141
|
-
input: input,
|
|
142
|
-
form: form,
|
|
143
|
-
message: message,
|
|
144
|
-
modal: modal,
|
|
145
|
-
pagination: pagination,
|
|
146
|
-
panel: panel,
|
|
147
|
-
skipLinks: skipLinks,
|
|
148
|
-
general: general,
|
|
149
|
-
plusMenu: plusMenu,
|
|
150
|
-
actionMore: actionMore
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Format number to the locale currency
|
|
155
|
-
*
|
|
156
|
-
* @param {number} number number to format
|
|
157
|
-
* @param {string} locale locale to apply
|
|
158
|
-
* @param {string} currency currency to apply
|
|
159
|
-
* @returns {string} formatted currency
|
|
160
|
-
*/
|
|
161
|
-
const localeCurrency = (number, locale, currency) => {
|
|
162
|
-
return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(number);
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* Format number to locale
|
|
166
|
-
*
|
|
167
|
-
* @param {number} number number to format
|
|
168
|
-
* @param {string} locale locale to apply
|
|
169
|
-
* @returns {string} formatted number
|
|
170
|
-
*/
|
|
171
|
-
const localeNumber = (number, locale) => {
|
|
172
|
-
return new Intl.NumberFormat(locale).format(number);
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* Date RegExp
|
|
176
|
-
*/
|
|
177
|
-
const dateRegExp = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
|
|
178
|
-
/**
|
|
179
|
-
* Locale date format
|
|
180
|
-
*
|
|
181
|
-
* @param {string} date date to format
|
|
182
|
-
* @param {string} locale locale to apply
|
|
183
|
-
* @returns {string} formatted date
|
|
184
|
-
*/
|
|
185
|
-
const localeDate = (date, locale) => {
|
|
186
|
-
if (typeof date !== 'string' || date === '' || !dateRegExp.test(date)) {
|
|
187
|
-
return '';
|
|
188
|
-
}
|
|
189
|
-
return new Intl.DateTimeFormat(locale).format(new Date(date));
|
|
190
|
-
};
|
|
191
|
-
/**
|
|
192
|
-
* Get locale and messages
|
|
193
|
-
* We load the defined locale but for now we only support the first subtag for messages
|
|
194
|
-
*
|
|
195
|
-
* @param {HTMLElement} element element we need to get the language
|
|
196
|
-
* @param {unknown} messages messages to use
|
|
197
|
-
* @param {string} defaultLocale default messages locale
|
|
198
|
-
* @returns {{ locale: string; messages: Record<string, unknown> }} messages object
|
|
199
|
-
*/
|
|
200
|
-
const getLocaleMessages = (element, messages, defaultLocale) => {
|
|
201
|
-
// Get local
|
|
202
|
-
const closestLangAttribute = element.closest('[lang]');
|
|
203
|
-
const closestLang = Intl.NumberFormat.supportedLocalesOf(closestLangAttribute === null || closestLangAttribute === void 0 ? void 0 : closestLangAttribute.lang);
|
|
204
|
-
const locale = closestLang.length > 0 ? closestLang[0] : navigator.language || defaultLocale;
|
|
205
|
-
// Only keep first subtag
|
|
206
|
-
const localeSubtag = locale.split('-').shift();
|
|
207
|
-
// Return
|
|
208
|
-
return {
|
|
209
|
-
locale,
|
|
210
|
-
messages: messages[localeSubtag] || messages[defaultLocale],
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
const defaultLocale = 'en';
|
|
215
|
-
const messages = { en, fr };
|
|
216
|
-
/**
|
|
217
|
-
* Get Intl object
|
|
218
|
-
*
|
|
219
|
-
* @param {HTMLElement} element element we need to get the language
|
|
220
|
-
* @returns {{ locale: string; messages: Record<string, unknown> }} messages object
|
|
221
|
-
*/
|
|
222
|
-
const initLocales = (element) => getLocaleMessages(element, messages, defaultLocale);
|
|
2
|
+
import { i as initLocales, D as Direction, l as localeDate, d as dateRegExp, a as localeCurrency, b as localeNumber, s as sizes$2 } from './mg-menu.conf-881fbd82.js';
|
|
223
3
|
|
|
224
4
|
/**
|
|
225
5
|
* Available menu-item positions
|
|
@@ -240,32 +20,6 @@ var Status$1;
|
|
|
240
20
|
Status["ACTIVE"] = "active";
|
|
241
21
|
})(Status$1 || (Status$1 = {}));
|
|
242
22
|
|
|
243
|
-
/**
|
|
244
|
-
* Menu direction type
|
|
245
|
-
*/
|
|
246
|
-
var Direction;
|
|
247
|
-
(function (Direction) {
|
|
248
|
-
Direction["VERTICAL"] = "vertical";
|
|
249
|
-
Direction["HORIZONTAL"] = "horizontal";
|
|
250
|
-
})(Direction || (Direction = {}));
|
|
251
|
-
/**
|
|
252
|
-
* More item type guard
|
|
253
|
-
*
|
|
254
|
-
* @param {unknown} element element to control
|
|
255
|
-
* @returns {boolean} truthy if element is more-item
|
|
256
|
-
*/
|
|
257
|
-
const isMoreItem = (element) => {
|
|
258
|
-
var _a, _b, _c;
|
|
259
|
-
const item = element;
|
|
260
|
-
return (item === undefined ||
|
|
261
|
-
(typeof item === 'object' &&
|
|
262
|
-
(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')));
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* List of all possibles sizes
|
|
266
|
-
*/
|
|
267
|
-
const sizes$2 = ['regular', 'medium', 'large'];
|
|
268
|
-
|
|
269
23
|
/**
|
|
270
24
|
* Create random ID
|
|
271
25
|
*
|
|
@@ -334,12 +88,10 @@ class ClassList {
|
|
|
334
88
|
/**
|
|
335
89
|
* Check if all items are string
|
|
336
90
|
*
|
|
337
|
-
* @param {
|
|
91
|
+
* @param {unknown} items items to check
|
|
338
92
|
* @returns {boolean} all items are string
|
|
339
93
|
*/
|
|
340
|
-
const allItemsAreString = (items) =>
|
|
341
|
-
return items && items.every(item => typeof item === 'string');
|
|
342
|
-
};
|
|
94
|
+
const allItemsAreString = (items) => Array.isArray(items) && items.every(item => typeof item === 'string');
|
|
343
95
|
/**
|
|
344
96
|
* Check if element is a heading
|
|
345
97
|
*
|
|
@@ -636,6 +388,7 @@ const mgButtonCss = ":host{display:inline-block;vertical-align:middle;max-width:
|
|
|
636
388
|
const MgButton = class {
|
|
637
389
|
constructor(hostRef) {
|
|
638
390
|
registerInstance(this, hostRef);
|
|
391
|
+
this.disabledChange = createEvent(this, "disabled-change", 7);
|
|
639
392
|
/************
|
|
640
393
|
* Internal *
|
|
641
394
|
************/
|
|
@@ -734,6 +487,8 @@ const MgButton = class {
|
|
|
734
487
|
else {
|
|
735
488
|
this.classList.delete(this.classDisabled);
|
|
736
489
|
}
|
|
490
|
+
// emit value update
|
|
491
|
+
this.disabledChange.emit(isDisabled);
|
|
737
492
|
}
|
|
738
493
|
loadingHandler(newValue) {
|
|
739
494
|
// we add loading style if it newvalue is true else we remove it
|
|
@@ -1062,7 +817,7 @@ const MgForm = class {
|
|
|
1062
817
|
// submit buttons should trigger form submition;
|
|
1063
818
|
if (['submit', null].includes(mgButton.getAttribute('type'))) {
|
|
1064
819
|
mgButton.addEventListener('click', () => {
|
|
1065
|
-
this.form.dispatchEvent(new
|
|
820
|
+
this.form.dispatchEvent(new SubmitEvent('submit', { bubbles: true }));
|
|
1066
821
|
});
|
|
1067
822
|
}
|
|
1068
823
|
});
|
|
@@ -1119,6 +874,7 @@ const icons = {
|
|
|
1119
874
|
'bell': () => (h("path", { fill: "currentColor", d: "M8 15.33a1.7 1.7 0 0 0 1.52-1.83h-3A1.7 1.7 0 0 0 8 15.33ZM13.13 11c-.46-.59-1.32-1.48-1.32-4.42a4.4 4.4 0 0 0-3.05-4.4v-.6A.85.85 0 0 0 8 .67a.85.85 0 0 0-.76.91v.6a4.4 4.4 0 0 0-3 4.44c0 2.94-.86 3.83-1.32 4.42a1 1 0 0 0-.2.63.85.85 0 0 0 .76.91h9.14a.85.85 0 0 0 .76-.91 1.05 1.05 0 0 0-.25-.67Z" })),
|
|
1120
875
|
'briefcase': () => (h("path", { fill: "currentColor", d: "M14 4.5h-3v-1c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H2c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1Zm-8-1h4v1H6v-1Z" })),
|
|
1121
876
|
'briefcase-outline': () => (h("path", { fill: "currentColor", d: "M14 4.5h-3v-1c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H2c-.55 0-1 .45-1 1v7c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-7c0-.55-.45-1-1-1Zm-8-1h4v1H6v-1Zm8 9H2v-7h12v7Z" })),
|
|
877
|
+
'building-outline': () => (h("path", { fill: "currentColor", d: "M4 2h8v12H9v-1a1 1 0 1 0-2 0v1H4V2Zm4 13h4a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h4ZM7 4H5v2h2V4Zm2 0h2v2H9V4Zm2 4H9v2h2V8ZM5 8h2v2H5V8Z" })),
|
|
1122
878
|
'calculator': () => (h("path", { fill: "currentColor", d: "M12.83.67H3.17a.5.5 0 0 0-.5.5v13.66a.5.5 0 0 0 .5.5h9.66a.5.5 0 0 0 .5-.5V1.17a.5.5 0 0 0-.5-.5ZM5.58 13.39a.29.29 0 0 1-.28.3H4.1a.29.29 0 0 1-.3-.28v-1.2a.29.29 0 0 1 .28-.3h1.2a.29.29 0 0 1 .3.28v1.2Zm0-3.28a.29.29 0 0 1-.3.3H4.1a.29.29 0 0 1-.3-.3V8.93a.29.29 0 0 1 .28-.3h1.2a.29.29 0 0 1 .3.28v1.2Zm3.29 3.28a.29.29 0 0 1-.3.3H7.38a.29.29 0 0 1-.3-.3v-1.18a.29.29 0 0 1 .3-.3h1.19a.29.29 0 0 1 .3.3Zm0-3.28a.32.32 0 0 1-.3.3H7.38a.32.32 0 0 1-.3-.3V8.93a.29.29 0 0 1 .3-.3h1.19a.29.29 0 0 1 .3.3Zm3.33 3.28a.29.29 0 0 1-.28.3h-1.25a.29.29 0 0 1-.3-.28V8.93a.29.29 0 0 1 .28-.3h1.25a.29.29 0 0 1 .3.28v4.48Zm0-7.15a.29.29 0 0 1-.3.3H4.1a.29.29 0 0 1-.3-.3V2.61a.29.29 0 0 1 .28-.3h7.82a.29.29 0 0 1 .3.28v3.65Z" })),
|
|
1123
879
|
'calendar': () => (h("path", { fill: "currentColor", d: "M14 3.5c0-.55-.45-1-1-1h-1v-1h-1v1H5v-1H4v1H3c-.55 0-1 .45-1 1v.98s0 .02.02.02H2v9c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-9h-.02s.02 0 .02-.02V3.5Zm-11 10v-8h10v8H3Z" })),
|
|
1124
880
|
'calendar-outline': () => (h("path", { fill: "currentColor", d: "M13 2.5h-1v-1h-1v1H5v-1H4v1H3c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10c0-.55-.45-1-1-1Zm-10 11v-8h10v8H3Zm0-9v-1h10v1H3Z" })),
|
|
@@ -1234,6 +990,7 @@ const icons = {
|
|
|
1234
990
|
'pen': () => (h("path", { fill: "currentColor", d: "M1.67,11.69v2.64h2.64l7.78-7.78-2.64-2.64L1.67,11.69ZM14.13,4.51c.27-.28,.27-.72,0-1h0l-1.65-1.64c-.28-.27-.72-.27-1,0h0l-1.28,1.29,2.64,2.64,1.29-1.29Z" })),
|
|
1235
991
|
'pen-circle': () => (h("path", { fill: "currentColor", d: "M8 .44C3.82.44.44 3.82.44 8S3.83 15.56 8 15.56s7.56-3.39 7.56-7.56C15.56 3.82 12.18.44 8 .44M5.47 12.19H3.62v-1.85l5.46-5.45 1.85 1.86-5.45 5.45Zm6.88-6.89-.9.9-1.86-1.85.9-.9c.19-.19.51-.19.7 0l1.16 1.15c.19.19.19.51 0 .7" })),
|
|
1236
992
|
'pen-fancy': () => (h("path", { fill: "currentColor", d: "M3.63,8.65c-.24,.07-.43,.26-.5,.5l-1.46,4.37,.11,.12,2.3-2.3c0-.06,0-.13,0-.19,0-.44,.35-.8,.79-.81,.44,0,.8,.35,.81,.79,0,.44-.35,.8-.79,.81,0,0-.01,0-.02,0h-.19l-2.3,2.3,.12,.11,4.37-1.46c.24-.07,.43-.26,.5-.5l.82-2.08-2.49-2.48-2.07,.82ZM10.8,2.35L6.27,7.28l2.42,2.42,4.94-4.52c2.1-1.86-.99-4.92-2.83-2.83Z" })),
|
|
993
|
+
'pen-fancy-files-outline': () => (h("path", { fill: "currentColor", d: "M12 2H6v10h6V8.946l.023-.058.085-.078.892-.813V12a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v.112a2.298 2.298 0 0 0-.974.66L12 2.8V2Zm1 4.643-1 .913-.566.515-1.528-1.524L12 4.275l.767-.832c.075-.085.153-.156.233-.215 1.167-.857 2.796.9 1.555 1.997L13 6.643ZM4 3H3v11.5a.5.5 0 0 0 .5.5H11v-1H4V3Zm4.238 4.41a.466.466 0 0 0-.316.315L7 10.477l.07.076 1.452-1.449v-.12a.51.51 0 0 1 .5-.51.51.51 0 0 1 .511.498.51.51 0 0 1-.499.51h-.133L7.45 10.931l.075.069 2.76-.92a.466.466 0 0 0 .317-.314l.518-1.31-1.573-1.562-1.308.516Z" })),
|
|
1237
994
|
'pen-fancy-outline': () => (h("path", { fill: "currentColor", d: "M12.24 1.67c-.49 0-1 .21-1.44.7L6.27 7.3l2.42 2.42 4.94-4.52c1.6-1.42.19-3.53-1.39-3.53ZM8.72 8.34 7.66 7.28l3.9-4.24c.22-.24.44-.36.69-.36.41 0 .87.34 1.03.78.14.37.04.7-.32 1.02L8.73 8.36ZM5.7 7.86l-2.08.82c-.24.08-.42.26-.5.5l-1.46 4.37.12.12.56.56.12.12 4.37-1.46c.24-.08.42-.26.5-.5l.81-2.08L5.7 7.87Zm-2.57 4.46L4 9.72c.03-.08.09-.15.17-.18l1.29-.51 1.52 1.52-.5 1.29c-.03.08-.1.15-.19.18l-2.6.87.95-.95c.06.02.12.04.19.04.44 0 .79-.35.79-.79s-.35-.79-.79-.79-.79.35-.79.79c0 .07.02.13.04.19l-.95.95Z" })),
|
|
1238
995
|
'phone': () => (h("path", { fill: "currentColor", d: "M13.97 10.62 11.2 9.43a.6.6 0 0 0-.69.17l-1.23 1.5A9.137 9.137 0 0 1 4.9 6.72l1.5-1.23c.21-.17.28-.45.17-.69L5.38 2.03a.589.589 0 0 0-.68-.34l-2.57.59a.59.59 0 0 0-.46.58c0 6.34 5.14 11.48 11.48 11.48.28 0 .52-.19.58-.46l.59-2.57a.595.595 0 0 0-.35-.68Z" })),
|
|
1239
996
|
'picture': () => (h("path", { fill: "currentColor", d: "M14.33 12.93V3.07a1.4 1.4 0 0 0-1.4-1.4H3.07a1.4 1.4 0 0 0-1.4 1.4v9.86a1.4 1.4 0 0 0 1.4 1.4h9.86a1.4 1.4 0 0 0 1.4-1.4ZM5.54 9.06l1.76 2.11L9.76 8l3.17 4.22H3.07Z" })),
|
|
@@ -1252,6 +1009,8 @@ const icons = {
|
|
|
1252
1009
|
h("path", { key: "tags-2", fill: "currentColor", d: "M15 7.37 10.15 3a1.12 1.12 0 0 0-.77-.29H8.26l4.5 4.09a1.76 1.76 0 0 1 0 2.65L8.77 13a1.17 1.17 0 0 0 1.55 0L15 8.79a.94.94 0 0 0 0-1.42Z" }),
|
|
1253
1010
|
],
|
|
1254
1011
|
'thumb-up': () => (h("path", { fill: "currentColor", d: "M2.11 14.36h1a.45.45 0 0 0 .45-.44V7.17a.45.45 0 0 0-.45-.44h-1a.44.44 0 0 0-.44.44v6.75a.44.44 0 0 0 .44.44Zm12.22-7a1.27 1.27 0 0 0-1.27-1.27H9.71l.61-2.91v-.2a1.07 1.07 0 0 0-.28-.68l-.68-.66-4.17 4.19a1.26 1.26 0 0 0-.37.9v6.36a1.27 1.27 0 0 0 1.27 1.27h5.06a1.24 1.24 0 0 0 1.17-.77l1.92-4.49a1.22 1.22 0 0 0 .09-.46V7.42Z" })),
|
|
1012
|
+
'thumbtack': () => (h("path", { fill: "currentColor", d: "M8.91 2 7.71 5.594 2.364 7.09 5.274 10l-.707.706-1.687 1.687-.264.264-.09.09-.209.498L2 14l.755-.317.498-.21.09-.089.264-.264 1.687-1.687.706-.706 2.91 2.908 1.496-5.347L14 7.09 8.91 2Z" })),
|
|
1013
|
+
'thumbtack-outline': () => (h("path", { fill: "currentColor", "fill-rule": "evenodd", d: "m5.273 10-2.91 2.91L2 14l1.09-.364L6 10.727l2.91 2.91 1.496-5.348L14 7.09 8.91 2 7.71 5.594 2.364 7.09 5.273 10Zm3.241-3.563-4.18 1.17 4.059 4.059 1.17-4.18 2.533-.845-2.737-2.737-.845 2.533Z" })),
|
|
1255
1014
|
'trash': () => [
|
|
1256
1015
|
h("path", { key: "trash-1", fill: "currentColor", d: "M3.27 14.17c0 .66.54 1.19 1.2 1.2h7l-.05-.02h.08c.64-.02 1.14-.56 1.12-1.2V4.32H3.27v9.85Zm5.97-7.12c0-.33.27-.6.6-.6s.6.27.6.6v5.3c0 .33-.27.6-.6.6s-.6-.27-.6-.6v-5.3Zm-3.5 0c0-.33.27-.59.6-.6.32.02.58.28.6.6v5.3c-.02.32-.28.58-.6.6a.645.645 0 0 1-.6-.6v-5.3Zm7.28-5.39h-2.6V.95a.28.28 0 0 0-.28-.28H5.87a.28.28 0 0 0-.28.28v.72H2.91a.28.28 0 0 0-.28.28V3.1c0 .15.12.28.28.28h10.11c.15 0 .28-.12.28-.28V1.94a.28.28 0 0 0-.28-.28Z" }),
|
|
1257
1016
|
h("path", { key: "trash-2", fill: "currentColor", d: "M13,2h-2.9L9.9,1.6 C9.8,1.4,9.6,1.2,9.4,1.2H6.6c-0.2,0-0.4,0.1-0.5,0.3L5.8,2H2.9C2.7,2,2.5,2.2,2.5,2.4c0,0,0,0,0,0v0.8c0,0.2,0.2,0.4,0.4,0.4H13 c0.2,0,0.4-0.2,0.4-0.4V2.4C13.4,2.2,13.2,2,13,2z" }),
|
|
@@ -1262,6 +1021,10 @@ const icons = {
|
|
|
1262
1021
|
'upload': () => (h("path", { fill: "currentColor", d: "M9.58 10.74V6.59a.31.31 0 0 1 .31-.3H12a.3.3 0 0 0 .21-.52l-4-4a.29.29 0 0 0-.42 0l-4 4a.3.3 0 0 0 .21.52h2.11a.31.31 0 0 1 .31.3v4.15a.3.3 0 0 0 .3.3h2.56a.3.3 0 0 0 .3-.3ZM14.33 14v-1a.29.29 0 0 0-.29-.3H2a.29.29 0 0 0-.29.3v1a.29.29 0 0 0 .29.29h12a.29.29 0 0 0 .33-.29Z" })),
|
|
1263
1022
|
'user': () => (h("path", { fill: "currentColor", d: "M8 8.79a3.56 3.56 0 1 0-3.56-3.56A3.56 3.56 0 0 0 8 8.79Zm3.17.79H9.8a4.27 4.27 0 0 1-3.6 0H4.83a3.16 3.16 0 0 0-3.16 3.17v.4a1.18 1.18 0 0 0 1.18 1.18h10.3a1.18 1.18 0 0 0 1.18-1.18v-.4a3.16 3.16 0 0 0-3.16-3.17Z" })),
|
|
1264
1023
|
'user-circle': () => (h("path", { fill: "currentColor", d: "M8 .62C3.95.61.66 3.9.65 7.95c0 4.05 3.28 7.34 7.33 7.35 4.04 0 7.33-3.26 7.35-7.3.02-4.05-3.25-7.36-7.3-7.38H8Zm0 .75c3.64 0 6.59 2.96 6.58 6.6V8c0 1.35-.41 2.66-1.19 3.76a2.713 2.713 0 0 0-2.66-2.37H9.54c-.98.46-2.1.46-3.08 0H5.28c-1.36 0-2.5 1.02-2.67 2.37A6.483 6.483 0 0 1 1.42 8a6.59 6.59 0 0 1 6.55-6.63H8ZM5 5.63c0-1.68 1.37-3.05 3.05-3.05 1.68 0 3.05 1.37 3.05 3.05 0 1.68-1.37 3.05-3.05 3.05H8c-1.66-.03-3-1.39-3-3.05Z" })),
|
|
1024
|
+
'user-pen-fancy-outline': () => [
|
|
1025
|
+
h("path", { fill: "currentColor", d: "M7.5 7a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5Zm0-4C6.67 3 6 3.67 6 4.5S6.67 6 7.5 6 9 5.33 9 4.5 8.33 3 7.5 3ZM11.12 11.46l-.22.54-.3.77s-.04.09-.06.13c-.03.04-.06.07-.1.1-.05.04-.1.07-.16.08L7.52 14l-.07-.07 1.45-1.45h.13c.15 0 .27-.06.36-.16a.56.56 0 0 0 .1-.15c.01-.02.02-.04.03-.07v-.02s.01-.05.01-.08v-.03c0-.28-.23-.5-.51-.5-.28.01-.5.24-.5.51v.14l-.76.75-.14.13-.55.55-.07-.07.16-.48.1-.29.24-.71.42-1.27c.05-.16.17-.28.32-.32l1.31-.52 1.57 1.57ZM14.56 8.22l-2.05 1.87-.7.64-.06.05-.32.29-1.52-1.52.28-.31.06-.06.64-.7 1.88-2.04c1.16-1.31 3.11.61 1.79 1.78Z" }),
|
|
1026
|
+
h("path", { fill: "currentColor", d: "M9 8H6c-2.21 0-4 1.79-4 4 0 .55.45 1 1 1h3.11l.33-1H3c0-1.66 1.34-3 3-3h3.05l.12-.13.71-.77C9.6 8.03 9.3 8 9 8Z" }),
|
|
1027
|
+
],
|
|
1265
1028
|
'user-group': () => (h("path", { fill: "currentColor", d: "M13.15 4.12c-.81-.01-1.47.65-1.48 1.46 0 .82.65 1.47 1.46 1.48s1.47-.65 1.48-1.46-.65-1.47-1.46-1.48Zm-10.04.01a1.47 1.47 0 0 0-1.58 1.59c.06.71.62 1.28 1.34 1.34.81.07 1.52-.53 1.59-1.34.06-.81-.54-1.52-1.35-1.59Zm7.36.39c-.22-.84-.87-1.51-1.71-1.75-1.36-.41-2.8.36-3.22 1.72-.18.61-.13 1.27.14 1.85.41.9 1.33 1.48 2.32 1.45 1.41.01 2.56-1.14 2.57-2.55 0-.24-.03-.49-.1-.72Zm-.71 4h-.19c-.99.49-2.14.49-3.13 0h-.19c-1.46 0-2.64 1.18-2.64 2.64v2.69c1.23.93 2.74 1.47 4.39 1.47s3.17-.55 4.4-1.48v-2.68c0-1.46-1.18-2.64-2.64-2.64Zm5.52.25a7.282 7.282 0 0 1-1.65 3.91c-.08.1-.16.19-.25.28-.08.09-.17.18-.25.27v-.55h.03v-.72s.01-.07 0-.1v-.66c.01-1.25-.66-2.4-1.76-3 .27-.26.63-.41 1-.41h1.51c.63.01 1.17.41 1.37.98ZM2.86 11.16v1.52h.01v.55l-.28-.31c-.08-.08-.15-.16-.22-.24A7.238 7.238 0 0 1 .74 8.86c.16-.62.72-1.07 1.4-1.07h1.47c.37-.01.73.12 1.01.37-1.1.6-1.77 1.75-1.76 3Z" })),
|
|
1266
1029
|
'user-plus': () => (h("path", { fill: "currentColor", d: "M14,3.33H12.65V2a.36.36,0,0,0-.35-.33h-.65A.36.36,0,0,0,11.3,2V3.33H10a.34.34,0,0,0-.33.34v.66a.34.34,0,0,0,.33.34H11.3V6a.37.37,0,0,0,.35.33h.65A.37.37,0,0,0,12.65,6V4.67H14a.34.34,0,0,0,.32-.34V3.67A.34.34,0,0,0,14,3.33ZM9.28,9.77h-.2a5.19,5.19,0,0,1-3.91,0H5A3,3,0,0,0,1.7,12.46h0v.72A1.27,1.27,0,0,0,3,14.33h8.25a1.26,1.26,0,0,0,1.36-1.14v-.68A3,3,0,0,0,9.37,9.76H9.28ZM7.13,3.7A2.64,2.64,0,1,1,4.5,6.34h0A2.64,2.64,0,0,1,7.13,3.7Z" })),
|
|
1267
1030
|
'user-question-outline': () => (h("path", { fill: "currentColor", d: "M5.23 11.14c.86-.66 1.01-1.9.35-2.75s-1.9-1.01-2.75-.35a1.96 1.96 0 0 0 0 3.1c-.72.42-1.16 1.2-1.16 2.03v.8c0 .2.17.37.37.37h3.98c.2 0 .37-.17.37-.37v-.8c0-.83-.44-1.61-1.16-2.03ZM2.81 9.59c0-.67.55-1.22 1.22-1.22s1.22.55 1.22 1.22-.55 1.22-1.22 1.22-1.22-.55-1.22-1.22Zm2.83 4H2.41v-.42c0-.89.72-1.62 1.62-1.62s1.62.72 1.62 1.62v.42h-.01Zm7.13-11.93H8c-.86 0-1.56.7-1.56 1.56v7.16c0 .21.17.37.37.37.08 0 .16-.03.22-.07l1.49-1.12h4.25c.86 0 1.56-.7 1.56-1.56V3.22c0-.86-.7-1.56-1.56-1.56Zm.82 6.33c0 .45-.37.82-.82.82H8.4a.41.41 0 0 0-.22.07l-1 .75V3.22c0-.45.37-.82.82-.82h4.77c.45 0 .82.37.82.82v4.77Zm-2.8-.42c0 .23-.18.41-.41.41s-.41-.18-.41-.41.18-.41.41-.41c.23 0 .41.18.41.41Zm-.41-4.34c-.83 0-1.5.67-1.5 1.5 0 .23.18.41.41.41s.41-.18.41-.41c0-.38.31-.68.69-.68.38 0 .68.31.68.69 0 .38-.31.68-.68.68-.23 0-.41.18-.41.41v.44c0 .23.18.41.41.41s.41-.18.41-.41v-.09c.8-.23 1.26-1.06 1.04-1.85-.18-.65-.77-1.09-1.44-1.09Z" })),
|
|
@@ -1542,10 +1305,11 @@ const mgInputCheckboxCss = ":host{display:block}.mg-input{display:flex;align-ite
|
|
|
1542
1305
|
/**
|
|
1543
1306
|
* type CheckboxItem validation function
|
|
1544
1307
|
*
|
|
1545
|
-
* @param {
|
|
1546
|
-
* @returns {boolean} match item
|
|
1308
|
+
* @param {unknown} items Checkbox item
|
|
1309
|
+
* @returns {boolean} match item type
|
|
1547
1310
|
*/
|
|
1548
|
-
const
|
|
1311
|
+
const isCheckboxItems = (items) => Array.isArray(items) &&
|
|
1312
|
+
items.every(item => typeof item === 'object' && typeof item.title === 'string' && (item.value === null || typeof item.value === 'boolean') && item.value !== undefined);
|
|
1549
1313
|
const MgInputCheckbox = class {
|
|
1550
1314
|
constructor(hostRef) {
|
|
1551
1315
|
registerInstance(this, hostRef);
|
|
@@ -1626,7 +1390,7 @@ const MgInputCheckbox = class {
|
|
|
1626
1390
|
this.checkboxItems = [];
|
|
1627
1391
|
}
|
|
1628
1392
|
validateValue(newValue) {
|
|
1629
|
-
if (newValue
|
|
1393
|
+
if (isCheckboxItems(newValue)) {
|
|
1630
1394
|
this.checkboxItems = newValue.map((item, index) => ({
|
|
1631
1395
|
id: `${this.identifier}_${index.toString()}`,
|
|
1632
1396
|
title: item.title,
|
|
@@ -2475,10 +2239,24 @@ const mgInputSelectCss = ":host{display:block}.mg-input{display:flex;align-items
|
|
|
2475
2239
|
/**
|
|
2476
2240
|
* Check if item is a well configured option
|
|
2477
2241
|
*
|
|
2478
|
-
* @param {
|
|
2242
|
+
* @param {unknown} option select option
|
|
2479
2243
|
* @returns {boolean} select option type is valid
|
|
2480
2244
|
*/
|
|
2481
2245
|
const isOption$1 = (option) => typeof option === 'object' && typeof option.title === 'string';
|
|
2246
|
+
/**
|
|
2247
|
+
* Check if items[] is SelectOption
|
|
2248
|
+
*
|
|
2249
|
+
* @param {unknown[]} items select option
|
|
2250
|
+
* @returns {boolean} select option array type is valid
|
|
2251
|
+
*/
|
|
2252
|
+
const allItemsAreOptions = (items) => Array.isArray(items) && items.every(item => isOption$1(item));
|
|
2253
|
+
/**
|
|
2254
|
+
* Check if item is a well configured optgroup
|
|
2255
|
+
*
|
|
2256
|
+
* @param {unknown} optgroup select option
|
|
2257
|
+
* @returns {boolean} select optgroup type is valid
|
|
2258
|
+
*/
|
|
2259
|
+
const isOptGroup = (optgroup) => typeof optgroup === 'object' && typeof optgroup.group === 'string' && allItemsAreOptions(optgroup.options);
|
|
2482
2260
|
/**
|
|
2483
2261
|
* Group options
|
|
2484
2262
|
*
|
|
@@ -2517,17 +2295,50 @@ const MgInputSelect = class {
|
|
|
2517
2295
|
this.hasDisplayedError = false;
|
|
2518
2296
|
/**
|
|
2519
2297
|
* Handle input event
|
|
2298
|
+
*
|
|
2299
|
+
* @returns {void}
|
|
2520
2300
|
*/
|
|
2521
2301
|
this.handleInput = () => {
|
|
2522
|
-
this.
|
|
2523
|
-
if (this.hasDisplayedError)
|
|
2302
|
+
this.updateValue();
|
|
2303
|
+
if (this.hasDisplayedError)
|
|
2524
2304
|
this.setErrorMessage();
|
|
2305
|
+
};
|
|
2306
|
+
/**
|
|
2307
|
+
* Method to compare item.title with input.value
|
|
2308
|
+
*
|
|
2309
|
+
* @param {SelectOption} item item to compare with
|
|
2310
|
+
* @returns {boolean} truthy if input.value is an item
|
|
2311
|
+
*/
|
|
2312
|
+
this.isInputValue = (item) => { var _a; return item.title === ((_a = this.input) === null || _a === void 0 ? void 0 : _a.value); };
|
|
2313
|
+
/**
|
|
2314
|
+
* value props setter
|
|
2315
|
+
*
|
|
2316
|
+
* @param {MgInputSelect['value']} newValue value to update with
|
|
2317
|
+
* @returns {void}
|
|
2318
|
+
*/
|
|
2319
|
+
this.setValue = (newValue) => {
|
|
2320
|
+
this.checkValidity();
|
|
2321
|
+
this.value = newValue;
|
|
2322
|
+
};
|
|
2323
|
+
/**
|
|
2324
|
+
* Update value from input.value
|
|
2325
|
+
*
|
|
2326
|
+
* @returns {void}
|
|
2327
|
+
*/
|
|
2328
|
+
this.updateValue = () => {
|
|
2329
|
+
if (this.input.value === '') {
|
|
2330
|
+
this.setValue(null);
|
|
2525
2331
|
}
|
|
2526
|
-
if (this.input.value
|
|
2527
|
-
this.
|
|
2332
|
+
else if (allItemsAreString(this.items) && this.items.includes(this.input.value)) {
|
|
2333
|
+
this.setValue(this.input.value);
|
|
2334
|
+
}
|
|
2335
|
+
else if (allItemsAreOptions(this.items) && typeof this.input.value === 'string' && this.items.some(this.isInputValue)) {
|
|
2336
|
+
this.setValue(this.items.find(this.isInputValue).value);
|
|
2528
2337
|
}
|
|
2529
2338
|
else {
|
|
2530
|
-
|
|
2339
|
+
// before set newValue with push to options[] the unknown input.value with a disable satus
|
|
2340
|
+
this.options.push({ title: this.input.value, value: this.input.value, disabled: true });
|
|
2341
|
+
this.setValue(this.input.value);
|
|
2531
2342
|
}
|
|
2532
2343
|
};
|
|
2533
2344
|
/**
|
|
@@ -2536,12 +2347,18 @@ const MgInputSelect = class {
|
|
|
2536
2347
|
this.handleBlur = () => {
|
|
2537
2348
|
this.displayError();
|
|
2538
2349
|
};
|
|
2350
|
+
/**
|
|
2351
|
+
* Input value is disabled
|
|
2352
|
+
*
|
|
2353
|
+
* @returns {boolean} truthy if input value is disabled
|
|
2354
|
+
*/
|
|
2355
|
+
this.isDisabledValue = () => { var _a; return allItemsAreOptions(this.options) && ((_a = this.options.find(this.isInputValue)) === null || _a === void 0 ? void 0 : _a.disabled) === true; };
|
|
2539
2356
|
/**
|
|
2540
2357
|
* Check if input is valid
|
|
2541
2358
|
*/
|
|
2542
2359
|
this.checkValidity = () => {
|
|
2543
2360
|
var _a;
|
|
2544
|
-
this.valid = this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true);
|
|
2361
|
+
this.valid = !this.isDisabledValue() && (this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true));
|
|
2545
2362
|
this.invalid = !this.valid;
|
|
2546
2363
|
// We need to send valid event even if it is the same value
|
|
2547
2364
|
this.inputValid.emit(this.valid);
|
|
@@ -2556,6 +2373,13 @@ const MgInputSelect = class {
|
|
|
2556
2373
|
this.errorMessage = this.messages.errors.required;
|
|
2557
2374
|
}
|
|
2558
2375
|
};
|
|
2376
|
+
/**
|
|
2377
|
+
* Render option
|
|
2378
|
+
*
|
|
2379
|
+
* @param {SelectOption} option to render
|
|
2380
|
+
* @returns {HTMLElement} render option
|
|
2381
|
+
*/
|
|
2382
|
+
this.renderOption = (option) => (h("option", { key: option.title, value: option.title, selected: JSON.stringify(this.value) === JSON.stringify(option.value), disabled: option.disabled }, option.title));
|
|
2559
2383
|
this.value = undefined;
|
|
2560
2384
|
this.items = undefined;
|
|
2561
2385
|
this.identifier = undefined;
|
|
@@ -2580,9 +2404,13 @@ const MgInputSelect = class {
|
|
|
2580
2404
|
this.valueExist = undefined;
|
|
2581
2405
|
this.readonlyValue = undefined;
|
|
2582
2406
|
}
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2407
|
+
validateValue(newValue) {
|
|
2408
|
+
var _a, _b;
|
|
2409
|
+
if (allItemsAreString(this.items) && typeof newValue === 'string') {
|
|
2410
|
+
this.readonlyValue = Boolean((_a = this.input) === null || _a === void 0 ? void 0 : _a.value) ? this.input.value : newValue;
|
|
2411
|
+
}
|
|
2412
|
+
else if (allItemsAreOptions(this.items)) {
|
|
2413
|
+
this.readonlyValue = (_b = this.items.find(item => item.value === newValue)) === null || _b === void 0 ? void 0 : _b.title;
|
|
2586
2414
|
}
|
|
2587
2415
|
else {
|
|
2588
2416
|
this.readonlyValue = null;
|
|
@@ -2596,14 +2424,15 @@ const MgInputSelect = class {
|
|
|
2596
2424
|
}
|
|
2597
2425
|
// String array
|
|
2598
2426
|
else if (allItemsAreString(newValue)) {
|
|
2599
|
-
|
|
2600
|
-
|
|
2427
|
+
if (typeof this.value === 'string')
|
|
2428
|
+
this.valueExist = newValue.includes(this.value);
|
|
2429
|
+
this.options = newValue.map(item => ({ title: item, value: item }));
|
|
2601
2430
|
}
|
|
2602
2431
|
// Object array
|
|
2603
|
-
else if (newValue
|
|
2432
|
+
else if (allItemsAreOptions(newValue)) {
|
|
2604
2433
|
this.valueExist = newValue.map(item => item.value).includes(this.value);
|
|
2605
2434
|
// Grouped object options
|
|
2606
|
-
if (newValue.some(item => item.group
|
|
2435
|
+
if (newValue.some(item => Boolean(item.group))) {
|
|
2607
2436
|
this.options = newValue.reduce(groupOptions, []);
|
|
2608
2437
|
}
|
|
2609
2438
|
// Standart object options
|
|
@@ -2648,6 +2477,7 @@ const MgInputSelect = class {
|
|
|
2648
2477
|
this.messages = initLocales(this.element).messages;
|
|
2649
2478
|
// Validate
|
|
2650
2479
|
this.validateItems(this.items);
|
|
2480
|
+
this.validateValue(this.value);
|
|
2651
2481
|
// Set default placeholder
|
|
2652
2482
|
if (this.placeholder === undefined || this.placeholder === '') {
|
|
2653
2483
|
this.placeholder = this.messages.input.select.placeholder;
|
|
@@ -2665,15 +2495,15 @@ const MgInputSelect = class {
|
|
|
2665
2495
|
* @returns {HTMLElement} HTML Element
|
|
2666
2496
|
*/
|
|
2667
2497
|
render() {
|
|
2668
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value:
|
|
2498
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: undefined, readonlyValue: this.readonlyValue, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("select", { class: "mg-input__box", id: this.identifier, name: this.name, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
|
|
2669
2499
|
if (el !== null)
|
|
2670
2500
|
this.input = el;
|
|
2671
2501
|
} }, (!this.placeholderHide || !this.valueExist) && ( // In case passed value does not match any option we display the placeholder
|
|
2672
|
-
h("option", { value: "", disabled: this.placeholderDisabled && this.valueExist }, this.placeholder)), this.options.map(option => option
|
|
2502
|
+
h("option", { value: "", disabled: this.placeholderDisabled && this.valueExist }, this.placeholder)), this.options.map(option => isOptGroup(option) ? h("optgroup", { label: option.group }, option.options.map(this.renderOption)) : isOption$1(option) && this.renderOption(option)))));
|
|
2673
2503
|
}
|
|
2674
2504
|
get element() { return getElement(this); }
|
|
2675
2505
|
static get watchers() { return {
|
|
2676
|
-
"value": ["
|
|
2506
|
+
"value": ["validateValue"],
|
|
2677
2507
|
"items": ["validateItems"],
|
|
2678
2508
|
"required": ["handleValidityChange"],
|
|
2679
2509
|
"readonly": ["handleValidityChange"],
|
|
@@ -3319,158 +3149,6 @@ const MgInputToggle = class {
|
|
|
3319
3149
|
};
|
|
3320
3150
|
MgInputToggle.style = mgInputToggleCss;
|
|
3321
3151
|
|
|
3322
|
-
/**
|
|
3323
|
-
* MgMenuItem type guard
|
|
3324
|
-
*
|
|
3325
|
-
* @param {HTMLElement} element element to control type
|
|
3326
|
-
* @returns {boolean} truthy if element is mg-menu-item
|
|
3327
|
-
*/
|
|
3328
|
-
const isMgMenuItem = (element) => element.nodeName === 'MG-MENU-ITEM';
|
|
3329
|
-
var OverflowBehaviorElements;
|
|
3330
|
-
(function (OverflowBehaviorElements) {
|
|
3331
|
-
OverflowBehaviorElements["MORE"] = "data-overflow-more";
|
|
3332
|
-
OverflowBehaviorElements["BASE_INDEX"] = "data-overflow-base-index";
|
|
3333
|
-
OverflowBehaviorElements["PROXY_INDEX"] = "data-overflow-proxy-index";
|
|
3334
|
-
})(OverflowBehaviorElements || (OverflowBehaviorElements = {}));
|
|
3335
|
-
class OverflowBehavior {
|
|
3336
|
-
constructor(element, render) {
|
|
3337
|
-
this.element = element;
|
|
3338
|
-
this.render = render;
|
|
3339
|
-
/**********
|
|
3340
|
-
* Public *
|
|
3341
|
-
**********/
|
|
3342
|
-
/**
|
|
3343
|
-
* Disconnect ResizeObserver
|
|
3344
|
-
*
|
|
3345
|
-
* @returns {void}
|
|
3346
|
-
*/
|
|
3347
|
-
this.disconnect = () => {
|
|
3348
|
-
this.resizeObserver.disconnect();
|
|
3349
|
-
};
|
|
3350
|
-
/************
|
|
3351
|
-
* Internal *
|
|
3352
|
-
************/
|
|
3353
|
-
/**
|
|
3354
|
-
* run overflow behavior
|
|
3355
|
-
*
|
|
3356
|
-
* @param {number} width width of the container
|
|
3357
|
-
* @returns {void}
|
|
3358
|
-
*/
|
|
3359
|
-
this.run = (width) => {
|
|
3360
|
-
if (this.moreElement === undefined) {
|
|
3361
|
-
// set moreElement
|
|
3362
|
-
this.moreElement = this.render();
|
|
3363
|
-
this.moreElement.setAttribute(OverflowBehaviorElements.MORE, '');
|
|
3364
|
-
// set children
|
|
3365
|
-
this.children = Array.from(this.element.children);
|
|
3366
|
-
let moreElementChildren;
|
|
3367
|
-
const allowedElements = ['MG-MENU-ITEM', 'MG-BUTTON'];
|
|
3368
|
-
if (isMgMenuItem(this.moreElement)) {
|
|
3369
|
-
moreElementChildren = Array.from(this.moreElement.querySelector('mg-menu').children).filter(element => allowedElements.includes(element.nodeName));
|
|
3370
|
-
}
|
|
3371
|
-
this.children.forEach((child, index) => {
|
|
3372
|
-
child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);
|
|
3373
|
-
if (child.getAttribute(OverflowBehaviorElements.MORE) === null) {
|
|
3374
|
-
// set moreElement children
|
|
3375
|
-
moreElementChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);
|
|
3376
|
-
}
|
|
3377
|
-
});
|
|
3378
|
-
}
|
|
3379
|
-
this.updateDisplayedItems(width);
|
|
3380
|
-
};
|
|
3381
|
-
/**
|
|
3382
|
-
* Update displayed items in container from a given available space
|
|
3383
|
-
*
|
|
3384
|
-
* @param {number} availableWidth available width in container to display child items
|
|
3385
|
-
* @returns {void}
|
|
3386
|
-
*/
|
|
3387
|
-
this.updateDisplayedItems = (availableWidth) => {
|
|
3388
|
-
this.restoreItems();
|
|
3389
|
-
const acc = { accWidth: 0, previousItem: null };
|
|
3390
|
-
this.children.forEach((child) => {
|
|
3391
|
-
acc.accWidth += child.offsetWidth;
|
|
3392
|
-
const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
|
|
3393
|
-
// if previous item is hidden AND is NOT more element we hidde current
|
|
3394
|
-
// OR if item has an overflow we hidde current
|
|
3395
|
-
// OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
|
|
3396
|
-
// ELSE current is a display item
|
|
3397
|
-
this.toggleItem(child, (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden));
|
|
3398
|
-
// update previous item with current item
|
|
3399
|
-
acc.previousItem = child;
|
|
3400
|
-
});
|
|
3401
|
-
};
|
|
3402
|
-
/**
|
|
3403
|
-
* Utility method to know if item overflow partialy or totaly in the container
|
|
3404
|
-
*
|
|
3405
|
-
* @param {number} cumulateWidth previous sibling elements cumulate width + item width
|
|
3406
|
-
* @param {HTMLElement} item item HTML element
|
|
3407
|
-
* @param {number} availableWidth container available width
|
|
3408
|
-
* @returns {boolean} truthy if element is overflow
|
|
3409
|
-
*/
|
|
3410
|
-
this.isOverflowElement = (cumulateWidth, item, availableWidth) => {
|
|
3411
|
-
if (item.previousElementSibling === null || this.isMoreElement(item))
|
|
3412
|
-
return false;
|
|
3413
|
-
else if (!this.isMoreElement(item.nextElementSibling))
|
|
3414
|
-
return cumulateWidth + this.moreElement.offsetWidth > availableWidth;
|
|
3415
|
-
else
|
|
3416
|
-
return cumulateWidth > availableWidth;
|
|
3417
|
-
};
|
|
3418
|
-
/**
|
|
3419
|
-
* Utility method to know if a given element is the 'MORE' element
|
|
3420
|
-
*
|
|
3421
|
-
* @param {Element} element element to match with 'MORE' element
|
|
3422
|
-
* @returns {boolean} truthy if element is the 'MORE' element
|
|
3423
|
-
*/
|
|
3424
|
-
this.isMoreElement = (element) => element.getAttribute(OverflowBehaviorElements.MORE) !== null;
|
|
3425
|
-
/**
|
|
3426
|
-
* Toggle display item element
|
|
3427
|
-
*
|
|
3428
|
-
* @param {HTMLElement} item item to control
|
|
3429
|
-
* @param {boolean} isHidden is item hidden
|
|
3430
|
-
* @returns {void}
|
|
3431
|
-
*/
|
|
3432
|
-
this.toggleItem = (item, isHidden) => {
|
|
3433
|
-
const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));
|
|
3434
|
-
if (this.isMoreElement(item))
|
|
3435
|
-
this.toggleElement(this.moreElement, isHidden);
|
|
3436
|
-
else if (mgActionMenuindex >= 0) {
|
|
3437
|
-
this.toggleElement(item, isHidden);
|
|
3438
|
-
this.toggleElement(this.moreElement.querySelector(`[${OverflowBehaviorElements.PROXY_INDEX}="${mgActionMenuindex}"]`), !isHidden);
|
|
3439
|
-
}
|
|
3440
|
-
};
|
|
3441
|
-
/**
|
|
3442
|
-
* Toggle element's hidde attribute
|
|
3443
|
-
*
|
|
3444
|
-
* @param {Element} element element to toggle
|
|
3445
|
-
* @param {boolean} isHidden element is hidden
|
|
3446
|
-
* @returns {void}
|
|
3447
|
-
*/
|
|
3448
|
-
this.toggleElement = (element, isHidden) => {
|
|
3449
|
-
if (isHidden)
|
|
3450
|
-
element.setAttribute('hidden', '');
|
|
3451
|
-
else
|
|
3452
|
-
element.removeAttribute('hidden');
|
|
3453
|
-
};
|
|
3454
|
-
/**
|
|
3455
|
-
* Remove hidden attributes on all items
|
|
3456
|
-
*
|
|
3457
|
-
* @returns {void}
|
|
3458
|
-
*/
|
|
3459
|
-
this.restoreItems = () => {
|
|
3460
|
-
this.children.forEach(item => item.removeAttribute('hidden'));
|
|
3461
|
-
};
|
|
3462
|
-
if (this.resizeObserver === undefined) {
|
|
3463
|
-
// add resize observer
|
|
3464
|
-
this.resizeObserver = new ResizeObserver(entries => {
|
|
3465
|
-
entries.forEach(entry => {
|
|
3466
|
-
this.run(entry.contentRect.width);
|
|
3467
|
-
});
|
|
3468
|
-
});
|
|
3469
|
-
this.resizeObserver.observe(this.element);
|
|
3470
|
-
}
|
|
3471
|
-
}
|
|
3472
|
-
}
|
|
3473
|
-
|
|
3474
3152
|
const mgMenuCss = ".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}}:host{display:flex;background-color:hsl(var(--mg-menu-background-color-hsl, var(--color-light)))}:host([direction=vertical]){flex-direction:column;height:100%;overflow-y:auto}";
|
|
3475
3153
|
|
|
3476
3154
|
const MgMenu = class {
|
|
@@ -3482,6 +3160,9 @@ const MgMenu = class {
|
|
|
3482
3160
|
this.name = 'mg-menu';
|
|
3483
3161
|
this.menuItems = [];
|
|
3484
3162
|
this.focusedMenuItem = 0;
|
|
3163
|
+
/*************
|
|
3164
|
+
* Methods *
|
|
3165
|
+
*************/
|
|
3485
3166
|
/**
|
|
3486
3167
|
* Close matching menu-item
|
|
3487
3168
|
*
|
|
@@ -3494,68 +3175,74 @@ const MgMenu = class {
|
|
|
3494
3175
|
item.expanded = false;
|
|
3495
3176
|
}
|
|
3496
3177
|
};
|
|
3497
|
-
/*************
|
|
3498
|
-
* Methods *
|
|
3499
|
-
*************/
|
|
3500
3178
|
/**
|
|
3501
|
-
*
|
|
3179
|
+
* get mg-item-more element
|
|
3180
|
+
*
|
|
3181
|
+
* @returns {HTMLMgItemMoreElement} mg-item-more element
|
|
3182
|
+
*/
|
|
3183
|
+
this.getItemMore = () => this.element.querySelector('mg-item-more');
|
|
3184
|
+
/**
|
|
3185
|
+
* get mg-item-more >>> mg-menu-item element
|
|
3186
|
+
*
|
|
3187
|
+
* @returns {HTMLMgMenuItemElement} mg-item-more >>> mg-menu-item element
|
|
3188
|
+
*/
|
|
3189
|
+
this.getItemMoreMenuItem = () => { var _a, _b; return (_b = (_a = this.getItemMore()) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('mg-menu-item'); };
|
|
3190
|
+
/**
|
|
3191
|
+
* Set item listend
|
|
3502
3192
|
*
|
|
3193
|
+
* @param {HTMLMgMenuItemElement} item mg-menu-item element
|
|
3194
|
+
* @param {MgMenu['focusedMenuItem']} index number
|
|
3503
3195
|
* @returns {void}
|
|
3504
3196
|
*/
|
|
3505
|
-
this.
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
this.menuItems.forEach((item, index) => {
|
|
3513
|
-
this.closeMenuItem(item, index !== this.focusedMenuItem);
|
|
3514
|
-
});
|
|
3197
|
+
this.setItemListener = (item, index) => {
|
|
3198
|
+
['click', 'focus'].forEach(trigger => {
|
|
3199
|
+
(item.shadowRoot.querySelector('button') || item.shadowRoot.querySelector('a')).addEventListener(trigger, () => {
|
|
3200
|
+
this.focusedMenuItem = index;
|
|
3201
|
+
// reset expanded on previous active menu item
|
|
3202
|
+
(Boolean(this.getItemMoreMenuItem()) ? [...this.menuItems, this.getItemMoreMenuItem()] : this.menuItems).forEach((item, index) => {
|
|
3203
|
+
this.closeMenuItem(item, index !== this.focusedMenuItem);
|
|
3515
3204
|
});
|
|
3516
3205
|
});
|
|
3517
3206
|
});
|
|
3518
3207
|
};
|
|
3519
3208
|
/**
|
|
3520
|
-
*
|
|
3209
|
+
* Store menu-items on component init and add listeners
|
|
3521
3210
|
*
|
|
3522
|
-
* @returns {
|
|
3211
|
+
* @returns {void}
|
|
3523
3212
|
*/
|
|
3524
|
-
this.
|
|
3525
|
-
|
|
3526
|
-
this.menuItems.forEach((
|
|
3527
|
-
|
|
3528
|
-
moreElement.querySelector('mg-menu').appendChild(proxy);
|
|
3529
|
-
});
|
|
3530
|
-
const allMenuItem = Array.from(this.element.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
|
|
3531
|
-
Array.from(moreElement.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
|
|
3532
|
-
// manage click on proxy to mirror it on initial element
|
|
3533
|
-
proxy.addEventListener('click', () => {
|
|
3534
|
-
(allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
3535
|
-
});
|
|
3536
|
-
// manage status change miror in proxy
|
|
3537
|
-
allMenuItem[index].addEventListener('status-change', (event) => {
|
|
3538
|
-
proxy.setAttribute('status', event.detail);
|
|
3539
|
-
});
|
|
3213
|
+
this.initMenuItemsListeners = () => {
|
|
3214
|
+
// add listeners on menu item and edit index
|
|
3215
|
+
this.menuItems.forEach((item, index) => {
|
|
3216
|
+
this.setItemListener(item, index);
|
|
3540
3217
|
});
|
|
3541
|
-
this.element.appendChild(moreElement);
|
|
3542
|
-
return this.element.querySelector(`[${OverflowBehaviorElements.MORE}]`);
|
|
3543
3218
|
};
|
|
3544
3219
|
/**
|
|
3545
|
-
*
|
|
3220
|
+
* Handle item-loaded event on mg-item-more element
|
|
3221
|
+
*
|
|
3222
|
+
* @returns {void}
|
|
3223
|
+
*/
|
|
3224
|
+
this.handleItemLoaded = () => {
|
|
3225
|
+
this.setItemListener(this.getItemMoreMenuItem(), this.menuItems.length);
|
|
3226
|
+
};
|
|
3227
|
+
/**
|
|
3228
|
+
* render mg-item-more
|
|
3546
3229
|
*
|
|
3547
|
-
* @returns {
|
|
3230
|
+
* @returns {void}
|
|
3548
3231
|
*/
|
|
3549
|
-
this.
|
|
3550
|
-
|
|
3551
|
-
|
|
3232
|
+
this.renderMgItemMore = () => {
|
|
3233
|
+
// /!\ externalise item tag name to get a string type and bypass type checking when value is used in next createElement
|
|
3234
|
+
// by doing this we prevent stencil to generate a circular dependencies graph at build time with mg-item-more component.
|
|
3235
|
+
const item = 'mg-item-more';
|
|
3236
|
+
const mgItemMore = document.createElement(item);
|
|
3237
|
+
Object.assign(mgItemMore, this.itemmore);
|
|
3238
|
+
mgItemMore.addEventListener('item-loaded', this.handleItemLoaded);
|
|
3239
|
+
this.element.appendChild(mgItemMore);
|
|
3552
3240
|
};
|
|
3553
3241
|
this.label = undefined;
|
|
3554
3242
|
this.direction = Direction.HORIZONTAL;
|
|
3555
|
-
this.
|
|
3243
|
+
this.itemmore = undefined;
|
|
3556
3244
|
this.size = 'regular';
|
|
3557
3245
|
this.isChildMenu = undefined;
|
|
3558
|
-
this.hasOverflow = false;
|
|
3559
3246
|
}
|
|
3560
3247
|
validateLabel(newValue) {
|
|
3561
3248
|
if (newValue === undefined) {
|
|
@@ -3567,12 +3254,9 @@ const MgMenu = class {
|
|
|
3567
3254
|
throw new Error(`<${this.name}> prop "direction" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
|
|
3568
3255
|
}
|
|
3569
3256
|
}
|
|
3570
|
-
|
|
3257
|
+
validateItemMore(newValue) {
|
|
3571
3258
|
if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
|
|
3572
|
-
throw new Error(`<${this.name}> prop "
|
|
3573
|
-
}
|
|
3574
|
-
else if (newValue !== undefined && !isMoreItem(newValue)) {
|
|
3575
|
-
throw new Error(`<${this.name}> prop "moreitem" must match MoreItemType.`);
|
|
3259
|
+
throw new Error(`<${this.name}> prop "itemmore" must be paired with direction ${Direction.HORIZONTAL}.`);
|
|
3576
3260
|
}
|
|
3577
3261
|
}
|
|
3578
3262
|
validateSize(newValue) {
|
|
@@ -3589,11 +3273,9 @@ const MgMenu = class {
|
|
|
3589
3273
|
* @returns {void}
|
|
3590
3274
|
*/
|
|
3591
3275
|
componentWillLoad() {
|
|
3592
|
-
this.messages = initLocales(this.element).messages.plusMenu;
|
|
3593
|
-
// validation
|
|
3594
3276
|
this.validateDirection(this.direction);
|
|
3595
3277
|
this.validateLabel(this.label);
|
|
3596
|
-
this.
|
|
3278
|
+
this.validateItemMore(this.itemmore);
|
|
3597
3279
|
this.validateSize(this.size);
|
|
3598
3280
|
}
|
|
3599
3281
|
/**
|
|
@@ -3609,53 +3291,57 @@ const MgMenu = class {
|
|
|
3609
3291
|
// store all menu-items
|
|
3610
3292
|
this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
|
|
3611
3293
|
this.isChildMenu = this.element.closest('mg-menu-item') !== null;
|
|
3612
|
-
|
|
3613
|
-
if (this.
|
|
3614
|
-
this.
|
|
3294
|
+
// add mg-item-more to manage OverflowBehavior
|
|
3295
|
+
if (this.direction === Direction.HORIZONTAL && !this.isChildMenu)
|
|
3296
|
+
this.renderMgItemMore();
|
|
3297
|
+
// use mutation observer to improve reactivity
|
|
3298
|
+
new MutationObserver(entries => {
|
|
3299
|
+
const mgItemMore = this.getItemMore();
|
|
3300
|
+
// prevent infinit loop by exclude mg-item-more deletion entry
|
|
3301
|
+
if (entries.some(entry => entry.type === 'childList' && Array.from(entry.removedNodes).some(node => node.nodeName === 'MG-ITEM-MORE')))
|
|
3302
|
+
return;
|
|
3303
|
+
else if (mgItemMore !== null) {
|
|
3304
|
+
// render a new mg-item-more
|
|
3305
|
+
mgItemMore.remove();
|
|
3306
|
+
mgItemMore.removeEventListener('item-loaded', this.handleItemLoaded);
|
|
3307
|
+
this.renderMgItemMore();
|
|
3308
|
+
}
|
|
3309
|
+
}).observe(this.element, { childList: true, characterData: true, subtree: true });
|
|
3615
3310
|
}, 0);
|
|
3616
3311
|
}
|
|
3617
3312
|
/**
|
|
3618
|
-
*
|
|
3313
|
+
* Add listeners to items
|
|
3619
3314
|
*
|
|
3620
3315
|
* @returns {void}
|
|
3621
3316
|
*/
|
|
3622
3317
|
componentDidRender() {
|
|
3623
|
-
// add menu items listeners
|
|
3624
3318
|
this.initMenuItemsListeners();
|
|
3625
3319
|
}
|
|
3626
|
-
/**
|
|
3627
|
-
* Disconnect overflow ResizeObserver
|
|
3628
|
-
*
|
|
3629
|
-
* @returns {void} run overflow resize obeserver disconnexion
|
|
3630
|
-
*/
|
|
3631
|
-
disconnectedCallback() {
|
|
3632
|
-
if (this.hasOverflow)
|
|
3633
|
-
this.overflowBehavior.disconnect();
|
|
3634
|
-
}
|
|
3635
3320
|
/**
|
|
3636
3321
|
* Render
|
|
3637
3322
|
*
|
|
3638
3323
|
* @returns {HTMLElement} HTML Element
|
|
3639
3324
|
*/
|
|
3640
3325
|
render() {
|
|
3641
|
-
return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null)
|
|
3326
|
+
return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null)));
|
|
3642
3327
|
}
|
|
3643
3328
|
get element() { return getElement(this); }
|
|
3644
3329
|
static get watchers() { return {
|
|
3645
3330
|
"label": ["validateLabel"],
|
|
3646
3331
|
"direction": ["validateDirection"],
|
|
3647
|
-
"
|
|
3332
|
+
"itemmore": ["validateItemMore"],
|
|
3648
3333
|
"size": ["validateSize"]
|
|
3649
3334
|
}; }
|
|
3650
3335
|
};
|
|
3651
3336
|
MgMenu.style = mgMenuCss;
|
|
3652
3337
|
|
|
3653
|
-
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}";
|
|
3338
|
+
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}";
|
|
3654
3339
|
|
|
3655
3340
|
const MgMenuItem = class {
|
|
3656
3341
|
constructor(hostRef) {
|
|
3657
3342
|
registerInstance(this, hostRef);
|
|
3658
3343
|
this.statusChange = createEvent(this, "status-change", 7);
|
|
3344
|
+
this.itemLoaded = createEvent(this, "item-loaded", 7);
|
|
3659
3345
|
/************
|
|
3660
3346
|
* Internal *
|
|
3661
3347
|
************/
|
|
@@ -3684,9 +3370,91 @@ const MgMenuItem = class {
|
|
|
3684
3370
|
* Is component contextual direction match the given direction
|
|
3685
3371
|
*
|
|
3686
3372
|
* @param {MgMenuItem['direction']} direction in parent menu
|
|
3373
|
+
* @param {MgMenuItem['direction']} compareWith direction to compare with. Default: `this.direction`
|
|
3687
3374
|
* @returns {boolean} true is direction match the direction propertie
|
|
3688
3375
|
*/
|
|
3689
|
-
this.isDirection = (direction
|
|
3376
|
+
this.isDirection = (direction, compareWith = this.direction) => direction === compareWith;
|
|
3377
|
+
/**
|
|
3378
|
+
* Update displayNotificationBadge
|
|
3379
|
+
* current component notification badge have priority over the slot badge when submenu contain badge
|
|
3380
|
+
*
|
|
3381
|
+
* @returns {void} update displayNotificationBadge value
|
|
3382
|
+
*/
|
|
3383
|
+
this.updateDisplayNotificationBadge = () => {
|
|
3384
|
+
const childMenu = this.element.querySelector('mg-menu');
|
|
3385
|
+
this.displayNotificationBadge =
|
|
3386
|
+
childMenu !== null &&
|
|
3387
|
+
Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
|
|
3388
|
+
};
|
|
3389
|
+
/**
|
|
3390
|
+
* Method to control if one of component children have active status
|
|
3391
|
+
*
|
|
3392
|
+
* @returns {boolean} truthy if component has active child
|
|
3393
|
+
*/
|
|
3394
|
+
this.hasActiveChild = () => {
|
|
3395
|
+
var _a;
|
|
3396
|
+
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$1.ACTIVE) && element.getAttribute('hidden') === null);
|
|
3397
|
+
};
|
|
3398
|
+
/**
|
|
3399
|
+
* Validate slots
|
|
3400
|
+
*
|
|
3401
|
+
* @param {boolean} guard prevent action whith guard. Default: false.
|
|
3402
|
+
* @returns {void}
|
|
3403
|
+
*/
|
|
3404
|
+
this.validateSlot = (guard = false) => {
|
|
3405
|
+
// slot title AND metadata validation
|
|
3406
|
+
// add title on label AND metada slots due to text-overflow on these element
|
|
3407
|
+
if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
|
|
3408
|
+
throw new Error(`<${this.name}> slot "label" is required.`);
|
|
3409
|
+
['label', 'metadata'].forEach(slot => {
|
|
3410
|
+
Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
|
|
3411
|
+
if (element.textContent.trim().length < 1)
|
|
3412
|
+
throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
|
|
3413
|
+
if ((guard && element.getAttribute('title') === null) || !guard)
|
|
3414
|
+
element.setAttribute('title', element.textContent);
|
|
3415
|
+
});
|
|
3416
|
+
});
|
|
3417
|
+
};
|
|
3418
|
+
/**
|
|
3419
|
+
* Update status
|
|
3420
|
+
*
|
|
3421
|
+
* @param {Status[]} guard status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
|
|
3422
|
+
* @returns {void}
|
|
3423
|
+
*/
|
|
3424
|
+
this.updateStatus = (guard = []) => {
|
|
3425
|
+
if (![Status$1.HIDDEN, Status$1.DISABLED, ...guard].includes(this.status)) {
|
|
3426
|
+
this.status = this.hasActiveChild() ? Status$1.ACTIVE : Status$1.VISIBLE;
|
|
3427
|
+
}
|
|
3428
|
+
};
|
|
3429
|
+
/**
|
|
3430
|
+
* Init event-listeners
|
|
3431
|
+
*
|
|
3432
|
+
* @returns {void}
|
|
3433
|
+
*/
|
|
3434
|
+
this.initListeners = () => {
|
|
3435
|
+
var _a;
|
|
3436
|
+
// manage first sub-level menu-items
|
|
3437
|
+
Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).forEach(item => {
|
|
3438
|
+
if (item.nodeName === 'MG-MENU-ITEM') {
|
|
3439
|
+
// manage child menu listener
|
|
3440
|
+
item.addEventListener('status-change', () => {
|
|
3441
|
+
this.updateStatus();
|
|
3442
|
+
});
|
|
3443
|
+
}
|
|
3444
|
+
});
|
|
3445
|
+
};
|
|
3446
|
+
/**
|
|
3447
|
+
* Get mg-popover identifier
|
|
3448
|
+
*
|
|
3449
|
+
* @returns {MgPopover['identifier']} generated mg-popover identifier
|
|
3450
|
+
*/
|
|
3451
|
+
this.getPopoverIdentifier = () => `${this.identifier}-popover`;
|
|
3452
|
+
/**
|
|
3453
|
+
* Condition to know if component should display a mg-popover
|
|
3454
|
+
*
|
|
3455
|
+
* @returns {boolean} truthy if component display popover
|
|
3456
|
+
*/
|
|
3457
|
+
this.displayPopover = () => this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined;
|
|
3690
3458
|
/************
|
|
3691
3459
|
* Handlers *
|
|
3692
3460
|
************/
|
|
@@ -3714,35 +3482,13 @@ const MgMenuItem = class {
|
|
|
3714
3482
|
this.handlePopoverDisplay = (event) => {
|
|
3715
3483
|
this.expanded = event.detail;
|
|
3716
3484
|
};
|
|
3717
|
-
/**
|
|
3718
|
-
* Update displayNotificationBadge
|
|
3719
|
-
* current component notification badge have priority over the slot badge when submenu contain badge
|
|
3720
|
-
*
|
|
3721
|
-
* @returns {void} update displayNotificationBadge value
|
|
3722
|
-
*/
|
|
3723
|
-
this.updateDisplayNotificationBadge = () => {
|
|
3724
|
-
const childMenu = this.element.querySelector('mg-menu');
|
|
3725
|
-
this.displayNotificationBadge =
|
|
3726
|
-
childMenu !== null &&
|
|
3727
|
-
Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
|
|
3728
|
-
};
|
|
3729
|
-
/**
|
|
3730
|
-
* Method to control if one of component children have active status
|
|
3731
|
-
*
|
|
3732
|
-
* @returns {boolean} truthy if component has active child
|
|
3733
|
-
*/
|
|
3734
|
-
this.hasActiveChild = () => {
|
|
3735
|
-
var _a;
|
|
3736
|
-
return Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || [])
|
|
3737
|
-
.filter(element => element.nodeName === 'MG-MENU-ITEM')
|
|
3738
|
-
.some((element) => this.hasStatus(element, Status$1.ACTIVE) && element.getAttribute('hidden') === null);
|
|
3739
|
-
};
|
|
3740
3485
|
/**
|
|
3741
3486
|
* Render slot
|
|
3742
3487
|
*
|
|
3743
3488
|
* @returns {HTMLElement} HTML Element
|
|
3744
3489
|
*/
|
|
3745
3490
|
this.renderSlot = () => h("slot", null);
|
|
3491
|
+
this.identifier = createID('mg-menu-item');
|
|
3746
3492
|
this.href = undefined;
|
|
3747
3493
|
this.status = Status$1.VISIBLE;
|
|
3748
3494
|
this.expanded = false;
|
|
@@ -3750,6 +3496,7 @@ const MgMenuItem = class {
|
|
|
3750
3496
|
this.navigationButtonClassList = new ClassList([this.navigationButton]);
|
|
3751
3497
|
this.direction = undefined;
|
|
3752
3498
|
this.isInMainMenu = undefined;
|
|
3499
|
+
this.isItemMore = undefined;
|
|
3753
3500
|
this.hasChildren = false;
|
|
3754
3501
|
this.displayNotificationBadge = undefined;
|
|
3755
3502
|
}
|
|
@@ -3786,11 +3533,33 @@ const MgMenuItem = class {
|
|
|
3786
3533
|
this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
|
|
3787
3534
|
this.navigationButtonClassList.add(`${this.navigationButton}--size-${newValue}`);
|
|
3788
3535
|
}
|
|
3536
|
+
validateDirection(newValue) {
|
|
3537
|
+
// manage menu items style depending to parent menu horientation
|
|
3538
|
+
this.element.setAttribute(`data-style-direction-${newValue}`, '');
|
|
3539
|
+
this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
|
|
3540
|
+
// manage all sub levels child menu-items level with data-level attribut
|
|
3541
|
+
if (this.isDirection(Direction.VERTICAL, newValue)) {
|
|
3542
|
+
Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
|
|
3543
|
+
item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
|
|
3544
|
+
});
|
|
3545
|
+
}
|
|
3546
|
+
}
|
|
3789
3547
|
validateHasChildren(newValue) {
|
|
3790
3548
|
if (newValue && this.element.href !== undefined) {
|
|
3791
3549
|
throw new Error(`<${this.name}> prop "href" is unauthorizied when element is a parent.`);
|
|
3792
3550
|
}
|
|
3793
3551
|
}
|
|
3552
|
+
/**
|
|
3553
|
+
* Render popover clickoutside guard for content slot
|
|
3554
|
+
*
|
|
3555
|
+
* @returns {void}
|
|
3556
|
+
*/
|
|
3557
|
+
updatePopoverGuard() {
|
|
3558
|
+
if (this.displayPopover())
|
|
3559
|
+
Array.from(this.element.children)
|
|
3560
|
+
.filter((child) => child.getAttribute('slot') === null && child.nodeName !== 'MG-MENU' && Boolean(child.dataset))
|
|
3561
|
+
.forEach((slot) => (slot.dataset.mgPopoverGuard = this.getPopoverIdentifier()));
|
|
3562
|
+
}
|
|
3794
3563
|
/*************
|
|
3795
3564
|
* Lifecycle *
|
|
3796
3565
|
*************/
|
|
@@ -3803,11 +3572,13 @@ const MgMenuItem = class {
|
|
|
3803
3572
|
// has children items that is NOT [slot='image' | 'information' | 'label' | 'metadata'] element
|
|
3804
3573
|
// we store only matching elements
|
|
3805
3574
|
this.hasChildren = Array.from(this.element.children).some(child => !['image', 'information', 'label', 'metadata'].includes(child.getAttribute('slot')));
|
|
3575
|
+
this.badgeLabel = initLocales(this.element).messages.plusMenu.badgeLabel;
|
|
3576
|
+
this.isItemMore = this.element.dataset.overflowMore !== undefined;
|
|
3806
3577
|
// Validate props
|
|
3807
|
-
this.validateSize(this.size);
|
|
3808
3578
|
this.validateStatus(this.status);
|
|
3809
3579
|
this.validateExpanded(this.expanded);
|
|
3810
|
-
|
|
3580
|
+
// Validate states
|
|
3581
|
+
this.validateSize(this.size);
|
|
3811
3582
|
}
|
|
3812
3583
|
/**
|
|
3813
3584
|
* Check if component slots configuration
|
|
@@ -3815,63 +3586,38 @@ const MgMenuItem = class {
|
|
|
3815
3586
|
* @returns {ReturnType<typeof setTimeout>} timeout
|
|
3816
3587
|
*/
|
|
3817
3588
|
componentDidLoad() {
|
|
3818
|
-
//
|
|
3819
|
-
|
|
3820
|
-
if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
|
|
3821
|
-
throw new Error(`<${this.name}> slot "label" is required.`);
|
|
3822
|
-
['label', 'metadata'].forEach(slot => {
|
|
3823
|
-
Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
|
|
3824
|
-
if (element.textContent.trim().length < 1)
|
|
3825
|
-
throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
|
|
3826
|
-
if (element.getAttribute('title') === null)
|
|
3827
|
-
element.setAttribute('title', element.textContent);
|
|
3828
|
-
});
|
|
3829
|
-
});
|
|
3589
|
+
// validation
|
|
3590
|
+
this.validateSlot(true);
|
|
3830
3591
|
// update props and states after componentDidLoad hook
|
|
3831
3592
|
// return a promise to process action only in the FIRST render().
|
|
3832
3593
|
// https://stenciljs.com/docs/component-lifecycle#componentwillload
|
|
3833
3594
|
return setTimeout(() => {
|
|
3834
|
-
var _a;
|
|
3835
3595
|
// define menu-item context states
|
|
3836
3596
|
const menu = this.element.closest('mg-menu');
|
|
3837
|
-
this.direction = this.
|
|
3838
|
-
this.
|
|
3839
|
-
|
|
3597
|
+
this.direction = this.isItemMore || menu === null ? Direction.HORIZONTAL : menu.direction;
|
|
3598
|
+
this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
|
|
3599
|
+
if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined)
|
|
3600
|
+
this.size = menu.size;
|
|
3601
|
+
if (this.isItemMore)
|
|
3602
|
+
this.size = this.element.dataset.size;
|
|
3840
3603
|
// when main menu item contain an active item it will get the active style
|
|
3841
3604
|
// AND if item is in vertical menu it will be expanded
|
|
3842
|
-
if (this.hasActiveChild())
|
|
3843
|
-
this.
|
|
3844
|
-
|
|
3845
|
-
this.expanded = this.isDirection(Direction.VERTICAL);
|
|
3846
|
-
}
|
|
3847
|
-
// manage menu items style depending to parent menu horientation
|
|
3848
|
-
this.element.setAttribute(`data-style-direction-${this.direction}`, '');
|
|
3849
|
-
this.navigationButtonClassList.add(`${this.navigationButton}--${this.direction}`);
|
|
3605
|
+
if (this.hasActiveChild() && this.isInMainMenu)
|
|
3606
|
+
this.expanded = this.isDirection(Direction.VERTICAL);
|
|
3607
|
+
this.updateStatus([Status$1.ACTIVE]);
|
|
3850
3608
|
this.updateDisplayNotificationBadge();
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
3858
|
-
|
|
3859
|
-
|
|
3860
|
-
|
|
3861
|
-
|
|
3862
|
-
|
|
3863
|
-
}
|
|
3864
|
-
};
|
|
3865
|
-
// manage child menu listener
|
|
3866
|
-
item.addEventListener('status-change', () => {
|
|
3867
|
-
updateStatus();
|
|
3868
|
-
});
|
|
3869
|
-
new MutationObserver(mutationsList => {
|
|
3870
|
-
if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
|
|
3871
|
-
updateStatus();
|
|
3872
|
-
this.updateDisplayNotificationBadge();
|
|
3873
|
-
}).observe(item, { attributes: true });
|
|
3874
|
-
});
|
|
3609
|
+
this.updatePopoverGuard();
|
|
3610
|
+
// manage child dom changes with mutationObserver and listzners
|
|
3611
|
+
this.initListeners();
|
|
3612
|
+
// emit loaded event when component is fully loaded
|
|
3613
|
+
this.itemLoaded.emit();
|
|
3614
|
+
new MutationObserver(mutationsList => {
|
|
3615
|
+
if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
|
|
3616
|
+
this.updateStatus();
|
|
3617
|
+
if (mutationsList.some(mutation => mutation.type === 'characterData'))
|
|
3618
|
+
this.validateSlot();
|
|
3619
|
+
this.updateDisplayNotificationBadge();
|
|
3620
|
+
}).observe(this.element, { attributes: true, childList: true, characterData: true, subtree: true });
|
|
3875
3621
|
}, 0);
|
|
3876
3622
|
}
|
|
3877
3623
|
/**
|
|
@@ -3895,9 +3641,9 @@ const MgMenuItem = class {
|
|
|
3895
3641
|
render() {
|
|
3896
3642
|
const getContainerClasses = () => ({
|
|
3897
3643
|
[`${this.name}__collapse-container`]: true,
|
|
3898
|
-
[`${this.name}__collapse-container--first-level`]: this.isInMainMenu && this.isDirection(Direction.HORIZONTAL),
|
|
3644
|
+
[`${this.name}__collapse-container--first-level`]: (this.isInMainMenu || this.isItemMore) && this.isDirection(Direction.HORIZONTAL),
|
|
3899
3645
|
});
|
|
3900
|
-
return (h(Host, { role:
|
|
3646
|
+
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()))) : ([
|
|
3901
3647
|
this.renderInteractiveElement(),
|
|
3902
3648
|
h("div", { key: "vertical-container", class: getContainerClasses(), hidden: !this.expanded }, this.renderSlot()),
|
|
3903
3649
|
])));
|
|
@@ -3907,6 +3653,7 @@ const MgMenuItem = class {
|
|
|
3907
3653
|
"status": ["validateStatus"],
|
|
3908
3654
|
"expanded": ["validateExpanded"],
|
|
3909
3655
|
"size": ["validateSize"],
|
|
3656
|
+
"direction": ["validateDirection"],
|
|
3910
3657
|
"hasChildren": ["validateHasChildren"]
|
|
3911
3658
|
}; }
|
|
3912
3659
|
};
|
|
@@ -6565,7 +6312,7 @@ var Status;
|
|
|
6565
6312
|
*/
|
|
6566
6313
|
const sizes = ['regular', 'large'];
|
|
6567
6314
|
|
|
6568
|
-
const mgTabsCss = ".mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular{padding:1rem 2rem
|
|
6315
|
+
const mgTabsCss = ".mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular{padding:1rem 2rem}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=label]),.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=metadata]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=label]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=metadata]){font-size:var(--font-size)}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular.mg-tabs__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button.mg-tabs__navigation-button--vertical,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular.mg-tabs__navigation-button--vertical{padding-left:calc(2rem - 0.3rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large{padding:1.5rem 3rem}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button,.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button ::slotted([slot=label]),.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button ::slotted([slot=metadata]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large ::slotted([slot=label]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large.mg-tabs__navigation-button--horizontal{padding-bottom:calc(1.5rem - 0.3rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button.mg-tabs__navigation-button--vertical,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large.mg-tabs__navigation-button--vertical{padding-left:calc(3rem - 0.3rem)}.mg-tabs__navigation-button{display:flex;align-items:center;column-gap:var(--mg-tabs-navigation-button-column-gap, 1rem);background-color:unset;border:none;font-family:var(--font-family);font-weight:400;color:hsl(var(--mg-tabs-color-hsl, var(--color-dark)));line-height:var(--line-height);text-decoration:none;white-space:nowrap;box-sizing:border-box;cursor:pointer}.mg-tabs__navigation-button:disabled,.mg-tabs__navigation-button--disabled{cursor:default;opacity:var(--mg-disabled-opacity)}.mg-tabs__navigation-button:focus-visible{z-index:10}.mg-tabs__navigation-button:hover:not(.mg-tabs__navigation-button--disabled),.mg-tabs__navigation-button:focus-visible:not(.mg-tabs__navigation-button--disabled){background-color:hsl(var(--mg-tabs-focused-background-color-hsl), 0.1)}.mg-tabs__navigation-button.mg-tabs__navigation-button--active{color:hsl(var(--mg-tabs-color-active-hsl));font-weight:600}.mg-tabs__navigation-button.mg-tabs__navigation-button--active.mg-tabs__navigation-button--horizontal{border-bottom-color:hsl(var(--mg-tabs-border-color-active-hsl))}.mg-tabs__navigation-button.mg-tabs__navigation-button--active.mg-tabs__navigation-button--vertical{border-left-color:hsl(var(--mg-tabs-border-color-active-hsl))}.mg-tabs__navigation-button.mg-tabs__navigation-button--hidden{display:none}.mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal{border-bottom:0.3rem solid transparent}.mg-tabs__navigation-button.mg-tabs__navigation-button--vertical{border-left:0.3rem solid transparent}.mg-tabs__header{display:flex;flex-direction:row;flex-wrap:wrap}.mg-tabs__content-container:focus-visible{outline:none}.mg-tabs__navigation-button-text{flex:0 0 content}";
|
|
6569
6316
|
|
|
6570
6317
|
/**
|
|
6571
6318
|
* type TabItem validation function
|
|
@@ -7062,6 +6809,7 @@ const MgTooltip = class {
|
|
|
7062
6809
|
if (typeof newValue !== 'string' || newValue.trim() === '') {
|
|
7063
6810
|
throw new Error('<mg-tooltip> prop "message" is required.');
|
|
7064
6811
|
}
|
|
6812
|
+
this.popper.update();
|
|
7065
6813
|
}
|
|
7066
6814
|
handleDisplay(newValue) {
|
|
7067
6815
|
if (newValue) {
|
|
@@ -7093,10 +6841,13 @@ const MgTooltip = class {
|
|
|
7093
6841
|
this.tooltipedElement = interactiveElement || slotElement;
|
|
7094
6842
|
// Check if slotted element is a disabled mg-button
|
|
7095
6843
|
// In this case we wrap the mg-button into a div to enable the tooltip
|
|
7096
|
-
if (
|
|
6844
|
+
if (['MG-BUTTON', 'BUTTON'].includes(slotElement.tagName)) {
|
|
7097
6845
|
new MutationObserver(mutationList => {
|
|
7098
|
-
if (mutationList.some(mutation =>
|
|
6846
|
+
if (mutationList.some(mutation => ['aria-disabled', 'disabled'].includes(mutation.attributeName))) {
|
|
7099
6847
|
this.setMgButtonWrapper(slotElement);
|
|
6848
|
+
// Since Firefox doesn't trigger a "blur" event when the "disabled" attribute is added or removed from a button
|
|
6849
|
+
// we have to manually unlock the guard because the "blur" handler of the tooltipedElement won't do it.
|
|
6850
|
+
this.resetGuard();
|
|
7100
6851
|
this.initTooltip(slotElement, interactiveElement);
|
|
7101
6852
|
}
|
|
7102
6853
|
}).observe(slotElement, { attributes: true });
|