@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.
- package/dist/cjs/{index-a5b2cd1b.js → index-1a5a1081.js} +331 -162
- package/dist/cjs/index-1a5a1081.js.map +1 -0
- package/dist/cjs/{index-cc11af95.js → index-ede3b3dc.js} +3 -3
- package/dist/cjs/{index-cc11af95.js.map → index-ede3b3dc.js.map} +1 -1
- package/dist/cjs/{index.es-ac7c22e3.js → index.es-a112f649.js} +40 -40
- package/dist/cjs/index.es-a112f649.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/mg-action-more_36.cjs.entry.js +3411 -2633
- package/dist/cjs/mg-action-more_36.cjs.entry.js.map +1 -1
- package/dist/cjs/mg-alert.cjs.entry.js +15 -12
- package/dist/cjs/mg-alert.cjs.entry.js.map +1 -1
- package/dist/cjs/mg-components.cjs.js +3 -3
- package/dist/cjs/mg-components.cjs.js.map +1 -1
- package/dist/cjs/mg-loader.cjs.entry.js +5 -7
- package/dist/cjs/mg-loader.cjs.entry.js.map +1 -1
- package/dist/cjs/mg-progress.cjs.entry.js +26 -11
- package/dist/cjs/mg-progress.cjs.entry.js.map +1 -1
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/atoms/internals/mg-character-left/mg-character-left.js +10 -3
- package/dist/collection/components/atoms/internals/mg-character-left/mg-character-left.js.map +1 -1
- package/dist/collection/components/atoms/internals/mg-input-title/mg-input-title.js +15 -4
- package/dist/collection/components/atoms/internals/mg-input-title/mg-input-title.js.map +1 -1
- package/dist/collection/components/atoms/mg-badge/mg-badge.js +15 -4
- package/dist/collection/components/atoms/mg-badge/mg-badge.js.map +1 -1
- package/dist/collection/components/atoms/mg-button/mg-button.js +50 -11
- package/dist/collection/components/atoms/mg-button/mg-button.js.map +1 -1
- package/dist/collection/components/atoms/mg-card/mg-card.js +1 -1
- package/dist/collection/components/atoms/mg-divider/mg-divider.js +9 -1
- package/dist/collection/components/atoms/mg-divider/mg-divider.js.map +1 -1
- package/dist/collection/components/atoms/mg-icon/mg-icon.js +22 -6
- package/dist/collection/components/atoms/mg-icon/mg-icon.js.map +1 -1
- package/dist/collection/components/atoms/mg-tag/mg-tag.js +14 -4
- package/dist/collection/components/atoms/mg-tag/mg-tag.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +3 -4
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js +1 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js.map +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +95 -43
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.js +50 -13
- package/dist/collection/components/molecules/inputs/mg-input/mg-input.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js +29 -11
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox-paginated/mg-input-checkbox-paginated.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +106 -33
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +99 -36
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +130 -35
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +87 -25
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +86 -26
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +92 -30
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +108 -31
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +109 -29
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js.map +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +67 -21
- package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js.map +1 -1
- package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js +16 -70
- package/dist/collection/components/molecules/internals/mg-item-more/mg-item-more.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +101 -89
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js.map +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +202 -157
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js.map +1 -1
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +19 -8
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js.map +1 -1
- package/dist/collection/components/molecules/mg-alert/mg-alert.js +15 -6
- package/dist/collection/components/molecules/mg-alert/mg-alert.js.map +1 -1
- package/dist/collection/components/molecules/mg-details/mg-details.js +22 -5
- package/dist/collection/components/molecules/mg-details/mg-details.js.map +1 -1
- package/dist/collection/components/molecules/mg-form/mg-form.js +48 -16
- package/dist/collection/components/molecules/mg-form/mg-form.js.map +1 -1
- package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +13 -3
- package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js.map +1 -1
- package/dist/collection/components/molecules/mg-loader/mg-loader.js +5 -5
- package/dist/collection/components/molecules/mg-loader/mg-loader.js.map +1 -1
- package/dist/collection/components/molecules/mg-message/mg-message.js +22 -6
- package/dist/collection/components/molecules/mg-message/mg-message.js.map +1 -1
- package/dist/collection/components/molecules/mg-modal/mg-modal.js +37 -9
- package/dist/collection/components/molecules/mg-modal/mg-modal.js.map +1 -1
- package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +28 -9
- package/dist/collection/components/molecules/mg-pagination/mg-pagination.js.map +1 -1
- package/dist/collection/components/molecules/mg-panel/mg-panel.js +48 -13
- package/dist/collection/components/molecules/mg-panel/mg-panel.js.map +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +10 -2
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js.map +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js +2 -0
- package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js.map +1 -0
- package/dist/collection/components/molecules/mg-popover/mg-popover.js +133 -52
- package/dist/collection/components/molecules/mg-popover/mg-popover.js.map +1 -1
- package/dist/collection/components/molecules/mg-progress/mg-progress.js +26 -1
- package/dist/collection/components/molecules/mg-progress/mg-progress.js.map +1 -1
- package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +3 -2
- package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js.map +1 -1
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +28 -8
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.js.map +1 -1
- package/dist/collection/utils/behaviors.utils.js +44 -107
- package/dist/collection/utils/behaviors.utils.js.map +1 -1
- package/dist/collection/utils/floating-ui.utils.js +33 -0
- package/dist/collection/utils/floating-ui.utils.js.map +1 -0
- package/dist/components/floating-ui.utils.js +2099 -0
- package/dist/components/floating-ui.utils.js.map +1 -0
- package/dist/components/index.es.js +37 -37
- package/dist/components/index.es.js.map +1 -1
- package/dist/components/index2.js +2 -2
- package/dist/components/mg-action-more.js +15 -12
- package/dist/components/mg-action-more.js.map +1 -1
- package/dist/components/mg-alert.js +13 -10
- package/dist/components/mg-alert.js.map +1 -1
- package/dist/components/mg-badge2.js +12 -9
- package/dist/components/mg-badge2.js.map +1 -1
- package/dist/components/mg-button2.js +36 -15
- package/dist/components/mg-button2.js.map +1 -1
- package/dist/components/mg-card2.js +2 -2
- package/dist/components/mg-card2.js.map +1 -1
- package/dist/components/mg-character-left2.js +8 -7
- package/dist/components/mg-character-left2.js.map +1 -1
- package/dist/components/mg-details.js +14 -5
- package/dist/components/mg-details.js.map +1 -1
- package/dist/components/mg-divider2.js +7 -1
- package/dist/components/mg-divider2.js.map +1 -1
- package/dist/components/mg-form.js +35 -21
- package/dist/components/mg-form.js.map +1 -1
- package/dist/components/mg-icon2.js +17 -11
- package/dist/components/mg-icon2.js.map +1 -1
- package/dist/components/mg-illustrated-message.js +12 -6
- package/dist/components/mg-illustrated-message.js.map +1 -1
- package/dist/components/mg-input-checkbox-paginated2.js +14 -10
- package/dist/components/mg-input-checkbox-paginated2.js.map +1 -1
- package/dist/components/mg-input-checkbox.js +69 -36
- package/dist/components/mg-input-checkbox.js.map +1 -1
- package/dist/components/mg-input-date.js +75 -44
- package/dist/components/mg-input-date.js.map +1 -1
- package/dist/components/mg-input-numeric.js +88 -43
- package/dist/components/mg-input-numeric.js.map +1 -1
- package/dist/components/mg-input-password.js +54 -26
- package/dist/components/mg-input-password.js.map +1 -1
- package/dist/components/mg-input-radio.js +58 -30
- package/dist/components/mg-input-radio.js.map +1 -1
- package/dist/components/mg-input-select2.js +58 -34
- package/dist/components/mg-input-select2.js.map +1 -1
- package/dist/components/mg-input-text2.js +67 -36
- package/dist/components/mg-input-text2.js.map +1 -1
- package/dist/components/mg-input-textarea.js +69 -33
- package/dist/components/mg-input-textarea.js.map +1 -1
- package/dist/components/mg-input-title2.js +10 -7
- package/dist/components/mg-input-title2.js.map +1 -1
- package/dist/components/mg-input-toggle.js +42 -24
- package/dist/components/mg-input-toggle.js.map +1 -1
- package/dist/components/mg-input2.js +35 -18
- package/dist/components/mg-input2.js.map +1 -1
- package/dist/components/mg-item-more2.js +146 -270
- package/dist/components/mg-item-more2.js.map +1 -1
- package/dist/components/mg-loader.js +3 -5
- package/dist/components/mg-loader.js.map +1 -1
- package/dist/components/mg-menu-item2.js +200 -148
- package/dist/components/mg-menu-item2.js.map +1 -1
- package/dist/components/mg-message2.js +22 -10
- package/dist/components/mg-message2.js.map +1 -1
- package/dist/components/mg-modal.js +33 -15
- package/dist/components/mg-modal.js.map +1 -1
- package/dist/components/mg-pagination2.js +21 -14
- package/dist/components/mg-pagination2.js.map +1 -1
- package/dist/components/mg-panel.js +37 -20
- package/dist/components/mg-panel.js.map +1 -1
- package/dist/components/mg-popover-content2.js +11 -5
- package/dist/components/mg-popover-content2.js.map +1 -1
- package/dist/components/mg-popover2.js +119 -52
- package/dist/components/mg-popover2.js.map +1 -1
- package/dist/components/mg-progress.js +25 -10
- package/dist/components/mg-progress.js.map +1 -1
- package/dist/components/mg-skip-links.js +0 -1
- package/dist/components/mg-skip-links.js.map +1 -1
- package/dist/components/mg-tabs.js +26 -16
- package/dist/components/mg-tabs.js.map +1 -1
- package/dist/components/mg-tag.js +11 -7
- package/dist/components/mg-tag.js.map +1 -1
- package/dist/components/mg-tooltip-content2.js +2 -3
- package/dist/components/mg-tooltip-content2.js.map +1 -1
- package/dist/components/mg-tooltip2.js +86 -45
- package/dist/components/mg-tooltip2.js.map +1 -1
- package/dist/esm/{index-eb0e1053.js → index-5059254f.js} +331 -162
- package/dist/esm/index-5059254f.js.map +1 -0
- package/dist/esm/{index-f3d3fb70.js → index-a7c3b5c5.js} +3 -3
- package/dist/esm/{index-f3d3fb70.js.map → index-a7c3b5c5.js.map} +1 -1
- package/dist/esm/{index.es-940821a9.js → index.es-5e0101ac.js} +38 -38
- package/dist/esm/index.es-5e0101ac.js.map +1 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/mg-action-more_36.entry.js +3411 -2633
- package/dist/esm/mg-action-more_36.entry.js.map +1 -1
- package/dist/esm/mg-alert.entry.js +15 -12
- package/dist/esm/mg-alert.entry.js.map +1 -1
- package/dist/esm/mg-components.js +4 -4
- package/dist/esm/mg-components.js.map +1 -1
- package/dist/esm/mg-loader.entry.js +5 -7
- package/dist/esm/mg-loader.entry.js.map +1 -1
- package/dist/esm/mg-progress.entry.js +26 -11
- package/dist/esm/mg-progress.entry.js.map +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/mg-components.esm.js.map +1 -1
- package/dist/mg-components/p-1a162791.entry.js +2 -0
- package/dist/mg-components/{p-d0086664.entry.js.map → p-1a162791.entry.js.map} +1 -1
- package/dist/mg-components/p-2403e01d.entry.js +2 -0
- package/dist/mg-components/p-2403e01d.entry.js.map +1 -0
- package/dist/mg-components/p-6c831a83.entry.js +2 -0
- package/dist/mg-components/p-6c831a83.entry.js.map +1 -0
- package/dist/mg-components/p-ad64ab4a.entry.js +2 -0
- package/dist/mg-components/p-ad64ab4a.entry.js.map +1 -0
- package/dist/mg-components/{p-ee51ec5e.js → p-b6c1a6ce.js} +2 -2
- package/dist/mg-components/p-b6c1a6ce.js.map +1 -0
- package/dist/mg-components/{p-a49e2b74.js → p-d9731ebc.js} +2 -2
- package/dist/mg-components/p-e39791fa.js +3 -0
- package/dist/mg-components/p-e39791fa.js.map +1 -0
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip.conf.d.ts +6 -0
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +7 -6
- package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +6 -0
- package/dist/types/components/molecules/internals/mg-item-more/mg-item-more.d.ts +1 -15
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +14 -30
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +54 -39
- package/dist/types/components/molecules/mg-details/mg-details.d.ts +4 -0
- package/dist/types/components/molecules/mg-popover/mg-popover.conf.d.ts +6 -0
- package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +13 -8
- package/dist/types/components.d.ts +8 -11
- package/dist/types/utils/behaviors.utils.d.ts +15 -44
- package/dist/types/utils/floating-ui.utils.d.ts +19 -0
- package/ide/intellij/web-types.json +3 -7
- package/ide/vscode/html-custom-data.json +2 -2
- package/package.json +24 -24
- package/dist/cjs/index-a5b2cd1b.js.map +0 -1
- package/dist/cjs/index.es-ac7c22e3.js.map +0 -1
- package/dist/components/popper.js +0 -1794
- package/dist/components/popper.js.map +0 -1
- package/dist/esm/index-eb0e1053.js.map +0 -1
- package/dist/esm/index.es-940821a9.js.map +0 -1
- package/dist/mg-components/p-15b6849a.js +0 -3
- package/dist/mg-components/p-15b6849a.js.map +0 -1
- package/dist/mg-components/p-3aecf564.entry.js +0 -2
- package/dist/mg-components/p-3aecf564.entry.js.map +0 -1
- package/dist/mg-components/p-6f3d70b2.entry.js +0 -2
- package/dist/mg-components/p-6f3d70b2.entry.js.map +0 -1
- package/dist/mg-components/p-a17ea0af.entry.js +0 -2
- package/dist/mg-components/p-a17ea0af.entry.js.map +0 -1
- package/dist/mg-components/p-d0086664.entry.js +0 -2
- package/dist/mg-components/p-ee51ec5e.js.map +0 -1
- /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
|
-
*
|
|
54
|
+
* Get parent menu
|
|
55
|
+
* @returns parent menu
|
|
25
56
|
*/
|
|
26
|
-
this.
|
|
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
|
-
*
|
|
54
|
-
* @
|
|
105
|
+
* Update expanded prop
|
|
106
|
+
* @param newValue - expanded new value
|
|
55
107
|
*/
|
|
56
|
-
this.
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
*
|
|
124
|
+
* Update slots
|
|
62
125
|
* @param guard - prevent action with guard. Default: false.
|
|
63
126
|
*/
|
|
64
|
-
this.
|
|
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
|
|
80
|
-
* @param guard -
|
|
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.
|
|
91
|
-
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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 (
|
|
167
|
+
if (this.status === Status.DISABLED) {
|
|
121
168
|
event.preventDefault();
|
|
122
169
|
event.stopPropagation();
|
|
123
170
|
}
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
193
|
-
|
|
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
|
-
|
|
198
|
-
|
|
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
|
-
|
|
202
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
//
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
this.
|
|
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
|
|
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.
|
|
276
|
-
|
|
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: '
|
|
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": "
|
|
548
|
+
"methodName": "watchStatus"
|
|
510
549
|
}, {
|
|
511
550
|
"propName": "expanded",
|
|
512
|
-
"methodName": "
|
|
551
|
+
"methodName": "watchExpanded"
|
|
513
552
|
}, {
|
|
514
553
|
"propName": "size",
|
|
515
|
-
"methodName": "
|
|
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
|
}
|