import {nativeVlElement, define} from '/node_modules/vl-ui-core/dist/vl-core.js';
/**
* VlRegion
* @class
* @classdesc Het region element (vl-region) wordt gebruikt om secties te definiƫren op je website. Het zorgt ervoor dat er consistente spacing is tussen verschillende secties beschikbaar op een pagina. Als een voorbeeld: een pagina die de modules "intro", "portfolio", "nieuws" en "contact" bevat, zal in vier verschillende regions worden gewrapped.
*
* @extends HTMLElement
* @mixes nativeVlElement
*
* @property {boolean} data-vl-alt - Maakt de achtergrond lichtgrijs.
* @property {boolean} data-vl-no-space - Gebruik geen marges.
* @property {boolean} data-vl-no-space-bottom - Gebruik geen marges onderaan.
* @property {boolean} data-vl-no-space-top - Gebruik geen marges bovenaan.
* @property {boolean} data-vl-small - Gebruik kleinere marges.
* @property {boolean} data-vl-medium - Gebruik middelgrote marges.
* @property {boolean} data-vl-bordered - Teken een rand.
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-grid.html|Demo}
*/
export class VlRegion extends nativeVlElement(HTMLElement) {
static get _observedClassAttributes() {
return ['no-space', 'no-space-bottom', 'no-space-top', 'alt', 'small', 'medium', 'bordered', 'overlap'];
}
connectedCallback() {
this.classList.add('vl-region');
}
get _classPrefix() {
return 'vl-region--';
}
}
/**
* VlLayout
* @class
* @classdesc Het layout element (vl-layout) centreert uw inhoud in de viewport. Het layout element heeft een breedte van 1200px. Je kan het layout element vergelijken met het Container element in Bootstrap.
*
* @extends HTMLDivElement
* @mixes nativeVlElement
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-grid.html|Demo}
*/
export class VlLayout extends nativeVlElement(HTMLDivElement) {
static get _observedClassAttributes() {
return [];
}
connectedCallback() {
this.classList.add('vl-layout');
}
get _classPrefix() {
return 'vl-layout--';
}
}
/**
* VlGrid
* @class
* @classdesc De grid(.vl-grid) dient om de lay-out van jouw pagina in orde te brengen. Je kan vl-grid vergelijken met de Row element in Bootstrap.
*
* @extends HTMLDivElement
* @mixes nativeVlElement
*
* @property {boolean} data-vl-is-stacked - Voeg marge toe tussen gestapelde kolommen.
* @property {boolean} data-vl-is-stacked-small - Voeg wat minder marge toe tussen gestapelde kolommen. Het gebruik van "data-vl-is-stacked" is in dit geval overbodig.
* @property {boolean} data-vl-is-stacked-large - Voeg wat meer marge toe tussen gestapelde kolommen. Het gebruik van "data-vl-is-stacked" is in dit geval overbodig.
* @property {boolean} data-vl-align-start - Aligneer een of meerdere kolommen links.
* @property {boolean} data-vl-align-center - Centreer een of meerdere kolommen horizontaal.
* @property {boolean} data-vl-align-end - Aligneer een of meerdere kolommen rechts.
* @property {boolean} data-vl-align-space-between - Laat zoveel mogelijke ruimte tussen kolommen.
* @property {boolean} data-vl-align-space-around - Laat zoveel mogelijke ruimte rond kolommen..
* @property {boolean} data-vl-v-top - Aligneer een of meerdere kolommen bovenaan.
* @property {boolean} data-vl-v-center - Centreer een of meerdere kolommen verticaal.
* @property {boolean} data-vl-v-bottom - Aligneer een of meerdere kolommen onderaan.
* @property {boolean} data-vl-v-stretch - Rek de kolommen tot aan hun maximum hoogte.
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-grid.html|Demo}
*/
export class VlGrid extends nativeVlElement(HTMLDivElement) {
static get _observedClassAttributes() {
return [
'is-stacked', 'is-stacked-small', 'is-stacked-large',
'align-start', 'align-center', 'align-end',
'align-space-between', 'align-space-around',
'v-top', 'v-center', 'v-bottom', 'v-stretch',
];
}
connectedCallback() {
this.classList.add('vl-grid');
}
get _classPrefix() {
return 'vl-grid--';
}
}
/**
* VlColumn
* @class
* @classdesc De parent van een VlColumn is altijd een VlGrid.
*
* @extends HTMLDivElement
* @mixes nativeVlElement
*
* @property {number} [8] data-vl-size - Het aantal (teller) van het maximum (noemer) dat genomen zal worden bij grote schermen, typisch desktop.
* @property {number} [12] data-vl-max-size - Het maximum (noemer) waartegen zal geevalueerd worden bij grote schermen, typisch desktop.
* @property {number} [10] data-vl-medium-size - Het aantal (teller) van het maximum (noemer) dat genomen zal worden bij medium schermen, typisch tablet.
* @property {number} [12] data-vl-medium-max-size - Het maximum (noemer) waartegen zal geevalueerd worden bij medium schermen, typisch tablet.
* @property {number} [12] data-vl-small-size - Het aantal (teller) van het maximum (noemer) dat genomen zal worden bij kleine schermen, typisch mobiel.
* @property {number} [12] data-vl-small-max-size - Het maximum (noemer) waartegen zal geevalueerd worden bij kleine schermen, typisch mobiel.
* @property {number} [12] data-vl-extra-small-size - Het aantal (teller) van het maximum (noemer) dat genomen zal worden bij zeer kleine schermen.
* @property {number} [12] data-vl-extra-small-max-size - Het maximum (noemer) waartegen zal geevalueerd worden bij zeer kleine schermen.
* @property {number} data-vl-push - aantal partities te verschuiven.
*
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/releases/latest|Release notes}
* @see {@link https://www.github.com/milieuinfo/webcomponent-vl-ui-grid/issues|Issues}
* @see {@link https://webcomponenten.omgeving.vlaanderen.be/demo/vl-grid.html|Demo}
*/
export class VlColumn extends nativeVlElement(HTMLDivElement) {
static get _observedAttributes() {
return ['size', 'max-size', 'medium-size', 'medium-max-size', 'small-size', 'small-max-size', 'extra-small-size', 'extra-small-max-size', 'push'];
}
connectedCallback() {
this._configureDefaults();
}
get _defaultSize() {
return 8;
}
get _defaultMediumSize() {
return 10;
}
get _defaultSmallSize() {
return 12;
}
get _defaultExtraSmallSize() {
return 12;
}
get _defaultMaxSize() {
return 12;
}
get _size() {
return this.getAttribute('size') || this._defaultSize;
}
get _maxSize() {
return this.getAttribute('max-size') || this._defaultMaxSize;
}
get _mediumSize() {
return this.getAttribute('medium-size') || this._defaultMediumSize;
}
get _mediumMaxSize() {
return this.getAttribute('medium-max-size') || this._defaultMaxSize;
}
get _smallSize() {
return this.getAttribute('small-size') || this._defaultSmallSize;
}
get _smallMaxSize() {
return this.getAttribute('small-max-size') || this._defaultMaxSize;
}
get _extraSmallSize() {
return this.getAttribute('extra-small-size') || this._defaultExtraSmallSize;
}
get _extraSmallMaxSize() {
return this.getAttribute('extra-small-max-size') || this._defaultMaxSize;
}
get _columnClassPrefix() {
return 'vl-col--';
}
get _pushClassPrefix() {
return 'vl-push--';
}
static __sizeClass(minSize, maxSize, responsiveModifier) {
return `${minSize}-${maxSize}` + (responsiveModifier ? `--${responsiveModifier}` : '');
}
__changeColumnClass(oldValue, newValue) {
this._changeClass(this, oldValue, newValue, this._columnClassPrefix);
}
__changePushClass(oldValue, newValue) {
this._changeClass(this, oldValue, newValue, this._pushClassPrefix);
}
_sizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultSize;
this.__changeColumnClass(VlColumn.__sizeClass(oldValue, this._maxSize), VlColumn.__sizeClass(newValue, this._maxSize));
}
_maxSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultMaxSize;
this.__changeColumnClass(VlColumn.__sizeClass(this._size, oldValue), VlColumn.__sizeClass(this._size, newValue));
}
_mediumSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultMediumSize;
this.__changeColumnClass(VlColumn.__sizeClass(oldValue, this._mediumMaxSize, 'm'), VlColumn.__sizeClass(newValue, this._mediumMaxSize, 'm'));
}
_mediumMaxSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultMaxSize;
this.__changeColumnClass(VlColumn.__sizeClass(this._mediumSize, oldValue, 'm'), VlColumn.__sizeClass(this._mediumSize, newValue, 'm'));
}
_smallSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultSmallSize;
this.__changeColumnClass(VlColumn.__sizeClass(oldValue, this._smallMaxSize, 's'), VlColumn.__sizeClass(newValue, this._smallMaxSize, 's'));
}
_smallMaxSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultMaxSize;
this.__changeColumnClass(VlColumn.__sizeClass(this._smallSize, oldValue, 's'), VlColumn.__sizeClass(this._smallSize, newValue, 's'));
}
_extraSmallSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultExtraSmallSize;
this.__changeColumnClass(VlColumn.__sizeClass(oldValue, this._extraSmallMaxSize, 'xs'), VlColumn.__sizeClass(newValue, this._extraSmallMaxSize, 'xs'));
}
_extraSmallMaxSizeChangedCallback(oldValue, newValue) {
oldValue = oldValue || this._defaultMaxSize;
this.__changeColumnClass(VlColumn.__sizeClass(this._extraSmallSize, oldValue, 'xs'), VlColumn.__sizeClass(this._extraSmallSize, newValue, 'xs'));
}
_pushChangedCallback(oldValue, newValue) {
this.__changePushClass(VlColumn.__sizeClass(oldValue, this._maxSize), VlColumn.__sizeClass(newValue, this._maxSize));
}
_configureDefaults() {
if (!this.hasAttribute('size')) {
this._sizeChangedCallback(null, this._size);
}
if (!this.hasAttribute('medium-size')) {
this._mediumSizeChangedCallback(null, this._mediumSize);
}
if (!this.hasAttribute('small-size')) {
this._smallSizeChangedCallback(null, this._smallSize);
}
if (!this.hasAttribute('extra-small-size')) {
this._extraSmallSizeChangedCallback(null, this._extraSmallSize);
}
}
}
define('vl-region', VlRegion, {extends: 'section'});
define('vl-layout', VlLayout, {extends: 'div'});
define('vl-grid', VlGrid, {extends: 'div'});
define('vl-column', VlColumn, {extends: 'div'});