coreui-angular-ex
Version:
CoreUI Components Library for Angular
56 lines (46 loc) • 1.71 kB
text/typescript
import { Directive, HostBinding, Input } from '@angular/core';
import { BreakpointInfix } from '../coreui.types';
import { GutterBreakpoints, Gutters, IGutter, IGutterObject } from './gutter.type';
({
// eslint-disable-next-line @angular-eslint/directive-selector
selector: '[gutter]',
standalone: true
})
export class GutterDirective implements IGutter {
/**
* Define padding between columns to space and align content responsively in the Bootstrap grid system.
*/
() gutter: (IGutterObject | GutterBreakpoints | Gutters) = {};
constructor() { }
('class')
get hostClasses(): any {
let gutterClass: any;
if (typeof this.gutter === 'number') {
gutterClass = GutterDirective.getGutterClasses({ g: this.gutter });
return gutterClass;
}
{
// @ts-ignore
const { g, gx, gy } = { ...this.gutter };
gutterClass = GutterDirective.getGutterClasses({ g, gx, gy });
}
Object.keys(BreakpointInfix).forEach(key => {
// @ts-ignore
const gutter = this.gutter[key] ? { ...this.gutter[key] } : undefined;
if (gutter) {
const classes = GutterDirective.getGutterClasses(gutter, key);
gutterClass = { ...gutterClass, ...classes };
}
});
return gutterClass;
}
private static getGutterClasses(gutter: IGutterObject, breakpoint?: string): any {
const { g, gx, gy } = { ...gutter };
const infix = breakpoint ? `-${breakpoint}` : '';
return {
[`g${infix}-${g}`]: typeof g === 'number',
[`gx${infix}-${gx}`]: typeof gx === 'number',
[`gy${infix}-${gy}`]: typeof gy === 'number'
};
}
}