@mgdis/mg-components 5.0.0 → 5.1.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 (72) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/{mg-badge_24.cjs.entry.js → mg-badge_27.cjs.entry.js} +543 -64
  3. package/dist/cjs/mg-components.cjs.js +1 -1
  4. package/dist/collection/collection-manifest.json +2 -0
  5. package/dist/collection/components/atoms/mg-button/doc/mg-button.stories.js +1 -0
  6. package/dist/collection/components/atoms/mg-button/mg-button.css +8 -0
  7. package/dist/collection/components/atoms/mg-button/mg-button.js +39 -1
  8. package/dist/collection/components/atoms/mg-card/doc/mg-card.stories.js +18 -0
  9. package/dist/collection/components/atoms/mg-card/mg-card.css +7 -0
  10. package/dist/collection/components/atoms/mg-card/mg-card.js +26 -0
  11. package/dist/collection/components/atoms/mg-divider/doc/mg-divider.stories.js +18 -0
  12. package/dist/collection/components/atoms/mg-divider/mg-divider.css +9 -0
  13. package/dist/collection/components/atoms/mg-divider/mg-divider.js +57 -0
  14. package/dist/collection/components/atoms/mg-tooltip/doc/mg-tooltip.stories.js +0 -5
  15. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.conf.js +0 -20
  16. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +1 -1
  17. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +2 -1
  18. package/dist/collection/components/molecules/mg-details/doc/mg-details.stories.js +1 -0
  19. package/dist/collection/components/molecules/mg-details/mg-details.css +29 -0
  20. package/dist/collection/components/molecules/mg-details/mg-details.js +26 -4
  21. package/dist/collection/components/molecules/mg-modal/mg-modal.css +2 -1
  22. package/dist/collection/components/molecules/mg-modal/mg-modal.js +52 -4
  23. package/dist/collection/components/molecules/mg-panel/mg-panel.css +5 -14
  24. package/dist/collection/components/molecules/mg-popover/doc/mg-popover.stories.js +0 -5
  25. package/dist/collection/components/molecules/mg-popover/mg-popover.css +1 -1
  26. package/dist/collection/components/molecules/mg-popover/mg-popover.js +3 -2
  27. package/dist/collection/utils/components.utils.js +10 -6
  28. package/dist/collection/variables.css +17 -2
  29. package/dist/components/components.utils.js +11 -7
  30. package/dist/components/index.d.ts +2 -0
  31. package/dist/components/index.js +2 -0
  32. package/dist/components/mg-button2.js +21 -2
  33. package/dist/components/mg-card.d.ts +11 -0
  34. package/dist/components/mg-card.js +42 -0
  35. package/dist/components/mg-details.js +8 -3
  36. package/dist/components/mg-divider.d.ts +11 -0
  37. package/dist/components/mg-divider.js +51 -0
  38. package/dist/components/mg-modal.js +53 -5
  39. package/dist/components/mg-panel.js +1 -1
  40. package/dist/components/mg-popover.js +3 -2
  41. package/dist/components/mg-tooltip2.js +2 -4
  42. package/dist/esm/loader.js +1 -1
  43. package/dist/esm/{mg-badge_24.entry.js → mg-badge_27.entry.js} +490 -14
  44. package/dist/esm/mg-components.js +1 -1
  45. package/dist/mg-components/mg-components.css +1 -1
  46. package/dist/mg-components/mg-components.esm.js +1 -1
  47. package/dist/mg-components/p-e131701a.entry.js +1 -0
  48. package/dist/mg-components/variables.css +17 -2
  49. package/dist/types/components/atoms/mg-button/mg-button.d.ts +6 -0
  50. package/dist/types/components/atoms/mg-card/doc/mg-card.stories.d.ts +6 -0
  51. package/dist/types/components/atoms/mg-card/mg-card.d.ts +11 -0
  52. package/dist/types/components/atoms/mg-divider/doc/mg-divider.stories.d.ts +6 -0
  53. package/dist/types/components/atoms/mg-divider/mg-divider.d.ts +15 -0
  54. package/dist/types/components/atoms/mg-tooltip/doc/mg-tooltip.stories.d.ts +0 -6
  55. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.conf.d.ts +0 -8
  56. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +1 -1
  57. package/dist/types/components/molecules/mg-details/mg-details.d.ts +4 -0
  58. package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +8 -0
  59. package/dist/types/components/molecules/mg-popover/doc/mg-popover.stories.d.ts +0 -6
  60. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +1 -1
  61. package/dist/types/components.d.ts +55 -6
  62. package/dist/types/utils/components.utils.d.ts +7 -3
  63. package/package.json +4 -3
  64. package/dist/cjs/index-179621c8.js +0 -244
  65. package/dist/cjs/mg-modal.cjs.entry.js +0 -128
  66. package/dist/collection/components/molecules/mg-popover/mg-popover.conf.js +0 -20
  67. package/dist/esm/index-7efedd97.js +0 -238
  68. package/dist/esm/mg-modal.entry.js +0 -124
  69. package/dist/mg-components/p-5f89600c.js +0 -1
  70. package/dist/mg-components/p-b60a4c53.entry.js +0 -1
  71. package/dist/mg-components/p-df947fa5.entry.js +0 -1
  72. package/dist/types/components/molecules/mg-popover/mg-popover.conf.d.ts +0 -8
@@ -1,6 +1,5 @@
1
1
  import { h } from '@stencil/core';
2
2
  import { filterArgs } from '../../../../../.storybook/utils';
3
- import { placements } from '../mg-popover.conf';
4
3
  export default {
5
4
  component: 'mg-popover',
6
5
  title: 'Molecules/mg-popover',
@@ -11,11 +10,7 @@ export default {
11
10
  },
12
11
  argTypes: {
13
12
  placement: {
14
- options: placements,
15
13
  control: { type: 'select' },
16
- table: {
17
- defaultValue: { summary: 'bottom' },
18
- },
19
14
  },
20
15
  },
21
16
  };
@@ -8,7 +8,7 @@ mg-popover::slotted(*) {
8
8
  .mg-popover {
9
9
  display: none;
10
10
  padding: 1.5rem;
11
- z-index: 9999;
11
+ z-index: 1000;
12
12
  border-radius: 0.5rem;
13
13
  background-color: hsl(var(--mg-popover-background-color));
14
14
  box-shadow: var(--box-shadow);
@@ -123,6 +123,7 @@ export class MgPopover {
123
123
  // Create popperjs popover
124
124
  this.popper = createPopper(interactiveElement, this.popover, {
125
125
  placement: this.placement,
126
+ strategy: 'fixed',
126
127
  modifiers: [
127
128
  {
128
129
  name: 'offset',
@@ -150,7 +151,7 @@ export class MgPopover {
150
151
  * @returns {HTMLElement} HTML Element
151
152
  */
152
153
  render() {
153
- return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: "mg-popover" }, !this.disabled && 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 }))));
154
+ 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 }))));
154
155
  }
155
156
  static get is() { return "mg-popover"; }
156
157
  static get encapsulation() { return "shadow"; }
@@ -193,7 +194,7 @@ export class MgPopover {
193
194
  "references": {
194
195
  "Placement": {
195
196
  "location": "import",
196
- "path": "./mg-popover.conf"
197
+ "path": "@popperjs/core"
197
198
  }
198
199
  }
199
200
  },
@@ -5,7 +5,7 @@
5
5
  * @param {number} length ID length
6
6
  * @returns {string} ID
7
7
  */
8
- export function createID(prefix = '', length = 10) {
8
+ export const createID = (prefix = '', length = 10) => {
9
9
  let ID = '';
10
10
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
11
11
  const charsLength = chars.length;
@@ -13,7 +13,7 @@ export function createID(prefix = '', length = 10) {
13
13
  ID += chars.charAt(Math.floor(Math.random() * charsLength));
14
14
  }
15
15
  return (prefix !== '' ? `${prefix}-` : '') + ID;
16
- }
16
+ };
17
17
  /**
18
18
  * Class to manage component classlist
19
19
  * Set() are not working when imported in project
@@ -69,9 +69,9 @@ export class ClassList {
69
69
  * @param {string[]} items items to check
70
70
  * @returns {boolean} all items are string
71
71
  */
72
- export function allItemsAreString(items) {
72
+ export const allItemsAreString = (items) => {
73
73
  return items && items.every(item => typeof item === 'string');
74
- }
74
+ };
75
75
  /**
76
76
  * Check if element is a heading
77
77
  *
@@ -79,6 +79,10 @@ export function allItemsAreString(items) {
79
79
  * @param {string[]} tagNames allowed tag names list
80
80
  * @returns {boolean} element is a heading
81
81
  */
82
- export function isTagName(element, tagNames) {
82
+ export const isTagName = (element, tagNames) => {
83
83
  return tagNames.includes(element === null || element === void 0 ? void 0 : element.tagName.toLowerCase());
84
- }
84
+ };
85
+ /**
86
+ * Focusable elements query selector
87
+ */
88
+ export const focusableElements = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex="-1"]), [identifier]';
@@ -168,17 +168,32 @@
168
168
  /*
169
169
  <mg-panel>
170
170
  */
171
-
172
171
  --mg-panel-border-radius: 0.5rem;
173
172
  --mg-panel-background: var(--color-info-h) var(--color-info-s) calc(var(--color-info-l) + 68%);
173
+ --mg-panel-box-shadow: var(--box-shadow);
174
174
  --mg-panel-content-padding: 1.5rem;
175
175
 
176
176
  /*
177
177
  <mg-illustrated-message>
178
178
  */
179
-
180
179
  --mg-illustrated-message-padding-vertical: 4rem;
181
180
 
181
+ /*
182
+ <mg-card>
183
+ */
184
+ --mg-card-padding: 1.6rem;
185
+ --mg-card-border-radius: 0.5rem;
186
+ --mg-card-background: hsl(var(--color-light));
187
+ --mg-card-border: 0.1rem solid hsla(var(--color-dark), 5%);
188
+ --mg-card-box-shadow: var(--box-shadow);
189
+
190
+ /*
191
+ <mg-divider>
192
+ */
193
+ --mg-divider-background-color: hsla(var(--color-dark), 15%);
194
+ --mg-divider-thickness: 0.1rem;
195
+ --mg-divider-vertical-spacing: 4rem;
196
+
182
197
  /*
183
198
  Layout
184
199
  */
@@ -5,7 +5,7 @@
5
5
  * @param {number} length ID length
6
6
  * @returns {string} ID
7
7
  */
8
- function createID(prefix = '', length = 10) {
8
+ const createID = (prefix = '', length = 10) => {
9
9
  let ID = '';
10
10
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
11
11
  const charsLength = chars.length;
@@ -13,7 +13,7 @@ function createID(prefix = '', length = 10) {
13
13
  ID += chars.charAt(Math.floor(Math.random() * charsLength));
14
14
  }
15
15
  return (prefix !== '' ? `${prefix}-` : '') + ID;
16
- }
16
+ };
17
17
  /**
18
18
  * Class to manage component classlist
19
19
  * Set() are not working when imported in project
@@ -69,9 +69,9 @@ class ClassList {
69
69
  * @param {string[]} items items to check
70
70
  * @returns {boolean} all items are string
71
71
  */
72
- function allItemsAreString(items) {
72
+ const allItemsAreString = (items) => {
73
73
  return items && items.every(item => typeof item === 'string');
74
- }
74
+ };
75
75
  /**
76
76
  * Check if element is a heading
77
77
  *
@@ -79,8 +79,12 @@ function allItemsAreString(items) {
79
79
  * @param {string[]} tagNames allowed tag names list
80
80
  * @returns {boolean} element is a heading
81
81
  */
82
- function isTagName(element, tagNames) {
82
+ const isTagName = (element, tagNames) => {
83
83
  return tagNames.includes(element === null || element === void 0 ? void 0 : element.tagName.toLowerCase());
84
- }
84
+ };
85
+ /**
86
+ * Focusable elements query selector
87
+ */
88
+ const focusableElements = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex="-1"]), [identifier]';
85
89
 
86
- export { ClassList as C, allItemsAreString as a, createID as c, isTagName as i };
90
+ export { ClassList as C, allItemsAreString as a, createID as c, focusableElements as f, isTagName as i };
@@ -1,8 +1,10 @@
1
1
  /* MgComponents custom elements */
2
2
  export { MgBadge as MgBadge } from '../types/components/atoms/mg-badge/mg-badge';
3
3
  export { MgButton as MgButton } from '../types/components/atoms/mg-button/mg-button';
4
+ export { MgCard as MgCard } from '../types/components/atoms/mg-card/mg-card';
4
5
  export { MgCharacterLeft as MgCharacterLeft } from '../types/components/atoms/mg-character-left/mg-character-left';
5
6
  export { MgDetails as MgDetails } from '../types/components/molecules/mg-details/mg-details';
7
+ export { MgDivider as MgDivider } from '../types/components/atoms/mg-divider/mg-divider';
6
8
  export { MgForm as MgForm } from '../types/components/molecules/mg-form/mg-form';
7
9
  export { MgIcon as MgIcon } from '../types/components/atoms/mg-icon/mg-icon';
8
10
  export { MgIllustratedMessage as MgIllustratedMessage } from '../types/components/molecules/mg-illustrated-message/mg-illustrated-message';
@@ -1,8 +1,10 @@
1
1
  export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
2
2
  export { MgBadge, defineCustomElement as defineCustomElementMgBadge } from './mg-badge.js';
3
3
  export { MgButton, defineCustomElement as defineCustomElementMgButton } from './mg-button.js';
4
+ export { MgCard, defineCustomElement as defineCustomElementMgCard } from './mg-card.js';
4
5
  export { MgCharacterLeft, defineCustomElement as defineCustomElementMgCharacterLeft } from './mg-character-left.js';
5
6
  export { MgDetails, defineCustomElement as defineCustomElementMgDetails } from './mg-details.js';
7
+ export { MgDivider, defineCustomElement as defineCustomElementMgDivider } from './mg-divider.js';
6
8
  export { MgForm, defineCustomElement as defineCustomElementMgForm } from './mg-form.js';
7
9
  export { MgIcon, defineCustomElement as defineCustomElementMgIcon } from './mg-icon.js';
8
10
  export { MgIllustratedMessage, defineCustomElement as defineCustomElementMgIllustratedMessage } from './mg-illustrated-message.js';
@@ -7,7 +7,7 @@ import { d as defineCustomElement$1 } from './mg-icon2.js';
7
7
  */
8
8
  const variants = ['primary', 'secondary', 'danger', 'danger-alt', 'info', 'flat', 'success'];
9
9
 
10
- const mgButtonCss = ":host{display:inline-block;vertical-align:middle;max-width:100%}:host(:focus-visible){outline:0}:host(:focus-visible) .mg-button:not(.mg-button--disabled){outline-color:-webkit-focus-ring-color;outline-style:auto;outline-width:0.2rem}:host(:hover) .mg-button--flat:not(.mg-button--disabled),:host(:focus) .mg-button--flat:not(.mg-button--disabled),:host(:active) .mg-button--flat:not(.mg-button--disabled){background:hsla(var(--color-dark), 0.1)}.mg-button.mg-button--primary{border-color:hsl(var(--mg-button-primary-border-color, var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), calc(var(--mg-button-primary-color-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--mg-button-primary-font-color));background:linear-gradient(to bottom, hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), var(--mg-button-primary-color-l)), hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), calc(var(--mg-button-primary-color-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--primary:not(.mg-button--disabled),:host(:focus) .mg-button--primary:not(.mg-button--disabled),:host(:active) .mg-button--primary:not(.mg-button--disabled){background:hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), var(--mg-button-primary-color-l))}.mg-button.mg-button--secondary{border-color:hsl(var(--mg-button-secondary-border-color, var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), calc(var(--mg-button-secondary-color-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--mg-button-secondary-font-color));background:linear-gradient(to bottom, hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), var(--mg-button-secondary-color-l)), hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), calc(var(--mg-button-secondary-color-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--secondary:not(.mg-button--disabled),:host(:focus) .mg-button--secondary:not(.mg-button--disabled),:host(:active) .mg-button--secondary:not(.mg-button--disabled){background:hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), var(--mg-button-secondary-color-l))}.mg-button.mg-button--danger{border-color:hsl(var(--mg-button-danger-border-color, var(--color-danger-h), var(--color-danger-s), calc(var(--color-danger-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-neutral));background:linear-gradient(to bottom, hsl(var(--color-danger-h), var(--color-danger-s), var(--color-danger-l)), hsl(var(--color-danger-h), var(--color-danger-s), calc(var(--color-danger-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--danger:not(.mg-button--disabled),:host(:focus) .mg-button--danger:not(.mg-button--disabled),:host(:active) .mg-button--danger:not(.mg-button--disabled){background:hsl(var(--color-danger-h), var(--color-danger-s), var(--color-danger-l))}.mg-button.mg-button--danger-alt{border-color:hsl(var(--mg-button-danger-alt-border-color, var(--color-neutral-h), var(--color-neutral-s), calc(var(--color-neutral-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-danger));background:linear-gradient(to bottom, hsl(var(--color-neutral-h), var(--color-neutral-s), var(--color-neutral-l)), hsl(var(--color-neutral-h), var(--color-neutral-s), calc(var(--color-neutral-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--danger-alt:not(.mg-button--disabled),:host(:focus) .mg-button--danger-alt:not(.mg-button--disabled),:host(:active) .mg-button--danger-alt:not(.mg-button--disabled){background:hsl(var(--color-neutral-h), var(--color-neutral-s), var(--color-neutral-l))}.mg-button.mg-button--info{border-color:hsl(var(--mg-button-info-border-color, var(--color-info-h), var(--color-info-s), calc(var(--color-info-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-neutral));background:linear-gradient(to bottom, hsl(var(--color-info-h), var(--color-info-s), var(--color-info-l)), hsl(var(--color-info-h), var(--color-info-s), calc(var(--color-info-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--info:not(.mg-button--disabled),:host(:focus) .mg-button--info:not(.mg-button--disabled),:host(:active) .mg-button--info:not(.mg-button--disabled){background:hsl(var(--color-info-h), var(--color-info-s), var(--color-info-l))}.mg-button.mg-button--success{border-color:hsl(var(--mg-button-success-border-color, var(--color-success-h), var(--color-success-s), calc(var(--color-success-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-dark));background:linear-gradient(to bottom, hsl(var(--color-success-h), var(--color-success-s), var(--color-success-l)), hsl(var(--color-success-h), var(--color-success-s), calc(var(--color-success-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--success:not(.mg-button--disabled),:host(:focus) .mg-button--success:not(.mg-button--disabled),:host(:active) .mg-button--success:not(.mg-button--disabled){background:hsl(var(--color-success-h), var(--color-success-s), var(--color-success-l))}.mg-button{position:relative;display:inline-flex;align-items:center;column-gap:0.6rem;padding:calc((var(--default-size) - 0.2rem - var(--font-size) * var(--line-height)) / 2) 1.1rem;min-height:var(--default-size);box-sizing:border-box;border-top-right-radius:var(--mg-button-border-radius-top-right, var(--mg-button-border-radius));border-top-left-radius:var(--mg-button-border-radius-top-left, var(--mg-button-border-radius));border-bottom-right-radius:var(--mg-button-border-radius-bottom-right, var(--mg-button-border-radius));border-bottom-left-radius:var(--mg-button-border-radius-bottom-left, var(--mg-button-border-radius));cursor:pointer;background-image:none;border-top-width:var(--mg-button-border-top-width, 0.1rem);border-right-width:var(--mg-button-border-right-width, 0.1rem);border-bottom-width:var(--mg-button-border-bottom-width, 0.1rem);border-left-width:var(--mg-button-border-left-width, 0.1rem);border-style:solid;text-decoration:none;font-family:inherit;font-weight:var(--mg-button-font-weight, normal);text-align:left;font-size:var(--font-size);touch-action:manipulation}.mg-button.mg-button--disabled{opacity:var(--mg-button-disabled-opacity);cursor:default}.mg-button.mg-button--icon{padding:0;justify-content:center;width:var(--default-size);height:var(--default-size);border-top-right-radius:var(--mg-button-border-radius-top-right, var(--mg-button-icon-border-radius));border-top-left-radius:var(--mg-button-border-radius-top-left, var(--mg-button-icon-border-radius));border-bottom-right-radius:var(--mg-button-border-radius-bottom-right, var(--mg-button-icon-border-radius));border-bottom-left-radius:var(--mg-button-border-radius-bottom-left, var(--mg-button-icon-border-radius));font-size:var(--font-size);line-height:var(--font-size)}.mg-button.mg-button--flat{background:none;border:none}.mg-button.mg-button--loading>mg-icon:first-of-type{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}.mg-button.mg-button--loading .mg-button__content{opacity:0}.mg-button mg-icon:only-child,.mg-button ::slotted(mg-icon){display:inline-flex;flex-shrink:0;line-height:1;margin:auto 0}.mg-button slot,.mg-button ::slotted(*:not(mg-icon)){text-decoration:none;font-family:inherit;font-weight:var(--mg-button-font-weight, normal);text-align:left;font-size:var(--font-size);display:flex;align-items:center;column-gap:0.6rem}";
10
+ const mgButtonCss = ":host{display:inline-block;vertical-align:middle;max-width:100%}:host(:focus-visible){outline:0}:host(:focus-visible) .mg-button:not(.mg-button--disabled){outline-color:-webkit-focus-ring-color;outline-style:auto;outline-width:0.2rem}:host(:hover) .mg-button--flat:not(.mg-button--disabled),:host(:focus) .mg-button--flat:not(.mg-button--disabled),:host(:active) .mg-button--flat:not(.mg-button--disabled){background:hsla(var(--color-dark), 0.1)}:host([full-width]){display:block}.mg-button.mg-button--primary{border-color:hsl(var(--mg-button-primary-border-color, var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), calc(var(--mg-button-primary-color-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--mg-button-primary-font-color));background:linear-gradient(to bottom, hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), var(--mg-button-primary-color-l)), hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), calc(var(--mg-button-primary-color-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--primary:not(.mg-button--disabled),:host(:focus) .mg-button--primary:not(.mg-button--disabled),:host(:active) .mg-button--primary:not(.mg-button--disabled){background:hsl(var(--mg-button-primary-color-h), var(--mg-button-primary-color-s), var(--mg-button-primary-color-l))}.mg-button.mg-button--secondary{border-color:hsl(var(--mg-button-secondary-border-color, var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), calc(var(--mg-button-secondary-color-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--mg-button-secondary-font-color));background:linear-gradient(to bottom, hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), var(--mg-button-secondary-color-l)), hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), calc(var(--mg-button-secondary-color-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--secondary:not(.mg-button--disabled),:host(:focus) .mg-button--secondary:not(.mg-button--disabled),:host(:active) .mg-button--secondary:not(.mg-button--disabled){background:hsl(var(--mg-button-secondary-color-h), var(--mg-button-secondary-color-s), var(--mg-button-secondary-color-l))}.mg-button.mg-button--danger{border-color:hsl(var(--mg-button-danger-border-color, var(--color-danger-h), var(--color-danger-s), calc(var(--color-danger-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-neutral));background:linear-gradient(to bottom, hsl(var(--color-danger-h), var(--color-danger-s), var(--color-danger-l)), hsl(var(--color-danger-h), var(--color-danger-s), calc(var(--color-danger-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--danger:not(.mg-button--disabled),:host(:focus) .mg-button--danger:not(.mg-button--disabled),:host(:active) .mg-button--danger:not(.mg-button--disabled){background:hsl(var(--color-danger-h), var(--color-danger-s), var(--color-danger-l))}.mg-button.mg-button--danger-alt{border-color:hsl(var(--mg-button-danger-alt-border-color, var(--color-neutral-h), var(--color-neutral-s), calc(var(--color-neutral-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-danger));background:linear-gradient(to bottom, hsl(var(--color-neutral-h), var(--color-neutral-s), var(--color-neutral-l)), hsl(var(--color-neutral-h), var(--color-neutral-s), calc(var(--color-neutral-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--danger-alt:not(.mg-button--disabled),:host(:focus) .mg-button--danger-alt:not(.mg-button--disabled),:host(:active) .mg-button--danger-alt:not(.mg-button--disabled){background:hsl(var(--color-neutral-h), var(--color-neutral-s), var(--color-neutral-l))}.mg-button.mg-button--info{border-color:hsl(var(--mg-button-info-border-color, var(--color-info-h), var(--color-info-s), calc(var(--color-info-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-neutral));background:linear-gradient(to bottom, hsl(var(--color-info-h), var(--color-info-s), var(--color-info-l)), hsl(var(--color-info-h), var(--color-info-s), calc(var(--color-info-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--info:not(.mg-button--disabled),:host(:focus) .mg-button--info:not(.mg-button--disabled),:host(:active) .mg-button--info:not(.mg-button--disabled){background:hsl(var(--color-info-h), var(--color-info-s), var(--color-info-l))}.mg-button.mg-button--success{border-color:hsl(var(--mg-button-success-border-color, var(--color-success-h), var(--color-success-s), calc(var(--color-success-l) - var(--mg-button-border-variation) * 10%)));color:hsl(var(--color-dark));background:linear-gradient(to bottom, hsl(var(--color-success-h), var(--color-success-s), var(--color-success-l)), hsl(var(--color-success-h), var(--color-success-s), calc(var(--color-success-l) - var(--mg-button-gradient) * 10%)))}:host(:hover) .mg-button--success:not(.mg-button--disabled),:host(:focus) .mg-button--success:not(.mg-button--disabled),:host(:active) .mg-button--success:not(.mg-button--disabled){background:hsl(var(--color-success-h), var(--color-success-s), var(--color-success-l))}.mg-button{position:relative;display:inline-flex;align-items:center;column-gap:0.6rem;padding:calc((var(--default-size) - 0.2rem - var(--font-size) * var(--line-height)) / 2) 1.1rem;min-height:var(--default-size);box-sizing:border-box;border-top-right-radius:var(--mg-button-border-radius-top-right, var(--mg-button-border-radius));border-top-left-radius:var(--mg-button-border-radius-top-left, var(--mg-button-border-radius));border-bottom-right-radius:var(--mg-button-border-radius-bottom-right, var(--mg-button-border-radius));border-bottom-left-radius:var(--mg-button-border-radius-bottom-left, var(--mg-button-border-radius));cursor:pointer;background-image:none;border-top-width:var(--mg-button-border-top-width, 0.1rem);border-right-width:var(--mg-button-border-right-width, 0.1rem);border-bottom-width:var(--mg-button-border-bottom-width, 0.1rem);border-left-width:var(--mg-button-border-left-width, 0.1rem);border-style:solid;text-decoration:none;font-family:inherit;font-weight:var(--mg-button-font-weight, normal);text-align:left;font-size:var(--font-size);touch-action:manipulation}.mg-button.mg-button--disabled{opacity:var(--mg-button-disabled-opacity);cursor:default}.mg-button.mg-button--icon{padding:0;justify-content:center;width:var(--default-size);height:var(--default-size);border-top-right-radius:var(--mg-button-border-radius-top-right, var(--mg-button-icon-border-radius));border-top-left-radius:var(--mg-button-border-radius-top-left, var(--mg-button-icon-border-radius));border-bottom-right-radius:var(--mg-button-border-radius-bottom-right, var(--mg-button-icon-border-radius));border-bottom-left-radius:var(--mg-button-border-radius-bottom-left, var(--mg-button-icon-border-radius));font-size:var(--font-size);line-height:var(--font-size)}.mg-button.mg-button--flat{background:none;border:none}.mg-button.mg-button--full-width{display:flex;justify-content:center}.mg-button.mg-button--loading>mg-icon:first-of-type{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%)}.mg-button.mg-button--loading .mg-button__content{opacity:0}.mg-button mg-icon:only-child,.mg-button ::slotted(mg-icon){display:inline-flex;flex-shrink:0;line-height:1;margin:auto 0}.mg-button slot,.mg-button ::slotted(*:not(mg-icon)){text-decoration:none;font-family:inherit;font-weight:var(--mg-button-font-weight, normal);text-align:left;font-size:var(--font-size);display:flex;align-items:center;column-gap:0.6rem}";
11
11
 
12
12
  const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
13
13
  constructor() {
@@ -20,10 +20,15 @@ const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
20
20
  this.onClickElementFn = null;
21
21
  this.classDisabled = 'mg-button--disabled';
22
22
  this.classLoading = 'mg-button--loading';
23
+ this.classFullWidth = 'mg-button--full-width';
23
24
  /**
24
25
  * Define button variant
25
26
  */
26
27
  this.variant = variants[0]; // Primary
28
+ /**
29
+ * Set button to full-width
30
+ */
31
+ this.fullWidth = false;
27
32
  /**
28
33
  * Define if button is round.
29
34
  * Used for icon button.
@@ -98,6 +103,17 @@ const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
98
103
  this.classList.add(`mg-button--${newValue}`);
99
104
  }
100
105
  }
106
+ validateFullWidth(newValue) {
107
+ if (newValue && this.isIcon) {
108
+ throw new Error('<mg-button> prop "fullWidth" cannot be used with prop "isIcon".');
109
+ }
110
+ else if (newValue) {
111
+ this.classList.add(this.classFullWidth);
112
+ }
113
+ else {
114
+ this.classList.delete(this.classFullWidth);
115
+ }
116
+ }
101
117
  disabledHandler(isDisabled) {
102
118
  // Remove loading when enable
103
119
  // Will be set back onclick
@@ -130,6 +146,7 @@ const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
130
146
  */
131
147
  componentWillLoad() {
132
148
  this.validateVariant(this.variant);
149
+ this.validateFullWidth(this.fullWidth);
133
150
  if (this.isIcon) {
134
151
  this.classList.add(`mg-button--icon`);
135
152
  if (typeof this.label !== 'string' || this.label.trim() === '') {
@@ -146,11 +163,12 @@ const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
146
163
  * @returns {HTMLElement} html element
147
164
  */
148
165
  render() {
149
- return (h(Host, { role: "button", tabIndex: this.disabled ? -1 : 0, type: this.type, form: this.form, "aria-label": this.label, "aria-disabled": this.disabled !== undefined && this.disabled.toString(), onClick: this.handleClick, onKeyUp: this.handleKeyup, onKeyDown: this.handleKeydown }, h("div", { class: this.classList.join(), id: this.identifier }, this.loading && h("mg-icon", { icon: "loader", spin: true }), h("div", { class: "mg-button__content" }, h("slot", null)))));
166
+ return (h(Host, { role: "button", tabIndex: this.disabled ? -1 : 0, type: this.type, form: this.form, "full-width": this.fullWidth, "aria-label": this.label, "aria-disabled": this.disabled !== undefined && this.disabled.toString(), onClick: this.handleClick, onKeyUp: this.handleKeyup, onKeyDown: this.handleKeydown }, h("div", { class: this.classList.join(), id: this.identifier }, this.loading && h("mg-icon", { icon: "loader", spin: true }), h("div", { class: "mg-button__content" }, h("slot", null)))));
150
167
  }
151
168
  get element() { return this; }
152
169
  static get watchers() { return {
153
170
  "variant": ["validateVariant"],
171
+ "fullWidth": ["validateFullWidth"],
154
172
  "disabled": ["disabledHandler"],
155
173
  "loading": ["loadingHandler"]
156
174
  }; }
@@ -160,6 +178,7 @@ const MgButton = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
160
178
  "identifier": [1],
161
179
  "label": [1],
162
180
  "type": [1],
181
+ "fullWidth": [1028, "full-width"],
163
182
  "form": [1025],
164
183
  "disabled": [1028],
165
184
  "isIcon": [4, "is-icon"],
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface MgCard extends Components.MgCard, HTMLElement {}
4
+ export const MgCard: {
5
+ prototype: MgCard;
6
+ new (): MgCard;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,42 @@
1
+ import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
+
3
+ const mgCardCss = ".mg-card{padding:var(--mg-card-padding);border-radius:var(--mg-card-border-radius);background:var(--mg-card-background);border:var(--mg-card-border);box-shadow:var(--mg-card-box-shadow)}";
4
+
5
+ const MgCard$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
10
+ }
11
+ /*************
12
+ * Lifecycle *
13
+ *************/
14
+ /**
15
+ * Render
16
+ *
17
+ * @returns {HTMLElement} HTML Element
18
+ */
19
+ render() {
20
+ return (h("div", { class: "mg-card" }, h("slot", null)));
21
+ }
22
+ static get style() { return mgCardCss; }
23
+ }, [1, "mg-card"]);
24
+ function defineCustomElement$1() {
25
+ if (typeof customElements === "undefined") {
26
+ return;
27
+ }
28
+ const components = ["mg-card"];
29
+ components.forEach(tagName => { switch (tagName) {
30
+ case "mg-card":
31
+ if (!customElements.get(tagName)) {
32
+ customElements.define(tagName, MgCard$1);
33
+ }
34
+ break;
35
+ } });
36
+ }
37
+ defineCustomElement$1();
38
+
39
+ const MgCard = MgCard$1;
40
+ const defineCustomElement = defineCustomElement$1;
41
+
42
+ export { MgCard, defineCustomElement };
@@ -1,7 +1,7 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { d as defineCustomElement$2 } from './mg-icon2.js';
3
3
 
4
- const mgDetailsCss = ".mg-details summary{display:flex;align-items:baseline;cursor:pointer}.mg-details__toggle{margin-left:1.5rem;flex-shrink:0}.mg-details__details{margin-top:1.5rem}";
4
+ const mgDetailsCss = ".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}.mg-details summary{display:flex;align-items:baseline;cursor:pointer}.mg-details__toggle{margin-left:1.5rem;flex-shrink:0;display:flex;align-items:center;align-self:flex-start;gap:0.6rem;min-height:calc(var(--font-size) * var(--line-height))}.mg-details__toggle mg-icon{align-self:self-end}.mg-details__details{margin-top:1.5rem}";
5
5
 
6
6
  const MgDetails$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
7
7
  constructor() {
@@ -9,6 +9,10 @@ const MgDetails$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
9
9
  this.__registerHost();
10
10
  this.__attachShadow();
11
11
  this.expandedChange = createEvent(this, "expanded-change", 7);
12
+ /**
13
+ * Hide summary element
14
+ */
15
+ this.hideSummary = false;
12
16
  /**
13
17
  * Define if details are diplayed
14
18
  */
@@ -23,7 +27,7 @@ const MgDetails$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
23
27
  };
24
28
  }
25
29
  validateTitles(newValue) {
26
- if (newValue === undefined || newValue === '') {
30
+ if (newValue === undefined || newValue.trim() === '') {
27
31
  throw new Error('<mg-details> prop "toggleClosed" and "toggleOpened" must be defined.');
28
32
  }
29
33
  }
@@ -48,7 +52,7 @@ const MgDetails$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
48
52
  * @returns {HTMLElement} HTML Element
49
53
  */
50
54
  render() {
51
- return (h("details", { class: "mg-details", onToggle: this.handleToggle, open: this.expanded, ref: el => (this.details = el) }, h("summary", null, h("slot", { name: "summary" }), h("span", { class: "mg-details__toggle" }, h("mg-icon", { icon: this.expanded ? 'chevron-up' : 'chevron-down' }), " ", this.expanded ? this.toggleOpened : this.toggleClosed)), h("div", { class: "mg-details__details" }, h("slot", { name: "details" }))));
55
+ return (h("details", { class: "mg-details", onToggle: this.handleToggle, open: this.expanded, ref: el => (this.details = el) }, h("summary", null, h("slot", { name: "summary" }), h("span", { class: "mg-details__toggle" }, h("mg-icon", { icon: this.expanded ? 'chevron-up' : 'chevron-down' }), h("span", { class: { 'sr-only': this.hideSummary } }, this.expanded ? this.toggleOpened : this.toggleClosed))), h("div", { class: "mg-details__details" }, h("slot", { name: "details" }))));
52
56
  }
53
57
  static get watchers() { return {
54
58
  "toggleClosed": ["validateTitles"],
@@ -59,6 +63,7 @@ const MgDetails$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
59
63
  }, [1, "mg-details", {
60
64
  "toggleClosed": [1, "toggle-closed"],
61
65
  "toggleOpened": [1, "toggle-opened"],
66
+ "hideSummary": [4, "hide-summary"],
62
67
  "expanded": [1028]
63
68
  }]);
64
69
  function defineCustomElement$1() {
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface MgDivider extends Components.MgDivider, HTMLElement {}
4
+ export const MgDivider: {
5
+ prototype: MgDivider;
6
+ new (): MgDivider;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,51 @@
1
+ import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
+
3
+ const mgDividerCss = ".mg-divider{margin:var(--mg-divider-vertical-spacing) auto;width:12rem;height:var(--mg-divider-thickness);background-color:var(--mg-divider-background-color)}.mg-divider.mg-divider--full{width:100%}";
4
+
5
+ const MgDivider$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.__attachShadow();
10
+ /**************
11
+ * Decorators *
12
+ **************/
13
+ /**
14
+ * Define component size
15
+ */
16
+ this.size = 'regular';
17
+ }
18
+ /**
19
+ * Render
20
+ *
21
+ * @returns {HTMLElement} HTML Element
22
+ */
23
+ render() {
24
+ return (h("div", { class: {
25
+ 'mg-divider': true,
26
+ 'mg-divider--full': this.size === 'full',
27
+ } }));
28
+ }
29
+ static get style() { return mgDividerCss; }
30
+ }, [1, "mg-divider", {
31
+ "size": [1]
32
+ }]);
33
+ function defineCustomElement$1() {
34
+ if (typeof customElements === "undefined") {
35
+ return;
36
+ }
37
+ const components = ["mg-divider"];
38
+ components.forEach(tagName => { switch (tagName) {
39
+ case "mg-divider":
40
+ if (!customElements.get(tagName)) {
41
+ customElements.define(tagName, MgDivider$1);
42
+ }
43
+ break;
44
+ } });
45
+ }
46
+ defineCustomElement$1();
47
+
48
+ const MgDivider = MgDivider$1;
49
+ const defineCustomElement = defineCustomElement$1;
50
+
51
+ export { MgDivider, defineCustomElement };
@@ -1,10 +1,10 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { c as createID, C as ClassList } from './components.utils.js';
2
+ import { c as createID, C as ClassList, f as focusableElements } from './components.utils.js';
3
3
  import { i as initLocales } from './index2.js';
4
4
  import { d as defineCustomElement$3 } from './mg-button2.js';
5
5
  import { d as defineCustomElement$2 } from './mg-icon2.js';
6
6
 
7
- const mgModalCss = ".mg-modal{display:flex;justify-content:center;align-items:center;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;padding:2rem 0;background-color:hsla(var(--color-light), 85%)}.mg-modal__dialog{display:flex;flex-direction:column;align-self:center;row-gap:3rem;padding:1.5rem 2.5rem;width:60rem;height:fit-content;max-width:100%;max-height:100%;box-sizing:border-box;background-color:hsl(var(--color-light));box-shadow:var(--box-shadow);border-radius:var(--mg-modal-border-radius)}.mg-modal__header{margin-bottom:0.5rem}.mg-modal__title{margin:0;font-family:var(--font-family-heading);font-size:var(--mg-modal-title-font-size);font-weight:600}.mg-modal__close-button{float:right;height:var(--mg-modal-title-font-size);margin-top:calc((var(--default-size) - var(--mg-modal-title-font-size) * var(--line-height)) / 2 * -1);margin-right:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2 * -1)}.mg-modal__content{overflow-y:auto}.mg-modal__content::slotted(*){font-size:var(--mg-modal-content-font-size)}.mg-modal.mg-modal--hide{display:none}";
7
+ const mgModalCss = ".mg-modal{display:flex;justify-content:center;align-items:center;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;padding:2rem 0;background-color:hsla(var(--color-light), 85%)}.mg-modal__dialog{display:flex;position:relative;flex-direction:column;align-self:center;row-gap:3rem;padding:1.5rem 2.5rem;width:60rem;height:fit-content;max-width:100%;max-height:100%;box-sizing:border-box;background-color:hsl(var(--color-light));box-shadow:var(--box-shadow);border-radius:var(--mg-modal-border-radius)}.mg-modal__header{margin-bottom:0.5rem}.mg-modal__title{margin:0;font-family:var(--font-family-heading);font-size:var(--mg-modal-title-font-size);font-weight:600}.mg-modal__close-button{float:right;height:var(--mg-modal-title-font-size);margin-top:calc((var(--default-size) - var(--mg-modal-title-font-size) * var(--line-height)) / 2 * -1);margin-right:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2 * -1)}.mg-modal__content{overflow-y:auto}.mg-modal__content::slotted(*){font-size:var(--mg-modal-content-font-size)}.mg-modal.mg-modal--hide{display:none}";
8
8
 
9
9
  const MgModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
10
10
  constructor() {
@@ -13,9 +13,6 @@ const MgModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
13
13
  this.__attachShadow();
14
14
  this.componentShow = createEvent(this, "component-show", 7);
15
15
  this.componentHide = createEvent(this, "component-hide", 7);
16
- /************
17
- * Internal *
18
- ************/
19
16
  // Classes
20
17
  this.classHide = 'mg-modal--hide';
21
18
  // IDs
@@ -46,6 +43,37 @@ const MgModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
46
43
  * Component classes
47
44
  */
48
45
  this.classList = new ClassList(['mg-modal']);
46
+ this.setFocus = () => {
47
+ // Get all focusable elements
48
+ this.modalFocusableElements = Array.from(this.element.querySelectorAll(focusableElements)).reduce((acc, focusableElement) => {
49
+ acc.push(focusableElement.shadowRoot !== null ? focusableElement.shadowRoot.querySelector(focusableElements) || focusableElement : focusableElement);
50
+ return acc;
51
+ }, []);
52
+ // When close button is enabled it's the first focusable element.
53
+ if (this.closeButton) {
54
+ this.modalFocusableElements.unshift(this.element.shadowRoot.querySelector(`.mg-modal__close-button mg-button`));
55
+ }
56
+ // It at least one
57
+ if (this.modalFocusableElements.length >= 1) {
58
+ // Set focus on first element
59
+ this.modalFocusableElements[0].focus();
60
+ // Add event listener on last element
61
+ const lastFocusableElement = this.modalFocusableElements[this.modalFocusableElements.length - 1];
62
+ lastFocusableElement.addEventListener('keydown', event => {
63
+ if (event.key === 'Tab' && !event.shiftKey) {
64
+ event.preventDefault();
65
+ this.modalFocusableElements[0].focus();
66
+ }
67
+ });
68
+ // Add event listener on first element (case shift + tab)
69
+ this.modalFocusableElements[0].addEventListener('keydown', event => {
70
+ if (event.key === 'Tab' && event.shiftKey) {
71
+ event.preventDefault();
72
+ lastFocusableElement.focus();
73
+ }
74
+ });
75
+ }
76
+ };
49
77
  /*************
50
78
  * Handlers *
51
79
  *************/
@@ -110,6 +138,26 @@ const MgModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
110
138
  this.validateModalTitle(this.modalTitle);
111
139
  this.validateHide(this.hide);
112
140
  }
141
+ /**
142
+ * Add observer on component to set focus when displayed
143
+ *
144
+ * @returns {void}
145
+ */
146
+ componentDidLoad() {
147
+ new MutationObserver(mutationList => {
148
+ /*
149
+ TODO find a way to cover this callback
150
+ */
151
+ /* istanbul ignore next */
152
+ if (mutationList.some(mutation => mutation.attributeName === 'aria-hidden' && mutation.target.ariaHidden === null)) {
153
+ this.setFocus();
154
+ }
155
+ }).observe(this.element.shadowRoot.getElementById(this.identifier), { attributes: true });
156
+ // Set focus if display on load
157
+ if (!this.hide) {
158
+ this.setFocus();
159
+ }
160
+ }
113
161
  /**
114
162
  * Render
115
163
  *
@@ -8,7 +8,7 @@ import { d as defineCustomElement$4 } from './mg-input-text2.js';
8
8
  import { d as defineCustomElement$3 } from './mg-input-title2.js';
9
9
  import { d as defineCustomElement$2 } from './mg-tooltip2.js';
10
10
 
11
- const mgPanelCss = ".mg-panel{background-color:hsl(var(--mg-panel-background));border-radius:var(--mg-panel-border-radius);box-shadow:var(--box-shadow)}.mg-panel__header{display:flex;flex-wrap:wrap;justify-content:space-between;padding:0 1rem 0 0.3rem;align-items:flex-start}.mg-panel__header-left,.mg-panel__header-right{display:flex;margin:0.3rem 0}.mg-panel__header-left--full{flex:1 1 auto}.mg-panel__header-right{padding-left:0.3rem;flex:1 auto}.mg-panel__header-left mg-input-text{flex-grow:1;margin-left:0.3rem}.mg-panel__header-left mg-button+mg-button:not([slot=append-input]){margin-left:0.3rem}.mg-panel__collapse-button-content{--font-size:1.4rem;--mg-button-font-weight:600}.mg-panel__content{padding:var(--mg-panel-content-padding)}.mg-panel ::slotted([slot=header-right]){display:flex;flex-wrap:wrap;gap:1rem;margin-left:auto}";
11
+ const mgPanelCss = ".mg-panel{background-color:hsl(var(--mg-panel-background));border-radius:var(--mg-panel-border-radius);box-shadow:var(--mg-panel-box-shadow)}.mg-panel__header{display:flex;flex-wrap:wrap;justify-content:space-between;padding:0 1rem 0 0.3rem;align-items:flex-start}.mg-panel__header-left,.mg-panel__header-right{display:flex;margin:0.3rem 0}.mg-panel__header-right{padding-left:0.3rem;flex:1 auto}.mg-panel__header-left mg-input-text{flex-grow:1;margin-left:0.3rem}.mg-panel__header-left mg-button+mg-button:not([slot=append-input]){margin-left:0.3rem}.mg-panel__header-left.mg-panel__header-left--full{flex:1 1 auto}.mg-panel__collapse-button-content{--font-size:1.4rem;--mg-button-font-weight:600}.mg-panel__content{padding:var(--mg-panel-content-padding)}.mg-panel ::slotted([slot=header-right]){display:flex;flex-wrap:wrap;gap:1rem;margin-left:auto}";
12
12
 
13
13
  const MgPanel$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
14
14
  constructor() {
@@ -5,7 +5,7 @@ import { d as defineCustomElement$3 } from './mg-button2.js';
5
5
  import { d as defineCustomElement$2 } from './mg-icon2.js';
6
6
  import { c as createPopper } from './popper.js';
7
7
 
8
- const mgPopoverCss = "mg-popover{display:contents}mg-popover::slotted(*){display:inline-block}.mg-popover{display:none;padding:1.5rem;z-index:9999;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}";
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
9
 
10
10
  const MgPopover$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
11
11
  constructor() {
@@ -132,6 +132,7 @@ const MgPopover$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
132
132
  // Create popperjs popover
133
133
  this.popper = createPopper(interactiveElement, this.popover, {
134
134
  placement: this.placement,
135
+ strategy: 'fixed',
135
136
  modifiers: [
136
137
  {
137
138
  name: 'offset',
@@ -159,7 +160,7 @@ const MgPopover$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
159
160
  * @returns {HTMLElement} HTML Element
160
161
  */
161
162
  render() {
162
- return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: "mg-popover" }, !this.disabled && 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 }))));
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 }))));
163
164
  }
164
165
  get element() { return this; }
165
166
  static get watchers() { return {
@@ -2,9 +2,6 @@ import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal
2
2
  import { c as createID } from './components.utils.js';
3
3
  import { c as createPopper } from './popper.js';
4
4
 
5
- /**
6
- * List of all possibles placements
7
- */
8
5
  var Guard;
9
6
  (function (Guard) {
10
7
  Guard["FOCUS"] = "focus";
@@ -12,7 +9,7 @@ var Guard;
12
9
  Guard["HOVER_TOOLTIPED_ELEMENT"] = "hoverTooltipedGuard";
13
10
  })(Guard || (Guard = {}));
14
11
 
15
- const mgTooltipCss = ":host{display:inline-block}.mg-tooltip{display:none;padding:0.5rem 0.8rem;z-index:9999;border-radius:var(--mg-tooltip-border-radius);background-color:hsl(var(--mg-tooltip-background-color));color:hsl(var(--mg-tooltip-font-color));text-align:start}.mg-tooltip[data-show]{display:block}.mg-tooltip .mg-tooltip__arrow,.mg-tooltip .mg-tooltip__arrow::before{position:absolute;width:0.8rem;height:0.8rem;z-index:9999;background:inherit}.mg-tooltip .mg-tooltip__arrow{visibility:hidden}.mg-tooltip .mg-tooltip__arrow::before{visibility:visible;content:\"\";transform:rotate(45deg)}.mg-tooltip[data-popper-placement^=top]>.mg-tooltip__arrow{bottom:-4px}.mg-tooltip[data-popper-placement^=bottom]>.mg-tooltip__arrow{top:-4px}.mg-tooltip[data-popper-placement^=left]>.mg-tooltip__arrow{right:-4px}.mg-tooltip[data-popper-placement^=right]>.mg-tooltip__arrow{left:-4px}";
12
+ const mgTooltipCss = ":host{display:inline-block}.mg-tooltip{display:none;padding:0.5rem 0.8rem;z-index:1000;border-radius:var(--mg-tooltip-border-radius);background-color:hsl(var(--mg-tooltip-background-color));color:hsl(var(--mg-tooltip-font-color));text-align:start}.mg-tooltip[data-show]{display:block}.mg-tooltip .mg-tooltip__arrow,.mg-tooltip .mg-tooltip__arrow::before{position:absolute;width:0.8rem;height:0.8rem;z-index:9999;background:inherit}.mg-tooltip .mg-tooltip__arrow{visibility:hidden}.mg-tooltip .mg-tooltip__arrow::before{visibility:visible;content:\"\";transform:rotate(45deg)}.mg-tooltip[data-popper-placement^=top]>.mg-tooltip__arrow{bottom:-4px}.mg-tooltip[data-popper-placement^=bottom]>.mg-tooltip__arrow{top:-4px}.mg-tooltip[data-popper-placement^=left]>.mg-tooltip__arrow{right:-4px}.mg-tooltip[data-popper-placement^=right]>.mg-tooltip__arrow{left:-4px}";
16
13
 
17
14
  const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
18
15
  constructor() {
@@ -151,6 +148,7 @@ const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
151
148
  // Create popperjs tooltip
152
149
  this.popper = createPopper(tooltipedElement, this.tooltip, {
153
150
  placement: this.placement,
151
+ strategy: 'fixed',
154
152
  modifiers: [
155
153
  {
156
154
  name: 'offset',