@mgdis/mg-components 6.2.0 → 6.4.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 (238) hide show
  1. package/dist/cjs/{index-52d5f3d4.js → index-911898e4.js} +410 -266
  2. package/dist/cjs/index-911898e4.js.map +1 -0
  3. package/dist/cjs/{index-cc11af95.js → index-a3269bfc.js} +3 -3
  4. package/dist/cjs/{index-cc11af95.js.map → index-a3269bfc.js.map} +1 -1
  5. package/dist/cjs/{index.es-ac7c22e3.js → index.es-325100d7.js} +47 -47
  6. package/dist/cjs/index.es-325100d7.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/cjs/mg-action-more_36.cjs.entry.js +1414 -983
  9. package/dist/cjs/mg-action-more_36.cjs.entry.js.map +1 -1
  10. package/dist/cjs/mg-alert.cjs.entry.js +17 -12
  11. package/dist/cjs/mg-alert.cjs.entry.js.map +1 -1
  12. package/dist/cjs/mg-components.cjs.js +3 -3
  13. package/dist/cjs/mg-components.cjs.js.map +1 -1
  14. package/dist/cjs/mg-loader.cjs.entry.js +6 -8
  15. package/dist/cjs/mg-loader.cjs.entry.js.map +1 -1
  16. package/dist/cjs/mg-progress.cjs.entry.js +27 -12
  17. package/dist/cjs/mg-progress.cjs.entry.js.map +1 -1
  18. package/dist/collection/collection-manifest.json +2 -2
  19. package/dist/collection/components/atoms/internals/mg-character-left/mg-character-left.js +10 -3
  20. package/dist/collection/components/atoms/internals/mg-character-left/mg-character-left.js.map +1 -1
  21. package/dist/collection/components/atoms/internals/mg-input-title/mg-input-title.js +15 -4
  22. package/dist/collection/components/atoms/internals/mg-input-title/mg-input-title.js.map +1 -1
  23. package/dist/collection/components/atoms/mg-badge/mg-badge.js +15 -4
  24. package/dist/collection/components/atoms/mg-badge/mg-badge.js.map +1 -1
  25. package/dist/collection/components/atoms/mg-button/mg-button.conf.js +4 -0
  26. package/dist/collection/components/atoms/mg-button/mg-button.conf.js.map +1 -1
  27. package/dist/collection/components/atoms/mg-button/mg-button.js +112 -12
  28. package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
  29. package/dist/collection/components/atoms/mg-card/mg-card.js +1 -1
  30. package/dist/collection/components/atoms/mg-divider/mg-divider.js +9 -1
  31. package/dist/collection/components/atoms/mg-divider/mg-divider.js.map +1 -1
  32. package/dist/collection/components/atoms/mg-icon/mg-icon.js +22 -6
  33. package/dist/collection/components/atoms/mg-icon/mg-icon.js.map +1 -1
  34. package/dist/collection/components/atoms/mg-tag/mg-tag.js +14 -4
  35. package/dist/collection/components/atoms/mg-tag/mg-tag.js.map +1 -1
  36. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +3 -4
  37. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js.map +1 -1
  38. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +28 -6
  39. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js.map +1 -1
  40. package/dist/collection/components/molecules/inputs/mg-input/mg-input.js +50 -13
  41. package/dist/collection/components/molecules/inputs/mg-input/mg-input.js.map +1 -1
  42. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js +29 -11
  43. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js.map +1 -1
  44. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +106 -33
  45. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
  46. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +99 -36
  47. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
  48. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +130 -35
  49. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
  50. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +87 -25
  51. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
  52. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +86 -26
  53. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
  54. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +92 -30
  55. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
  56. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +109 -32
  57. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
  58. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +109 -29
  59. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
  60. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +67 -21
  61. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js.map +1 -1
  62. package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js +16 -70
  63. package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js.map +1 -1
  64. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +101 -89
  65. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js.map +1 -1
  66. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +194 -157
  67. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js.map +1 -1
  68. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +19 -8
  69. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
  70. package/dist/collection/components/molecules/mg-alert/mg-alert.js +31 -6
  71. package/dist/collection/components/molecules/mg-alert/mg-alert.js.map +1 -1
  72. package/dist/collection/components/molecules/mg-details/mg-details.js +17 -5
  73. package/dist/collection/components/molecules/mg-details/mg-details.js.map +1 -1
  74. package/dist/collection/components/molecules/mg-form/mg-form.js +48 -16
  75. package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
  76. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +13 -3
  77. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js.map +1 -1
  78. package/dist/collection/components/molecules/mg-loader/mg-loader.js +5 -5
  79. package/dist/collection/components/molecules/mg-loader/mg-loader.js.map +1 -1
  80. package/dist/collection/components/molecules/mg-message/mg-message.js +22 -6
  81. package/dist/collection/components/molecules/mg-message/mg-message.js.map +1 -1
  82. package/dist/collection/components/molecules/mg-modal/mg-modal.js +54 -11
  83. package/dist/collection/components/molecules/mg-modal/mg-modal.js.map +1 -1
  84. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +28 -9
  85. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js.map +1 -1
  86. package/dist/collection/components/molecules/mg-panel/mg-panel.js +48 -13
  87. package/dist/collection/components/molecules/mg-panel/mg-panel.js.map +1 -1
  88. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +10 -2
  89. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js.map +1 -1
  90. package/dist/collection/components/molecules/mg-popover/mg-popover.js +61 -7
  91. package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
  92. package/dist/collection/components/molecules/mg-progress/mg-progress.js +26 -1
  93. package/dist/collection/components/molecules/mg-progress/mg-progress.js.map +1 -1
  94. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +3 -2
  95. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js.map +1 -1
  96. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +28 -8
  97. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js.map +1 -1
  98. package/dist/collection/utils/behaviors.utils.js +44 -107
  99. package/dist/collection/utils/behaviors.utils.js.map +1 -1
  100. package/dist/components/index.es.js +42 -42
  101. package/dist/components/index.es.js.map +1 -1
  102. package/dist/components/index2.js +2 -2
  103. package/dist/components/mg-action-more.js +15 -12
  104. package/dist/components/mg-action-more.js.map +1 -1
  105. package/dist/components/mg-alert.js +15 -10
  106. package/dist/components/mg-alert.js.map +1 -1
  107. package/dist/components/mg-badge2.js +13 -10
  108. package/dist/components/mg-badge2.js.map +1 -1
  109. package/dist/components/mg-button2.js +77 -16
  110. package/dist/components/mg-button2.js.map +1 -1
  111. package/dist/components/mg-card2.js +1 -1
  112. package/dist/components/mg-character-left2.js +8 -7
  113. package/dist/components/mg-character-left2.js.map +1 -1
  114. package/dist/components/mg-details.js +11 -7
  115. package/dist/components/mg-details.js.map +1 -1
  116. package/dist/components/mg-divider2.js +7 -1
  117. package/dist/components/mg-divider2.js.map +1 -1
  118. package/dist/components/mg-form.js +35 -21
  119. package/dist/components/mg-form.js.map +1 -1
  120. package/dist/components/mg-icon2.js +17 -11
  121. package/dist/components/mg-icon2.js.map +1 -1
  122. package/dist/components/mg-illustrated-message.js +10 -4
  123. package/dist/components/mg-illustrated-message.js.map +1 -1
  124. package/dist/components/mg-input-checkbox-paginated2.js +14 -10
  125. package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
  126. package/dist/components/mg-input-checkbox.js +73 -40
  127. package/dist/components/mg-input-checkbox.js.map +1 -1
  128. package/dist/components/mg-input-date.js +77 -46
  129. package/dist/components/mg-input-date.js.map +1 -1
  130. package/dist/components/mg-input-numeric.js +90 -45
  131. package/dist/components/mg-input-numeric.js.map +1 -1
  132. package/dist/components/mg-input-password.js +56 -28
  133. package/dist/components/mg-input-password.js.map +1 -1
  134. package/dist/components/mg-input-radio.js +59 -31
  135. package/dist/components/mg-input-radio.js.map +1 -1
  136. package/dist/components/mg-input-select2.js +60 -36
  137. package/dist/components/mg-input-select2.js.map +1 -1
  138. package/dist/components/mg-input-text2.js +71 -40
  139. package/dist/components/mg-input-text2.js.map +1 -1
  140. package/dist/components/mg-input-textarea.js +72 -36
  141. package/dist/components/mg-input-textarea.js.map +1 -1
  142. package/dist/components/mg-input-title2.js +11 -8
  143. package/dist/components/mg-input-title2.js.map +1 -1
  144. package/dist/components/mg-input-toggle.js +43 -25
  145. package/dist/components/mg-input-toggle.js.map +1 -1
  146. package/dist/components/mg-input2.js +37 -20
  147. package/dist/components/mg-input2.js.map +1 -1
  148. package/dist/components/mg-item-more2.js +146 -270
  149. package/dist/components/mg-item-more2.js.map +1 -1
  150. package/dist/components/mg-loader.js +4 -6
  151. package/dist/components/mg-loader.js.map +1 -1
  152. package/dist/components/mg-menu-item2.js +193 -149
  153. package/dist/components/mg-menu-item2.js.map +1 -1
  154. package/dist/components/mg-message2.js +21 -9
  155. package/dist/components/mg-message2.js.map +1 -1
  156. package/dist/components/mg-modal.js +36 -17
  157. package/dist/components/mg-modal.js.map +1 -1
  158. package/dist/components/mg-pagination2.js +21 -14
  159. package/dist/components/mg-pagination2.js.map +1 -1
  160. package/dist/components/mg-panel.js +37 -20
  161. package/dist/components/mg-panel.js.map +1 -1
  162. package/dist/components/mg-popover-content2.js +9 -3
  163. package/dist/components/mg-popover-content2.js.map +1 -1
  164. package/dist/components/mg-popover2.js +38 -10
  165. package/dist/components/mg-popover2.js.map +1 -1
  166. package/dist/components/mg-progress.js +26 -11
  167. package/dist/components/mg-progress.js.map +1 -1
  168. package/dist/components/mg-skip-links.js +2 -3
  169. package/dist/components/mg-skip-links.js.map +1 -1
  170. package/dist/components/mg-tabs.js +27 -17
  171. package/dist/components/mg-tabs.js.map +1 -1
  172. package/dist/components/mg-tag.js +12 -8
  173. package/dist/components/mg-tag.js.map +1 -1
  174. package/dist/components/mg-tooltip-content2.js +1 -2
  175. package/dist/components/mg-tooltip-content2.js.map +1 -1
  176. package/dist/components/mg-tooltip2.js +24 -12
  177. package/dist/components/mg-tooltip2.js.map +1 -1
  178. package/dist/esm/{index-81752ffe.js → index-1f32332a.js} +410 -266
  179. package/dist/esm/index-1f32332a.js.map +1 -0
  180. package/dist/esm/{index-f3d3fb70.js → index-9bd10f5d.js} +3 -3
  181. package/dist/esm/{index-f3d3fb70.js.map → index-9bd10f5d.js.map} +1 -1
  182. package/dist/esm/{index.es-940821a9.js → index.es-a2587b72.js} +43 -43
  183. package/dist/esm/index.es-a2587b72.js.map +1 -0
  184. package/dist/esm/loader.js +3 -3
  185. package/dist/esm/mg-action-more_36.entry.js +1414 -983
  186. package/dist/esm/mg-action-more_36.entry.js.map +1 -1
  187. package/dist/esm/mg-alert.entry.js +17 -12
  188. package/dist/esm/mg-alert.entry.js.map +1 -1
  189. package/dist/esm/mg-components.js +4 -4
  190. package/dist/esm/mg-components.js.map +1 -1
  191. package/dist/esm/mg-loader.entry.js +6 -8
  192. package/dist/esm/mg-loader.entry.js.map +1 -1
  193. package/dist/esm/mg-progress.entry.js +27 -12
  194. package/dist/esm/mg-progress.entry.js.map +1 -1
  195. package/dist/mg-components/mg-components.esm.js +1 -1
  196. package/dist/mg-components/mg-components.esm.js.map +1 -1
  197. package/dist/mg-components/p-0ead5317.entry.js +2 -0
  198. package/dist/mg-components/{p-31e6c1a7.entry.js.map → p-0ead5317.entry.js.map} +1 -1
  199. package/dist/mg-components/p-35898742.js +3 -0
  200. package/dist/mg-components/p-35898742.js.map +1 -0
  201. package/dist/mg-components/p-3b052ac0.entry.js +2 -0
  202. package/dist/mg-components/p-3b052ac0.entry.js.map +1 -0
  203. package/dist/mg-components/p-6810a565.entry.js +2 -0
  204. package/dist/mg-components/p-6810a565.entry.js.map +1 -0
  205. package/dist/mg-components/{p-ee51ec5e.js → p-b986c107.js} +2 -2
  206. package/dist/mg-components/p-b986c107.js.map +1 -0
  207. package/dist/mg-components/{p-a49e2b74.js → p-dc436f3c.js} +2 -2
  208. package/dist/mg-components/p-f48d964f.entry.js +2 -0
  209. package/dist/mg-components/p-f48d964f.entry.js.map +1 -0
  210. package/dist/types/components/atoms/mg-button/mg-button.conf.d.ts +9 -1
  211. package/dist/types/components/atoms/mg-button/mg-button.d.ts +11 -1
  212. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +6 -0
  213. package/dist/types/components/molecules/internals/mg-item-more/mg-item-more.d.ts +1 -15
  214. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +14 -30
  215. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +46 -37
  216. package/dist/types/components/molecules/mg-alert/mg-alert.d.ts +4 -0
  217. package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +4 -0
  218. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +4 -0
  219. package/dist/types/components.d.ts +33 -15
  220. package/dist/types/utils/behaviors.utils.d.ts +15 -44
  221. package/ide/intellij/web-types.json +39 -11
  222. package/ide/vscode/html-custom-data.json +28 -6
  223. package/package.json +27 -37
  224. package/dist/cjs/index-52d5f3d4.js.map +0 -1
  225. package/dist/cjs/index.es-ac7c22e3.js.map +0 -1
  226. package/dist/esm/index-81752ffe.js.map +0 -1
  227. package/dist/esm/index.es-940821a9.js.map +0 -1
  228. package/dist/mg-components/p-2298352f.js +0 -3
  229. package/dist/mg-components/p-2298352f.js.map +0 -1
  230. package/dist/mg-components/p-31e6c1a7.entry.js +0 -2
  231. package/dist/mg-components/p-67c9be27.entry.js +0 -2
  232. package/dist/mg-components/p-67c9be27.entry.js.map +0 -1
  233. package/dist/mg-components/p-95895169.entry.js +0 -2
  234. package/dist/mg-components/p-95895169.entry.js.map +0 -1
  235. package/dist/mg-components/p-abddacc2.entry.js +0 -2
  236. package/dist/mg-components/p-abddacc2.entry.js.map +0 -1
  237. package/dist/mg-components/p-ee51ec5e.js.map +0 -1
  238. /package/dist/mg-components/{p-a49e2b74.js.map → p-dc436f3c.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { m as me, q as qe, X as Xe, G as Ge, Y as Ye, t as tt } from './index.es.js';
2
+ import { z as ze, G as Ge, y as ye, I as Ie, J as Je, e as et } from './index.es.js';
3
3
  import { i as initLocales } from './index2.js';
4
4
  import { d as defineCustomElement$6 } from './mg-badge2.js';
5
5
  import { d as defineCustomElement$5 } from './mg-button2.js';
@@ -42,7 +42,6 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
42
42
  super();
43
43
  this.__registerHost();
44
44
  this.__attachShadow();
45
- this.statusChange = createEvent(this, "status-change", 7);
46
45
  this.itemLoaded = createEvent(this, "item-loaded", 7);
47
46
  this.itemUpdated = createEvent(this, "item-updated", 7);
48
47
  /************
@@ -50,15 +49,39 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
50
49
  ************/
51
50
  this.name = 'mg-menu-item';
52
51
  this.navigationButton = 'mg-c-menu-item__navigation-button';
52
+ /************
53
+ * Props *
54
+ ************/
55
+ /**
56
+ * Identifier is used to control mg-popover
57
+ */
58
+ this.identifier = ze('mg-menu-item');
59
+ /**
60
+ * Define menu-item status.
61
+ */
62
+ this.status = Status.VISIBLE;
63
+ /**
64
+ * Define menu-item content expanded.
65
+ */
66
+ this.expanded = false;
67
+ /**********
68
+ * States *
69
+ *********/
70
+ /**
71
+ * Define menu-item size.
72
+ */
73
+ this.size = 'medium';
74
+ /**
75
+ * Component button classes
76
+ */
77
+ this.navigationButtonClassList = new Ge([this.navigationButton]);
78
+ /**
79
+ * Does component have children.
80
+ */
81
+ this.hasChildren = false;
53
82
  /***********
54
83
  * Methods *
55
84
  **********/
56
- /**
57
- * Toggle expanded prop value
58
- */
59
- this.toggleExpanded = () => {
60
- this.expanded = !this.expanded;
61
- };
62
85
  /**
63
86
  * Does an Element have given Status
64
87
  * @param mgMenuItemElement - to parse
@@ -66,6 +89,24 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
66
89
  * @returns true if element with status is found
67
90
  */
68
91
  this.hasStatus = (mgMenuItemElement, status) => mgMenuItemElement.status === status;
92
+ /**
93
+ * Condition to know if component should display a mg-popover
94
+ * @returns truthy if component display popover
95
+ */
96
+ this.hasPopover = () => this.isDirection(Direction.HORIZONTAL) && (this.isInMainMenu && Array.from(this.element.children).some(element => !element.querySelector('[slot]')) || this.isItemMore) && this.href === undefined;
97
+ /**
98
+ * Method to control if one of component children have active status
99
+ * @returns truthy if component has active child
100
+ */
101
+ this.hasActiveChild = () => {
102
+ var _a;
103
+ 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.ACTIVE) && !element.hasAttribute('hidden'));
104
+ };
105
+ /**
106
+ * Is component an interactive item
107
+ * @returns truthy if element is clickable
108
+ */
109
+ this.isInteractiveItem = () => this.hasChildren || !ye(this.href);
69
110
  /**
70
111
  * Is component contextual direction match the given direction
71
112
  * @param direction - in parent menu
@@ -83,25 +124,37 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
83
124
  childMenu !== null && Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && !subItem.hasAttribute('hidden'));
84
125
  };
85
126
  /**
86
- * Method to control if one of component children have active status
87
- * @returns truthy if component has active child
127
+ * Update expanded prop
128
+ * @param newValue - expanded new value
88
129
  */
89
- this.hasActiveChild = () => {
90
- var _a;
91
- 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.ACTIVE) && !element.hasAttribute('hidden'));
130
+ this.updateExpanded = (newValue) => {
131
+ if (this.isInteractiveItem()) {
132
+ // item is always expanded in vertical menu when has active child
133
+ this.expanded = this.isDirection(Direction.VERTICAL) && this.hasActiveChild() || newValue;
134
+ }
92
135
  };
93
136
  /**
94
- * Validate slots
137
+ * Update status
138
+ * @param guard - status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
139
+ */
140
+ this.updateStatus = (guard = []) => {
141
+ if (![Status.HIDDEN, Status.DISABLED, ...guard].includes(this.status)) {
142
+ this.status = this.hasActiveChild() ? Status.ACTIVE : Status.VISIBLE;
143
+ }
144
+ };
145
+ /**
146
+ * Update slots
95
147
  * @param guard - prevent action with guard. Default: false.
96
148
  */
97
- this.validateSlot = (guard = false) => {
149
+ this.updateSlot = (guard = false) => {
98
150
  // slot title AND metadata validation
99
151
  // add title on label AND metada slots due to text-overflow on these element
100
- if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
152
+ if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined) {
101
153
  throw new Error(`<${this.name}> slot "label" is required.`);
154
+ }
102
155
  ['label', 'metadata'].forEach(slot => {
103
156
  Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
104
- if (!me(element.textContent))
157
+ if (!ye(element.textContent))
105
158
  throw new Error(`<${this.name}> slot "${slot}" must have text content.`);
106
159
  if ((guard && !element.hasAttribute('title')) || !guard)
107
160
  element.setAttribute('title', element.textContent);
@@ -109,39 +162,23 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
109
162
  });
110
163
  };
111
164
  /**
112
- * Update status
113
- * @param guard - status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
165
+ * Update menu item
166
+ * @param guard - prevent action with guard
114
167
  */
115
- this.updateStatus = (guard = []) => {
116
- if (![Status.HIDDEN, Status.DISABLED, ...guard].includes(this.status)) {
117
- this.status = this.hasActiveChild() ? Status.ACTIVE : Status.VISIBLE;
118
- }
119
- };
120
- /**
121
- * Init event-listeners
122
- */
123
- this.initListeners = () => {
124
- var _a;
125
- // manage first sub-level menu-items
126
- Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).forEach(item => {
127
- if (item.nodeName === 'MG-MENU-ITEM') {
128
- // manage child menu listener
129
- item.addEventListener('status-change', () => {
130
- this.updateStatus();
131
- });
132
- }
133
- });
168
+ this.updateItem = (guard) => {
169
+ const menu = this.element.closest('mg-menu');
170
+ this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
171
+ // define element size
172
+ if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined && !this.isItemMore)
173
+ this.size = menu.size;
174
+ else if (this.isItemMore)
175
+ this.size = this.element.dataset.size;
176
+ // when vertical main menu item contain an active item we force expanded
177
+ this.updateExpanded(this.expanded);
178
+ this.updateStatus(guard);
179
+ this.updatePopoverGuard();
180
+ this.updateDisplayNotificationBadge();
134
181
  };
135
- /**
136
- * Get mg-popover identifier
137
- * @returns generated mg-popover identifier
138
- */
139
- this.getPopoverIdentifier = () => `${this.identifier}-popover`;
140
- /**
141
- * Condition to know if component should display a mg-popover
142
- * @returns truthy if component display popover
143
- */
144
- this.displayPopover = () => this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined;
145
182
  /************
146
183
  * Handlers *
147
184
  ************/
@@ -150,106 +187,123 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
150
187
  * @param event - click on element
151
188
  */
152
189
  this.handleElementCLick = (event) => {
153
- if ((this.hasChildren && !this.isInMainMenu) || this.status === Status.DISABLED) {
190
+ if (this.status === Status.DISABLED) {
154
191
  event.preventDefault();
155
192
  event.stopPropagation();
156
193
  }
157
- // toggle expanded when mg-menu-item has child items
158
- if (this.hasChildren)
159
- this.toggleExpanded();
194
+ // for non "poperized" menu-item we toggle expanded manualy
195
+ this.updateExpanded(!this.expanded);
196
+ // when item is the last clickable item we close the parent popover
197
+ if (!this.isInteractiveItem()) {
198
+ const closePopover = (element) => {
199
+ if (!element)
200
+ return;
201
+ else if (element !== this.element && element.expanded && element.shadowRoot.querySelector('mg-popover') !== null) {
202
+ element.expanded = false;
203
+ }
204
+ else {
205
+ closePopover(element.parentElement.closest('mg-menu-item'));
206
+ }
207
+ };
208
+ closePopover(this.element);
209
+ }
160
210
  };
161
211
  /**
162
212
  * Handle popover element display-change event
163
213
  * @param event - popover display event
164
214
  */
165
215
  this.handlePopoverDisplay = (event) => {
166
- this.expanded = event.detail;
216
+ this.updateExpanded(event.detail);
167
217
  };
168
218
  /**
169
219
  * Render slot
170
220
  * @returns HTML Element
171
221
  */
172
222
  this.renderSlot = () => h("slot", null);
173
- this.identifier = qe('mg-menu-item');
174
- this.href = undefined;
175
- this.target = undefined;
176
- this.status = Status.VISIBLE;
177
- this.expanded = false;
178
- this.size = 'medium';
179
- this.navigationButtonClassList = new Xe([this.navigationButton]);
180
- this.direction = undefined;
181
- this.isInMainMenu = undefined;
182
- this.isItemMore = undefined;
183
- this.hasChildren = false;
184
- this.displayNotificationBadge = undefined;
185
223
  }
186
224
  watchIdentifier(newValue) {
187
- if (!Ge(newValue)) {
188
- console.error(`<mg-menu-item> prop "identifier" value is invalid. Passed value: ${Ye(newValue)}.`);
225
+ if (!Ie(newValue)) {
226
+ console.error(`<mg-menu-item> prop "identifier" value is invalid. Passed value: ${Je(newValue)}.`);
227
+ }
228
+ else {
229
+ this.popoverIdentifier = `${this.identifier}-popover`;
189
230
  }
190
231
  }
191
232
  watchTarget(newValue) {
192
233
  if (newValue && !targets.includes(newValue)) {
193
- throw new Error(`<mg-link> prop "target" must be one of: ${targets.join(', ')}. Passed value: ${Ye(newValue)}.`);
234
+ throw new Error(`<mg-link> prop "target" must be one of: ${targets.join(', ')}. Passed value: ${Je(newValue)}.`);
194
235
  }
195
236
  }
196
- validateStatus(newValue, oldValue) {
197
- if (oldValue !== undefined) {
237
+ watchStatus(newValue, oldValue) {
238
+ if (oldValue !== undefined)
198
239
  this.navigationButtonClassList.delete(`${this.navigationButton}--${oldValue}`);
199
- }
200
240
  this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
201
- this.statusChange.emit(newValue);
202
241
  }
203
- validateExpanded(newValue) {
204
- if (typeof newValue !== 'boolean')
205
- throw new Error(`<${this.name}> prop "expanded" must be a boolean. Passed value: ${Ye(newValue)}.`);
206
- // if menu-item has sub-menu we have to apply some updates:
207
- if (this.hasChildren) {
208
- const subItems = Array.from(this.element.querySelectorAll(this.name));
209
- if (!newValue) {
210
- // - when main menu item is NOT expanded we need NOT expanded sub-items and NOT expanded sub-content
211
- subItems.forEach(item => {
212
- item.expanded = false;
213
- });
214
- }
215
- else if (this.element.querySelector(`${this.name}[status="${Status.ACTIVE}"]`) !== null) {
216
- // - when expanded and contain an active item parents are expended too
217
- subItems.forEach(item => {
218
- if (this.hasStatus(item, Status.ACTIVE)) {
219
- item.expanded = true;
220
- }
221
- });
222
- }
242
+ watchExpanded(newValue) {
243
+ if (typeof newValue !== 'boolean') {
244
+ throw new Error(`<${this.name}> prop "expanded" must be a boolean. Passed value: ${Je(newValue)}.`);
245
+ }
246
+ else {
247
+ this.updateExpanded(newValue);
248
+ // when expanded all actives sub-items need to be expanded and non active closed
249
+ Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
250
+ if (item !== this.element)
251
+ item.expanded = newValue ? this.hasStatus(item, Status.ACTIVE) : false;
252
+ });
223
253
  }
224
254
  }
225
- validateSize(newValue, oldValue) {
226
- this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
255
+ watchSize(newValue, oldValue) {
256
+ if (oldValue !== undefined)
257
+ this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
227
258
  this.navigationButtonClassList.add(`${this.navigationButton}--size-${newValue}`);
228
259
  }
229
- validateDirection(newValue) {
230
- // manage menu items style depending to parent menu horientation
231
- this.element.setAttribute('data-style-direction', newValue);
260
+ validateDirection(newValue, oldValue) {
261
+ if (oldValue !== undefined)
262
+ this.navigationButtonClassList.delete(`${this.navigationButton}--${oldValue}`);
232
263
  this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
233
264
  // manage all sub levels child menu-items level with data-level attribut
234
- if (this.isDirection(Direction.VERTICAL, newValue)) {
235
- Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
265
+ Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
266
+ if (this.isDirection(Direction.VERTICAL, newValue)) {
236
267
  item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
237
- });
238
- }
268
+ }
269
+ else {
270
+ delete item.dataset.level;
271
+ }
272
+ });
239
273
  }
240
274
  validateHasChildren(newValue) {
241
275
  if (newValue && this.element.href !== undefined) {
242
276
  throw new Error(`<${this.name}> prop "href" is unauthorizied when element is a parent.`);
243
277
  }
244
278
  }
279
+ /**
280
+ * direction value in dataset
281
+ * @param newValue - new direction value
282
+ */
283
+ // eslint-disable-next-line @stencil-community/no-unused-watch
284
+ watchDataStyleDirection(newValue) {
285
+ this.direction = newValue;
286
+ }
287
+ /**
288
+ * has focus value in dataset
289
+ * @param newValue - new direction value
290
+ */
291
+ // eslint-disable-next-line @stencil-community/no-unused-watch
292
+ watchDataHasFocus(newValue) {
293
+ if (!newValue)
294
+ this.updateExpanded(Boolean(newValue));
295
+ }
245
296
  /**
246
297
  * Render popover clickoutside guard for content slot
247
298
  */
248
299
  updatePopoverGuard() {
249
- if (this.displayPopover())
250
- Array.from(this.element.children)
251
- .filter((child) => !child.hasAttribute('slot') && child.nodeName !== 'MG-MENU' && Boolean(child.dataset))
252
- .forEach((slot) => (slot.dataset.mgPopoverGuard = this.getPopoverIdentifier()));
300
+ const subItem = this.element.querySelector('*:not([slot])');
301
+ if (!subItem)
302
+ return;
303
+ if (this.hasPopover())
304
+ subItem.dataset.mgPopoverGuard = this.popoverIdentifier;
305
+ else
306
+ delete subItem.dataset.mgPopoverGuard;
253
307
  }
254
308
  /*************
255
309
  * Lifecycle *
@@ -263,13 +317,12 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
263
317
  this.hasChildren = Array.from(this.element.children).some(child => !['image', 'information', 'label', 'metadata'].includes(child.getAttribute('slot')));
264
318
  this.messages = initLocales(this.element).messages.menuItem;
265
319
  this.isItemMore = this.element.dataset.overflowMore !== undefined;
266
- // Validate props
267
- this.validateStatus(this.status);
268
- this.validateExpanded(this.expanded);
320
+ // watchers
321
+ this.watchStatus(this.status);
322
+ this.watchExpanded(this.expanded);
269
323
  this.watchTarget(this.target);
270
324
  this.watchIdentifier(this.identifier);
271
- // Validate states
272
- this.validateSize(this.size);
325
+ this.watchSize(this.size);
273
326
  }
274
327
  /**
275
328
  * Check if component slots configuration
@@ -277,40 +330,36 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
277
330
  */
278
331
  componentDidLoad() {
279
332
  // validation
280
- this.validateSlot(true);
333
+ this.updateSlot(true);
281
334
  // update props and states after componentDidLoad hook
282
335
  // return a promise to process action only in the FIRST render().
283
336
  // https://stenciljs.com/docs/component-lifecycle#componentwillload
284
337
  return setTimeout(() => {
285
- // define menu-item context states
286
- const menu = this.element.closest('mg-menu');
287
- this.direction = this.isItemMore || menu === null ? Direction.HORIZONTAL : menu.direction;
288
- this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
289
- if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined)
290
- this.size = menu.size;
291
- if (this.isItemMore)
292
- this.size = this.element.dataset.size;
293
- // when main menu item contain an active item it will get the active style
294
- // AND if item is in vertical menu it will be expanded
295
- if (this.hasActiveChild() && this.isInMainMenu)
296
- this.expanded = this.isDirection(Direction.VERTICAL);
297
- this.updateStatus([Status.ACTIVE]);
298
- this.updateDisplayNotificationBadge();
299
- this.updatePopoverGuard();
300
- // manage child dom changes with mutationObserver and listners
301
- this.initListeners();
338
+ this.watchDataStyleDirection(this.element.dataset.styleDirection);
339
+ this.watchDataHasFocus(this.element.dataset.hasFocus);
340
+ this.updateItem([Status.ACTIVE]);
302
341
  // emit loaded event when component is fully loaded
303
342
  this.itemLoaded.emit();
304
343
  new MutationObserver(mutationsList => {
305
- if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
344
+ if (mutationsList.some(mutation => ['hidden', 'status'].includes(mutation.attributeName)))
306
345
  this.updateStatus(this.hasChildren ? undefined : [Status.ACTIVE]);
307
346
  if (mutationsList.some(mutation => mutation.type === 'characterData'))
308
- this.validateSlot();
309
- this.updateDisplayNotificationBadge();
347
+ this.updateSlot();
348
+ if (mutationsList.some(mutation => mutation.type === 'childList'))
349
+ this.updateItem();
310
350
  this.itemUpdated.emit();
311
351
  }).observe(this.element, { attributes: true, childList: true, characterData: true, subtree: true });
312
352
  }, 0);
313
353
  }
354
+ /**
355
+ * Emit event when component is updated
356
+ * @returns promise process wich emit the 'item-updated' event
357
+ */
358
+ componentShouldUpdate() {
359
+ return et(() => {
360
+ this.itemUpdated.emit();
361
+ });
362
+ }
314
363
  /**
315
364
  * Render ineractive element
316
365
  * @returns HTML Element
@@ -325,15 +374,6 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
325
374
  [`${this.navigationButton}-chevron--rotate`]: this.expanded === true,
326
375
  } }, h("mg-icon", { icon: "chevron-down" })))));
327
376
  }
328
- /**
329
- * Emit event when component is updated
330
- * @returns promise process wich emit the 'item-updated' event
331
- */
332
- componentShouldUpdate() {
333
- return tt(() => {
334
- this.itemUpdated.emit();
335
- });
336
- }
337
377
  /**
338
378
  * Render
339
379
  * @returns HTML Element
@@ -343,7 +383,7 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
343
383
  ['mg-c-menu-item__collapse-container']: true,
344
384
  ['mg-c-menu-item__collapse-container--first-level']: (this.isInMainMenu || this.isItemMore) && this.isDirection(Direction.HORIZONTAL),
345
385
  });
346
- return (h(Host, { key: '0705617f39133b4da491c150f4984cc57cafe085', role: this.isItemMore ? 'presentation' : 'listitem' }, this.displayPopover() ? (h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay, identifier: this.getPopoverIdentifier(), "data-fallback-placement": "bottom-end" // use for the last element of the menu if it is placed on the right side
386
+ return (h(Host, { key: '1bfbcc26638508e5fff8d0a9b0bd1956e06cb9ae', role: this.isItemMore ? 'presentation' : 'listitem' }, this.hasPopover() ? (h("mg-popover", { display: this.expanded, placement: "bottom-start", arrowHide: true, "onDisplay-change": this.handlePopoverDisplay, identifier: this.popoverIdentifier, "data-fallback-placement": "bottom-end" // use for the last element of the menu if it is placed on the right side
347
387
  }, this.renderInteractiveElement(), h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
348
388
  this.renderInteractiveElement(),
349
389
  h("div", { key: "vertical-container", class: getContainerClasses(), hidden: !this.expanded }, this.renderSlot()),
@@ -353,11 +393,13 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
353
393
  static get watchers() { return {
354
394
  "identifier": ["watchIdentifier"],
355
395
  "target": ["watchTarget"],
356
- "status": ["validateStatus"],
357
- "expanded": ["validateExpanded"],
358
- "size": ["validateSize"],
396
+ "status": ["watchStatus"],
397
+ "expanded": ["watchExpanded"],
398
+ "size": ["watchSize"],
359
399
  "direction": ["validateDirection"],
360
- "hasChildren": ["validateHasChildren"]
400
+ "hasChildren": ["validateHasChildren"],
401
+ "data-style-direction": ["watchDataStyleDirection"],
402
+ "data-has-focus": ["watchDataHasFocus"]
361
403
  }; }
362
404
  static get style() { return MgMenuItemStyle0; }
363
405
  }, [1, "mg-menu-item", {
@@ -376,11 +418,13 @@ const MgMenuItem = /*@__PURE__*/ proxyCustomElement(class MgMenuItem extends HTM
376
418
  }, undefined, {
377
419
  "identifier": ["watchIdentifier"],
378
420
  "target": ["watchTarget"],
379
- "status": ["validateStatus"],
380
- "expanded": ["validateExpanded"],
381
- "size": ["validateSize"],
421
+ "status": ["watchStatus"],
422
+ "expanded": ["watchExpanded"],
423
+ "size": ["watchSize"],
382
424
  "direction": ["validateDirection"],
383
- "hasChildren": ["validateHasChildren"]
425
+ "hasChildren": ["validateHasChildren"],
426
+ "data-style-direction": ["watchDataStyleDirection"],
427
+ "data-has-focus": ["watchDataHasFocus"]
384
428
  }]);
385
429
  function defineCustomElement() {
386
430
  if (typeof customElements === "undefined") {