dynamic-theme-lib
Version:
A flexible and powerful theme management library for Angular applications that allows dynamic color management and theme switching.
52 lines • 6.29 kB
JavaScript
import { Directive, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../services/colour.service";
export class TextColorDirective {
constructor(el, colorService) {
this.el = el;
this.colorService = colorService;
this.libTextColour = ''; // The input property for text color name
this.currentColor = '';
}
ngOnInit() {
// Subscribe to color changes and update dynamically
this.colorSubscription = this.colorService.colors$.subscribe(() => {
this.applyColor();
});
// Initial color application
this.applyColor();
}
ngOnChanges(changes) {
if (changes['libTextColour'] && !changes['libTextColour'].firstChange) {
this.applyColor();
}
}
applyColor() {
if (!this.libTextColour) {
console.warn('No text color variable specified');
return;
}
const newColor = this.colorService.getColor(this.libTextColour);
if (newColor && newColor !== this.currentColor) {
this.currentColor = newColor;
this.el.nativeElement.style.color = newColor;
}
}
ngOnDestroy() {
// Unsubscribe to avoid memory leaks
if (this.colorSubscription) {
this.colorSubscription.unsubscribe();
}
}
}
TextColorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextColorDirective, deps: [{ token: i0.ElementRef }, { token: i1.ColourService }], target: i0.ɵɵFactoryTarget.Directive });
TextColorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: TextColorDirective, selector: "[libTextColour]", inputs: { libTextColour: "libTextColour" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TextColorDirective, decorators: [{
type: Directive,
args: [{
selector: '[libTextColour]'
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ColourService }]; }, propDecorators: { libTextColour: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1jb2xvdXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHluYW1pYy10aGVtZS1saWIvc3JjL2xpYi9kaXJlY3RpdmVzL3RleHQtY29sb3VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7OztBQU8xRyxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQW9CLEVBQWMsRUFBVSxZQUEyQjtRQUFuRCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWU7UUFKOUQsa0JBQWEsR0FBVyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7UUFFdEUsaUJBQVksR0FBVyxFQUFFLENBQUM7SUFFd0MsQ0FBQztJQUUzRSxRQUFRO1FBQ04sb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDckUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ2pELE9BQU87U0FDUjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1Qsb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7O2dIQXpDVSxrQkFBa0I7b0dBQWxCLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCOzZIQUVVLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbG91clNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2xvdXIuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tsaWJUZXh0Q29sb3VyXSdcbn0pXG5leHBvcnQgY2xhc3MgVGV4dENvbG9yRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxpYlRleHRDb2xvdXI6IHN0cmluZyA9ICcnOyAvLyBUaGUgaW5wdXQgcHJvcGVydHkgZm9yIHRleHQgY29sb3IgbmFtZVxuICBwcml2YXRlIGNvbG9yU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY3VycmVudENvbG9yOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNvbG9yU2VydmljZTogQ29sb3VyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gY29sb3IgY2hhbmdlcyBhbmQgdXBkYXRlIGR5bmFtaWNhbGx5XG4gICAgdGhpcy5jb2xvclN1YnNjcmlwdGlvbiA9IHRoaXMuY29sb3JTZXJ2aWNlLmNvbG9ycyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlDb2xvcigpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEluaXRpYWwgY29sb3IgYXBwbGljYXRpb25cbiAgICB0aGlzLmFwcGx5Q29sb3IoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snbGliVGV4dENvbG91ciddICYmICFjaGFuZ2VzWydsaWJUZXh0Q29sb3VyJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuYXBwbHlDb2xvcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2xvcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGliVGV4dENvbG91cikge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0ZXh0IGNvbG9yIHZhcmlhYmxlIHNwZWNpZmllZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NvbG9yID0gdGhpcy5jb2xvclNlcnZpY2UuZ2V0Q29sb3IodGhpcy5saWJUZXh0Q29sb3VyKTtcbiAgICBpZiAobmV3Q29sb3IgJiYgbmV3Q29sb3IgIT09IHRoaXMuY3VycmVudENvbG9yKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb2xvciA9IG5ld0NvbG9yO1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmNvbG9yID0gbmV3Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gVW5zdWJzY3JpYmUgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgaWYgKHRoaXMuY29sb3JTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29sb3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==