@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.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{mg-action-more_32.cjs.entry.js → mg-action-more_34.cjs.entry.js} +342 -115
- package/dist/cjs/mg-components.cjs.js +1 -1
- package/dist/cjs/mg-item-more.cjs.entry.js +4 -2
- package/dist/collection/assets/icons/index.js +179 -0
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/atoms/mg-icon/mg-icon.js +1 -1
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.css +43 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.js +49 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +0 -43
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +57 -12
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.css +2 -2
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +35 -15
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +1 -1
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +1 -1
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +2 -2
- package/dist/collection/components/molecules/mg-action-more/mg-action-more.js +9 -2
- package/dist/collection/components/molecules/mg-details/mg-details.js +1 -1
- package/dist/collection/components/molecules/mg-form/mg-form.js +21 -8
- package/dist/collection/components/molecules/mg-item-more/mg-item-more.js +4 -2
- package/dist/collection/components/molecules/mg-modal/mg-modal.conf.js +4 -0
- package/dist/collection/components/molecules/mg-modal/mg-modal.js +37 -5
- package/dist/collection/components/molecules/mg-panel/mg-panel.js +1 -1
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.css +135 -0
- package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js +100 -0
- package/dist/collection/components/molecules/mg-popover/mg-popover.css +0 -111
- package/dist/collection/components/molecules/mg-popover/mg-popover.js +42 -43
- package/dist/collection/utils/components.utils.js +8 -7
- package/dist/collection/utils/unit.test.utils.js +6 -5
- package/dist/components/components.utils.js +8 -7
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +2 -0
- package/dist/components/mg-action-more.js +29 -16
- package/dist/components/mg-details.js +1 -1
- package/dist/components/mg-form.js +21 -8
- package/dist/components/mg-icon2.js +77 -17
- package/dist/components/mg-input-checkbox-paginated2.js +18 -12
- package/dist/components/mg-input-checkbox.js +36 -24
- package/dist/components/mg-input-date.js +13 -7
- package/dist/components/mg-input-numeric.js +47 -21
- package/dist/components/mg-input-password.js +13 -7
- package/dist/components/mg-input-radio.js +13 -7
- package/dist/components/mg-input-select2.js +13 -7
- package/dist/components/mg-input-text2.js +15 -9
- package/dist/components/mg-input-textarea.js +15 -9
- package/dist/components/mg-input-toggle.js +12 -6
- package/dist/components/mg-item-more.js +24 -16
- package/dist/components/mg-menu-item2.js +18 -12
- package/dist/components/mg-modal.js +16 -3
- package/dist/components/mg-pagination2.js +16 -10
- package/dist/components/mg-panel.js +21 -15
- package/dist/components/mg-popover-content.d.ts +11 -0
- package/dist/components/mg-popover-content.js +6 -0
- package/dist/components/mg-popover-content2.js +88 -0
- package/dist/components/mg-popover2.js +54 -47
- package/dist/components/mg-tooltip-content.d.ts +11 -0
- package/dist/components/mg-tooltip-content.js +6 -0
- package/dist/components/mg-tooltip-content2.js +41 -0
- package/dist/components/mg-tooltip2.js +64 -15
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{mg-action-more_32.entry.js → mg-action-more_34.entry.js} +341 -116
- package/dist/esm/mg-components.js +1 -1
- package/dist/esm/mg-item-more.entry.js +4 -2
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/p-3286bc46.entry.js +1 -0
- package/dist/mg-components/p-91f4a30d.entry.js +1 -0
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip-content/mg-tooltip-content.d.ts +14 -0
- package/dist/types/components/atoms/mg-tooltip/mg-tooltip.d.ts +7 -1
- package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +19 -0
- package/dist/types/components/molecules/mg-action-more/mg-action-more.d.ts +6 -1
- package/dist/types/components/molecules/mg-form/mg-form.d.ts +8 -0
- package/dist/types/components/molecules/mg-modal/mg-modal.conf.d.ts +8 -0
- package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +8 -2
- package/dist/types/components/molecules/mg-popover/mg-popover-content/mg-popover-content.d.ts +47 -0
- package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +8 -11
- package/dist/types/components.d.ts +59 -0
- package/package.json +18 -18
- package/dist/mg-components/p-4ae1130f.entry.js +0 -1
- package/dist/mg-components/p-aa298e17.entry.js +0 -1
package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.css
ADDED
|
@@ -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
|
+
}
|
package/dist/collection/components/molecules/mg-popover/mg-popover-content/mg-popover-content.js
ADDED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
46
|
+
* Handle content hide event
|
|
53
47
|
*/
|
|
54
|
-
this.
|
|
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.
|
|
80
|
+
this.mgPopoverContent.dataset.arrowHide = '';
|
|
68
81
|
else
|
|
69
|
-
this.
|
|
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
|
-
//
|
|
96
|
-
this.
|
|
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.
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
this.
|
|
135
|
-
|
|
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("
|
|
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
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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.
|
package/dist/components/index.js
CHANGED
|
@@ -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';
|