@mgdis/mg-components 5.7.0 → 5.8.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 (53) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/mg-action-more_31.cjs.entry.js +216 -565
  3. package/dist/cjs/mg-components.cjs.js +1 -1
  4. package/dist/cjs/mg-item-more.cjs.entry.js +273 -0
  5. package/dist/cjs/mg-menu.conf-9afe6571.js +242 -0
  6. package/dist/collection/collection-manifest.json +2 -1
  7. package/dist/collection/components/atoms/mg-button/mg-button.js +24 -0
  8. package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +8 -0
  9. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +6 -2
  10. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +0 -13
  11. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +39 -67
  12. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +3 -3
  13. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +156 -77
  14. package/dist/collection/components/molecules/mg-item-more/mg-item-more.conf.js +1 -0
  15. package/dist/collection/components/molecules/mg-item-more/mg-item-more.css +30 -0
  16. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +200 -0
  17. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +0 -2
  18. package/dist/collection/styles/navigation-button.scss +1 -1
  19. package/dist/collection/utils/behaviors.utils.js +33 -29
  20. package/dist/components/index.d.ts +1 -0
  21. package/dist/components/index.js +1 -0
  22. package/dist/components/mg-action-more.js +2 -1
  23. package/dist/components/mg-button2.js +4 -1
  24. package/dist/components/mg-icon2.js +8 -0
  25. package/dist/components/mg-item-more.d.ts +11 -0
  26. package/dist/components/mg-item-more.js +336 -0
  27. package/dist/components/mg-menu-item2.js +134 -250
  28. package/dist/components/mg-menu.conf.js +14 -0
  29. package/dist/components/mg-menu2.js +35 -102
  30. package/dist/components/mg-tabs.js +1 -1
  31. package/dist/components/mg-tooltip2.js +6 -2
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/esm/mg-action-more_31.entry.js +185 -534
  34. package/dist/esm/mg-components.js +1 -1
  35. package/dist/esm/mg-item-more.entry.js +269 -0
  36. package/dist/esm/mg-menu.conf-881fbd82.js +235 -0
  37. package/dist/mg-components/mg-components.css +1 -1
  38. package/dist/mg-components/mg-components.esm.js +1 -1
  39. package/dist/mg-components/p-1221773c.entry.js +1 -0
  40. package/dist/mg-components/p-367f92d2.js +1 -0
  41. package/dist/mg-components/p-6aeded97.entry.js +1 -0
  42. package/dist/mg-components/styles/navigation-button.scss +1 -1
  43. package/dist/types/components/atoms/mg-button/mg-button.d.ts +5 -0
  44. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +3 -27
  45. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +9 -27
  46. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +5 -0
  47. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +65 -16
  48. package/dist/types/components/molecules/mg-item-more/mg-item-more.conf.d.ts +26 -0
  49. package/dist/types/components/molecules/mg-item-more/mg-item-more.d.ts +74 -0
  50. package/dist/types/components.d.ts +66 -12
  51. package/dist/types/utils/behaviors.utils.d.ts +12 -5
  52. package/package.json +1 -1
  53. package/dist/mg-components/p-4cfd5423.entry.js +0 -1
@@ -17,7 +17,7 @@ const patchBrowser = () => {
17
17
  };
18
18
 
19
19
  patchBrowser().then(options => {
20
- return index.bootstrapLazy([["mg-action-more_31.cjs",[[1,"mg-action-more",{"icon":[16],"button":[16],"items":[16],"displayChevron":[4,"display-chevron"],"expanded":[32]}],[1,"mg-panel",{"identifier":[1],"panelTitle":[1025,"panel-title"],"titlePattern":[1025,"title-pattern"],"titlePatternErrorMessage":[1025,"title-pattern-error-message"],"expanded":[1028],"expandToggleDisabled":[1028,"expand-toggle-disabled"],"titleEditable":[4,"title-editable"],"classList":[32],"isEditing":[32],"updatedPanelTitle":[32]}],[1,"mg-pagination",{"identifier":[1],"label":[1025],"hideNavigationLabels":[4,"hide-navigation-labels"],"totalPages":[2,"total-pages"],"currentPage":[1538,"current-page"]}],[1,"mg-input-textarea",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"maxlength":[2],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"pattern":[1],"patternErrorMessage":[1,"pattern-error-message"],"rows":[2],"tooltip":[1],"displayCharacterLeft":[4,"display-character-left"],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"resizable":[1],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-checkbox",{"value":[1040],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"inputVerticalList":[4,"input-vertical-list"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"checkboxItems":[32],"displayError":[64]}],[1,"mg-input-date",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"min":[1],"max":[1],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-numeric",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"type":[1],"currency":[1],"max":[2],"min":[2],"integerLength":[2,"integer-length"],"decimalLength":[2,"decimal-length"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"hasFocus":[32],"displayError":[64]}],[1,"mg-input-password",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-radio",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"inputVerticalList":[4,"input-vertical-list"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"options":[32],"displayError":[64]}],[1,"mg-input-toggle",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"isOnOff":[4,"is-on-off"],"isIcon":[4,"is-icon"],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"classList":[32],"options":[32],"checked":[32]}],[1,"mg-message",{"identifier":[1],"delay":[2],"variant":[1],"closeButton":[1028,"close-button"],"hide":[1028],"classList":[32],"hasActions":[32]}],[1,"mg-modal",{"identifier":[1],"modalTitle":[1,"modal-title"],"closeButton":[1028,"close-button"],"hide":[1028],"hasActions":[32],"hasContent":[32],"classList":[32]},[[8,"keydown","handleKeyDown"]]],[1,"mg-tabs",{"identifier":[1],"label":[1],"size":[1],"items":[16],"activeTab":[1538,"active-tab"],"tabs":[32],"classList":[32]}],[1,"mg-details",{"toggleClosed":[1,"toggle-closed"],"toggleOpened":[1,"toggle-opened"],"hideSummary":[4,"hide-summary"],"expanded":[1028]}],[1,"mg-divider",{"size":[1]}],[1,"mg-form",{"identifier":[1],"name":[1],"readonly":[4],"disabled":[4],"valid":[1028],"invalid":[1028],"classList":[32],"requiredMessage":[32],"displayError":[64]}],[1,"mg-illustrated-message",{"size":[1],"direction":[1]}],[1,"mg-skip-links",{"links":[1040]}],[1,"mg-tag",{"variant":[1],"outline":[4],"soft":[4],"classList":[32]}],[1,"mg-input-text",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"type":[1],"icon":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"maxlength":[2],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"pattern":[1],"patternErrorMessage":[1,"pattern-error-message"],"tooltip":[1],"displayCharacterLeft":[4,"display-character-left"],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"setFocus":[64],"displayError":[64]}],[1,"mg-input-select",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1025],"placeholderHide":[4,"placeholder-hide"],"placeholderDisabled":[4,"placeholder-disabled"],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"options":[32],"valueExist":[32],"readonlyValue":[32],"displayError":[64]}],[1,"mg-menu",{"label":[1],"direction":[513],"moreitem":[16],"size":[1],"isChildMenu":[32],"hasOverflow":[32]}],[1,"mg-menu-item",{"href":[1],"status":[1537],"expanded":[1028],"size":[32],"navigationButtonClassList":[32],"direction":[32],"isInMainMenu":[32],"hasChildren":[32],"displayNotificationBadge":[32]}],[1,"mg-popover",{"identifier":[1],"placement":[1],"arrowHide":[4,"arrow-hide"],"closeButton":[4,"close-button"],"display":[1028],"disabled":[1028],"classList":[32]}],[2,"mg-character-left",{"identifier":[1],"characters":[1],"maxlength":[2]}],[1,"mg-badge",{"value":[1032],"label":[1],"variant":[1],"outline":[4],"classList":[32]}],[1,"mg-card"],[1,"mg-button",{"variant":[1],"identifier":[1],"label":[1],"type":[1],"fullWidth":[1028,"full-width"],"form":[1025],"disabled":[1028],"isIcon":[4,"is-icon"],"disableOnClick":[4,"disable-on-click"],"loading":[32],"classList":[32]}],[6,"mg-input-title",{"identifier":[1],"required":[4],"isLegend":[4,"is-legend"],"tagName":[32]}],[1,"mg-tooltip",{"identifier":[1],"message":[1],"placement":[1],"display":[1028],"disabled":[1028]}],[1,"mg-icon",{"icon":[1],"size":[1],"variant":[1],"spin":[4],"classList":[32]}]]]], options);
20
+ return index.bootstrapLazy([["mg-action-more_31.cjs",[[1,"mg-action-more",{"icon":[16],"button":[16],"items":[16],"displayChevron":[4,"display-chevron"],"expanded":[32]}],[1,"mg-panel",{"identifier":[1],"panelTitle":[1025,"panel-title"],"titlePattern":[1025,"title-pattern"],"titlePatternErrorMessage":[1025,"title-pattern-error-message"],"expanded":[1028],"expandToggleDisabled":[1028,"expand-toggle-disabled"],"titleEditable":[4,"title-editable"],"classList":[32],"isEditing":[32],"updatedPanelTitle":[32]}],[1,"mg-pagination",{"identifier":[1],"label":[1025],"hideNavigationLabels":[4,"hide-navigation-labels"],"totalPages":[2,"total-pages"],"currentPage":[1538,"current-page"]}],[1,"mg-input-textarea",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"maxlength":[2],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"pattern":[1],"patternErrorMessage":[1,"pattern-error-message"],"rows":[2],"tooltip":[1],"displayCharacterLeft":[4,"display-character-left"],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"resizable":[1],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-checkbox",{"value":[1040],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"inputVerticalList":[4,"input-vertical-list"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"checkboxItems":[32],"displayError":[64]}],[1,"mg-input-date",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"min":[1],"max":[1],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-numeric",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"type":[1],"currency":[1],"max":[2],"min":[2],"integerLength":[2,"integer-length"],"decimalLength":[2,"decimal-length"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"hasFocus":[32],"displayError":[64]}],[1,"mg-input-password",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"displayError":[64]}],[1,"mg-input-radio",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"inputVerticalList":[4,"input-vertical-list"],"required":[4],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"options":[32],"displayError":[64]}],[1,"mg-input-toggle",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"isOnOff":[4,"is-on-off"],"isIcon":[4,"is-icon"],"readonly":[4],"disabled":[4],"tooltip":[1],"helpText":[1,"help-text"],"classList":[32],"options":[32],"checked":[32]}],[1,"mg-message",{"identifier":[1],"delay":[2],"variant":[1],"closeButton":[1028,"close-button"],"hide":[1028],"classList":[32],"hasActions":[32]}],[1,"mg-modal",{"identifier":[1],"modalTitle":[1,"modal-title"],"closeButton":[1028,"close-button"],"hide":[1028],"hasActions":[32],"hasContent":[32],"classList":[32]},[[8,"keydown","handleKeyDown"]]],[1,"mg-tabs",{"identifier":[1],"label":[1],"size":[1],"items":[16],"activeTab":[1538,"active-tab"],"tabs":[32],"classList":[32]}],[1,"mg-details",{"toggleClosed":[1,"toggle-closed"],"toggleOpened":[1,"toggle-opened"],"hideSummary":[4,"hide-summary"],"expanded":[1028]}],[1,"mg-divider",{"size":[1]}],[1,"mg-form",{"identifier":[1],"name":[1],"readonly":[4],"disabled":[4],"valid":[1028],"invalid":[1028],"classList":[32],"requiredMessage":[32],"displayError":[64]}],[1,"mg-illustrated-message",{"size":[1],"direction":[1]}],[1,"mg-skip-links",{"links":[1040]}],[1,"mg-tag",{"variant":[1],"outline":[4],"soft":[4],"classList":[32]}],[1,"mg-input-text",{"value":[1537],"identifier":[1],"name":[1],"label":[1],"type":[1],"icon":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1],"maxlength":[2],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"pattern":[1],"patternErrorMessage":[1,"pattern-error-message"],"tooltip":[1],"displayCharacterLeft":[4,"display-character-left"],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"setFocus":[64],"displayError":[64]}],[1,"mg-input-select",{"value":[1032],"items":[16],"identifier":[1],"name":[1],"label":[1],"labelOnTop":[4,"label-on-top"],"labelHide":[4,"label-hide"],"placeholder":[1025],"placeholderHide":[4,"placeholder-hide"],"placeholderDisabled":[4,"placeholder-disabled"],"required":[4],"readonly":[4],"disabled":[4],"mgWidth":[8,"mg-width"],"tooltip":[1],"helpText":[1,"help-text"],"valid":[1028],"invalid":[1028],"classList":[32],"errorMessage":[32],"options":[32],"valueExist":[32],"readonlyValue":[32],"displayError":[64]}],[1,"mg-menu-item",{"identifier":[1],"href":[1],"status":[1537],"expanded":[1028],"size":[32],"navigationButtonClassList":[32],"direction":[32],"isInMainMenu":[32],"isItemMore":[32],"hasChildren":[32],"displayNotificationBadge":[32]}],[1,"mg-menu",{"label":[1],"direction":[513],"itemMore":[16],"size":[1],"isChildMenu":[32]}],[1,"mg-popover",{"identifier":[1],"placement":[1],"arrowHide":[4,"arrow-hide"],"closeButton":[4,"close-button"],"display":[1028],"disabled":[1028],"classList":[32]}],[2,"mg-character-left",{"identifier":[1],"characters":[1],"maxlength":[2]}],[1,"mg-badge",{"value":[1032],"label":[1],"variant":[1],"outline":[4],"classList":[32]}],[1,"mg-card"],[1,"mg-button",{"variant":[1],"identifier":[1],"label":[1],"type":[1],"fullWidth":[1028,"full-width"],"form":[1025],"disabled":[1028],"isIcon":[4,"is-icon"],"disableOnClick":[4,"disable-on-click"],"loading":[32],"classList":[32]}],[6,"mg-input-title",{"identifier":[1],"required":[4],"isLegend":[4,"is-legend"],"tagName":[32]}],[1,"mg-tooltip",{"identifier":[1],"message":[1],"placement":[1],"display":[1028],"disabled":[1028]}],[1,"mg-icon",{"icon":[1],"size":[1],"variant":[1],"spin":[4],"classList":[32]}]]],["mg-item-more.cjs",[[1,"mg-item-more",{"icon":[16],"slotlabel":[16],"size":[1],"parentMenu":[32]}]]]], options);
21
21
  });
22
22
 
23
23
  exports.setNonce = index.setNonce;
@@ -0,0 +1,273 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-5e7ede97.js');
6
+ const mgMenu_conf = require('./mg-menu.conf-9afe6571.js');
7
+
8
+ /**
9
+ * MgItemMore type guard
10
+ *
11
+ * @param {HTMLElement} element element to control type
12
+ * @returns {boolean} truthy if element is mg-item-more
13
+ */
14
+ const isMgItemMore = (element) => element.nodeName === 'MG-ITEM-MORE';
15
+ var OverflowBehaviorElements;
16
+ (function (OverflowBehaviorElements) {
17
+ OverflowBehaviorElements["BASE_INDEX"] = "data-overflow-base-index";
18
+ OverflowBehaviorElements["PROXY_INDEX"] = "data-overflow-proxy-index";
19
+ })(OverflowBehaviorElements || (OverflowBehaviorElements = {}));
20
+ class OverflowBehavior {
21
+ constructor(element, render) {
22
+ this.element = element;
23
+ this.render = render;
24
+ /**********
25
+ * Public *
26
+ **********/
27
+ /**
28
+ * Disconnect ResizeObserver
29
+ *
30
+ * @returns {void}
31
+ */
32
+ this.disconnect = () => {
33
+ this._resizeObserver.disconnect();
34
+ };
35
+ /************
36
+ * Internal *
37
+ ************/
38
+ /**
39
+ * run overflow behavior
40
+ *
41
+ * @param {number} width width of the container. Optional.
42
+ * @returns {void}
43
+ */
44
+ this.run = (width) => {
45
+ if (this._moreElement === undefined) {
46
+ // set moreElement
47
+ this._moreElement = this.render();
48
+ // set children
49
+ this._baseChildren = this.getInteractiveItems(this.element);
50
+ if (isMgItemMore(this._moreElement)) {
51
+ this._proxyChildren = this.getInteractiveItems(this._moreElement.shadowRoot.querySelector('mg-menu'));
52
+ }
53
+ // update children
54
+ this._baseChildren.forEach((child, index) => {
55
+ child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);
56
+ // set moreElement children
57
+ this._proxyChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);
58
+ });
59
+ }
60
+ if (width !== undefined)
61
+ this.updateDisplayedItems(width);
62
+ };
63
+ /**
64
+ * Get interactive children filtred by authorized nodeName ['MG-MENU-ITEM', 'MG-BUTTON']
65
+ *
66
+ * @param {Element} element element to parse
67
+ * @returns {Element[]} children
68
+ */
69
+ this.getInteractiveItems = (element) => { var _a; return (((_a = element.children) === null || _a === void 0 ? void 0 : _a.length) > 0 ? Array.from(element.children) : []).filter(element => ['MG-MENU-ITEM', 'MG-BUTTON'].includes(element.nodeName)); };
70
+ /**
71
+ * Update displayed items in container from a given available space
72
+ *
73
+ * @param {number} availableWidth available width in container to display child items
74
+ * @returns {void}
75
+ */
76
+ this.updateDisplayedItems = (availableWidth) => {
77
+ this.restoreItems();
78
+ const acc = { accWidth: 0, previousItem: null };
79
+ [...this._baseChildren, this._moreElement].forEach((child) => {
80
+ acc.accWidth += child.offsetWidth;
81
+ const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
82
+ // if previous item is hidden AND is NOT more element we hidde current
83
+ // OR if item has an overflow we hidde current
84
+ // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
85
+ // ELSE current is a display item
86
+ this.toggleItem(child, (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden));
87
+ // update previous item with current item
88
+ acc.previousItem = child;
89
+ });
90
+ };
91
+ /**
92
+ * Utility method to know if item overflow partialy or totaly in the container
93
+ *
94
+ * @param {number} cumulateWidth previous sibling elements cumulate width + item width
95
+ * @param {HTMLElement} item item HTML element
96
+ * @param {number} availableWidth container available width
97
+ * @returns {boolean} truthy if element is overflow
98
+ */
99
+ this.isOverflowElement = (cumulateWidth, item, availableWidth) => {
100
+ if (item.previousElementSibling === null || this.isMoreElement(item))
101
+ return false;
102
+ else if (!this.isMoreElement(item.nextElementSibling))
103
+ return cumulateWidth + this._moreElement.offsetWidth > availableWidth;
104
+ else
105
+ return cumulateWidth > availableWidth;
106
+ };
107
+ /**
108
+ * Utility method to know if a given element is the 'MORE' element
109
+ *
110
+ * @param {Element} element element to match with 'MORE' element
111
+ * @returns {boolean} truthy if element is the 'MORE' element
112
+ */
113
+ this.isMoreElement = (element) => element.nodeName === 'MG-ITEM-MORE';
114
+ /**
115
+ * Toggle display item element
116
+ *
117
+ * @param {HTMLElement} item item to control
118
+ * @param {boolean} isHidden is item hidden
119
+ * @returns {void}
120
+ */
121
+ this.toggleItem = (item, isHidden) => {
122
+ const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));
123
+ if (this.isMoreElement(item))
124
+ this.toggleElement(this._moreElement, isHidden);
125
+ else if (mgActionMenuindex >= 0) {
126
+ this.toggleElement(item, isHidden);
127
+ this.toggleElement(this._proxyChildren[mgActionMenuindex], !isHidden);
128
+ }
129
+ };
130
+ /**
131
+ * Toggle element's hidde attribute
132
+ *
133
+ * @param {Element} element element to toggle
134
+ * @param {boolean} isHidden element is hidden
135
+ * @returns {void}
136
+ */
137
+ this.toggleElement = (element, isHidden) => {
138
+ if (isHidden)
139
+ element.setAttribute('hidden', '');
140
+ else
141
+ element.removeAttribute('hidden');
142
+ };
143
+ /**
144
+ * Remove hidden attributes on all items
145
+ *
146
+ * @returns {void}
147
+ */
148
+ this.restoreItems = () => {
149
+ [...this._baseChildren, this._moreElement].forEach(item => item.removeAttribute('hidden'));
150
+ };
151
+ if (this._resizeObserver === undefined) {
152
+ // add resize observer
153
+ this._resizeObserver = new ResizeObserver(entries => {
154
+ entries.forEach(entry => {
155
+ this.run(entry.contentRect.width);
156
+ });
157
+ });
158
+ this._resizeObserver.observe(this.element);
159
+ }
160
+ this.run();
161
+ }
162
+ }
163
+
164
+ const mgItemMoreCss = ".sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}@media (prefers-reduced-motion){.mg-a11y-animation{animation:none !important;transition:none !important}}:host{display:flex}";
165
+
166
+ const MgItemMore = class {
167
+ constructor(hostRef) {
168
+ index.registerInstance(this, hostRef);
169
+ /************
170
+ * Internal *
171
+ ************/
172
+ this.name = 'mg-item-more';
173
+ /***********
174
+ * Methods *
175
+ ***********/
176
+ /**
177
+ * render mg-item-more overflow element
178
+ *
179
+ * @returns {HTMLMgItemMoreElement} mg-item-more element
180
+ */
181
+ this.renderMgMenuItemOverflowElement = () => {
182
+ // create menu items proxy element from item clones
183
+ const moreElementMenuItem = this.element.shadowRoot.querySelector('mg-menu-item');
184
+ this.menuItems.forEach((child) => {
185
+ moreElementMenuItem.querySelector('mg-menu').appendChild(child.cloneNode(true));
186
+ });
187
+ const allMenuItem = Array.from(this.parentMenu.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
188
+ Array.from(moreElementMenuItem.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
189
+ // manage click on proxy to mirror it on initial element
190
+ proxy.addEventListener('click', () => {
191
+ (allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
192
+ });
193
+ // add id suffix to prevent duplicate key. default html id is: '';
194
+ if (proxy.id.trim() !== '')
195
+ proxy.id = `${proxy.id}-proxy`;
196
+ // manage status change miror in proxy
197
+ allMenuItem[index].addEventListener('status-change', (event) => {
198
+ proxy.setAttribute('status', event.detail);
199
+ });
200
+ });
201
+ return this.element;
202
+ };
203
+ this.icon = { icon: 'ellipsis-vertical' };
204
+ this.slotlabel = { display: false };
205
+ this.size = undefined;
206
+ this.parentMenu = undefined;
207
+ }
208
+ validateIcon(newValue) {
209
+ if (typeof newValue !== 'object' || (typeof newValue === 'object' && typeof newValue.icon !== 'string'))
210
+ throw new Error(`<${this.name}> prop "icon" must match MgItemMore['icon'] type.`);
211
+ }
212
+ validateSlotLabel(newValue) {
213
+ if (typeof newValue !== 'object' || (typeof newValue === 'object' && typeof newValue.display !== 'boolean'))
214
+ throw new Error(`<${this.name}> prop "slotlabel" must match MgItemMore['slotlabel'] type.`);
215
+ else if (typeof newValue.label !== 'string')
216
+ this.slotlabel.label = this.messages.moreLabel;
217
+ }
218
+ validateSize(newValue) {
219
+ if (newValue && typeof newValue !== 'string')
220
+ throw new Error(`<${this.name}> prop "size" must match MgItemMore['size'] type.`);
221
+ }
222
+ /*************
223
+ * Lifecycle *
224
+ *************/
225
+ /**
226
+ * Disconnect overflow ResizeObserver
227
+ *
228
+ * @returns {void} run overflow resize obeserver disconnexion
229
+ */
230
+ disconnectedCallback() {
231
+ this.overflowBehavior.disconnect();
232
+ }
233
+ /**
234
+ * Set variables and validate props
235
+ *
236
+ * @returns {void}
237
+ */
238
+ componentWillLoad() {
239
+ // init variables
240
+ this.messages = mgMenu_conf.initLocales(this.element).messages.plusMenu;
241
+ this.parentMenu = this.element.closest('mg-menu');
242
+ this.menuItems = Array.from(this.parentMenu.children).filter(item => item.nodeName === 'MG-MENU-ITEM');
243
+ // validate props
244
+ this.validateIcon(this.icon);
245
+ this.validateSlotLabel(this.slotlabel);
246
+ this.validateSize(this.size);
247
+ }
248
+ /**
249
+ * Add overflow behavior
250
+ *
251
+ * @returns {void}
252
+ */
253
+ componentDidLoad() {
254
+ this.overflowBehavior = new OverflowBehavior(this.parentMenu, this.renderMgMenuItemOverflowElement);
255
+ }
256
+ /**
257
+ * Render
258
+ *
259
+ * @returns {HTMLElement} HTML Element
260
+ */
261
+ render() {
262
+ return (index.h(index.Host, { role: "menuitem", "aria-haspopup": "true" }, index.h("mg-menu-item", { "data-overflow-more": true, "data-size": this.parentMenu.size }, index.h("mg-icon", { icon: this.icon.icon, slot: "image" }), index.h("span", { class: { 'sr-only': !this.slotlabel.display }, slot: "label" }, this.slotlabel.label), index.h("mg-menu", { direction: mgMenu_conf.Direction.VERTICAL, label: this.messages.moreLabel, size: this.size }))));
263
+ }
264
+ get element() { return index.getElement(this); }
265
+ static get watchers() { return {
266
+ "icon": ["validateIcon"],
267
+ "slotlabel": ["validateSlotLabel"],
268
+ "size": ["validateSize"]
269
+ }; }
270
+ };
271
+ MgItemMore.style = mgItemMoreCss;
272
+
273
+ exports.mg_item_more = MgItemMore;
@@ -0,0 +1,242 @@
1
+ 'use strict';
2
+
3
+ const errors$1 = {
4
+ required: "This field is required.",
5
+ date: {
6
+ badInput: "The date format must be <span aria-hidden=\"true\">mm/dd/yyyy</span><span class=\"sr-only\">m m / d d / y y y y</span> and the date must be greater than {min}",
7
+ min: "The date cannot be earlier than {min}",
8
+ max: "The date cannot be later than {max}",
9
+ minMax: "The date must be between {min} and {max}"
10
+ },
11
+ numeric: {
12
+ min: "The value cannot be less than {min}",
13
+ max: "The value cannot be greater than {max}",
14
+ minMax: "The value must be between {min} et {max}"
15
+ }
16
+ };
17
+ const nbCharLeft$1 = "{counter} characters left.";
18
+ const input$1 = {
19
+ select: {
20
+ placeholder: "Select a value"
21
+ }
22
+ };
23
+ const form$1 = {
24
+ required: "Fields with a <strong class=\"is-asterisk\">*</strong> are required",
25
+ requiredSingle: "Field with a <strong class=\"is-asterisk\">*</strong> is required",
26
+ allRequired: "All fields are required",
27
+ allRequiredSingle: "The field is required"
28
+ };
29
+ const message$1 = {
30
+ closeButton: "Close message"
31
+ };
32
+ const modal$1 = {
33
+ closeButton: "Close modal"
34
+ };
35
+ const pagination$1 = {
36
+ label: "Pagination",
37
+ page: "page",
38
+ pages: "pages",
39
+ nextPage: "Next page",
40
+ previousPage: "Previous page",
41
+ selectPage: "Select the page to display."
42
+ };
43
+ const panel$1 = {
44
+ editLabel: "Edit section title."
45
+ };
46
+ const skipLinks$1 = {
47
+ navLabel: "Quick access"
48
+ };
49
+ const general$1 = {
50
+ confirm: "Confirm",
51
+ cancel: "Cancel",
52
+ close: "Close",
53
+ next: "next",
54
+ previous: "previous"
55
+ };
56
+ const plusMenu$1 = {
57
+ moreLabel: "Additional menu",
58
+ badgeLabel: "Include notification(s)"
59
+ };
60
+ const actionMore$1 = {
61
+ label: "Actions"
62
+ };
63
+ const en = {
64
+ errors: errors$1,
65
+ nbCharLeft: nbCharLeft$1,
66
+ input: input$1,
67
+ form: form$1,
68
+ message: message$1,
69
+ modal: modal$1,
70
+ pagination: pagination$1,
71
+ panel: panel$1,
72
+ skipLinks: skipLinks$1,
73
+ general: general$1,
74
+ plusMenu: plusMenu$1,
75
+ actionMore: actionMore$1
76
+ };
77
+
78
+ const errors = {
79
+ required: "Ce champ est obligatoire.",
80
+ date: {
81
+ badInput: "Le format de la date doit être du type <span aria-hidden=\"true\">jj/mm/aaaa</span><span class=\"sr-only\">j j / m m / a a a a</span> et la date supérieure au {min}",
82
+ min: "La date ne peut pas être antérieure au {min}",
83
+ max: "La date ne peut pas être postérieure au {max}",
84
+ minMax: "La date doit être comprise entre le {min} et le {max}"
85
+ },
86
+ numeric: {
87
+ min: "La valeur ne peut pas être inférieure à {min}",
88
+ max: "La valeur ne peut pas être supérieure à {max}",
89
+ minMax: "La valeur doit être comprise entre {min} et {max}"
90
+ }
91
+ };
92
+ const nbCharLeft = "{counter} caractères disponibles.";
93
+ const input = {
94
+ select: {
95
+ placeholder: "Sélectionnez une valeur"
96
+ }
97
+ };
98
+ const form = {
99
+ required: "Les champs marqués d'un <strong class=\"is-asterisk\">*</strong> sont obligatoires",
100
+ requiredSingle: "Le champ marqué d'un <strong class=\"is-asterisk\">*</strong> est obligatoire",
101
+ allRequired: "Tous les champs sont obligatoires",
102
+ allRequiredSingle: "Le champ est obligatoire"
103
+ };
104
+ const message = {
105
+ closeButton: "Fermer le message"
106
+ };
107
+ const modal = {
108
+ closeButton: "Fermer la modale"
109
+ };
110
+ const pagination = {
111
+ label: "Pagination",
112
+ page: "page",
113
+ pages: "pages",
114
+ nextPage: "Page suivante",
115
+ previousPage: "Page précédente",
116
+ selectPage: "Sélectionner la page à afficher."
117
+ };
118
+ const panel = {
119
+ editLabel: "Modifier le titre de la section."
120
+ };
121
+ const skipLinks = {
122
+ navLabel: "Accès rapide"
123
+ };
124
+ const general = {
125
+ confirm: "Valider",
126
+ cancel: "Annuler",
127
+ close: "Fermer",
128
+ next: "suivant",
129
+ previous: "précédent"
130
+ };
131
+ const plusMenu = {
132
+ moreLabel: "Menu complémentaire",
133
+ badgeLabel: "Notification(s) incluse(s)"
134
+ };
135
+ const actionMore = {
136
+ label: "Actions"
137
+ };
138
+ const fr = {
139
+ errors: errors,
140
+ nbCharLeft: nbCharLeft,
141
+ input: input,
142
+ form: form,
143
+ message: message,
144
+ modal: modal,
145
+ pagination: pagination,
146
+ panel: panel,
147
+ skipLinks: skipLinks,
148
+ general: general,
149
+ plusMenu: plusMenu,
150
+ actionMore: actionMore
151
+ };
152
+
153
+ /**
154
+ * Format number to the locale currency
155
+ *
156
+ * @param {number} number number to format
157
+ * @param {string} locale locale to apply
158
+ * @param {string} currency currency to apply
159
+ * @returns {string} formatted currency
160
+ */
161
+ const localeCurrency = (number, locale, currency) => {
162
+ return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(number);
163
+ };
164
+ /**
165
+ * Format number to locale
166
+ *
167
+ * @param {number} number number to format
168
+ * @param {string} locale locale to apply
169
+ * @returns {string} formatted number
170
+ */
171
+ const localeNumber = (number, locale) => {
172
+ return new Intl.NumberFormat(locale).format(number);
173
+ };
174
+ /**
175
+ * Date RegExp
176
+ */
177
+ const dateRegExp = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
178
+ /**
179
+ * Locale date format
180
+ *
181
+ * @param {string} date date to format
182
+ * @param {string} locale locale to apply
183
+ * @returns {string} formatted date
184
+ */
185
+ const localeDate = (date, locale) => {
186
+ if (typeof date !== 'string' || date === '' || !dateRegExp.test(date)) {
187
+ return '';
188
+ }
189
+ return new Intl.DateTimeFormat(locale).format(new Date(date));
190
+ };
191
+ /**
192
+ * Get locale and messages
193
+ * We load the defined locale but for now we only support the first subtag for messages
194
+ *
195
+ * @param {HTMLElement} element element we need to get the language
196
+ * @param {unknown} messages messages to use
197
+ * @param {string} defaultLocale default messages locale
198
+ * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
199
+ */
200
+ const getLocaleMessages = (element, messages, defaultLocale) => {
201
+ // Get local
202
+ const closestLangAttribute = element.closest('[lang]');
203
+ const closestLang = Intl.NumberFormat.supportedLocalesOf(closestLangAttribute === null || closestLangAttribute === void 0 ? void 0 : closestLangAttribute.lang);
204
+ const locale = closestLang.length > 0 ? closestLang[0] : navigator.language || defaultLocale;
205
+ // Only keep first subtag
206
+ const localeSubtag = locale.split('-').shift();
207
+ // Return
208
+ return {
209
+ locale,
210
+ messages: messages[localeSubtag] || messages[defaultLocale],
211
+ };
212
+ };
213
+
214
+ const defaultLocale = 'en';
215
+ const messages = { en, fr };
216
+ /**
217
+ * Get Intl object
218
+ *
219
+ * @param {HTMLElement} element element we need to get the language
220
+ * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
221
+ */
222
+ const initLocales = (element) => getLocaleMessages(element, messages, defaultLocale);
223
+
224
+ /**
225
+ * Menu direction type
226
+ */
227
+ exports.Direction = void 0;
228
+ (function (Direction) {
229
+ Direction["VERTICAL"] = "vertical";
230
+ Direction["HORIZONTAL"] = "horizontal";
231
+ })(exports.Direction || (exports.Direction = {}));
232
+ /**
233
+ * List of all possibles sizes
234
+ */
235
+ const sizes = ['regular', 'medium', 'large'];
236
+
237
+ exports.dateRegExp = dateRegExp;
238
+ exports.initLocales = initLocales;
239
+ exports.localeCurrency = localeCurrency;
240
+ exports.localeDate = localeDate;
241
+ exports.localeNumber = localeNumber;
242
+ exports.sizes = sizes;
@@ -4,6 +4,8 @@
4
4
  "./components/atoms/mg-button/mg-button.js",
5
5
  "./components/atoms/mg-icon/mg-icon.js",
6
6
  "./components/molecules/menu/mg-menu/mg-menu.js",
7
+ "./components/molecules/mg-item-more/mg-item-more.js",
8
+ "./components/molecules/mg-popover/mg-popover.js",
7
9
  "./components/molecules/menu/mg-menu-item/mg-menu-item.js",
8
10
  "./components/atoms/mg-card/mg-card.js",
9
11
  "./components/atoms/mg-character-left/mg-character-left.js",
@@ -28,7 +30,6 @@
28
30
  "./components/molecules/mg-modal/mg-modal.js",
29
31
  "./components/molecules/mg-pagination/mg-pagination.js",
30
32
  "./components/molecules/mg-panel/mg-panel.js",
31
- "./components/molecules/mg-popover/mg-popover.js",
32
33
  "./components/molecules/mg-skip-links/mg-skip-links.js",
33
34
  "./components/molecules/mg-tabs/mg-tabs.js"
34
35
  ],
@@ -101,6 +101,8 @@ export class MgButton {
101
101
  else {
102
102
  this.classList.delete(this.classDisabled);
103
103
  }
104
+ // emit value update
105
+ this.disabledChange.emit(isDisabled);
104
106
  }
105
107
  loadingHandler(newValue) {
106
108
  // we add loading style if it newvalue is true else we remove it
@@ -326,6 +328,28 @@ export class MgButton {
326
328
  "classList": {}
327
329
  };
328
330
  }
331
+ static get events() {
332
+ return [{
333
+ "method": "disabledChange",
334
+ "name": "disabled-change",
335
+ "bubbles": true,
336
+ "cancelable": true,
337
+ "composed": true,
338
+ "docs": {
339
+ "tags": [],
340
+ "text": "Emmited event when disabled change"
341
+ },
342
+ "complexType": {
343
+ "original": "MgButton['disabled']",
344
+ "resolved": "boolean",
345
+ "references": {
346
+ "MgButton": {
347
+ "location": "global"
348
+ }
349
+ }
350
+ }
351
+ }];
352
+ }
329
353
  static get elementRef() { return "element"; }
330
354
  static get watchers() {
331
355
  return [{