@mgdis/mg-components 5.4.0 → 5.6.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 (194) hide show
  1. package/dist/cjs/{index-94497267.js → index-4dcc1812.js} +11 -1
  2. package/dist/cjs/loader.cjs.js +3 -3
  3. package/dist/cjs/{mg-badge_29.cjs.entry.js → mg-badge_30.cjs.entry.js} +1112 -859
  4. package/dist/cjs/mg-components.cjs.js +3 -3
  5. package/dist/collection/collection-manifest.json +5 -4
  6. package/dist/collection/components/atoms/mg-badge/doc/mg-badge.stories.js +0 -7
  7. package/dist/collection/components/atoms/mg-badge/mg-badge.conf.js +1 -1
  8. package/dist/collection/components/atoms/mg-badge/mg-badge.css +13 -0
  9. package/dist/collection/components/atoms/mg-badge/mg-badge.js +7 -10
  10. package/dist/collection/components/atoms/mg-button/doc/mg-button.stories.js +0 -7
  11. package/dist/collection/components/atoms/mg-button/mg-button.conf.js +1 -1
  12. package/dist/collection/components/atoms/mg-button/mg-button.css +15 -1
  13. package/dist/collection/components/atoms/mg-button/mg-button.js +12 -29
  14. package/dist/collection/components/atoms/mg-card/mg-card.css +17 -5
  15. package/dist/collection/components/atoms/mg-character-left/mg-character-left.js +2 -3
  16. package/dist/collection/components/atoms/mg-divider/mg-divider.js +0 -6
  17. package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +13 -3
  18. package/dist/collection/components/atoms/mg-icon/mg-icon.js +5 -12
  19. package/dist/collection/components/atoms/mg-input-title/mg-input-title.js +4 -8
  20. package/dist/collection/components/atoms/mg-tag/doc/mg-tag.stories.js +1 -9
  21. package/dist/collection/components/atoms/mg-tag/mg-tag.css +58 -0
  22. package/dist/collection/components/atoms/mg-tag/mg-tag.js +61 -16
  23. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +2 -0
  24. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +9 -22
  25. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +17 -33
  26. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.css +3 -3
  27. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +21 -26
  28. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +3 -3
  29. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +24 -47
  30. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +3 -3
  31. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +17 -29
  32. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +18 -33
  33. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +3 -3
  34. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +30 -36
  35. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +3 -3
  36. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +23 -41
  37. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +3 -3
  38. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +23 -45
  39. package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +16 -33
  40. package/dist/collection/components/molecules/menu/mg-menu/doc/mg-menu.stories.js +43 -11
  41. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +17 -0
  42. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.css +27 -0
  43. package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +145 -25
  44. package/dist/collection/components/molecules/menu/mg-menu-item/doc/mg-menu-item.stories.js +7 -5
  45. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.conf.js +0 -4
  46. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +51 -21
  47. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +129 -92
  48. package/dist/collection/components/molecules/mg-details/mg-details.js +4 -8
  49. package/dist/collection/components/molecules/mg-form/mg-form.js +8 -22
  50. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.css +2 -2
  51. package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +4 -9
  52. package/dist/collection/components/molecules/mg-message/mg-message.css +20 -19
  53. package/dist/collection/components/molecules/mg-message/mg-message.js +55 -33
  54. package/dist/collection/components/molecules/mg-modal/mg-modal.css +20 -8
  55. package/dist/collection/components/molecules/mg-modal/mg-modal.js +8 -26
  56. package/dist/collection/components/molecules/mg-pagination/mg-pagination.js +4 -13
  57. package/dist/collection/components/molecules/mg-panel/mg-panel.css +17 -5
  58. package/dist/collection/components/molecules/mg-panel/mg-panel.js +11 -22
  59. package/dist/collection/components/molecules/mg-popover/mg-popover.css +82 -20
  60. package/dist/collection/components/molecules/mg-popover/mg-popover.js +54 -26
  61. package/dist/collection/components/molecules/mg-skip-links/doc/mg-skip-links.stories.js +24 -0
  62. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.conf.js +1 -0
  63. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.css +28 -0
  64. package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +108 -0
  65. package/dist/collection/components/molecules/mg-tabs/doc/mg-tabs.stories.js +5 -3
  66. package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +11 -7
  67. package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +109 -75
  68. package/dist/collection/locales/en/messages.json +7 -0
  69. package/dist/collection/locales/fr/messages.json +7 -0
  70. package/dist/collection/locales/index.js +2 -25
  71. package/dist/collection/styles/a11y.scss +32 -0
  72. package/dist/collection/styles/components.scss +3 -0
  73. package/dist/collection/styles/fonts.scss +21 -0
  74. package/dist/collection/styles/form.scss +3 -0
  75. package/dist/collection/styles/global.scss +87 -0
  76. package/dist/collection/styles/layout.scss +29 -0
  77. package/dist/collection/styles/main.scss +23 -0
  78. package/dist/collection/styles/navigation-button.scss +76 -0
  79. package/dist/collection/styles/reset-mg-card-slotted-variables.scss +9 -0
  80. package/dist/collection/styles/typography.scss +75 -0
  81. package/dist/collection/styles/utilities.scss +21 -0
  82. package/dist/collection/utils/behaviors.utils.js +169 -0
  83. package/dist/collection/utils/components.utils.js +50 -0
  84. package/dist/collection/utils/locale.utils.js +22 -0
  85. package/dist/collection/utils/unit.test.utils.js +37 -32
  86. package/dist/collection/variables.css +9 -9
  87. package/dist/components/components.utils.js +51 -1
  88. package/dist/components/index.d.ts +1 -0
  89. package/dist/components/index.js +1 -0
  90. package/dist/components/index2.js +73 -18
  91. package/dist/components/mg-badge2.js +8 -11
  92. package/dist/components/mg-button2.js +13 -30
  93. package/dist/components/mg-card.js +1 -37
  94. package/dist/components/mg-card2.js +39 -0
  95. package/dist/components/mg-character-left2.js +2 -3
  96. package/dist/components/mg-details.js +4 -8
  97. package/dist/components/mg-divider.js +0 -6
  98. package/dist/components/mg-form.js +8 -22
  99. package/dist/components/mg-icon2.js +18 -15
  100. package/dist/components/mg-illustrated-message.js +5 -10
  101. package/dist/components/mg-input-checkbox.js +17 -33
  102. package/dist/components/mg-input-date.js +23 -29
  103. package/dist/components/mg-input-numeric.js +26 -50
  104. package/dist/components/mg-input-password.js +18 -30
  105. package/dist/components/mg-input-radio.js +18 -33
  106. package/dist/components/mg-input-select2.js +32 -38
  107. package/dist/components/mg-input-text2.js +24 -42
  108. package/dist/components/mg-input-textarea.js +24 -46
  109. package/dist/components/mg-input-title2.js +4 -8
  110. package/dist/components/mg-input-toggle.js +16 -33
  111. package/dist/components/mg-menu-item.js +1 -264
  112. package/dist/components/mg-menu-item2.js +517 -0
  113. package/dist/components/mg-menu.js +142 -28
  114. package/dist/components/mg-message.js +64 -36
  115. package/dist/components/mg-modal.js +18 -30
  116. package/dist/components/mg-pagination.js +4 -13
  117. package/dist/components/mg-panel.js +20 -25
  118. package/dist/components/mg-popover.js +1 -200
  119. package/dist/components/mg-popover2.js +212 -0
  120. package/dist/components/mg-skip-links.d.ts +11 -0
  121. package/dist/components/mg-skip-links.js +80 -0
  122. package/dist/components/mg-tabs.js +108 -73
  123. package/dist/components/mg-tag.js +35 -13
  124. package/dist/components/mg-tooltip2.js +10 -23
  125. package/dist/esm/{index-aad0184c.js → index-dc9a2348.js} +11 -1
  126. package/dist/esm/loader.js +3 -3
  127. package/dist/esm/{mg-badge_29.entry.js → mg-badge_30.entry.js} +1112 -860
  128. package/dist/esm/mg-components.js +3 -3
  129. package/dist/esm/polyfills/core-js.js +0 -0
  130. package/dist/esm/polyfills/css-shim.js +1 -1
  131. package/dist/esm/polyfills/dom.js +0 -0
  132. package/dist/esm/polyfills/es5-html-element.js +0 -0
  133. package/dist/esm/polyfills/index.js +0 -0
  134. package/dist/esm/polyfills/system.js +0 -0
  135. package/dist/mg-components/locales/en/messages.json +7 -0
  136. package/dist/mg-components/locales/fr/messages.json +7 -0
  137. package/dist/mg-components/mg-components.css +1 -1
  138. package/dist/mg-components/mg-components.esm.js +1 -1
  139. package/dist/mg-components/{p-3899d5d2.js → p-182bd802.js} +2 -2
  140. package/dist/mg-components/p-f7da9dd2.entry.js +1 -0
  141. package/dist/mg-components/styles/a11y.scss +32 -0
  142. package/dist/mg-components/styles/components.scss +3 -0
  143. package/dist/mg-components/styles/fonts.scss +21 -0
  144. package/dist/mg-components/styles/form.scss +3 -0
  145. package/dist/mg-components/styles/global.scss +87 -0
  146. package/dist/mg-components/styles/layout.scss +29 -0
  147. package/dist/mg-components/styles/main.scss +23 -0
  148. package/dist/mg-components/styles/navigation-button.scss +76 -0
  149. package/dist/mg-components/styles/reset-mg-card-slotted-variables.scss +9 -0
  150. package/dist/mg-components/styles/typography.scss +75 -0
  151. package/dist/mg-components/styles/utilities.scss +21 -0
  152. package/dist/mg-components/variables.css +9 -9
  153. package/dist/types/components/atoms/mg-badge/doc/mg-badge.stories.d.ts +0 -11
  154. package/dist/types/components/atoms/mg-badge/mg-badge.conf.d.ts +2 -2
  155. package/dist/types/components/atoms/mg-badge/mg-badge.d.ts +1 -1
  156. package/dist/types/components/atoms/mg-button/doc/mg-button.stories.d.ts +0 -11
  157. package/dist/types/components/atoms/mg-button/mg-button.conf.d.ts +4 -4
  158. package/dist/types/components/atoms/mg-button/mg-button.d.ts +6 -6
  159. package/dist/types/components/atoms/mg-icon/mg-icon.conf.d.ts +2 -2
  160. package/dist/types/components/atoms/mg-tag/doc/mg-tag.stories.d.ts +0 -13
  161. package/dist/types/components/atoms/mg-tag/mg-tag.conf.d.ts +5 -1
  162. package/dist/types/components/atoms/mg-tag/mg-tag.d.ts +27 -6
  163. package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +2 -2
  164. package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +2 -2
  165. package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.conf.d.ts +1 -1
  166. package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.conf.d.ts +2 -2
  167. package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.conf.d.ts +1 -1
  168. package/dist/types/components/molecules/menu/mg-menu/doc/mg-menu.stories.d.ts +5 -0
  169. package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +37 -0
  170. package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +51 -3
  171. package/dist/types/components/molecules/menu/mg-menu-item/doc/mg-menu-item.stories.d.ts +1 -0
  172. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +0 -8
  173. package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +55 -15
  174. package/dist/types/components/molecules/mg-form/mg-form.d.ts +1 -1
  175. package/dist/types/components/molecules/mg-message/mg-message.d.ts +22 -5
  176. package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +1 -1
  177. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +12 -0
  178. package/dist/types/components/molecules/mg-skip-links/doc/mg-skip-links.stories.d.ts +11 -0
  179. package/dist/types/components/molecules/mg-skip-links/mg-skip-links.conf.d.ts +7 -0
  180. package/dist/types/components/molecules/mg-skip-links/mg-skip-links.d.ts +49 -0
  181. package/dist/types/components/molecules/mg-tabs/mg-tabs.conf.d.ts +5 -3
  182. package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +24 -14
  183. package/dist/types/components.d.ts +81 -18
  184. package/dist/types/locales/index.d.ts +16 -9
  185. package/dist/types/stencil-public-runtime.d.ts +44 -3
  186. package/dist/types/utils/behaviors.utils.d.ts +83 -0
  187. package/dist/types/utils/components.utils.d.ts +14 -0
  188. package/dist/types/utils/locale.utils.d.ts +13 -0
  189. package/dist/types/utils/unit.test.utils.d.ts +78 -0
  190. package/package.json +51 -46
  191. package/readme.md +25 -14
  192. package/dist/components/locale.utils.js +0 -40
  193. package/dist/components/mg-menu.conf.js +0 -10
  194. package/dist/mg-components/p-059a9a59.entry.js +0 -1
@@ -1,203 +1,4 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { c as createID, i as isTagName } from './components.utils.js';
3
- import { i as initLocales } from './index2.js';
4
- import { d as defineCustomElement$3 } from './mg-button2.js';
5
- import { d as defineCustomElement$2 } from './mg-icon2.js';
6
- import { c as createPopper } from './popper.js';
7
-
8
- const mgPopoverCss = "mg-popover{display:contents}mg-popover::slotted(*){display:inline-block}.mg-popover{display:none;padding:1.5rem;z-index:1000;border-radius:0.5rem;background-color:hsl(var(--mg-popover-background-color));box-shadow:var(--box-shadow);color:hsl(var(--mg-popover-font-color))}.mg-popover[data-show]{display:block}.mg-popover mg-button{float:right;margin-right:calc(0rem - (var(--default-size) - var(--mg-icon-regular-size)) / 2);margin-top:calc(0rem - (var(--default-size) - var(--mg-popover-title-font-size) * var(--line-height)) / 2);margin-left:3rem}.mg-popover__arrow,.mg-popover__arrow::before{position:absolute;width:2rem;height:2rem;z-index:-1;background:inherit}.mg-popover__arrow{visibility:hidden}.mg-popover__arrow::before{visibility:visible;content:\"\";transform:rotate(45deg)}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow{bottom:-6px}.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow{top:-6px}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow{right:-6px}.mg-popover[data-popper-placement^=right]>.mg-popover__arrow{left:-6px}.mg-popover__title ::slotted([slot=title]){margin:0 0 1rem !important;font-size:var(--mg-popover-title-font-size) !important;font-weight:600}";
9
-
10
- const MgPopover$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
11
- constructor() {
12
- super();
13
- this.__registerHost();
14
- this.__attachShadow();
15
- this.displayChange = createEvent(this, "display-change", 7);
16
- this.closeButtonId = '';
17
- /**
18
- * Sets an `id` attribute.
19
- * Needed by the input for accessibility `aria-decribedby`.
20
- */
21
- this.identifier = createID('mg-popover');
22
- /**
23
- * Popover placement
24
- */
25
- this.placement = 'bottom';
26
- /**
27
- * Define if popover has a cross button
28
- */
29
- this.closeButton = false;
30
- /**
31
- * Display popover
32
- */
33
- this.display = false;
34
- /**
35
- * Disable popover
36
- */
37
- this.disabled = false;
38
- /**
39
- * Check if clicked outside of component
40
- *
41
- * @param {MouseEvent} event mouse event
42
- * @returns {void}
43
- */
44
- this.clickOutside = (event) => {
45
- if (!this.disabled && event.target.closest(`mg-popover`) !== this.element) {
46
- this.display = false;
47
- }
48
- };
49
- /**
50
- * Show popover
51
- *
52
- * @returns {void}
53
- */
54
- this.show = () => {
55
- // Make the popover visible
56
- this.popover.setAttribute('data-show', '');
57
- // Enable the event listeners
58
- this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: true }] })));
59
- // Update its position
60
- this.popper.update();
61
- // hide when click outside
62
- // setTimeout is used to prevent event to trigger after creation
63
- setTimeout(() => {
64
- document.addEventListener('click', this.clickOutside, false);
65
- }, 0);
66
- };
67
- /**
68
- * Hide popover
69
- *
70
- * @returns {void}
71
- */
72
- this.hide = () => {
73
- // Hide the popover
74
- this.popover.removeAttribute('data-show');
75
- // Disable the event listeners
76
- this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: false }] })));
77
- // Remove event listener
78
- document.removeEventListener('click', this.clickOutside, false);
79
- };
80
- /**
81
- * Handle action for close button
82
- *
83
- * @returns {void}
84
- */
85
- this.handleCloseButton = () => {
86
- this.display = false;
87
- };
88
- }
89
- handleDisplay(newValue) {
90
- if (newValue) {
91
- this.show();
92
- }
93
- else {
94
- this.hide();
95
- }
96
- this.displayChange.emit(newValue);
97
- }
98
- /*************
99
- * Lifecycle *
100
- *************/
101
- /**
102
- * Check if component props are well configured on init
103
- *
104
- * @returns {void} timeout
105
- */
106
- componentWillLoad() {
107
- // Get locales
108
- this.messages = initLocales(this.element).messages;
109
- }
110
- /**
111
- * Check if component props are well configured on init
112
- *
113
- * @returns {void}
114
- */
115
- componentDidLoad() {
116
- const headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
117
- const slottedTitleElement = this.element.querySelector('[slot="title"]');
118
- if (slottedTitleElement && !isTagName(slottedTitleElement, headingTags)) {
119
- throw new Error(`<mg-popover> Slotted title must be a heading: ${headingTags.join(', ')}`);
120
- }
121
- // Set close button id
122
- if (this.closeButton) {
123
- this.closeButtonId = `${this.identifier}-close-button`;
124
- }
125
- // Get popover content
126
- this.popover = this.element.shadowRoot.querySelector(`#${this.identifier}`);
127
- //Get interactive element (first element without slot attribute)
128
- const interactiveElement = this.element.querySelector(':not([slot])');
129
- // Add aria attributes
130
- interactiveElement.setAttribute('aria-controls', this.identifier);
131
- interactiveElement.setAttribute('aria-expanded', `${this.display}`);
132
- // Create popperjs popover
133
- this.popper = createPopper(interactiveElement, this.popover, {
134
- placement: this.placement,
135
- strategy: 'fixed',
136
- modifiers: [
137
- {
138
- name: 'offset',
139
- options: {
140
- offset: [0, 10],
141
- },
142
- },
143
- ],
144
- });
145
- // Add events to toggle display
146
- interactiveElement.addEventListener('click', () => {
147
- if (!this.disabled)
148
- this.display = !this.display;
149
- });
150
- // Add events to hide popover
151
- this.element.addEventListener('keydown', e => {
152
- if (!this.disabled && e.code === 'Escape')
153
- this.display = false;
154
- });
155
- this.handleDisplay(this.display);
156
- }
157
- /**
158
- * Render
159
- *
160
- * @returns {HTMLElement} HTML Element
161
- */
162
- render() {
163
- return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: "mg-popover" }, this.closeButton && (h("mg-button", { identifier: this.closeButtonId, "is-icon": true, variant: "flat", label: this.messages.general.close, onClick: this.handleCloseButton }, h("mg-icon", { icon: "cross" }))), h("div", { class: "mg-popover__title" }, h("slot", { name: "title" })), h("slot", { name: "content" }), h("div", { class: "mg-popover__arrow", "data-popper-arrow": true }))));
164
- }
165
- get element() { return this; }
166
- static get watchers() { return {
167
- "display": ["handleDisplay"]
168
- }; }
169
- static get style() { return mgPopoverCss; }
170
- }, [1, "mg-popover", {
171
- "identifier": [1],
172
- "placement": [1],
173
- "closeButton": [4, "close-button"],
174
- "display": [1028],
175
- "disabled": [1028]
176
- }]);
177
- function defineCustomElement$1() {
178
- if (typeof customElements === "undefined") {
179
- return;
180
- }
181
- const components = ["mg-popover", "mg-button", "mg-icon"];
182
- components.forEach(tagName => { switch (tagName) {
183
- case "mg-popover":
184
- if (!customElements.get(tagName)) {
185
- customElements.define(tagName, MgPopover$1);
186
- }
187
- break;
188
- case "mg-button":
189
- if (!customElements.get(tagName)) {
190
- defineCustomElement$3();
191
- }
192
- break;
193
- case "mg-icon":
194
- if (!customElements.get(tagName)) {
195
- defineCustomElement$2();
196
- }
197
- break;
198
- } });
199
- }
200
- defineCustomElement$1();
1
+ import { M as MgPopover$1, d as defineCustomElement$1 } from './mg-popover2.js';
201
2
 
202
3
  const MgPopover = MgPopover$1;
203
4
  const defineCustomElement = defineCustomElement$1;
@@ -0,0 +1,212 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+ import { c as createID, C as ClassList, g as getWindows, i as isTagName } from './components.utils.js';
3
+ import { i as initLocales } from './index2.js';
4
+ import { d as defineCustomElement$3 } from './mg-button2.js';
5
+ import { d as defineCustomElement$2 } from './mg-card2.js';
6
+ import { d as defineCustomElement$1 } from './mg-icon2.js';
7
+ import { c as createPopper } from './popper.js';
8
+
9
+ const mgPopoverCss = ":host{--mg-card-padding:var(--mg-popover-padding-vertical, 1.5rem) var(--mg-popover-padding-horizontal, var(--mg-popover-padding-vertical, 1.5rem));--mg-card-border:none;--mg-card-border-radius:0.5rem;--mg-card-background:hsl(var(--mg-popover-background-color));position:relative;display:contents}:host::slotted(*){display:inline-block}.mg-popover{display:none;padding:1rem;z-index:2000;color:hsl(var(--mg-popover-font-color))}.mg-popover mg-card{position:relative;z-index:-1}.mg-popover[data-show]{display:block}.mg-popover mg-button{float:right;margin-right:calc(0rem - (var(--default-size) - var(--mg-icon-regular-size)) / 2);margin-top:calc(0rem - (var(--default-size) - var(--mg-popover-title-font-size) * var(--line-height)) / 2);margin-left:3rem}.mg-popover__arrow{position:absolute;visibility:hidden;width:calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);height:calc(3rem + 2 * var(--mg-card-border-radius) + 2rem)}.mg-popover__arrow:before{visibility:visible;content:\"\";position:absolute}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow,.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow{height:1rem}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow:before{left:calc(var(--mg-card-border-radius) + 1rem);border-right:calc(3rem / 2) solid transparent;border-left:calc(3rem / 2) solid transparent}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow{bottom:0.1rem;filter:drop-shadow(0 0.5rem 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow:before{border-top:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow{top:0.1rem;filter:drop-shadow(0 -0.5rem 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow:before{border-bottom:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right]>.mg-popover__arrow{width:1rem}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right]>.mg-popover__arrow:before{top:calc(var(--mg-card-border-radius) + 1rem);border-top:calc(3rem / 2) solid transparent;border-bottom:calc(3rem / 2) solid transparent}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow{right:0.1rem;filter:drop-shadow(0.5rem 0 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow:before{border-left:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=right]>.mg-popover__arrow{left:0.1rem;filter:drop-shadow(-0.5rem 0 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=right]>.mg-popover__arrow:before{border-right:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=left-start],.mg-popover[data-popper-placement^=left-end],.mg-popover[data-popper-placement^=right-start],.mg-popover[data-popper-placement^=right-end]{padding:0 1rem}.mg-popover[data-popper-placement^=left-start]>.mg-popover__arrow,.mg-popover[data-popper-placement^=left-end]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right-start]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right-end]>.mg-popover__arrow{height:calc(3rem + 2 * var(--mg-card-border-radius))}.mg-popover[data-popper-placement^=left-start]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=left-end]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right-start]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right-end]>.mg-popover__arrow:before{top:var(--mg-card-border-radius)}.mg-popover__title ::slotted([slot=title]){margin:0 0 1rem !important;font-size:var(--mg-popover-title-font-size) !important;font-weight:600}.mg-popover--arrow-hide.mg-popover[data-popper-placement^=top]{padding-bottom:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement^=bottom]{padding-top:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement$=end],.mg-popover--arrow-hide.mg-popover[data-popper-placement^=left]{padding-right:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement$=start],.mg-popover--arrow-hide.mg-popover[data-popper-placement^=right]{padding-left:0}.mg-popover ::slotted(*){--mg-card-border:var(--mg-card-border-default);--mg-card-padding:var(--mg-card-padding-default);--mg-card-border-radius:var(--mg-card-border-radius-default);--mg-card-background:var(--mg-card-background-default);--mg-card-box-shadow:var(--mg-card-box-shadow-default)}";
10
+
11
+ const MgPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
12
+ constructor() {
13
+ super();
14
+ this.__registerHost();
15
+ this.__attachShadow();
16
+ this.displayChange = createEvent(this, "display-change", 7);
17
+ this.closeButtonId = '';
18
+ // Classes
19
+ this.classArrowHide = `mg-popover--arrow-hide`;
20
+ /**
21
+ * Check if clicked outside of component
22
+ *
23
+ * @param {MouseEvent} event mouse event
24
+ * @returns {void}
25
+ */
26
+ this.clickOutside = (event) => {
27
+ if (!this.disabled && event.target.closest(`mg-popover`) !== this.element) {
28
+ this.display = false;
29
+ }
30
+ };
31
+ /**
32
+ * Show popover
33
+ *
34
+ * @returns {void}
35
+ */
36
+ this.show = () => {
37
+ // Make the popover visible
38
+ this.popover.setAttribute('data-show', '');
39
+ // Enable the event listeners
40
+ this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: true }] })));
41
+ // Update its position
42
+ this.popper.update();
43
+ // hide when click outside
44
+ // setTimeout is used to prevent event to trigger after creation
45
+ setTimeout(() => {
46
+ this.windows.forEach((localWindow) => {
47
+ localWindow.addEventListener('click', this.clickOutside, false);
48
+ });
49
+ }, 0);
50
+ };
51
+ /**
52
+ * Hide popover
53
+ *
54
+ * @returns {void}
55
+ */
56
+ this.hide = () => {
57
+ // Hide the popover
58
+ this.popover.removeAttribute('data-show');
59
+ // Disable the event listeners
60
+ this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: false }] })));
61
+ // Remove event listener
62
+ this.windows.forEach((localWindow) => {
63
+ localWindow.removeEventListener('click', this.clickOutside, false);
64
+ });
65
+ };
66
+ /**
67
+ * Handle action for close button
68
+ *
69
+ * @returns {void}
70
+ */
71
+ this.handleCloseButton = () => {
72
+ this.display = false;
73
+ };
74
+ this.identifier = createID('mg-popover');
75
+ this.placement = 'bottom';
76
+ this.arrowHide = false;
77
+ this.closeButton = false;
78
+ this.display = false;
79
+ this.disabled = false;
80
+ this.classList = new ClassList(['mg-popover']);
81
+ }
82
+ validateArrowHide(newValue) {
83
+ if (newValue)
84
+ this.classList.add(this.classArrowHide);
85
+ else
86
+ this.classList.delete(this.classArrowHide);
87
+ }
88
+ handleDisplay(newValue) {
89
+ if (newValue) {
90
+ this.show();
91
+ }
92
+ else {
93
+ this.hide();
94
+ }
95
+ this.displayChange.emit(newValue);
96
+ }
97
+ /*************
98
+ * Lifecycle *
99
+ *************/
100
+ /**
101
+ * Check if component props are well configured on init
102
+ *
103
+ * @returns {void} timeout
104
+ */
105
+ componentWillLoad() {
106
+ // Get windows to attach events
107
+ this.windows = getWindows(window);
108
+ // Get locales
109
+ this.messages = initLocales(this.element).messages;
110
+ this.validateArrowHide(this.arrowHide);
111
+ }
112
+ /**
113
+ * Check if component props are well configured on init
114
+ *
115
+ * @returns {void}
116
+ */
117
+ componentDidLoad() {
118
+ const headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
119
+ const slottedTitleElement = this.element.querySelector('[slot="title"]');
120
+ if (slottedTitleElement && !isTagName(slottedTitleElement, headingTags)) {
121
+ throw new Error(`<mg-popover> Slotted title must be a heading: ${headingTags.join(', ')}`);
122
+ }
123
+ // Set close button id
124
+ if (this.closeButton) {
125
+ this.closeButtonId = `${this.identifier}-close-button`;
126
+ }
127
+ // Get popover content
128
+ this.popover = this.element.shadowRoot.getElementById(this.identifier);
129
+ //Get interactive element (first element without slot attribute)
130
+ const interactiveElement = this.element.querySelector(':not([slot])');
131
+ // Add aria attributes
132
+ interactiveElement.setAttribute('aria-controls', this.identifier);
133
+ interactiveElement.setAttribute('aria-expanded', `${this.display}`);
134
+ // Create popperjs popover
135
+ this.popper = createPopper(interactiveElement, this.popover, {
136
+ placement: this.placement,
137
+ strategy: 'fixed',
138
+ modifiers: [
139
+ {
140
+ name: 'offset',
141
+ options: {
142
+ offset: [0, 0],
143
+ },
144
+ },
145
+ ],
146
+ });
147
+ // Add events to toggle display
148
+ interactiveElement.addEventListener('click', () => {
149
+ if (!this.disabled)
150
+ this.display = !this.display;
151
+ });
152
+ // Add events to hide popover
153
+ this.element.addEventListener('keydown', e => {
154
+ if (!this.disabled && e.code === 'Escape')
155
+ this.display = false;
156
+ });
157
+ this.handleDisplay(this.display);
158
+ }
159
+ /**
160
+ * Render
161
+ *
162
+ * @returns {HTMLElement} HTML Element
163
+ */
164
+ render() {
165
+ return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: this.classList.join() }, h("mg-card", null, this.closeButton && (h("mg-button", { identifier: this.closeButtonId, "is-icon": true, variant: "flat", label: this.messages.general.close, onClick: this.handleCloseButton }, h("mg-icon", { icon: "cross" }))), h("div", { class: "mg-popover__title" }, h("slot", { name: "title" })), h("slot", { name: "content" })), !this.arrowHide && h("div", { class: "mg-popover__arrow", "data-popper-arrow": true }))));
166
+ }
167
+ get element() { return this; }
168
+ static get watchers() { return {
169
+ "arrowHide": ["validateArrowHide"],
170
+ "display": ["handleDisplay"]
171
+ }; }
172
+ static get style() { return mgPopoverCss; }
173
+ }, [1, "mg-popover", {
174
+ "identifier": [1],
175
+ "placement": [1],
176
+ "arrowHide": [4, "arrow-hide"],
177
+ "closeButton": [4, "close-button"],
178
+ "display": [1028],
179
+ "disabled": [1028],
180
+ "classList": [32]
181
+ }]);
182
+ function defineCustomElement() {
183
+ if (typeof customElements === "undefined") {
184
+ return;
185
+ }
186
+ const components = ["mg-popover", "mg-button", "mg-card", "mg-icon"];
187
+ components.forEach(tagName => { switch (tagName) {
188
+ case "mg-popover":
189
+ if (!customElements.get(tagName)) {
190
+ customElements.define(tagName, MgPopover);
191
+ }
192
+ break;
193
+ case "mg-button":
194
+ if (!customElements.get(tagName)) {
195
+ defineCustomElement$3();
196
+ }
197
+ break;
198
+ case "mg-card":
199
+ if (!customElements.get(tagName)) {
200
+ defineCustomElement$2();
201
+ }
202
+ break;
203
+ case "mg-icon":
204
+ if (!customElements.get(tagName)) {
205
+ defineCustomElement$1();
206
+ }
207
+ break;
208
+ } });
209
+ }
210
+ defineCustomElement();
211
+
212
+ export { MgPopover as M, defineCustomElement as d };
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface MgSkipLinks extends Components.MgSkipLinks, HTMLElement {}
4
+ export const MgSkipLinks: {
5
+ prototype: MgSkipLinks;
6
+ new (): MgSkipLinks;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,80 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
+ import { i as initLocales } from './index2.js';
3
+
4
+ const mgSkipLinksCss = ".mg-skip-links{position:absolute;transform:translateY(-100%);opacity:0;background:hsl(var(--color-light))}.mg-skip-links:focus-within{position:relative;transform:translateY(0);opacity:1}.mg-skip-links__list{display:flex;flex-wrap:wrap;align-items:center;gap:0.6rem;margin:0;padding:0.64rem 1.8rem;list-style:none}.mg-skip-links__link{display:inline-block;padding:1.2rem;color:hsl(var(--color-dark))}.mg-skip-links__link:hover{background:hsl(var(--color-dark), 0.1)}";
5
+
6
+ const MgSkipLinks$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ this.__registerHost();
10
+ this.__attachShadow();
11
+ this.goToAnchor = createEvent(this, "go-to-anchor", 7);
12
+ /***********
13
+ * Methods *
14
+ **********/
15
+ /**
16
+ * Handle link click and emit go-to-anchor event
17
+ *
18
+ * @param {MouseEvent} event mouse event
19
+ * @returns {void}
20
+ */
21
+ this.handleLinkCLick = (event) => {
22
+ event.currentTarget.blur();
23
+ this.goToAnchor.emit(event.currentTarget.getAttribute('href'));
24
+ };
25
+ this.links = undefined;
26
+ }
27
+ validateLinks(links) {
28
+ if (links === undefined ||
29
+ links.length === 0 ||
30
+ links.some(link => link.href === undefined || !link.href.startsWith('#') || link.label === undefined || link.label.trim() === '')) {
31
+ throw new Error(`<mg-skip-links> prop "links": Cannot be empty and each link must contains an href starting with a "#" and a non empty label attributes.`);
32
+ }
33
+ }
34
+ /*************
35
+ * Lifecycle *
36
+ *************/
37
+ /**
38
+ * Check if props are well configured on init
39
+ *
40
+ * @returns {void}
41
+ */
42
+ componentWillLoad() {
43
+ this.validateLinks(this.links);
44
+ this.messages = initLocales(this.element).messages;
45
+ }
46
+ /**
47
+ * Render
48
+ *
49
+ * @returns {HTMLElement} HTML Element
50
+ */
51
+ render() {
52
+ return (h("nav", { class: "mg-skip-links", role: "navigation", "aria-label": this.messages.skipLinks.navLabel }, h("ul", { class: "mg-skip-links__list" }, this.links.map(link => (h("li", null, h("a", { class: "mg-skip-links__link", href: link.href, onClick: this.handleLinkCLick }, link.label)))))));
53
+ }
54
+ get element() { return this; }
55
+ static get watchers() { return {
56
+ "links": ["validateLinks"]
57
+ }; }
58
+ static get style() { return mgSkipLinksCss; }
59
+ }, [1, "mg-skip-links", {
60
+ "links": [1040]
61
+ }]);
62
+ function defineCustomElement$1() {
63
+ if (typeof customElements === "undefined") {
64
+ return;
65
+ }
66
+ const components = ["mg-skip-links"];
67
+ components.forEach(tagName => { switch (tagName) {
68
+ case "mg-skip-links":
69
+ if (!customElements.get(tagName)) {
70
+ customElements.define(tagName, MgSkipLinks$1);
71
+ }
72
+ break;
73
+ } });
74
+ }
75
+ defineCustomElement$1();
76
+
77
+ const MgSkipLinks = MgSkipLinks$1;
78
+ const defineCustomElement = defineCustomElement$1;
79
+
80
+ export { MgSkipLinks, defineCustomElement };