ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
191 lines (190 loc) • 17.1 kB
JavaScript
/**
* @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 {?} */
var xmatLegendDefaultCols = 4;
var XmatLegendComponent = /** @class */ (function () {
function XmatLegendComponent(_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;
}
Object.defineProperty(XmatLegendComponent.prototype, "fillColumns", {
get: /**
* @return {?}
*/
function () {
return this._fillColumns;
},
set: /**
* @param {?} newValue
* @return {?}
*/
function (newValue) {
this._fillColumns = coerceBooleanProperty(newValue);
},
enumerable: true,
configurable: true
});
Object.defineProperty(XmatLegendComponent.prototype, "columns", {
get: /**
* @return {?}
*/
function () {
return this._columns;
},
set: /**
* @param {?} newValue
* @return {?}
*/
function (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);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(XmatLegendComponent.prototype, "items", {
get: /**
* @return {?}
*/
function () {
return this._items;
},
set: /**
* @param {?} newValue
* @return {?}
*/
function (newValue) {
this._items = newValue;
this._legendInit();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
XmatLegendComponent.prototype._constructContent = /**
* @return {?}
*/
function () {
/** @type {?} */
var factory = this._resolver.resolveComponentFactory(this._itemContentClass);
this._itemContentRef = this._viewContainerRef.createComponent(factory);
return /** @type {?} */ (this._itemContentRef.instance);
};
/**
* @return {?}
*/
XmatLegendComponent.prototype._legendInit = /**
* @return {?}
*/
function () {
var _this = this;
if (!Array.isArray(this.items)) {
console.warn("XmatLegend list was not ready. Init prevented.");
return !1;
}
if (this._fillColumns) {
/** @type {?} */
var fillerCount = (this._columns - (this.items.length % this._columns)) % this._columns;
each(new Array(fillerCount), function () {
_this.items.push(/** @type {?} */ ({
content: "<span style=\"display: none\"></span>",
className: "xmat-grid-fill"
}));
});
}
each(this.items, function (item) {
if (typeof item.content === "string") {
/** @type {?} */
var 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 {?}
*/
XmatLegendComponent.prototype._updateItemStyle = /**
* @return {?}
*/
function () {
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 = function () { return [
{ type: ComponentFactoryResolver },
{ type: ViewContainerRef }
]; };
XmatLegendComponent.propDecorators = {
fillColumns: [{ type: Input }],
columns: [{ type: Input }],
items: [{ type: Input }],
layout: [{ type: Input }]
};
return XmatLegendComponent;
}());
export { XmatLegendComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1sZWdlbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdC1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy94bWF0LWxlZ2VuZC94bWF0LWxlZ2VuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BGLE9BQU8sRUFBbUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDOztBQUU1QixJQUFNLHFCQUFxQixHQUFXLENBQUMsQ0FBQzs7SUE0RHBDLDZCQUFvQixTQUFtQyxFQUNuQztRQURBLGNBQVMsR0FBVCxTQUFTLENBQTBCO1FBQ25DLHNCQUFpQixHQUFqQixpQkFBaUI7UUFickMsY0FBb0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBRTNELGlCQUFpQztZQUM3QixNQUFNLEVBQUUsU0FBTyxHQUFHLEdBQUcscUJBQXFCLE1BQUc7U0FDaEQsQ0FBQzt3QkFFeUIscUJBQXFCOzRCQUNoQixDQUFDLENBQUM7aUNBRU4sOEJBQThCO0tBTXpEO0lBbkRELHNCQUNJLDRDQUFXOzs7O1FBRGY7WUFFSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDNUI7Ozs7O1FBRUQsVUFBZ0IsUUFBaUI7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2RDs7O09BSkE7SUFNRCxzQkFDSSx3Q0FBTzs7OztRQURYO1lBRUksT0FBTyxJQUFJLENBQUMsUUFB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QXVCZixLQUFLOzBCQVNMLEtBQUs7d0JBaUJMLEtBQUs7eUJBVUwsS0FBSzs7OEJBaEVWOztTQXlCYSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbi8vXG5pbXBvcnQge1htYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudH0gZnJvbSBcIi4veG1hdC1sZWdlbmQtaXRlbS1jb250ZW50LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtYbWF0TGVnZW5kSXRlbSwgWG1hdExlZ2VuZExheW91dCwgWG1hdExlZ2VuZExheW91dHN9IGZyb20gXCIuL3htYXQtbGVnZW5kLm1vZGVsXCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuaW1wb3J0IHtYbWF0TGVnZW5kSXRlbVN0eWxlfSBmcm9tIFwiLi94bWF0LWxlZ2VuZC5tb2RlbFwiO1xuLy9cbmltcG9ydCB7ZWFjaH0gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCB4bWF0TGVnZW5kRGVmYXVsdENvbHM6IG51bWJlciA9IDQ7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInhtYXQtbGVnZW5kXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi94bWF0LWxlZ2VuZC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi94bWF0LWxlZ2VuZC5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuXG5leHBvcnQgY2xhc3MgWG1hdExlZ2VuZENvbXBvbmVudCB7XG5cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZpbGxDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsbENvbHVtbnM7XG4gICAgfVxuXG4gICAgc2V0IGZpbGxDb2x1bW5zKG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZpbGxDb2x1bW5zID0gY29lcmNlQm9vbGVhblByb3BlcnR5KG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBjb2x1bW5zKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHNldCBjb2x1bW5zKG5ld1ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFpc05hTigrbmV3VmFsdWUpICYmICtuZXdWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSBNYXRoLmZsb29yKCtuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVJdGVtU3R5bGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2xlZ2VuZEluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSB4bWF0TGVnZW5kRGVmYXVsdENvbHM7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiWG1hdExlZ2VuZCBpbnZhbGlkIGxlbmd0aCBwcm92aWRlZCwgc2V0dGluZyB0byBkZWZhdWx0XCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGl0ZW1zKCk6IFhtYXRMZWdlbmRJdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuXG4gICAgc2V0IGl0ZW1zKG5ld1ZhbHVlOiBYbWF0TGVnZW5kSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMuX2xlZ2VuZEluaXQoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBsYXlvdXQ6IFhtYXRMZWdlbmRMYXlvdXQgPSBYbWF0TGVnZW5kTGF5b3V0cy5HUklEO1xuXG4gICAgaXRlbVN0eWxlOiBYbWF0TGVnZW5kSXRlbVN0eWxlID0ge1xuICAgICAgICBcImZsZXhcIjogYDEgMCAkezEwMCAvIHhtYXRMZWdlbmREZWZhdWx0Q29sc30lYFxuICAgIH07XG5cbiAgICBwcml2YXRlIF9jb2x1bW5zOiBudW1iZXIgPSB4bWF0TGVnZW5kRGVmYXVsdENvbHM7XG4gICAgcHJpdmF0ZSBfZmlsbENvbHVtbnM6IGJvb2xlYW4gPSAhMDtcbiAgICBwcml2YXRlIF9pdGVtczogWG1hdExlZ2VuZEl0ZW1bXTtcbiAgICBwcml2YXRlIF9pdGVtQ29udGVudENsYXNzID0gWG1hdExlZ2VuZEl0ZW1Db250ZW50Q29tcG9uZW50O1xuICAgIHByaXZhdGUgX2l0ZW1Db250ZW50UmVmOiBDb21wb25lbnRSZWY8WG1hdExlZ2VuZEl0ZW1Db250ZW50Q29tcG9uZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3Jlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29uc3RydWN0Q29udGVudCgpOiBYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fcmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5faXRlbUNvbnRlbnRDbGFzcyk7XG4gICAgICAgIHRoaXMuX2l0ZW1Db250ZW50UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtQ29udGVudFJlZi5pbnN0YW5jZSBhcyBYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbGVnZW5kSW5pdCgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJYbWF0TGVnZW5kIGxpc3Qgd2FzIG5vdCByZWFkeS4gSW5pdCBwcmV2ZW50ZWQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9maWxsQ29sdW1ucykge1xuICAgICAgICAgICAgY29uc3QgZmlsbGVyQ291bnQgPSAodGhpcy5fY29sdW1ucyAtICh0aGlzLml0ZW1zLmxlbmd0aCAlIHRoaXMuX2NvbHVtbnMpKSAlIHRoaXMuX2NvbHVtbnM7XG4gICAgICAgICAgICBlYWNoKG5ldyBBcnJheShmaWxsZXJDb3VudCksICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGA8c3BhbiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L3NwYW4+YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ4bWF0LWdyaWQtZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgIH0gYXMgWG1hdExlZ2VuZEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWFjaCh0aGlzLml0ZW1zLCAoaXRlbTogWG1hdExlZ2VuZEl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wQ29tcEluc3RhbmNlID0gdGhpcy5fY29uc3RydWN0Q29udGVudCgpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3htYXRGdW5jdGlvbnMubG9nV2l0aFN0eWxlKFwiWG1hdExlZ2VuZFwiLCBcIldhcyBTdHJpbmcgQ29udGVudFwiLCBcIiMwMDY2OTlcIiwgaXRlbS5jb250ZW50KTtcbiAgICAgICAgICAgICAgICB0bXBDb21wSW5zdGFuY2UuY29udGVudCA9IGl0ZW0uY29udGVudDtcbiAgICAgICAgICAgICAgICBpdGVtLmNvbnRlbnQgPSB0bXBDb21wSW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLmNvbnRlbnQgaW5zdGFuY2VvZiBYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBWYWxpZFxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3htYXRGdW5jdGlvbnMubG9nV2l0aFN0eWxlKFwiWG1hdExlZ2VuZFwiLCBcIldhcyBJbnN0YW5jZSBDb250ZW50XCIsIFwiIzMzNjY5OVwiLCBpdGVtLmNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5feG1hdEZ1bmN0aW9ucy5sb2dXaXRoU3R5bGUoXCJYbWF0TGVnZW5kXCIsIFwiV2FzIElOVkFMSUQgQ29udGVudFwiLCBcIiNDQzAwMDBcIiwgaXRlbS5jb250ZW50KTtcbiAgICAgICAgICAgICAgICAvLyBIaWRlIGJyb2tlbiBvbmVzP1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUl0ZW1TdHlsZSgpOiBYbWF0TGVnZW5kSXRlbVN0eWxlIHtcbiAgICAgICAgdGhpcy5pdGVtU3R5bGUgPSB7XG4gICAgICAgICAgICBcImZsZXhcIjogYDEgMCAkezEwMCAvIHRoaXMuX2NvbHVtbnN9JWBcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVN0eWxlO1xuICAgIH1cblxufVxuIl19