@mgdis/mg-components 5.5.0 → 5.7.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 (242) hide show
  1. package/dist/cjs/{index-c3450336.js → index-5e7ede97.js} +120 -4
  2. package/dist/cjs/loader.cjs.js +4 -3
  3. package/dist/cjs/{mg-badge_30.cjs.entry.js → mg-action-more_31.cjs.entry.js} +1223 -547
  4. package/dist/cjs/mg-components.cjs.js +7 -3
  5. package/dist/collection/collection-manifest.json +6 -5
  6. package/dist/collection/components/atoms/mg-badge/mg-badge.conf.js +1 -1
  7. package/dist/collection/components/atoms/mg-badge/mg-badge.css +13 -0
  8. package/dist/collection/components/atoms/mg-badge/mg-badge.js +4 -4
  9. package/dist/collection/components/atoms/mg-button/mg-button.css +9 -22
  10. package/dist/collection/components/atoms/mg-button/mg-button.js +1 -1
  11. package/dist/collection/components/atoms/mg-card/mg-card.css +13 -6
  12. package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +38 -28
  13. package/dist/collection/components/atoms/mg-icon/mg-icon.js +3 -3
  14. package/dist/collection/components/atoms/mg-tag/mg-tag.css +6 -6
  15. package/dist/collection/components/atoms/mg-tag/mg-tag.js +4 -4
  16. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +2 -0
  17. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +14 -17
  18. package/dist/collection/components/molecules/inputs/MgInput.js +6 -1
  19. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.css +4 -3
  20. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +3 -2
  21. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.css +7 -3
  22. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +5 -2
  23. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +7 -3
  24. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +1 -1
  25. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +7 -3
  26. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.css +4 -3
  27. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +2 -1
  28. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +7 -3
  29. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +8 -4
  30. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +7 -3
  31. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +7 -3
  32. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +1 -1
  33. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.css +4 -4
  34. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +17 -0
  35. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.css +27 -0
  36. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +141 -19
  37. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.conf.js +0 -4
  38. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +48 -21
  39. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +139 -71
  40. package/dist/collection/components/molecules/mg-action-more/mg-action-more.conf.js +1 -0
  41. package/dist/collection/components/molecules/mg-action-more/mg-action-more.css +38 -0
  42. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +252 -0
  43. package/dist/collection/components/molecules/mg-form/mg-form.js +2 -2
  44. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +4 -3
  45. package/dist/collection/components/molecules/mg-message/mg-message.css +7 -0
  46. package/dist/collection/components/molecules/mg-message/mg-message.js +54 -13
  47. package/dist/collection/components/molecules/mg-modal/mg-modal.css +8 -1
  48. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +19 -1
  49. package/dist/collection/components/molecules/mg-panel/mg-panel.css +7 -0
  50. package/dist/collection/components/molecules/mg-panel/mg-panel.js +2 -2
  51. package/dist/collection/components/molecules/mg-popover/mg-popover.css +72 -15
  52. package/dist/collection/components/molecules/mg-popover/mg-popover.js +64 -7
  53. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +33 -1
  54. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +12 -7
  55. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +105 -57
  56. package/dist/collection/locales/en/messages.json +10 -1
  57. package/dist/collection/locales/fr/messages.json +10 -1
  58. package/dist/collection/locales/index.js +3 -26
  59. package/dist/collection/styles/a11y.scss +32 -0
  60. package/dist/collection/styles/components.scss +3 -0
  61. package/dist/collection/styles/fonts.scss +21 -0
  62. package/dist/collection/styles/form.scss +3 -0
  63. package/dist/collection/styles/global.scss +87 -0
  64. package/dist/collection/styles/layout.scss +29 -0
  65. package/dist/collection/styles/main.scss +23 -0
  66. package/dist/collection/styles/mg-icon-animation.scss +6 -0
  67. package/dist/collection/styles/navigation-button.scss +77 -0
  68. package/dist/collection/styles/reset-mg-card-slotted-variables.scss +9 -0
  69. package/dist/collection/styles/typography.scss +75 -0
  70. package/dist/collection/styles/utilities.scss +21 -0
  71. package/dist/collection/utils/behaviors.utils.js +151 -0
  72. package/dist/collection/utils/components.utils.js +52 -0
  73. package/dist/collection/utils/locale.utils.js +28 -6
  74. package/dist/collection/utils/unit.test.utils.js +65 -32
  75. package/dist/collection/variables.css +11 -10
  76. package/dist/components/MgInput.js +6 -1
  77. package/dist/components/components.utils.js +53 -1
  78. package/dist/components/index.d.ts +10 -0
  79. package/dist/components/index.js +2 -1
  80. package/dist/components/index2.js +79 -20
  81. package/dist/components/mg-action-more.d.ts +11 -0
  82. package/dist/components/mg-action-more.js +215 -0
  83. package/dist/components/mg-badge2.js +5 -5
  84. package/dist/components/mg-button2.js +2 -2
  85. package/dist/components/mg-card2.js +1 -1
  86. package/dist/components/mg-form.js +2 -2
  87. package/dist/components/mg-icon2.js +41 -31
  88. package/dist/components/mg-illustrated-message.js +4 -3
  89. package/dist/components/mg-input-checkbox.js +3 -3
  90. package/dist/components/mg-input-date.js +7 -5
  91. package/dist/components/mg-input-numeric.js +3 -4
  92. package/dist/components/mg-input-password.js +1 -1
  93. package/dist/components/mg-input-radio.js +2 -2
  94. package/dist/components/mg-input-select2.js +9 -5
  95. package/dist/components/mg-input-text2.js +1 -1
  96. package/dist/components/mg-input-textarea.js +2 -2
  97. package/dist/components/mg-input-toggle.js +1 -1
  98. package/dist/components/mg-menu-item.js +1 -253
  99. package/dist/components/mg-menu-item2.js +520 -0
  100. package/dist/components/mg-menu.js +1 -129
  101. package/dist/components/mg-menu2.js +247 -0
  102. package/dist/components/mg-message.js +55 -14
  103. package/dist/components/mg-modal.js +1 -1
  104. package/dist/components/mg-pagination.js +3 -1
  105. package/dist/components/mg-panel.js +3 -3
  106. package/dist/components/mg-popover.js +1 -190
  107. package/dist/components/mg-popover2.js +226 -0
  108. package/dist/components/mg-skip-links.js +16 -2
  109. package/dist/components/mg-tabs.js +104 -55
  110. package/dist/components/mg-tag.js +5 -5
  111. package/dist/components/mg-tooltip2.js +15 -18
  112. package/dist/esm/{index-78edde1d.js → index-03cceb11.js} +120 -5
  113. package/dist/esm/loader.js +4 -3
  114. package/dist/esm/{mg-badge_30.entry.js → mg-action-more_31.entry.js} +1223 -548
  115. package/dist/esm/mg-components.js +4 -3
  116. package/dist/esm/polyfills/css-shim.js +1 -1
  117. package/dist/mg-components/locales/en/messages.json +10 -1
  118. package/dist/mg-components/locales/fr/messages.json +10 -1
  119. package/dist/mg-components/mg-components.css +1 -1
  120. package/dist/mg-components/mg-components.esm.js +1 -1
  121. package/dist/mg-components/p-4cfd5423.entry.js +1 -0
  122. package/dist/mg-components/p-e126dd84.js +2 -0
  123. package/dist/mg-components/styles/a11y.scss +32 -0
  124. package/dist/mg-components/styles/components.scss +3 -0
  125. package/dist/mg-components/styles/fonts.scss +21 -0
  126. package/dist/mg-components/styles/form.scss +3 -0
  127. package/dist/mg-components/styles/global.scss +87 -0
  128. package/dist/mg-components/styles/layout.scss +29 -0
  129. package/dist/mg-components/styles/main.scss +23 -0
  130. package/dist/mg-components/styles/mg-icon-animation.scss +6 -0
  131. package/dist/mg-components/styles/navigation-button.scss +77 -0
  132. package/dist/mg-components/styles/reset-mg-card-slotted-variables.scss +9 -0
  133. package/dist/mg-components/styles/typography.scss +75 -0
  134. package/dist/mg-components/styles/utilities.scss +21 -0
  135. package/dist/mg-components/variables.css +11 -10
  136. package/dist/types/components/atoms/mg-badge/mg-badge.conf.d.ts +2 -2
  137. package/dist/types/components/atoms/mg-button/mg-button.conf.d.ts +2 -2
  138. package/dist/types/components/atoms/mg-icon/mg-icon.conf.d.ts +2 -2
  139. package/dist/types/components/atoms/mg-tag/mg-tag.conf.d.ts +1 -1
  140. package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +2 -2
  141. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +2 -2
  142. package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.conf.d.ts +1 -1
  143. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.conf.d.ts +2 -2
  144. package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.d.ts +1 -1
  145. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.conf.d.ts +1 -1
  146. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +37 -0
  147. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +51 -3
  148. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +0 -8
  149. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +61 -15
  150. package/dist/types/components/molecules/mg-action-more/mg-action-more.conf.d.ts +42 -0
  151. package/dist/types/components/molecules/mg-action-more/mg-action-more.d.ts +81 -0
  152. package/dist/types/components/molecules/mg-message/mg-message.d.ts +21 -4
  153. package/dist/types/components/molecules/mg-pagination/mg-pagination.d.ts +4 -0
  154. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +13 -0
  155. package/dist/types/components/molecules/mg-skip-links/mg-skip-links.conf.d.ts +1 -1
  156. package/dist/types/components/molecules/mg-skip-links/mg-skip-links.d.ts +15 -0
  157. package/dist/types/components/molecules/mg-tabs/mg-tabs.conf.d.ts +5 -3
  158. package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +22 -12
  159. package/dist/types/components.d.ts +98 -12
  160. package/dist/types/locales/index.d.ts +21 -10
  161. package/dist/types/stencil-public-runtime.d.ts +48 -3
  162. package/dist/types/utils/behaviors.utils.d.ts +77 -0
  163. package/dist/types/utils/components.utils.d.ts +14 -0
  164. package/dist/types/utils/locale.utils.d.ts +16 -3
  165. package/dist/types/utils/unit.test.utils.d.ts +68 -14
  166. package/loader/index.d.ts +9 -0
  167. package/package.json +28 -27
  168. package/readme.md +22 -31
  169. package/dist/.storybook/utils.js +0 -24
  170. package/dist/collection/components/atoms/mg-badge/doc/mg-badge.stories.js +0 -27
  171. package/dist/collection/components/atoms/mg-button/doc/mg-button.stories.js +0 -38
  172. package/dist/collection/components/atoms/mg-card/doc/mg-card.stories.js +0 -18
  173. package/dist/collection/components/atoms/mg-character-left/doc/mg-character-left.stories.js +0 -20
  174. package/dist/collection/components/atoms/mg-divider/doc/mg-divider.stories.js +0 -18
  175. package/dist/collection/components/atoms/mg-icon/doc/mg-icon.stories.js +0 -41
  176. package/dist/collection/components/atoms/mg-input-title/doc/mg-input-title.stories.js +0 -21
  177. package/dist/collection/components/atoms/mg-tag/doc/mg-tag.stories.js +0 -22
  178. package/dist/collection/components/atoms/mg-tooltip/doc/mg-tooltip.stories.js +0 -50
  179. package/dist/collection/components/molecules/inputs/mg-input-checkbox/doc/mg-input-checkbox.stories.js +0 -50
  180. package/dist/collection/components/molecules/inputs/mg-input-date/doc/mg-input-date.stories.js +0 -43
  181. package/dist/collection/components/molecules/inputs/mg-input-numeric/doc/mg-input-numeric.stories.js +0 -68
  182. package/dist/collection/components/molecules/inputs/mg-input-password/doc/mg-input-password.stories.js +0 -46
  183. package/dist/collection/components/molecules/inputs/mg-input-radio/doc/mg-input-radio.stories.js +0 -59
  184. package/dist/collection/components/molecules/inputs/mg-input-select/doc/mg-input-select.stories.js +0 -77
  185. package/dist/collection/components/molecules/inputs/mg-input-text/doc/mg-input-text.stories.js +0 -110
  186. package/dist/collection/components/molecules/inputs/mg-input-textarea/doc/mg-input-textarea.stories.js +0 -54
  187. package/dist/collection/components/molecules/inputs/mg-input-toggle/doc/mg-input-toggle.stories.js +0 -51
  188. package/dist/collection/components/molecules/menu/mg-menu/doc/mg-menu.stories.js +0 -87
  189. package/dist/collection/components/molecules/menu/mg-menu-item/doc/mg-menu-item.stories.js +0 -39
  190. package/dist/collection/components/molecules/mg-details/doc/mg-details.stories.js +0 -24
  191. package/dist/collection/components/molecules/mg-form/doc/mg-form.stories.js +0 -47
  192. package/dist/collection/components/molecules/mg-illustrated-message/doc/mg-illustrated-message.stories.js +0 -19
  193. package/dist/collection/components/molecules/mg-message/doc/mg-message.stories.js +0 -39
  194. package/dist/collection/components/molecules/mg-modal/doc/mg-modal.stories.js +0 -39
  195. package/dist/collection/components/molecules/mg-pagination/doc/mg-pagination.stories.js +0 -20
  196. package/dist/collection/components/molecules/mg-panel/doc/mg-panel.stories.js +0 -22
  197. package/dist/collection/components/molecules/mg-popover/doc/mg-popover.stories.js +0 -34
  198. package/dist/collection/components/molecules/mg-skip-links/doc/mg-skip-links.stories.js +0 -24
  199. package/dist/collection/components/molecules/mg-tabs/doc/mg-tabs.stories.js +0 -51
  200. package/dist/collection/stories/grids.stories.js +0 -7
  201. package/dist/collection/stories/helpers.stories.js +0 -23
  202. package/dist/collection/stories/icons.stories.js +0 -25
  203. package/dist/collection/stories/typography.stories.js +0 -24
  204. package/dist/components/locale.utils.js +0 -40
  205. package/dist/components/mg-menu.conf.js +0 -10
  206. package/dist/mg-components/p-125c54ca.js +0 -2
  207. package/dist/mg-components/p-4961c96c.entry.js +0 -1
  208. package/dist/types/components/atoms/mg-badge/doc/mg-badge.stories.d.ts +0 -13
  209. package/dist/types/components/atoms/mg-button/doc/mg-button.stories.d.ts +0 -16
  210. package/dist/types/components/atoms/mg-card/doc/mg-card.stories.d.ts +0 -6
  211. package/dist/types/components/atoms/mg-character-left/doc/mg-character-left.stories.d.ts +0 -6
  212. package/dist/types/components/atoms/mg-divider/doc/mg-divider.stories.d.ts +0 -6
  213. package/dist/types/components/atoms/mg-icon/doc/mg-icon.stories.d.ts +0 -26
  214. package/dist/types/components/atoms/mg-input-title/doc/mg-input-title.stories.d.ts +0 -6
  215. package/dist/types/components/atoms/mg-tag/doc/mg-tag.stories.d.ts +0 -6
  216. package/dist/types/components/atoms/mg-tooltip/doc/mg-tooltip.stories.d.ts +0 -18
  217. package/dist/types/components/molecules/inputs/mg-input-checkbox/doc/mg-input-checkbox.stories.d.ts +0 -11
  218. package/dist/types/components/molecules/inputs/mg-input-date/doc/mg-input-date.stories.d.ts +0 -12
  219. package/dist/types/components/molecules/inputs/mg-input-numeric/doc/mg-input-numeric.stories.d.ts +0 -32
  220. package/dist/types/components/molecules/inputs/mg-input-password/doc/mg-input-password.stories.d.ts +0 -22
  221. package/dist/types/components/molecules/inputs/mg-input-radio/doc/mg-input-radio.stories.d.ts +0 -20
  222. package/dist/types/components/molecules/inputs/mg-input-select/doc/mg-input-select.stories.d.ts +0 -34
  223. package/dist/types/components/molecules/inputs/mg-input-text/doc/mg-input-text.stories.d.ts +0 -39
  224. package/dist/types/components/molecules/inputs/mg-input-textarea/doc/mg-input-textarea.stories.d.ts +0 -19
  225. package/dist/types/components/molecules/inputs/mg-input-toggle/doc/mg-input-toggle.stories.d.ts +0 -12
  226. package/dist/types/components/molecules/menu/mg-menu/doc/mg-menu.stories.d.ts +0 -17
  227. package/dist/types/components/molecules/menu/mg-menu-item/doc/mg-menu-item.stories.d.ts +0 -12
  228. package/dist/types/components/molecules/mg-details/doc/mg-details.stories.d.ts +0 -11
  229. package/dist/types/components/molecules/mg-form/doc/mg-form.stories.d.ts +0 -11
  230. package/dist/types/components/molecules/mg-illustrated-message/doc/mg-illustrated-message.stories.d.ts +0 -6
  231. package/dist/types/components/molecules/mg-message/doc/mg-message.stories.d.ts +0 -26
  232. package/dist/types/components/molecules/mg-modal/doc/mg-modal.stories.d.ts +0 -13
  233. package/dist/types/components/molecules/mg-pagination/doc/mg-pagination.stories.d.ts +0 -11
  234. package/dist/types/components/molecules/mg-panel/doc/mg-panel.stories.d.ts +0 -11
  235. package/dist/types/components/molecules/mg-popover/doc/mg-popover.stories.d.ts +0 -22
  236. package/dist/types/components/molecules/mg-skip-links/doc/mg-skip-links.stories.d.ts +0 -11
  237. package/dist/types/components/molecules/mg-tabs/doc/mg-tabs.stories.d.ts +0 -20
  238. package/dist/types/home/runner/work/mg-components/mg-components/.stencil/.storybook/utils.d.ts +0 -1
  239. package/dist/types/stories/grids.stories.d.ts +0 -5
  240. package/dist/types/stories/helpers.stories.d.ts +0 -13
  241. package/dist/types/stories/icons.stories.d.ts +0 -13
  242. package/dist/types/stories/typography.stories.d.ts +0 -5
@@ -1,16 +1,19 @@
1
1
  import { h, Host } from '@stencil/core';
2
- import { Direction } from './mg-menu.conf';
2
+ import { OverflowBehavior, OverflowBehaviorElements } from '../../../../utils/behaviors.utils';
3
+ import { Direction, isMoreItem, sizes } from './mg-menu.conf';
4
+ import { initLocales } from '../../../../locales';
3
5
  export class MgMenu {
4
6
  constructor() {
5
7
  /************
6
8
  * Internal *
7
9
  ************/
8
10
  this.name = 'mg-menu';
11
+ this.menuItems = [];
9
12
  this.focusedMenuItem = 0;
10
13
  /**
11
14
  * Close matching menu-item
12
15
  *
13
- * @param {HTMLMgMenuItemElement} item menu-item to close
16
+ * @param {HTMLElement} item menu-item to close
14
17
  * @param {boolean} condition addionnal condition
15
18
  * @returns {void}
16
19
  */
@@ -19,12 +22,15 @@ export class MgMenu {
19
22
  item.expanded = false;
20
23
  }
21
24
  };
25
+ /*************
26
+ * Methods *
27
+ *************/
22
28
  /**
23
29
  * Store menu-items on component init and add listeners
30
+ *
31
+ * @returns {void}
24
32
  */
25
- this.initMenuItems = () => {
26
- // store all menu-items
27
- this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
33
+ this.initMenuItemsListeners = () => {
28
34
  // add listeners on menu item and edit index
29
35
  this.menuItems.forEach((item, menuItemIndex) => {
30
36
  ['click', 'focus'].forEach(trigger => {
@@ -38,9 +44,46 @@ export class MgMenu {
38
44
  });
39
45
  });
40
46
  };
47
+ /**
48
+ * render mg-menu-more
49
+ *
50
+ * @returns {HTMLElement} formated mg-menu-item element
51
+ */
52
+ this.renderMgMenuMore = () => {
53
+ const moreElement = this.element.shadowRoot.querySelector(`[${OverflowBehaviorElements.MORE}]`);
54
+ this.menuItems.forEach((child) => {
55
+ const proxy = child.cloneNode(true);
56
+ moreElement.querySelector('mg-menu').appendChild(proxy);
57
+ });
58
+ const allMenuItem = Array.from(this.element.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
59
+ Array.from(moreElement.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
60
+ // manage click on proxy to mirror it on initial element
61
+ proxy.addEventListener('click', () => {
62
+ (allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
63
+ });
64
+ // manage status change miror in proxy
65
+ allMenuItem[index].addEventListener('status-change', (event) => {
66
+ proxy.setAttribute('status', event.detail);
67
+ });
68
+ });
69
+ this.element.appendChild(moreElement);
70
+ return this.element.querySelector(`[${OverflowBehaviorElements.MORE}]`);
71
+ };
72
+ /**
73
+ * Render mg-menu-item more element for overflow behavior
74
+ *
75
+ * @returns {HTMLElement} rendered mg-menu-item more element
76
+ */
77
+ this.renderMgMenuItemMore = () => {
78
+ var _a, _b, _c, _d, _e, _f, _g;
79
+ return (h("mg-menu-item", { "data-overflow-more": true }, h("mg-icon", { icon: ((_b = (_a = this.moreitem) === null || _a === void 0 ? void 0 : _a.mgIcon) === null || _b === void 0 ? void 0 : _b.icon) || 'ellipsis-vertical', slot: "image" }), h("span", { class: { 'sr-only': !((_d = (_c = this.moreitem) === null || _c === void 0 ? void 0 : _c.slotLabel) === null || _d === void 0 ? void 0 : _d.display) }, slot: "label" }, ((_f = (_e = this.moreitem) === null || _e === void 0 ? void 0 : _e.slotLabel) === null || _f === void 0 ? void 0 : _f.label) || this.messages.moreLabel), h("mg-menu", { direction: Direction.VERTICAL, label: this.messages.moreLabel, size: (_g = this.moreitem) === null || _g === void 0 ? void 0 : _g.size })));
80
+ };
41
81
  this.label = undefined;
42
82
  this.direction = Direction.HORIZONTAL;
83
+ this.moreitem = undefined;
84
+ this.size = 'regular';
43
85
  this.isChildMenu = undefined;
86
+ this.hasOverflow = false;
44
87
  }
45
88
  validateLabel(newValue) {
46
89
  if (newValue === undefined) {
@@ -49,7 +92,20 @@ export class MgMenu {
49
92
  }
50
93
  validateDirection(newValue) {
51
94
  if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {
52
- throw new Error(`<${this.name}> prop "direction" must be one of : ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
95
+ throw new Error(`<${this.name}> prop "direction" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}.`);
96
+ }
97
+ }
98
+ validateMoreItem(newValue) {
99
+ if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {
100
+ throw new Error(`<${this.name}> prop "moreitem" must be paired with direction ${Direction.HORIZONTAL}.`);
101
+ }
102
+ else if (newValue !== undefined && !isMoreItem(newValue)) {
103
+ throw new Error(`<${this.name}> prop "moreitem" must match MoreItemType.`);
104
+ }
105
+ }
106
+ validateSize(newValue) {
107
+ if (!sizes.includes(newValue)) {
108
+ throw new Error(`<${this.name}> prop "size" must be one of: ${sizes.join(', ')}.`);
53
109
  }
54
110
  }
55
111
  /*************
@@ -61,8 +117,12 @@ export class MgMenu {
61
117
  * @returns {void}
62
118
  */
63
119
  componentWillLoad() {
120
+ this.messages = initLocales(this.element).messages.plusMenu;
121
+ // validation
64
122
  this.validateDirection(this.direction);
65
123
  this.validateLabel(this.label);
124
+ this.validateMoreItem(this.moreitem);
125
+ this.validateSize(this.size);
66
126
  }
67
127
  /**
68
128
  * Check if component slots configuration
@@ -74,27 +134,39 @@ export class MgMenu {
74
134
  // return a promise to process action only in the FIRST render().
75
135
  // https://stenciljs.com/docs/component-lifecycle#componentwillload
76
136
  return setTimeout(() => {
77
- this.initMenuItems();
137
+ // store all menu-items
138
+ this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM');
78
139
  this.isChildMenu = this.element.closest('mg-menu-item') !== null;
79
- // click outside management for child vertical menu
80
- if (!this.isChildMenu && this.direction === Direction.HORIZONTAL) {
81
- document.addEventListener('click', (event) => {
82
- if (event.target.closest('mg-menu') === null) {
83
- this.menuItems.forEach(item => {
84
- this.closeMenuItem(item, this.direction === Direction.HORIZONTAL);
85
- });
86
- }
87
- });
88
- }
140
+ this.hasOverflow = this.direction === Direction.HORIZONTAL && !this.isChildMenu;
141
+ if (this.hasOverflow && isMoreItem(this.moreitem))
142
+ this.overflowBehavior = new OverflowBehavior(this.element, this.renderMgMenuMore);
89
143
  }, 0);
90
144
  }
145
+ /**
146
+ * Check add listeners to childs
147
+ *
148
+ * @returns {void}
149
+ */
150
+ componentDidRender() {
151
+ // add menu items listeners
152
+ this.initMenuItemsListeners();
153
+ }
154
+ /**
155
+ * Disconnect overflow ResizeObserver
156
+ *
157
+ * @returns {void} run overflow resize obeserver disconnexion
158
+ */
159
+ disconnectedCallback() {
160
+ if (this.hasOverflow)
161
+ this.overflowBehavior.disconnect();
162
+ }
91
163
  /**
92
164
  * Render
93
165
  *
94
166
  * @returns {HTMLElement} HTML Element
95
167
  */
96
168
  render() {
97
- return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null)));
169
+ return (h(Host, { role: this.isChildMenu ? 'menu' : 'menubar', "aria-label": this.label }, h("slot", null), this.hasOverflow && isMoreItem(this.moreitem) && this.renderMgMenuItemMore()));
98
170
  }
99
171
  static get is() { return "mg-menu"; }
100
172
  static get encapsulation() { return "shadow"; }
@@ -149,12 +221,56 @@ export class MgMenu {
149
221
  "attribute": "direction",
150
222
  "reflect": true,
151
223
  "defaultValue": "Direction.HORIZONTAL"
224
+ },
225
+ "moreitem": {
226
+ "type": "unknown",
227
+ "mutable": false,
228
+ "complexType": {
229
+ "original": "MoreItemType",
230
+ "resolved": "{ mgIcon?: { icon: string; }; slotLabel?: { label?: string; display?: boolean; }; size?: \"regular\" | \"large\" | \"medium\"; }",
231
+ "references": {
232
+ "MoreItemType": {
233
+ "location": "import",
234
+ "path": "./mg-menu.conf"
235
+ }
236
+ }
237
+ },
238
+ "required": false,
239
+ "optional": false,
240
+ "docs": {
241
+ "tags": [],
242
+ "text": "Customize mg-menu \"more element\"\nUsed with direction: 'vertical' to manage overflow"
243
+ }
244
+ },
245
+ "size": {
246
+ "type": "string",
247
+ "mutable": false,
248
+ "complexType": {
249
+ "original": "MenuSizeType",
250
+ "resolved": "\"large\" | \"medium\" | \"regular\"",
251
+ "references": {
252
+ "MenuSizeType": {
253
+ "location": "import",
254
+ "path": "./mg-menu.conf"
255
+ }
256
+ }
257
+ },
258
+ "required": false,
259
+ "optional": false,
260
+ "docs": {
261
+ "tags": [],
262
+ "text": "Define mg-menu size\nDefault: 'regular'"
263
+ },
264
+ "attribute": "size",
265
+ "reflect": false,
266
+ "defaultValue": "'regular'"
152
267
  }
153
268
  };
154
269
  }
155
270
  static get states() {
156
271
  return {
157
- "isChildMenu": {}
272
+ "isChildMenu": {},
273
+ "hasOverflow": {}
158
274
  };
159
275
  }
160
276
  static get elementRef() { return "element"; }
@@ -165,6 +281,12 @@ export class MgMenu {
165
281
  }, {
166
282
  "propName": "direction",
167
283
  "methodName": "validateDirection"
284
+ }, {
285
+ "propName": "moreitem",
286
+ "methodName": "validateMoreItem"
287
+ }, {
288
+ "propName": "size",
289
+ "methodName": "validateSize"
168
290
  }];
169
291
  }
170
292
  }
@@ -16,7 +16,3 @@ export var Status;
16
16
  Status["DISABLED"] = "disabled";
17
17
  Status["ACTIVE"] = "active";
18
18
  })(Status || (Status = {}));
19
- /**
20
- * List of all possibles sizes
21
- */
22
- export const sizes = ['regular', 'medium', 'large'];
@@ -28,6 +28,7 @@
28
28
  .mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,
29
29
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular {
30
30
  padding: 1rem 2rem;
31
+ height: calc(3.8rem);
31
32
  }
32
33
  .mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button,
33
34
  .mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button ::slotted([slot=label]),
@@ -35,7 +36,7 @@
35
36
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular,
36
37
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=label]),
37
38
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular ::slotted([slot=metadata]) {
38
- font-size: 1.3rem;
39
+ font-size: var(--font-size);
39
40
  }
40
41
  .mg-menu-item.mg-menu-item--size-regular .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,
41
42
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-regular.mg-menu-item__navigation-button--horizontal {
@@ -48,7 +49,8 @@
48
49
 
49
50
  .mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,
50
51
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium {
51
- padding: 1.5rem 3rem;
52
+ padding: 1rem 3rem;
53
+ height: calc(5.1rem);
52
54
  }
53
55
  .mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button,
54
56
  .mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button ::slotted([slot=label]),
@@ -56,11 +58,11 @@
56
58
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium,
57
59
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=label]),
58
60
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium ::slotted([slot=metadata]) {
59
- font-size: 1.5rem;
61
+ font-size: calc(var(--font-size) + 0.2rem);
60
62
  }
61
63
  .mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,
62
64
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--horizontal {
63
- padding-bottom: calc(1.5rem - 0.3rem);
65
+ padding-bottom: calc(1rem - 0.3rem);
64
66
  }
65
67
  .mg-menu-item.mg-menu-item--size-medium .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,
66
68
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-medium.mg-menu-item__navigation-button--vertical {
@@ -69,7 +71,8 @@
69
71
 
70
72
  .mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,
71
73
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large {
72
- padding: 2.5rem 4rem;
74
+ padding: 1rem 4rem;
75
+ height: calc(7.1rem);
73
76
  }
74
77
  .mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button,
75
78
  .mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button ::slotted([slot=label]),
@@ -77,11 +80,11 @@
77
80
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large,
78
81
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=label]),
79
82
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large ::slotted([slot=metadata]) {
80
- font-size: 1.5rem;
83
+ font-size: calc(var(--font-size) + 0.2rem);
81
84
  }
82
85
  .mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--horizontal,
83
86
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--horizontal {
84
- padding-bottom: calc(2.5rem - 0.3rem);
87
+ padding-bottom: calc(1rem - 0.3rem);
85
88
  }
86
89
  .mg-menu-item.mg-menu-item--size-large .mg-menu-item__navigation-button.mg-menu-item__navigation-button--vertical,
87
90
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--size-large.mg-menu-item__navigation-button--vertical {
@@ -91,28 +94,31 @@
91
94
  .mg-menu-item__navigation-button {
92
95
  display: flex;
93
96
  align-items: center;
94
- column-gap: 1rem;
97
+ column-gap: var(--mg-menu-item-navigation-button-column-gap, 1rem);
95
98
  background-color: unset;
96
99
  border: none;
97
100
  font-family: var(--font-family);
101
+ font-weight: 400;
98
102
  color: hsl(var(--mg-menu-item-color-hsl, var(--color-dark)));
99
103
  line-height: var(--line-height);
100
104
  text-decoration: none;
105
+ white-space: nowrap;
106
+ box-sizing: border-box;
101
107
  cursor: pointer;
102
108
  }
103
109
  .mg-menu-item__navigation-button:disabled, .mg-menu-item__navigation-button--disabled {
104
110
  cursor: default;
105
- opacity: 30%;
111
+ opacity: var(--mg-disabled-opacity);
106
112
  }
107
113
  .mg-menu-item__navigation-button:focus-visible {
108
114
  z-index: 10;
109
115
  }
110
- .mg-menu-item__navigation-button:hover:not(.mg-menu-item__navigation-button--disabled), .mg-menu-item__navigation-button:focus:not(.mg-menu-item__navigation-button--disabled) {
111
- background-color: hsla(var(--mg-menu-item-focused-background-color-hsl), 10%);
116
+ .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) {
117
+ background-color: hsl(var(--mg-menu-item-focused-background-color-hsl), 0.1);
112
118
  }
113
119
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--active {
114
120
  color: hsl(var(--mg-menu-item-color-active-hsl));
115
- font-weight: 700;
121
+ font-weight: 600;
116
122
  }
117
123
  .mg-menu-item__navigation-button.mg-menu-item__navigation-button--active.mg-menu-item__navigation-button--horizontal {
118
124
  border-bottom-color: hsl(var(--mg-menu-item-border-color-active-hsl));
@@ -277,16 +283,16 @@
277
283
  :host {
278
284
  position: relative;
279
285
  display: flex;
280
- }
281
-
282
- :host([data-style-position-last]) .mg-menu-item__collapse-container {
283
- left: unset;
284
- right: 0;
286
+ --mg-popover-padding-vertical: 0;
287
+ --mg-popover-padding-horizontal: 0;
285
288
  }
286
289
 
287
290
  :host([data-style-direction-vertical]) {
288
291
  flex-direction: column;
289
292
  }
293
+ :host([data-style-direction-vertical]) .mg-menu-item__navigation-button {
294
+ width: 100%;
295
+ }
290
296
  :host([data-style-direction-vertical]) .mg-menu-item__collapse-container {
291
297
  left: unset;
292
298
  top: unset;
@@ -298,20 +304,29 @@
298
304
  }
299
305
 
300
306
  :host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level {
301
- box-shadow: var(--box-shadow);
302
307
  background-color: hsl(var(--color-light));
303
308
  }
304
309
  :host([data-style-direction-horizontal]) .mg-menu-item__collapse-container.mg-menu-item__collapse-container--first-level ::slotted(mg-menu) {
305
310
  padding: 1rem 0;
306
311
  }
307
312
 
313
+ :host([data-overflow-more]) {
314
+ --mg-menu-item-navigation-button-column-gap: 0;
315
+ }
316
+ :host([data-overflow-more]) .mg-menu-item__navigation-button-chevron {
317
+ display: none;
318
+ }
319
+ :host([data-overflow-more]) .mg-menu-item__navigation-button-text-content ::slotted([slot=information]) {
320
+ margin-left: 0;
321
+ }
322
+ :host([data-overflow-more]) ::slotted(mg-menu) {
323
+ --mg-menu-item-navigation-button-column-gap: 1rem;
324
+ }
325
+
308
326
  .mg-menu-item {
309
327
  max-width: var(--mg-menu-item-navigation-button-max-width);
310
328
  }
311
329
  .mg-menu-item__collapse-container {
312
- position: absolute;
313
- top: 100%;
314
- left: 0;
315
330
  width: max-content;
316
331
  z-index: 10;
317
332
  }
@@ -321,9 +336,12 @@
321
336
  .mg-menu-item__navigation-button-text-content {
322
337
  width: 100%;
323
338
  display: flex;
339
+ align-items: center;
324
340
  }
341
+ .mg-menu-item__navigation-button-text-content-notification,
325
342
  .mg-menu-item__navigation-button-text-content ::slotted([slot=information]) {
326
343
  margin-left: 1rem;
344
+ font-size: var(--font-size);
327
345
  }
328
346
  .mg-menu-item__navigation-button-chevron {
329
347
  margin-left: auto;
@@ -342,6 +360,15 @@
342
360
  text-overflow: ellipsis;
343
361
  }
344
362
 
363
+ ::slotted(*) {
364
+ display: flex;
365
+ flex-direction: column;
366
+ }
367
+
345
368
  :host([status=disabled]) {
346
369
  pointer-events: none;
370
+ }
371
+
372
+ :host([hidden]) {
373
+ display: none;
347
374
  }