coreui-angular-ex
Version:
CoreUI Components Library for Angular
56 lines (52 loc) • 1.78 kB
text/typescript
import { Directive, HostBinding, Input } from '@angular/core';
import { Border, BorderColor, IBorderElement, BorderWidth } from './border.type';
({
selector: '[cBorder]',
standalone: true
})
export class BorderDirective {
/**
* Add or remove an element’s borders
* @type Border
*/
('cBorder') border: Border = true;
('class')
get hostClasses(): any {
if ( typeof this.border === 'boolean' ) {
return { border: true };
}
if ( typeof this.border === 'number' || typeof this.border === 'string' ) {
return {
border: true,
[`border-${this.border}`]: true
};
}
if ( typeof this.border === 'object' ) {
const borderObj = { top: undefined, end: undefined, bottom: undefined, start: undefined, color: undefined, ...this.border };
// @ts-ignore
const keys = Object.keys(borderObj).filter(key => borderObj[key] !== undefined);
const classes = {};
keys.forEach(key => {
// @ts-ignore
const val = borderObj[key];
if ( typeof val === 'boolean') {
// @ts-ignore
classes[`border-${key}`] = true;
} else if ( typeof val === 'number' || typeof val === 'string' ) {
// @ts-ignore
classes[`border-${key}-${val}`] = true;
} else if ( typeof val === 'object' ) {
if ('color' in val) {
// @ts-ignore
classes[`border-${key}-${val.color}`] = true;
}
if ('width' in val) {
// @ts-ignore
classes[`border-${key}-${val.width}`] = true;
}
}
});
return Object.entries(classes).length === 0 ? {border: false} : classes;
}
}
}