color-util-helpers 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/color-util-helpers-1.0.8.tgz +0 -0
- package/esm2022/lib/color-utilities-demo/color-utilities-demo.component.mjs +2 -2
- package/esm2022/lib/color-utils.module.mjs +6 -6
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/color-util-helpers.mjs +7 -7
- package/fesm2022/color-util-helpers.mjs.map +1 -1
- package/lib/color-utils.module.d.ts +4 -4
- package/package.json +1 -1
- package/color-util-helpers-1.0.6.tgz +0 -0
|
Binary file
|
|
@@ -28,7 +28,7 @@ export class ColorUtilitiesDemoComponent {
|
|
|
28
28
|
}
|
|
29
29
|
ngOnInit() {
|
|
30
30
|
// define image path
|
|
31
|
-
this.img = '
|
|
31
|
+
this.img = 'assets/picture.webp';
|
|
32
32
|
this.colorPalletteService.getColorsFromImage(this.img, 8);
|
|
33
33
|
}
|
|
34
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilitiesDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
38
38
|
type: Component,
|
|
39
39
|
args: [{ selector: 'app-color-utilities-demo', template: "<div style=\"margin: 2rem;\">\n\n <h1>Color Conversion Service</h1>\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\">rgbToHex: {{ HEX }}</div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"HEX\"></div>\n </div>\n\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\"> hexToRgb: {{ RGB }} </div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"RGB\"></div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Light/Darken Service</h1>\n\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n Original Color: #AA11BB<br>\n <div style=\"width: 32px; height: 32px; background-color: #AA11BB;\"></div>\n Lighten (25%): {{ lighten }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n Darken (25%): {{ darken }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Text Color Utility Services</h1>\n\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <div style=\"display: flex; gap: 1rem\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n is Darker : {{ colorIsDarker }}\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorIsDarker\"></div>\n </div>\n \n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n \n <div>\n Use: {{ lightBk }} for '{{ HEX }}' background-color<br>\n <div style=\"padding: 1rem;\" [style.backgroundColor]=\"HEX\" [style.color]=\"darkBk\">\n Sample Text Color\n </div>\n </div>\n\n <div>\n Use: {{ lightBk }} for 'whitesmoke' background-color<br>\n <div style=\"padding: 1rem; background-color: whitesmoke;\" [style.color]=\"lightBk\">\n Sample Text Color\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n \n <h1>Color Schema Services</h1>\n\n <div style=\"display: flex; gap: 1rem\">\n Pick Color: {{ colorPick }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPick\"></div>\n Lighter Version: {{ colorPickLighter }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickLighter\"></div>\n DarkerVersion: {{ colorPickDarker }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickDarker\"></div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Pallette Service</h1>\n Creates Pallette from Image\n <div style=\"display: flex; gap: 2rem;\">\n <div>\n <img [src]=\"img\" height=\"180\">\n </div>\n\n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Color Pick</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.color\"></div>\n </ng-container>\n </div>\n \n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Complementary</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.complementaryColor\"></div>\n </ng-container>\n </div>\n </div>\n\n</div>\n\n", styles: [".box{width:100px;height:100px;border:solid thin black;color:#000;margin:4px;padding:16px;display:flex;flex-wrap:wrap;align-content:center;justify-content:center}\n"] }]
|
|
40
40
|
}], ctorParameters: function () { return []; } });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItdXRpbGl0aWVzLWRlbW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sb3ItdXRpbHMvc3JjL2xpYi9jb2xvci11dGlsaXRpZXMtZGVtby9jb2xvci11dGlsaXRpZXMtZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xvci11dGlscy9zcmMvbGliL2NvbG9yLXV0aWxpdGllcy1kZW1vL2NvbG9yLXV0aWxpdGllcy1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBTzdELE1BQU0sT0FBTywyQkFBMkI7SUE4QnRDO1FBNUJBLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3ZELDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQzdELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQ25ELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRy9DLFFBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3pELFFBQUcsR0FBRyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtRQUcvRCxZQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDaEUsV0FBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTlELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5RSxXQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdkYsWUFBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFHNUYsWUFBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUE7UUFFNUMsY0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQ3pELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0UscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBSTdELENBQUM7SUFFakIsUUFBUTtRQUVOLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLHVCQUF1QixDQUFBO1FBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRzNELENBQUM7K0dBdkNVLDJCQUEyQjttR0FBM0IsMkJBQTJCLGdFQ2J4QywwK0hBNkdBOzs0RkRoR2EsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29sb3JDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvbG9yLWNvbnZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvclBhbGxldHRlU2VydmljZSB9IGZyb20gJy4uL2NvbG9yLXBhbGxldHRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dENvbG9yU2VydmljZSB9IGZyb20gJy4uL3RleHQtY29sb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvckxpZ2h0ZW5EYXJrZW5TZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItbGlnaHRlbi1kYXJrZW4uc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvclNjaGVtZVNlcnZpY2UgfSBmcm9tICcuLi9jb2xvci1zY2hlbWUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2xvci11dGlsaXRpZXMtZGVtbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci11dGlsaXRpZXMtZGVtby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXV0aWxpdGllcy1kZW1vLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JVdGlsaXRpZXNEZW1vQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb2xvckNvbnZlcnNpb25TZXJ2aWNlID0gaW5qZWN0KENvbG9yQ29udmVyc2lvblNlcnZpY2UpXG4gIGNvbG9yTGlnaHRlbkRhcmtlblNlcnZpY2UgPSBpbmplY3QoQ29sb3JMaWdodGVuRGFya2VuU2VydmljZSlcbiAgY29sb3JQYWxsZXR0ZVNlcnZpY2UgPSBpbmplY3QoQ29sb3JQYWxsZXR0ZVNlcnZpY2UpXG4gIHRleHRDb2xvclNlcnZpY2UgPSBpbmplY3QoVGV4dENvbG9yU2VydmljZSlcbiAgY29sb3JTY2hlbWVTZXJ2aWNlID0gaW5qZWN0KENvbG9yU2NoZW1lU2VydmljZSlcblxuXG4gIEhFWCA9IHRoaXMuY29sb3JDb252ZXJzaW9uU2VydmljZS5yZ2JUb0hleChbMTIsIDU2LCAxMjhdKVxuICBSR0IgPSBgcmdiKCR7dGhpcy5jb2xvckNvbnZlcnNpb25TZXJ2aWNlLmhleFRvUmdiKCcjQUExMUJCJyl9KWBcblxuXG4gIGxpZ2h0ZW4gPSB0aGlzLmNvbG9yTGlnaHRlbkRhcmtlblNlcnZpY2UubGlnaHRlbignI0FBMTFCQicsIC4yNSlcbiAgZGFya2VuID0gdGhpcy5jb2xvckxpZ2h0ZW5EYXJrZW5TZXJ2aWNlLmRhcmtlbignI0FBMTFCQicsIC4yNSlcblxuICBjb2xvcklzRGFya2VyID0gdGhpcy50ZXh0Q29sb3JTZXJ2aWNlLmlzQ29sb3JEYXJrZXIodGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcblxuICBkYXJrQmsgPSB0aGlzLnRleHRDb2xvclNlcnZpY2UudGV4dENvbG9yRm9yQmdDb2xvcih0aGlzLkhFWCwgdGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcbiAgbGlnaHRCayA9IHRoaXMudGV4dENvbG9yU2VydmljZS50ZXh0Q29sb3JGb3JCZ0NvbG9yKCd3aGl0ZXNtb2tlJywgdGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcblxuICBwYWxldHRlOiBhbnlcbiAgY29sb3JzJCA9IHRoaXMuY29sb3JQYWxsZXR0ZVNlcnZpY2UucGFsZXR0ZSRcblxuICBjb2xvclBpY2sgPSB0aGlzLmNvbG9yU2NoZW1lU2VydmljZS5nZW5lcmF0ZVJhbmRvbUNvbG9yKClcbiAgY29sb3JQaWNrRGFya2VyID0gdGhpcy5jb2xvclNjaGVtZVNlcnZpY2UuYWRqdXN0SGV4Q29sb3IodGhpcy5jb2xvclBpY2ssIC0yNSlcbiAgY29sb3JQaWNrTGlnaHRlciA9IHRoaXMuY29sb3JTY2hlbWVTZXJ2aWNlLmFkanVzdEhleENvbG9yKHRoaXMuY29sb3JQaWNrLCAyNSlcblxuICBpbWc6IHN0cmluZ3xhbnlcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLy8gZGVmaW5lIGltYWdlIHBhdGhcbiAgICB0aGlzLmltZyA9ICcvYXNzZXRzL2ltYWdlcy9IRC5wbmcnXG4gICAgdGhpcy5jb2xvclBhbGxldHRlU2VydmljZS5nZXRDb2xvcnNGcm9tSW1hZ2UodGhpcy5pbWcsIDgpXG5cblxuICB9XG5cblxufVxuXG4iLCI8ZGl2IHN0eWxlPVwibWFyZ2luOiAycmVtO1wiPlxuXG4gIDxoMT5Db2xvciBDb252ZXJzaW9uIFNlcnZpY2U8L2gxPlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxcmVtO1wiPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IC41cmVtOyBtYXJnaW4tcmlnaHQ6IC41cmVtO1wiPnJnYlRvSGV4OiB7eyBIRVggfX08L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiSEVYXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxuICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOiAuNXJlbTsgbWFyZ2luLXJpZ2h0OiAuNXJlbTtcIj4gaGV4VG9SZ2I6IHt7IFJHQiB9fSA8L2Rpdj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiUkdCXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8aDE+Q29sb3IgTGlnaHQvRGFya2VuIFNlcnZpY2U8L2gxPlxuXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDFyZW07XCI+XG5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtXCI+XG4gICAgICBPcmlnaW5hbCBDb2xvcjogI0FBMTFCQjxicj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjQUExMUJCO1wiPjwvZGl2PlxuICAgICAgTGlnaHRlbiAoMjUlKToge3sgbGlnaHRlbiB9fTxicj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibGlnaHRlblwiPjwvZGl2PlxuICAgICAgRGFya2VuICgyNSUpOiB7eyBkYXJrZW4gfX08YnI+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRhcmtlblwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8aDE+VGV4dCBDb2xvciBVdGlsaXR5IFNlcnZpY2VzPC9oMT5cblxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDFyZW1cIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZGFya2VuXCI+PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImxpZ2h0ZW5cIj48L2Rpdj5cbiAgICAgIGlzIERhcmtlciA6IHt7IGNvbG9ySXNEYXJrZXIgfX1cbiAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29sb3JJc0RhcmtlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxuICAgICAgXG4gICAgICA8ZGl2PlxuICAgICAgICBVc2U6IHt7IGxpZ2h0QmsgfX0gZm9yICd7eyBIRVggfX0nIGJhY2tncm91bmQtY29sb3I8YnI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxcmVtO1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiSEVYXCIgW3N0eWxlLmNvbG9yXT1cImRhcmtCa1wiPlxuICAgICAgICBTYW1wbGUgVGV4dCBDb2xvclxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2PlxuICAgICAgICBVc2U6IHt7IGxpZ2h0QmsgfX0gZm9yICd3aGl0ZXNtb2tlJyBiYWNrZ3JvdW5kLWNvbG9yPGJyPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMXJlbTsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGVzbW9rZTtcIiBbc3R5bGUuY29sb3JdPVwibGlnaHRCa1wiPlxuICAgICAgICAgIFNhbXBsZSBUZXh0IENvbG9yXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cbiAgXG4gPGgxPkNvbG9yIFNjaGVtYSBTZXJ2aWNlczwvaDE+XG5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbVwiPlxuICAgIFBpY2sgQ29sb3I6IHt7IGNvbG9yUGljayB9fTxicj5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9yUGlja1wiPjwvZGl2PlxuICAgIExpZ2h0ZXIgVmVyc2lvbjoge3sgY29sb3JQaWNrTGlnaHRlciB9fTxicj5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9yUGlja0xpZ2h0ZXJcIj48L2Rpdj5cbiAgICBEYXJrZXJWZXJzaW9uOiB7eyBjb2xvclBpY2tEYXJrZXIgfX08YnI+XG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjb2xvclBpY2tEYXJrZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDFyZW07IG1hcmdpbi1ib3R0b206IDFyZW07XCI+XG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDwvZGl2PlxuXG4gIDxoMT5Db2xvciBQYWxsZXR0ZSBTZXJ2aWNlPC9oMT5cbiAgQ3JlYXRlcyBQYWxsZXR0ZSBmcm9tIEltYWdlXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJyZW07XCI+XG4gICAgPGRpdj5cbiAgICAgIDxpbWcgW3NyY109XCJpbWdcIiBoZWlnaHQ9XCIxODBcIj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IC41cmVtOyB3aWR0aDogMTIwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBmbGV4LXdyYXA6IHdyYXA7IHBhZGRpbmc6IC41cmVtO1wiPlxuICAgICAgPGRpdj5Db2xvciBQaWNrPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2xvciBvZiAoY29sb3JzJCB8IGFzeW5jKVwiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29sb3IuY29sb3JcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAuNXJlbTsgd2lkdGg6IDEyMHB4OyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgZmxleC13cmFwOiB3cmFwOyBwYWRkaW5nOiAuNXJlbTtcIj5cbiAgICAgIDxkaXY+Q29tcGxlbWVudGFyeTwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3Igb2YgKGNvbG9ycyQgfCBhc3luYylcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9yLmNvbXBsZW1lbnRhcnlDb2xvclwiPjwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L2Rpdj5cblxuIl19
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItdXRpbGl0aWVzLWRlbW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sb3ItdXRpbHMvc3JjL2xpYi9jb2xvci11dGlsaXRpZXMtZGVtby9jb2xvci11dGlsaXRpZXMtZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xvci11dGlscy9zcmMvbGliL2NvbG9yLXV0aWxpdGllcy1kZW1vL2NvbG9yLXV0aWxpdGllcy1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBTzdELE1BQU0sT0FBTywyQkFBMkI7SUE4QnRDO1FBNUJBLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3ZELDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBQzdELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQ25ELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRy9DLFFBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3pELFFBQUcsR0FBRyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtRQUcvRCxZQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDaEUsV0FBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTlELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5RSxXQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDdkYsWUFBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFHNUYsWUFBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUE7UUFFNUMsY0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQ3pELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0UscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBSTdELENBQUM7SUFFakIsUUFBUTtRQUVOLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLHFCQUFxQixDQUFBO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRzNELENBQUM7K0dBdkNVLDJCQUEyQjttR0FBM0IsMkJBQTJCLGdFQ2J4QywwK0hBNkdBOzs0RkRoR2EsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29sb3JDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvbG9yLWNvbnZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvclBhbGxldHRlU2VydmljZSB9IGZyb20gJy4uL2NvbG9yLXBhbGxldHRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dENvbG9yU2VydmljZSB9IGZyb20gJy4uL3RleHQtY29sb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvckxpZ2h0ZW5EYXJrZW5TZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItbGlnaHRlbi1kYXJrZW4uc2VydmljZSc7XG5pbXBvcnQgeyBDb2xvclNjaGVtZVNlcnZpY2UgfSBmcm9tICcuLi9jb2xvci1zY2hlbWUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2xvci11dGlsaXRpZXMtZGVtbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2xvci11dGlsaXRpZXMtZGVtby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbG9yLXV0aWxpdGllcy1kZW1vLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JVdGlsaXRpZXNEZW1vQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb2xvckNvbnZlcnNpb25TZXJ2aWNlID0gaW5qZWN0KENvbG9yQ29udmVyc2lvblNlcnZpY2UpXG4gIGNvbG9yTGlnaHRlbkRhcmtlblNlcnZpY2UgPSBpbmplY3QoQ29sb3JMaWdodGVuRGFya2VuU2VydmljZSlcbiAgY29sb3JQYWxsZXR0ZVNlcnZpY2UgPSBpbmplY3QoQ29sb3JQYWxsZXR0ZVNlcnZpY2UpXG4gIHRleHRDb2xvclNlcnZpY2UgPSBpbmplY3QoVGV4dENvbG9yU2VydmljZSlcbiAgY29sb3JTY2hlbWVTZXJ2aWNlID0gaW5qZWN0KENvbG9yU2NoZW1lU2VydmljZSlcblxuXG4gIEhFWCA9IHRoaXMuY29sb3JDb252ZXJzaW9uU2VydmljZS5yZ2JUb0hleChbMTIsIDU2LCAxMjhdKVxuICBSR0IgPSBgcmdiKCR7dGhpcy5jb2xvckNvbnZlcnNpb25TZXJ2aWNlLmhleFRvUmdiKCcjQUExMUJCJyl9KWBcblxuXG4gIGxpZ2h0ZW4gPSB0aGlzLmNvbG9yTGlnaHRlbkRhcmtlblNlcnZpY2UubGlnaHRlbignI0FBMTFCQicsIC4yNSlcbiAgZGFya2VuID0gdGhpcy5jb2xvckxpZ2h0ZW5EYXJrZW5TZXJ2aWNlLmRhcmtlbignI0FBMTFCQicsIC4yNSlcblxuICBjb2xvcklzRGFya2VyID0gdGhpcy50ZXh0Q29sb3JTZXJ2aWNlLmlzQ29sb3JEYXJrZXIodGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcblxuICBkYXJrQmsgPSB0aGlzLnRleHRDb2xvclNlcnZpY2UudGV4dENvbG9yRm9yQmdDb2xvcih0aGlzLkhFWCwgdGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcbiAgbGlnaHRCayA9IHRoaXMudGV4dENvbG9yU2VydmljZS50ZXh0Q29sb3JGb3JCZ0NvbG9yKCd3aGl0ZXNtb2tlJywgdGhpcy5saWdodGVuLCB0aGlzLmRhcmtlbilcblxuICBwYWxldHRlOiBhbnlcbiAgY29sb3JzJCA9IHRoaXMuY29sb3JQYWxsZXR0ZVNlcnZpY2UucGFsZXR0ZSRcblxuICBjb2xvclBpY2sgPSB0aGlzLmNvbG9yU2NoZW1lU2VydmljZS5nZW5lcmF0ZVJhbmRvbUNvbG9yKClcbiAgY29sb3JQaWNrRGFya2VyID0gdGhpcy5jb2xvclNjaGVtZVNlcnZpY2UuYWRqdXN0SGV4Q29sb3IodGhpcy5jb2xvclBpY2ssIC0yNSlcbiAgY29sb3JQaWNrTGlnaHRlciA9IHRoaXMuY29sb3JTY2hlbWVTZXJ2aWNlLmFkanVzdEhleENvbG9yKHRoaXMuY29sb3JQaWNrLCAyNSlcblxuICBpbWc6IHN0cmluZ3xhbnlcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLy8gZGVmaW5lIGltYWdlIHBhdGhcbiAgICB0aGlzLmltZyA9ICdhc3NldHMvcGljdHVyZS53ZWJwJ1xuICAgIHRoaXMuY29sb3JQYWxsZXR0ZVNlcnZpY2UuZ2V0Q29sb3JzRnJvbUltYWdlKHRoaXMuaW1nLCA4KVxuXG5cbiAgfVxuXG5cbn1cblxuIiwiPGRpdiBzdHlsZT1cIm1hcmdpbjogMnJlbTtcIj5cblxuICA8aDE+Q29sb3IgQ29udmVyc2lvbiBTZXJ2aWNlPC9oMT5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogMXJlbTtcIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleFwiPlxuICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOiAuNXJlbTsgbWFyZ2luLXJpZ2h0OiAuNXJlbTtcIj5yZ2JUb0hleDoge3sgSEVYIH19PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIkhFWFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXhcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLXRvcDogLjVyZW07IG1hcmdpbi1yaWdodDogLjVyZW07XCI+IGhleFRvUmdiOiB7eyBSR0IgfX0gPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlJHQlwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPC9kaXY+XG5cbiAgPGgxPkNvbG9yIExpZ2h0L0RhcmtlbiBTZXJ2aWNlPC9oMT5cblxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxcmVtO1wiPlxuXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbVwiPlxuICAgICAgT3JpZ2luYWwgQ29sb3I6ICNBQTExQkI8YnI+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDsgYmFja2dyb3VuZC1jb2xvcjogI0FBMTFCQjtcIj48L2Rpdj5cbiAgICAgIExpZ2h0ZW4gKDI1JSk6IHt7IGxpZ2h0ZW4gfX08YnI+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImxpZ2h0ZW5cIj48L2Rpdj5cbiAgICAgIERhcmtlbiAoMjUlKToge3sgZGFya2VuIH19PGJyPlxuICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkYXJrZW5cIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPC9kaXY+XG5cbiAgPGgxPlRleHQgQ29sb3IgVXRpbGl0eSBTZXJ2aWNlczwvaDE+XG5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRhcmtlblwiPjwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJsaWdodGVuXCI+PC9kaXY+XG4gICAgICBpcyBEYXJrZXIgOiB7eyBjb2xvcklzRGFya2VyIH19XG4gICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9ySXNEYXJrZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cbiAgICAgIFxuICAgICAgPGRpdj5cbiAgICAgICAgVXNlOiB7eyBsaWdodEJrIH19IGZvciAne3sgSEVYIH19JyBiYWNrZ3JvdW5kLWNvbG9yPGJyPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMXJlbTtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIkhFWFwiIFtzdHlsZS5jb2xvcl09XCJkYXJrQmtcIj5cbiAgICAgICAgU2FtcGxlIFRleHQgQ29sb3JcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdj5cbiAgICAgICAgVXNlOiB7eyBsaWdodEJrIH19IGZvciAnd2hpdGVzbW9rZScgYmFja2dyb3VuZC1jb2xvcjxicj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDFyZW07IGJhY2tncm91bmQtY29sb3I6IHdoaXRlc21va2U7XCIgW3N0eWxlLmNvbG9yXT1cImxpZ2h0QmtcIj5cbiAgICAgICAgICBTYW1wbGUgVGV4dCBDb2xvclxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPC9kaXY+XG4gIFxuIDxoMT5Db2xvciBTY2hlbWEgU2VydmljZXM8L2gxPlxuXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDFyZW1cIj5cbiAgICBQaWNrIENvbG9yOiB7eyBjb2xvclBpY2sgfX08YnI+XG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjb2xvclBpY2tcIj48L2Rpdj5cbiAgICBMaWdodGVyIFZlcnNpb246IHt7IGNvbG9yUGlja0xpZ2h0ZXIgfX08YnI+XG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjb2xvclBpY2tMaWdodGVyXCI+PC9kaXY+XG4gICAgRGFya2VyVmVyc2lvbjoge3sgY29sb3JQaWNrRGFya2VyIH19PGJyPlxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzJweDsgaGVpZ2h0OiAzMnB4O1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29sb3JQaWNrRGFya2VyXCI+PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cblxuICA8aDE+Q29sb3IgUGFsbGV0dGUgU2VydmljZTwvaDE+XG4gIENyZWF0ZXMgUGFsbGV0dGUgZnJvbSBJbWFnZVxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtO1wiPlxuICAgIDxkaXY+XG4gICAgICA8aW1nIFtzcmNdPVwiaW1nXCIgaGVpZ2h0PVwiMTgwXCI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAuNXJlbTsgd2lkdGg6IDEyMHB4OyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgZmxleC13cmFwOiB3cmFwOyBwYWRkaW5nOiAuNXJlbTtcIj5cbiAgICAgIDxkaXY+Q29sb3IgUGljazwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sb3Igb2YgKGNvbG9ycyQgfCBhc3luYylcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMycHg7IGhlaWdodDogMzJweDtcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9yLmNvbG9yXCI+PC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogLjVyZW07IHdpZHRoOiAxMjBweDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGZsZXgtd3JhcDogd3JhcDsgcGFkZGluZzogLjVyZW07XCI+XG4gICAgICA8ZGl2PkNvbXBsZW1lbnRhcnk8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbG9yIG9mIChjb2xvcnMkIHwgYXN5bmMpXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMnB4OyBoZWlnaHQ6IDMycHg7XCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjb2xvci5jb21wbGVtZW50YXJ5Q29sb3JcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -6,18 +6,18 @@ import { ColorGrabberDirective } from './color-grab.directive';
|
|
|
6
6
|
import { ColorUtilitiesDemoComponent } from './color-utilities-demo/color-utilities-demo.component';
|
|
7
7
|
import { ColorExtractorDirective } from './color-extractor.directive';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
-
export class
|
|
10
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
11
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type:
|
|
9
|
+
export class ColorUtilsModule {
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, declarations: [ColorUtilitiesDemoComponent,
|
|
12
12
|
ColorGrabberDirective,
|
|
13
13
|
ColorExtractorDirective], imports: [CommonModule,
|
|
14
14
|
MatButtonModule,
|
|
15
15
|
MatDividerModule], exports: [ColorUtilitiesDemoComponent] }); }
|
|
16
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
16
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, imports: [CommonModule,
|
|
17
17
|
MatButtonModule,
|
|
18
18
|
MatDividerModule] }); }
|
|
19
19
|
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, decorators: [{
|
|
21
21
|
type: NgModule,
|
|
22
22
|
args: [{
|
|
23
23
|
imports: [
|
|
@@ -35,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
35
35
|
]
|
|
36
36
|
}]
|
|
37
37
|
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItdXRpbHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sb3ItdXRpbHMvc3JjL2xpYi9jb2xvci11dGlscy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9ELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQWtCdEUsTUFBTSxPQUFPLGdCQUFnQjsrR0FBaEIsZ0JBQWdCO2dIQUFoQixnQkFBZ0IsaUJBUnpCLDJCQUEyQjtZQUMzQixxQkFBcUI7WUFDckIsdUJBQXVCLGFBUHZCLFlBQVk7WUFDWixlQUFlO1lBQ2YsZ0JBQWdCLGFBUWhCLDJCQUEyQjtnSEFHbEIsZ0JBQWdCLFlBYnpCLFlBQVk7WUFDWixlQUFlO1lBQ2YsZ0JBQWdCOzs0RkFXUCxnQkFBZ0I7a0JBZjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCO29CQUNELFlBQVksRUFBRTt3QkFDWiwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMkJBQTJCO3FCQUM1QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgQ29sb3JHcmFiYmVyRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2xvci1ncmFiLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IENvbG9yVXRpbGl0aWVzRGVtb0NvbXBvbmVudCB9IGZyb20gJy4vY29sb3ItdXRpbGl0aWVzLWRlbW8vY29sb3ItdXRpbGl0aWVzLWRlbW8uY29tcG9uZW50JztcbmltcG9ydCB7IENvbG9yRXh0cmFjdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2xvci1leHRyYWN0b3IuZGlyZWN0aXZlJztcblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENvbG9yVXRpbGl0aWVzRGVtb0NvbXBvbmVudCxcbiAgICBDb2xvckdyYWJiZXJEaXJlY3RpdmUsXG4gICAgQ29sb3JFeHRyYWN0b3JEaXJlY3RpdmVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENvbG9yVXRpbGl0aWVzRGVtb0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbG9yVXRpbHNNb2R1bGUgeyB9XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -10,4 +10,4 @@ export * from './lib/color-pallette.service';
|
|
|
10
10
|
export * from './lib/text-color.service';
|
|
11
11
|
export * from './lib/color-scheme.service';
|
|
12
12
|
export * from './lib/color-lighten-darken.service';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NvbG9yLXV0aWxzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxjQUFjLDJEQUEyRCxDQUFDO0FBRTFFLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGNvbG9yLXV0aWxzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sb3ItdXRpbHMubW9kdWxlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sb3ItdXRpbGl0aWVzLWRlbW8vY29sb3ItdXRpbGl0aWVzLWRlbW8uY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sb3ItY29udmVyc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbG9yLWV4dHJhY3Rvci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sb3ItZ3JhYi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sb3ItcGFsbGV0dGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LWNvbG9yLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2xvci1zY2hlbWUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2xvci1saWdodGVuLWRhcmtlbi5zZXJ2aWNlJztcbiJdfQ==
|
|
@@ -679,7 +679,7 @@ class ColorUtilitiesDemoComponent {
|
|
|
679
679
|
}
|
|
680
680
|
ngOnInit() {
|
|
681
681
|
// define image path
|
|
682
|
-
this.img = '
|
|
682
|
+
this.img = 'assets/picture.webp';
|
|
683
683
|
this.colorPalletteService.getColorsFromImage(this.img, 8);
|
|
684
684
|
}
|
|
685
685
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilitiesDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -725,18 +725,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
725
725
|
args: ['mouseleave']
|
|
726
726
|
}] } });
|
|
727
727
|
|
|
728
|
-
class
|
|
729
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
730
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type:
|
|
728
|
+
class ColorUtilsModule {
|
|
729
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
730
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, declarations: [ColorUtilitiesDemoComponent,
|
|
731
731
|
ColorGrabberDirective,
|
|
732
732
|
ColorExtractorDirective], imports: [CommonModule,
|
|
733
733
|
MatButtonModule,
|
|
734
734
|
MatDividerModule], exports: [ColorUtilitiesDemoComponent] }); }
|
|
735
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
735
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, imports: [CommonModule,
|
|
736
736
|
MatButtonModule,
|
|
737
737
|
MatDividerModule] }); }
|
|
738
738
|
}
|
|
739
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type:
|
|
739
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColorUtilsModule, decorators: [{
|
|
740
740
|
type: NgModule,
|
|
741
741
|
args: [{
|
|
742
742
|
imports: [
|
|
@@ -763,5 +763,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
763
763
|
* Generated bundle index. Do not edit.
|
|
764
764
|
*/
|
|
765
765
|
|
|
766
|
-
export { ColorConversionService, ColorExtractorDirective, ColorGrabberDirective, ColorLightenDarkenService, ColorPalletteService, ColorSchemeService, ColorUtilitiesDemoComponent,
|
|
766
|
+
export { ColorConversionService, ColorExtractorDirective, ColorGrabberDirective, ColorLightenDarkenService, ColorPalletteService, ColorSchemeService, ColorUtilitiesDemoComponent, ColorUtilsModule, TextColorService };
|
|
767
767
|
//# sourceMappingURL=color-util-helpers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-util-helpers.mjs","sources":["../../../projects/color-utils/src/lib/color-grab.directive.ts","../../../projects/color-utils/src/lib/color-conversion.service.ts","../../../projects/color-utils/src/lib/color-pallette.service.ts","../../../projects/color-utils/src/lib/text-color.service.ts","../../../projects/color-utils/src/lib/color-lighten-darken.service.ts","../../../projects/color-utils/src/lib/color-scheme.service.ts","../../../projects/color-utils/src/lib/color-utilities-demo/color-utilities-demo.component.ts","../../../projects/color-utils/src/lib/color-utilities-demo/color-utilities-demo.component.html","../../../projects/color-utils/src/lib/color-extractor.directive.ts","../../../projects/color-utils/src/lib/color-utils.module.ts","../../../projects/color-utils/src/public-api.ts","../../../projects/color-utils/src/color-util-helpers.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[colorGrabber]'\n})\nexport class ColorGrabberDirective implements OnInit {\n\n ctx?: CanvasRenderingContext2D\n\n @Input() imageUrl?: string\n @Input() light?: string\n @Input() dark?: string\n\n constructor(private el: ElementRef) { }\n\n ngOnInit() {\n\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n\n this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n const img = new Image();\n img.src = this.imageUrl || '';\n img.setAttribute('crossOrigin', '');\n\n img.onload = () => {\n this.ctx?.drawImage(img, 0, 0, 1, 1);\n const imageData = this.ctx?.getImageData(0, 0, 1, 1);\n\n if (imageData && imageData.data) {\n const i = imageData.data;\n\n const rgbColor = `rgba(${i[0]},${i[1]},${i[2]},${i[3]})`;\n const hexColor = \"#\" + ((1 << 24) + (i[0] << 16) + (i[1] << 8) + i[2]).toString(16).slice(1);\n\n const textColor = this.textColorBasedOnBgColor(hexColor, this.light, this.dark);\n\n const hsv = this.RGB2HSV({ r: i[0], g: i[1], b: i[2] });\n hsv.hue = this.HueShift(hsv.hue, 135.0);\n\n const secondaryColor = this.HSV2RGB(hsv);\n const highlightColor = this.lightenDarkenColor(secondaryColor.hex, 50);\n\n this.el.nativeElement.style.backgroundColor = rgbColor;\n this.el.nativeElement.style.color = textColor;\n } else {\n console.error(\"Failed to get image data.\");\n }\n };\n }\n\n textColorBasedOnBgColor(\n bgColor: string,\n lightColor: string = '#FFFFFF',\n darkColor: string = '#000000'\n ) {\n\n const color = (bgColor.charAt(0) === '#') ? bgColor.substring(1, 7) : bgColor\n\n const r = parseInt(color.substring(0, 2), 16) // hexToR\n const g = parseInt(color.substring(2, 4), 16) // hexToG\n const b = parseInt(color.substring(4, 6), 16) // hexToB\n\n const uicolors = [r / 255, g / 255, b / 255]\n\n const c = uicolors.map((col) => {\n\n if (col <= 0.03928) return col / 12.92\n return Math.pow((col + 0.055) / 1.055, 2.4)\n\n })\n\n const L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2])\n\n return (L > 0.179) ? darkColor : lightColor\n\n }\n\n RGB2HSV(rgb: { r: any, g: any, b: any}) {\n\n const hsv = { saturation:0, hue:0, value: 0 }\n\n const max = this.max3(rgb.r,rgb.g,rgb.b)\n const dif = max - this.min3(rgb.r,rgb.g,rgb.b)\n hsv.saturation = (max==0.0)?0:(100*dif/max)\n\n if (hsv.saturation == 0) {\n hsv.hue=0\n } else if (rgb.r == max) {\n hsv.hue=60.0*(rgb.g-rgb.b)/dif\n } else if (rgb.g == max) {\n hsv.hue=120.0+60.0*(rgb.b-rgb.r)/dif\n } else if (rgb.b == max) {\n hsv.hue=240.0+60.0*(rgb.r-rgb.g)/dif\n }\n\n if (hsv.hue<0.0) hsv.hue+=360.0\n\n hsv.value = Math.round(max*100/255)\n hsv.hue = Math.round(hsv.hue)\n hsv.saturation = Math.round(hsv.saturation)\n\n return hsv\n }\n\n HSV2RGB(hsv: any) {\n\n const rgb = { r: 0, g: 0, b: 0}\n\n if (hsv.saturation==0) {\n rgb.r = rgb.g = rgb.b = Math.round(hsv.value*2.55)\n } else {\n\n hsv.hue/=60\n hsv.saturation/=100\n hsv.value/=100\n const i = Math.floor(hsv.hue)\n const f = hsv.hue-i\n\n const p = hsv.value*(1-hsv.saturation)\n const q = hsv.value*(1-hsv.saturation*f)\n const t = hsv.value*(1-hsv.saturation*(1-f))\n\n switch(i) {\n\n case 0: rgb.r=hsv.value; rgb.g=t; rgb.b=p; break\n case 1: rgb.r=q; rgb.g=hsv.value; rgb.b=p; break\n case 2: rgb.r=p; rgb.g=hsv.value; rgb.b=t; break\n case 3: rgb.r=p; rgb.g=q; rgb.b=hsv.value; break\n case 4: rgb.r=t; rgb.g=p; rgb.b=hsv.value; break\n\n default: rgb.r=hsv.value; rgb.g=p; rgb.b=q\n\n }\n\n rgb.r = Math.round(rgb.r*255)\n rgb.g = Math.round(rgb.g*255)\n rgb.b = Math.round(rgb.b*255)\n\n }\n\n const rgbColor = `rgba(${rgb.r},${rgb.g},${rgb.b},${1})`\n const hexColor = \"#\" + ((1 << 24) + (rgb.r << 16) + (rgb.g << 8) + rgb.b).toString(16).slice(1)\n\n return { rgb: rgbColor, hex: hexColor }\n }\n\n HueShift(h: any, s: any) {\n h += s\n while (h>=360.0) h-=360.0\n while (h<0.0) h+=360.0\n return h\n }\n\n min3(a: any, b: any, c: any) {\n return (a<b)?((a<c)?a:c):((b<c)?b:c)\n }\n\n max3(a: any, b: any, c: any) {\n return (a>b)?((a>c)?a:c):((b>c)?b:c)\n }\n\n lightenDarkenColor(colorCode: any, amount: number) {\n\n var usePound = false;\n\n if (colorCode[0] == \"#\") {\n colorCode = colorCode.slice(1);\n usePound = true;\n }\n\n var num = parseInt(colorCode, 16);\n\n var r = (num >> 16) + amount;\n\n if (r > 255) {\n r = 255;\n } else if (r < 0) {\n r = 0;\n }\n\n var b = ((num >> 8) & 0x00FF) + amount;\n\n if (b > 255) {\n b = 255;\n } else if (b < 0) {\n b = 0;\n }\n\n var g = (num & 0x0000FF) + amount;\n\n if (g > 255) {\n g = 255;\n } else if (g < 0) {\n g = 0;\n }\n\n return (usePound ? \"#\" : \"\") + (g | (b << 8) | (r << 16)).toString(16)\n\n }\n\n}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorConversionService {\r\n\r\n rgbToHex(rgb: number[] | null): string {\r\n if (rgb === null || rgb.length !== 3 || rgb.some(value => value < 0 || value > 255)) return '';\r\n\r\n const [r, g, b] = rgb;\r\n const hexR = this.componentToHex(r);\r\n const hexG = this.componentToHex(g);\r\n const hexB = this.componentToHex(b);\r\n return \"#\" + hexR + hexG + hexB;\r\n }\r\n\r\n private componentToHex = (c: number) => {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? \"0\" + hex : hex;\r\n }\r\n\r\n hexToRgb(hex: string | null | undefined): number[] {\r\n if (hex === null || hex === undefined) return [];\r\n\r\n hex = (hex.length === 3) ? hex + hex : hex;\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n return result ? [\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16)\r\n ] : [];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { BehaviorSubject } from 'rxjs'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorPalletteService {\r\n\r\n // define image path\r\n // this.colorSelectionService.getColorsFromImage('../assets/sample2.jpg')\r\n\r\n // get colors\r\n // this.colorSelectionService.palette.subscribe(data => this.palette = data)\r\n\r\n // sample html\r\n // <div *ngFor=\"let color of palette\">\r\n // <div style=\"display: flex;\">\r\n // <div\r\n // class=\"box\"\r\n // [style.background-color]=\"color.color\"\r\n // >\r\n // Color\r\n // </div>\r\n // <div\r\n // class=\"box\"\r\n // [style.background-color]=\"color.complementaryColor\"\r\n // >\r\n // Complementary\r\n // </div>\r\n // </div>\r\n // </div>\r\n\r\n // CSS\r\n // .box {\r\n // width: 100px;\r\n // height: 100px;\r\n // border: solid thin black;\r\n // color: black;\r\n // margin: 4px;\r\n // padding: 16px;\r\n // display: flex;\r\n // flex-wrap: wrap;\r\n // align-content: center;\r\n // justify-content: center;\r\n // }\r\n\r\n private palette = new BehaviorSubject<{ color: string, complementaryColor: string }[]>([])\r\n palette$ = this.palette.asObservable()\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) { }\r\n\r\n /**\r\n * Retrieves a color palette from an image at the specified path.\r\n *\r\n * @param imagePath - The path to the image to extract the color palette from.\r\n * @param colors - The number of colors to include in the palette (default is 3).\r\n * @returns An observable that emits the generated color palette.\r\n */\r\n getColorsFromImage(imagePath: string, colors = 3) {\r\n const image = new Image();\r\n image.src = imagePath;\r\n\r\n image.onload = () => {\r\n const data = this.generateColorPalette(image, colors) || [];\r\n this.palette.next(data);\r\n };\r\n }\r\n\r\n /**\r\n * Generates a color palette from an image.\r\n *\r\n * @param image - The HTML image element to extract the color palette from.\r\n * @param colorCount - The number of colors to include in the palette (default is 6).\r\n * @returns An array of color objects, each with a hex color and a complementary hex color.\r\n */\r\n generateColorPalette(image: HTMLImageElement, colorCount = 6) {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n if (!context) return;\r\n\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n context.drawImage(image, 0, 0);\r\n\r\n // Get the image data\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n const pixelCount = imageData.width * imageData.height;\r\n\r\n // Build an array of RGB colors\r\n const colors = [];\r\n for (let i = 0; i < pixelCount; i++) {\r\n const offset = i * 4;\r\n const r = pixels[offset];\r\n const g = pixels[offset + 1];\r\n const b = pixels[offset + 2];\r\n colors.push([r, g, b]);\r\n }\r\n\r\n // Apply color quantization using k-means clustering\r\n const quantizedColors = this.kMeansColorQuantization(colors, colorCount);\r\n\r\n // Order colors by luminance\r\n quantizedColors.sort((color1, color2) => {\r\n const luminance1 = this.getLuminance(color1);\r\n const luminance2 = this.getLuminance(color2);\r\n return luminance2 - luminance1;\r\n });\r\n\r\n const palette = quantizedColors.map((color) => {\r\n const complementaryColor = color.map((component) => 255 - component);\r\n const hexColor = this.colorConversionService.rgbToHex(color);\r\n const hexComplementaryColor =\r\n this.colorConversionService.rgbToHex(complementaryColor);\r\n return { color: hexColor, complementaryColor: hexComplementaryColor };\r\n });\r\n\r\n return palette;\r\n }\r\n\r\n private getLuminance(color: number[]) {\r\n const [r, g, b] = color\r\n return 0.299 * r + 0.587 * g + 0.114 * b\r\n }\r\n\r\n private calculateColorDistance(color1: number[], color2: number[]) {\r\n const [r1, g1, b1] = color1\r\n const [r2, g2, b2] = color2\r\n const dr = r2 - r1\r\n const dg = g2 - g1\r\n const db = b2 - b1\r\n return Math.sqrt(dr * dr + dg * dg + db * db)\r\n }\r\n\r\n private calculateMeanColor(colors: number[][]) {\r\n let sumR = 0\r\n let sumG = 0\r\n let sumB = 0\r\n for (let i = 0; i < colors.length; i++) {\r\n const [r, g, b] = colors[i]\r\n sumR += r\r\n sumG += g\r\n sumB += b\r\n }\r\n const meanR = Math.round(sumR / colors.length)\r\n const meanG = Math.round(sumG / colors.length)\r\n const meanB = Math.round(sumB / colors.length)\r\n return [meanR, meanG, meanB]\r\n }\r\n\r\n private kMeansColorQuantization(colors: number[][], k: number) {\r\n let clusterCenters = []\r\n for (let i = 0; i < k; i++) {\r\n const randomColor = colors[Math.floor(Math.random() * colors.length)]\r\n clusterCenters.push(randomColor)\r\n }\r\n\r\n let clusters = []\r\n for (let i = 0; i < colors.length; i++) {\r\n const color = colors[i]\r\n let minDistance = Infinity\r\n let nearestCenter = null\r\n for (let j = 0; j < clusterCenters.length; j++) {\r\n const center = clusterCenters[j]\r\n const distance = this.calculateColorDistance(color, center)\r\n if (distance < minDistance) {\r\n minDistance = distance\r\n nearestCenter = center\r\n }\r\n }\r\n clusters.push({ color, center: nearestCenter })\r\n }\r\n\r\n let updatedCenters = []\r\n for (let i = 0; i < clusterCenters.length; i++) {\r\n const center = clusterCenters[i]\r\n const clusterColors = clusters.filter(c => c.center === center).map(c => c.color)\r\n if (clusterColors.length > 0) {\r\n const updatedCenter = this.calculateMeanColor(clusterColors)\r\n updatedCenters.push(updatedCenter)\r\n }\r\n }\r\n\r\n return updatedCenters\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TextColorService {\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) {}\r\n\r\n textColorForBgColor(bgColor: string, lightColor: string, darkColor: string) {\r\n\r\n const UIColors = this.fixColor(bgColor)\r\n\r\n const r = UIColors[0]\r\n const g = UIColors[1]\r\n const b = UIColors[2]\r\n\r\n return ((r*0.299 + g*0.587 + b*0.114) > 149) ? darkColor : lightColor;\r\n\r\n }\r\n\r\n darkerColor(color1: string, color2: string) {\r\n return this.isColorDarker(color1, color2) ? color1 : color2;\r\n }\r\n\r\n isColorDarker(color1: string, color2: string) {\r\n\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(newColor1[0], newColor1[1], newColor1[2]);\r\n const luminance2 = this.calculateLuminance(newColor2[0], newColor2[1], newColor2[2]);\r\n\r\n return luminance1 < luminance2;\r\n }\r\n\r\n\r\n lighterColor(color1: string, color2: string): string {\r\n return (this.isColorLighter(color1,color2)) ? color1 : color2;\r\n }\r\n\r\n isColorLighter(color1: string, color2: string) {\r\n\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(newColor1[0], newColor1[1], newColor1[2]);\r\n const luminance2 = this.calculateLuminance(newColor2[0], newColor2[1], newColor2[2]);\r\n\r\n return (luminance1 > luminance2)\r\n\r\n }\r\n\r\n calculateLuminance(r: number, g: number, b: number): number {\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n }\r\n\r\n fixColor(color: string) {\r\n // Remove leading hash if present\r\n const sanitizedColor = color.startsWith('#') ? color.slice(1) : color;\r\n\r\n // Validate if the color is a valid hex (3 or 6 characters)\r\n if (!this.isValidHex(sanitizedColor)) {\r\n return this.parseRgb(sanitizedColor); // If not hex, attempt to parse as RGB\r\n }\r\n\r\n // Convert hex to RGB\r\n const rgb = this.hexToRgb(sanitizedColor);\r\n return rgb;\r\n }\r\n\r\n // Helper function to validate if a string is a valid 3 or 6 digit hex code\r\n isValidHex(color: string): boolean {\r\n const hexRegex = /^[A-Fa-f0-9]{3}$|^[A-Fa-f0-9]{6}$/i;\r\n return hexRegex.test(color);\r\n }\r\n\r\n // Helper function to convert a 3 or 6 digit hex color to RGB\r\n hexToRgb(hex: string): number[] {\r\n if (hex.length === 3) {\r\n hex = hex.split('').map(c => c + c).join(''); // Expand shorthand hex to full\r\n }\r\n\r\n return [\r\n parseInt(hex.slice(0, 2), 16),\r\n parseInt(hex.slice(2, 4), 16),\r\n parseInt(hex.slice(4, 6), 16),\r\n ];\r\n }\r\n\r\n // Helper function to parse an RGB string (e.g., rgb(255, 0, 0)) into an array\r\n parseRgb(rgb: string): number[] {\r\n const match = rgb.match(/\\d+/g);\r\n return match ? match.map(num => parseInt(num)) : [];\r\n }\r\n\r\n\r\n}\r\n","import { Injectable, inject } from '@angular/core';\nimport { TextColorService } from './text-color.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorLightenDarkenService {\n\n colors = inject(TextColorService)\n\n // const color = '#3498db'; // Your color\n // const lighterColor = lighten(color, 0.2); // 20% lighter\n // const darkerColor = darken(color, 0.2); // 20% darker\n\n // console.log(lighterColor, darkerColor);\n\nconstructor() { }\n\n lighten(color: string, amount: number) {\n\n const rgb = this.colors.fixColor(color)\n // const rgb = color.match(/\\w\\w/g)?.map((x) => parseInt(x, 16)) || [];\n\n // Convert RGB to HSL\n let [r, g, b] = rgb.map((c) => c / 255);\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n // Modify the lightness and clamp it to [0, 1]\n l = Math.min(1, l + amount);\n\n // Convert HSL back to RGB\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n // Convert RGB back to hexadecimal color\n const toHex = (x: number) =>\n Math.round(x * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n\n darken(color: string, amount: number) {\n return this.lighten(color, -amount);\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorSchemeService {\n\n constructor() { }\n\n /**\n * Generates a random hexadecimal color code.\n *\n * This function generates a random hue value between 0 and 360 degrees, and random saturation and lightness values between 50% and 100%. It then converts the HSL values to RGB values using the `hslToRgb` function, and finally converts the RGB values to a hexadecimal color code using the `rgbToHex` function.\n *\n * @returns A hexadecimal color code in the format \"#RRGGBB\".\n */\n generateRandomColor() {\n // Generate a random hue between 0 and 360 (representing degrees on the color wheel)\n const hue = Math.floor(Math.random() * 360);\n\n // Generate random saturation and lightness values between 50% and 100%\n const saturation = Math.floor(Math.random() * 51) + 50;\n const lightness = Math.floor(Math.random() * 51) + 50;\n\n // Convert HSL values to RGB values\n const rgbColor = this.hslToRgb(hue, saturation, lightness);\n\n // Convert RGB values to hexadecimal color code\n const hexColor = this.rgbToHex(rgbColor.r, rgbColor.g, rgbColor.b);\n\n return hexColor;\n }\n\n /**\n * Converts HSL (Hue, Saturation, Lightness) color values to RGB (Red, Green, Blue) color values.\n *\n * @param h - The hue value, ranging from 0 to 360 degrees.\n * @param s - The saturation value, ranging from 0 to 100 percent.\n * @param l - The lightness value, ranging from 0 to 100 percent.\n * @returns An object with the RGB color values, where each value is between 0 and 255.\n */\n hslToRgb(h: number, s: number, l: number) {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l; // Achromatic color (gray)\n } else {\n const hueToRgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = Math.round(hueToRgb(p, q, h + 1 / 3) * 255);\n g = Math.round(hueToRgb(p, q, h) * 255);\n b = Math.round(hueToRgb(p, q, h - 1 / 3) * 255);\n }\n\n return { r, g, b };\n }\n\n /**\n * Converts RGB color values to a hexadecimal color string.\n *\n * @param r - The red color value, between 0 and 255.\n * @param g - The green color value, between 0 and 255.\n * @param b - The blue color value, between 0 and 255.\n * @returns A hexadecimal color string in the format \"#RRGGBB\".\n */\n rgbToHex(r: number, g: number, b: number) {\n const componentToHex = (c: number) => {\n const hex = c.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n };\n\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n }\n\n /**\n * Adjusts a hexadecimal color value by a given percentage.\n *\n * @param hexColor - The hexadecimal color value to adjust.\n * @param percentage - The percentage to adjust the color by, ranging from -100 to 100.\n * @returns The adjusted hexadecimal color value.\n */\n adjustHexColor(hexColor: string, percentage: number) {\n // Remove the \"#\" symbol if present\n hexColor = hexColor.replace(\"#\", \"\");\n\n // Convert the hex color to RGB values\n const red = parseInt(hexColor.substring(0, 2), 16);\n const green = parseInt(hexColor.substring(2, 4), 16);\n const blue = parseInt(hexColor.substring(4, 6), 16);\n\n // Calculate the adjustment amount based on the percentage\n const adjustAmount = Math.round(255 * (percentage / 100));\n\n // Adjust the RGB values\n const adjustedRed = this.clamp(red + adjustAmount);\n const adjustedGreen = this.clamp(green + adjustAmount);\n const adjustedBlue = this.clamp(blue + adjustAmount);\n\n // Convert the adjusted RGB values back to hex\n const adjustedHexColor = `#${(adjustedRed).toString(16).padStart(2, '0')}${(adjustedGreen).toString(16).padStart(2, '0')}${(adjustedBlue).toString(16).padStart(2, '0')}`;\n\n return adjustedHexColor;\n }\n\n clamp(value: number) {\n return Math.max(0, Math.min(value, 255));\n }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { ColorConversionService } from '../color-conversion.service';\nimport { ColorPalletteService } from '../color-pallette.service';\nimport { TextColorService } from '../text-color.service';\nimport { ColorLightenDarkenService } from '../color-lighten-darken.service';\nimport { ColorSchemeService } from '../color-scheme.service';\n\n@Component({\n selector: 'app-color-utilities-demo',\n templateUrl: './color-utilities-demo.component.html',\n styleUrls: ['./color-utilities-demo.component.css'],\n})\nexport class ColorUtilitiesDemoComponent implements OnInit {\n\n colorConversionService = inject(ColorConversionService)\n colorLightenDarkenService = inject(ColorLightenDarkenService)\n colorPalletteService = inject(ColorPalletteService)\n textColorService = inject(TextColorService)\n colorSchemeService = inject(ColorSchemeService)\n\n\n HEX = this.colorConversionService.rgbToHex([12, 56, 128])\n RGB = `rgb(${this.colorConversionService.hexToRgb('#AA11BB')})`\n\n\n lighten = this.colorLightenDarkenService.lighten('#AA11BB', .25)\n darken = this.colorLightenDarkenService.darken('#AA11BB', .25)\n\n colorIsDarker = this.textColorService.isColorDarker(this.lighten, this.darken)\n\n darkBk = this.textColorService.textColorForBgColor(this.HEX, this.lighten, this.darken)\n lightBk = this.textColorService.textColorForBgColor('whitesmoke', this.lighten, this.darken)\n\n palette: any\n colors$ = this.colorPalletteService.palette$\n\n colorPick = this.colorSchemeService.generateRandomColor()\n colorPickDarker = this.colorSchemeService.adjustHexColor(this.colorPick, -25)\n colorPickLighter = this.colorSchemeService.adjustHexColor(this.colorPick, 25)\n\n img: string|any\n\n constructor() { }\n\n ngOnInit() {\n\n // define image path\n this.img = '/assets/images/HD.png'\n this.colorPalletteService.getColorsFromImage(this.img, 8)\n\n\n }\n\n\n}\n\n","<div style=\"margin: 2rem;\">\n\n <h1>Color Conversion Service</h1>\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\">rgbToHex: {{ HEX }}</div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"HEX\"></div>\n </div>\n\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\"> hexToRgb: {{ RGB }} </div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"RGB\"></div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Light/Darken Service</h1>\n\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n Original Color: #AA11BB<br>\n <div style=\"width: 32px; height: 32px; background-color: #AA11BB;\"></div>\n Lighten (25%): {{ lighten }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n Darken (25%): {{ darken }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Text Color Utility Services</h1>\n\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <div style=\"display: flex; gap: 1rem\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n is Darker : {{ colorIsDarker }}\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorIsDarker\"></div>\n </div>\n \n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n \n <div>\n Use: {{ lightBk }} for '{{ HEX }}' background-color<br>\n <div style=\"padding: 1rem;\" [style.backgroundColor]=\"HEX\" [style.color]=\"darkBk\">\n Sample Text Color\n </div>\n </div>\n\n <div>\n Use: {{ lightBk }} for 'whitesmoke' background-color<br>\n <div style=\"padding: 1rem; background-color: whitesmoke;\" [style.color]=\"lightBk\">\n Sample Text Color\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n \n <h1>Color Schema Services</h1>\n\n <div style=\"display: flex; gap: 1rem\">\n Pick Color: {{ colorPick }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPick\"></div>\n Lighter Version: {{ colorPickLighter }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickLighter\"></div>\n DarkerVersion: {{ colorPickDarker }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickDarker\"></div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Pallette Service</h1>\n Creates Pallette from Image\n <div style=\"display: flex; gap: 2rem;\">\n <div>\n <img [src]=\"img\" height=\"180\">\n </div>\n\n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Color Pick</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.color\"></div>\n </ng-container>\n </div>\n \n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Complementary</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.complementaryColor\"></div>\n </ng-container>\n </div>\n </div>\n\n</div>\n\n","import { Directive, ElementRef, Renderer2, HostListener, EventEmitter, Output } from '@angular/core';\n\n@Directive({\n selector: '[getColor]'\n})\nexport class ColorExtractorDirective {\n\n @Output() colorValue: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n get currentElement() {\n return window.getComputedStyle(this.elementRef.nativeElement);\n }\n\n @HostListener('mouseenter')\n onMouseEnter() {\n // console.log('ENTER', this.currentElement)\n this.colorValue.emit(this.currentElement.getPropertyValue('background-color'))\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n // console.log('LEAVE', this.currentElement.getPropertyValue('background-color'))\n this.colorValue.emit('white')\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { ColorGrabberDirective } from './color-grab.directive';\n\nimport { ColorUtilitiesDemoComponent } from './color-utilities-demo/color-utilities-demo.component';\nimport { ColorExtractorDirective } from './color-extractor.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDividerModule\n ],\n declarations: [\n ColorUtilitiesDemoComponent,\n ColorGrabberDirective,\n ColorExtractorDirective\n ],\n exports: [\n ColorUtilitiesDemoComponent\n ]\n})\nexport class ColorUtilitiesModule { }\n","/*\n * Public API Surface of color-utils\n */\n\nexport * from './lib/color-utils.module';\nexport * from './lib/color-utilities-demo/color-utilities-demo.component';\n\nexport * from './lib/color-conversion.service';\nexport * from './lib/color-extractor.directive';\nexport * from './lib/color-grab.directive';\nexport * from './lib/color-pallette.service';\nexport * from './lib/text-color.service';\n\nexport * from './lib/color-scheme.service';\nexport * from './lib/color-lighten-darken.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorConversionService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"color-util-helpers.mjs","sources":["../../../projects/color-utils/src/lib/color-grab.directive.ts","../../../projects/color-utils/src/lib/color-conversion.service.ts","../../../projects/color-utils/src/lib/color-pallette.service.ts","../../../projects/color-utils/src/lib/text-color.service.ts","../../../projects/color-utils/src/lib/color-lighten-darken.service.ts","../../../projects/color-utils/src/lib/color-scheme.service.ts","../../../projects/color-utils/src/lib/color-utilities-demo/color-utilities-demo.component.ts","../../../projects/color-utils/src/lib/color-utilities-demo/color-utilities-demo.component.html","../../../projects/color-utils/src/lib/color-extractor.directive.ts","../../../projects/color-utils/src/lib/color-utils.module.ts","../../../projects/color-utils/src/public-api.ts","../../../projects/color-utils/src/color-util-helpers.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[colorGrabber]'\n})\nexport class ColorGrabberDirective implements OnInit {\n\n ctx?: CanvasRenderingContext2D\n\n @Input() imageUrl?: string\n @Input() light?: string\n @Input() dark?: string\n\n constructor(private el: ElementRef) { }\n\n ngOnInit() {\n\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n\n this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n const img = new Image();\n img.src = this.imageUrl || '';\n img.setAttribute('crossOrigin', '');\n\n img.onload = () => {\n this.ctx?.drawImage(img, 0, 0, 1, 1);\n const imageData = this.ctx?.getImageData(0, 0, 1, 1);\n\n if (imageData && imageData.data) {\n const i = imageData.data;\n\n const rgbColor = `rgba(${i[0]},${i[1]},${i[2]},${i[3]})`;\n const hexColor = \"#\" + ((1 << 24) + (i[0] << 16) + (i[1] << 8) + i[2]).toString(16).slice(1);\n\n const textColor = this.textColorBasedOnBgColor(hexColor, this.light, this.dark);\n\n const hsv = this.RGB2HSV({ r: i[0], g: i[1], b: i[2] });\n hsv.hue = this.HueShift(hsv.hue, 135.0);\n\n const secondaryColor = this.HSV2RGB(hsv);\n const highlightColor = this.lightenDarkenColor(secondaryColor.hex, 50);\n\n this.el.nativeElement.style.backgroundColor = rgbColor;\n this.el.nativeElement.style.color = textColor;\n } else {\n console.error(\"Failed to get image data.\");\n }\n };\n }\n\n textColorBasedOnBgColor(\n bgColor: string,\n lightColor: string = '#FFFFFF',\n darkColor: string = '#000000'\n ) {\n\n const color = (bgColor.charAt(0) === '#') ? bgColor.substring(1, 7) : bgColor\n\n const r = parseInt(color.substring(0, 2), 16) // hexToR\n const g = parseInt(color.substring(2, 4), 16) // hexToG\n const b = parseInt(color.substring(4, 6), 16) // hexToB\n\n const uicolors = [r / 255, g / 255, b / 255]\n\n const c = uicolors.map((col) => {\n\n if (col <= 0.03928) return col / 12.92\n return Math.pow((col + 0.055) / 1.055, 2.4)\n\n })\n\n const L = (0.2126 * c[0]) + (0.7152 * c[1]) + (0.0722 * c[2])\n\n return (L > 0.179) ? darkColor : lightColor\n\n }\n\n RGB2HSV(rgb: { r: any, g: any, b: any}) {\n\n const hsv = { saturation:0, hue:0, value: 0 }\n\n const max = this.max3(rgb.r,rgb.g,rgb.b)\n const dif = max - this.min3(rgb.r,rgb.g,rgb.b)\n hsv.saturation = (max==0.0)?0:(100*dif/max)\n\n if (hsv.saturation == 0) {\n hsv.hue=0\n } else if (rgb.r == max) {\n hsv.hue=60.0*(rgb.g-rgb.b)/dif\n } else if (rgb.g == max) {\n hsv.hue=120.0+60.0*(rgb.b-rgb.r)/dif\n } else if (rgb.b == max) {\n hsv.hue=240.0+60.0*(rgb.r-rgb.g)/dif\n }\n\n if (hsv.hue<0.0) hsv.hue+=360.0\n\n hsv.value = Math.round(max*100/255)\n hsv.hue = Math.round(hsv.hue)\n hsv.saturation = Math.round(hsv.saturation)\n\n return hsv\n }\n\n HSV2RGB(hsv: any) {\n\n const rgb = { r: 0, g: 0, b: 0}\n\n if (hsv.saturation==0) {\n rgb.r = rgb.g = rgb.b = Math.round(hsv.value*2.55)\n } else {\n\n hsv.hue/=60\n hsv.saturation/=100\n hsv.value/=100\n const i = Math.floor(hsv.hue)\n const f = hsv.hue-i\n\n const p = hsv.value*(1-hsv.saturation)\n const q = hsv.value*(1-hsv.saturation*f)\n const t = hsv.value*(1-hsv.saturation*(1-f))\n\n switch(i) {\n\n case 0: rgb.r=hsv.value; rgb.g=t; rgb.b=p; break\n case 1: rgb.r=q; rgb.g=hsv.value; rgb.b=p; break\n case 2: rgb.r=p; rgb.g=hsv.value; rgb.b=t; break\n case 3: rgb.r=p; rgb.g=q; rgb.b=hsv.value; break\n case 4: rgb.r=t; rgb.g=p; rgb.b=hsv.value; break\n\n default: rgb.r=hsv.value; rgb.g=p; rgb.b=q\n\n }\n\n rgb.r = Math.round(rgb.r*255)\n rgb.g = Math.round(rgb.g*255)\n rgb.b = Math.round(rgb.b*255)\n\n }\n\n const rgbColor = `rgba(${rgb.r},${rgb.g},${rgb.b},${1})`\n const hexColor = \"#\" + ((1 << 24) + (rgb.r << 16) + (rgb.g << 8) + rgb.b).toString(16).slice(1)\n\n return { rgb: rgbColor, hex: hexColor }\n }\n\n HueShift(h: any, s: any) {\n h += s\n while (h>=360.0) h-=360.0\n while (h<0.0) h+=360.0\n return h\n }\n\n min3(a: any, b: any, c: any) {\n return (a<b)?((a<c)?a:c):((b<c)?b:c)\n }\n\n max3(a: any, b: any, c: any) {\n return (a>b)?((a>c)?a:c):((b>c)?b:c)\n }\n\n lightenDarkenColor(colorCode: any, amount: number) {\n\n var usePound = false;\n\n if (colorCode[0] == \"#\") {\n colorCode = colorCode.slice(1);\n usePound = true;\n }\n\n var num = parseInt(colorCode, 16);\n\n var r = (num >> 16) + amount;\n\n if (r > 255) {\n r = 255;\n } else if (r < 0) {\n r = 0;\n }\n\n var b = ((num >> 8) & 0x00FF) + amount;\n\n if (b > 255) {\n b = 255;\n } else if (b < 0) {\n b = 0;\n }\n\n var g = (num & 0x0000FF) + amount;\n\n if (g > 255) {\n g = 255;\n } else if (g < 0) {\n g = 0;\n }\n\n return (usePound ? \"#\" : \"\") + (g | (b << 8) | (r << 16)).toString(16)\n\n }\n\n}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorConversionService {\r\n\r\n rgbToHex(rgb: number[] | null): string {\r\n if (rgb === null || rgb.length !== 3 || rgb.some(value => value < 0 || value > 255)) return '';\r\n\r\n const [r, g, b] = rgb;\r\n const hexR = this.componentToHex(r);\r\n const hexG = this.componentToHex(g);\r\n const hexB = this.componentToHex(b);\r\n return \"#\" + hexR + hexG + hexB;\r\n }\r\n\r\n private componentToHex = (c: number) => {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? \"0\" + hex : hex;\r\n }\r\n\r\n hexToRgb(hex: string | null | undefined): number[] {\r\n if (hex === null || hex === undefined) return [];\r\n\r\n hex = (hex.length === 3) ? hex + hex : hex;\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n\r\n return result ? [\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16)\r\n ] : [];\r\n }\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { BehaviorSubject } from 'rxjs'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ColorPalletteService {\r\n\r\n // define image path\r\n // this.colorSelectionService.getColorsFromImage('../assets/sample2.jpg')\r\n\r\n // get colors\r\n // this.colorSelectionService.palette.subscribe(data => this.palette = data)\r\n\r\n // sample html\r\n // <div *ngFor=\"let color of palette\">\r\n // <div style=\"display: flex;\">\r\n // <div\r\n // class=\"box\"\r\n // [style.background-color]=\"color.color\"\r\n // >\r\n // Color\r\n // </div>\r\n // <div\r\n // class=\"box\"\r\n // [style.background-color]=\"color.complementaryColor\"\r\n // >\r\n // Complementary\r\n // </div>\r\n // </div>\r\n // </div>\r\n\r\n // CSS\r\n // .box {\r\n // width: 100px;\r\n // height: 100px;\r\n // border: solid thin black;\r\n // color: black;\r\n // margin: 4px;\r\n // padding: 16px;\r\n // display: flex;\r\n // flex-wrap: wrap;\r\n // align-content: center;\r\n // justify-content: center;\r\n // }\r\n\r\n private palette = new BehaviorSubject<{ color: string, complementaryColor: string }[]>([])\r\n palette$ = this.palette.asObservable()\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) { }\r\n\r\n /**\r\n * Retrieves a color palette from an image at the specified path.\r\n *\r\n * @param imagePath - The path to the image to extract the color palette from.\r\n * @param colors - The number of colors to include in the palette (default is 3).\r\n * @returns An observable that emits the generated color palette.\r\n */\r\n getColorsFromImage(imagePath: string, colors = 3) {\r\n const image = new Image();\r\n image.src = imagePath;\r\n\r\n image.onload = () => {\r\n const data = this.generateColorPalette(image, colors) || [];\r\n this.palette.next(data);\r\n };\r\n }\r\n\r\n /**\r\n * Generates a color palette from an image.\r\n *\r\n * @param image - The HTML image element to extract the color palette from.\r\n * @param colorCount - The number of colors to include in the palette (default is 6).\r\n * @returns An array of color objects, each with a hex color and a complementary hex color.\r\n */\r\n generateColorPalette(image: HTMLImageElement, colorCount = 6) {\r\n const canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n\r\n if (!context) return;\r\n\r\n canvas.width = image.width;\r\n canvas.height = image.height;\r\n context.drawImage(image, 0, 0);\r\n\r\n // Get the image data\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n const pixelCount = imageData.width * imageData.height;\r\n\r\n // Build an array of RGB colors\r\n const colors = [];\r\n for (let i = 0; i < pixelCount; i++) {\r\n const offset = i * 4;\r\n const r = pixels[offset];\r\n const g = pixels[offset + 1];\r\n const b = pixels[offset + 2];\r\n colors.push([r, g, b]);\r\n }\r\n\r\n // Apply color quantization using k-means clustering\r\n const quantizedColors = this.kMeansColorQuantization(colors, colorCount);\r\n\r\n // Order colors by luminance\r\n quantizedColors.sort((color1, color2) => {\r\n const luminance1 = this.getLuminance(color1);\r\n const luminance2 = this.getLuminance(color2);\r\n return luminance2 - luminance1;\r\n });\r\n\r\n const palette = quantizedColors.map((color) => {\r\n const complementaryColor = color.map((component) => 255 - component);\r\n const hexColor = this.colorConversionService.rgbToHex(color);\r\n const hexComplementaryColor =\r\n this.colorConversionService.rgbToHex(complementaryColor);\r\n return { color: hexColor, complementaryColor: hexComplementaryColor };\r\n });\r\n\r\n return palette;\r\n }\r\n\r\n private getLuminance(color: number[]) {\r\n const [r, g, b] = color\r\n return 0.299 * r + 0.587 * g + 0.114 * b\r\n }\r\n\r\n private calculateColorDistance(color1: number[], color2: number[]) {\r\n const [r1, g1, b1] = color1\r\n const [r2, g2, b2] = color2\r\n const dr = r2 - r1\r\n const dg = g2 - g1\r\n const db = b2 - b1\r\n return Math.sqrt(dr * dr + dg * dg + db * db)\r\n }\r\n\r\n private calculateMeanColor(colors: number[][]) {\r\n let sumR = 0\r\n let sumG = 0\r\n let sumB = 0\r\n for (let i = 0; i < colors.length; i++) {\r\n const [r, g, b] = colors[i]\r\n sumR += r\r\n sumG += g\r\n sumB += b\r\n }\r\n const meanR = Math.round(sumR / colors.length)\r\n const meanG = Math.round(sumG / colors.length)\r\n const meanB = Math.round(sumB / colors.length)\r\n return [meanR, meanG, meanB]\r\n }\r\n\r\n private kMeansColorQuantization(colors: number[][], k: number) {\r\n let clusterCenters = []\r\n for (let i = 0; i < k; i++) {\r\n const randomColor = colors[Math.floor(Math.random() * colors.length)]\r\n clusterCenters.push(randomColor)\r\n }\r\n\r\n let clusters = []\r\n for (let i = 0; i < colors.length; i++) {\r\n const color = colors[i]\r\n let minDistance = Infinity\r\n let nearestCenter = null\r\n for (let j = 0; j < clusterCenters.length; j++) {\r\n const center = clusterCenters[j]\r\n const distance = this.calculateColorDistance(color, center)\r\n if (distance < minDistance) {\r\n minDistance = distance\r\n nearestCenter = center\r\n }\r\n }\r\n clusters.push({ color, center: nearestCenter })\r\n }\r\n\r\n let updatedCenters = []\r\n for (let i = 0; i < clusterCenters.length; i++) {\r\n const center = clusterCenters[i]\r\n const clusterColors = clusters.filter(c => c.center === center).map(c => c.color)\r\n if (clusterColors.length > 0) {\r\n const updatedCenter = this.calculateMeanColor(clusterColors)\r\n updatedCenters.push(updatedCenter)\r\n }\r\n }\r\n\r\n return updatedCenters\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { ColorConversionService } from './color-conversion.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TextColorService {\r\n\r\n constructor(\r\n private colorConversionService: ColorConversionService\r\n ) {}\r\n\r\n textColorForBgColor(bgColor: string, lightColor: string, darkColor: string) {\r\n\r\n const UIColors = this.fixColor(bgColor)\r\n\r\n const r = UIColors[0]\r\n const g = UIColors[1]\r\n const b = UIColors[2]\r\n\r\n return ((r*0.299 + g*0.587 + b*0.114) > 149) ? darkColor : lightColor;\r\n\r\n }\r\n\r\n darkerColor(color1: string, color2: string) {\r\n return this.isColorDarker(color1, color2) ? color1 : color2;\r\n }\r\n\r\n isColorDarker(color1: string, color2: string) {\r\n\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(newColor1[0], newColor1[1], newColor1[2]);\r\n const luminance2 = this.calculateLuminance(newColor2[0], newColor2[1], newColor2[2]);\r\n\r\n return luminance1 < luminance2;\r\n }\r\n\r\n\r\n lighterColor(color1: string, color2: string): string {\r\n return (this.isColorLighter(color1,color2)) ? color1 : color2;\r\n }\r\n\r\n isColorLighter(color1: string, color2: string) {\r\n\r\n const newColor1 = this.fixColor(color1);\r\n const newColor2 = this.fixColor(color2);\r\n\r\n const luminance1 = this.calculateLuminance(newColor1[0], newColor1[1], newColor1[2]);\r\n const luminance2 = this.calculateLuminance(newColor2[0], newColor2[1], newColor2[2]);\r\n\r\n return (luminance1 > luminance2)\r\n\r\n }\r\n\r\n calculateLuminance(r: number, g: number, b: number): number {\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n }\r\n\r\n fixColor(color: string) {\r\n // Remove leading hash if present\r\n const sanitizedColor = color.startsWith('#') ? color.slice(1) : color;\r\n\r\n // Validate if the color is a valid hex (3 or 6 characters)\r\n if (!this.isValidHex(sanitizedColor)) {\r\n return this.parseRgb(sanitizedColor); // If not hex, attempt to parse as RGB\r\n }\r\n\r\n // Convert hex to RGB\r\n const rgb = this.hexToRgb(sanitizedColor);\r\n return rgb;\r\n }\r\n\r\n // Helper function to validate if a string is a valid 3 or 6 digit hex code\r\n isValidHex(color: string): boolean {\r\n const hexRegex = /^[A-Fa-f0-9]{3}$|^[A-Fa-f0-9]{6}$/i;\r\n return hexRegex.test(color);\r\n }\r\n\r\n // Helper function to convert a 3 or 6 digit hex color to RGB\r\n hexToRgb(hex: string): number[] {\r\n if (hex.length === 3) {\r\n hex = hex.split('').map(c => c + c).join(''); // Expand shorthand hex to full\r\n }\r\n\r\n return [\r\n parseInt(hex.slice(0, 2), 16),\r\n parseInt(hex.slice(2, 4), 16),\r\n parseInt(hex.slice(4, 6), 16),\r\n ];\r\n }\r\n\r\n // Helper function to parse an RGB string (e.g., rgb(255, 0, 0)) into an array\r\n parseRgb(rgb: string): number[] {\r\n const match = rgb.match(/\\d+/g);\r\n return match ? match.map(num => parseInt(num)) : [];\r\n }\r\n\r\n\r\n}\r\n","import { Injectable, inject } from '@angular/core';\nimport { TextColorService } from './text-color.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorLightenDarkenService {\n\n colors = inject(TextColorService)\n\n // const color = '#3498db'; // Your color\n // const lighterColor = lighten(color, 0.2); // 20% lighter\n // const darkerColor = darken(color, 0.2); // 20% darker\n\n // console.log(lighterColor, darkerColor);\n\nconstructor() { }\n\n lighten(color: string, amount: number) {\n\n const rgb = this.colors.fixColor(color)\n // const rgb = color.match(/\\w\\w/g)?.map((x) => parseInt(x, 16)) || [];\n\n // Convert RGB to HSL\n let [r, g, b] = rgb.map((c) => c / 255);\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n // Modify the lightness and clamp it to [0, 1]\n l = Math.min(1, l + amount);\n\n // Convert HSL back to RGB\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n // Convert RGB back to hexadecimal color\n const toHex = (x: number) =>\n Math.round(x * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n\n darken(color: string, amount: number) {\n return this.lighten(color, -amount);\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorSchemeService {\n\n constructor() { }\n\n /**\n * Generates a random hexadecimal color code.\n *\n * This function generates a random hue value between 0 and 360 degrees, and random saturation and lightness values between 50% and 100%. It then converts the HSL values to RGB values using the `hslToRgb` function, and finally converts the RGB values to a hexadecimal color code using the `rgbToHex` function.\n *\n * @returns A hexadecimal color code in the format \"#RRGGBB\".\n */\n generateRandomColor() {\n // Generate a random hue between 0 and 360 (representing degrees on the color wheel)\n const hue = Math.floor(Math.random() * 360);\n\n // Generate random saturation and lightness values between 50% and 100%\n const saturation = Math.floor(Math.random() * 51) + 50;\n const lightness = Math.floor(Math.random() * 51) + 50;\n\n // Convert HSL values to RGB values\n const rgbColor = this.hslToRgb(hue, saturation, lightness);\n\n // Convert RGB values to hexadecimal color code\n const hexColor = this.rgbToHex(rgbColor.r, rgbColor.g, rgbColor.b);\n\n return hexColor;\n }\n\n /**\n * Converts HSL (Hue, Saturation, Lightness) color values to RGB (Red, Green, Blue) color values.\n *\n * @param h - The hue value, ranging from 0 to 360 degrees.\n * @param s - The saturation value, ranging from 0 to 100 percent.\n * @param l - The lightness value, ranging from 0 to 100 percent.\n * @returns An object with the RGB color values, where each value is between 0 and 255.\n */\n hslToRgb(h: number, s: number, l: number) {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l; // Achromatic color (gray)\n } else {\n const hueToRgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = Math.round(hueToRgb(p, q, h + 1 / 3) * 255);\n g = Math.round(hueToRgb(p, q, h) * 255);\n b = Math.round(hueToRgb(p, q, h - 1 / 3) * 255);\n }\n\n return { r, g, b };\n }\n\n /**\n * Converts RGB color values to a hexadecimal color string.\n *\n * @param r - The red color value, between 0 and 255.\n * @param g - The green color value, between 0 and 255.\n * @param b - The blue color value, between 0 and 255.\n * @returns A hexadecimal color string in the format \"#RRGGBB\".\n */\n rgbToHex(r: number, g: number, b: number) {\n const componentToHex = (c: number) => {\n const hex = c.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n };\n\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n }\n\n /**\n * Adjusts a hexadecimal color value by a given percentage.\n *\n * @param hexColor - The hexadecimal color value to adjust.\n * @param percentage - The percentage to adjust the color by, ranging from -100 to 100.\n * @returns The adjusted hexadecimal color value.\n */\n adjustHexColor(hexColor: string, percentage: number) {\n // Remove the \"#\" symbol if present\n hexColor = hexColor.replace(\"#\", \"\");\n\n // Convert the hex color to RGB values\n const red = parseInt(hexColor.substring(0, 2), 16);\n const green = parseInt(hexColor.substring(2, 4), 16);\n const blue = parseInt(hexColor.substring(4, 6), 16);\n\n // Calculate the adjustment amount based on the percentage\n const adjustAmount = Math.round(255 * (percentage / 100));\n\n // Adjust the RGB values\n const adjustedRed = this.clamp(red + adjustAmount);\n const adjustedGreen = this.clamp(green + adjustAmount);\n const adjustedBlue = this.clamp(blue + adjustAmount);\n\n // Convert the adjusted RGB values back to hex\n const adjustedHexColor = `#${(adjustedRed).toString(16).padStart(2, '0')}${(adjustedGreen).toString(16).padStart(2, '0')}${(adjustedBlue).toString(16).padStart(2, '0')}`;\n\n return adjustedHexColor;\n }\n\n clamp(value: number) {\n return Math.max(0, Math.min(value, 255));\n }\n\n}\n","import { Component, OnInit, inject } from '@angular/core';\n\nimport { ColorConversionService } from '../color-conversion.service';\nimport { ColorPalletteService } from '../color-pallette.service';\nimport { TextColorService } from '../text-color.service';\nimport { ColorLightenDarkenService } from '../color-lighten-darken.service';\nimport { ColorSchemeService } from '../color-scheme.service';\n\n@Component({\n selector: 'app-color-utilities-demo',\n templateUrl: './color-utilities-demo.component.html',\n styleUrls: ['./color-utilities-demo.component.css'],\n})\nexport class ColorUtilitiesDemoComponent implements OnInit {\n\n colorConversionService = inject(ColorConversionService)\n colorLightenDarkenService = inject(ColorLightenDarkenService)\n colorPalletteService = inject(ColorPalletteService)\n textColorService = inject(TextColorService)\n colorSchemeService = inject(ColorSchemeService)\n\n\n HEX = this.colorConversionService.rgbToHex([12, 56, 128])\n RGB = `rgb(${this.colorConversionService.hexToRgb('#AA11BB')})`\n\n\n lighten = this.colorLightenDarkenService.lighten('#AA11BB', .25)\n darken = this.colorLightenDarkenService.darken('#AA11BB', .25)\n\n colorIsDarker = this.textColorService.isColorDarker(this.lighten, this.darken)\n\n darkBk = this.textColorService.textColorForBgColor(this.HEX, this.lighten, this.darken)\n lightBk = this.textColorService.textColorForBgColor('whitesmoke', this.lighten, this.darken)\n\n palette: any\n colors$ = this.colorPalletteService.palette$\n\n colorPick = this.colorSchemeService.generateRandomColor()\n colorPickDarker = this.colorSchemeService.adjustHexColor(this.colorPick, -25)\n colorPickLighter = this.colorSchemeService.adjustHexColor(this.colorPick, 25)\n\n img: string|any\n\n constructor() { }\n\n ngOnInit() {\n\n // define image path\n this.img = 'assets/picture.webp'\n this.colorPalletteService.getColorsFromImage(this.img, 8)\n\n\n }\n\n\n}\n\n","<div style=\"margin: 2rem;\">\n\n <h1>Color Conversion Service</h1>\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\">rgbToHex: {{ HEX }}</div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"HEX\"></div>\n </div>\n\n <div style=\"display: flex\">\n <div style=\"padding-top: .5rem; margin-right: .5rem;\"> hexToRgb: {{ RGB }} </div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"RGB\"></div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Light/Darken Service</h1>\n\n <div style=\"display: flex; flex-direction: column; gap: 1rem;\">\n\n <div style=\"display: flex; gap: 1rem\">\n Original Color: #AA11BB<br>\n <div style=\"width: 32px; height: 32px; background-color: #AA11BB;\"></div>\n Lighten (25%): {{ lighten }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n Darken (25%): {{ darken }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Text Color Utility Services</h1>\n\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <div style=\"display: flex; gap: 1rem\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"darken\"></div>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"lighten\"></div>\n is Darker : {{ colorIsDarker }}\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorIsDarker\"></div>\n </div>\n \n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n \n <div>\n Use: {{ lightBk }} for '{{ HEX }}' background-color<br>\n <div style=\"padding: 1rem;\" [style.backgroundColor]=\"HEX\" [style.color]=\"darkBk\">\n Sample Text Color\n </div>\n </div>\n\n <div>\n Use: {{ lightBk }} for 'whitesmoke' background-color<br>\n <div style=\"padding: 1rem; background-color: whitesmoke;\" [style.color]=\"lightBk\">\n Sample Text Color\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n \n <h1>Color Schema Services</h1>\n\n <div style=\"display: flex; gap: 1rem\">\n Pick Color: {{ colorPick }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPick\"></div>\n Lighter Version: {{ colorPickLighter }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickLighter\"></div>\n DarkerVersion: {{ colorPickDarker }}<br>\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"colorPickDarker\"></div>\n </div>\n\n <div style=\"margin-top: 1rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <h1>Color Pallette Service</h1>\n Creates Pallette from Image\n <div style=\"display: flex; gap: 2rem;\">\n <div>\n <img [src]=\"img\" height=\"180\">\n </div>\n\n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Color Pick</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.color\"></div>\n </ng-container>\n </div>\n \n <div style=\"display: flex; gap: .5rem; width: 120px; border: 1px solid black; flex-wrap: wrap; padding: .5rem;\">\n <div>Complementary</div>\n <ng-container *ngFor=\"let color of (colors$ | async)\">\n <div style=\"width: 32px; height: 32px;\" [style.backgroundColor]=\"color.complementaryColor\"></div>\n </ng-container>\n </div>\n </div>\n\n</div>\n\n","import { Directive, ElementRef, Renderer2, HostListener, EventEmitter, Output } from '@angular/core';\n\n@Directive({\n selector: '[getColor]'\n})\nexport class ColorExtractorDirective {\n\n @Output() colorValue: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n get currentElement() {\n return window.getComputedStyle(this.elementRef.nativeElement);\n }\n\n @HostListener('mouseenter')\n onMouseEnter() {\n // console.log('ENTER', this.currentElement)\n this.colorValue.emit(this.currentElement.getPropertyValue('background-color'))\n }\n\n @HostListener('mouseleave')\n onMouseLeave() {\n // console.log('LEAVE', this.currentElement.getPropertyValue('background-color'))\n this.colorValue.emit('white')\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { ColorGrabberDirective } from './color-grab.directive';\n\nimport { ColorUtilitiesDemoComponent } from './color-utilities-demo/color-utilities-demo.component';\nimport { ColorExtractorDirective } from './color-extractor.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatDividerModule\n ],\n declarations: [\n ColorUtilitiesDemoComponent,\n ColorGrabberDirective,\n ColorExtractorDirective\n ],\n exports: [\n ColorUtilitiesDemoComponent\n ]\n})\nexport class ColorUtilsModule { }\n","/*\n * Public API Surface of color-utils\n */\n\nexport * from './lib/color-utils.module';\n\nexport * from './lib/color-utilities-demo/color-utilities-demo.component';\n\nexport * from './lib/color-conversion.service';\nexport * from './lib/color-extractor.directive';\nexport * from './lib/color-grab.directive';\nexport * from './lib/color-pallette.service';\nexport * from './lib/text-color.service';\n\nexport * from './lib/color-scheme.service';\nexport * from './lib/color-lighten-darken.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ColorConversionService"],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@ import * as i3 from "./color-extractor.directive";
|
|
|
5
5
|
import * as i4 from "@angular/common";
|
|
6
6
|
import * as i5 from "@angular/material/button";
|
|
7
7
|
import * as i6 from "@angular/material/divider";
|
|
8
|
-
export declare class
|
|
9
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
10
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<
|
|
11
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<
|
|
8
|
+
export declare class ColorUtilsModule {
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ColorUtilsModule, never>;
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ColorUtilsModule, [typeof i1.ColorUtilitiesDemoComponent, typeof i2.ColorGrabberDirective, typeof i3.ColorExtractorDirective], [typeof i4.CommonModule, typeof i5.MatButtonModule, typeof i6.MatDividerModule], [typeof i1.ColorUtilitiesDemoComponent]>;
|
|
11
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<ColorUtilsModule>;
|
|
12
12
|
}
|
package/package.json
CHANGED
|
Binary file
|