UNPKG

carbon-components-angular

Version:
165 lines 18.6 kB
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]}`); }); } 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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QWE7c0JBQXJCLEtBQUs7Z0JBWUcsT0FBTztzQkFBZixLQUFLO2dCQVFHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREaXJlY3RpdmUsXG5cdEhvc3RCaW5kaW5nLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0T3B0aW9uYWxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gXCIuL2dyaWQuc2VydmljZVwiO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IFwiW2Nkc0NvbF0sIFtpYm1Db2xdXCJcbn0pXG5leHBvcnQgY2xhc3MgQ29sdW1uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG5cdGdldCBjb2x1bW5DbGFzc2VzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbHVtbkNsYXNzZXMuam9pbihcIiBcIik7XG5cdH1cblx0c2V0IGNvbHVtbkNsYXNzZXMoY2xhc3Nlczogc3RyaW5nKSB7XG5cdFx0dGhpcy5fY29sdW1uQ2xhc3NlcyA9IGNsYXNzZXMuc3BsaXQoXCIgXCIpO1xuXHR9XG5cblx0QElucHV0KCkgY2xhc3MgPSBcIlwiO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGNvbHVtbnMgd2lkdGggZm9yIHNwZWNpZmllZCBicmVha3BvaW50XG5cdCAqIEFjY2VwdHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzOlxuXHQgKiAtIHtbYnJlYWtwb2ludF06IG51bWJlcn1cblx0ICogLSB7W2JyZWFrcG9pbnRdOiBcImF1dG9cIn0gLSBjc3Mgb25seVxuXHQgKiAtIHtbYnJlYWtwb2ludF06IHtbc3RhcnR8ZW5kXTogbnVtYmVyfX0gLSBjc3Mgb25seVxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiA8ZGl2IGNkc0NvbCBbY29sdW1uTnVtYmVyc109e21kOiAzLCBsZzogNH0+PC9kaXY+XG5cdCAqL1xuXHRASW5wdXQoKSBjb2x1bW5OdW1iZXJzID0ge307XG5cblx0LyoqXG5cdCAqIERlZmluZXMgY29sdW1ucyBvZmZzZXQsIHdoaWNoIGluY3JlYXNlcyB0aGUgbGVmdCBtYXJnaW4gb2YgdGhlIGNvbHVtbi5cblx0ICogVGhpcyBmaWVsZCB3aWxsIG9ubHkgd29yayB3aXRoIGZsZXhib3ggZ3JpZC5cblx0ICpcblx0ICogQWNjZXB0cyB0aGUgZm9sbG93aW5nIGZvcm1hdHM6XG5cdCAqIC0ge1ticmVha3BvaW50XTogbnVtYmVyfVxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiA8ZGl2IGNkc0NvbCBbb2Zmc2V0c109e21kOiAzLCBsZzogNH0+PC9kaXY+XG5cdCAqL1xuXHRASW5wdXQoKSBvZmZzZXRzID0ge307XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gdXNlIGNzcyBncmlkIGNvbHVtbiBoYW5nIGNsYXNzXG5cdCAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgd2hlbiBgaXNDc3NgIHByb3BlcnR5IGlzIHNldCB0byB0cnVlXG5cdCAqXG5cdCAqIFVzZWZ1bCB3aGVuIHRyeWluZyB0byBhbGlnbiBjb250ZW50IGFjcm9zcyBjc3MgZ3JpZC9zdWJncmlkXG5cdCAqL1xuXHRASW5wdXQoKSBjb2x1bW5IYW5nID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIF9jb2x1bW5DbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdHByaXZhdGUgaXNDc3NHcmlkID0gZmFsc2U7XG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG5cdGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlKSB7fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICh0aGlzLmdyaWRTZXJ2aWNlKSB7XG5cdFx0XHR0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFNlcnZpY2UuZ3JpZE9ic2VydmFibGUuc3Vic2NyaWJlKChpc0Nzc0dyaWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0dGhpcy5pc0Nzc0dyaWQgPSBpc0Nzc0dyaWQ7XG5cdFx0XHRcdHRoaXMudXBkYXRlQ29sdW1uQ2xhc3NlcygpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlQ29sdW1uQ2xhc3NlcygpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25DaGFuZ2VzKCkge1xuXHRcdHRoaXMudXBkYXRlQ29sdW1uQ2xhc3NlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVuc3Vic2NyaWJlIGZyb20gc3Vic2NyaXB0aW9uXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVDb2x1bW5DbGFzc2VzKCkge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzID0gW107XG5cdFx0XHRjb25zdCBjb2x1bW5LZXlzID0gT2JqZWN0LmtleXModGhpcy5jb2x1bW5OdW1iZXJzKTtcblxuXHRcdFx0Ly8gQXNzaWduIGNsYXNzZXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgZ3JpZCB1c2VkLlxuXHRcdFx0aWYgKHRoaXMuaXNDc3NHcmlkKSB7XG5cdFx0XHRcdC8vIERlZmF1bHQgY3NzIGdyaWQgY2xhc3Ncblx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKFwiY2RzLS1jc3MtZ3JpZC1jb2x1bW5cIik7XG5cdFx0XHRcdGlmICh0aGlzLmNvbHVtbkhhbmcpIHtcblx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goXCJjZHMtLWdyaWQtY29sdW1uLWhhbmdcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb2x1bW5LZXlzLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBQYXNzaW5nIGluIGBhdXRvYCB0byBhIGJyZWFrcG9pbnQgYXMgc3VjaDogeydtZCc6ICdhdXRvJ31cblx0XHRcdFx0XHQgKiB3aWxsIGFzc2lnbiB0aGUgZWxlbWVudCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uXG5cdFx0XHRcdFx0ICogZm9yIHRoZSBicmVha3BvaW50IHBhc3NlZFxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdGlmICh0aGlzLmNvbHVtbk51bWJlcnNba2V5XSA9PT0gXCJhdXRvXCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS0ke2tleX06Y29sLXNwYW4tYXV0b2ApO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY29sdW1uTnVtYmVyc1trZXldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHRcdCAqIEluIGNzcyBncmlkLCBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGtleXMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG5cdFx0XHRcdFx0XHQgKiB7J21kJzogeydzdGFydCc6IDN9fVxuXHRcdFx0XHRcdFx0ICpcblx0XHRcdFx0XHRcdCAqIFRoZXNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcG9zaXRpb24gdGhlIGNvbHVtblxuXHRcdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5jb2x1bW5OdW1iZXJzW2tleV1bXCJzdGFydFwiXSkge1xuXHRcdFx0XHRcdFx0XHQvLyBjb2wtc3RhcnQgaXMgc2ltdWxhciBlcXVpdmFsZW50IG9mIGZsZXggb2Zmc2V0XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS0ke2tleX06Y29sLXN0YXJ0LSR7dGhpcy5jb2x1bW5OdW1iZXJzW2tleV0uc3RhcnR9YCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5jb2x1bW5OdW1iZXJzW2tleV1bXCJlbmRcIl0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLSR7a2V5fTpjb2wtZW5kLSR7dGhpcy5jb2x1bW5OdW1iZXJzW2tleV0uZW5kfWApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuY29sdW1uTnVtYmVyc1trZXldW1wic3BhblwiXSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9jb2x1bW5DbGFzc2VzLnB1c2goYGNkcy0tJHtrZXl9OmNvbC1zcGFuLSR7dGhpcy5jb2x1bW5OdW1iZXJzW2tleV0uc3Bhbn1gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLSR7a2V5fTpjb2wtc3Bhbi0ke3RoaXMuY29sdW1uTnVtYmVyc1trZXldfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5vZmZzZXRzKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLSR7a2V5fTpjb2wtc3RhcnQtJHt0aGlzLm9mZnNldHNba2V5XX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBTZXQgY29sdW1uIGNsYXNzZXMgZm9yIGZsZXggZ3JpZFxuXHRcdFx0XHRpZiAoY29sdW1uS2V5cy5sZW5ndGggPD0gMCkge1xuXHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChcImNkcy0tY29sXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sdW1uS2V5cy5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuY29sdW1uTnVtYmVyc1trZXldID09PSBcIm5vYnJlYWtcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLWNvbC0ke2tleX1gKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKGBjZHMtLWNvbC0ke2tleX0tJHt0aGlzLmNvbHVtbk51bWJlcnNba2V5XX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMub2Zmc2V0cykuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2NvbHVtbkNsYXNzZXMucHVzaChgY2RzLS1vZmZzZXQtJHtrZXl9LSR7dGhpcy5vZmZzZXRzW2tleV19YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgTWFsZm9ybWVkIFxcYG9mZnNldHNcXGAgb3IgXFxgY29sdW1uTnVtYmVyc1xcYDogJHtlcnJ9YCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQXBwZW5kIHRoZSBjbGFzc2VzIHBhc3NlZCBzbyB0aGV5IGFyZW4ndCBvdmVycmlkZW4gd2hlbiB3ZSBzZXQgdGhlIGNvbHVtbiBjbGFzc2VzXG5cdFx0ICogZnJvbSBob3N0IGJpbmRpbmdcblx0XHQgKi9cblx0XHRpZiAodGhpcy5jbGFzcykge1xuXHRcdFx0dGhpcy5fY29sdW1uQ2xhc3Nlcy5wdXNoKHRoaXMuY2xhc3MpO1xuXHRcdH1cblx0fVxufVxuIl19