@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.
Files changed (66) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/mg-action-more_31.cjs.entry.js +351 -600
  3. package/dist/cjs/mg-components.cjs.js +1 -1
  4. package/dist/cjs/mg-item-more.cjs.entry.js +273 -0
  5. package/dist/cjs/mg-menu.conf-9afe6571.js +242 -0
  6. package/dist/collection/collection-manifest.json +2 -1
  7. package/dist/collection/components/atoms/mg-button/mg-button.js +24 -0
  8. package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +8 -0
  9. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +6 -2
  10. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +14 -10
  11. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +91 -21
  12. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +0 -13
  13. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +80 -76
  14. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +7 -5
  15. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +174 -78
  16. package/dist/collection/components/molecules/mg-form/mg-form.js +1 -1
  17. package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js +1 -0
  18. package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +30 -0
  19. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +200 -0
  20. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -2
  21. package/dist/collection/styles/navigation-button.scss +1 -1
  22. package/dist/collection/utils/behaviors.utils.js +33 -29
  23. package/dist/collection/utils/components.utils.js +2 -4
  24. package/dist/collection/utils/unit.test.utils.js +25 -0
  25. package/dist/components/components.utils.js +2 -4
  26. package/dist/components/index.d.ts +1 -0
  27. package/dist/components/index.js +1 -0
  28. package/dist/components/mg-action-more.js +2 -1
  29. package/dist/components/mg-button2.js +4 -1
  30. package/dist/components/mg-form.js +1 -1
  31. package/dist/components/mg-icon2.js +8 -0
  32. package/dist/components/mg-input-checkbox.js +5 -4
  33. package/dist/components/mg-input-select2.js +83 -17
  34. package/dist/components/mg-item-more.d.ts +11 -0
  35. package/dist/components/mg-item-more.js +336 -0
  36. package/dist/components/mg-menu-item2.js +138 -251
  37. package/dist/components/mg-menu.conf.js +14 -0
  38. package/dist/components/mg-menu2.js +76 -111
  39. package/dist/components/mg-tabs.js +1 -1
  40. package/dist/components/mg-tooltip2.js +6 -2
  41. package/dist/esm/loader.js +1 -1
  42. package/dist/esm/mg-action-more_31.entry.js +321 -570
  43. package/dist/esm/mg-components.js +1 -1
  44. package/dist/esm/mg-item-more.entry.js +269 -0
  45. package/dist/esm/mg-menu.conf-881fbd82.js +235 -0
  46. package/dist/mg-components/mg-components.css +1 -1
  47. package/dist/mg-components/mg-components.esm.js +1 -1
  48. package/dist/mg-components/p-1221773c.entry.js +1 -0
  49. package/dist/mg-components/p-30bc87db.entry.js +1 -0
  50. package/dist/mg-components/p-367f92d2.js +1 -0
  51. package/dist/mg-components/styles/navigation-button.scss +1 -1
  52. package/dist/types/components/atoms/mg-button/mg-button.d.ts +5 -0
  53. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +3 -3
  54. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +39 -4
  55. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +3 -27
  56. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +38 -30
  57. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +5 -0
  58. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +69 -16
  59. package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +26 -0
  60. package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +74 -0
  61. package/dist/types/components.d.ts +75 -17
  62. package/dist/types/utils/behaviors.utils.d.ts +12 -5
  63. package/dist/types/utils/components.utils.d.ts +2 -2
  64. package/dist/types/utils/unit.test.utils.d.ts +11 -0
  65. package/package.json +1 -1
  66. 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 {string[]} items items to check
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 CustomEvent('submit', { bubbles: true }));
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 {CheckboxItem} item Checkbox item
1546
- * @returns {boolean} match item expectations
1308
+ * @param {unknown} items Checkbox item
1309
+ * @returns {boolean} match item type
1547
1310
  */
1548
- const isCheckboxItem = (item) => typeof item === 'object' && typeof item.title === 'string' && (item.value === null || typeof item.value === 'boolean') && item.value !== undefined;
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 && newValue.every(item => isCheckboxItem(item))) {
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 {SelectOption} option select option
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.checkValidity();
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.value = allItemsAreString(this.items) ? this.input.value : this.items.find(item => item.title === this.input.value).value;
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
- this.value = null;
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
- handleValue(newValue) {
2584
- if (newValue !== null) {
2585
- this.readonlyValue = allItemsAreString(this.items) ? this.input.value : this.items.find(item => item.value === newValue).title;
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
- this.valueExist = newValue.includes(this.value);
2600
- this.options = newValue.map((item) => ({ title: item, value: item }));
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.every(item => isOption$1(item))) {
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 !== undefined)) {
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: this.value, 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 => {
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.group !== undefined ? (h("optgroup", { label: option.group }, option.options.map(optgroup => (h("option", { key: optgroup.title, value: optgroup.title, selected: JSON.stringify(this.value) === JSON.stringify(optgroup.value), disabled: optgroup.disabled }, optgroup.title))))) : (h("option", { value: option.title, selected: JSON.stringify(this.value) === JSON.stringify(option.value), disabled: option.disabled }, option.title))))));
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": ["handleValue"],
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
- * Store menu-items on component init and add listeners
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.initMenuItemsListeners = () => {
3506
- // add listeners on menu item and edit index
3507
- this.menuItems.forEach((item, menuItemIndex) => {
3508
- ['click', 'focus'].forEach(trigger => {
3509
- (item.shadowRoot.querySelector('button') || item.shadowRoot.querySelector('a')).addEventListener(trigger, () => {
3510
- this.focusedMenuItem = menuItemIndex;
3511
- // reset expanded on previous active menu item
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
- * render mg-menu-more
3209
+ * Store menu-items on component init and add listeners
3521
3210
  *
3522
- * @returns {HTMLElement} formated mg-menu-item element
3211
+ * @returns {void}
3523
3212
  */
3524
- this.renderMgMenuMore = () => {
3525
- const moreElement = this.element.shadowRoot.querySelector(`[${OverflowBehaviorElements.MORE}]`);
3526
- this.menuItems.forEach((child) => {
3527
- const proxy = child.cloneNode(true);
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
- * Render mg-menu-item more element for overflow behavior
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 {HTMLElement} rendered mg-menu-item more element
3230
+ * @returns {void}
3548
3231
  */
3549
- this.renderMgMenuItemMore = () => {
3550
- var _a, _b, _c, _d, _e, _f, _g;
3551
- return (h("mg-menu-item", { "data-overflow-more": true }, h("mg-icon", { icon: ((_b = (_a = this.moreitem) === null || _a === void 0 ? void 0 : _a.mgIcon) === null || _b === void 0 ? void 0 : _b.icon) || 'ellipsis-vertical', slot: "image" }), h("span", { class: { 'sr-only': !((_d = (_c = this.moreitem) === null || _c === void 0 ? void 0 : _c.slotLabel) === null || _d === void 0 ? void 0 : _d.display) }, slot: "label" }, ((_f = (_e = this.moreitem) === null || _e === void 0 ? void 0 : _e.slotLabel) === null || _f === void 0 ? void 0 : _f.label) || this.messages.moreLabel), h("mg-menu", { direction: Direction.VERTICAL, label: this.messages.moreLabel, size: (_g = this.moreitem) === null || _g === void 0 ? void 0 : _g.size })));
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.moreitem = undefined;
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
- validateMoreItem(newValue) {
3257
+ validateItemMore(newValue) {
3571
3258
  if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
3572
- throw new Error(`<${this.name}> prop "moreitem" must be paired with direction ${Direction.HORIZONTAL}.`);
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.validateMoreItem(this.moreitem);
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
- this.hasOverflow = this.direction === Direction.HORIZONTAL && !this.isChildMenu;
3613
- if (this.hasOverflow && isMoreItem(this.moreitem))
3614
- this.overflowBehavior = new OverflowBehavior(this.element, this.renderMgMenuMore);
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
- * Check add listeners to childs
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), this.hasOverflow && isMoreItem(this.moreitem) && this.renderMgMenuItemMore()));
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
- "moreitem": ["validateMoreItem"],
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) => this.direction === 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
- this.badgeLabel = initLocales(this.element).messages.plusMenu.badgeLabel;
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
- // slot title AND metadata validation
3819
- // add title on label AND metada slots due to text-overflow on these element
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.element.getAttribute(OverflowBehaviorElements.MORE) !== null || menu === null ? Direction.HORIZONTAL : menu.direction;
3838
- this.size = menu === null || menu === void 0 ? void 0 : menu.size;
3839
- this.isInMainMenu = this.element.parentElement.closest('mg-menu-item') === null;
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.status = Status$1.ACTIVE;
3844
- if (this.isInMainMenu)
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
- // manage all sub levels child menu-items level with data-level attribut
3852
- if (this.isDirection(Direction.VERTICAL)) {
3853
- Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
3854
- item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
3855
- });
3856
- }
3857
- // manage first sub-level menu-items
3858
- const childItems = Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).filter(item => item.nodeName === 'MG-MENU-ITEM');
3859
- childItems.forEach(item => {
3860
- const updateStatus = () => {
3861
- if (![Status$1.HIDDEN, Status$1.DISABLED].includes(this.status)) {
3862
- this.status = this.hasActiveChild() ? Status$1.ACTIVE : Status$1.VISIBLE;
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: "menuitem", "aria-haspopup": this.hasChildren.toString() }, this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined ? (h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay }, this.renderInteractiveElement(), h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
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;height:calc()}.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;height:calc()}.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}";
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 (slotElement.tagName === 'MG-BUTTON') {
6844
+ if (['MG-BUTTON', 'BUTTON'].includes(slotElement.tagName)) {
7097
6845
  new MutationObserver(mutationList => {
7098
- if (mutationList.some(mutation => mutation.attributeName === 'aria-disabled')) {
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 });