UNPKG

ngx-mat-lib

Version:

A bunch of utilities and components to use in your Angular 7+ apps!

171 lines (170 loc) 16 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, ComponentFactoryResolver, Input, ViewContainerRef, ViewEncapsulation } from "@angular/core"; import { XmatLegendItemContentComponent } from "./xmat-legend-item-content.component"; import { XmatLegendLayouts } from "./xmat-legend.model"; import { coerceBooleanProperty } from "@angular/cdk/coercion"; import { each } from "lodash"; /** @type {?} */ const xmatLegendDefaultCols = 4; export class XmatLegendComponent { /** * @param {?} _resolver * @param {?} _viewContainerRef */ constructor(_resolver, _viewContainerRef) { this._resolver = _resolver; this._viewContainerRef = _viewContainerRef; this.layout = XmatLegendLayouts.GRID; this.itemStyle = { "flex": `1 0 ${100 / xmatLegendDefaultCols}%` }; this._columns = xmatLegendDefaultCols; this._fillColumns = !0; this._itemContentClass = XmatLegendItemContentComponent; } /** * @return {?} */ get fillColumns() { return this._fillColumns; } /** * @param {?} newValue * @return {?} */ set fillColumns(newValue) { this._fillColumns = coerceBooleanProperty(newValue); } /** * @return {?} */ get columns() { return this._columns; } /** * @param {?} newValue * @return {?} */ set columns(newValue) { if (!isNaN(+newValue) && +newValue > 0) { this._columns = Math.floor(+newValue); this._updateItemStyle(); this._legendInit(); } else { this._columns = xmatLegendDefaultCols; console.error("XmatLegend invalid length provided, setting to default", newValue); } } /** * @return {?} */ get items() { return this._items; } /** * @param {?} newValue * @return {?} */ set items(newValue) { this._items = newValue; this._legendInit(); } /** * @return {?} */ _constructContent() { /** @type {?} */ const factory = this._resolver.resolveComponentFactory(this._itemContentClass); this._itemContentRef = this._viewContainerRef.createComponent(factory); return /** @type {?} */ (this._itemContentRef.instance); } /** * @return {?} */ _legendInit() { if (!Array.isArray(this.items)) { console.warn("XmatLegend list was not ready. Init prevented."); return !1; } if (this._fillColumns) { /** @type {?} */ const fillerCount = (this._columns - (this.items.length % this._columns)) % this._columns; each(new Array(fillerCount), () => { this.items.push(/** @type {?} */ ({ content: `<span style="display: none"></span>`, className: "xmat-grid-fill" })); }); } each(this.items, (item) => { if (typeof item.content === "string") { /** @type {?} */ const tmpCompInstance = this._constructContent(); // this._xmatFunctions.logWithStyle("XmatLegend", "Was String Content", "#006699", item.content); tmpCompInstance.content = item.content; item.content = tmpCompInstance; } else if (item.content instanceof XmatLegendItemContentComponent) { // Valid // this._xmatFunctions.logWithStyle("XmatLegend", "Was Instance Content", "#336699", item.content); } else { // this._xmatFunctions.logWithStyle("XmatLegend", "Was INVALID Content", "#CC0000", item.content); // Hide broken ones? } }); } /** * @return {?} */ _updateItemStyle() { this.itemStyle = { "flex": `1 0 ${100 / this._columns}%` }; return this.itemStyle; } } XmatLegendComponent.decorators = [ { type: Component, args: [{ selector: "xmat-legend", template: "<ul class=\"xmat-legend xmat-legend-{{layout}}\" *ngIf=\"items?.length\">\n <li [ngStyle]=\"itemStyle\" class=\"{{item.className}}\" *ngFor=\"let item of items\">\n <div class=\"xmat-legend-color\" [style.backgroundColor]=\"item.color\" *ngIf=\"!!item.color\"></div>\n <img class=\"xmat-legend-image\" *ngIf=\"!!item?.image\" [src]=\"item.image\" />\n <div *ngTemplateOutlet=\"item.content.xMatLegendItemContent\">\n\n </div>\n </li>\n</ul>\n", encapsulation: ViewEncapsulation.None, styles: ["ul.xmat-legend{list-style-type:none;padding:0;margin:0}ul.xmat-legend.xmat-legend-grid{display:-webkit-box;display:flex;flex-wrap:wrap}ul.xmat-legend.xmat-legend-grid>li{padding:8px;margin:0;box-sizing:border-box}ul.xmat-legend.xmat-legend-grid>li.xmat-grid-fill{padding:0}ul.xmat-legend>li{line-height:24px;font-size:12px;margin:5px 10px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}ul.xmat-legend>li>*{margin-right:8px}ul.xmat-legend>li>div.xmat-legend-color{width:8px;height:8px;flex-shrink:0}ul.xmat-legend>li>img.xmat-legend-image{flex-shrink:0;height:24px}"] }] } ]; /** @nocollapse */ XmatLegendComponent.ctorParameters = () => [ { type: ComponentFactoryResolver }, { type: ViewContainerRef } ]; XmatLegendComponent.propDecorators = { fillColumns: [{ type: Input }], columns: [{ type: Input }], items: [{ type: Input }], layout: [{ type: Input }] }; if (false) { /** @type {?} */ XmatLegendComponent.prototype.layout; /** @type {?} */ XmatLegendComponent.prototype.itemStyle; /** @type {?} */ XmatLegendComponent.prototype._columns; /** @type {?} */ XmatLegendComponent.prototype._fillColumns; /** @type {?} */ XmatLegendComponent.prototype._items; /** @type {?} */ XmatLegendComponent.prototype._itemContentClass; /** @type {?} */ XmatLegendComponent.prototype._itemContentRef; /** @type {?} */ XmatLegendComponent.prototype._resolver; /** @type {?} */ XmatLegendComponent.prototype._viewContainerRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1sZWdlbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdC1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy94bWF0LWxlZ2VuZC94bWF0LWxlZ2VuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BGLE9BQU8sRUFBbUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDOztBQUU1QixNQUFNLHFCQUFxQixHQUFXLENBQUMsQ0FBQztBQVN4QyxNQUFNLE9BQU8sbUJBQW1COzs7OztJQW1ENUIsWUFBb0IsU0FBbUMsRUFDbkM7UUFEQSxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUNuQyxzQkFBaUIsR0FBakIsaUJBQWlCO1FBYnJDLGNBQW9DLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUUzRCxpQkFBaUM7WUFDN0IsTUFBTSxFQUFFLE9BQU8sR0FBRyxHQUFHLHFCQUFxQixHQUFHO1NBQ2hELENBQUM7d0JBRXlCLHFCQUFxQjs0QkFDaEIsQ0FBQyxDQUFDO2lDQUVOLDhCQUE4QjtLQU16RDs7OztJQW5ERCxJQUNJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7O0lBRUQsSUFBSSxXQUFXLENBQUMsUUFBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2RDs7OztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8s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LGdCQUFnQjs7OzBCQXVCZixLQUFLO3NCQVNMLEtBQUs7b0JBaUJMLEtBQUs7cUJBVUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgSW5wdXQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuLy9cbmltcG9ydCB7WG1hdExlZ2VuZEl0ZW1Db250ZW50Q29tcG9uZW50fSBmcm9tIFwiLi94bWF0LWxlZ2VuZC1pdGVtLWNvbnRlbnQuY29tcG9uZW50XCI7XG5pbXBvcnQge1htYXRMZWdlbmRJdGVtLCBYbWF0TGVnZW5kTGF5b3V0LCBYbWF0TGVnZW5kTGF5b3V0c30gZnJvbSBcIi4veG1hdC1sZWdlbmQubW9kZWxcIjtcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQge1htYXRMZWdlbmRJdGVtU3R5bGV9IGZyb20gXCIuL3htYXQtbGVnZW5kLm1vZGVsXCI7XG4vL1xuaW1wb3J0IHtlYWNofSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHhtYXRMZWdlbmREZWZhdWx0Q29sczogbnVtYmVyID0gNDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwieG1hdC1sZWdlbmRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3htYXQtbGVnZW5kLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3htYXQtbGVnZW5kLmNvbXBvbmVudC5zY3NzXCJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5cbmV4cG9ydCBjbGFzcyBYbWF0TGVnZW5kQ29tcG9uZW50IHtcblxuXG4gICAgQElucHV0KClcbiAgICBnZXQgZmlsbENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsQ29sdW1ucztcbiAgICB9XG5cbiAgICBzZXQgZmlsbENvbHVtbnMobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZmlsbENvbHVtbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgc2V0IGNvbHVtbnMobmV3VmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIWlzTmFOKCtuZXdWYWx1ZSkgJiYgK25ld1ZhbHVlID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IE1hdGguZmxvb3IoK25ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1TdHlsZSgpO1xuICAgICAgICAgICAgdGhpcy5fbGVnZW5kSW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IHhtYXRMZWdlbmREZWZhdWx0Q29scztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJYbWF0TGVnZW5kIGludmFsaWQgbGVuZ3RoIHByb3ZpZGVkLCBzZXR0aW5nIHRvIGRlZmF1bHRcIiwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXRlbXMoKTogWG1hdExlZ2VuZEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBzZXQgaXRlbXMobmV3VmFsdWU6IFhtYXRMZWdlbmRJdGVtW10pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5fbGVnZW5kSW5pdCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxheW91dDogWG1hdExlZ2VuZExheW91dCA9IFhtYXRMZWdlbmRMYXlvdXRzLkdSSUQ7XG5cbiAgICBpdGVtU3R5bGU6IFhtYXRMZWdlbmRJdGVtU3R5bGUgPSB7XG4gICAgICAgIFwiZmxleFwiOiBgMSAwICR7MTAwIC8geG1hdExlZ2VuZERlZmF1bHRDb2xzfSVgXG4gICAgfTtcblxuICAgIHByaXZhdGUgX2NvbHVtbnM6IG51bWJlciA9IHhtYXRMZWdlbmREZWZhdWx0Q29scztcbiAgICBwcml2YXRlIF9maWxsQ29sdW1uczogYm9vbGVhbiA9ICEwO1xuICAgIHByaXZhdGUgX2l0ZW1zOiBYbWF0TGVnZW5kSXRlbVtdO1xuICAgIHByaXZhdGUgX2l0ZW1Db250ZW50Q2xhc3MgPSBYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfaXRlbUNvbnRlbnRSZWY6IENvbXBvbmVudFJlZjxYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RDb250ZW50KCk6IFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLl9pdGVtQ29udGVudENsYXNzKTtcbiAgICAgICAgdGhpcy5faXRlbUNvbnRlbnRSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1Db250ZW50UmVmLmluc3RhbmNlIGFzIFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sZWdlbmRJbml0KCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlhtYXRMZWdlbmQgbGlzdCB3YXMgbm90IHJlYWR5LiBJbml0IHByZXZlbnRlZC5cIik7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2ZpbGxDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxsZXJDb3VudCA9ICh0aGlzLl9jb2x1bW5zIC0gKHRoaXMuaXRlbXMubGVuZ3RoICUgdGhpcy5fY29sdW1ucykpICUgdGhpcy5fY29sdW1ucztcbiAgICAgICAgICAgIGVhY2gobmV3IEFycmF5KGZpbGxlckNvdW50KSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogYDxzcGFuIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvc3Bhbj5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInhtYXQtZ3JpZC1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBYbWF0TGVnZW5kSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKHRoaXMuaXRlbXMsIChpdGVtOiBYbWF0TGVnZW5kSXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBDb21wSW5zdGFuY2UgPSB0aGlzLl9jb25zdHJ1Y3RDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5feG1hdEZ1bmN0aW9ucy5sb2dXaXRoU3R5bGUoXCJYbWF0TGVnZW5kXCIsIFwiV2FzIFN0cmluZyBDb250ZW50XCIsIFwiIzAwNjY5OVwiLCBpdGVtLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRtcENvbXBJbnN0YW5jZS5jb250ZW50ID0gaXRlbS5jb250ZW50O1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGVudCA9IHRtcENvbXBJbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0uY29udGVudCBpbnN0YW5jZW9mIFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5feG1hdEZ1bmN0aW9ucy5sb2dXaXRoU3R5bGUoXCJYbWF0TGVnZW5kXCIsIFwiV2FzIEluc3RhbmNlIENvbnRlbnRcIiwgXCIjMzM2Njk5XCIsIGl0ZW0uY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl94bWF0RnVuY3Rpb25zLmxvZ1dpdGhTdHlsZShcIlhtYXRMZWdlbmRcIiwgXCJXYXMgSU5WQUxJRCBDb250ZW50XCIsIFwiI0NDMDAwMFwiLCBpdGVtLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIC8vIEhpZGUgYnJva2VuIG9uZXM/XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSXRlbVN0eWxlKCk6IFhtYXRMZWdlbmRJdGVtU3R5bGUge1xuICAgICAgICB0aGlzLml0ZW1TdHlsZSA9IHtcbiAgICAgICAgICAgIFwiZmxleFwiOiBgMSAwICR7MTAwIC8gdGhpcy5fY29sdW1uc30lYFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtU3R5bGU7XG4gICAgfVxuXG59XG4iXX0=