@mgdis/mg-components 5.14.0 → 5.16.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 (85) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/{mg-action-more_32.cjs.entry.js → mg-action-more_34.cjs.entry.js} +342 -115
  3. package/dist/cjs/mg-components.cjs.js +1 -1
  4. package/dist/cjs/mg-item-more.cjs.entry.js +4 -2
  5. package/dist/collection/assets/icons/index.js +179 -0
  6. package/dist/collection/collection-manifest.json +2 -0
  7. package/dist/collection/components/atoms/mg-icon/mg-icon.js +1 -1
  8. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.css +43 -0
  9. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +49 -0
  10. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +0 -43
  11. package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +57 -12
  12. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.css +2 -2
  13. package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +1 -1
  14. package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +1 -1
  15. package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +35 -15
  16. package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +1 -1
  17. package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +1 -1
  18. package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +1 -1
  19. package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +1 -1
  20. package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +1 -1
  21. package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +2 -2
  22. package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +9 -2
  23. package/dist/collection/components/molecules/mg-details/mg-details.js +1 -1
  24. package/dist/collection/components/molecules/mg-form/mg-form.js +21 -8
  25. package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +4 -2
  26. package/dist/collection/components/molecules/mg-modal/mg-modal.conf.js +4 -0
  27. package/dist/collection/components/molecules/mg-modal/mg-modal.js +37 -5
  28. package/dist/collection/components/molecules/mg-panel/mg-panel.js +1 -1
  29. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.css +135 -0
  30. package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +100 -0
  31. package/dist/collection/components/molecules/mg-popover/mg-popover.css +0 -111
  32. package/dist/collection/components/molecules/mg-popover/mg-popover.js +42 -43
  33. package/dist/collection/utils/components.utils.js +8 -7
  34. package/dist/collection/utils/unit.test.utils.js +6 -5
  35. package/dist/components/components.utils.js +8 -7
  36. package/dist/components/index.d.ts +2 -0
  37. package/dist/components/index.js +2 -0
  38. package/dist/components/mg-action-more.js +29 -16
  39. package/dist/components/mg-details.js +1 -1
  40. package/dist/components/mg-form.js +21 -8
  41. package/dist/components/mg-icon2.js +77 -17
  42. package/dist/components/mg-input-checkbox-paginated2.js +18 -12
  43. package/dist/components/mg-input-checkbox.js +36 -24
  44. package/dist/components/mg-input-date.js +13 -7
  45. package/dist/components/mg-input-numeric.js +47 -21
  46. package/dist/components/mg-input-password.js +13 -7
  47. package/dist/components/mg-input-radio.js +13 -7
  48. package/dist/components/mg-input-select2.js +13 -7
  49. package/dist/components/mg-input-text2.js +15 -9
  50. package/dist/components/mg-input-textarea.js +15 -9
  51. package/dist/components/mg-input-toggle.js +12 -6
  52. package/dist/components/mg-item-more.js +24 -16
  53. package/dist/components/mg-menu-item2.js +18 -12
  54. package/dist/components/mg-modal.js +16 -3
  55. package/dist/components/mg-pagination2.js +16 -10
  56. package/dist/components/mg-panel.js +21 -15
  57. package/dist/components/mg-popover-content.d.ts +11 -0
  58. package/dist/components/mg-popover-content.js +6 -0
  59. package/dist/components/mg-popover-content2.js +88 -0
  60. package/dist/components/mg-popover2.js +54 -47
  61. package/dist/components/mg-tooltip-content.d.ts +11 -0
  62. package/dist/components/mg-tooltip-content.js +6 -0
  63. package/dist/components/mg-tooltip-content2.js +41 -0
  64. package/dist/components/mg-tooltip2.js +64 -15
  65. package/dist/esm/loader.js +1 -1
  66. package/dist/esm/{mg-action-more_32.entry.js → mg-action-more_34.entry.js} +341 -116
  67. package/dist/esm/mg-components.js +1 -1
  68. package/dist/esm/mg-item-more.entry.js +4 -2
  69. package/dist/mg-components/mg-components.css +1 -1
  70. package/dist/mg-components/mg-components.esm.js +1 -1
  71. package/dist/mg-components/p-3286bc46.entry.js +1 -0
  72. package/dist/mg-components/p-91f4a30d.entry.js +1 -0
  73. package/dist/types/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.d.ts +14 -0
  74. package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +7 -1
  75. package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +19 -0
  76. package/dist/types/components/molecules/mg-action-more/mg-action-more.d.ts +6 -1
  77. package/dist/types/components/molecules/mg-form/mg-form.d.ts +8 -0
  78. package/dist/types/components/molecules/mg-modal/mg-modal.conf.d.ts +8 -0
  79. package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +8 -2
  80. package/dist/types/components/molecules/mg-popover/mg-popover-content/mg-popover-content.d.ts +47 -0
  81. package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +8 -11
  82. package/dist/types/components.d.ts +59 -0
  83. package/package.json +18 -18
  84. package/dist/mg-components/p-4ae1130f.entry.js +0 -1
  85. package/dist/mg-components/p-aa298e17.entry.js +0 -1
@@ -0,0 +1,135 @@
1
+ :host {
2
+ display: none;
3
+ padding: 1rem;
4
+ z-index: 2000;
5
+ color: hsl(var(--mg-popover-font-color));
6
+ position: relative;
7
+ }
8
+
9
+ :host([data-show]) {
10
+ display: block;
11
+ }
12
+
13
+ :host([data-popper-placement^=left-start]),
14
+ :host([data-popper-placement^=left-end]),
15
+ :host([data-popper-placement^=right-start]),
16
+ :host([data-popper-placement^=right-end]) {
17
+ padding: 0 1rem;
18
+ }
19
+
20
+ .mg-popover-content {
21
+ --mg-card-max-width: var(--mg-popover-max-width);
22
+ --mg-card-min-width: var(--mg-popover-min-width);
23
+ }
24
+ .mg-popover-content mg-button {
25
+ float: right;
26
+ margin-right: calc(0rem - (var(--default-size) - var(--mg-icon-regular-size)) / 2);
27
+ margin-top: calc(0rem - (var(--default-size) - var(--mg-popover-title-font-size) * var(--line-height)) / 2);
28
+ margin-left: 3rem;
29
+ }
30
+ .mg-popover-content__title ::slotted([slot=title]) {
31
+ margin: 0 0 1rem !important;
32
+ font-size: var(--mg-popover-title-font-size) !important;
33
+ font-weight: 600;
34
+ }
35
+ .mg-popover-content ::slotted(*) {
36
+ --mg-card-border: var(--mg-card-border-default);
37
+ --mg-card-padding: var(--mg-card-padding-default);
38
+ --mg-card-border-radius: var(--mg-card-border-radius-default);
39
+ --mg-card-background: var(--mg-card-background-default);
40
+ --mg-card-box-shadow: var(--mg-card-box-shadow-default);
41
+ --mg-card-max-width: unset;
42
+ --mg-card-min-width: unset;
43
+ }
44
+
45
+ /**
46
+ * Arrow hide
47
+ */
48
+ :host([data-popper-placement^=top][data-arrow-hide]) {
49
+ padding-bottom: 0;
50
+ }
51
+
52
+ :host([data-popper-placement^=bottom][data-arrow-hide]) {
53
+ padding-top: 0;
54
+ }
55
+
56
+ :host([data-popper-placement$=end][data-arrow-hide]),
57
+ :host([data-popper-placement^=left][data-arrow-hide]) {
58
+ padding-right: 0;
59
+ }
60
+
61
+ :host([data-popper-placement$=start][data-arrow-hide]),
62
+ :host([data-popper-placement^=right][data-arrow-hide]) {
63
+ padding-left: 0;
64
+ }
65
+
66
+ /**
67
+ * Arrow style
68
+ */
69
+ ::slotted([slot=arrow]) {
70
+ position: absolute;
71
+ visibility: hidden;
72
+ width: calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);
73
+ height: calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);
74
+ /**
75
+ * Arrow position
76
+ */
77
+ }
78
+ ::slotted([slot=arrow]):before {
79
+ visibility: visible;
80
+ content: "";
81
+ position: absolute;
82
+ }
83
+ :host([data-arrow-hide]) ::slotted([slot=arrow]) {
84
+ display: none;
85
+ }
86
+ :host([data-popper-placement^=top]) ::slotted([slot=arrow]), :host([data-popper-placement^=bottom]) ::slotted([slot=arrow]) {
87
+ height: 1rem;
88
+ }
89
+ :host([data-popper-placement^=top]) ::slotted([slot=arrow]):before, :host([data-popper-placement^=bottom]) ::slotted([slot=arrow]):before {
90
+ left: calc(var(--mg-card-border-radius) + 1rem);
91
+ border-right: calc(3rem / 2) solid transparent;
92
+ border-left: calc(3rem / 2) solid transparent;
93
+ }
94
+ :host([data-popper-placement^=top]) ::slotted([slot=arrow]) {
95
+ bottom: 0.1rem;
96
+ filter: drop-shadow(0 0.5rem 0.25rem hsl(var(--color-dark), 0.15));
97
+ }
98
+ :host([data-popper-placement^=top]) ::slotted([slot=arrow]):before {
99
+ border-top: 1rem solid hsl(var(--mg-popover-background-color));
100
+ }
101
+ :host([data-popper-placement^=bottom]) ::slotted([slot=arrow]) {
102
+ top: 0.1rem;
103
+ filter: drop-shadow(0 -0.5rem 0.25rem hsl(var(--color-dark), 0.15));
104
+ }
105
+ :host([data-popper-placement^=bottom]) ::slotted([slot=arrow]):before {
106
+ border-bottom: 1rem solid hsl(var(--mg-popover-background-color));
107
+ }
108
+ :host([data-popper-placement^=left]) ::slotted([slot=arrow]), :host([data-popper-placement^=right]) ::slotted([slot=arrow]) {
109
+ width: 1rem;
110
+ }
111
+ :host([data-popper-placement^=left]) ::slotted([slot=arrow]):before, :host([data-popper-placement^=right]) ::slotted([slot=arrow]):before {
112
+ top: calc(var(--mg-card-border-radius) + 1rem);
113
+ border-top: calc(3rem / 2) solid transparent;
114
+ border-bottom: calc(3rem / 2) solid transparent;
115
+ }
116
+ :host([data-popper-placement^=left]) ::slotted([slot=arrow]) {
117
+ right: 0.1rem;
118
+ filter: drop-shadow(0.5rem 0 0.25rem hsl(var(--color-dark), 0.15));
119
+ }
120
+ :host([data-popper-placement^=left]) ::slotted([slot=arrow]):before {
121
+ border-left: 1rem solid hsl(var(--mg-popover-background-color));
122
+ }
123
+ :host([data-popper-placement^=right]) ::slotted([slot=arrow]) {
124
+ left: 0.1rem;
125
+ filter: drop-shadow(-0.5rem 0 0.25rem hsl(var(--color-dark), 0.15));
126
+ }
127
+ :host([data-popper-placement^=right]) ::slotted([slot=arrow]):before {
128
+ border-right: 1rem solid hsl(var(--mg-popover-background-color));
129
+ }
130
+ :host([data-popper-placement^=left-start]) ::slotted([slot=arrow]), :host([data-popper-placement^=left-end]) ::slotted([slot=arrow]), :host([data-popper-placement^=right-start]) ::slotted([slot=arrow]), :host([data-popper-placement^=right-end]) ::slotted([slot=arrow]) {
131
+ height: calc(3rem + 2 * var(--mg-card-border-radius));
132
+ }
133
+ :host([data-popper-placement^=left-start]) ::slotted([slot=arrow]):before, :host([data-popper-placement^=left-end]) ::slotted([slot=arrow]):before, :host([data-popper-placement^=right-start]) ::slotted([slot=arrow]):before, :host([data-popper-placement^=right-end]) ::slotted([slot=arrow]):before {
134
+ top: var(--mg-card-border-radius);
135
+ }
@@ -0,0 +1,100 @@
1
+ import { Host, h } from '@stencil/core';
2
+ import { isTagName, ClassList } from '../../../../utils/components.utils';
3
+ import { initLocales } from '../../../../locales';
4
+ export class MgPopoverContent {
5
+ constructor() {
6
+ /**
7
+ * Handle action for close button
8
+ */
9
+ this.handleCloseButton = () => {
10
+ this.hideContent.emit();
11
+ };
12
+ this.closeButton = false;
13
+ this.classCollection = new ClassList(['mg-popover-content']);
14
+ }
15
+ /*************
16
+ * Lifecycle *
17
+ *************/
18
+ /**
19
+ * Check if component props are valide
20
+ */
21
+ componentWillLoad() {
22
+ // Get locales
23
+ this.messages = initLocales(this.element).messages;
24
+ }
25
+ /**
26
+ * Check if component slots are valide
27
+ */
28
+ componentDidLoad() {
29
+ const headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
30
+ const slottedTitleElement = this.element.querySelector('[slot="title"]');
31
+ if (slottedTitleElement && !isTagName(slottedTitleElement, headingTags)) {
32
+ throw new Error(`<mg-popover> Slotted title must be a heading: ${headingTags.join(', ')}`);
33
+ }
34
+ }
35
+ /**
36
+ * Render
37
+ * @returns HTML Element
38
+ */
39
+ render() {
40
+ return (h(Host, null, h("mg-card", { class: this.classCollection.join() }, this.closeButton && (h("mg-button", { "is-icon": true, variant: "flat", label: this.messages.general.close, onClick: this.handleCloseButton }, h("mg-icon", { icon: "cross" }))), h("div", { class: "mg-popover-content__title" }, h("slot", { name: "title" })), h("slot", { name: "content" })), h("slot", { name: "arrow" })));
41
+ }
42
+ static get is() { return "mg-popover-content"; }
43
+ static get encapsulation() { return "shadow"; }
44
+ static get originalStyleUrls() {
45
+ return {
46
+ "$": ["mg-popover-content.scss"]
47
+ };
48
+ }
49
+ static get styleUrls() {
50
+ return {
51
+ "$": ["mg-popover-content.css"]
52
+ };
53
+ }
54
+ static get properties() {
55
+ return {
56
+ "closeButton": {
57
+ "type": "boolean",
58
+ "mutable": false,
59
+ "complexType": {
60
+ "original": "boolean",
61
+ "resolved": "boolean",
62
+ "references": {}
63
+ },
64
+ "required": false,
65
+ "optional": false,
66
+ "docs": {
67
+ "tags": [],
68
+ "text": "Define if popover has a cross button"
69
+ },
70
+ "attribute": "close-button",
71
+ "reflect": false,
72
+ "defaultValue": "false"
73
+ }
74
+ };
75
+ }
76
+ static get states() {
77
+ return {
78
+ "classCollection": {}
79
+ };
80
+ }
81
+ static get events() {
82
+ return [{
83
+ "method": "hideContent",
84
+ "name": "hide-content",
85
+ "bubbles": true,
86
+ "cancelable": true,
87
+ "composed": true,
88
+ "docs": {
89
+ "tags": [],
90
+ "text": "Emited event when close button is clicked"
91
+ },
92
+ "complexType": {
93
+ "original": "string",
94
+ "resolved": "string",
95
+ "references": {}
96
+ }
97
+ }];
98
+ }
99
+ static get elementRef() { return "element"; }
100
+ }
@@ -8,115 +8,4 @@
8
8
  }
9
9
  :host::slotted(*) {
10
10
  display: inline-block;
11
- }
12
-
13
- .mg-popover {
14
- display: none;
15
- padding: 1rem;
16
- z-index: 2000;
17
- color: hsl(var(--mg-popover-font-color));
18
- }
19
- .mg-popover mg-card {
20
- --mg-card-max-width: var(--mg-popover-max-width);
21
- --mg-card-min-width: var(--mg-popover-min-width);
22
- position: relative;
23
- }
24
- .mg-popover[data-show] {
25
- display: block;
26
- }
27
- .mg-popover mg-button {
28
- float: right;
29
- margin-right: calc(0rem - (var(--default-size) - var(--mg-icon-regular-size)) / 2);
30
- margin-top: calc(0rem - (var(--default-size) - var(--mg-popover-title-font-size) * var(--line-height)) / 2);
31
- margin-left: 3rem;
32
- }
33
- .mg-popover__arrow {
34
- position: absolute;
35
- visibility: hidden;
36
- width: calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);
37
- height: calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);
38
- }
39
- .mg-popover__arrow:before {
40
- visibility: visible;
41
- content: "";
42
- position: absolute;
43
- }
44
- .mg-popover[data-popper-placement^=top] > .mg-popover__arrow, .mg-popover[data-popper-placement^=bottom] > .mg-popover__arrow {
45
- height: 1rem;
46
- }
47
- .mg-popover[data-popper-placement^=top] > .mg-popover__arrow:before, .mg-popover[data-popper-placement^=bottom] > .mg-popover__arrow:before {
48
- left: calc(var(--mg-card-border-radius) + 1rem);
49
- border-right: calc(3rem / 2) solid transparent;
50
- border-left: calc(3rem / 2) solid transparent;
51
- }
52
- .mg-popover[data-popper-placement^=top] > .mg-popover__arrow {
53
- bottom: 0.1rem;
54
- filter: drop-shadow(0 0.5rem 0.25rem hsl(var(--color-dark), 0.15));
55
- }
56
- .mg-popover[data-popper-placement^=top] > .mg-popover__arrow:before {
57
- border-top: 1rem solid hsl(var(--mg-popover-background-color));
58
- }
59
- .mg-popover[data-popper-placement^=bottom] > .mg-popover__arrow {
60
- top: 0.1rem;
61
- filter: drop-shadow(0 -0.5rem 0.25rem hsl(var(--color-dark), 0.15));
62
- }
63
- .mg-popover[data-popper-placement^=bottom] > .mg-popover__arrow:before {
64
- border-bottom: 1rem solid hsl(var(--mg-popover-background-color));
65
- }
66
- .mg-popover[data-popper-placement^=left] > .mg-popover__arrow, .mg-popover[data-popper-placement^=right] > .mg-popover__arrow {
67
- width: 1rem;
68
- }
69
- .mg-popover[data-popper-placement^=left] > .mg-popover__arrow:before, .mg-popover[data-popper-placement^=right] > .mg-popover__arrow:before {
70
- top: calc(var(--mg-card-border-radius) + 1rem);
71
- border-top: calc(3rem / 2) solid transparent;
72
- border-bottom: calc(3rem / 2) solid transparent;
73
- }
74
- .mg-popover[data-popper-placement^=left] > .mg-popover__arrow {
75
- right: 0.1rem;
76
- filter: drop-shadow(0.5rem 0 0.25rem hsl(var(--color-dark), 0.15));
77
- }
78
- .mg-popover[data-popper-placement^=left] > .mg-popover__arrow:before {
79
- border-left: 1rem solid hsl(var(--mg-popover-background-color));
80
- }
81
- .mg-popover[data-popper-placement^=right] > .mg-popover__arrow {
82
- left: 0.1rem;
83
- filter: drop-shadow(-0.5rem 0 0.25rem hsl(var(--color-dark), 0.15));
84
- }
85
- .mg-popover[data-popper-placement^=right] > .mg-popover__arrow:before {
86
- border-right: 1rem solid hsl(var(--mg-popover-background-color));
87
- }
88
- .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] {
89
- padding: 0 1rem;
90
- }
91
- .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 {
92
- height: calc(3rem + 2 * var(--mg-card-border-radius));
93
- }
94
- .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 {
95
- top: var(--mg-card-border-radius);
96
- }
97
- .mg-popover__title ::slotted([slot=title]) {
98
- margin: 0 0 1rem !important;
99
- font-size: var(--mg-popover-title-font-size) !important;
100
- font-weight: 600;
101
- }
102
- .mg-popover--arrow-hide.mg-popover[data-popper-placement^=top] {
103
- padding-bottom: 0;
104
- }
105
- .mg-popover--arrow-hide.mg-popover[data-popper-placement^=bottom] {
106
- padding-top: 0;
107
- }
108
- .mg-popover--arrow-hide.mg-popover[data-popper-placement$=end], .mg-popover--arrow-hide.mg-popover[data-popper-placement^=left] {
109
- padding-right: 0;
110
- }
111
- .mg-popover--arrow-hide.mg-popover[data-popper-placement$=start], .mg-popover--arrow-hide.mg-popover[data-popper-placement^=right] {
112
- padding-left: 0;
113
- }
114
- .mg-popover ::slotted(*) {
115
- --mg-card-border: var(--mg-card-border-default);
116
- --mg-card-padding: var(--mg-card-padding-default);
117
- --mg-card-border-radius: var(--mg-card-border-radius-default);
118
- --mg-card-background: var(--mg-card-background-default);
119
- --mg-card-box-shadow: var(--mg-card-box-shadow-default);
120
- --mg-card-max-width: unset;
121
- --mg-card-min-width: unset;
122
11
  }
@@ -1,21 +1,15 @@
1
1
  import { Host, h } from '@stencil/core';
2
- import { createID, isTagName, getWindows, ClassList } from '../../../utils/components.utils';
2
+ import { createID, getWindows } from '../../../utils/components.utils';
3
3
  import { createPopper } from '@popperjs/core';
4
- import { initLocales } from '../../../locales';
5
4
  export class MgPopover {
6
5
  constructor() {
7
- this.closeButtonId = '';
8
- // Classes
9
- this.classArrowHide = `mg-popover--arrow-hide`;
10
6
  /**
11
7
  * Check if clicked outside of component
12
8
  * @param event - mouse event
13
9
  */
14
10
  this.clickOutside = (event) => {
15
- var _a;
16
- if (!this.disabled &&
17
- event.target.closest('mg-popover') !== this.element &&
18
- !(((_a = event.target.closest(`[data-mg-popover-guard]`)) === null || _a === void 0 ? void 0 : _a.dataset.mgPopoverGuard) === this.identifier)) {
11
+ const closestElement = event.target.closest(`[data-mg-popover-guard]`);
12
+ if (!this.disabled && event.target.closest('mg-popover') !== this.element && (closestElement === null || closestElement === void 0 ? void 0 : closestElement.dataset.mgPopoverGuard) !== this.identifier) {
19
13
  this.display = false;
20
14
  }
21
15
  };
@@ -49,24 +43,46 @@ export class MgPopover {
49
43
  });
50
44
  };
51
45
  /**
52
- * Handle action for close button
46
+ * Handle content hide event
53
47
  */
54
- this.handleCloseButton = () => {
48
+ this.handleHideContent = () => {
55
49
  this.display = false;
56
50
  };
51
+ /**
52
+ * Render popover content element
53
+ */
54
+ this.renderPopoverContent = () => {
55
+ this.mgPopoverContent = document.createElement('mg-popover-content');
56
+ this.mgPopoverContent.setAttribute('slot', 'content');
57
+ this.mgPopoverContent.setAttribute('id', this.identifier);
58
+ this.mgPopoverContent.addEventListener('hide-content', this.handleHideContent);
59
+ const arrow = document.createElement('div');
60
+ arrow.setAttribute('slot', 'arrow');
61
+ arrow.dataset.popperArrow = '';
62
+ this.mgPopoverContent.appendChild(arrow);
63
+ // insert elements in DOM
64
+ ['[slot="title"]', '[slot="content"]:not(mg-popover-content)'].forEach(slotType => {
65
+ Array.from(this.element.querySelectorAll(slotType)).forEach(slot => {
66
+ this.mgPopoverContent.appendChild(slot);
67
+ });
68
+ });
69
+ this.element.appendChild(this.mgPopoverContent);
70
+ };
57
71
  this.identifier = createID('mg-popover');
58
72
  this.placement = 'bottom';
59
73
  this.arrowHide = false;
60
74
  this.closeButton = false;
61
75
  this.display = false;
62
76
  this.disabled = false;
63
- this.classCollection = new ClassList(['mg-popover']);
64
77
  }
65
78
  validateArrowHide(newValue) {
66
79
  if (newValue)
67
- this.classCollection.add(this.classArrowHide);
80
+ this.mgPopoverContent.dataset.arrowHide = '';
68
81
  else
69
- this.classCollection.delete(this.classArrowHide);
82
+ delete this.mgPopoverContent.dataset.arrowHide;
83
+ }
84
+ validateCloseButton(newValue) {
85
+ this.mgPopoverContent.closeButton = newValue;
70
86
  }
71
87
  handleDisplay(newValue) {
72
88
  if (newValue) {
@@ -92,25 +108,17 @@ export class MgPopover {
92
108
  componentWillLoad() {
93
109
  // Get windows to attach events
94
110
  this.windows = getWindows(window);
95
- // Get locales
96
- this.messages = initLocales(this.element).messages;
111
+ // render mg-popover-content slot
112
+ this.renderPopoverContent();
113
+ this.validateCloseButton(this.closeButton);
97
114
  this.validateArrowHide(this.arrowHide);
98
115
  }
99
116
  /**
100
117
  * Check if component props are well configured on init
101
118
  */
102
119
  componentDidLoad() {
103
- const headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
104
- const slottedTitleElement = this.element.querySelector('[slot="title"]');
105
- if (slottedTitleElement && !isTagName(slottedTitleElement, headingTags)) {
106
- throw new Error(`<mg-popover> Slotted title must be a heading: ${headingTags.join(', ')}`);
107
- }
108
- // Set close button id
109
- if (this.closeButton) {
110
- this.closeButtonId = `${this.identifier}-close-button`;
111
- }
112
120
  // Get popover content
113
- this.mgPopover = this.element.shadowRoot.getElementById(this.identifier);
121
+ this.mgPopover = this.element.querySelector(`#${this.identifier}`);
114
122
  //Get interactive element (first element without slot attribute)
115
123
  const interactiveElement = this.element.querySelector(':not([slot])');
116
124
  // Add aria attributes
@@ -129,17 +137,10 @@ export class MgPopover {
129
137
  },
130
138
  ],
131
139
  });
132
- if (this.resizeObserver === undefined) {
133
- // add resize observer
134
- this.resizeObserver = new ResizeObserver(entries => {
135
- if (entries.some(entrie => entrie.target.getAttribute('slot') !== null)) {
136
- this.popper.update();
137
- }
138
- });
139
- Array.from(this.element.querySelectorAll('[slot]')).forEach(element => {
140
- this.resizeObserver.observe(element);
141
- });
142
- }
140
+ // add resize observer
141
+ new ResizeObserver(() => {
142
+ this.popper.update();
143
+ }).observe(this.element.querySelector('mg-popover-content'));
143
144
  // Add events to toggle display
144
145
  interactiveElement.addEventListener('click', () => {
145
146
  if (!this.disabled)
@@ -159,7 +160,7 @@ export class MgPopover {
159
160
  * @returns HTML Element
160
161
  */
161
162
  render() {
162
- return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: this.classCollection.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 }))));
163
+ return (h(Host, null, h("slot", null), h("slot", { name: "content" })));
163
164
  }
164
165
  static get is() { return "mg-popover"; }
165
166
  static get encapsulation() { return "shadow"; }
@@ -290,11 +291,6 @@ export class MgPopover {
290
291
  }
291
292
  };
292
293
  }
293
- static get states() {
294
- return {
295
- "classCollection": {}
296
- };
297
- }
298
294
  static get events() {
299
295
  return [{
300
296
  "method": "displayChange",
@@ -318,6 +314,9 @@ export class MgPopover {
318
314
  return [{
319
315
  "propName": "arrowHide",
320
316
  "methodName": "validateArrowHide"
317
+ }, {
318
+ "propName": "closeButton",
319
+ "methodName": "validateCloseButton"
321
320
  }, {
322
321
  "propName": "display",
323
322
  "methodName": "handleDisplay"
@@ -5,11 +5,15 @@
5
5
  * @returns ID
6
6
  */
7
7
  export const createID = (prefix = '', length = 10) => {
8
- let ID = '';
9
8
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
10
9
  const charsLength = chars.length;
11
- for (let i = 0; i < length; i++) {
12
- ID += chars.charAt(Math.floor(Math.random() * charsLength));
10
+ let ID = '';
11
+ let now = Date.now();
12
+ while (length > 0) {
13
+ now += Math.pow(10, 6); // Add 1 millisecond to the timestamp
14
+ const index = now % charsLength;
15
+ ID += chars.charAt(index);
16
+ length--;
13
17
  }
14
18
  return (prefix !== '' ? `${prefix}-` : '') + ID;
15
19
  };
@@ -115,10 +119,7 @@ export const getParentWindows = (localWindow, windows = []) => {
115
119
  */
116
120
  const getChildWindows = (localWindow, windows = []) => {
117
121
  if (localWindow.frames.length > 0) {
118
- // Window.frames is an array-like object, needs a classic for loop
119
- // https://developer.mozilla.org/en-US/docs/Web/API/Window/frames
120
- for (let i = 0; i < localWindow.frames.length; i++) {
121
- const childWindow = localWindow.frames[i];
122
+ for (const childWindow of Array.from(localWindow.frames)) {
122
123
  windows.push(childWindow);
123
124
  getChildWindows(childWindow, windows);
124
125
  }
@@ -99,7 +99,7 @@ export const setupSubmitEventMock = () => {
99
99
  export const forcePopoverId = (component, id, interactiveElement = 'button') => {
100
100
  const popover = component.shadowRoot.querySelector('mg-popover');
101
101
  if (popover !== null) {
102
- popover.shadowRoot.querySelector('.mg-popover').setAttribute('id', id);
102
+ popover.querySelector('mg-popover-content').setAttribute('id', id);
103
103
  component.shadowRoot.querySelector(interactiveElement).setAttribute('aria-controls', id);
104
104
  }
105
105
  };
@@ -111,10 +111,11 @@ export const forcePopoverId = (component, id, interactiveElement = 'button') =>
111
111
  * so we only override the console.error side effect for this error
112
112
  */
113
113
  export const mockConsoleError = () => {
114
- jest.spyOn(console, 'error').mockImplementation(error => {
115
- const compareWith = 'Popper: "arrow" element must be an HTMLElement (not an SVGElement). To use an SVG arrow, wrap it in an HTMLElement that will be used as the arrow.';
116
- if (error !== compareWith)
117
- console.log(error);
114
+ const errorFunction = console.error;
115
+ const mock = jest.spyOn(console, 'error');
116
+ mock.mockImplementation(error => {
117
+ if (!error.includes('Popper'))
118
+ errorFunction(error);
118
119
  });
119
120
  };
120
121
  /**
@@ -5,11 +5,15 @@
5
5
  * @returns ID
6
6
  */
7
7
  const createID = (prefix = '', length = 10) => {
8
- let ID = '';
9
8
  const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
10
9
  const charsLength = chars.length;
11
- for (let i = 0; i < length; i++) {
12
- ID += chars.charAt(Math.floor(Math.random() * charsLength));
10
+ let ID = '';
11
+ let now = Date.now();
12
+ while (length > 0) {
13
+ now += Math.pow(10, 6); // Add 1 millisecond to the timestamp
14
+ const index = now % charsLength;
15
+ ID += chars.charAt(index);
16
+ length--;
13
17
  }
14
18
  return (prefix !== '' ? `${prefix}-` : '') + ID;
15
19
  };
@@ -115,10 +119,7 @@ const getParentWindows = (localWindow, windows = []) => {
115
119
  */
116
120
  const getChildWindows = (localWindow, windows = []) => {
117
121
  if (localWindow.frames.length > 0) {
118
- // Window.frames is an array-like object, needs a classic for loop
119
- // https://developer.mozilla.org/en-US/docs/Web/API/Window/frames
120
- for (let i = 0; i < localWindow.frames.length; i++) {
121
- const childWindow = localWindow.frames[i];
122
+ for (const childWindow of Array.from(localWindow.frames)) {
122
123
  windows.push(childWindow);
123
124
  getChildWindows(childWindow, windows);
124
125
  }
@@ -28,10 +28,12 @@ export { MgModal as MgModal } from '../types/components/molecules/mg-modal/mg-mo
28
28
  export { MgPagination as MgPagination } from '../types/components/molecules/mg-pagination/mg-pagination';
29
29
  export { MgPanel as MgPanel } from '../types/components/molecules/mg-panel/mg-panel';
30
30
  export { MgPopover as MgPopover } from '../types/components/molecules/mg-popover/mg-popover';
31
+ export { MgPopoverContent as MgPopoverContent } from '../types/components/molecules/mg-popover/mg-popover-content/mg-popover-content';
31
32
  export { MgSkipLinks as MgSkipLinks } from '../types/components/molecules/mg-skip-links/mg-skip-links';
32
33
  export { MgTabs as MgTabs } from '../types/components/molecules/mg-tabs/mg-tabs';
33
34
  export { MgTag as MgTag } from '../types/components/atoms/mg-tag/mg-tag';
34
35
  export { MgTooltip as MgTooltip } from '../types/components/atoms/mg-tooltip/mg-tooltip';
36
+ export { MgTooltipContent as MgTooltipContent } from '../types/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content';
35
37
 
36
38
  /**
37
39
  * Used to manually set the base path where assets can be found.
@@ -28,7 +28,9 @@ export { MgModal, defineCustomElement as defineCustomElementMgModal } from './mg
28
28
  export { MgPagination, defineCustomElement as defineCustomElementMgPagination } from './mg-pagination.js';
29
29
  export { MgPanel, defineCustomElement as defineCustomElementMgPanel } from './mg-panel.js';
30
30
  export { MgPopover, defineCustomElement as defineCustomElementMgPopover } from './mg-popover.js';
31
+ export { MgPopoverContent, defineCustomElement as defineCustomElementMgPopoverContent } from './mg-popover-content.js';
31
32
  export { MgSkipLinks, defineCustomElement as defineCustomElementMgSkipLinks } from './mg-skip-links.js';
32
33
  export { MgTabs, defineCustomElement as defineCustomElementMgTabs } from './mg-tabs.js';
33
34
  export { MgTag, defineCustomElement as defineCustomElementMgTag } from './mg-tag.js';
34
35
  export { MgTooltip, defineCustomElement as defineCustomElementMgTooltip } from './mg-tooltip.js';
36
+ export { MgTooltipContent, defineCustomElement as defineCustomElementMgTooltipContent } from './mg-tooltip-content.js';