@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
@@ -14,5 +14,5 @@ const patchBrowser = () => {
14
14
  };
15
15
 
16
16
  patchBrowser().then(options => {
17
- return bootstrapLazy([["mg-action-more_31",[[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);
17
+ return bootstrapLazy([["mg-action-more_31",[[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",[[1,"mg-item-more",{"icon":[16],"slotlabel":[16],"size":[1],"parentMenu":[32]}]]]], options);
18
18
  });
@@ -0,0 +1,269 @@
1
+ import { r as registerInstance, h, H as Host, g as getElement } from './index-03cceb11.js';
2
+ import { i as initLocales, D as Direction } from './mg-menu.conf-881fbd82.js';
3
+
4
+ /**
5
+ * MgItemMore type guard
6
+ *
7
+ * @param {HTMLElement} element element to control type
8
+ * @returns {boolean} truthy if element is mg-item-more
9
+ */
10
+ const isMgItemMore = (element) => element.nodeName === 'MG-ITEM-MORE';
11
+ var OverflowBehaviorElements;
12
+ (function (OverflowBehaviorElements) {
13
+ OverflowBehaviorElements["BASE_INDEX"] = "data-overflow-base-index";
14
+ OverflowBehaviorElements["PROXY_INDEX"] = "data-overflow-proxy-index";
15
+ })(OverflowBehaviorElements || (OverflowBehaviorElements = {}));
16
+ class OverflowBehavior {
17
+ constructor(element, render) {
18
+ this.element = element;
19
+ this.render = render;
20
+ /**********
21
+ * Public *
22
+ **********/
23
+ /**
24
+ * Disconnect ResizeObserver
25
+ *
26
+ * @returns {void}
27
+ */
28
+ this.disconnect = () => {
29
+ this._resizeObserver.disconnect();
30
+ };
31
+ /************
32
+ * Internal *
33
+ ************/
34
+ /**
35
+ * run overflow behavior
36
+ *
37
+ * @param {number} width width of the container. Optional.
38
+ * @returns {void}
39
+ */
40
+ this.run = (width) => {
41
+ if (this._moreElement === undefined) {
42
+ // set moreElement
43
+ this._moreElement = this.render();
44
+ // set children
45
+ this._baseChildren = this.getInteractiveItems(this.element);
46
+ if (isMgItemMore(this._moreElement)) {
47
+ this._proxyChildren = this.getInteractiveItems(this._moreElement.shadowRoot.querySelector('mg-menu'));
48
+ }
49
+ // update children
50
+ this._baseChildren.forEach((child, index) => {
51
+ child.setAttribute(OverflowBehaviorElements.BASE_INDEX, `${index}`);
52
+ // set moreElement children
53
+ this._proxyChildren[index].setAttribute(OverflowBehaviorElements.PROXY_INDEX, `${index}`);
54
+ });
55
+ }
56
+ if (width !== undefined)
57
+ this.updateDisplayedItems(width);
58
+ };
59
+ /**
60
+ * Get interactive children filtred by authorized nodeName ['MG-MENU-ITEM', 'MG-BUTTON']
61
+ *
62
+ * @param {Element} element element to parse
63
+ * @returns {Element[]} children
64
+ */
65
+ 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)); };
66
+ /**
67
+ * Update displayed items in container from a given available space
68
+ *
69
+ * @param {number} availableWidth available width in container to display child items
70
+ * @returns {void}
71
+ */
72
+ this.updateDisplayedItems = (availableWidth) => {
73
+ this.restoreItems();
74
+ const acc = { accWidth: 0, previousItem: null };
75
+ [...this._baseChildren, this._moreElement].forEach((child) => {
76
+ acc.accWidth += child.offsetWidth;
77
+ const isPreviousItemHidden = acc.previousItem !== null && acc.previousItem.getAttribute('hidden') !== null;
78
+ // if previous item is hidden AND is NOT more element we hidde current
79
+ // OR if item has an overflow we hidde current
80
+ // OR if current item is more element AND have NOT previous hidden items, current more element item is an hidden item
81
+ // ELSE current is a display item
82
+ this.toggleItem(child, (isPreviousItemHidden && !this.isMoreElement(child)) || this.isOverflowElement(acc.accWidth, child, availableWidth) || (this.isMoreElement(child) && !isPreviousItemHidden));
83
+ // update previous item with current item
84
+ acc.previousItem = child;
85
+ });
86
+ };
87
+ /**
88
+ * Utility method to know if item overflow partialy or totaly in the container
89
+ *
90
+ * @param {number} cumulateWidth previous sibling elements cumulate width + item width
91
+ * @param {HTMLElement} item item HTML element
92
+ * @param {number} availableWidth container available width
93
+ * @returns {boolean} truthy if element is overflow
94
+ */
95
+ this.isOverflowElement = (cumulateWidth, item, availableWidth) => {
96
+ if (item.previousElementSibling === null || this.isMoreElement(item))
97
+ return false;
98
+ else if (!this.isMoreElement(item.nextElementSibling))
99
+ return cumulateWidth + this._moreElement.offsetWidth > availableWidth;
100
+ else
101
+ return cumulateWidth > availableWidth;
102
+ };
103
+ /**
104
+ * Utility method to know if a given element is the 'MORE' element
105
+ *
106
+ * @param {Element} element element to match with 'MORE' element
107
+ * @returns {boolean} truthy if element is the 'MORE' element
108
+ */
109
+ this.isMoreElement = (element) => element.nodeName === 'MG-ITEM-MORE';
110
+ /**
111
+ * Toggle display item element
112
+ *
113
+ * @param {HTMLElement} item item to control
114
+ * @param {boolean} isHidden is item hidden
115
+ * @returns {void}
116
+ */
117
+ this.toggleItem = (item, isHidden) => {
118
+ const mgActionMenuindex = Number(item.getAttribute(OverflowBehaviorElements.BASE_INDEX));
119
+ if (this.isMoreElement(item))
120
+ this.toggleElement(this._moreElement, isHidden);
121
+ else if (mgActionMenuindex >= 0) {
122
+ this.toggleElement(item, isHidden);
123
+ this.toggleElement(this._proxyChildren[mgActionMenuindex], !isHidden);
124
+ }
125
+ };
126
+ /**
127
+ * Toggle element's hidde attribute
128
+ *
129
+ * @param {Element} element element to toggle
130
+ * @param {boolean} isHidden element is hidden
131
+ * @returns {void}
132
+ */
133
+ this.toggleElement = (element, isHidden) => {
134
+ if (isHidden)
135
+ element.setAttribute('hidden', '');
136
+ else
137
+ element.removeAttribute('hidden');
138
+ };
139
+ /**
140
+ * Remove hidden attributes on all items
141
+ *
142
+ * @returns {void}
143
+ */
144
+ this.restoreItems = () => {
145
+ [...this._baseChildren, this._moreElement].forEach(item => item.removeAttribute('hidden'));
146
+ };
147
+ if (this._resizeObserver === undefined) {
148
+ // add resize observer
149
+ this._resizeObserver = new ResizeObserver(entries => {
150
+ entries.forEach(entry => {
151
+ this.run(entry.contentRect.width);
152
+ });
153
+ });
154
+ this._resizeObserver.observe(this.element);
155
+ }
156
+ this.run();
157
+ }
158
+ }
159
+
160
+ 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}";
161
+
162
+ const MgItemMore = class {
163
+ constructor(hostRef) {
164
+ registerInstance(this, hostRef);
165
+ /************
166
+ * Internal *
167
+ ************/
168
+ this.name = 'mg-item-more';
169
+ /***********
170
+ * Methods *
171
+ ***********/
172
+ /**
173
+ * render mg-item-more overflow element
174
+ *
175
+ * @returns {HTMLMgItemMoreElement} mg-item-more element
176
+ */
177
+ this.renderMgMenuItemOverflowElement = () => {
178
+ // create menu items proxy element from item clones
179
+ const moreElementMenuItem = this.element.shadowRoot.querySelector('mg-menu-item');
180
+ this.menuItems.forEach((child) => {
181
+ moreElementMenuItem.querySelector('mg-menu').appendChild(child.cloneNode(true));
182
+ });
183
+ const allMenuItem = Array.from(this.parentMenu.querySelectorAll('mg-menu-item:not([data-overflow-more])'));
184
+ Array.from(moreElementMenuItem.querySelectorAll('mg-menu-item:not([data-overflow-more])')).forEach((proxy, index) => {
185
+ // manage click on proxy to mirror it on initial element
186
+ proxy.addEventListener('click', () => {
187
+ (allMenuItem[index].shadowRoot.querySelector('a') || allMenuItem[index].shadowRoot.querySelector('button')).dispatchEvent(new MouseEvent('click', { bubbles: true }));
188
+ });
189
+ // add id suffix to prevent duplicate key. default html id is: '';
190
+ if (proxy.id.trim() !== '')
191
+ proxy.id = `${proxy.id}-proxy`;
192
+ // manage status change miror in proxy
193
+ allMenuItem[index].addEventListener('status-change', (event) => {
194
+ proxy.setAttribute('status', event.detail);
195
+ });
196
+ });
197
+ return this.element;
198
+ };
199
+ this.icon = { icon: 'ellipsis-vertical' };
200
+ this.slotlabel = { display: false };
201
+ this.size = undefined;
202
+ this.parentMenu = undefined;
203
+ }
204
+ validateIcon(newValue) {
205
+ if (typeof newValue !== 'object' || (typeof newValue === 'object' && typeof newValue.icon !== 'string'))
206
+ throw new Error(`<${this.name}> prop "icon" must match MgItemMore['icon'] type.`);
207
+ }
208
+ validateSlotLabel(newValue) {
209
+ if (typeof newValue !== 'object' || (typeof newValue === 'object' && typeof newValue.display !== 'boolean'))
210
+ throw new Error(`<${this.name}> prop "slotlabel" must match MgItemMore['slotlabel'] type.`);
211
+ else if (typeof newValue.label !== 'string')
212
+ this.slotlabel.label = this.messages.moreLabel;
213
+ }
214
+ validateSize(newValue) {
215
+ if (newValue && typeof newValue !== 'string')
216
+ throw new Error(`<${this.name}> prop "size" must match MgItemMore['size'] type.`);
217
+ }
218
+ /*************
219
+ * Lifecycle *
220
+ *************/
221
+ /**
222
+ * Disconnect overflow ResizeObserver
223
+ *
224
+ * @returns {void} run overflow resize obeserver disconnexion
225
+ */
226
+ disconnectedCallback() {
227
+ this.overflowBehavior.disconnect();
228
+ }
229
+ /**
230
+ * Set variables and validate props
231
+ *
232
+ * @returns {void}
233
+ */
234
+ componentWillLoad() {
235
+ // init variables
236
+ this.messages = initLocales(this.element).messages.plusMenu;
237
+ this.parentMenu = this.element.closest('mg-menu');
238
+ this.menuItems = Array.from(this.parentMenu.children).filter(item => item.nodeName === 'MG-MENU-ITEM');
239
+ // validate props
240
+ this.validateIcon(this.icon);
241
+ this.validateSlotLabel(this.slotlabel);
242
+ this.validateSize(this.size);
243
+ }
244
+ /**
245
+ * Add overflow behavior
246
+ *
247
+ * @returns {void}
248
+ */
249
+ componentDidLoad() {
250
+ this.overflowBehavior = new OverflowBehavior(this.parentMenu, this.renderMgMenuItemOverflowElement);
251
+ }
252
+ /**
253
+ * Render
254
+ *
255
+ * @returns {HTMLElement} HTML Element
256
+ */
257
+ render() {
258
+ return (h(Host, { role: "menuitem", "aria-haspopup": "true" }, h("mg-menu-item", { "data-overflow-more": true, "data-size": this.parentMenu.size }, h("mg-icon", { icon: this.icon.icon, slot: "image" }), h("span", { class: { 'sr-only': !this.slotlabel.display }, slot: "label" }, this.slotlabel.label), h("mg-menu", { direction: Direction.VERTICAL, label: this.messages.moreLabel, size: this.size }))));
259
+ }
260
+ get element() { return getElement(this); }
261
+ static get watchers() { return {
262
+ "icon": ["validateIcon"],
263
+ "slotlabel": ["validateSlotLabel"],
264
+ "size": ["validateSize"]
265
+ }; }
266
+ };
267
+ MgItemMore.style = mgItemMoreCss;
268
+
269
+ export { MgItemMore as mg_item_more };
@@ -0,0 +1,235 @@
1
+ const errors$1 = {
2
+ required: "This field is required.",
3
+ date: {
4
+ 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}",
5
+ min: "The date cannot be earlier than {min}",
6
+ max: "The date cannot be later than {max}",
7
+ minMax: "The date must be between {min} and {max}"
8
+ },
9
+ numeric: {
10
+ min: "The value cannot be less than {min}",
11
+ max: "The value cannot be greater than {max}",
12
+ minMax: "The value must be between {min} et {max}"
13
+ }
14
+ };
15
+ const nbCharLeft$1 = "{counter} characters left.";
16
+ const input$1 = {
17
+ select: {
18
+ placeholder: "Select a value"
19
+ }
20
+ };
21
+ const form$1 = {
22
+ required: "Fields with a <strong class=\"is-asterisk\">*</strong> are required",
23
+ requiredSingle: "Field with a <strong class=\"is-asterisk\">*</strong> is required",
24
+ allRequired: "All fields are required",
25
+ allRequiredSingle: "The field is required"
26
+ };
27
+ const message$1 = {
28
+ closeButton: "Close message"
29
+ };
30
+ const modal$1 = {
31
+ closeButton: "Close modal"
32
+ };
33
+ const pagination$1 = {
34
+ label: "Pagination",
35
+ page: "page",
36
+ pages: "pages",
37
+ nextPage: "Next page",
38
+ previousPage: "Previous page",
39
+ selectPage: "Select the page to display."
40
+ };
41
+ const panel$1 = {
42
+ editLabel: "Edit section title."
43
+ };
44
+ const skipLinks$1 = {
45
+ navLabel: "Quick access"
46
+ };
47
+ const general$1 = {
48
+ confirm: "Confirm",
49
+ cancel: "Cancel",
50
+ close: "Close",
51
+ next: "next",
52
+ previous: "previous"
53
+ };
54
+ const plusMenu$1 = {
55
+ moreLabel: "Additional menu",
56
+ badgeLabel: "Include notification(s)"
57
+ };
58
+ const actionMore$1 = {
59
+ label: "Actions"
60
+ };
61
+ const en = {
62
+ errors: errors$1,
63
+ nbCharLeft: nbCharLeft$1,
64
+ input: input$1,
65
+ form: form$1,
66
+ message: message$1,
67
+ modal: modal$1,
68
+ pagination: pagination$1,
69
+ panel: panel$1,
70
+ skipLinks: skipLinks$1,
71
+ general: general$1,
72
+ plusMenu: plusMenu$1,
73
+ actionMore: actionMore$1
74
+ };
75
+
76
+ const errors = {
77
+ required: "Ce champ est obligatoire.",
78
+ date: {
79
+ 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}",
80
+ min: "La date ne peut pas être antérieure au {min}",
81
+ max: "La date ne peut pas être postérieure au {max}",
82
+ minMax: "La date doit être comprise entre le {min} et le {max}"
83
+ },
84
+ numeric: {
85
+ min: "La valeur ne peut pas être inférieure à {min}",
86
+ max: "La valeur ne peut pas être supérieure à {max}",
87
+ minMax: "La valeur doit être comprise entre {min} et {max}"
88
+ }
89
+ };
90
+ const nbCharLeft = "{counter} caractères disponibles.";
91
+ const input = {
92
+ select: {
93
+ placeholder: "Sélectionnez une valeur"
94
+ }
95
+ };
96
+ const form = {
97
+ required: "Les champs marqués d'un <strong class=\"is-asterisk\">*</strong> sont obligatoires",
98
+ requiredSingle: "Le champ marqué d'un <strong class=\"is-asterisk\">*</strong> est obligatoire",
99
+ allRequired: "Tous les champs sont obligatoires",
100
+ allRequiredSingle: "Le champ est obligatoire"
101
+ };
102
+ const message = {
103
+ closeButton: "Fermer le message"
104
+ };
105
+ const modal = {
106
+ closeButton: "Fermer la modale"
107
+ };
108
+ const pagination = {
109
+ label: "Pagination",
110
+ page: "page",
111
+ pages: "pages",
112
+ nextPage: "Page suivante",
113
+ previousPage: "Page précédente",
114
+ selectPage: "Sélectionner la page à afficher."
115
+ };
116
+ const panel = {
117
+ editLabel: "Modifier le titre de la section."
118
+ };
119
+ const skipLinks = {
120
+ navLabel: "Accès rapide"
121
+ };
122
+ const general = {
123
+ confirm: "Valider",
124
+ cancel: "Annuler",
125
+ close: "Fermer",
126
+ next: "suivant",
127
+ previous: "précédent"
128
+ };
129
+ const plusMenu = {
130
+ moreLabel: "Menu complémentaire",
131
+ badgeLabel: "Notification(s) incluse(s)"
132
+ };
133
+ const actionMore = {
134
+ label: "Actions"
135
+ };
136
+ const fr = {
137
+ errors: errors,
138
+ nbCharLeft: nbCharLeft,
139
+ input: input,
140
+ form: form,
141
+ message: message,
142
+ modal: modal,
143
+ pagination: pagination,
144
+ panel: panel,
145
+ skipLinks: skipLinks,
146
+ general: general,
147
+ plusMenu: plusMenu,
148
+ actionMore: actionMore
149
+ };
150
+
151
+ /**
152
+ * Format number to the locale currency
153
+ *
154
+ * @param {number} number number to format
155
+ * @param {string} locale locale to apply
156
+ * @param {string} currency currency to apply
157
+ * @returns {string} formatted currency
158
+ */
159
+ const localeCurrency = (number, locale, currency) => {
160
+ return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(number);
161
+ };
162
+ /**
163
+ * Format number to locale
164
+ *
165
+ * @param {number} number number to format
166
+ * @param {string} locale locale to apply
167
+ * @returns {string} formatted number
168
+ */
169
+ const localeNumber = (number, locale) => {
170
+ return new Intl.NumberFormat(locale).format(number);
171
+ };
172
+ /**
173
+ * Date RegExp
174
+ */
175
+ const dateRegExp = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
176
+ /**
177
+ * Locale date format
178
+ *
179
+ * @param {string} date date to format
180
+ * @param {string} locale locale to apply
181
+ * @returns {string} formatted date
182
+ */
183
+ const localeDate = (date, locale) => {
184
+ if (typeof date !== 'string' || date === '' || !dateRegExp.test(date)) {
185
+ return '';
186
+ }
187
+ return new Intl.DateTimeFormat(locale).format(new Date(date));
188
+ };
189
+ /**
190
+ * Get locale and messages
191
+ * We load the defined locale but for now we only support the first subtag for messages
192
+ *
193
+ * @param {HTMLElement} element element we need to get the language
194
+ * @param {unknown} messages messages to use
195
+ * @param {string} defaultLocale default messages locale
196
+ * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
197
+ */
198
+ const getLocaleMessages = (element, messages, defaultLocale) => {
199
+ // Get local
200
+ const closestLangAttribute = element.closest('[lang]');
201
+ const closestLang = Intl.NumberFormat.supportedLocalesOf(closestLangAttribute === null || closestLangAttribute === void 0 ? void 0 : closestLangAttribute.lang);
202
+ const locale = closestLang.length > 0 ? closestLang[0] : navigator.language || defaultLocale;
203
+ // Only keep first subtag
204
+ const localeSubtag = locale.split('-').shift();
205
+ // Return
206
+ return {
207
+ locale,
208
+ messages: messages[localeSubtag] || messages[defaultLocale],
209
+ };
210
+ };
211
+
212
+ const defaultLocale = 'en';
213
+ const messages = { en, fr };
214
+ /**
215
+ * Get Intl object
216
+ *
217
+ * @param {HTMLElement} element element we need to get the language
218
+ * @returns {{ locale: string; messages: Record<string, unknown> }} messages object
219
+ */
220
+ const initLocales = (element) => getLocaleMessages(element, messages, defaultLocale);
221
+
222
+ /**
223
+ * Menu direction type
224
+ */
225
+ var Direction;
226
+ (function (Direction) {
227
+ Direction["VERTICAL"] = "vertical";
228
+ Direction["HORIZONTAL"] = "horizontal";
229
+ })(Direction || (Direction = {}));
230
+ /**
231
+ * List of all possibles sizes
232
+ */
233
+ const sizes = ['regular', 'medium', 'large'];
234
+
235
+ export { Direction as D, localeCurrency as a, localeNumber as b, dateRegExp as d, initLocales as i, localeDate as l, sizes as s };