ngx-colours
Version:
A beautiful color picker for angular that let you choose from a color palette, using sliders (Hue, Lightness, Alpha sliders) or through text input(hex, rgba, hsla)
130 lines • 15 kB
JavaScript
import { EventEmitter, Input, Output, Directive, HostListener, forwardRef, } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import * as i0 from "@angular/core";
import * as i1 from "../services/panel-factory.service";
export class NgxColorsTriggerDirective {
constructor(triggerRef, panelFactory) {
this.triggerRef = triggerRef;
this.panelFactory = panelFactory;
//Main input/output of the color picker
// @Input() color = '#000000';
// @Output() colorChange:EventEmitter<string> = new EventEmitter<string>();
this.color = "";
//This defines the type of animation for the palatte.(slide-in | popup)
this.colorsAnimation = "slide-in";
this.position = "bottom";
this.attachTo = undefined;
this.overlayClassName = undefined;
this.colorPickerControls = "default";
this.acceptLabel = "ACCEPT";
this.cancelLabel = "CANCEL";
// This event is trigger every time the selected color change
this.change = new EventEmitter();
// This event is trigger every time the user change the color using the panel
this.input = new EventEmitter();
// This event is trigger every time the user change the color using the panel
this.slider = new EventEmitter();
this.isDisabled = false;
this.onTouchedCallback = () => { };
this.onChangeCallback = () => { };
}
onClick() {
this.open();
}
open() {
if (!this.isDisabled) {
this.panelRef = this.panelFactory.createPanel(this.attachTo, this.overlayClassName);
this.panelRef.instance.iniciate(this, this.triggerRef, this.color, this.palette, this.colorsAnimation, this.format, this.hideTextInput, this.hideColorPicker, this.acceptLabel, this.cancelLabel, this.colorPickerControls, this.position);
}
}
close() {
this.panelFactory.removePanel();
}
onChange() {
this.onChangeCallback(this.color);
}
setDisabledState(isDisabled) {
this.isDisabled = isDisabled;
this.triggerRef.nativeElement.style.opacity = isDisabled ? 0.5 : undefined;
}
setColor(color) {
this.writeValue(color);
this.input.emit(color);
}
sliderChange(color) {
this.slider.emit(color);
}
get value() {
return this.color;
}
set value(value) {
this.setColor(value);
this.onChangeCallback(value);
}
writeValue(value) {
if (value !== this.color) {
this.color = value;
this.onChange();
this.change.emit(value);
}
}
registerOnChange(fn) {
this.onChangeCallback = fn;
}
registerOnTouched(fn) {
this.onTouchedCallback = fn;
}
}
NgxColorsTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgxColorsTriggerDirective, deps: [{ token: i0.ElementRef }, { token: i1.PanelFactoryService }], target: i0.ɵɵFactoryTarget.Directive });
NgxColorsTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: { colorsAnimation: "colorsAnimation", palette: "palette", format: "format", position: "position", hideTextInput: "hideTextInput", hideColorPicker: "hideColorPicker", attachTo: "attachTo", overlayClassName: "overlayClassName", colorPickerControls: "colorPickerControls", acceptLabel: "acceptLabel", cancelLabel: "cancelLabel" }, outputs: { change: "change", input: "input", slider: "slider" }, host: { listeners: { "click": "onClick()" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NgxColorsTriggerDirective),
multi: true,
},
], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgxColorsTriggerDirective, decorators: [{
type: Directive,
args: [{
selector: "[ngx-colors-trigger]",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NgxColorsTriggerDirective),
multi: true,
},
],
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PanelFactoryService }]; }, propDecorators: { colorsAnimation: [{
type: Input
}], palette: [{
type: Input
}], format: [{
type: Input
}], position: [{
type: Input
}], hideTextInput: [{
type: Input
}], hideColorPicker: [{
type: Input
}], attachTo: [{
type: Input
}], overlayClassName: [{
type: Input
}], colorPickerControls: [{
type: Input
}], acceptLabel: [{
type: Input
}], cancelLabel: [{
type: Input
}], change: [{
type: Output
}], input: [{
type: Output
}], slider: [{
type: Output
}], onClick: [{
type: HostListener,
args: ["click"]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvbG9ycy10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb2xvcnMvc3JjL2xpYi9kaXJlY3RpdmVzL25neC1jb2xvcnMtdHJpZ2dlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFHVCxZQUFZLEVBQ1osVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBYXpFLE1BQU0sT0FBTyx5QkFBeUI7SUFpQ3BDLFlBQ1UsVUFBc0IsRUFDdEIsWUFBaUM7UUFEakMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFsQzNDLHVDQUF1QztRQUN2Qyw4QkFBOEI7UUFDOUIsMkVBQTJFO1FBRTNFLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCx1RUFBdUU7UUFDOUQsb0JBQWUsR0FBeUIsVUFBVSxDQUFDO1FBTW5ELGFBQVEsR0FBcUIsUUFBUSxDQUFDO1FBR3RDLGFBQVEsR0FBdUIsU0FBUyxDQUFDO1FBQ3pDLHFCQUFnQixHQUF1QixTQUFTLENBQUM7UUFDakQsd0JBQW1CLEdBQzFCLFNBQVMsQ0FBQztRQUNILGdCQUFXLEdBQVcsUUFBUSxDQUFDO1FBQy9CLGdCQUFXLEdBQVcsUUFBUSxDQUFDO1FBQ3hDLDZEQUE2RDtRQUNuRCxXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDcEUsNkVBQTZFO1FBQ25FLFVBQUssR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRSw2RUFBNkU7UUFDbkUsV0FBTSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBV3BFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsc0JBQWlCLEdB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UUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjttSUFTVSxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsS0FBSztzQkFBZCxNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFZ0IsT0FBTztzQkFBN0IsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUGFuZWxGYWN0b3J5U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9wYW5lbC1mYWN0b3J5LnNlcnZpY2VcIjtcbmltcG9ydCB7IFBhbmVsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE5neENvbG9yIH0gZnJvbSBcIi4uL2NsYXNlcy9jb2xvclwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW25neC1jb2xvcnMtdHJpZ2dlcl1cIixcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ3hDb2xvcnNUcmlnZ2VyRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5neENvbG9yc1RyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8vTWFpbiBpbnB1dC9vdXRwdXQgb2YgdGhlIGNvbG9yIHBpY2tlclxuICAvLyBASW5wdXQoKSBjb2xvciA9ICcjMDAwMDAwJztcbiAgLy8gQE91dHB1dCgpIGNvbG9yQ2hhbmdlOkV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29sb3IgPSBcIlwiO1xuXG4gIC8vVGhpcyBkZWZpbmVzIHRoZSB0eXBlIG9mIGFuaW1hdGlvbiBmb3IgdGhlIHBhbGF0dGUuKHNsaWRlLWluIHwgcG9wdXApXG4gIEBJbnB1dCgpIGNvbG9yc0FuaW1hdGlvbjogXCJzbGlkZS1pblwiIHwgXCJwb3B1cFwiID0gXCJzbGlkZS1pblwiO1xuXG4gIC8vVGhpcyBpcyB1c2VkIHRvIHNldCBhIGN1c3RvbSBwYWxldHRlIG9mIGNvbG9ycyBpbiB0aGUgcGFuZWw7XG4gIEBJbnB1dCgpIHBhbGV0dGU6IEFycmF5PHN0cmluZz4gfCBBcnJheTxOZ3hDb2xvcj47XG5cbiAgQElucHV0KCkgZm9ybWF0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBvc2l0aW9uOiBcInRvcFwiIHwgXCJib3R0b21cIiA9IFwiYm90dG9tXCI7XG4gIEBJbnB1dCgpIGhpZGVUZXh0SW5wdXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVDb2xvclBpY2tlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgYXR0YWNoVG86IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgb3ZlcmxheUNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjb2xvclBpY2tlckNvbnRyb2xzOiBcImRlZmF1bHRcIiB8IFwib25seS1hbHBoYVwiIHwgXCJuby1hbHBoYVwiID1cbiAgICBcImRlZmF1bHRcIjtcbiAgQElucHV0KCkgYWNjZXB0TGFiZWw6IHN0cmluZyA9IFwiQUNDRVBUXCI7XG4gIEBJbnB1dCgpIGNhbmNlbExhYmVsOiBzdHJpbmcgPSBcIkNBTkNFTFwiO1xuICAvLyBUaGlzIGV2ZW50IGlzIHRyaWdnZXIgZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgY29sb3IgY2hhbmdlXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8vIFRoaXMgZXZlbnQgaXMgdHJpZ2dlciBldmVyeSB0aW1lIHRoZSB1c2VyIGNoYW5nZSB0aGUgY29sb3IgdXNpbmcgdGhlIHBhbmVsXG4gIEBPdXRwdXQoKSBpbnB1dDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLy8gVGhpcyBldmVudCBpcyB0cmlnZ2VyIGV2ZXJ5IHRpbWUgdGhlIHVzZXIgY2hhbmdlIHRoZSBjb2xvciB1c2luZyB0aGUgcGFuZWxcbiAgQE91dHB1dCgpIHNsaWRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIikgb25DbGljaygpIHtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyaWdnZXJSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBwYW5lbEZhY3Rvcnk6IFBhbmVsRmFjdG9yeVNlcnZpY2VcbiAgKSB7fVxuXG4gIHBhbmVsUmVmOiBDb21wb25lbnRSZWY8UGFuZWxDb21wb25lbnQ+O1xuICBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIG9wZW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucGFuZWxSZWYgPSB0aGlzLnBhbmVsRmFjdG9yeS5jcmVhdGVQYW5lbChcbiAgICAgICAgdGhpcy5hdHRhY2hUbyxcbiAgICAgICAgdGhpcy5vdmVybGF5Q2xhc3NOYW1lXG4gICAgICApO1xuICAgICAgdGhpcy5wYW5lbFJlZi5pbnN0YW5jZS5pbmljaWF0ZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVmLFxuICAgICAgICB0aGlzLmNvbG9yLFxuICAgICAgICB0aGlzLnBhbGV0dGUsXG4gICAgICAgIHRoaXMuY29sb3JzQW5pbWF0aW9uLFxuICAgICAgICB0aGlzLmZvcm1hdCxcbiAgICAgICAgdGhpcy5oaWRlVGV4dElucHV0LFxuICAgICAgICB0aGlzLmhpZGVDb2xvclBpY2tlcixcbiAgICAgICAgdGhpcy5hY2NlcHRMYWJlbCxcbiAgICAgICAgdGhpcy5jYW5jZWxMYWJlbCxcbiAgICAgICAgdGhpcy5jb2xvclBpY2tlckNvbnRyb2xzLFxuICAgICAgICB0aGlzLnBvc2l0aW9uXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpIHtcbiAgICB0aGlzLnBhbmVsRmFjdG9yeS5yZW1vdmVQYW5lbCgpO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKCkge1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMudHJpZ2dlclJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBpc0Rpc2FibGVkID8gMC41IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldENvbG9yKGNvbG9yKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKGNvbG9yKTtcbiAgICB0aGlzLmlucHV0LmVtaXQoY29sb3IpO1xuICB9XG5cbiAgcHVibGljIHNsaWRlckNoYW5nZShjb2xvcikge1xuICAgIHRoaXMuc2xpZGVyLmVtaXQoY29sb3IpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sb3I7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0Q29sb3IodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmNvbG9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gdmFsdWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cbn1cbiJdfQ==