@mgdis/mg-components 5.7.0 → 5.8.0

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 (53) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/mg-action-more_31.cjs.entry.js +216 -565
  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/menu/mg-menu/mg-menu.conf.js +0 -13
  11. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +39 -67
  12. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +3 -3
  13. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +156 -77
  14. package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js +1 -0
  15. package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +30 -0
  16. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +200 -0
  17. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -2
  18. package/dist/collection/styles/navigation-button.scss +1 -1
  19. package/dist/collection/utils/behaviors.utils.js +33 -29
  20. package/dist/components/index.d.ts +1 -0
  21. package/dist/components/index.js +1 -0
  22. package/dist/components/mg-action-more.js +2 -1
  23. package/dist/components/mg-button2.js +4 -1
  24. package/dist/components/mg-icon2.js +8 -0
  25. package/dist/components/mg-item-more.d.ts +11 -0
  26. package/dist/components/mg-item-more.js +336 -0
  27. package/dist/components/mg-menu-item2.js +134 -250
  28. package/dist/components/mg-menu.conf.js +14 -0
  29. package/dist/components/mg-menu2.js +35 -102
  30. package/dist/components/mg-tabs.js +1 -1
  31. package/dist/components/mg-tooltip2.js +6 -2
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/esm/mg-action-more_31.entry.js +185 -534
  34. package/dist/esm/mg-components.js +1 -1
  35. package/dist/esm/mg-item-more.entry.js +269 -0
  36. package/dist/esm/mg-menu.conf-881fbd82.js +235 -0
  37. package/dist/mg-components/mg-components.css +1 -1
  38. package/dist/mg-components/mg-components.esm.js +1 -1
  39. package/dist/mg-components/p-1221773c.entry.js +1 -0
  40. package/dist/mg-components/p-367f92d2.js +1 -0
  41. package/dist/mg-components/p-6aeded97.entry.js +1 -0
  42. package/dist/mg-components/styles/navigation-button.scss +1 -1
  43. package/dist/types/components/atoms/mg-button/mg-button.d.ts +5 -0
  44. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +3 -27
  45. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +9 -27
  46. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +5 -0
  47. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +65 -16
  48. package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +26 -0
  49. package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +74 -0
  50. package/dist/types/components.d.ts +66 -12
  51. package/dist/types/utils/behaviors.utils.d.ts +12 -5
  52. package/package.json +1 -1
  53. package/dist/mg-components/p-4cfd5423.entry.js +0 -1
@@ -3,227 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-5e7ede97.js');
6
-
7
- const errors$1 = {
8
- required: "This field is required.",
9
- date: {
10
- 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}",
11
- min: "The date cannot be earlier than {min}",
12
- max: "The date cannot be later than {max}",
13
- minMax: "The date must be between {min} and {max}"
14
- },
15
- numeric: {
16
- min: "The value cannot be less than {min}",
17
- max: "The value cannot be greater than {max}",
18
- minMax: "The value must be between {min} et {max}"
19
- }
20
- };
21
- const nbCharLeft$1 = "{counter} characters left.";
22
- const input$1 = {
23
- select: {
24
- placeholder: "Select a value"
25
- }
26
- };
27
- const form$1 = {
28
- required: "Fields with a <strong class=\"is-asterisk\">*</strong> are required",
29
- requiredSingle: "Field with a <strong class=\"is-asterisk\">*</strong> is required",
30
- allRequired: "All fields are required",
31
- allRequiredSingle: "The field is required"
32
- };
33
- const message$1 = {
34
- closeButton: "Close message"
35
- };
36
- const modal$1 = {
37
- closeButton: "Close modal"
38
- };
39
- const pagination$1 = {
40
- label: "Pagination",
41
- page: "page",
42
- pages: "pages",
43
- nextPage: "Next page",
44
- previousPage: "Previous page",
45
- selectPage: "Select the page to display."
46
- };
47
- const panel$1 = {
48
- editLabel: "Edit section title."
49
- };
50
- const skipLinks$1 = {
51
- navLabel: "Quick access"
52
- };
53
- const general$1 = {
54
- confirm: "Confirm",
55
- cancel: "Cancel",
56
- close: "Close",
57
- next: "next",
58
- previous: "previous"
59
- };
60
- const plusMenu$1 = {
61
- moreLabel: "Additional menu",
62
- badgeLabel: "Include notification(s)"
63
- };
64
- const actionMore$1 = {
65
- label: "Actions"
66
- };
67
- const en = {
68
- errors: errors$1,
69
- nbCharLeft: nbCharLeft$1,
70
- input: input$1,
71
- form: form$1,
72
- message: message$1,
73
- modal: modal$1,
74
- pagination: pagination$1,
75
- panel: panel$1,
76
- skipLinks: skipLinks$1,
77
- general: general$1,
78
- plusMenu: plusMenu$1,
79
- actionMore: actionMore$1
80
- };
81
-
82
- const errors = {
83
- required: "Ce champ est obligatoire.",
84
- date: {
85
- 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}",
86
- min: "La date ne peut pas être antérieure au {min}",
87
- max: "La date ne peut pas être postérieure au {max}",
88
- minMax: "La date doit être comprise entre le {min} et le {max}"
89
- },
90
- numeric: {
91
- min: "La valeur ne peut pas être inférieure à {min}",
92
- max: "La valeur ne peut pas être supérieure à {max}",
93
- minMax: "La valeur doit être comprise entre {min} et {max}"
94
- }
95
- };
96
- const nbCharLeft = "{counter} caractères disponibles.";
97
- const input = {
98
- select: {
99
- placeholder: "Sélectionnez une valeur"
100
- }
101
- };
102
- const form = {
103
- required: "Les champs marqués d'un <strong class=\"is-asterisk\">*</strong> sont obligatoires",
104
- requiredSingle: "Le champ marqué d'un <strong class=\"is-asterisk\">*</strong> est obligatoire",
105
- allRequired: "Tous les champs sont obligatoires",
106
- allRequiredSingle: "Le champ est obligatoire"
107
- };
108
- const message = {
109
- closeButton: "Fermer le message"
110
- };
111
- const modal = {
112
- closeButton: "Fermer la modale"
113
- };
114
- const pagination = {
115
- label: "Pagination",
116
- page: "page",
117
- pages: "pages",
118
- nextPage: "Page suivante",
119
- previousPage: "Page précédente",
120
- selectPage: "Sélectionner la page à afficher."
121
- };
122
- const panel = {
123
- editLabel: "Modifier le titre de la section."
124
- };
125
- const skipLinks = {
126
- navLabel: "Accès rapide"
127
- };
128
- const general = {
129
- confirm: "Valider",
130
- cancel: "Annuler",
131
- close: "Fermer",
132
- next: "suivant",
133
- previous: "précédent"
134
- };
135
- const plusMenu = {
136
- moreLabel: "Menu complémentaire",
137
- badgeLabel: "Notification(s) incluse(s)"
138
- };
139
- const actionMore = {
140
- label: "Actions"
141
- };
142
- const fr = {
143
- errors: errors,
144
- nbCharLeft: nbCharLeft,
145
- input: input,
146
- form: form,
147
- message: message,
148
- modal: modal,
149
- pagination: pagination,
150
- panel: panel,
151
- skipLinks: skipLinks,
152
- general: general,
153
- plusMenu: plusMenu,
154
- actionMore: actionMore
155
- };
156
-
157
- /**
158
- * Format number to the locale currency
159
- *
160
- * @param {number} number number to format
161
- * @param {string} locale locale to apply
162
- * @param {string} currency currency to apply
163
- * @returns {string} formatted currency
164
- */
165
- const localeCurrency = (number, locale, currency) => {
166
- return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(number);
167
- };
168
- /**
169
- * Format number to locale
170
- *
171
- * @param {number} number number to format
172
- * @param {string} locale locale to apply
173
- * @returns {string} formatted number
174
- */
175
- const localeNumber = (number, locale) => {
176
- return new Intl.NumberFormat(locale).format(number);
177
- };
178
- /**
179
- * Date RegExp
180
- */
181
- const dateRegExp = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
182
- /**
183
- * Locale date format
184
- *
185
- * @param {string} date date to format
186
- * @param {string} locale locale to apply
187
- * @returns {string} formatted date
188
- */
189
- const localeDate = (date, locale) => {
190
- if (typeof date !== 'string' || date === '' || !dateRegExp.test(date)) {
191
- return '';
192
- }
193
- return new Intl.DateTimeFormat(locale).format(new Date(date));
194
- };
195
- /**
196
- * Get locale and messages
197
- * We load the defined locale but for now we only support the first subtag for messages
198
- *
199
- * @param {HTMLElement} element element we need to get the language
200
- * @param {unknown} messages messages to use
201
- * @param {string} defaultLocale default messages locale
202
- * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
203
- */
204
- const getLocaleMessages = (element, messages, defaultLocale) => {
205
- // Get local
206
- const closestLangAttribute = element.closest('[lang]');
207
- const closestLang = Intl.NumberFormat.supportedLocalesOf(closestLangAttribute === null || closestLangAttribute === void 0 ? void 0 : closestLangAttribute.lang);
208
- const locale = closestLang.length > 0 ? closestLang[0] : navigator.language || defaultLocale;
209
- // Only keep first subtag
210
- const localeSubtag = locale.split('-').shift();
211
- // Return
212
- return {
213
- locale,
214
- messages: messages[localeSubtag] || messages[defaultLocale],
215
- };
216
- };
217
-
218
- const defaultLocale = 'en';
219
- const messages = { en, fr };
220
- /**
221
- * Get Intl object
222
- *
223
- * @param {HTMLElement} element element we need to get the language
224
- * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
225
- */
226
- const initLocales = (element) => getLocaleMessages(element, messages, defaultLocale);
6
+ const mgMenu_conf = require('./mg-menu.conf-9afe6571.js');
227
7
 
228
8
  /**
229
9
  * Available menu-item positions
@@ -244,32 +24,6 @@ var Status$1;
244
24
  Status["ACTIVE"] = "active";
245
25
  })(Status$1 || (Status$1 = {}));
246
26
 
247
- /**
248
- * Menu direction type
249
- */
250
- var Direction;
251
- (function (Direction) {
252
- Direction["VERTICAL"] = "vertical";
253
- Direction["HORIZONTAL"] = "horizontal";
254
- })(Direction || (Direction = {}));
255
- /**
256
- * More item type guard
257
- *
258
- * @param {unknown} element element to control
259
- * @returns {boolean} truthy if element is more-item
260
- */
261
- const isMoreItem = (element) => {
262
- var _a, _b, _c;
263
- const item = element;
264
- return (item === undefined ||
265
- (typeof item === 'object' &&
266
- (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')));
267
- };
268
- /**
269
- * List of all possibles sizes
270
- */
271
- const sizes$2 = ['regular', 'medium', 'large'];
272
-
273
27
  /**
274
28
  * Create random ID
275
29
  *
@@ -516,7 +270,7 @@ const MgActionMore = class {
516
270
  * @returns {void}
517
271
  */
518
272
  componentWillLoad() {
519
- this.messages = initLocales(this.element).messages.actionMore;
273
+ this.messages = mgMenu_conf.initLocales(this.element).messages.actionMore;
520
274
  this.validateItems(this.items);
521
275
  this.validateButton(this.button);
522
276
  this.validateIcon(this.icon);
@@ -537,7 +291,7 @@ const MgActionMore = class {
537
291
  'mg-a11y-animation': true,
538
292
  } }, index.h("mg-icon", { icon: "chevron-down", size: "small" })));
539
293
  }
540
- return (index.h(index.Host, { "data-mg-popover-guard": this.mgPopoverIdentifier }, index.h("span", { class: "mg-action-more" }, index.h("mg-popover", { identifier: this.mgPopoverIdentifier, display: this.expanded }, index.h("mg-button", { variant: this.button.variant, isIcon: this.button.isIcon, type: "button", label: buttonLabel, onClick: this.handleButton }, index.h("mg-icon", Object.assign({}, this.icon)), !this.button.isIcon && buttonContent), index.h("div", { slot: "content" }, index.h("mg-menu", { direction: Direction.VERTICAL, label: this.messages.label }, this.items.map(item => {
294
+ return (index.h(index.Host, { "data-mg-popover-guard": this.mgPopoverIdentifier }, index.h("span", { class: "mg-action-more" }, index.h("mg-popover", { identifier: this.mgPopoverIdentifier, display: this.expanded }, index.h("mg-button", { variant: this.button.variant, isIcon: this.button.isIcon, type: "button", label: buttonLabel, onClick: this.handleButton }, index.h("mg-icon", Object.assign({}, this.icon)), !this.button.isIcon && buttonContent), index.h("div", { slot: "content" }, index.h("mg-menu", { direction: mgMenu_conf.Direction.VERTICAL, label: this.messages.label }, this.items.map(item => {
541
295
  var _a;
542
296
  return (
543
297
  // eslint-disable-next-line react/jsx-no-bind
@@ -640,6 +394,7 @@ const mgButtonCss = ":host{display:inline-block;vertical-align:middle;max-width:
640
394
  const MgButton = class {
641
395
  constructor(hostRef) {
642
396
  index.registerInstance(this, hostRef);
397
+ this.disabledChange = index.createEvent(this, "disabled-change", 7);
643
398
  /************
644
399
  * Internal *
645
400
  ************/
@@ -738,6 +493,8 @@ const MgButton = class {
738
493
  else {
739
494
  this.classList.delete(this.classDisabled);
740
495
  }
496
+ // emit value update
497
+ this.disabledChange.emit(isDisabled);
741
498
  }
742
499
  loadingHandler(newValue) {
743
500
  // we add loading style if it newvalue is true else we remove it
@@ -828,7 +585,7 @@ const MgCharacterLeft = class {
828
585
  */
829
586
  componentWillLoad() {
830
587
  this.validateMaxlength(this.maxlength);
831
- this.messages = initLocales(this.element).messages;
588
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
832
589
  }
833
590
  /**
834
591
  * Render component
@@ -1035,7 +792,7 @@ const MgForm = class {
1035
792
  */
1036
793
  componentWillLoad() {
1037
794
  // Get locales
1038
- this.messages = initLocales(this.element).messages;
795
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
1039
796
  // Get slotted mgButtons
1040
797
  this.mgButtons = Array.from(this.element.querySelectorAll('mg-button'));
1041
798
  // Set button form identifier
@@ -1123,6 +880,7 @@ const icons = {
1123
880
  'bell': () => (index.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" })),
1124
881
  'briefcase': () => (index.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" })),
1125
882
  'briefcase-outline': () => (index.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" })),
883
+ 'building-outline': () => (index.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" })),
1126
884
  'calculator': () => (index.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" })),
1127
885
  'calendar': () => (index.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" })),
1128
886
  'calendar-outline': () => (index.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" })),
@@ -1238,6 +996,7 @@ const icons = {
1238
996
  'pen': () => (index.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" })),
1239
997
  'pen-circle': () => (index.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" })),
1240
998
  'pen-fancy': () => (index.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" })),
999
+ 'pen-fancy-files-outline': () => (index.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" })),
1241
1000
  'pen-fancy-outline': () => (index.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" })),
1242
1001
  'phone': () => (index.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" })),
1243
1002
  'picture': () => (index.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" })),
@@ -1256,6 +1015,8 @@ const icons = {
1256
1015
  index.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" }),
1257
1016
  ],
1258
1017
  'thumb-up': () => (index.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" })),
1018
+ 'thumbtack': () => (index.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" })),
1019
+ 'thumbtack-outline': () => (index.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" })),
1259
1020
  'trash': () => [
1260
1021
  index.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" }),
1261
1022
  index.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" }),
@@ -1266,6 +1027,10 @@ const icons = {
1266
1027
  'upload': () => (index.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" })),
1267
1028
  'user': () => (index.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" })),
1268
1029
  'user-circle': () => (index.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" })),
1030
+ 'user-pen-fancy-outline': () => [
1031
+ index.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" }),
1032
+ index.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" }),
1033
+ ],
1269
1034
  'user-group': () => (index.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" })),
1270
1035
  'user-plus': () => (index.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" })),
1271
1036
  'user-question-outline': () => (index.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" })),
@@ -1673,7 +1438,7 @@ const MgInputCheckbox = class {
1673
1438
  */
1674
1439
  componentWillLoad() {
1675
1440
  // Get locales
1676
- this.messages = initLocales(this.element).messages;
1441
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
1677
1442
  // Validate
1678
1443
  this.validateValue(this.value);
1679
1444
  // Check validity when component is ready
@@ -1794,12 +1559,12 @@ const MgInputDate = class {
1794
1559
  }
1795
1560
  // min, max & minMax
1796
1561
  else if ([InputError$1.MIN, InputError$1.MAX, InputError$1.MINMAX].includes(inputError)) {
1797
- this.errorMessage = this.messages.errors.date[inputError].replace('{min}', localeDate(this.min, this.locale)).replace('{max}', localeDate(this.max, this.locale));
1562
+ this.errorMessage = this.messages.errors.date[inputError].replace('{min}', mgMenu_conf.localeDate(this.min, this.locale)).replace('{max}', mgMenu_conf.localeDate(this.max, this.locale));
1798
1563
  }
1799
1564
  // wrong date format
1800
1565
  // element.validity.badInput is default error message
1801
1566
  else {
1802
- this.errorMessage = this.messages.errors.date.badInput.replace('{min}', ((_a = this.min) === null || _a === void 0 ? void 0 : _a.length) > 0 ? localeDate(this.min, this.locale) : localeDate('1900-01-01', this.locale));
1567
+ this.errorMessage = this.messages.errors.date.badInput.replace('{min}', ((_a = this.min) === null || _a === void 0 ? void 0 : _a.length) > 0 ? mgMenu_conf.localeDate(this.min, this.locale) : mgMenu_conf.localeDate('1900-01-01', this.locale));
1803
1568
  }
1804
1569
  }
1805
1570
  };
@@ -1825,7 +1590,7 @@ const MgInputDate = class {
1825
1590
  // When the input is not fully completed or has been cleared, the value becomes an empty string.
1826
1591
  if (newValue === '')
1827
1592
  newValue = null;
1828
- if (newValue !== undefined && newValue !== null && (typeof newValue !== 'string' || !dateRegExp.test(newValue))) {
1593
+ if (newValue !== undefined && newValue !== null && (typeof newValue !== 'string' || !mgMenu_conf.dateRegExp.test(newValue))) {
1829
1594
  throw new Error("<mg-input-date> props 'value' doesn't match pattern: yyyy-mm-dd");
1830
1595
  }
1831
1596
  else {
@@ -1843,7 +1608,7 @@ const MgInputDate = class {
1843
1608
  }
1844
1609
  }
1845
1610
  validateMinMax(newValue) {
1846
- if ((newValue === null || newValue === void 0 ? void 0 : newValue.length) === 0 || ((newValue === null || newValue === void 0 ? void 0 : newValue.length) > 0 && !(typeof newValue === 'string' && dateRegExp.test(newValue)))) {
1611
+ if ((newValue === null || newValue === void 0 ? void 0 : newValue.length) === 0 || ((newValue === null || newValue === void 0 ? void 0 : newValue.length) > 0 && !(typeof newValue === 'string' && mgMenu_conf.dateRegExp.test(newValue)))) {
1847
1612
  throw new Error("<mg-input-date> props 'min/max' doesn't match pattern: yyyy-mm-dd");
1848
1613
  }
1849
1614
  }
@@ -1867,7 +1632,7 @@ const MgInputDate = class {
1867
1632
  */
1868
1633
  componentWillLoad() {
1869
1634
  // Get locales
1870
- const locales = initLocales(this.element);
1635
+ const locales = mgMenu_conf.initLocales(this.element);
1871
1636
  this.locale = locales.locale;
1872
1637
  this.messages = locales.messages;
1873
1638
  // Validate
@@ -1887,7 +1652,7 @@ const MgInputDate = class {
1887
1652
  * @returns {HTMLElement} HTML Element
1888
1653
  */
1889
1654
  render() {
1890
- return (index.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: undefined, disabled: this.disabled, value: this.value, readonlyValue: localeDate(this.value, this.locale), tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, index.h("input", { type: "date", class: "mg-input__box", min: this.min, max: this.max, value: this.value, id: this.identifier, name: this.name, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
1655
+ return (index.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: undefined, disabled: this.disabled, value: this.value, readonlyValue: mgMenu_conf.localeDate(this.value, this.locale), tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, index.h("input", { type: "date", class: "mg-input__box", min: this.min, max: this.max, value: this.value, id: this.identifier, name: this.name, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
1891
1656
  if (el !== null)
1892
1657
  this.input = el;
1893
1658
  } })));
@@ -2019,7 +1784,7 @@ const MgInputNumeric = class {
2019
1784
  * @param {number} value value to format
2020
1785
  * @returns {string} formated local value
2021
1786
  */
2022
- this.formatValue = (value) => (this.type === 'currency' ? localeCurrency(value, this.locale, this.currency) : localeNumber(value, this.locale));
1787
+ this.formatValue = (value) => (this.type === 'currency' ? mgMenu_conf.localeCurrency(value, this.locale, this.currency) : mgMenu_conf.localeNumber(value, this.locale));
2023
1788
  /**
2024
1789
  * Validate append slot
2025
1790
  *
@@ -2137,7 +1902,7 @@ const MgInputNumeric = class {
2137
1902
  */
2138
1903
  componentWillLoad() {
2139
1904
  // Get locales
2140
- const locales = initLocales(this.element);
1905
+ const locales = mgMenu_conf.initLocales(this.element);
2141
1906
  this.locale = locales.locale;
2142
1907
  this.messages = locales.messages;
2143
1908
  // Validate
@@ -2274,7 +2039,7 @@ const MgInputPassword = class {
2274
2039
  */
2275
2040
  componentWillLoad() {
2276
2041
  // Get locales
2277
- this.messages = initLocales(this.element).messages;
2042
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
2278
2043
  // Check validity when component is ready
2279
2044
  // return a promise to process action only in the FIRST render().
2280
2045
  // https://stenciljs.com/docs/component-lifecycle#componentwillload
@@ -2442,7 +2207,7 @@ const MgInputRadio = class {
2442
2207
  */
2443
2208
  componentWillLoad() {
2444
2209
  // Get locales
2445
- this.messages = initLocales(this.element).messages;
2210
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
2446
2211
  // Validate
2447
2212
  this.validateItems(this.items);
2448
2213
  // Check validity when component is ready
@@ -2649,7 +2414,7 @@ const MgInputSelect = class {
2649
2414
  */
2650
2415
  componentWillLoad() {
2651
2416
  // Get locales
2652
- this.messages = initLocales(this.element).messages;
2417
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
2653
2418
  // Validate
2654
2419
  this.validateItems(this.items);
2655
2420
  // Set default placeholder
@@ -2865,7 +2630,7 @@ const MgInputText = class {
2865
2630
  */
2866
2631
  componentWillLoad() {
2867
2632
  // Get locales
2868
- this.messages = initLocales(this.element).messages;
2633
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
2869
2634
  this.characterLeftId = `${this.identifier}-character-left`;
2870
2635
  // Validate
2871
2636
  this.validateIcon(this.icon);
@@ -3055,7 +2820,7 @@ const MgInputTextarea = class {
3055
2820
  */
3056
2821
  componentWillLoad() {
3057
2822
  // Get locales
3058
- this.messages = initLocales(this.element).messages;
2823
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
3059
2824
  this.characterLeftId = `${this.identifier}-character-left`;
3060
2825
  // Validate
3061
2826
  this.validateDisplayCharacterLeft(this.displayCharacterLeft);
@@ -3323,158 +3088,6 @@ const MgInputToggle = class {
3323
3088
  };
3324
3089
  MgInputToggle.style = mgInputToggleCss;
3325
3090
 
3326
- /**
3327
- * MgMenuItem type guard
3328
- *
3329
- * @param {HTMLElement} element element to control type
3330
- * @returns {boolean} truthy if element is mg-menu-item
3331
- */
3332
- const isMgMenuItem = (element) => element.nodeName === 'MG-MENU-ITEM';
3333
- var OverflowBehaviorElements;
3334
- (function (OverflowBehaviorElements) {
3335
- OverflowBehaviorElements["MORE"] = "data-overflow-more";
3336
- OverflowBehaviorElements["BASE_INDEX"] = "data-overflow-base-index";
3337
- OverflowBehaviorElements["PROXY_INDEX"] = "data-overflow-proxy-index";
3338
- })(OverflowBehaviorElements || (OverflowBehaviorElements = {}));
3339
- class OverflowBehavior {
3340
- constructor(element, render) {
3341
- this.element = element;
3342
- this.render = render;
3343
- /**********
3344
- * Public *
3345
- **********/
3346
- /**
3347
- * Disconnect ResizeObserver
3348
- *
3349
- * @returns {void}
3350
- */
3351
- this.disconnect = () => {
3352
- this.resizeObserver.disconnect();
3353
- };
3354
- /************
3355
- * Internal *
3356
- ************/
3357
- /**
3358
- * run overflow behavior
3359
- *
3360
- * @param {number} width width of the container
3361
- * @returns {void}
3362
- */
3363
- this.run = (width) => {
3364
- if (this.moreElement === undefined) {
3365
- // set moreElement
3366
- this.moreElement = this.render();
3367
- this.moreElement.setAttribute(OverflowBehaviorElements.MORE, '');
3368
- // set children
3369
- this.children = Array.from(this.element.children);
3370
- let moreElementChildren;
3371
- const allowedElements = ['MG-MENU-ITEM', 'MG-BUTTON'];
3372
- if (isMgMenuItem(this.moreElement)) {
3373
- moreElementChildren = Array.from(this.moreElement.querySelector('mg-menu').children).filter(element => allowedElements.includes(element.nodeName));
3374
- }
3375
- this.children.forEach((child, index) => {
3376
- child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);
3377
- if (child.getAttribute(OverflowBehaviorElements.MORE) === null) {
3378
- // set moreElement children
3379
- moreElementChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);
3380
- }
3381
- });
3382
- }
3383
- this.updateDisplayedItems(width);
3384
- };
3385
- /**
3386
- * Update displayed items in container from a given available space
3387
- *
3388
- * @param {number} availableWidth available width in container to display child items
3389
- * @returns {void}
3390
- */
3391
- this.updateDisplayedItems = (availableWidth) => {
3392
- this.restoreItems();
3393
- const acc = { accWidth: 0, previousItem: null };
3394
- this.children.forEach((child) => {
3395
- acc.accWidth += child.offsetWidth;
3396
- const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
3397
- // if previous item is hidden AND is NOT more element we hidde current
3398
- // OR if item has an overflow we hidde current
3399
- // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
3400
- // ELSE current is a display item
3401
- this.toggleItem(child, (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden));
3402
- // update previous item with current item
3403
- acc.previousItem = child;
3404
- });
3405
- };
3406
- /**
3407
- * Utility method to know if item overflow partialy or totaly in the container
3408
- *
3409
- * @param {number} cumulateWidth previous sibling elements cumulate width + item width
3410
- * @param {HTMLElement} item item HTML element
3411
- * @param {number} availableWidth container available width
3412
- * @returns {boolean} truthy if element is overflow
3413
- */
3414
- this.isOverflowElement = (cumulateWidth, item, availableWidth) => {
3415
- if (item.previousElementSibling === null || this.isMoreElement(item))
3416
- return false;
3417
- else if (!this.isMoreElement(item.nextElementSibling))
3418
- return cumulateWidth + this.moreElement.offsetWidth > availableWidth;
3419
- else
3420
- return cumulateWidth > availableWidth;
3421
- };
3422
- /**
3423
- * Utility method to know if a given element is the 'MORE' element
3424
- *
3425
- * @param {Element} element element to match with 'MORE' element
3426
- * @returns {boolean} truthy if element is the 'MORE' element
3427
- */
3428
- this.isMoreElement = (element) => element.getAttribute(OverflowBehaviorElements.MORE) !== null;
3429
- /**
3430
- * Toggle display item element
3431
- *
3432
- * @param {HTMLElement} item item to control
3433
- * @param {boolean} isHidden is item hidden
3434
- * @returns {void}
3435
- */
3436
- this.toggleItem = (item, isHidden) => {
3437
- const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));
3438
- if (this.isMoreElement(item))
3439
- this.toggleElement(this.moreElement, isHidden);
3440
- else if (mgActionMenuindex >= 0) {
3441
- this.toggleElement(item, isHidden);
3442
- this.toggleElement(this.moreElement.querySelector(`[${OverflowBehaviorElements.PROXY_INDEX}="${mgActionMenuindex}"]`), !isHidden);
3443
- }
3444
- };
3445
- /**
3446
- * Toggle element's hidde attribute
3447
- *
3448
- * @param {Element} element element to toggle
3449
- * @param {boolean} isHidden element is hidden
3450
- * @returns {void}
3451
- */
3452
- this.toggleElement = (element, isHidden) => {
3453
- if (isHidden)
3454
- element.setAttribute('hidden', '');
3455
- else
3456
- element.removeAttribute('hidden');
3457
- };
3458
- /**
3459
- * Remove hidden attributes on all items
3460
- *
3461
- * @returns {void}
3462
- */
3463
- this.restoreItems = () => {
3464
- this.children.forEach(item => item.removeAttribute('hidden'));
3465
- };
3466
- if (this.resizeObserver === undefined) {
3467
- // add resize observer
3468
- this.resizeObserver = new ResizeObserver(entries => {
3469
- entries.forEach(entry => {
3470
- this.run(entry.contentRect.width);
3471
- });
3472
- });
3473
- this.resizeObserver.observe(this.element);
3474
- }
3475
- }
3476
- }
3477
-
3478
3091
  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}";
3479
3092
 
3480
3093
  const MgMenu = class {
@@ -3521,45 +3134,23 @@ const MgMenu = class {
3521
3134
  });
3522
3135
  };
3523
3136
  /**
3524
- * render mg-menu-more
3137
+ * render mg-item-more
3525
3138
  *
3526
- * @returns {HTMLElement} formated mg-menu-item element
3527
- */
3528
- this.renderMgMenuMore = () => {
3529
- const moreElement = this.element.shadowRoot.querySelector(`[${OverflowBehaviorElements.MORE}]`);
3530
- this.menuItems.forEach((child) => {
3531
- const proxy = child.cloneNode(true);
3532
- moreElement.querySelector('mg-menu').appendChild(proxy);
3533
- });
3534
- const allMenuItem = Array.from(this.element.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
3535
- Array.from(moreElement.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
3536
- // manage click on proxy to mirror it on initial element
3537
- proxy.addEventListener('click', () => {
3538
- (allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
3539
- });
3540
- // manage status change miror in proxy
3541
- allMenuItem[index].addEventListener('status-change', (event) => {
3542
- proxy.setAttribute('status', event.detail);
3543
- });
3544
- });
3545
- this.element.appendChild(moreElement);
3546
- return this.element.querySelector(`[${OverflowBehaviorElements.MORE}]`);
3547
- };
3548
- /**
3549
- * Render mg-menu-item more element for overflow behavior
3550
- *
3551
- * @returns {HTMLElement} rendered mg-menu-item more element
3139
+ * @returns {void}
3552
3140
  */
3553
- this.renderMgMenuItemMore = () => {
3554
- var _a, _b, _c, _d, _e, _f, _g;
3555
- return (index.h("mg-menu-item", { "data-overflow-more": true }, index.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" }), index.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), index.h("mg-menu", { direction: Direction.VERTICAL, label: this.messages.moreLabel, size: (_g = this.moreitem) === null || _g === void 0 ? void 0 : _g.size })));
3141
+ this.renderMgItemMore = () => {
3142
+ // /!\ externalise item tag name to get a string type and bypass type checking when value is used in next createElement
3143
+ // by doing this we prevent stencil to generate a circular dependencies graph at build time with mg-item-more component.
3144
+ const item = 'mg-item-more';
3145
+ const mgItemMore = document.createElement(item);
3146
+ Object.assign(mgItemMore, this.itemMore);
3147
+ this.element.appendChild(mgItemMore);
3556
3148
  };
3557
3149
  this.label = undefined;
3558
- this.direction = Direction.HORIZONTAL;
3559
- this.moreitem = undefined;
3150
+ this.direction = mgMenu_conf.Direction.HORIZONTAL;
3151
+ this.itemMore = undefined;
3560
3152
  this.size = 'regular';
3561
3153
  this.isChildMenu = undefined;
3562
- this.hasOverflow = false;
3563
3154
  }
3564
3155
  validateLabel(newValue) {
3565
3156
  if (newValue === undefined) {
@@ -3567,21 +3158,18 @@ const MgMenu = class {
3567
3158
  }
3568
3159
  }
3569
3160
  validateDirection(newValue) {
3570
- if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {
3571
- throw new Error(`<${this.name}> prop "direction" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
3161
+ if (![mgMenu_conf.Direction.VERTICAL, mgMenu_conf.Direction.HORIZONTAL].includes(newValue)) {
3162
+ throw new Error(`<${this.name}> prop "direction" must be one of: ${mgMenu_conf.Direction.HORIZONTAL}, ${mgMenu_conf.Direction.VERTICAL}.`);
3572
3163
  }
3573
3164
  }
3574
- validateMoreItem(newValue) {
3575
- if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
3576
- throw new Error(`<${this.name}> prop "moreitem" must be paired with direction ${Direction.HORIZONTAL}.`);
3577
- }
3578
- else if (newValue !== undefined && !isMoreItem(newValue)) {
3579
- throw new Error(`<${this.name}> prop "moreitem" must match MoreItemType.`);
3165
+ validateItemMore(newValue) {
3166
+ if (newValue !== undefined && this.direction !== mgMenu_conf.Direction.HORIZONTAL) {
3167
+ throw new Error(`<${this.name}> prop "itemMore" must be paired with direction ${mgMenu_conf.Direction.HORIZONTAL}.`);
3580
3168
  }
3581
3169
  }
3582
3170
  validateSize(newValue) {
3583
- if (!sizes$2.includes(newValue)) {
3584
- throw new Error(`<${this.name}> prop "size" must be one of: ${sizes$2.join(', ')}.`);
3171
+ if (!mgMenu_conf.sizes.includes(newValue)) {
3172
+ throw new Error(`<${this.name}> prop "size" must be one of: ${mgMenu_conf.sizes.join(', ')}.`);
3585
3173
  }
3586
3174
  }
3587
3175
  /*************
@@ -3593,11 +3181,9 @@ const MgMenu = class {
3593
3181
  * @returns {void}
3594
3182
  */
3595
3183
  componentWillLoad() {
3596
- this.messages = initLocales(this.element).messages.plusMenu;
3597
- // validation
3598
3184
  this.validateDirection(this.direction);
3599
3185
  this.validateLabel(this.label);
3600
- this.validateMoreItem(this.moreitem);
3186
+ this.validateItemMore(this.itemMore);
3601
3187
  this.validateSize(this.size);
3602
3188
  }
3603
3189
  /**
@@ -3613,48 +3199,50 @@ const MgMenu = class {
3613
3199
  // store all menu-items
3614
3200
  this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
3615
3201
  this.isChildMenu = this.element.closest('mg-menu-item') !== null;
3616
- this.hasOverflow = this.direction === Direction.HORIZONTAL && !this.isChildMenu;
3617
- if (this.hasOverflow && isMoreItem(this.moreitem))
3618
- this.overflowBehavior = new OverflowBehavior(this.element, this.renderMgMenuMore);
3202
+ // add mg-item-more to manage OverflowBehavior
3203
+ if (this.direction === mgMenu_conf.Direction.HORIZONTAL && !this.isChildMenu)
3204
+ this.renderMgItemMore();
3205
+ // use mutation observer to improve reactivity
3206
+ new MutationObserver(entries => {
3207
+ const mgItemMore = this.element.querySelector('mg-item-more');
3208
+ // prevent infinit loop by exclude mg-item-more deletion entry
3209
+ if (entries.some(entry => entry.type === 'childList' && Array.from(entry.removedNodes).some(node => node.nodeName === 'MG-ITEM-MORE')))
3210
+ return;
3211
+ else if (mgItemMore !== null) {
3212
+ // render a new mg-item-more
3213
+ mgItemMore.remove();
3214
+ this.renderMgItemMore();
3215
+ }
3216
+ }).observe(this.element, { childList: true, characterData: true, subtree: true });
3619
3217
  }, 0);
3620
3218
  }
3621
3219
  /**
3622
- * Check add listeners to childs
3220
+ * Add listeners to items
3623
3221
  *
3624
3222
  * @returns {void}
3625
3223
  */
3626
3224
  componentDidRender() {
3627
- // add menu items listeners
3628
3225
  this.initMenuItemsListeners();
3629
3226
  }
3630
- /**
3631
- * Disconnect overflow ResizeObserver
3632
- *
3633
- * @returns {void} run overflow resize obeserver disconnexion
3634
- */
3635
- disconnectedCallback() {
3636
- if (this.hasOverflow)
3637
- this.overflowBehavior.disconnect();
3638
- }
3639
3227
  /**
3640
3228
  * Render
3641
3229
  *
3642
3230
  * @returns {HTMLElement} HTML Element
3643
3231
  */
3644
3232
  render() {
3645
- return (index.h(index.Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, index.h("slot", null), this.hasOverflow && isMoreItem(this.moreitem) && this.renderMgMenuItemMore()));
3233
+ return (index.h(index.Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, index.h("slot", null)));
3646
3234
  }
3647
3235
  get element() { return index.getElement(this); }
3648
3236
  static get watchers() { return {
3649
3237
  "label": ["validateLabel"],
3650
3238
  "direction": ["validateDirection"],
3651
- "moreitem": ["validateMoreItem"],
3239
+ "itemMore": ["validateItemMore"],
3652
3240
  "size": ["validateSize"]
3653
3241
  }; }
3654
3242
  };
3655
3243
  MgMenu.style = mgMenuCss;
3656
3244
 
3657
- 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}";
3245
+ 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{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}";
3658
3246
 
3659
3247
  const MgMenuItem = class {
3660
3248
  constructor(hostRef) {
@@ -3688,9 +3276,91 @@ const MgMenuItem = class {
3688
3276
  * Is component contextual direction match the given direction
3689
3277
  *
3690
3278
  * @param {MgMenuItem['direction']} direction in parent menu
3279
+ * @param {MgMenuItem['direction']} compareWith direction to compare with. Default: `this.direction`
3691
3280
  * @returns {boolean} true is direction match the direction propertie
3692
3281
  */
3693
- this.isDirection = (direction) => this.direction === direction;
3282
+ this.isDirection = (direction, compareWith = this.direction) => direction === compareWith;
3283
+ /**
3284
+ * Update displayNotificationBadge
3285
+ * current component notification badge have priority over the slot badge when submenu contain badge
3286
+ *
3287
+ * @returns {void} update displayNotificationBadge value
3288
+ */
3289
+ this.updateDisplayNotificationBadge = () => {
3290
+ const childMenu = this.element.querySelector('mg-menu');
3291
+ this.displayNotificationBadge =
3292
+ childMenu !== null &&
3293
+ Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
3294
+ };
3295
+ /**
3296
+ * Method to control if one of component children have active status
3297
+ *
3298
+ * @returns {boolean} truthy if component has active child
3299
+ */
3300
+ this.hasActiveChild = () => {
3301
+ var _a;
3302
+ 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);
3303
+ };
3304
+ /**
3305
+ * Validate slots
3306
+ *
3307
+ * @param {boolean} guard prevent action whith guard. Default: false.
3308
+ * @returns {void}
3309
+ */
3310
+ this.validateSlot = (guard = false) => {
3311
+ // slot title AND metadata validation
3312
+ // add title on label AND metada slots due to text-overflow on these element
3313
+ if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
3314
+ throw new Error(`<${this.name}> slot "label" is required.`);
3315
+ ['label', 'metadata'].forEach(slot => {
3316
+ Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
3317
+ if (element.textContent.trim().length < 1)
3318
+ throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
3319
+ if ((guard && element.getAttribute('title') === null) || !guard)
3320
+ element.setAttribute('title', element.textContent);
3321
+ });
3322
+ });
3323
+ };
3324
+ /**
3325
+ * Update status
3326
+ *
3327
+ * @param {Status[]} guard status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
3328
+ * @returns {void}
3329
+ */
3330
+ this.updateStatus = (guard = []) => {
3331
+ if (![Status$1.HIDDEN, Status$1.DISABLED, ...guard].includes(this.status)) {
3332
+ this.status = this.hasActiveChild() ? Status$1.ACTIVE : Status$1.VISIBLE;
3333
+ }
3334
+ };
3335
+ /**
3336
+ * Init event-listeners
3337
+ *
3338
+ * @returns {void}
3339
+ */
3340
+ this.initListeners = () => {
3341
+ var _a;
3342
+ // manage first sub-level menu-items
3343
+ Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).forEach(item => {
3344
+ if (item.nodeName === 'MG-MENU-ITEM') {
3345
+ // manage child menu listener
3346
+ item.addEventListener('status-change', () => {
3347
+ this.updateStatus();
3348
+ });
3349
+ }
3350
+ });
3351
+ };
3352
+ /**
3353
+ * Get mg-popover identifier
3354
+ *
3355
+ * @returns {MgPopover['identifier']} generated mg-popover identifier
3356
+ */
3357
+ this.getPopoverIdentifier = () => `${this.identifier}-popover`;
3358
+ /**
3359
+ * Condition to know if component should display a mg-popover
3360
+ *
3361
+ * @returns {boolean} truthy if component display popover
3362
+ */
3363
+ this.displayPopover = () => this.isDirection(mgMenu_conf.Direction.HORIZONTAL) && this.hasChildren && this.href === undefined;
3694
3364
  /************
3695
3365
  * Handlers *
3696
3366
  ************/
@@ -3718,35 +3388,13 @@ const MgMenuItem = class {
3718
3388
  this.handlePopoverDisplay = (event) => {
3719
3389
  this.expanded = event.detail;
3720
3390
  };
3721
- /**
3722
- * Update displayNotificationBadge
3723
- * current component notification badge have priority over the slot badge when submenu contain badge
3724
- *
3725
- * @returns {void} update displayNotificationBadge value
3726
- */
3727
- this.updateDisplayNotificationBadge = () => {
3728
- const childMenu = this.element.querySelector('mg-menu');
3729
- this.displayNotificationBadge =
3730
- childMenu !== null &&
3731
- Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && subItem.getAttribute('hidden') === null);
3732
- };
3733
- /**
3734
- * Method to control if one of component children have active status
3735
- *
3736
- * @returns {boolean} truthy if component has active child
3737
- */
3738
- this.hasActiveChild = () => {
3739
- var _a;
3740
- return Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || [])
3741
- .filter(element => element.nodeName === 'MG-MENU-ITEM')
3742
- .some((element) => this.hasStatus(element, Status$1.ACTIVE) && element.getAttribute('hidden') === null);
3743
- };
3744
3391
  /**
3745
3392
  * Render slot
3746
3393
  *
3747
3394
  * @returns {HTMLElement} HTML Element
3748
3395
  */
3749
3396
  this.renderSlot = () => index.h("slot", null);
3397
+ this.identifier = createID('mg-menu-item');
3750
3398
  this.href = undefined;
3751
3399
  this.status = Status$1.VISIBLE;
3752
3400
  this.expanded = false;
@@ -3754,6 +3402,7 @@ const MgMenuItem = class {
3754
3402
  this.navigationButtonClassList = new ClassList([this.navigationButton]);
3755
3403
  this.direction = undefined;
3756
3404
  this.isInMainMenu = undefined;
3405
+ this.isItemMore = undefined;
3757
3406
  this.hasChildren = false;
3758
3407
  this.displayNotificationBadge = undefined;
3759
3408
  }
@@ -3790,11 +3439,33 @@ const MgMenuItem = class {
3790
3439
  this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
3791
3440
  this.navigationButtonClassList.add(`${this.navigationButton}--size-${newValue}`);
3792
3441
  }
3442
+ validateDirection(newValue) {
3443
+ // manage menu items style depending to parent menu horientation
3444
+ this.element.setAttribute(`data-style-direction-${newValue}`, '');
3445
+ this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
3446
+ // manage all sub levels child menu-items level with data-level attribut
3447
+ if (this.isDirection(mgMenu_conf.Direction.VERTICAL, newValue)) {
3448
+ Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
3449
+ item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
3450
+ });
3451
+ }
3452
+ }
3793
3453
  validateHasChildren(newValue) {
3794
3454
  if (newValue && this.element.href !== undefined) {
3795
3455
  throw new Error(`<${this.name}> prop "href" is unauthorizied when element is a parent.`);
3796
3456
  }
3797
3457
  }
3458
+ /**
3459
+ * Render popover clickoutside guard for content slot
3460
+ *
3461
+ * @returns {void}
3462
+ */
3463
+ updatePopoverGuard() {
3464
+ if (this.displayPopover())
3465
+ Array.from(this.element.children)
3466
+ .filter((child) => child.getAttribute('slot') === null && child.nodeName !== 'MG-MENU' && Boolean(child.dataset))
3467
+ .forEach((slot) => (slot.dataset.mgPopoverGuard = this.getPopoverIdentifier()));
3468
+ }
3798
3469
  /*************
3799
3470
  * Lifecycle *
3800
3471
  *************/
@@ -3807,11 +3478,13 @@ const MgMenuItem = class {
3807
3478
  // has children items that is NOT [slot='image' | 'information' | 'label' | 'metadata'] element
3808
3479
  // we store only matching elements
3809
3480
  this.hasChildren = Array.from(this.element.children).some(child => !['image', 'information', 'label', 'metadata'].includes(child.getAttribute('slot')));
3481
+ this.badgeLabel = mgMenu_conf.initLocales(this.element).messages.plusMenu.badgeLabel;
3482
+ this.isItemMore = this.element.dataset.overflowMore !== undefined;
3810
3483
  // Validate props
3811
- this.validateSize(this.size);
3812
3484
  this.validateStatus(this.status);
3813
3485
  this.validateExpanded(this.expanded);
3814
- this.badgeLabel = initLocales(this.element).messages.plusMenu.badgeLabel;
3486
+ // Validate states
3487
+ this.validateSize(this.size);
3815
3488
  }
3816
3489
  /**
3817
3490
  * Check if component slots configuration
@@ -3819,63 +3492,36 @@ const MgMenuItem = class {
3819
3492
  * @returns {ReturnType<typeof setTimeout>} timeout
3820
3493
  */
3821
3494
  componentDidLoad() {
3822
- // slot title AND metadata validation
3823
- // add title on label AND metada slots due to text-overflow on these element
3824
- if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
3825
- throw new Error(`<${this.name}> slot "label" is required.`);
3826
- ['label', 'metadata'].forEach(slot => {
3827
- Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
3828
- if (element.textContent.trim().length < 1)
3829
- throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
3830
- if (element.getAttribute('title') === null)
3831
- element.setAttribute('title', element.textContent);
3832
- });
3833
- });
3495
+ // validation
3496
+ this.validateSlot(true);
3834
3497
  // update props and states after componentDidLoad hook
3835
3498
  // return a promise to process action only in the FIRST render().
3836
3499
  // https://stenciljs.com/docs/component-lifecycle#componentwillload
3837
3500
  return setTimeout(() => {
3838
- var _a;
3839
3501
  // define menu-item context states
3840
3502
  const menu = this.element.closest('mg-menu');
3841
- this.direction = this.element.getAttribute(OverflowBehaviorElements.MORE) !== null || menu === null ? Direction.HORIZONTAL : menu.direction;
3842
- this.size = menu === null || menu === void 0 ? void 0 : menu.size;
3843
- this.isInMainMenu = this.element.parentElement.closest('mg-menu-item') === null;
3503
+ this.direction = this.isItemMore || menu === null ? mgMenu_conf.Direction.HORIZONTAL : menu.direction;
3504
+ this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
3505
+ if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined)
3506
+ this.size = menu.size;
3507
+ if (this.isItemMore)
3508
+ this.size = this.element.dataset.size;
3844
3509
  // when main menu item contain an active item it will get the active style
3845
3510
  // AND if item is in vertical menu it will be expanded
3846
- if (this.hasActiveChild()) {
3847
- this.status = Status$1.ACTIVE;
3848
- if (this.isInMainMenu)
3849
- this.expanded = this.isDirection(Direction.VERTICAL);
3850
- }
3851
- // manage menu items style depending to parent menu horientation
3852
- this.element.setAttribute(`data-style-direction-${this.direction}`, '');
3853
- this.navigationButtonClassList.add(`${this.navigationButton}--${this.direction}`);
3511
+ if (this.hasActiveChild() && this.isInMainMenu)
3512
+ this.expanded = this.isDirection(mgMenu_conf.Direction.VERTICAL);
3513
+ this.updateStatus([Status$1.ACTIVE]);
3854
3514
  this.updateDisplayNotificationBadge();
3855
- // manage all sub levels child menu-items level with data-level attribut
3856
- if (this.isDirection(Direction.VERTICAL)) {
3857
- Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
3858
- item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
3859
- });
3860
- }
3861
- // manage first sub-level menu-items
3862
- 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');
3863
- childItems.forEach(item => {
3864
- const updateStatus = () => {
3865
- if (![Status$1.HIDDEN, Status$1.DISABLED].includes(this.status)) {
3866
- this.status = this.hasActiveChild() ? Status$1.ACTIVE : Status$1.VISIBLE;
3867
- }
3868
- };
3869
- // manage child menu listener
3870
- item.addEventListener('status-change', () => {
3871
- updateStatus();
3872
- });
3873
- new MutationObserver(mutationsList => {
3874
- if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
3875
- updateStatus();
3876
- this.updateDisplayNotificationBadge();
3877
- }).observe(item, { attributes: true });
3878
- });
3515
+ this.updatePopoverGuard();
3516
+ // manage child dom changes with mutationObserver and listzners
3517
+ this.initListeners();
3518
+ new MutationObserver(mutationsList => {
3519
+ if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
3520
+ this.updateStatus();
3521
+ if (mutationsList.some(mutation => mutation.type === 'characterData'))
3522
+ this.validateSlot();
3523
+ this.updateDisplayNotificationBadge();
3524
+ }).observe(this.element, { attributes: true, childList: true, characterData: true, subtree: true });
3879
3525
  }, 0);
3880
3526
  }
3881
3527
  /**
@@ -3899,9 +3545,9 @@ const MgMenuItem = class {
3899
3545
  render() {
3900
3546
  const getContainerClasses = () => ({
3901
3547
  [`${this.name}__collapse-container`]: true,
3902
- [`${this.name}__collapse-container--first-level`]: this.isInMainMenu && this.isDirection(Direction.HORIZONTAL),
3548
+ [`${this.name}__collapse-container--first-level`]: this.isInMainMenu && this.isDirection(mgMenu_conf.Direction.HORIZONTAL),
3903
3549
  });
3904
- return (index.h(index.Host, { role: "menuitem", "aria-haspopup": this.hasChildren.toString() }, this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined ? (index.h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay }, this.renderInteractiveElement(), index.h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
3550
+ return (index.h(index.Host, { role: !this.isItemMore && 'menuitem', "aria-haspopup": !this.isItemMore && this.hasChildren.toString() }, this.displayPopover() ? (index.h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay, identifier: this.getPopoverIdentifier() }, this.renderInteractiveElement(), index.h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
3905
3551
  this.renderInteractiveElement(),
3906
3552
  index.h("div", { key: "vertical-container", class: getContainerClasses(), hidden: !this.expanded }, this.renderSlot()),
3907
3553
  ])));
@@ -3911,6 +3557,7 @@ const MgMenuItem = class {
3911
3557
  "status": ["validateStatus"],
3912
3558
  "expanded": ["validateExpanded"],
3913
3559
  "size": ["validateSize"],
3560
+ "direction": ["validateDirection"],
3914
3561
  "hasChildren": ["validateHasChildren"]
3915
3562
  }; }
3916
3563
  };
@@ -4061,7 +3708,7 @@ const MgMessage = class {
4061
3708
  */
4062
3709
  componentWillLoad() {
4063
3710
  // Get locales
4064
- this.messages = initLocales(this.element).messages;
3711
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
4065
3712
  // Validate
4066
3713
  this.validateVariant(this.variant);
4067
3714
  // Check if close button is an can be activated
@@ -4195,7 +3842,7 @@ const MgModal = class {
4195
3842
  // Store body overflow
4196
3843
  this.bodyOverflow = document.body.style.overflow;
4197
3844
  // Get locales
4198
- this.messages = initLocales(this.element).messages;
3845
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
4199
3846
  // Validate
4200
3847
  this.hasActions = this.element.querySelector('[slot="actions"]') !== null;
4201
3848
  this.hasContent = this.element.querySelector('[slot="content"]') !== null;
@@ -4333,7 +3980,7 @@ const MgPagination = class {
4333
3980
  */
4334
3981
  componentWillLoad() {
4335
3982
  // Get locales
4336
- this.messages = initLocales(this.element).messages;
3983
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
4337
3984
  // Validate
4338
3985
  this.validateTotalPages(this.totalPages);
4339
3986
  this.validateCurrentPage(this.currentPage);
@@ -4490,7 +4137,7 @@ const MgPanel = class {
4490
4137
  */
4491
4138
  componentWillLoad() {
4492
4139
  // Get locales
4493
- this.messages = initLocales(this.element).messages;
4140
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
4494
4141
  // Validate
4495
4142
  this.validatetitlePattern(this.titlePattern);
4496
4143
  this.validatePanelTitle(this.panelTitle);
@@ -6422,7 +6069,7 @@ const MgPopover = class {
6422
6069
  // Get windows to attach events
6423
6070
  this.windows = getWindows(window);
6424
6071
  // Get locales
6425
- this.messages = initLocales(this.element).messages;
6072
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
6426
6073
  this.validateArrowHide(this.arrowHide);
6427
6074
  }
6428
6075
  /**
@@ -6537,7 +6184,7 @@ const MgSkipLinks = class {
6537
6184
  */
6538
6185
  componentWillLoad() {
6539
6186
  this.validateLinks(this.links);
6540
- this.messages = initLocales(this.element).messages;
6187
+ this.messages = mgMenu_conf.initLocales(this.element).messages;
6541
6188
  }
6542
6189
  /**
6543
6190
  * Render
@@ -6569,7 +6216,7 @@ var Status;
6569
6216
  */
6570
6217
  const sizes = ['regular', 'large'];
6571
6218
 
6572
- 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}";
6219
+ 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}";
6573
6220
 
6574
6221
  /**
6575
6222
  * type TabItem validation function
@@ -7066,6 +6713,7 @@ const MgTooltip = class {
7066
6713
  if (typeof newValue !== 'string' || newValue.trim() === '') {
7067
6714
  throw new Error('<mg-tooltip> prop "message" is required.');
7068
6715
  }
6716
+ this.popper.update();
7069
6717
  }
7070
6718
  handleDisplay(newValue) {
7071
6719
  if (newValue) {
@@ -7097,10 +6745,13 @@ const MgTooltip = class {
7097
6745
  this.tooltipedElement = interactiveElement || slotElement;
7098
6746
  // Check if slotted element is a disabled mg-button
7099
6747
  // In this case we wrap the mg-button into a div to enable the tooltip
7100
- if (slotElement.tagName === 'MG-BUTTON') {
6748
+ if (['MG-BUTTON', 'BUTTON'].includes(slotElement.tagName)) {
7101
6749
  new MutationObserver(mutationList => {
7102
- if (mutationList.some(mutation => mutation.attributeName === 'aria-disabled')) {
6750
+ if (mutationList.some(mutation => ['aria-disabled', 'disabled'].includes(mutation.attributeName))) {
7103
6751
  this.setMgButtonWrapper(slotElement);
6752
+ // Since Firefox doesn't trigger a "blur" event when the "disabled" attribute is added or removed from a button
6753
+ // we have to manually unlock the guard because the "blur" handler of the tooltipedElement won't do it.
6754
+ this.resetGuard();
7104
6755
  this.initTooltip(slotElement, interactiveElement);
7105
6756
  }
7106
6757
  }).observe(slotElement, { attributes: true });