@mgdis/mg-components 5.5.0 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{index-c3450336.js → index-4dcc1812.js} +11 -1
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/mg-badge_30.cjs.entry.js +742 -244
- package/dist/cjs/mg-components.cjs.js +3 -3
- package/dist/collection/collection-manifest.json +4 -4
- package/dist/collection/components/atoms/mg-badge/mg-badge.conf.js +1 -1
- package/dist/collection/components/atoms/mg-badge/mg-badge.css +13 -0
- package/dist/collection/components/atoms/mg-badge/mg-badge.js +3 -3
- package/dist/collection/components/atoms/mg-button/mg-button.css +2 -1
- package/dist/collection/components/atoms/mg-card/mg-card.css +13 -6
- package/dist/collection/components/atoms/mg-icon/mg-icon.conf.js +13 -3
- package/dist/collection/components/atoms/mg-tag/mg-tag.css +6 -6
- package/dist/collection/components/atoms/mg-tag/mg-tag.js +3 -3
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.css +2 -0
- package/dist/collection/components/atoms/mg-tooltip/mg-tooltip.js +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.css +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +4 -1
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +7 -3
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +3 -3
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +3 -3
- package/dist/collection/components/molecules/menu/mg-menu/doc/mg-menu.stories.js +43 -11
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.conf.js +17 -0
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.css +27 -0
- package/dist/collection/components/molecules/menu/mg-menu/mg-menu.js +141 -18
- package/dist/collection/components/molecules/menu/mg-menu-item/doc/mg-menu-item.stories.js +5 -10
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.conf.js +0 -4
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.css +47 -21
- package/dist/collection/components/molecules/menu/mg-menu-item/mg-menu-item.js +118 -70
- package/dist/collection/components/molecules/mg-illustrated-message/mg-illustrated-message.js +4 -3
- package/dist/collection/components/molecules/mg-message/mg-message.css +7 -0
- package/dist/collection/components/molecules/mg-message/mg-message.js +53 -12
- package/dist/collection/components/molecules/mg-modal/mg-modal.css +8 -1
- package/dist/collection/components/molecules/mg-panel/mg-panel.css +7 -0
- package/dist/collection/components/molecules/mg-popover/mg-popover.css +72 -14
- package/dist/collection/components/molecules/mg-popover/mg-popover.js +48 -4
- package/dist/collection/components/molecules/mg-skip-links/doc/mg-skip-links.stories.js +1 -1
- package/dist/collection/components/molecules/mg-skip-links/mg-skip-links.js +32 -1
- package/dist/collection/components/molecules/mg-tabs/doc/mg-tabs.stories.js +5 -3
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.css +11 -7
- package/dist/collection/components/molecules/mg-tabs/mg-tabs.js +101 -54
- package/dist/collection/locales/en/messages.json +4 -0
- package/dist/collection/locales/fr/messages.json +4 -0
- package/dist/collection/locales/index.js +2 -25
- package/dist/collection/styles/a11y.scss +32 -0
- package/dist/collection/styles/components.scss +3 -0
- package/dist/collection/styles/fonts.scss +21 -0
- package/dist/collection/styles/form.scss +3 -0
- package/dist/collection/styles/global.scss +87 -0
- package/dist/collection/styles/layout.scss +29 -0
- package/dist/collection/styles/main.scss +23 -0
- package/dist/collection/styles/navigation-button.scss +76 -0
- package/dist/collection/styles/reset-mg-card-slotted-variables.scss +9 -0
- package/dist/collection/styles/typography.scss +75 -0
- package/dist/collection/styles/utilities.scss +21 -0
- package/dist/collection/utils/behaviors.utils.js +169 -0
- package/dist/collection/utils/components.utils.js +50 -0
- package/dist/collection/utils/locale.utils.js +22 -0
- package/dist/collection/utils/unit.test.utils.js +37 -32
- package/dist/collection/variables.css +9 -9
- package/dist/components/components.utils.js +51 -1
- package/dist/components/index2.js +65 -18
- package/dist/components/mg-badge2.js +4 -4
- package/dist/components/mg-button2.js +1 -1
- package/dist/components/mg-card2.js +1 -1
- package/dist/components/mg-icon2.js +13 -3
- package/dist/components/mg-illustrated-message.js +4 -3
- package/dist/components/mg-input-date.js +6 -4
- package/dist/components/mg-input-numeric.js +2 -3
- package/dist/components/mg-input-password.js +1 -1
- package/dist/components/mg-input-select2.js +8 -4
- package/dist/components/mg-input-text2.js +1 -1
- package/dist/components/mg-input-textarea.js +1 -1
- package/dist/components/mg-menu-item.js +1 -253
- package/dist/components/mg-menu-item2.js +517 -0
- package/dist/components/mg-menu.js +138 -21
- package/dist/components/mg-message.js +54 -13
- package/dist/components/mg-modal.js +1 -1
- package/dist/components/mg-panel.js +1 -1
- package/dist/components/mg-popover.js +1 -190
- package/dist/components/mg-popover2.js +212 -0
- package/dist/components/mg-skip-links.js +16 -2
- package/dist/components/mg-tabs.js +100 -52
- package/dist/components/mg-tag.js +4 -4
- package/dist/components/mg-tooltip2.js +4 -4
- package/dist/esm/{index-78edde1d.js → index-dc9a2348.js} +11 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/mg-badge_30.entry.js +742 -244
- package/dist/esm/mg-components.js +3 -3
- package/dist/esm/polyfills/css-shim.js +1 -1
- package/dist/mg-components/locales/en/messages.json +4 -0
- package/dist/mg-components/locales/fr/messages.json +4 -0
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/{p-125c54ca.js → p-182bd802.js} +2 -2
- package/dist/mg-components/p-f7da9dd2.entry.js +1 -0
- package/dist/mg-components/styles/a11y.scss +32 -0
- package/dist/mg-components/styles/components.scss +3 -0
- package/dist/mg-components/styles/fonts.scss +21 -0
- package/dist/mg-components/styles/form.scss +3 -0
- package/dist/mg-components/styles/global.scss +87 -0
- package/dist/mg-components/styles/layout.scss +29 -0
- package/dist/mg-components/styles/main.scss +23 -0
- package/dist/mg-components/styles/navigation-button.scss +76 -0
- package/dist/mg-components/styles/reset-mg-card-slotted-variables.scss +9 -0
- package/dist/mg-components/styles/typography.scss +75 -0
- package/dist/mg-components/styles/utilities.scss +21 -0
- package/dist/mg-components/variables.css +9 -9
- package/dist/types/components/atoms/mg-badge/mg-badge.conf.d.ts +2 -2
- package/dist/types/components/atoms/mg-button/mg-button.conf.d.ts +2 -2
- package/dist/types/components/atoms/mg-icon/mg-icon.conf.d.ts +2 -2
- package/dist/types/components/atoms/mg-tag/mg-tag.conf.d.ts +1 -1
- package/dist/types/components/molecules/inputs/MgInput.conf.d.ts +2 -2
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.conf.d.ts +2 -2
- package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.conf.d.ts +1 -1
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.conf.d.ts +2 -2
- package/dist/types/components/molecules/inputs/mg-input-toggle/mg-input-toggle.conf.d.ts +1 -1
- package/dist/types/components/molecules/menu/mg-menu/doc/mg-menu.stories.d.ts +5 -0
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.conf.d.ts +37 -0
- package/dist/types/components/molecules/menu/mg-menu/mg-menu.d.ts +51 -3
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.conf.d.ts +0 -8
- package/dist/types/components/molecules/menu/mg-menu-item/mg-menu-item.d.ts +55 -15
- package/dist/types/components/molecules/mg-message/mg-message.d.ts +21 -4
- package/dist/types/components/molecules/mg-popover/mg-popover.d.ts +12 -0
- package/dist/types/components/molecules/mg-skip-links/mg-skip-links.conf.d.ts +1 -1
- package/dist/types/components/molecules/mg-skip-links/mg-skip-links.d.ts +15 -0
- package/dist/types/components/molecules/mg-tabs/mg-tabs.conf.d.ts +5 -3
- package/dist/types/components/molecules/mg-tabs/mg-tabs.d.ts +22 -12
- package/dist/types/components.d.ts +44 -12
- package/dist/types/locales/index.d.ts +10 -9
- package/dist/types/stencil-public-runtime.d.ts +39 -3
- package/dist/types/utils/behaviors.utils.d.ts +83 -0
- package/dist/types/utils/components.utils.d.ts +14 -0
- package/dist/types/utils/locale.utils.d.ts +13 -0
- package/dist/types/utils/unit.test.utils.d.ts +50 -14
- package/package.json +26 -26
- package/readme.md +22 -13
- package/dist/components/locale.utils.js +0 -40
- package/dist/components/mg-menu.conf.js +0 -10
- package/dist/mg-components/p-4961c96c.entry.js +0 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { c as createID, C as ClassList, g as getWindows, i as isTagName } from './components.utils.js';
|
|
3
|
+
import { i as initLocales } from './index2.js';
|
|
4
|
+
import { d as defineCustomElement$3 } from './mg-button2.js';
|
|
5
|
+
import { d as defineCustomElement$2 } from './mg-card2.js';
|
|
6
|
+
import { d as defineCustomElement$1 } from './mg-icon2.js';
|
|
7
|
+
import { c as createPopper } from './popper.js';
|
|
8
|
+
|
|
9
|
+
const mgPopoverCss = ":host{--mg-card-padding:var(--mg-popover-padding-vertical, 1.5rem) var(--mg-popover-padding-horizontal, var(--mg-popover-padding-vertical, 1.5rem));--mg-card-border:none;--mg-card-border-radius:0.5rem;--mg-card-background:hsl(var(--mg-popover-background-color));position:relative;display:contents}:host::slotted(*){display:inline-block}.mg-popover{display:none;padding:1rem;z-index:2000;color:hsl(var(--mg-popover-font-color))}.mg-popover mg-card{position:relative;z-index:-1}.mg-popover[data-show]{display:block}.mg-popover mg-button{float:right;margin-right:calc(0rem - (var(--default-size) - var(--mg-icon-regular-size)) / 2);margin-top:calc(0rem - (var(--default-size) - var(--mg-popover-title-font-size) * var(--line-height)) / 2);margin-left:3rem}.mg-popover__arrow{position:absolute;visibility:hidden;width:calc(3rem + 2 * var(--mg-card-border-radius) + 2rem);height:calc(3rem + 2 * var(--mg-card-border-radius) + 2rem)}.mg-popover__arrow:before{visibility:visible;content:\"\";position:absolute}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow,.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow{height:1rem}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow:before{left:calc(var(--mg-card-border-radius) + 1rem);border-right:calc(3rem / 2) solid transparent;border-left:calc(3rem / 2) solid transparent}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow{bottom:0.1rem;filter:drop-shadow(0 0.5rem 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=top]>.mg-popover__arrow:before{border-top:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow{top:0.1rem;filter:drop-shadow(0 -0.5rem 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=bottom]>.mg-popover__arrow:before{border-bottom:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right]>.mg-popover__arrow{width:1rem}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right]>.mg-popover__arrow:before{top:calc(var(--mg-card-border-radius) + 1rem);border-top:calc(3rem / 2) solid transparent;border-bottom:calc(3rem / 2) solid transparent}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow{right:0.1rem;filter:drop-shadow(0.5rem 0 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=left]>.mg-popover__arrow:before{border-left:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=right]>.mg-popover__arrow{left:0.1rem;filter:drop-shadow(-0.5rem 0 0.25rem hsl(var(--color-dark), 0.15))}.mg-popover[data-popper-placement^=right]>.mg-popover__arrow:before{border-right:1rem solid hsl(var(--mg-popover-background-color))}.mg-popover[data-popper-placement^=left-start],.mg-popover[data-popper-placement^=left-end],.mg-popover[data-popper-placement^=right-start],.mg-popover[data-popper-placement^=right-end]{padding:0 1rem}.mg-popover[data-popper-placement^=left-start]>.mg-popover__arrow,.mg-popover[data-popper-placement^=left-end]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right-start]>.mg-popover__arrow,.mg-popover[data-popper-placement^=right-end]>.mg-popover__arrow{height:calc(3rem + 2 * var(--mg-card-border-radius))}.mg-popover[data-popper-placement^=left-start]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=left-end]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right-start]>.mg-popover__arrow:before,.mg-popover[data-popper-placement^=right-end]>.mg-popover__arrow:before{top:var(--mg-card-border-radius)}.mg-popover__title ::slotted([slot=title]){margin:0 0 1rem !important;font-size:var(--mg-popover-title-font-size) !important;font-weight:600}.mg-popover--arrow-hide.mg-popover[data-popper-placement^=top]{padding-bottom:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement^=bottom]{padding-top:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement$=end],.mg-popover--arrow-hide.mg-popover[data-popper-placement^=left]{padding-right:0}.mg-popover--arrow-hide.mg-popover[data-popper-placement$=start],.mg-popover--arrow-hide.mg-popover[data-popper-placement^=right]{padding-left:0}.mg-popover ::slotted(*){--mg-card-border:var(--mg-card-border-default);--mg-card-padding:var(--mg-card-padding-default);--mg-card-border-radius:var(--mg-card-border-radius-default);--mg-card-background:var(--mg-card-background-default);--mg-card-box-shadow:var(--mg-card-box-shadow-default)}";
|
|
10
|
+
|
|
11
|
+
const MgPopover = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.__registerHost();
|
|
15
|
+
this.__attachShadow();
|
|
16
|
+
this.displayChange = createEvent(this, "display-change", 7);
|
|
17
|
+
this.closeButtonId = '';
|
|
18
|
+
// Classes
|
|
19
|
+
this.classArrowHide = `mg-popover--arrow-hide`;
|
|
20
|
+
/**
|
|
21
|
+
* Check if clicked outside of component
|
|
22
|
+
*
|
|
23
|
+
* @param {MouseEvent} event mouse event
|
|
24
|
+
* @returns {void}
|
|
25
|
+
*/
|
|
26
|
+
this.clickOutside = (event) => {
|
|
27
|
+
if (!this.disabled && event.target.closest(`mg-popover`) !== this.element) {
|
|
28
|
+
this.display = false;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Show popover
|
|
33
|
+
*
|
|
34
|
+
* @returns {void}
|
|
35
|
+
*/
|
|
36
|
+
this.show = () => {
|
|
37
|
+
// Make the popover visible
|
|
38
|
+
this.popover.setAttribute('data-show', '');
|
|
39
|
+
// Enable the event listeners
|
|
40
|
+
this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: true }] })));
|
|
41
|
+
// Update its position
|
|
42
|
+
this.popper.update();
|
|
43
|
+
// hide when click outside
|
|
44
|
+
// setTimeout is used to prevent event to trigger after creation
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
this.windows.forEach((localWindow) => {
|
|
47
|
+
localWindow.addEventListener('click', this.clickOutside, false);
|
|
48
|
+
});
|
|
49
|
+
}, 0);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Hide popover
|
|
53
|
+
*
|
|
54
|
+
* @returns {void}
|
|
55
|
+
*/
|
|
56
|
+
this.hide = () => {
|
|
57
|
+
// Hide the popover
|
|
58
|
+
this.popover.removeAttribute('data-show');
|
|
59
|
+
// Disable the event listeners
|
|
60
|
+
this.popper.setOptions(options => (Object.assign(Object.assign({}, options), { modifiers: [...options.modifiers, { name: 'eventListeners', enabled: false }] })));
|
|
61
|
+
// Remove event listener
|
|
62
|
+
this.windows.forEach((localWindow) => {
|
|
63
|
+
localWindow.removeEventListener('click', this.clickOutside, false);
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Handle action for close button
|
|
68
|
+
*
|
|
69
|
+
* @returns {void}
|
|
70
|
+
*/
|
|
71
|
+
this.handleCloseButton = () => {
|
|
72
|
+
this.display = false;
|
|
73
|
+
};
|
|
74
|
+
this.identifier = createID('mg-popover');
|
|
75
|
+
this.placement = 'bottom';
|
|
76
|
+
this.arrowHide = false;
|
|
77
|
+
this.closeButton = false;
|
|
78
|
+
this.display = false;
|
|
79
|
+
this.disabled = false;
|
|
80
|
+
this.classList = new ClassList(['mg-popover']);
|
|
81
|
+
}
|
|
82
|
+
validateArrowHide(newValue) {
|
|
83
|
+
if (newValue)
|
|
84
|
+
this.classList.add(this.classArrowHide);
|
|
85
|
+
else
|
|
86
|
+
this.classList.delete(this.classArrowHide);
|
|
87
|
+
}
|
|
88
|
+
handleDisplay(newValue) {
|
|
89
|
+
if (newValue) {
|
|
90
|
+
this.show();
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.hide();
|
|
94
|
+
}
|
|
95
|
+
this.displayChange.emit(newValue);
|
|
96
|
+
}
|
|
97
|
+
/*************
|
|
98
|
+
* Lifecycle *
|
|
99
|
+
*************/
|
|
100
|
+
/**
|
|
101
|
+
* Check if component props are well configured on init
|
|
102
|
+
*
|
|
103
|
+
* @returns {void} timeout
|
|
104
|
+
*/
|
|
105
|
+
componentWillLoad() {
|
|
106
|
+
// Get windows to attach events
|
|
107
|
+
this.windows = getWindows(window);
|
|
108
|
+
// Get locales
|
|
109
|
+
this.messages = initLocales(this.element).messages;
|
|
110
|
+
this.validateArrowHide(this.arrowHide);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Check if component props are well configured on init
|
|
114
|
+
*
|
|
115
|
+
* @returns {void}
|
|
116
|
+
*/
|
|
117
|
+
componentDidLoad() {
|
|
118
|
+
const headingTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
|
|
119
|
+
const slottedTitleElement = this.element.querySelector('[slot="title"]');
|
|
120
|
+
if (slottedTitleElement && !isTagName(slottedTitleElement, headingTags)) {
|
|
121
|
+
throw new Error(`<mg-popover> Slotted title must be a heading: ${headingTags.join(', ')}`);
|
|
122
|
+
}
|
|
123
|
+
// Set close button id
|
|
124
|
+
if (this.closeButton) {
|
|
125
|
+
this.closeButtonId = `${this.identifier}-close-button`;
|
|
126
|
+
}
|
|
127
|
+
// Get popover content
|
|
128
|
+
this.popover = this.element.shadowRoot.getElementById(this.identifier);
|
|
129
|
+
//Get interactive element (first element without slot attribute)
|
|
130
|
+
const interactiveElement = this.element.querySelector(':not([slot])');
|
|
131
|
+
// Add aria attributes
|
|
132
|
+
interactiveElement.setAttribute('aria-controls', this.identifier);
|
|
133
|
+
interactiveElement.setAttribute('aria-expanded', `${this.display}`);
|
|
134
|
+
// Create popperjs popover
|
|
135
|
+
this.popper = createPopper(interactiveElement, this.popover, {
|
|
136
|
+
placement: this.placement,
|
|
137
|
+
strategy: 'fixed',
|
|
138
|
+
modifiers: [
|
|
139
|
+
{
|
|
140
|
+
name: 'offset',
|
|
141
|
+
options: {
|
|
142
|
+
offset: [0, 0],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
});
|
|
147
|
+
// Add events to toggle display
|
|
148
|
+
interactiveElement.addEventListener('click', () => {
|
|
149
|
+
if (!this.disabled)
|
|
150
|
+
this.display = !this.display;
|
|
151
|
+
});
|
|
152
|
+
// Add events to hide popover
|
|
153
|
+
this.element.addEventListener('keydown', e => {
|
|
154
|
+
if (!this.disabled && e.code === 'Escape')
|
|
155
|
+
this.display = false;
|
|
156
|
+
});
|
|
157
|
+
this.handleDisplay(this.display);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Render
|
|
161
|
+
*
|
|
162
|
+
* @returns {HTMLElement} HTML Element
|
|
163
|
+
*/
|
|
164
|
+
render() {
|
|
165
|
+
return (h(Host, null, h("slot", null), h("div", { id: this.identifier, class: this.classList.join() }, h("mg-card", null, this.closeButton && (h("mg-button", { identifier: this.closeButtonId, "is-icon": true, variant: "flat", label: this.messages.general.close, onClick: this.handleCloseButton }, h("mg-icon", { icon: "cross" }))), h("div", { class: "mg-popover__title" }, h("slot", { name: "title" })), h("slot", { name: "content" })), !this.arrowHide && h("div", { class: "mg-popover__arrow", "data-popper-arrow": true }))));
|
|
166
|
+
}
|
|
167
|
+
get element() { return this; }
|
|
168
|
+
static get watchers() { return {
|
|
169
|
+
"arrowHide": ["validateArrowHide"],
|
|
170
|
+
"display": ["handleDisplay"]
|
|
171
|
+
}; }
|
|
172
|
+
static get style() { return mgPopoverCss; }
|
|
173
|
+
}, [1, "mg-popover", {
|
|
174
|
+
"identifier": [1],
|
|
175
|
+
"placement": [1],
|
|
176
|
+
"arrowHide": [4, "arrow-hide"],
|
|
177
|
+
"closeButton": [4, "close-button"],
|
|
178
|
+
"display": [1028],
|
|
179
|
+
"disabled": [1028],
|
|
180
|
+
"classList": [32]
|
|
181
|
+
}]);
|
|
182
|
+
function defineCustomElement() {
|
|
183
|
+
if (typeof customElements === "undefined") {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const components = ["mg-popover", "mg-button", "mg-card", "mg-icon"];
|
|
187
|
+
components.forEach(tagName => { switch (tagName) {
|
|
188
|
+
case "mg-popover":
|
|
189
|
+
if (!customElements.get(tagName)) {
|
|
190
|
+
customElements.define(tagName, MgPopover);
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
case "mg-button":
|
|
194
|
+
if (!customElements.get(tagName)) {
|
|
195
|
+
defineCustomElement$3();
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case "mg-card":
|
|
199
|
+
if (!customElements.get(tagName)) {
|
|
200
|
+
defineCustomElement$2();
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
case "mg-icon":
|
|
204
|
+
if (!customElements.get(tagName)) {
|
|
205
|
+
defineCustomElement$1();
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
208
|
+
} });
|
|
209
|
+
}
|
|
210
|
+
defineCustomElement();
|
|
211
|
+
|
|
212
|
+
export { MgPopover as M, defineCustomElement as d };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
|
|
2
2
|
import { i as initLocales } from './index2.js';
|
|
3
3
|
|
|
4
4
|
const mgSkipLinksCss = ".mg-skip-links{position:absolute;transform:translateY(-100%);opacity:0;background:hsl(var(--color-light))}.mg-skip-links:focus-within{position:relative;transform:translateY(0);opacity:1}.mg-skip-links__list{display:flex;flex-wrap:wrap;align-items:center;gap:0.6rem;margin:0;padding:0.64rem 1.8rem;list-style:none}.mg-skip-links__link{display:inline-block;padding:1.2rem;color:hsl(var(--color-dark))}.mg-skip-links__link:hover{background:hsl(var(--color-dark), 0.1)}";
|
|
@@ -8,6 +8,20 @@ const MgSkipLinks$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
8
8
|
super();
|
|
9
9
|
this.__registerHost();
|
|
10
10
|
this.__attachShadow();
|
|
11
|
+
this.goToAnchor = createEvent(this, "go-to-anchor", 7);
|
|
12
|
+
/***********
|
|
13
|
+
* Methods *
|
|
14
|
+
**********/
|
|
15
|
+
/**
|
|
16
|
+
* Handle link click and emit go-to-anchor event
|
|
17
|
+
*
|
|
18
|
+
* @param {MouseEvent} event mouse event
|
|
19
|
+
* @returns {void}
|
|
20
|
+
*/
|
|
21
|
+
this.handleLinkCLick = (event) => {
|
|
22
|
+
event.currentTarget.blur();
|
|
23
|
+
this.goToAnchor.emit(event.currentTarget.getAttribute('href'));
|
|
24
|
+
};
|
|
11
25
|
this.links = undefined;
|
|
12
26
|
}
|
|
13
27
|
validateLinks(links) {
|
|
@@ -35,7 +49,7 @@ const MgSkipLinks$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
35
49
|
* @returns {HTMLElement} HTML Element
|
|
36
50
|
*/
|
|
37
51
|
render() {
|
|
38
|
-
return (h("nav", { class: "mg-skip-links", role: "navigation", "aria-label": this.messages.skipLinks.navLabel }, h("ul", { class: "mg-skip-links__list" }, this.links.map(link => (h("li", null, h("a", { class: "mg-skip-links__link", href: link.href }, link.label)))))));
|
|
52
|
+
return (h("nav", { class: "mg-skip-links", role: "navigation", "aria-label": this.messages.skipLinks.navLabel }, h("ul", { class: "mg-skip-links__list" }, this.links.map(link => (h("li", null, h("a", { class: "mg-skip-links__link", href: link.href, onClick: this.handleLinkCLick }, link.label)))))));
|
|
39
53
|
}
|
|
40
54
|
get element() { return this; }
|
|
41
55
|
static get watchers() { return {
|
|
@@ -18,7 +18,7 @@ var Status;
|
|
|
18
18
|
*/
|
|
19
19
|
const sizes = ['regular', 'large'];
|
|
20
20
|
|
|
21
|
-
const mgTabsCss = ".mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular{padding:1rem 2rem}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=label]),.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=metadata]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=label]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=metadata]){font-size:
|
|
21
|
+
const mgTabsCss = ".mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular{padding:1rem 2rem;height:calc()}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button,.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=label]),.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button ::slotted([slot=metadata]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=label]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular ::slotted([slot=metadata]){font-size:var(--font-size)}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular.mg-tabs__navigation-button--horizontal{padding-bottom:calc(1rem - 0.3rem)}.mg-tabs.mg-tabs--size-regular .mg-tabs__navigation-button.mg-tabs__navigation-button--vertical,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-regular.mg-tabs__navigation-button--vertical{padding-left:calc(2rem - 0.3rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large{padding:1.5rem 3rem;height:calc()}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button,.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button ::slotted([slot=label]),.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button ::slotted([slot=metadata]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large ::slotted([slot=label]),.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large ::slotted([slot=metadata]){font-size:calc(var(--font-size) + 0.2rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large.mg-tabs__navigation-button--horizontal{padding-bottom:calc(1.5rem - 0.3rem)}.mg-tabs.mg-tabs--size-large .mg-tabs__navigation-button.mg-tabs__navigation-button--vertical,.mg-tabs__navigation-button.mg-tabs__navigation-button--size-large.mg-tabs__navigation-button--vertical{padding-left:calc(3rem - 0.3rem)}.mg-tabs__navigation-button{display:flex;align-items:center;column-gap:var(--mg-tabs-navigation-button-column-gap, 1rem);background-color:unset;border:none;font-family:var(--font-family);color:hsl(var(--mg-tabs-color-hsl, var(--color-dark)));line-height:var(--line-height);text-decoration:none;white-space:nowrap;box-sizing:border-box;cursor:pointer}.mg-tabs__navigation-button:disabled,.mg-tabs__navigation-button--disabled{cursor:default;opacity:0.3}.mg-tabs__navigation-button:focus-visible{z-index:10}.mg-tabs__navigation-button:hover:not(.mg-tabs__navigation-button--disabled),.mg-tabs__navigation-button:focus-visible:not(.mg-tabs__navigation-button--disabled){background-color:hsl(var(--mg-tabs-focused-background-color-hsl), 0.1)}.mg-tabs__navigation-button.mg-tabs__navigation-button--active{color:hsl(var(--mg-tabs-color-active-hsl));font-weight:600}.mg-tabs__navigation-button.mg-tabs__navigation-button--active.mg-tabs__navigation-button--horizontal{border-bottom-color:hsl(var(--mg-tabs-border-color-active-hsl))}.mg-tabs__navigation-button.mg-tabs__navigation-button--active.mg-tabs__navigation-button--vertical{border-left-color:hsl(var(--mg-tabs-border-color-active-hsl))}.mg-tabs__navigation-button.mg-tabs__navigation-button--hidden{display:none}.mg-tabs__navigation-button.mg-tabs__navigation-button--horizontal{border-bottom:0.3rem solid transparent}.mg-tabs__navigation-button.mg-tabs__navigation-button--vertical{border-left:0.3rem solid transparent}.mg-tabs__header{display:flex;flex-direction:row;flex-wrap:wrap}.mg-tabs__content-container:focus-visible{outline:none}.mg-tabs__navigation-button-text{flex:0 0 content}";
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* type TabItem validation function
|
|
@@ -39,25 +39,7 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
39
39
|
// classes
|
|
40
40
|
this.tabPanel = 'panel';
|
|
41
41
|
this.buttonTabBaseClass = 'mg-tabs__navigation-button';
|
|
42
|
-
// variables
|
|
43
42
|
this.startIndex = 1;
|
|
44
|
-
/**
|
|
45
|
-
* Method to set active tab
|
|
46
|
-
*
|
|
47
|
-
* @param {number} tabKey item tab key to set to ACTIVE status
|
|
48
|
-
* @returns {void}
|
|
49
|
-
*/
|
|
50
|
-
this.setActiveTab = (tabKey) => {
|
|
51
|
-
// reset active tabs
|
|
52
|
-
this.tabs.forEach(tab => {
|
|
53
|
-
if (this.tabHasGivenStatus(tab, Status.ACTIVE))
|
|
54
|
-
tab.status = Status.VISIBLE;
|
|
55
|
-
});
|
|
56
|
-
// set active tab from given tab key
|
|
57
|
-
this.tabs[tabKey - this.startIndex].status = Status.ACTIVE;
|
|
58
|
-
// emit change active tab key event
|
|
59
|
-
this.activeTabChange.emit(tabKey);
|
|
60
|
-
};
|
|
61
43
|
/**
|
|
62
44
|
* Method to know if given tab has the given status
|
|
63
45
|
*
|
|
@@ -65,7 +47,7 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
65
47
|
* @param {Status} status status to valide
|
|
66
48
|
* @returns {boolean} status comparaison
|
|
67
49
|
*/
|
|
68
|
-
this.
|
|
50
|
+
this.tabHasStatus = (tab, status) => tab.status === status;
|
|
69
51
|
/**
|
|
70
52
|
* Method to get element id from index
|
|
71
53
|
*
|
|
@@ -73,14 +55,20 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
73
55
|
* @param {number} index to generate id
|
|
74
56
|
* @returns {string} generated element id
|
|
75
57
|
*/
|
|
76
|
-
this.getElementId = (element, index) => `${element}-${this.
|
|
58
|
+
this.getElementId = (element, index) => `${element}-${this.getTabItemIndex(index)}`;
|
|
77
59
|
/**
|
|
78
|
-
* Method to get tab index
|
|
60
|
+
* Method to get tab item index
|
|
79
61
|
*
|
|
80
62
|
* @param {number} index to get
|
|
81
63
|
* @returns {number} index
|
|
82
64
|
*/
|
|
83
|
-
this.
|
|
65
|
+
this.getTabItemIndex = (index) => index + this.startIndex;
|
|
66
|
+
/**
|
|
67
|
+
* Method to get the active-tab value
|
|
68
|
+
*
|
|
69
|
+
* @returns {number} of the active-tab
|
|
70
|
+
*/
|
|
71
|
+
this.getActiveTab = () => this.activeTab || this.getTabItemIndex(this.tabs.map((tab, index) => (Object.assign(Object.assign({}, tab), { index }))).find(tab => this.tabHasStatus(tab, Status.ACTIVE)).index);
|
|
84
72
|
/**
|
|
85
73
|
* Handle click events on tabs
|
|
86
74
|
*
|
|
@@ -88,16 +76,22 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
88
76
|
*/
|
|
89
77
|
this.handleClick = (event) => {
|
|
90
78
|
const tabId = event.currentTarget.getAttribute('data-index');
|
|
91
|
-
|
|
79
|
+
const tab = this.tabs[Number(tabId) - this.startIndex];
|
|
80
|
+
if (this.tabHasStatus(tab, Status.HIDDEN) || this.tabHasStatus(tab, Status.DISABLED)) {
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.activeTab = Number(tabId);
|
|
85
|
+
this.tabFocus = undefined;
|
|
86
|
+
}
|
|
92
87
|
};
|
|
93
88
|
/**
|
|
94
89
|
* get navigation button class from given status
|
|
95
90
|
*
|
|
96
91
|
* @param {Status} status button tab status
|
|
97
|
-
* @param {boolean} isSelector set if we need a CSS selector with the dot '.' at the begin. default value = false.
|
|
98
92
|
* @returns {string} button class/selector variant
|
|
99
93
|
*/
|
|
100
|
-
this.getNavigationButtonClass = (status
|
|
94
|
+
this.getNavigationButtonClass = (status) => `${this.buttonTabBaseClass}--${status}`;
|
|
101
95
|
/**
|
|
102
96
|
* Handle keyboard event on tabs
|
|
103
97
|
*
|
|
@@ -105,37 +99,65 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
105
99
|
* @returns {void}
|
|
106
100
|
*/
|
|
107
101
|
this.handleKeydown = (event) => {
|
|
108
|
-
let tabId = Number(event.target.getAttribute('data-index'));
|
|
109
102
|
const parent = event.target.parentElement;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
103
|
+
if (['ArrowRight', 'ArrowLeft'].includes(event.key)) {
|
|
104
|
+
this.tabFocus = Number(event.target.getAttribute('data-index'));
|
|
105
|
+
parent.querySelector(`[data-index="${this.tabFocus}"]`).setAttribute('tabindex', '-1');
|
|
106
|
+
// Move right
|
|
107
|
+
if (event.key === 'ArrowRight') {
|
|
108
|
+
this.tabFocus++;
|
|
109
|
+
// If we're at the end, go to the start
|
|
110
|
+
if (this.tabFocus > this.tabs.length)
|
|
111
|
+
this.tabFocus = this.startIndex;
|
|
112
|
+
// Move left
|
|
113
|
+
}
|
|
114
|
+
else if (event.key === 'ArrowLeft') {
|
|
115
|
+
this.tabFocus--;
|
|
116
|
+
// If we're at the start, move to the end
|
|
117
|
+
if (this.tabFocus < this.startIndex)
|
|
118
|
+
this.tabFocus = this.tabs.length;
|
|
119
|
+
}
|
|
120
|
+
// if focus item is ['hidden'] we recursively repeat action
|
|
121
|
+
if (this.tabHasStatus(this.tabs[this.tabFocus - 1], Status.HIDDEN)) {
|
|
122
|
+
parent.querySelector(`[data-index="${this.tabFocus}"]`).dispatchEvent(new KeyboardEvent('keydown', { key: event.key, bubbles: true }));
|
|
123
|
+
// else run focus methods on tabFocus element
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
parent.querySelector(`[data-index="${this.tabFocus}"]`).setAttribute('tabindex', '0');
|
|
127
|
+
parent.querySelector(`[data-index="${this.tabFocus}"]`).focus();
|
|
128
|
+
}
|
|
116
129
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
// apply selected tab if exist
|
|
120
|
-
if (selectedTab !== null) {
|
|
121
|
-
selectedTab.focus();
|
|
122
|
-
this.activeTab = tabId;
|
|
130
|
+
else if (event.key === 'Tab') {
|
|
131
|
+
this.resetFocus();
|
|
123
132
|
}
|
|
124
133
|
};
|
|
134
|
+
/**
|
|
135
|
+
* Method to reset focus behavior
|
|
136
|
+
*
|
|
137
|
+
* @returns {void}
|
|
138
|
+
*/
|
|
139
|
+
this.resetFocus = () => {
|
|
140
|
+
// update asynchronously tabindex to prevent get focus on new tabindex at then end of event process
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
this.tabFocus = undefined;
|
|
143
|
+
Array.from(this.element.shadowRoot.querySelectorAll('[data-index]')).forEach((tab, index) => {
|
|
144
|
+
tab.setAttribute('tabindex', this.getActiveTab() - this.startIndex !== index ? '-1' : '0');
|
|
145
|
+
});
|
|
146
|
+
}, 0);
|
|
147
|
+
};
|
|
125
148
|
/**
|
|
126
149
|
* Validate slots setting
|
|
127
150
|
*/
|
|
128
151
|
this.validateSlots = () => {
|
|
129
152
|
const slots = Array.from(this.element.children).filter(slot => { var _a; return (_a = slot.getAttribute('slot')) === null || _a === void 0 ? void 0 : _a.includes('tab_content-'); });
|
|
130
|
-
if (slots.length !== this.tabs.length)
|
|
153
|
+
if (slots.length !== this.tabs.length)
|
|
131
154
|
throw new Error('<mg-tabs> Must have slots counts equal to tabs count.');
|
|
132
|
-
}
|
|
133
155
|
};
|
|
134
156
|
this.identifier = createID('mg-tabs');
|
|
135
157
|
this.label = undefined;
|
|
136
158
|
this.size = 'regular';
|
|
137
159
|
this.items = undefined;
|
|
138
|
-
this.activeTab =
|
|
160
|
+
this.activeTab = undefined;
|
|
139
161
|
this.tabs = [];
|
|
140
162
|
this.classList = new ClassList(['mg-tabs']);
|
|
141
163
|
}
|
|
@@ -153,22 +175,37 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
153
175
|
validateItems(newValue) {
|
|
154
176
|
// String array
|
|
155
177
|
if (allItemsAreString(newValue)) {
|
|
156
|
-
this.tabs = newValue.map(item => ({ label: item, status: Status.VISIBLE }));
|
|
178
|
+
this.tabs = newValue.map((item, index) => ({ label: item, status: index === 0 ? Status.ACTIVE : Status.VISIBLE }));
|
|
157
179
|
}
|
|
158
180
|
// Object array
|
|
159
|
-
else if (newValue && newValue.every(item => isTabItem(item))) {
|
|
181
|
+
else if (newValue && newValue.length > 0 && newValue.every(item => isTabItem(item))) {
|
|
160
182
|
this.tabs = newValue;
|
|
183
|
+
// init active tabs if not set. Default: index 0.
|
|
184
|
+
if (this.tabs.find(tab => this.tabHasStatus(tab, Status.ACTIVE)) === undefined)
|
|
185
|
+
this.tabs[0].status = Status.ACTIVE;
|
|
161
186
|
}
|
|
162
187
|
else {
|
|
163
188
|
throw new Error('<mg-tabs> prop "items" is required and all items must be the same type: TabItem.');
|
|
164
189
|
}
|
|
165
190
|
}
|
|
166
191
|
validateActiveTab(newValue) {
|
|
167
|
-
if (newValue
|
|
168
|
-
|
|
192
|
+
if (typeof newValue === 'number' && newValue >= 1 && newValue <= this.tabs.length) {
|
|
193
|
+
this.tabs.forEach((tab, index) => {
|
|
194
|
+
const isNewActiveTab = index === newValue - this.startIndex;
|
|
195
|
+
// reset active tabs
|
|
196
|
+
if (this.tabHasStatus(tab, Status.ACTIVE) && !isNewActiveTab)
|
|
197
|
+
tab.status = Status.VISIBLE;
|
|
198
|
+
// set active tab from given tab key
|
|
199
|
+
else if ((tab.status === undefined || this.tabHasStatus(tab, Status.VISIBLE)) && isNewActiveTab)
|
|
200
|
+
tab.status = Status.ACTIVE;
|
|
201
|
+
});
|
|
202
|
+
// emit change active tab key event
|
|
203
|
+
if (this.tabs.find(tab => this.tabHasStatus(tab, Status.ACTIVE)) !== undefined) {
|
|
204
|
+
this.activeTabChange.emit(newValue);
|
|
205
|
+
}
|
|
169
206
|
}
|
|
170
|
-
else {
|
|
171
|
-
|
|
207
|
+
else if (newValue !== undefined) {
|
|
208
|
+
throw new Error('<mg-tabs> prop "activeTab" must be between 1 and tabs length.');
|
|
172
209
|
}
|
|
173
210
|
}
|
|
174
211
|
/*************
|
|
@@ -187,6 +224,17 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
187
224
|
this.validateSize(this.size);
|
|
188
225
|
this.validateSlots();
|
|
189
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* add listners
|
|
229
|
+
*
|
|
230
|
+
* @returns {void}
|
|
231
|
+
*/
|
|
232
|
+
componentDidLoad() {
|
|
233
|
+
document.addEventListener('click', (event) => {
|
|
234
|
+
if (event.target.closest('mg-tabs') !== this.element)
|
|
235
|
+
this.resetFocus();
|
|
236
|
+
}, false);
|
|
237
|
+
}
|
|
190
238
|
/**
|
|
191
239
|
* Render
|
|
192
240
|
*
|
|
@@ -196,10 +244,10 @@ const MgTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
196
244
|
return (h("div", { class: this.classList.join() }, h("header", { role: "tablist", "aria-label": this.label, class: "mg-tabs__header" }, this.tabs.map((tab, index) => (h("button", { role: "tab", id: this.getElementId(this.identifier, index), class: {
|
|
197
245
|
[`${this.buttonTabBaseClass}`]: true,
|
|
198
246
|
[`${this.buttonTabBaseClass}--horizontal`]: true,
|
|
199
|
-
[`${this.getNavigationButtonClass(Status.ACTIVE)}`]: this.
|
|
200
|
-
[`${this.getNavigationButtonClass(Status.DISABLED)}`]: this.
|
|
201
|
-
[`${this.getNavigationButtonClass(Status.HIDDEN)}`]: this.
|
|
202
|
-
}, tabindex: this.
|
|
247
|
+
[`${this.getNavigationButtonClass(Status.ACTIVE)}`]: this.tabHasStatus(tab, Status.ACTIVE),
|
|
248
|
+
[`${this.getNavigationButtonClass(Status.DISABLED)}`]: this.tabHasStatus(tab, Status.DISABLED),
|
|
249
|
+
[`${this.getNavigationButtonClass(Status.HIDDEN)}`]: this.tabHasStatus(tab, Status.HIDDEN),
|
|
250
|
+
}, tabindex: this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1, "aria-selected": this.tabHasStatus(tab, Status.ACTIVE).toString(), "aria-controls": this.getElementId(this.tabPanel, index), "aria-disabled": this.tabHasStatus(tab, Status.DISABLED), onClick: this.handleClick, onKeyDown: this.handleKeydown, "data-index": this.getTabItemIndex(index) }, tab.icon !== undefined && h("mg-icon", { icon: tab.icon }), tab.label, tab.badge !== undefined && h("mg-badge", { variant: "text-color", value: tab.badge.value, label: tab.badge.label, outline: tab.badge.role === 'information' }))))), this.tabs.map((tab, index) => (h("article", { role: "tabpanel", id: this.getElementId(this.tabPanel, index), hidden: !this.tabHasStatus(tab, Status.ACTIVE), "aria-labelledby": this.getElementId(this.identifier, index), tabindex: this.tabHasStatus(tab, Status.ACTIVE) ? 0 : -1, class: "mg-tabs__content-container" }, h("slot", { name: this.getElementId('tab_content', index) }))))));
|
|
203
251
|
}
|
|
204
252
|
get element() { return this; }
|
|
205
253
|
static get watchers() { return {
|
|
@@ -6,7 +6,7 @@ import { C as ClassList } from './components.utils.js';
|
|
|
6
6
|
*/
|
|
7
7
|
const variants = ['primary', 'secondary', 'success', 'warning', 'danger', 'info'];
|
|
8
8
|
|
|
9
|
-
const mgTagCss = ".mg-tag{padding:calc((var(--mg-tag-height) - 0.2rem - var(--mg-tag-font-size) * var(--line-height)) / 2) 0.6rem;min-height:var(--mg-tag-height);box-sizing:border-box;border-radius:var(--mg-tag-border-radius);border:0.1rem solid;font-size:var(--mg-tag-font-size);font-weight:600;text-align:center}.mg-tag.mg-tag--primary{background-color:hsl(var(--color-dark));border-color:hsl(var(--color-dark));color:hsl(var(--color-light))}.mg-tag.mg-tag--primary.mg-tag--outline{background-color:transparent;color:hsl(var(--color-dark))}.mg-tag.mg-tag--primary.mg-tag--soft{font-weight:
|
|
9
|
+
const mgTagCss = ".mg-tag{padding:calc((var(--mg-tag-height) - 0.2rem - var(--mg-tag-font-size) * var(--line-height)) / 2) 0.6rem;min-height:var(--mg-tag-height);box-sizing:border-box;border-radius:var(--mg-tag-border-radius);border:0.1rem solid;font-size:var(--mg-tag-font-size);font-weight:600;text-align:center}.mg-tag.mg-tag--primary{background-color:hsl(var(--color-dark));border-color:hsl(var(--color-dark));color:hsl(var(--color-light))}.mg-tag.mg-tag--primary.mg-tag--outline{background-color:transparent;color:hsl(var(--color-dark))}.mg-tag.mg-tag--primary.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-dark-h), var(--color-dark-s), 90%);border-color:hsl(var(--color-dark-h), var(--color-dark-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--primary.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-dark))}.mg-tag.mg-tag--secondary{background-color:hsl(var(--color-light));border-color:hsl(var(--color-light));color:hsl(var(--color-dark))}.mg-tag.mg-tag--secondary.mg-tag--outline{background-color:transparent;color:hsl(var(--color-light))}.mg-tag.mg-tag--secondary.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-light-h), var(--color-light-s), 90%);border-color:hsl(var(--color-light-h), var(--color-light-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--secondary.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-dark))}.mg-tag.mg-tag--success{background-color:hsl(var(--color-success));border-color:hsl(var(--color-success));color:hsl(var(--color-dark))}.mg-tag.mg-tag--success.mg-tag--outline{background-color:transparent;color:hsl(var(--color-success))}.mg-tag.mg-tag--success.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-success-h), var(--color-success-s), 90%);border-color:hsl(var(--color-success-h), var(--color-success-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--success.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-success))}.mg-tag.mg-tag--warning{background-color:hsl(var(--color-warning));border-color:hsl(var(--color-warning));color:hsl(var(--color-dark))}.mg-tag.mg-tag--warning.mg-tag--outline{background-color:transparent;color:hsl(var(--color-warning))}.mg-tag.mg-tag--warning.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-warning-h), var(--color-warning-s), 90%);border-color:hsl(var(--color-warning-h), var(--color-warning-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--warning.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-warning))}.mg-tag.mg-tag--danger{background-color:hsl(var(--color-danger));border-color:hsl(var(--color-danger));color:hsl(var(--color-light))}.mg-tag.mg-tag--danger.mg-tag--outline{background-color:transparent;color:hsl(var(--color-danger))}.mg-tag.mg-tag--danger.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-danger-h), var(--color-danger-s), 90%);border-color:hsl(var(--color-danger-h), var(--color-danger-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--danger.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-danger))}.mg-tag.mg-tag--info{background-color:hsl(var(--color-info));border-color:hsl(var(--color-info));color:hsl(var(--color-light))}.mg-tag.mg-tag--info.mg-tag--outline{background-color:transparent;color:hsl(var(--color-info))}.mg-tag.mg-tag--info.mg-tag--soft{font-weight:400;background-color:hsl(var(--color-info-h), var(--color-info-s), 90%);border-color:hsl(var(--color-info-h), var(--color-info-s), 90%);color:hsl(var(--color-dark))}.mg-tag.mg-tag--info.mg-tag--soft ::slotted(mg-icon){color:hsl(var(--color-info))}.mg-tag,mg-tag{display:inline-block;vertical-align:middle}::slotted(mg-icon){margin-right:0.4rem}";
|
|
10
10
|
|
|
11
11
|
const MgTag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
12
12
|
constructor() {
|
|
@@ -17,8 +17,8 @@ const MgTag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
17
17
|
* Internal *
|
|
18
18
|
************/
|
|
19
19
|
// Classes
|
|
20
|
-
this.classOutline =
|
|
21
|
-
this.classSoft =
|
|
20
|
+
this.classOutline = 'mg-tag--outline';
|
|
21
|
+
this.classSoft = 'mg-tag--soft';
|
|
22
22
|
this.variant = variants[0];
|
|
23
23
|
this.outline = undefined;
|
|
24
24
|
this.soft = undefined;
|
|
@@ -61,7 +61,7 @@ const MgTag$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
61
61
|
* @returns {void}
|
|
62
62
|
*/
|
|
63
63
|
validateTextContent(textContent) {
|
|
64
|
-
if (
|
|
64
|
+
if (typeof textContent !== 'string' || textContent.trim() === '')
|
|
65
65
|
throw new Error('<mg-tag> slot must contain a text content.');
|
|
66
66
|
}
|
|
67
67
|
/*************
|
|
@@ -9,7 +9,7 @@ var Guard;
|
|
|
9
9
|
Guard["HOVER_TOOLTIPED_ELEMENT"] = "hoverTooltipedGuard";
|
|
10
10
|
})(Guard || (Guard = {}));
|
|
11
11
|
|
|
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}";
|
|
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;max-width:40rem;box-sizing:border-box}.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}";
|
|
13
13
|
|
|
14
14
|
const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
15
15
|
constructor() {
|
|
@@ -69,7 +69,7 @@ const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
69
69
|
this.resetGuard();
|
|
70
70
|
}, 100);
|
|
71
71
|
}
|
|
72
|
-
else if (
|
|
72
|
+
else if (this.guard === Guard.HOVER_TOOLTIPED_ELEMENT) {
|
|
73
73
|
this.setDisplay(isMouseenter);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
@@ -139,7 +139,7 @@ const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
139
139
|
this.setDisplay(true);
|
|
140
140
|
});
|
|
141
141
|
['blur', 'keydown'].forEach(event => {
|
|
142
|
-
|
|
142
|
+
document.addEventListener(event, (e) => {
|
|
143
143
|
// we continue to process ONLY for KeyboardEvents 'Escape'
|
|
144
144
|
if (e.type === 'keydown' && e.code !== 'Escape') {
|
|
145
145
|
return;
|
|
@@ -223,7 +223,7 @@ const MgTooltip = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
223
223
|
* @returns {HTMLElement} HTML Element
|
|
224
224
|
*/
|
|
225
225
|
render() {
|
|
226
|
-
return (h(Host, null, h("slot", null), h("div", { role: "tooltip", id: this.identifier, class: "mg-tooltip", innerHTML: this.message }, h("div", { class: "mg-tooltip__arrow", "data-popper-arrow": true }))));
|
|
226
|
+
return (h(Host, null, h("slot", null), h("div", { role: "tooltip", id: this.identifier, class: "mg-tooltip" }, h("span", { innerHTML: this.message }), h("div", { class: "mg-tooltip__arrow", "data-popper-arrow": true }))));
|
|
227
227
|
}
|
|
228
228
|
get element() { return this; }
|
|
229
229
|
static get watchers() { return {
|
|
@@ -58,7 +58,6 @@ const isComplexType = (o) => {
|
|
|
58
58
|
*
|
|
59
59
|
* Modified for Stencil's compiler and vdom
|
|
60
60
|
*/
|
|
61
|
-
// const stack: any[] = [];
|
|
62
61
|
// export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, child?: d.ChildType): d.VNode;
|
|
63
62
|
// export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;
|
|
64
63
|
const h = (nodeName, vnodeData, ...children) => {
|
|
@@ -138,6 +137,13 @@ const newVNode = (tag, text) => {
|
|
|
138
137
|
};
|
|
139
138
|
const Host = {};
|
|
140
139
|
const isHost = (node) => node && node.$tag$ === Host;
|
|
140
|
+
/**
|
|
141
|
+
* Implementation of {@link d.FunctionalUtilities} for Stencil's VDom.
|
|
142
|
+
*
|
|
143
|
+
* Note that these functions convert from {@link d.VNode} to
|
|
144
|
+
* {@link d.ChildNode} to give functional component developers a friendly
|
|
145
|
+
* interface.
|
|
146
|
+
*/
|
|
141
147
|
const vdomFnUtils = {
|
|
142
148
|
forEach: (children, cb) => children.map(convertToPublic).forEach(cb),
|
|
143
149
|
map: (children, cb) => children.map(convertToPublic).map(cb).map(convertToPrivate),
|
|
@@ -1653,12 +1659,16 @@ const setContentReference = (elm) => {
|
|
|
1653
1659
|
const disconnectedCallback = (elm) => {
|
|
1654
1660
|
if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
|
|
1655
1661
|
const hostRef = getHostRef(elm);
|
|
1662
|
+
const instance = hostRef.$lazyInstance$ ;
|
|
1656
1663
|
{
|
|
1657
1664
|
if (hostRef.$rmListeners$) {
|
|
1658
1665
|
hostRef.$rmListeners$.map((rmListener) => rmListener());
|
|
1659
1666
|
hostRef.$rmListeners$ = undefined;
|
|
1660
1667
|
}
|
|
1661
1668
|
}
|
|
1669
|
+
{
|
|
1670
|
+
safeCall(instance, 'disconnectedCallback');
|
|
1671
|
+
}
|
|
1662
1672
|
}
|
|
1663
1673
|
};
|
|
1664
1674
|
const bootstrapLazy = (lazyBundles, options = {}) => {
|