@ngx-kit/core
Version:
ngx-kit - core module
184 lines • 10.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { ElementRef, Injectable, IterableDiffers, Renderer2 } from '@angular/core';
import { isString } from '../util/is-string';
/**
* Apply classes to an element.
*
* Must be provided on a component or directive.
*
*
* ### Usage
*
* ```typescript
* constructor(private kitClass: KitClassService) {}
* ...
* this.kitClass.apply({color: 'red', active: true, primary: false});
* ```
*
* Adds to element: `class="color-red active"`
*
*
* ### Example
*
* * collection:button - [sources](https://github.com/ngx-kit/ngx-kit/tree/master/packages/collection/lib/ui-button),
* [demo](http://ngx-kit.com/collection/module/ui-button)
*/
var KitClassService = /** @class */ (function () {
function KitClassService(renderer, el, differs) {
this.renderer = renderer;
this.el = el;
this.differs = differs;
this._state = {};
}
Object.defineProperty(KitClassService.prototype, "state", {
/**
* Override class declaration state.
*/
set: /**
* Override class declaration state.
* @param {?} setterRaw
* @return {?}
*/
function (setterRaw) {
/** @type {?} */
var newState = tslib_1.__assign({}, setterRaw);
this.process(newState);
},
enumerable: true,
configurable: true
});
/**
* Merge to class declaration state.
*/
/**
* Merge to class declaration state.
* @param {?} setter
* @return {?}
*/
KitClassService.prototype.apply = /**
* Merge to class declaration state.
* @param {?} setter
* @return {?}
*/
function (setter) {
/** @type {?} */
var newState = tslib_1.__assign({}, this._state, setter);
this.process(newState);
};
/**
* @private
* @param {?} newState
* @return {?}
*/
KitClassService.prototype.process = /**
* @private
* @param {?} newState
* @return {?}
*/
function (newState) {
/** @type {?} */
var classList = this.processObj(newState);
if (!this._differ) {
this._differ = this.differs.find(classList).create();
}
/** @type {?} */
var changes = this._differ.diff(classList);
if (changes) {
this.applyChanges(changes);
this._state = newState;
}
};
/**
* @private
* @param {?} changes
* @return {?}
*/
KitClassService.prototype.applyChanges = /**
* @private
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
changes.forEachRemovedItem((/**
* @param {?} record
* @return {?}
*/
function (record) { return _this.renderer.removeClass(_this.el.nativeElement, record.item); }));
changes.forEachAddedItem((/**
* @param {?} record
* @return {?}
*/
function (record) { return _this.renderer.addClass(_this.el.nativeElement, record.item); }));
};
/**
* @private
* @param {?} obj
* @return {?}
*/
KitClassService.prototype.processObj = /**
* @private
* @param {?} obj
* @return {?}
*/
function (obj) {
return Object.keys(obj)
.map((/**
* @param {?} key
* @return {?}
*/
function (key) {
/** @type {?} */
var value = obj[key];
return isString(value)
? key + "-" + value
: !!value
? key
: null;
}))
.filter(isString);
};
KitClassService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
KitClassService.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef },
{ type: IterableDiffers }
]; };
return KitClassService;
}());
export { KitClassService };
if (false) {
/**
* @type {?}
* @private
*/
KitClassService.prototype._state;
/**
* @type {?}
* @private
*/
KitClassService.prototype._differ;
/**
* @type {?}
* @private
*/
KitClassService.prototype.renderer;
/**
* @type {?}
* @private
*/
KitClassService.prototype.el;
/**
* @type {?}
* @private
*/
KitClassService.prototype.differs;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0LWNsYXNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWtpdC9jb3JlLyIsInNvdXJjZXMiOlsic3JjL2tpdC1jbGFzcy9raXQtY2xhc3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFtQyxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjdDO0lBTUUseUJBQ1UsUUFBbUIsRUFDbkIsRUFBYyxFQUNkLE9BQXdCO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBUDFCLFdBQU0sR0FBbUIsRUFBRSxDQUFDO0lBU3BDLENBQUM7SUFLRCxzQkFBSSxrQ0FBSztRQUhUOztXQUVHOzs7Ozs7UUFDSCxVQUFVLFNBQXlCOztnQkFDM0IsUUFBUSx3QkFBTyxTQUFTLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVEOztPQUVHOzs7Ozs7SUFDSCwrQkFBSzs7Ozs7SUFBTCxVQUFNLE1BQXNCOztZQUNwQixRQUFRLHdCQUFPLElBQUksQ0FBQyxNQUFNLEVBQUssTUFBTSxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekIsQ0FBQzs7Ozs7O0lBRU8saUNBQU87Ozs7O0lBQWYsVUFBZ0IsUUFBd0I7O1lBQ2hDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3REOztZQUNLLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7Ozs7O0lBRU8sc0NBQVk7Ozs7O0lBQXBCLFVBQXFCLE9BQWdDO1FBQXJELGlCQUdDO1FBRkMsT0FBTyxDQUFDLGtCQUFrQjs7OztRQUFDLFVBQUMsTUFBTSxJQUFLLE9BQUEsS0FBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUE3RCxDQUE2RCxFQUFDLENBQUM7UUFDdEcsT0FBTyxDQUFDLGdCQUFnQjs7OztRQUFDLFVBQUMsTUFBTSxJQUFLLE9BQUEsS0FBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUExRCxDQUEwRCxFQUFDLENBQUM7SUFDbkcsQ0FBQzs7Ozs7O0lBRU8sb0NBQVU7Ozs7O0lBQWxCLFVBQW1CLEdBQVE7UUFDekIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNwQixHQUFHOzs7O1FBQUMsVUFBQyxHQUFXOztnQkFDVCxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN0QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BCLENBQUMsQ0FBSSxHQUFHLFNBQUksS0FBTztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDYixDQUFDLEVBQUM7YUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Z0JBekRGLFVBQVU7Ozs7Z0JBMUJ3RSxTQUFTO2dCQUFuRixVQUFVO2dCQUErQyxlQUFlOztJQW9GakYsc0JBQUM7Q0FBQSxBQTFERCxJQTBEQztTQXpEWSxlQUFlOzs7Ozs7SUFDMUIsaUNBQW9DOzs7OztJQUVwQyxrQ0FBd0M7Ozs7O0lBR3RDLG1DQUEyQjs7Ozs7SUFDM0IsNkJBQXNCOzs7OztJQUN0QixrQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJdGVyYWJsZUNoYW5nZXMsIEl0ZXJhYmxlRGlmZmVyLCBJdGVyYWJsZURpZmZlcnMsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvaXMtc3RyaW5nJztcclxuaW1wb3J0IHsgS2l0Q2xhc3NTZXR0ZXIgfSBmcm9tICcuL21ldGEnO1xyXG5cclxuLyoqXHJcbiAqIEFwcGx5IGNsYXNzZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogTXVzdCBiZSBwcm92aWRlZCBvbiBhIGNvbXBvbmVudCBvciBkaXJlY3RpdmUuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyBVc2FnZVxyXG4gKlxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUga2l0Q2xhc3M6IEtpdENsYXNzU2VydmljZSkge31cclxuICogLi4uXHJcbiAqIHRoaXMua2l0Q2xhc3MuYXBwbHkoe2NvbG9yOiAncmVkJywgYWN0aXZlOiB0cnVlLCBwcmltYXJ5OiBmYWxzZX0pO1xyXG4gKiBgYGBcclxuICpcclxuICogQWRkcyB0byBlbGVtZW50OiBgY2xhc3M9XCJjb2xvci1yZWQgYWN0aXZlXCJgXHJcbiAqXHJcbiAqXHJcbiAqICMjIyBFeGFtcGxlXHJcbiAqXHJcbiAqICogY29sbGVjdGlvbjpidXR0b24gLSBbc291cmNlc10oaHR0cHM6Ly9naXRodWIuY29tL25neC1raXQvbmd4LWtpdC90cmVlL21hc3Rlci9wYWNrYWdlcy9jb2xsZWN0aW9uL2xpYi91aS1idXR0b24pLFxyXG4gKiBbZGVtb10oaHR0cDovL25neC1raXQuY29tL2NvbGxlY3Rpb24vbW9kdWxlL3VpLWJ1dHRvbilcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEtpdENsYXNzU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfc3RhdGU6IEtpdENsYXNzU2V0dGVyID0ge307XHJcblxyXG4gIHByaXZhdGUgX2RpZmZlcjogSXRlcmFibGVEaWZmZXI8c3RyaW5nPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdmVycmlkZSBjbGFzcyBkZWNsYXJhdGlvbiBzdGF0ZS5cclxuICAgKi9cclxuICBzZXQgc3RhdGUoc2V0dGVyUmF3OiBLaXRDbGFzc1NldHRlcikge1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7Li4uc2V0dGVyUmF3fTtcclxuICAgIHRoaXMucHJvY2VzcyhuZXdTdGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZSB0byBjbGFzcyBkZWNsYXJhdGlvbiBzdGF0ZS5cclxuICAgKi9cclxuICBhcHBseShzZXR0ZXI6IEtpdENsYXNzU2V0dGVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHsuLi50aGlzLl9zdGF0ZSwgLi4uc2V0dGVyfTtcclxuICAgIHRoaXMucHJvY2VzcyhuZXdTdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3MobmV3U3RhdGU6IEtpdENsYXNzU2V0dGVyKSB7XHJcbiAgICBjb25zdCBjbGFzc0xpc3QgPSB0aGlzLnByb2Nlc3NPYmoobmV3U3RhdGUpO1xyXG4gICAgaWYgKCF0aGlzLl9kaWZmZXIpIHtcclxuICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoY2xhc3NMaXN0KS5jcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZihjbGFzc0xpc3QpO1xyXG4gICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5hcHBseUNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgIHRoaXMuX3N0YXRlID0gbmV3U3RhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8c3RyaW5nPikge1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoUmVtb3ZlZEl0ZW0oKHJlY29yZCkgPT4gdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHJlY29yZC5pdGVtKSk7XHJcbiAgICBjaGFuZ2VzLmZvckVhY2hBZGRlZEl0ZW0oKHJlY29yZCkgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHJlY29yZC5pdGVtKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NPYmoob2JqOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxyXG4gICAgICAubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XHJcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgPyBgJHtrZXl9LSR7dmFsdWV9YFxyXG4gICAgICAgICAgOiAhIXZhbHVlXHJcbiAgICAgICAgICAgID8ga2V5XHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcihpc1N0cmluZyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==