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