import {nativeVlElement, define} from '/node_modules/vl-ui-core/dist/vl-core.js';
import '/node_modules/@govflanders/vl-ui-util/dist/js/util.js';
import '/node_modules/@govflanders/vl-ui-core/dist/js/core.js';
import '/lib/toaster.js';
/**
* VlToaster
* @class
* @classdesc De toaster component is een container voor een aantal gestapelde alerts.
*
* @extends HTMLDivElement
* @mixes nativeVlElement
*
* @property {string} data-vl-top-left - Positioneert de toaster op linkerbovenhoek.
* @property {string} data-vl-top-right - Positioneert de toaster op rechterbovenhoek.
* @property {string} data-vl-bottom-left - Positioneert de toaster op linkeronderhoek.
* @property {string} data-vl-bottom-right - Posistioneert de toaster op rechteronderhoek.
* @property {string} data-vl-fadeout - Elke alert verdwijnt automatisch 5 seconden na openen.
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-toaster/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-toaster/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-toaster.html|Demo}
*/
export class VlToaster extends nativeVlElement(HTMLDivElement) {
static get _observedAttributes() {
return ['fadeout'];
}
static get _observedClassAttributes() {
return ['top-left', 'top-right', 'bottom-left', 'bottom-right'];
}
static get _dressedAttributeName() {
return 'data-vl-toaster-dressed';
}
connectedCallback() {
this.classList.add('vl-toaster');
this._dress();
}
get _classPrefix() {
return 'vl-toaster--';
}
get toasterFadeClass() {
return 'vl-alert--fade-out';
}
get _dressed() {
return !!this.getAttribute(VlToaster._dressedAttributeName);
}
/**
*
* Toont een alert
*
* @return {void}
* @param {HTMLElement} alert
*/
push(alert) {
setTimeout(() => {
this._element.appendChild(alert);
});
}
/**
*
* Verwijdert een alert uit hun parent
* @return {void}
* @param {HTMLElement} alert
*/
closeAlert(alert) {
vl.util.addClass(alert, this.toasterFadeClass);
window.setTimeout(function() {
alert.remove();
}, 300);
}
_fadeoutChangedCallback(oldValue, newValue) {
if (newValue !=undefined) {
this._element.setAttribute('data-vl-toaster-fadeout', true);
} else {
this._element.removeAttribute('data-vl-toaster-fadeout');
}
};
_dress() {
if (!this._dressed) {
vl.toaster.dress(this);
}
}
}
define('vl-toaster', VlToaster, {extends: 'div'});