carbon-components-angular
Version:
Next generation components
165 lines • 18.7 kB
JavaScript
import { Directive, HostBinding, Input, Optional } from "@angular/core";
import { Subscription } from "rxjs";
import * as i0 from "@angular/core";
import * as i1 from "./grid.service";
export class ColumnDirective {
constructor(gridService) {
this.gridService = gridService;
this.class = "";
/**
* Defines columns width for specified breakpoint
* Accepts the following formats:
* - {[breakpoint]: number}
* - {[breakpoint]: "auto"} - css only
* - {[breakpoint]: {[start|end]: number}} - css only
*
* Example:
* <div cdsCol [columnNumbers]={md: 3, lg: 4}></div>
*/
this.columnNumbers = {};
/**
* Defines columns offset, which increases the left margin of the column.
* This field will only work with flexbox grid.
*
* Accepts the following formats:
* - {[breakpoint]: number}
*
* Example:
* <div cdsCol [offsets]={md: 3, lg: 4}></div>
*/
this.offsets = {};
/**
* Set to `true` to use css grid column hang class
* This will only work when `isCss` property is set to true
*
* Useful when trying to align content across css grid/subgrid
*/
this.columnHang = false;
this._columnClasses = [];
this.isCssGrid = false;
this.subscription = new Subscription();
}
get columnClasses() {
return this._columnClasses.join(" ");
}
set columnClasses(classes) {
this._columnClasses = classes.split(" ");
}
ngOnInit() {
if (this.gridService) {
this.subscription = this.gridService.gridObservable.subscribe((isCssGrid) => {
this.isCssGrid = isCssGrid;
this.updateColumnClasses();
});
}
else {
this.updateColumnClasses();
}
}
ngOnChanges() {
this.updateColumnClasses();
}
/**
* Unsubscribe from subscription
*/
ngOnDestroy() {
this.subscription.unsubscribe();
}
updateColumnClasses() {
try {
this._columnClasses = [];
const columnKeys = Object.keys(this.columnNumbers);
// Assign classes based on the type of grid used.
if (this.isCssGrid) {
// Default css grid class
this._columnClasses.push("cds--css-grid-column");
if (this.columnHang) {
this._columnClasses.push("cds--grid-column-hang");
}
columnKeys.forEach(key => {
/**
* Passing in `auto` to a breakpoint as such: {'md': 'auto'}
* will assign the element which will automatically determine the width of the column
* for the breakpoint passed
*/
if (this.columnNumbers[key] === "auto") {
this._columnClasses.push(`cds--${key}:col-span-auto`);
}
else if (typeof this.columnNumbers[key] === "object") {
/**
* In css grid, objects can be passed to the keys in the following format:
* {'md': {'start': 3}}
*
* These objects are used to position the column
*/
if (this.columnNumbers[key]["start"]) {
// col-start is simular equivalent of flex offset
this._columnClasses.push(`cds--${key}:col-start-${this.columnNumbers[key].start}`);
}
if (this.columnNumbers[key]["end"]) {
this._columnClasses.push(`cds--${key}:col-end-${this.columnNumbers[key].end}`);
}
if (this.columnNumbers[key]["span"]) {
this._columnClasses.push(`cds--${key}:col-span-${this.columnNumbers[key].span}`);
}
}
else {
this._columnClasses.push(`cds--${key}:col-span-${this.columnNumbers[key]}`);
}
});
Object.keys(this.offsets).forEach(key => {
this._columnClasses.push(`cds--${key}:col-start${this.offsets[key] + 1}`);
});
}
else {
// Set column classes for flex grid
if (columnKeys.length <= 0) {
this._columnClasses.push("cds--col");
}
columnKeys.forEach(key => {
if (this.columnNumbers[key] === "nobreak") {
this._columnClasses.push(`cds--col-${key}`);
}
else {
this._columnClasses.push(`cds--col-${key}-${this.columnNumbers[key]}`);
}
});
Object.keys(this.offsets).forEach(key => {
this._columnClasses.push(`cds--offset-${key}-${this.offsets[key]}`);
});
}
}
catch (err) {
console.error(`Malformed \`offsets\` or \`columnNumbers\`: ${err}`);
}
/**
* Append the classes passed so they aren't overriden when we set the column classes
* from host binding
*/
if (this.class) {
this._columnClasses.push(this.class);
}
}
}
ColumnDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ColumnDirective, deps: [{ token: i1.GridService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
ColumnDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ColumnDirective, selector: "[cdsCol], [ibmCol]", inputs: { class: "class", columnNumbers: "columnNumbers", offsets: "offsets", columnHang: "columnHang" }, host: { properties: { "class": "this.columnClasses" } }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ColumnDirective, decorators: [{
type: Directive,
args: [{
selector: "[cdsCol], [ibmCol]"
}]
}], ctorParameters: function () { return [{ type: i1.GridService, decorators: [{
type: Optional
}] }]; }, propDecorators: { columnClasses: [{
type: HostBinding,
args: ["class"]
}], class: [{
type: Input
}], columnNumbers: [{
type: Input
}], offsets: [{
type: Input
}], columnHang: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmlkL2NvbHVtbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFNcEMsTUFBTSxPQUFPLGVBQWU7SUFnRDNCLFlBQWdDLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBdkMvQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRXBCOzs7Ozs7Ozs7V0FTRztRQUNNLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBRTVCOzs7Ozs7Ozs7V0FTRztRQUNNLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFdEI7Ozs7O1dBS0c7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRWxCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBRWhDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRWlCLENBQUM7SUEvQzVELElBQ0ksYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBMkNELFFBQVE7UUFDUCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFrQixFQUFFLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxTQUFT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SztnQkFZRyxhQUFhO3NCQUFyQixLQUFLO2dCQVlHLE9BQU87c0JBQWYsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGlyZWN0aXZlLFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdE9uQ2hhbmdlcyxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi9ncmlkLnNlcnZpY2VcIjtcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiBcIltjZHNDb2xdLCBbaWJtQ29sXVwiXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzc1wiKVxuXHRnZXQgY29sdW1uQ2xhc3NlcygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9jb2x1bW5DbGFzc2VzLmpvaW4oXCIgXCIpO1xuXHR9XG5cdHNldCBjb2x1bW5DbGFzc2VzKGNsYXNzZXM6IHN0cmluZykge1xuXHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMgPSBjbGFzc2VzLnNwbGl0KFwiIFwiKTtcblx0fVxuXG5cdEBJbnB1dCgpIGNsYXNzID0gXCJcIjtcblxuXHQvKipcblx0ICogRGVmaW5lcyBjb2x1bW5zIHdpZHRoIGZvciBzcGVjaWZpZWQgYnJlYWtwb2ludFxuXHQgKiBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0czpcblx0ICogLSB7W2JyZWFrcG9pbnRdOiBudW1iZXJ9XG5cdCAqIC0ge1ticmVha3BvaW50XTogXCJhdXRvXCJ9IC0gY3NzIG9ubHlcblx0ICogLSB7W2JyZWFrcG9pbnRdOiB7W3N0YXJ0fGVuZF06IG51bWJlcn19IC0gY3NzIG9ubHlcblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogPGRpdiBjZHNDb2wgW2NvbHVtbk51bWJlcnNdPXttZDogMywgbGc6IDR9PjwvZGl2PlxuXHQgKi9cblx0QElucHV0KCkgY29sdW1uTnVtYmVycyA9IHt9O1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGNvbHVtbnMgb2Zmc2V0LCB3aGljaCBpbmNyZWFzZXMgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBjb2x1bW4uXG5cdCAqIFRoaXMgZmllbGQgd2lsbCBvbmx5IHdvcmsgd2l0aCBmbGV4Ym94IGdyaWQuXG5cdCAqXG5cdCAqIEFjY2VwdHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzOlxuXHQgKiAtIHtbYnJlYWtwb2ludF06IG51bWJlcn1cblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogPGRpdiBjZHNDb2wgW29mZnNldHNdPXttZDogMywgbGc6IDR9PjwvZGl2PlxuXHQgKi9cblx0QElucHV0KCkgb2Zmc2V0cyA9IHt9O1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIHVzZSBjc3MgZ3JpZCBjb2x1bW4gaGFuZyBjbGFzc1xuXHQgKiBUaGlzIHdpbGwgb25seSB3b3JrIHdoZW4gYGlzQ3NzYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZVxuXHQgKlxuXHQgKiBVc2VmdWwgd2hlbiB0cnlpbmcgdG8gYWxpZ24gY29udGVudCBhY3Jvc3MgY3NzIGdyaWQvc3ViZ3JpZFxuXHQgKi9cblx0QElucHV0KCkgY29sdW1uSGFuZyA9IGZhbHNlO1xuXG5cdHByb3RlY3RlZCBfY29sdW1uQ2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuXHRwcml2YXRlIGlzQ3NzR3JpZCA9IGZhbHNlO1xuXHRwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuXHRjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSkge31cblxuXHRuZ09uSW5pdCgpIHtcblx0XHRpZiAodGhpcy5ncmlkU2VydmljZSkge1xuXHRcdFx0dGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdyaWRTZXJ2aWNlLmdyaWRPYnNlcnZhYmxlLnN1YnNjcmliZSgoaXNDc3NHcmlkOiBib29sZWFuKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNDc3NHcmlkID0gaXNDc3NHcmlkO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbkNsYXNzZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNvbHVtbkNsYXNzZXMoKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcygpIHtcblx0XHR0aGlzLnVwZGF0ZUNvbHVtbkNsYXNzZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnN1YnNjcmliZSBmcm9tIHN1YnNjcmlwdGlvblxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlQ29sdW1uQ2xhc3NlcygpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5fY29sdW1uQ2xhc3NlcyA9IFtdO1xuXHRcdFx0Y29uc3QgY29sdW1uS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1uTnVtYmVycyk7XG5cblx0XHRcdC8vIEFzc2lnbiBjbGFzc2VzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGdyaWQgdXNlZC5cblx0XHRcdGlmICh0aGlzLmlzQ3NzR3JpZCkge1xuXHRcdFx0XHQvLyBEZWZhdWx0IGNzcyBncmlkIGNsYXNzXG5cdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChcImNkcy0tY3NzLWdyaWQtY29sdW1uXCIpO1xuXHRcdFx0XHRpZiAodGhpcy5jb2x1bW5IYW5nKSB7XG5cdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKFwiY2RzLS1ncmlkLWNvbHVtbi1oYW5nXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sdW1uS2V5cy5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogUGFzc2luZyBpbiBgYXV0b2AgdG8gYSBicmVha3BvaW50IGFzIHN1Y2g6IHsnbWQnOiAnYXV0byd9XG5cdFx0XHRcdFx0ICogd2lsbCBhc3NpZ24gdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGNvbHVtblxuXHRcdFx0XHRcdCAqIGZvciB0aGUgYnJlYWtwb2ludCBwYXNzZWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRpZiAodGhpcy5jb2x1bW5OdW1iZXJzW2tleV0gPT09IFwiYXV0b1wiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goYGNkcy0tJHtrZXl9OmNvbC1zcGFuLWF1dG9gKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbHVtbk51bWJlcnNba2V5XSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQgKiBJbiBjc3MgZ3JpZCwgb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBrZXlzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuXHRcdFx0XHRcdFx0ICogeydtZCc6IHsnc3RhcnQnOiAzfX1cblx0XHRcdFx0XHRcdCAqXG5cdFx0XHRcdFx0XHQgKiBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIHRvIHBvc2l0aW9uIHRoZSBjb2x1bW5cblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuY29sdW1uTnVtYmVyc1trZXldW1wic3RhcnRcIl0pIHtcblx0XHRcdFx0XHRcdFx0Ly8gY29sLXN0YXJ0IGlzIHNpbXVsYXIgZXF1aXZhbGVudCBvZiBmbGV4IG9mZnNldFxuXHRcdFx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goYGNkcy0tJHtrZXl9OmNvbC1zdGFydC0ke3RoaXMuY29sdW1uTnVtYmVyc1trZXldLnN0YXJ0fWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuY29sdW1uTnVtYmVyc1trZXldW1wiZW5kXCJdKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS0ke2tleX06Y29sLWVuZC0ke3RoaXMuY29sdW1uTnVtYmVyc1trZXldLmVuZH1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh0aGlzLmNvbHVtbk51bWJlcnNba2V5XVtcInNwYW5cIl0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLSR7a2V5fTpjb2wtc3Bhbi0ke3RoaXMuY29sdW1uTnVtYmVyc1trZXldLnNwYW59YCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS0ke2tleX06Y29sLXNwYW4tJHt0aGlzLmNvbHVtbk51bWJlcnNba2V5XX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMub2Zmc2V0cykuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS0ke2tleX06Y29sLXN0YXJ0JHt0aGlzLm9mZnNldHNba2V5XSArIDF9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gU2V0IGNvbHVtbiBjbGFzc2VzIGZvciBmbGV4IGdyaWRcblx0XHRcdFx0aWYgKGNvbHVtbktleXMubGVuZ3RoIDw9IDApIHtcblx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goXCJjZHMtLWNvbFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbHVtbktleXMuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmNvbHVtbk51bWJlcnNba2V5XSA9PT0gXCJub2JyZWFrXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS1jb2wtJHtrZXl9YCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS1jb2wtJHtrZXl9LSR7dGhpcy5jb2x1bW5OdW1iZXJzW2tleV19YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLm9mZnNldHMpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goYGNkcy0tb2Zmc2V0LSR7a2V5fS0ke3RoaXMub2Zmc2V0c1trZXldfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoYE1hbGZvcm1lZCBcXGBvZmZzZXRzXFxgIG9yIFxcYGNvbHVtbk51bWJlcnNcXGA6ICR7ZXJyfWApO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEFwcGVuZCB0aGUgY2xhc3NlcyBwYXNzZWQgc28gdGhleSBhcmVuJ3Qgb3ZlcnJpZGVuIHdoZW4gd2Ugc2V0IHRoZSBjb2x1bW4gY2xhc3Nlc1xuXHRcdCAqIGZyb20gaG9zdCBiaW5kaW5nXG5cdFx0ICovXG5cdFx0aWYgKHRoaXMuY2xhc3MpIHtcblx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaCh0aGlzLmNsYXNzKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==