UNPKG

@ngx-kit/core

Version:

ngx-kit - core module

184 lines 10.9 kB
/** * @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==