@mgdis/mg-components 6.3.0 → 6.5.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 (248) hide show
  1. package/dist/cjs/{index-a5b2cd1b.js → index-1a5a1081.js} +331 -162
  2. package/dist/cjs/index-1a5a1081.js.map +1 -0
  3. package/dist/cjs/{index-cc11af95.js → index-ede3b3dc.js} +3 -3
  4. package/dist/cjs/{index-cc11af95.js.map → index-ede3b3dc.js.map} +1 -1
  5. package/dist/cjs/{index.es-ac7c22e3.js → index.es-a112f649.js} +40 -40
  6. package/dist/cjs/index.es-a112f649.js.map +1 -0
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/cjs/mg-action-more_36.cjs.entry.js +3411 -2633
  9. package/dist/cjs/mg-action-more_36.cjs.entry.js.map +1 -1
  10. package/dist/cjs/mg-alert.cjs.entry.js +15 -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 +5 -7
  15. package/dist/cjs/mg-loader.cjs.entry.js.map +1 -1
  16. package/dist/cjs/mg-progress.cjs.entry.js +26 -11
  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.js +50 -11
  26. package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
  27. package/dist/collection/components/atoms/mg-card/mg-card.js +1 -1
  28. package/dist/collection/components/atoms/mg-divider/mg-divider.js +9 -1
  29. package/dist/collection/components/atoms/mg-divider/mg-divider.js.map +1 -1
  30. package/dist/collection/components/atoms/mg-icon/mg-icon.js +22 -6
  31. package/dist/collection/components/atoms/mg-icon/mg-icon.js.map +1 -1
  32. package/dist/collection/components/atoms/mg-tag/mg-tag.js +14 -4
  33. package/dist/collection/components/atoms/mg-tag/mg-tag.js.map +1 -1
  34. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +3 -4
  35. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js.map +1 -1
  36. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js +1 -0
  37. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js.map +1 -1
  38. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +95 -43
  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 +108 -31
  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 +202 -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 +15 -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 +22 -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 +37 -9
  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.conf.js +2 -0
  91. package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js.map +1 -0
  92. package/dist/collection/components/molecules/mg-popover/mg-popover.js +133 -52
  93. package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
  94. package/dist/collection/components/molecules/mg-progress/mg-progress.js +26 -1
  95. package/dist/collection/components/molecules/mg-progress/mg-progress.js.map +1 -1
  96. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +3 -2
  97. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js.map +1 -1
  98. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +28 -8
  99. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js.map +1 -1
  100. package/dist/collection/utils/behaviors.utils.js +44 -107
  101. package/dist/collection/utils/behaviors.utils.js.map +1 -1
  102. package/dist/collection/utils/floating-ui.utils.js +33 -0
  103. package/dist/collection/utils/floating-ui.utils.js.map +1 -0
  104. package/dist/components/floating-ui.utils.js +2099 -0
  105. package/dist/components/floating-ui.utils.js.map +1 -0
  106. package/dist/components/index.es.js +37 -37
  107. package/dist/components/index.es.js.map +1 -1
  108. package/dist/components/index2.js +2 -2
  109. package/dist/components/mg-action-more.js +15 -12
  110. package/dist/components/mg-action-more.js.map +1 -1
  111. package/dist/components/mg-alert.js +13 -10
  112. package/dist/components/mg-alert.js.map +1 -1
  113. package/dist/components/mg-badge2.js +12 -9
  114. package/dist/components/mg-badge2.js.map +1 -1
  115. package/dist/components/mg-button2.js +36 -15
  116. package/dist/components/mg-button2.js.map +1 -1
  117. package/dist/components/mg-card2.js +2 -2
  118. package/dist/components/mg-card2.js.map +1 -1
  119. package/dist/components/mg-character-left2.js +8 -7
  120. package/dist/components/mg-character-left2.js.map +1 -1
  121. package/dist/components/mg-details.js +14 -5
  122. package/dist/components/mg-details.js.map +1 -1
  123. package/dist/components/mg-divider2.js +7 -1
  124. package/dist/components/mg-divider2.js.map +1 -1
  125. package/dist/components/mg-form.js +35 -21
  126. package/dist/components/mg-form.js.map +1 -1
  127. package/dist/components/mg-icon2.js +17 -11
  128. package/dist/components/mg-icon2.js.map +1 -1
  129. package/dist/components/mg-illustrated-message.js +12 -6
  130. package/dist/components/mg-illustrated-message.js.map +1 -1
  131. package/dist/components/mg-input-checkbox-paginated2.js +14 -10
  132. package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
  133. package/dist/components/mg-input-checkbox.js +69 -36
  134. package/dist/components/mg-input-checkbox.js.map +1 -1
  135. package/dist/components/mg-input-date.js +75 -44
  136. package/dist/components/mg-input-date.js.map +1 -1
  137. package/dist/components/mg-input-numeric.js +88 -43
  138. package/dist/components/mg-input-numeric.js.map +1 -1
  139. package/dist/components/mg-input-password.js +54 -26
  140. package/dist/components/mg-input-password.js.map +1 -1
  141. package/dist/components/mg-input-radio.js +58 -30
  142. package/dist/components/mg-input-radio.js.map +1 -1
  143. package/dist/components/mg-input-select2.js +58 -34
  144. package/dist/components/mg-input-select2.js.map +1 -1
  145. package/dist/components/mg-input-text2.js +67 -36
  146. package/dist/components/mg-input-text2.js.map +1 -1
  147. package/dist/components/mg-input-textarea.js +69 -33
  148. package/dist/components/mg-input-textarea.js.map +1 -1
  149. package/dist/components/mg-input-title2.js +10 -7
  150. package/dist/components/mg-input-title2.js.map +1 -1
  151. package/dist/components/mg-input-toggle.js +42 -24
  152. package/dist/components/mg-input-toggle.js.map +1 -1
  153. package/dist/components/mg-input2.js +35 -18
  154. package/dist/components/mg-input2.js.map +1 -1
  155. package/dist/components/mg-item-more2.js +146 -270
  156. package/dist/components/mg-item-more2.js.map +1 -1
  157. package/dist/components/mg-loader.js +3 -5
  158. package/dist/components/mg-loader.js.map +1 -1
  159. package/dist/components/mg-menu-item2.js +200 -148
  160. package/dist/components/mg-menu-item2.js.map +1 -1
  161. package/dist/components/mg-message2.js +22 -10
  162. package/dist/components/mg-message2.js.map +1 -1
  163. package/dist/components/mg-modal.js +33 -15
  164. package/dist/components/mg-modal.js.map +1 -1
  165. package/dist/components/mg-pagination2.js +21 -14
  166. package/dist/components/mg-pagination2.js.map +1 -1
  167. package/dist/components/mg-panel.js +37 -20
  168. package/dist/components/mg-panel.js.map +1 -1
  169. package/dist/components/mg-popover-content2.js +11 -5
  170. package/dist/components/mg-popover-content2.js.map +1 -1
  171. package/dist/components/mg-popover2.js +119 -52
  172. package/dist/components/mg-popover2.js.map +1 -1
  173. package/dist/components/mg-progress.js +25 -10
  174. package/dist/components/mg-progress.js.map +1 -1
  175. package/dist/components/mg-skip-links.js +0 -1
  176. package/dist/components/mg-skip-links.js.map +1 -1
  177. package/dist/components/mg-tabs.js +26 -16
  178. package/dist/components/mg-tabs.js.map +1 -1
  179. package/dist/components/mg-tag.js +11 -7
  180. package/dist/components/mg-tag.js.map +1 -1
  181. package/dist/components/mg-tooltip-content2.js +2 -3
  182. package/dist/components/mg-tooltip-content2.js.map +1 -1
  183. package/dist/components/mg-tooltip2.js +86 -45
  184. package/dist/components/mg-tooltip2.js.map +1 -1
  185. package/dist/esm/{index-eb0e1053.js → index-5059254f.js} +331 -162
  186. package/dist/esm/index-5059254f.js.map +1 -0
  187. package/dist/esm/{index-f3d3fb70.js → index-a7c3b5c5.js} +3 -3
  188. package/dist/esm/{index-f3d3fb70.js.map → index-a7c3b5c5.js.map} +1 -1
  189. package/dist/esm/{index.es-940821a9.js → index.es-5e0101ac.js} +38 -38
  190. package/dist/esm/index.es-5e0101ac.js.map +1 -0
  191. package/dist/esm/loader.js +3 -3
  192. package/dist/esm/mg-action-more_36.entry.js +3411 -2633
  193. package/dist/esm/mg-action-more_36.entry.js.map +1 -1
  194. package/dist/esm/mg-alert.entry.js +15 -12
  195. package/dist/esm/mg-alert.entry.js.map +1 -1
  196. package/dist/esm/mg-components.js +4 -4
  197. package/dist/esm/mg-components.js.map +1 -1
  198. package/dist/esm/mg-loader.entry.js +5 -7
  199. package/dist/esm/mg-loader.entry.js.map +1 -1
  200. package/dist/esm/mg-progress.entry.js +26 -11
  201. package/dist/esm/mg-progress.entry.js.map +1 -1
  202. package/dist/mg-components/mg-components.esm.js +1 -1
  203. package/dist/mg-components/mg-components.esm.js.map +1 -1
  204. package/dist/mg-components/p-1a162791.entry.js +2 -0
  205. package/dist/mg-components/{p-d0086664.entry.js.map → p-1a162791.entry.js.map} +1 -1
  206. package/dist/mg-components/p-2403e01d.entry.js +2 -0
  207. package/dist/mg-components/p-2403e01d.entry.js.map +1 -0
  208. package/dist/mg-components/p-6c831a83.entry.js +2 -0
  209. package/dist/mg-components/p-6c831a83.entry.js.map +1 -0
  210. package/dist/mg-components/p-ad64ab4a.entry.js +2 -0
  211. package/dist/mg-components/p-ad64ab4a.entry.js.map +1 -0
  212. package/dist/mg-components/{p-ee51ec5e.js → p-b6c1a6ce.js} +2 -2
  213. package/dist/mg-components/p-b6c1a6ce.js.map +1 -0
  214. package/dist/mg-components/{p-a49e2b74.js → p-d9731ebc.js} +2 -2
  215. package/dist/mg-components/p-e39791fa.js +3 -0
  216. package/dist/mg-components/p-e39791fa.js.map +1 -0
  217. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.conf.d.ts +6 -0
  218. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +7 -6
  219. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +6 -0
  220. package/dist/types/components/molecules/internals/mg-item-more/mg-item-more.d.ts +1 -15
  221. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +14 -30
  222. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +54 -39
  223. package/dist/types/components/molecules/mg-details/mg-details.d.ts +4 -0
  224. package/dist/types/components/molecules/mg-popover/mg-popover.conf.d.ts +6 -0
  225. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +13 -8
  226. package/dist/types/components.d.ts +8 -11
  227. package/dist/types/utils/behaviors.utils.d.ts +15 -44
  228. package/dist/types/utils/floating-ui.utils.d.ts +19 -0
  229. package/ide/intellij/web-types.json +3 -7
  230. package/ide/vscode/html-custom-data.json +2 -2
  231. package/package.json +24 -24
  232. package/dist/cjs/index-a5b2cd1b.js.map +0 -1
  233. package/dist/cjs/index.es-ac7c22e3.js.map +0 -1
  234. package/dist/components/popper.js +0 -1794
  235. package/dist/components/popper.js.map +0 -1
  236. package/dist/esm/index-eb0e1053.js.map +0 -1
  237. package/dist/esm/index.es-940821a9.js.map +0 -1
  238. package/dist/mg-components/p-15b6849a.js +0 -3
  239. package/dist/mg-components/p-15b6849a.js.map +0 -1
  240. package/dist/mg-components/p-3aecf564.entry.js +0 -2
  241. package/dist/mg-components/p-3aecf564.entry.js.map +0 -1
  242. package/dist/mg-components/p-6f3d70b2.entry.js +0 -2
  243. package/dist/mg-components/p-6f3d70b2.entry.js.map +0 -1
  244. package/dist/mg-components/p-a17ea0af.entry.js +0 -2
  245. package/dist/mg-components/p-a17ea0af.entry.js.map +0 -1
  246. package/dist/mg-components/p-d0086664.entry.js +0 -2
  247. package/dist/mg-components/p-ee51ec5e.js.map +0 -1
  248. /package/dist/mg-components/{p-a49e2b74.js.map → p-d9731ebc.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mg-menu.js","sourceRoot":"","sources":["../../../../../src/components/molecules/menu/mg-menu/mg-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Watch, Host } from '@stencil/core';\nimport { Direction, sizes } from './mg-menu.conf';\nimport type { MenuSizeType, ItemMoreType, DirectionType } from './mg-menu.conf';\nimport { toString } from '@mgdis/stencil-helpers';\n\n/**\n * @slot - Menu content\n */\n@Component({\n tag: 'mg-menu',\n styleUrl: '../../../../../node_modules/@mgdis/styles/dist/components/mg-menu.css',\n shadow: true,\n})\nexport class MgMenu {\n /************\n * Internal *\n ************/\n\n private readonly name = 'mg-menu';\n private menuItems: HTMLMgMenuItemElement[] = [];\n private focusedMenuItem = 0;\n private itemMoreElement: HTMLMgItemMoreElement;\n\n /**************\n * Decorators *\n **************/\n\n /**\n * Get component DOM element\n */\n @Element() element: HTMLMgMenuElement;\n\n /**\n * Menu label. Include short menu description.\n * Required to define accessibility required attribute `aria-label`\n */\n @Prop() label!: string;\n @Watch('label')\n validateLabel(newValue: MgMenu['label']): void {\n if (newValue === undefined && !this.element.hasAttribute('aria-label')) {\n throw new Error(`<${this.name}> prop \"label\" is required. Passed value: ${toString(newValue)}.`);\n }\n }\n\n /**\n * Component display direction.\n */\n @Prop({ reflect: true }) direction: DirectionType = Direction.HORIZONTAL;\n @Watch('direction')\n validateDirection(newValue: MgMenu['direction']): void {\n if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {\n throw new Error(`<${this.name}> prop \"direction\" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}. Passed value: ${toString(newValue)}.`);\n }\n }\n\n /**\n * Customize \"mg-item-more\" element\n * Used with direction: 'vertical' to manage overflow\n */\n @Prop() itemmore?: ItemMoreType;\n @Watch('itemmore')\n validateItemMore(newValue: MgMenu['itemmore']): void {\n if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {\n throw new Error(`<${this.name}> prop \"itemmore\" must be paired with direction ${Direction.HORIZONTAL}.`);\n } else if (newValue !== undefined) {\n this.renderMgItemMore();\n }\n }\n\n /**\n * Define mg-menu size\n */\n @Prop() size: MenuSizeType = 'medium';\n @Watch('size')\n validateSize(newValue: MgMenu['size']): void {\n if (!sizes.includes(newValue)) {\n throw new Error(`<${this.name}> prop \"size\" must be one of: ${sizes.join(', ')}. Passed value: ${toString(newValue)}.`);\n }\n }\n\n /**\n * is this menu a child menu. Used for conditional render.\n */\n @State() isChildMenu: boolean;\n\n /*************\n * Methods *\n *************/\n\n /**\n * Close matching menu-item\n * @param item - menu-item to close\n * @param condition - addionnal condition\n */\n private closeMenuItem = (item: HTMLMgMenuItemElement, condition: boolean): void => {\n if (!this.isChildMenu && condition) {\n item.expanded = false;\n }\n };\n\n /**\n * get mg-item-more child mg-menu-item element\n * @returns mg-menu-item element\n */\n private getItemMoreMenuItem = (): HTMLMgMenuItemElement => this.itemMoreElement?.shadowRoot?.querySelector('mg-menu-item');\n\n /**\n * Set item listend\n * @param item - mg-menu-item element\n * @param index - number\n */\n private setItemListener = (item: HTMLMgMenuItemElement, index: MgMenu['focusedMenuItem']): void => {\n ['click', 'focus'].forEach(trigger => {\n item.shadowRoot.querySelector('button,a').addEventListener(trigger, () => {\n this.focusedMenuItem = index;\n // reset expanded on previous active menu item\n const itemMoreMenuItem = this.getItemMoreMenuItem();\n (![null, undefined].includes(itemMoreMenuItem) ? [...this.menuItems, itemMoreMenuItem] : this.menuItems).forEach((item, index) => {\n this.closeMenuItem(item, index !== this.focusedMenuItem);\n });\n });\n });\n };\n\n /**\n * Store menu-items on component init and add listeners\n */\n private initMenuItemsListeners = (): void => {\n // add listeners on menu item and edit index\n this.menuItems.forEach((item, index) => {\n this.setItemListener(item, index);\n });\n };\n\n /**\n * Handle item-loaded event on mg-item-more element\n */\n private handleItemLoaded = (): void => {\n this.setItemListener(this.getItemMoreMenuItem(), this.menuItems.length);\n };\n\n /**\n * render mg-item-more\n */\n private renderMgItemMore = (): void => {\n if (this.direction !== Direction.HORIZONTAL || this.isChildMenu || this.element.children.length <= 1) {\n return;\n }\n\n // Insert mg-item-more outside the mg-menu shadowdom\n if (this.itemMoreElement === undefined) {\n this.itemMoreElement = document.createElement('mg-item-more');\n this.itemMoreElement.addEventListener('item-loaded', this.handleItemLoaded);\n this.element.appendChild(this.itemMoreElement);\n }\n\n // update mg-item-more props\n for (const attribute in this.itemmore) {\n const newValue = this.itemmore[attribute];\n // to improve rendering we use HTML attributes as much as possible\n if (['string', 'number'].includes(typeof newValue)) {\n this.itemMoreElement.setAttribute(attribute, newValue);\n } else {\n this.itemMoreElement[attribute] = newValue;\n }\n }\n if (this.itemmore?.size === undefined) this.itemMoreElement.size = this.size;\n };\n\n /*************\n * Lifecycle *\n *************/\n\n /**\n * Validate props\n */\n componentWillLoad(): void {\n this.validateDirection(this.direction);\n this.validateLabel(this.label);\n this.validateItemMore(this.itemmore);\n this.validateSize(this.size);\n }\n\n /**\n * Check if component slots configuration\n * @returns timeout\n */\n componentDidLoad(): ReturnType<typeof setTimeout> {\n // update props and states after componentDidLoad hook\n // return a promise to process action only in the FIRST render().\n // https://stenciljs.com/docs/component-lifecycle#componentwillload\n return setTimeout(() => {\n // store all menu-items\n this.menuItems = Array.from(this.element.children).filter(child => child.nodeName === 'MG-MENU-ITEM') as HTMLMgMenuItemElement[];\n this.isChildMenu = this.element.closest('mg-menu-item') !== null;\n\n // add mg-item-more to manage OverflowBehavior\n // when all props, states and DOM are already rendered we can render the mg-item-more\n this.renderMgItemMore();\n // then use mutation observer on children to improve reactivity\n new MutationObserver(() => {\n this.renderMgItemMore();\n }).observe(this.element, { childList: true });\n });\n }\n\n /**\n * Add listeners to items\n */\n componentDidRender(): void {\n this.initMenuItemsListeners();\n }\n\n /**\n * Render\n * @returns HTML Element\n */\n render(): HTMLElement {\n return (\n <Host role=\"list\" aria-label={this.label}>\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"mg-menu.js","sourceRoot":"","sources":["../../../../../src/components/molecules/menu/mg-menu/mg-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, Element, Watch, Host, Listen } from '@stencil/core';\nimport { Direction, sizes } from './mg-menu.conf';\nimport type { MenuSizeType, ItemMoreType, DirectionType } from './mg-menu.conf';\nimport { toString } from '@mgdis/stencil-helpers';\n\n/**\n * @slot - Menu content\n */\n@Component({\n tag: 'mg-menu',\n styleUrl: '../../../../../node_modules/@mgdis/styles/dist/components/mg-menu.css',\n shadow: true,\n})\nexport class MgMenu {\n /************\n * Internal *\n ************/\n\n private readonly name = 'mg-menu';\n\n /**************\n * Decorators *\n **************/\n\n /**\n * Get component DOM element\n */\n @Element() element: HTMLMgMenuElement;\n\n /**\n * Menu label. Include short menu description.\n * Required to define accessibility required attribute `aria-label`\n */\n @Prop() label!: string;\n @Watch('label')\n validateLabel(newValue: MgMenu['label']): void {\n if (newValue === undefined && !this.element.hasAttribute('aria-label')) {\n throw new Error(`<${this.name}> prop \"label\" is required. Passed value: ${toString(newValue)}.`);\n }\n }\n\n /**\n * Component display direction.\n */\n @Prop({ reflect: true }) direction: DirectionType = Direction.HORIZONTAL;\n @Watch('direction')\n validateDirection(newValue: MgMenu['direction']): void {\n if (![Direction.VERTICAL, Direction.HORIZONTAL].includes(newValue)) {\n throw new Error(`<${this.name}> prop \"direction\" must be one of: ${Direction.HORIZONTAL}, ${Direction.VERTICAL}. Passed value: ${toString(newValue)}.`);\n } else {\n this.updateMenuItems();\n }\n }\n\n /**\n * Customize \"mg-item-more\" element\n * Used with direction: 'vertical' to manage overflow\n */\n @Prop() itemmore?: ItemMoreType;\n @Watch('itemmore')\n validateItemMore(newValue: MgMenu['itemmore']): void {\n if (newValue !== undefined && this.direction !== Direction.HORIZONTAL) {\n throw new Error(`<${this.name}> prop \"itemmore\" must be paired with direction ${Direction.HORIZONTAL}.`);\n } else if (newValue !== undefined) {\n this.renderMgItemMore();\n }\n }\n\n /**\n * Define mg-menu size\n */\n @Prop() size: MenuSizeType = 'medium';\n @Watch('size')\n validateSize(newValue: MgMenu['size']): void {\n if (!sizes.includes(newValue)) {\n throw new Error(`<${this.name}> prop \"size\" must be one of: ${sizes.join(', ')}. Passed value: ${toString(newValue)}.`);\n }\n }\n\n /**\n * Define mg-menu-item listener when they are loaded\n * @param event - mg-item-loaded \"item-loaded\" custom event\n */\n @Listen('item-loaded')\n updateItemListener(event: CustomEvent & { target: HTMLMgMenuItemElement}): void {\n const itemToWatch = event.target.nodeName === 'MG-ITEM-MORE' ? event.target.shadowRoot.querySelector('mg-menu-item') : event.target;\n\n ['click', 'focus'].forEach(trigger => {\n itemToWatch.addEventListener(trigger, ():void => {\n const focusedItem: HTMLMgMenuItemElement = event.target.closest('mg-menu').querySelector('[data-has-focus]')\n // exit process if new focused item in the current menu children\n if(focusedItem === itemToWatch) return;\n\n // reset expanded on previous active menu item\n if(focusedItem) focusedItem.removeAttribute(\"data-has-focus\");\n\n // update focusedMenuItem with new value\n itemToWatch.setAttribute('data-has-focus','true');\n });\n })\n };\n\n /*************\n * Methods *\n *************/\n\n /**\n * Test if menu is a child menu\n * @returns truthy if menu is a child menu\n */\n private isChildMenu = (): boolean => this.element.closest('mg-menu-item') !== null;\n\n /**\n * Get menu children items\n * @returns menu children mg-menu-item\n */\n private getMenuItems = (menu = this.element): HTMLMgMenuItemElement[] => {\n const menuItems = Array.from(menu.children).filter(child => child.nodeName === 'MG-MENU-ITEM') as HTMLMgMenuItemElement[];\n const itemMoreMenuItem = menu.querySelector('mg-item-more')?.shadowRoot?.querySelector('mg-menu-item');\n if(itemMoreMenuItem) {\n menuItems.push(itemMoreMenuItem)\n }\n return menuItems;\n }\n\n /**\n * Update menu items\n */\n private updateMenuItems = (): void => {\n this.getMenuItems().forEach((item) => {\n item.dataset.styleDirection = this.direction\n })\n\n // render mg-item-more to manage OverflowBehavior\n this.renderMgItemMore();\n }\n\n /**\n * render mg-item-more\n */\n private renderMgItemMore = (): void => {\n if (this.direction === Direction.VERTICAL || this.direction === Direction.HORIZONTAL && this.isChildMenu() || this.element.children.length <= 1) {\n return;\n }\n\n // Insert mg-item-more outside the mg-menu shadowdom\n let itemMoreElement = this.element.querySelector('mg-item-more')\n if (itemMoreElement === null) {\n itemMoreElement = document.createElement('mg-item-more');\n this.element.appendChild(itemMoreElement);\n }\n\n // update mg-item-more props\n for (const propertie in this.itemmore) {\n itemMoreElement[propertie] = this.itemmore[propertie];\n }\n if (this.itemmore?.size === undefined) itemMoreElement.size = this.size;\n };\n\n /*************\n * Lifecycle *\n *************/\n\n /**\n * Validate props\n */\n componentWillLoad(): void {\n this.validateDirection(this.direction);\n this.validateLabel(this.label);\n this.validateItemMore(this.itemmore);\n this.validateSize(this.size);\n }\n\n /**\n * Check if component slots configuration\n */\n componentDidLoad(): void {\n // set menu-items\n this.updateMenuItems();\n\n // add listener to close main menu when focus leave it\n if(!this.isChildMenu() && this.direction === Direction.HORIZONTAL) {\n document.addEventListener('focusin', (event: FocusEvent & { target: HTMLElement}):void => {\n const isElementChild = (element: HTMLElement):boolean => {\n if (element === this.element) return true;\n else if(!element.parentElement) return false;\n else return isElementChild(element.parentElement);\n };\n \n if(!event.target.closest('mg-menu') || !isElementChild(event.target)) {\n const focusedItem = this.element.querySelector('[data-has-focus]')\n // reset expanded on previous active menu item\n if(focusedItem) focusedItem.removeAttribute('data-has-focus');\n }\n })\n }\n // add mutation observer to improve global reactivity\n new MutationObserver(this.updateMenuItems).observe(this.element, { childList: true });\n }\n\n /**\n * Render\n * @returns HTML Element\n */\n render(): HTMLElement {\n return (\n <Host role=\"list\" aria-label={this.label}>\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
@@ -17,15 +17,44 @@ export class MgMenuItem {
17
17
  ************/
18
18
  this.name = 'mg-menu-item';
19
19
  this.navigationButton = 'mg-c-menu-item__navigation-button';
20
+ /************
21
+ * Props *
22
+ ************/
23
+ /**
24
+ * Identifier is used to control mg-popover
25
+ */
26
+ this.identifier = createID('mg-menu-item');
27
+ /**
28
+ * Define menu-item status.
29
+ */
30
+ this.status = Status.VISIBLE;
31
+ /**
32
+ * Define menu-item content expanded.
33
+ */
34
+ this.expanded = false;
35
+ /**********
36
+ * States *
37
+ *********/
38
+ /**
39
+ * Define menu-item size.
40
+ */
41
+ this.size = 'medium';
42
+ /**
43
+ * Component button classes
44
+ */
45
+ this.navigationButtonClassList = new ClassList([this.navigationButton]);
46
+ /**
47
+ * Does component have children.
48
+ */
49
+ this.hasChildren = false;
20
50
  /***********
21
51
  * Methods *
22
52
  **********/
23
53
  /**
24
- * Toggle expanded prop value
54
+ * Get parent menu
55
+ * @returns parent menu
25
56
  */
26
- this.toggleExpanded = () => {
27
- this.expanded = !this.expanded;
28
- };
57
+ this.getParentMenu = () => this.element.closest('mg-menu');
29
58
  /**
30
59
  * Does an Element have given Status
31
60
  * @param mgMenuItemElement - to parse
@@ -33,6 +62,24 @@ export class MgMenuItem {
33
62
  * @returns true if element with status is found
34
63
  */
35
64
  this.hasStatus = (mgMenuItemElement, status) => mgMenuItemElement.status === status;
65
+ /**
66
+ * Condition to know if component should display a mg-popover
67
+ * @returns truthy if component display popover
68
+ */
69
+ this.hasPopover = () => this.isDirection(Direction.HORIZONTAL) && (this.isInMainMenu() && Array.from(this.element.children).some(element => !element.querySelector('[slot]')) || this.isItemMore) && this.href === undefined;
70
+ /**
71
+ * Method to control if one of component children have active status
72
+ * @returns truthy if component has active child
73
+ */
74
+ this.hasActiveChild = () => {
75
+ var _a;
76
+ 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'));
77
+ };
78
+ /**
79
+ * Is component an interactive item
80
+ * @returns truthy if element is clickable
81
+ */
82
+ this.isInteractiveItem = () => this.hasChildren || !isValidString(this.href);
36
83
  /**
37
84
  * Is component contextual direction match the given direction
38
85
  * @param direction - in parent menu
@@ -40,6 +87,11 @@ export class MgMenuItem {
40
87
  * @returns true is direction match the direction propertie
41
88
  */
42
89
  this.isDirection = (direction, compareWith = this.direction) => direction === compareWith;
90
+ /**
91
+ * Does component is in main menu
92
+ * @returns true if component is in main menu
93
+ */
94
+ this.isInMainMenu = () => this.getParentMenu() !== null && this.element.parentElement.closest('mg-menu-item') === null;
43
95
  /**
44
96
  * Update displayNotificationBadge
45
97
  * current component notification badge have priority over the slot badge when submenu contain badge
@@ -50,22 +102,34 @@ export class MgMenuItem {
50
102
  childMenu !== null && Array.from(childMenu.children).some((subItem) => subItem.querySelector('mg-badge') !== null && !subItem.hasAttribute('hidden'));
51
103
  };
52
104
  /**
53
- * Method to control if one of component children have active status
54
- * @returns truthy if component has active child
105
+ * Update expanded prop
106
+ * @param newValue - expanded new value
55
107
  */
56
- this.hasActiveChild = () => {
57
- var _a;
58
- 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'));
108
+ this.updateExpanded = (newValue) => {
109
+ if (this.isInteractiveItem()) {
110
+ // item is always expanded in vertical menu when has active child
111
+ this.expanded = this.isDirection(Direction.VERTICAL) && this.hasActiveChild() || newValue;
112
+ }
113
+ };
114
+ /**
115
+ * Update status
116
+ * @param guard - status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
117
+ */
118
+ this.updateStatus = (guard = []) => {
119
+ if (![Status.HIDDEN, Status.DISABLED, ...guard].includes(this.status)) {
120
+ this.status = this.hasActiveChild() ? Status.ACTIVE : Status.VISIBLE;
121
+ }
59
122
  };
60
123
  /**
61
- * Validate slots
124
+ * Update slots
62
125
  * @param guard - prevent action with guard. Default: false.
63
126
  */
64
- this.validateSlot = (guard = false) => {
127
+ this.updateSlot = (guard = false) => {
65
128
  // slot title AND metadata validation
66
129
  // add title on label AND metada slots due to text-overflow on these element
67
- if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined)
130
+ if (Array.from(this.element.children).find(child => child.getAttribute('slot') === 'label') === undefined) {
68
131
  throw new Error(`<${this.name}> slot "label" is required.`);
132
+ }
69
133
  ['label', 'metadata'].forEach(slot => {
70
134
  Array.from(this.element.querySelectorAll(`[slot="${slot}"]`)).forEach(element => {
71
135
  if (!isValidString(element.textContent))
@@ -76,39 +140,22 @@ export class MgMenuItem {
76
140
  });
77
141
  };
78
142
  /**
79
- * Update status
80
- * @param guard - status to exclude from process in addition to [Status.HIDDEN, Status.DISABLED] . Default: [].
81
- */
82
- this.updateStatus = (guard = []) => {
83
- if (![Status.HIDDEN, Status.DISABLED, ...guard].includes(this.status)) {
84
- this.status = this.hasActiveChild() ? Status.ACTIVE : Status.VISIBLE;
85
- }
86
- };
87
- /**
88
- * Init event-listeners
143
+ * Update menu item
144
+ * @param guard - prevent action with guard
89
145
  */
90
- this.initListeners = () => {
91
- var _a;
92
- // manage first sub-level menu-items
93
- Array.from(((_a = this.element.querySelector('mg-menu')) === null || _a === void 0 ? void 0 : _a.children) || []).forEach(item => {
94
- if (item.nodeName === 'MG-MENU-ITEM') {
95
- // manage child menu listener
96
- item.addEventListener('status-change', () => {
97
- this.updateStatus();
98
- });
99
- }
100
- });
146
+ this.updateItem = (guard) => {
147
+ const menu = this.getParentMenu();
148
+ // define element size
149
+ if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined && !this.isItemMore)
150
+ this.size = menu.size;
151
+ else if (this.isItemMore)
152
+ this.size = this.element.dataset.size;
153
+ // when vertical main menu item contain an active item we force expanded
154
+ this.updateExpanded(this.expanded);
155
+ this.updateStatus(guard);
156
+ this.updatePopoverGuard();
157
+ this.updateDisplayNotificationBadge();
101
158
  };
102
- /**
103
- * Get mg-popover identifier
104
- * @returns generated mg-popover identifier
105
- */
106
- this.getPopoverIdentifier = () => `${this.identifier}-popover`;
107
- /**
108
- * Condition to know if component should display a mg-popover
109
- * @returns truthy if component display popover
110
- */
111
- this.displayPopover = () => this.isDirection(Direction.HORIZONTAL) && this.hasChildren && this.href === undefined;
112
159
  /************
113
160
  * Handlers *
114
161
  ************/
@@ -117,106 +164,123 @@ export class MgMenuItem {
117
164
  * @param event - click on element
118
165
  */
119
166
  this.handleElementCLick = (event) => {
120
- if ((this.hasChildren && !this.isInMainMenu) || this.status === Status.DISABLED) {
167
+ if (this.status === Status.DISABLED) {
121
168
  event.preventDefault();
122
169
  event.stopPropagation();
123
170
  }
124
- // toggle expanded when mg-menu-item has child items
125
- if (this.hasChildren)
126
- this.toggleExpanded();
171
+ // for non "poperized" menu-item we toggle expanded manualy
172
+ this.updateExpanded(!this.expanded);
173
+ // when item is the last clickable item we close the parent popover
174
+ if (!this.isInteractiveItem()) {
175
+ const closePopover = (element) => {
176
+ if (!element)
177
+ return;
178
+ else if (element !== this.element && element.expanded && element.shadowRoot.querySelector('mg-popover') !== null) {
179
+ element.expanded = false;
180
+ }
181
+ else {
182
+ closePopover(element.parentElement.closest('mg-menu-item'));
183
+ }
184
+ };
185
+ closePopover(this.element);
186
+ }
127
187
  };
128
188
  /**
129
189
  * Handle popover element display-change event
130
190
  * @param event - popover display event
131
191
  */
132
192
  this.handlePopoverDisplay = (event) => {
133
- this.expanded = event.detail;
193
+ this.updateExpanded(event.detail);
134
194
  };
135
195
  /**
136
196
  * Render slot
137
197
  * @returns HTML Element
138
198
  */
139
199
  this.renderSlot = () => h("slot", null);
140
- this.identifier = createID('mg-menu-item');
141
- this.href = undefined;
142
- this.target = undefined;
143
- this.status = Status.VISIBLE;
144
- this.expanded = false;
145
- this.size = 'medium';
146
- this.navigationButtonClassList = new ClassList([this.navigationButton]);
147
- this.direction = undefined;
148
- this.isInMainMenu = undefined;
149
- this.isItemMore = undefined;
150
- this.hasChildren = false;
151
- this.displayNotificationBadge = undefined;
152
200
  }
153
201
  watchIdentifier(newValue) {
154
202
  if (!isValideID(newValue)) {
155
203
  console.error(`<mg-menu-item> prop "identifier" value is invalid. Passed value: ${toString(newValue)}.`);
156
204
  }
205
+ else {
206
+ this.popoverIdentifier = `${this.identifier}-popover`;
207
+ }
157
208
  }
158
209
  watchTarget(newValue) {
159
210
  if (newValue && !targets.includes(newValue)) {
160
211
  throw new Error(`<mg-link> prop "target" must be one of: ${targets.join(', ')}. Passed value: ${toString(newValue)}.`);
161
212
  }
162
213
  }
163
- validateStatus(newValue, oldValue) {
164
- if (oldValue !== undefined) {
214
+ watchStatus(newValue, oldValue) {
215
+ if (oldValue !== undefined)
165
216
  this.navigationButtonClassList.delete(`${this.navigationButton}--${oldValue}`);
166
- }
167
217
  this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
168
- this.statusChange.emit(newValue);
169
218
  }
170
- validateExpanded(newValue) {
171
- if (typeof newValue !== 'boolean')
219
+ watchExpanded(newValue) {
220
+ if (typeof newValue !== 'boolean') {
172
221
  throw new Error(`<${this.name}> prop "expanded" must be a boolean. Passed value: ${toString(newValue)}.`);
173
- // if menu-item has sub-menu we have to apply some updates:
174
- if (this.hasChildren) {
175
- const subItems = Array.from(this.element.querySelectorAll(this.name));
176
- if (!newValue) {
177
- // - when main menu item is NOT expanded we need NOT expanded sub-items and NOT expanded sub-content
178
- subItems.forEach(item => {
179
- item.expanded = false;
180
- });
181
- }
182
- else if (this.element.querySelector(`${this.name}[status="${Status.ACTIVE}"]`) !== null) {
183
- // - when expanded and contain an active item parents are expended too
184
- subItems.forEach(item => {
185
- if (this.hasStatus(item, Status.ACTIVE)) {
186
- item.expanded = true;
187
- }
188
- });
189
- }
222
+ }
223
+ else {
224
+ this.updateExpanded(newValue);
225
+ // when expanded all actives sub-items need to be expanded and non active closed
226
+ Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
227
+ if (item !== this.element)
228
+ item.expanded = newValue ? this.hasStatus(item, Status.ACTIVE) : false;
229
+ });
190
230
  }
191
231
  }
192
- validateSize(newValue, oldValue) {
193
- this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
232
+ watchSize(newValue, oldValue) {
233
+ if (oldValue !== undefined)
234
+ this.navigationButtonClassList.delete(`${this.navigationButton}--size-${oldValue}`);
194
235
  this.navigationButtonClassList.add(`${this.navigationButton}--size-${newValue}`);
195
236
  }
196
- validateDirection(newValue) {
197
- // manage menu items style depending to parent menu horientation
198
- this.element.setAttribute('data-style-direction', newValue);
237
+ validateDirection(newValue, oldValue) {
238
+ if (oldValue !== undefined)
239
+ this.navigationButtonClassList.delete(`${this.navigationButton}--${oldValue}`);
199
240
  this.navigationButtonClassList.add(`${this.navigationButton}--${newValue}`);
200
241
  // manage all sub levels child menu-items level with data-level attribut
201
- if (this.isDirection(Direction.VERTICAL, newValue)) {
202
- Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
242
+ Array.from(this.element.querySelectorAll('mg-menu-item')).forEach(item => {
243
+ if (this.isDirection(Direction.VERTICAL, newValue)) {
203
244
  item.dataset.level = `${(Number(item.dataset.level) || 1) + 1}`;
204
- });
205
- }
245
+ }
246
+ else {
247
+ delete item.dataset.level;
248
+ }
249
+ });
206
250
  }
207
251
  validateHasChildren(newValue) {
208
252
  if (newValue && this.element.href !== undefined) {
209
253
  throw new Error(`<${this.name}> prop "href" is unauthorizied when element is a parent.`);
210
254
  }
211
255
  }
256
+ /**
257
+ * direction value in dataset
258
+ * @param newValue - new direction value
259
+ */
260
+ // eslint-disable-next-line @stencil-community/no-unused-watch
261
+ watchDataStyleDirection(newValue) {
262
+ this.direction = newValue;
263
+ }
264
+ /**
265
+ * has focus value in dataset
266
+ * @param newValue - new direction value
267
+ */
268
+ // eslint-disable-next-line @stencil-community/no-unused-watch
269
+ watchDataHasFocus(newValue) {
270
+ if (!newValue)
271
+ this.updateExpanded(Boolean(newValue));
272
+ }
212
273
  /**
213
274
  * Render popover clickoutside guard for content slot
214
275
  */
215
276
  updatePopoverGuard() {
216
- if (this.displayPopover())
217
- Array.from(this.element.children)
218
- .filter((child) => !child.hasAttribute('slot') && child.nodeName !== 'MG-MENU' && Boolean(child.dataset))
219
- .forEach((slot) => (slot.dataset.mgPopoverGuard = this.getPopoverIdentifier()));
277
+ const subItem = this.element.querySelector('*:not([slot])');
278
+ if (!subItem)
279
+ return;
280
+ if (this.hasPopover())
281
+ subItem.dataset.mgPopoverGuard = this.popoverIdentifier;
282
+ else
283
+ delete subItem.dataset.mgPopoverGuard;
220
284
  }
221
285
  /*************
222
286
  * Lifecycle *
@@ -230,13 +294,12 @@ export class MgMenuItem {
230
294
  this.hasChildren = Array.from(this.element.children).some(child => !['image', 'information', 'label', 'metadata'].includes(child.getAttribute('slot')));
231
295
  this.messages = initLocales(this.element).messages.menuItem;
232
296
  this.isItemMore = this.element.dataset.overflowMore !== undefined;
233
- // Validate props
234
- this.validateStatus(this.status);
235
- this.validateExpanded(this.expanded);
297
+ // watchers
298
+ this.watchStatus(this.status);
299
+ this.watchExpanded(this.expanded);
236
300
  this.watchTarget(this.target);
237
301
  this.watchIdentifier(this.identifier);
238
- // Validate states
239
- this.validateSize(this.size);
302
+ this.watchSize(this.size);
240
303
  }
241
304
  /**
242
305
  * Check if component slots configuration
@@ -244,40 +307,36 @@ export class MgMenuItem {
244
307
  */
245
308
  componentDidLoad() {
246
309
  // validation
247
- this.validateSlot(true);
310
+ this.updateSlot(true);
248
311
  // update props and states after componentDidLoad hook
249
312
  // return a promise to process action only in the FIRST render().
250
313
  // https://stenciljs.com/docs/component-lifecycle#componentwillload
251
314
  return setTimeout(() => {
252
- // define menu-item context states
253
- const menu = this.element.closest('mg-menu');
254
- this.direction = this.isItemMore || menu === null ? Direction.HORIZONTAL : menu.direction;
255
- this.isInMainMenu = menu !== null && this.element.parentElement.closest('mg-menu-item') === null;
256
- if ((menu === null || menu === void 0 ? void 0 : menu.size) !== undefined)
257
- this.size = menu.size;
258
- if (this.isItemMore)
259
- this.size = this.element.dataset.size;
260
- // when main menu item contain an active item it will get the active style
261
- // AND if item is in vertical menu it will be expanded
262
- if (this.hasActiveChild() && this.isInMainMenu)
263
- this.expanded = this.isDirection(Direction.VERTICAL);
264
- this.updateStatus([Status.ACTIVE]);
265
- this.updateDisplayNotificationBadge();
266
- this.updatePopoverGuard();
267
- // manage child dom changes with mutationObserver and listners
268
- this.initListeners();
315
+ this.watchDataStyleDirection(this.element.dataset.styleDirection);
316
+ this.watchDataHasFocus(this.element.dataset.hasFocus);
317
+ this.updateItem([Status.ACTIVE]);
269
318
  // emit loaded event when component is fully loaded
270
319
  this.itemLoaded.emit();
271
320
  new MutationObserver(mutationsList => {
272
- if (mutationsList.some(mutation => mutation.attributeName === 'hidden'))
321
+ if (mutationsList.some(mutation => ['hidden', 'status'].includes(mutation.attributeName)))
273
322
  this.updateStatus(this.hasChildren ? undefined : [Status.ACTIVE]);
274
323
  if (mutationsList.some(mutation => mutation.type === 'characterData'))
275
- this.validateSlot();
276
- this.updateDisplayNotificationBadge();
324
+ this.updateSlot();
325
+ if (mutationsList.some(mutation => mutation.type === 'childList'))
326
+ this.updateItem();
277
327
  this.itemUpdated.emit();
278
328
  }).observe(this.element, { attributes: true, childList: true, characterData: true, subtree: true });
279
329
  }, 0);
280
330
  }
331
+ /**
332
+ * Emit event when component is updated
333
+ * @returns promise process wich emit the 'item-updated' event
334
+ */
335
+ componentShouldUpdate() {
336
+ return nextTick(() => {
337
+ this.itemUpdated.emit();
338
+ });
339
+ }
281
340
  /**
282
341
  * Render ineractive element
283
342
  * @returns HTML Element
@@ -292,15 +351,6 @@ export class MgMenuItem {
292
351
  [`${this.navigationButton}-chevron--rotate`]: this.expanded === true,
293
352
  } }, h("mg-icon", { icon: "chevron-down" })))));
294
353
  }
295
- /**
296
- * Emit event when component is updated
297
- * @returns promise process wich emit the 'item-updated' event
298
- */
299
- componentShouldUpdate() {
300
- return nextTick(() => {
301
- this.itemUpdated.emit();
302
- });
303
- }
304
354
  /**
305
355
  * Render
306
356
  * @returns HTML Element
@@ -308,9 +358,9 @@ export class MgMenuItem {
308
358
  render() {
309
359
  const getContainerClasses = () => ({
310
360
  ['mg-c-menu-item__collapse-container']: true,
311
- ['mg-c-menu-item__collapse-container--first-level']: (this.isInMainMenu || this.isItemMore) && this.isDirection(Direction.HORIZONTAL),
361
+ ['mg-c-menu-item__collapse-container--first-level']: (this.isInMainMenu() || this.isItemMore) && this.isDirection(Direction.HORIZONTAL),
312
362
  });
313
- 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
363
+ return (h(Host, { key: '010958810569e4b777b08d6aebc39be61bb03291', 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
314
364
  }, this.renderInteractiveElement(), h("div", { class: getContainerClasses(), slot: "content" }, this.renderSlot()))) : ([
315
365
  this.renderInteractiveElement(),
316
366
  h("div", { key: "vertical-container", class: getContainerClasses(), hidden: !this.expanded }, this.renderSlot()),
@@ -344,6 +394,8 @@ export class MgMenuItem {
344
394
  "tags": [],
345
395
  "text": "Identifier is used to control mg-popover"
346
396
  },
397
+ "getter": false,
398
+ "setter": false,
347
399
  "attribute": "identifier",
348
400
  "reflect": true,
349
401
  "defaultValue": "createID('mg-menu-item')"
@@ -362,6 +414,8 @@ export class MgMenuItem {
362
414
  "tags": [],
363
415
  "text": "Define menu-item href\nwhen defined menu-item contain an anchor instead of button"
364
416
  },
417
+ "getter": false,
418
+ "setter": false,
365
419
  "attribute": "href",
366
420
  "reflect": false
367
421
  },
@@ -385,6 +439,8 @@ export class MgMenuItem {
385
439
  "tags": [],
386
440
  "text": "Define target type"
387
441
  },
442
+ "getter": false,
443
+ "setter": false,
388
444
  "attribute": "target",
389
445
  "reflect": false
390
446
  },
@@ -408,6 +464,8 @@ export class MgMenuItem {
408
464
  "tags": [],
409
465
  "text": "Define menu-item status."
410
466
  },
467
+ "getter": false,
468
+ "setter": false,
411
469
  "attribute": "status",
412
470
  "reflect": true,
413
471
  "defaultValue": "Status.VISIBLE"
@@ -426,6 +484,8 @@ export class MgMenuItem {
426
484
  "tags": [],
427
485
  "text": "Define menu-item content expanded."
428
486
  },
487
+ "getter": false,
488
+ "setter": false,
429
489
  "attribute": "expanded",
430
490
  "reflect": false,
431
491
  "defaultValue": "false"
@@ -437,7 +497,6 @@ export class MgMenuItem {
437
497
  "size": {},
438
498
  "navigationButtonClassList": {},
439
499
  "direction": {},
440
- "isInMainMenu": {},
441
500
  "isItemMore": {},
442
501
  "hasChildren": {},
443
502
  "displayNotificationBadge": {}
@@ -445,26 +504,6 @@ export class MgMenuItem {
445
504
  }
446
505
  static get events() {
447
506
  return [{
448
- "method": "statusChange",
449
- "name": "status-change",
450
- "bubbles": true,
451
- "cancelable": true,
452
- "composed": true,
453
- "docs": {
454
- "tags": [],
455
- "text": "Emited event when status change"
456
- },
457
- "complexType": {
458
- "original": "HTMLMgMenuItemElement['status']",
459
- "resolved": "\"active\" | \"disabled\" | \"hidden\" | \"visible\"",
460
- "references": {
461
- "HTMLMgMenuItemElement": {
462
- "location": "global",
463
- "id": "global::HTMLMgMenuItemElement"
464
- }
465
- }
466
- }
467
- }, {
468
507
  "method": "itemLoaded",
469
508
  "name": "item-loaded",
470
509
  "bubbles": true,
@@ -506,19 +545,25 @@ export class MgMenuItem {
506
545
  "methodName": "watchTarget"
507
546
  }, {
508
547
  "propName": "status",
509
- "methodName": "validateStatus"
548
+ "methodName": "watchStatus"
510
549
  }, {
511
550
  "propName": "expanded",
512
- "methodName": "validateExpanded"
551
+ "methodName": "watchExpanded"
513
552
  }, {
514
553
  "propName": "size",
515
- "methodName": "validateSize"
554
+ "methodName": "watchSize"
516
555
  }, {
517
556
  "propName": "direction",
518
557
  "methodName": "validateDirection"
519
558
  }, {
520
559
  "propName": "hasChildren",
521
560
  "methodName": "validateHasChildren"
561
+ }, {
562
+ "propName": "data-style-direction",
563
+ "methodName": "watchDataStyleDirection"
564
+ }, {
565
+ "propName": "data-has-focus",
566
+ "methodName": "watchDataHasFocus"
522
567
  }];
523
568
  }
524
569
  }