ngx-kit 6.2.0 → 7.0.0

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.
Files changed (71) hide show
  1. package/README.md +3 -3
  2. package/angle-selector/README.md +34 -34
  3. package/box-shadow/README.md +33 -33
  4. package/color-picker/README.md +52 -49
  5. package/data-table/README.md +120 -113
  6. package/date-picker/README.md +74 -69
  7. package/dialog/README.md +92 -92
  8. package/drag-resize/README.md +55 -0
  9. package/drawer-menu/README.md +125 -77
  10. package/dropzone/README.md +422 -422
  11. package/fesm2022/ngx-kit-angle-selector.mjs +2 -2
  12. package/fesm2022/ngx-kit-angle-selector.mjs.map +1 -1
  13. package/fesm2022/ngx-kit-box-shadow.mjs +2 -2
  14. package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -1
  15. package/fesm2022/ngx-kit-color-picker.mjs +265 -73
  16. package/fesm2022/ngx-kit-color-picker.mjs.map +1 -1
  17. package/fesm2022/ngx-kit-data-table.mjs +2 -2
  18. package/fesm2022/ngx-kit-data-table.mjs.map +1 -1
  19. package/fesm2022/ngx-kit-date-picker.mjs +11 -11
  20. package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
  21. package/fesm2022/ngx-kit-dialog.mjs +3 -3
  22. package/fesm2022/ngx-kit-dialog.mjs.map +1 -1
  23. package/fesm2022/ngx-kit-drag-resize.mjs +1664 -0
  24. package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -0
  25. package/fesm2022/ngx-kit-drawer-menu.mjs +424 -158
  26. package/fesm2022/ngx-kit-drawer-menu.mjs.map +1 -1
  27. package/fesm2022/ngx-kit-dropzone.mjs +2 -2
  28. package/fesm2022/ngx-kit-dropzone.mjs.map +1 -1
  29. package/fesm2022/ngx-kit-form-field.mjs +3 -5
  30. package/fesm2022/ngx-kit-form-field.mjs.map +1 -1
  31. package/fesm2022/ngx-kit-gallery.mjs +2 -2
  32. package/fesm2022/ngx-kit-gallery.mjs.map +1 -1
  33. package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -1
  34. package/fesm2022/ngx-kit-grid-layout.mjs +927 -0
  35. package/fesm2022/ngx-kit-grid-layout.mjs.map +1 -0
  36. package/fesm2022/ngx-kit-image-editor.mjs +2 -2
  37. package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
  38. package/fesm2022/ngx-kit-menu.mjs +8 -8
  39. package/fesm2022/ngx-kit-menu.mjs.map +1 -1
  40. package/fesm2022/ngx-kit-message.mjs +2 -2
  41. package/fesm2022/ngx-kit-message.mjs.map +1 -1
  42. package/fesm2022/ngx-kit-notify.mjs +2 -2
  43. package/fesm2022/ngx-kit-notify.mjs.map +1 -1
  44. package/fesm2022/ngx-kit-shared.mjs +54 -3
  45. package/fesm2022/ngx-kit-shared.mjs.map +1 -1
  46. package/fesm2022/ngx-kit-time-picker.mjs +2 -2
  47. package/fesm2022/ngx-kit-time-picker.mjs.map +1 -1
  48. package/fesm2022/ngx-kit-virtual-scroll.mjs +392 -0
  49. package/fesm2022/ngx-kit-virtual-scroll.mjs.map +1 -0
  50. package/fesm2022/ngx-kit-webflow.mjs +709 -0
  51. package/fesm2022/ngx-kit-webflow.mjs.map +1 -0
  52. package/gallery/README.md +71 -71
  53. package/gradient-picker/README.md +41 -41
  54. package/grid-layout/README.md +64 -0
  55. package/image-editor/README.md +12 -12
  56. package/menu/README.md +85 -85
  57. package/message/README.md +70 -70
  58. package/notify/README.md +56 -58
  59. package/package.json +17 -1
  60. package/shared/README.md +117 -117
  61. package/time-picker/README.md +89 -95
  62. package/types/ngx-kit-color-picker.d.ts +72 -16
  63. package/types/ngx-kit-date-picker.d.ts +2 -1
  64. package/types/ngx-kit-drag-resize.d.ts +368 -0
  65. package/types/ngx-kit-drawer-menu.d.ts +148 -88
  66. package/types/ngx-kit-grid-layout.d.ts +310 -0
  67. package/types/ngx-kit-image-editor.d.ts +1 -1
  68. package/types/ngx-kit-shared.d.ts +12 -1
  69. package/types/ngx-kit-virtual-scroll.d.ts +179 -0
  70. package/types/ngx-kit-webflow.d.ts +286 -0
  71. package/virtual-scroll/README.md +199 -0
@@ -995,11 +995,11 @@ class HslComponent {
995
995
  }
996
996
  }
997
997
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: HslComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
998
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: HslComponent, isStandalone: true, selector: "app-hsl", inputs: { color: "color", useAlphaChannel: "useAlphaChannel" }, outputs: { colorChange: "colorChange" }, ngImport: i0, template: "<slider\r\n [(ngModel)]=\"hue\"\r\n name=\"hue\"\r\n [min]=\"0\"\r\n [max]=\"360\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n background=\"linear-gradient(to right,red 0%,#ff0 17%,lime 33%,cyan 50%,blue 66%,#f0f 83%,red 100%)\">\r\n <div class=\"slider-title\">\r\n <span>Hue</span>\r\n <input type=\"number\" [(ngModel)]=\"hue\" name=\"inputHue\" min=\"0\" max=\"360\" step=\"1\" />\r\n </div>\r\n</slider>\r\n<slider\r\n [(ngModel)]=\"saturation\"\r\n name=\"saturation\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n [background]=\"'linear-gradient(to right,#808080,' + baseColor + ')'\">\r\n <div class=\"slider-title\">\r\n <span>Saturation</span>\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"saturation\"\r\n name=\"inputSaturation\"\r\n min=\"0\"\r\n max=\"100\"\r\n step=\"1\" />\r\n </div>\r\n</slider>\r\n<slider\r\n [(ngModel)]=\"luminance\"\r\n name=\"luminance\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n [background]=\"'linear-gradient(to right,black,' + baseColor + ',white)'\">\r\n <div class=\"slider-title\">\r\n <span>Luminance</span>\r\n <input type=\"number\" [(ngModel)]=\"luminance\" name=\"inputLuminance\" min=\"0\" max=\"100\" step=\"1\" />\r\n </div>\r\n</slider>\r\n@if (useAlphaChannel) {\r\n <slider\r\n [(ngModel)]=\"alpha\"\r\n name=\"alpha\"\r\n [min]=\"0\"\r\n [max]=\"1\"\r\n [step]=\"0.1\"\r\n (change)=\"generateColor()\"\r\n [isBgTransparent]=\"true\"\r\n [background]=\"'linear-gradient(to right,transparent,' + baseColor + ')'\">\r\n <div class=\"slider-title\">\r\n <span>Alpha</span>\r\n <input type=\"number\" [(ngModel)]=\"alpha\" name=\"inputAlpha\" min=\"0\" max=\"1\" step=\"0.1\" />\r\n </div>\r\n </slider>\r\n}\r\n", styles: [".slider-title{display:flex;align-items:center;justify-content:space-between}.slider-title input{transition:box-shadow .1s;box-shadow:inset #d8d8da 0 0 0 1px,inset #fff 0 0 0 100px;border:none;width:48px;color:#000;font-family:Inter,sans-serif;padding:5px 6px;border-radius:5px;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SliderComponent, selector: "slider", inputs: ["step", "min", "max", "background", "isBgTransparent"], outputs: ["change"] }] });
998
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: HslComponent, isStandalone: true, selector: "app-hsl", inputs: { color: "color", useAlphaChannel: "useAlphaChannel" }, outputs: { colorChange: "colorChange" }, ngImport: i0, template: "<slider\n [(ngModel)]=\"hue\"\n name=\"hue\"\n [min]=\"0\"\n [max]=\"360\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n background=\"linear-gradient(to right,red 0%,#ff0 17%,lime 33%,cyan 50%,blue 66%,#f0f 83%,red 100%)\">\n <div class=\"slider-title\">\n <span>Hue</span>\n <input type=\"number\" [(ngModel)]=\"hue\" name=\"inputHue\" min=\"0\" max=\"360\" step=\"1\" />\n </div>\n</slider>\n<slider\n [(ngModel)]=\"saturation\"\n name=\"saturation\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n [background]=\"'linear-gradient(to right,#808080,' + baseColor + ')'\">\n <div class=\"slider-title\">\n <span>Saturation</span>\n <input\n type=\"number\"\n [(ngModel)]=\"saturation\"\n name=\"inputSaturation\"\n min=\"0\"\n max=\"100\"\n step=\"1\" />\n </div>\n</slider>\n<slider\n [(ngModel)]=\"luminance\"\n name=\"luminance\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n [background]=\"'linear-gradient(to right,black,' + baseColor + ',white)'\">\n <div class=\"slider-title\">\n <span>Luminance</span>\n <input type=\"number\" [(ngModel)]=\"luminance\" name=\"inputLuminance\" min=\"0\" max=\"100\" step=\"1\" />\n </div>\n</slider>\n@if (useAlphaChannel) {\n <slider\n [(ngModel)]=\"alpha\"\n name=\"alpha\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.1\"\n (change)=\"generateColor()\"\n [isBgTransparent]=\"true\"\n [background]=\"'linear-gradient(to right,transparent,' + baseColor + ')'\">\n <div class=\"slider-title\">\n <span>Alpha</span>\n <input type=\"number\" [(ngModel)]=\"alpha\" name=\"inputAlpha\" min=\"0\" max=\"1\" step=\"0.1\" />\n </div>\n </slider>\n}\n", styles: [".slider-title{display:flex;align-items:center;justify-content:space-between}.slider-title input{transition:box-shadow .1s;box-shadow:inset #d8d8da 0 0 0 1px,inset #fff 0 0 0 100px;border:none;width:48px;color:#000;font-family:Inter,sans-serif;padding:5px 6px;border-radius:5px;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SliderComponent, selector: "slider", inputs: ["step", "min", "max", "background", "isBgTransparent"], outputs: ["change"] }] });
999
999
  }
1000
1000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: HslComponent, decorators: [{
1001
1001
  type: Component,
1002
- args: [{ selector: 'app-hsl', imports: [FormsModule, SliderComponent], template: "<slider\r\n [(ngModel)]=\"hue\"\r\n name=\"hue\"\r\n [min]=\"0\"\r\n [max]=\"360\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n background=\"linear-gradient(to right,red 0%,#ff0 17%,lime 33%,cyan 50%,blue 66%,#f0f 83%,red 100%)\">\r\n <div class=\"slider-title\">\r\n <span>Hue</span>\r\n <input type=\"number\" [(ngModel)]=\"hue\" name=\"inputHue\" min=\"0\" max=\"360\" step=\"1\" />\r\n </div>\r\n</slider>\r\n<slider\r\n [(ngModel)]=\"saturation\"\r\n name=\"saturation\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n [background]=\"'linear-gradient(to right,#808080,' + baseColor + ')'\">\r\n <div class=\"slider-title\">\r\n <span>Saturation</span>\r\n <input\r\n type=\"number\"\r\n [(ngModel)]=\"saturation\"\r\n name=\"inputSaturation\"\r\n min=\"0\"\r\n max=\"100\"\r\n step=\"1\" />\r\n </div>\r\n</slider>\r\n<slider\r\n [(ngModel)]=\"luminance\"\r\n name=\"luminance\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [step]=\"1\"\r\n (change)=\"generateColor()\"\r\n [background]=\"'linear-gradient(to right,black,' + baseColor + ',white)'\">\r\n <div class=\"slider-title\">\r\n <span>Luminance</span>\r\n <input type=\"number\" [(ngModel)]=\"luminance\" name=\"inputLuminance\" min=\"0\" max=\"100\" step=\"1\" />\r\n </div>\r\n</slider>\r\n@if (useAlphaChannel) {\r\n <slider\r\n [(ngModel)]=\"alpha\"\r\n name=\"alpha\"\r\n [min]=\"0\"\r\n [max]=\"1\"\r\n [step]=\"0.1\"\r\n (change)=\"generateColor()\"\r\n [isBgTransparent]=\"true\"\r\n [background]=\"'linear-gradient(to right,transparent,' + baseColor + ')'\">\r\n <div class=\"slider-title\">\r\n <span>Alpha</span>\r\n <input type=\"number\" [(ngModel)]=\"alpha\" name=\"inputAlpha\" min=\"0\" max=\"1\" step=\"0.1\" />\r\n </div>\r\n </slider>\r\n}\r\n", styles: [".slider-title{display:flex;align-items:center;justify-content:space-between}.slider-title input{transition:box-shadow .1s;box-shadow:inset #d8d8da 0 0 0 1px,inset #fff 0 0 0 100px;border:none;width:48px;color:#000;font-family:Inter,sans-serif;padding:5px 6px;border-radius:5px;font-size:12px}\n"] }]
1002
+ args: [{ selector: 'app-hsl', imports: [FormsModule, SliderComponent], template: "<slider\n [(ngModel)]=\"hue\"\n name=\"hue\"\n [min]=\"0\"\n [max]=\"360\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n background=\"linear-gradient(to right,red 0%,#ff0 17%,lime 33%,cyan 50%,blue 66%,#f0f 83%,red 100%)\">\n <div class=\"slider-title\">\n <span>Hue</span>\n <input type=\"number\" [(ngModel)]=\"hue\" name=\"inputHue\" min=\"0\" max=\"360\" step=\"1\" />\n </div>\n</slider>\n<slider\n [(ngModel)]=\"saturation\"\n name=\"saturation\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n [background]=\"'linear-gradient(to right,#808080,' + baseColor + ')'\">\n <div class=\"slider-title\">\n <span>Saturation</span>\n <input\n type=\"number\"\n [(ngModel)]=\"saturation\"\n name=\"inputSaturation\"\n min=\"0\"\n max=\"100\"\n step=\"1\" />\n </div>\n</slider>\n<slider\n [(ngModel)]=\"luminance\"\n name=\"luminance\"\n [min]=\"0\"\n [max]=\"100\"\n [step]=\"1\"\n (change)=\"generateColor()\"\n [background]=\"'linear-gradient(to right,black,' + baseColor + ',white)'\">\n <div class=\"slider-title\">\n <span>Luminance</span>\n <input type=\"number\" [(ngModel)]=\"luminance\" name=\"inputLuminance\" min=\"0\" max=\"100\" step=\"1\" />\n </div>\n</slider>\n@if (useAlphaChannel) {\n <slider\n [(ngModel)]=\"alpha\"\n name=\"alpha\"\n [min]=\"0\"\n [max]=\"1\"\n [step]=\"0.1\"\n (change)=\"generateColor()\"\n [isBgTransparent]=\"true\"\n [background]=\"'linear-gradient(to right,transparent,' + baseColor + ')'\">\n <div class=\"slider-title\">\n <span>Alpha</span>\n <input type=\"number\" [(ngModel)]=\"alpha\" name=\"inputAlpha\" min=\"0\" max=\"1\" step=\"0.1\" />\n </div>\n </slider>\n}\n", styles: [".slider-title{display:flex;align-items:center;justify-content:space-between}.slider-title input{transition:box-shadow .1s;box-shadow:inset #d8d8da 0 0 0 1px,inset #fff 0 0 0 100px;border:none;width:48px;color:#000;font-family:Inter,sans-serif;padding:5px 6px;border-radius:5px;font-size:12px}\n"] }]
1003
1003
  }], ctorParameters: () => [], propDecorators: { color: [{
1004
1004
  type: Input
1005
1005
  }], useAlphaChannel: [{
@@ -1222,7 +1222,7 @@ class NgxInputColorComponent {
1222
1222
  multi: true,
1223
1223
  useExisting: NgxInputColorComponent,
1224
1224
  },
1225
- ], ngImport: i0, template: "<div\r\n class=\"ngx-input-color-picker\"\r\n (click)=\"stopPropagation($event)\"\r\n [class.simple-mode]=\"simpleMode\">\r\n @if (!simpleMode) {\r\n <div\r\n class=\"ngx-color-preview\"\r\n [ngStyle]=\"{ '--ngx-selected-color': rgbaColor }\"\r\n [class.is-dark-color]=\"isDarkColor\">\r\n <div class=\"rgbacode\">{{ outputColor | uppercase }}</div>\r\n @if (outputType !== 'HEX') {\r\n <div class=\"hexacode\">{{ hexColor | uppercase }}</div>\r\n }\r\n <div class=\"colorname\">{{ name }}</div>\r\n <div class=\"color\"></div>\r\n </div>\r\n }\r\n <div class=\"ngx-c-inner\">\r\n <div class=\"top-actions\">\r\n <select [(ngModel)]=\"defaultInspector\" name=\"inspector\">\r\n @for (inspector of ColorInspector | enumToArray; track inspector) {\r\n <option [value]=\"inspector\">\r\n {{ ColorInspector[+inspector] }}\r\n </option>\r\n }\r\n </select>\r\n @if (isSupportedEyeDrop) {\r\n <button type=\"button\" (click)=\"openEyeDrop()\" class=\"ngx-btn-eyedroper\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <defs>\r\n <style>\r\n .fa-secondary {\r\n opacity: 0.4;\r\n }\r\n </style>\r\n </defs>\r\n <path\r\n class=\"fa-primary\"\r\n d=\"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM132.1 416H96V379.9C96 375.6 97.69 371.6 100.7 368.6L149.3 320H234.7L143.4 411.3C140.4 414.3 136.4 416 132.1 416H132.1z\" />\r\n <path\r\n class=\"fa-secondary\"\r\n d=\"M244 225.3L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L286.7 268L332 313.3L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.372 502.6C-1.414 491.8-3.087 474.9 5.374 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L198.7 180L244 225.3z\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n\r\n @switch (+defaultInspector) {\r\n @case (ColorInspector.Picker) {\r\n <app-picker\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [simpleMode]=\"simpleMode\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-picker>\r\n }\r\n @case (ColorInspector.HSL) {\r\n <app-hsl\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-hsl>\r\n }\r\n @case (ColorInspector.RGB) {\r\n <app-rgb\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-rgb>\r\n }\r\n @case (ColorInspector.CMYK) {\r\n <app-cmyk [color]=\"color\" (colorChange)=\"initColor($event)\"></app-cmyk>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{--ngx-color-bg: #fff;--ngx-color-text: #000}:host-context(.dark){--ngx-color-bg: #222;--ngx-color-text: #fff}.ngx-input-color-picker{width:270px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-color-picker .ngx-c-inner{padding:12px;background:var(--ngx-color-bg);color:var(--ngx-color-text);border-radius:15px;margin-top:-15px;position:relative}.ngx-input-color-picker *{box-sizing:border-box}.ngx-input-color-picker.simple-mode{width:220px;--ngx-thumb-size: 24px}.ngx-input-color-picker.simple-mode .ngx-c-inner{padding:12px;margin:0}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-color)}.ngx-color-preview .rgbacode,.ngx-color-preview .colorname,.ngx-color-preview .color{text-shadow:0 0 1px #000000;position:relative;z-index:1}.button-groups{display:flex;border-radius:4px;overflow:hidden;border:1px #d3d3d3 solid}.button-groups button{cursor:pointer;background:#f9f9f9;outline:none;border:none;transition:all .3s;border-left:1px #d3d3d3 solid;padding:10px 12px;flex:auto}.button-groups button:hover{background:#8db6e4}.button-groups button:first-child{border-left-width:0}.ngx-btn-eyedroper{padding:2px;min-width:0;width:45px;cursor:pointer;background-color:transparent;outline:none;transition:all .3s;border:none;border-radius:6px}.ngx-btn-eyedroper svg{width:18px;fill:var(--ngx-color-text)}.top-actions{display:flex;justify-content:space-between;align-items:center;padding:0 0 12px}.top-actions select{outline:none;border:none;border-radius:4px;padding:5px 10px;background:none;color:var(--ngx-color-text)}.top-actions select:focus{cursor:pointer;background:#e5f0ff;color:#06f}.top-actions select option{padding:10px 20px;background:var(--ngx-color-bg);color:var(--ngx-color-text);transition:all .3s}.top-actions select option:hover{background:#f0f0f048}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PickerComponent, selector: "app-picker", inputs: ["simpleMode", "color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "component", type: CmykComponent, selector: "app-cmyk", inputs: ["color"], outputs: ["colorChange"] }, { kind: "component", type: HslComponent, selector: "app-hsl", inputs: ["color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "component", type: RgbComponent, selector: "app-rgb", inputs: ["color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "pipe", type: i1$1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: EnumToArrayPipe, name: "enumToArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1225
+ ], ngImport: i0, template: "<div\n class=\"ngx-input-color-picker\"\n (click)=\"stopPropagation($event)\"\n [class.simple-mode]=\"simpleMode\">\n @if (!simpleMode) {\n <div\n class=\"ngx-color-preview\"\n [ngStyle]=\"{ '--ngx-selected-color': rgbaColor }\"\n [class.is-dark-color]=\"isDarkColor\">\n <div class=\"rgbacode\">{{ outputColor | uppercase }}</div>\n @if (outputType !== 'HEX') {\n <div class=\"hexacode\">{{ hexColor | uppercase }}</div>\n }\n <div class=\"colorname\">{{ name }}</div>\n <div class=\"color\"></div>\n </div>\n }\n <div class=\"ngx-c-inner\">\n <div class=\"top-actions\">\n <select [(ngModel)]=\"defaultInspector\" name=\"inspector\">\n @for (inspector of ColorInspector | enumToArray; track inspector) {\n <option [value]=\"inspector\">\n {{ ColorInspector[+inspector] }}\n </option>\n }\n </select>\n @if (isSupportedEyeDrop) {\n <button type=\"button\" (click)=\"openEyeDrop()\" class=\"ngx-btn-eyedroper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <defs>\n <style>\n .fa-secondary {\n opacity: 0.4;\n }\n </style>\n </defs>\n <path\n class=\"fa-primary\"\n d=\"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM132.1 416H96V379.9C96 375.6 97.69 371.6 100.7 368.6L149.3 320H234.7L143.4 411.3C140.4 414.3 136.4 416 132.1 416H132.1z\" />\n <path\n class=\"fa-secondary\"\n d=\"M244 225.3L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L286.7 268L332 313.3L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.372 502.6C-1.414 491.8-3.087 474.9 5.374 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L198.7 180L244 225.3z\" />\n </svg>\n </button>\n }\n </div>\n\n @switch (+defaultInspector) {\n @case (ColorInspector.Picker) {\n <app-picker\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [simpleMode]=\"simpleMode\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-picker>\n }\n @case (ColorInspector.HSL) {\n <app-hsl\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-hsl>\n }\n @case (ColorInspector.RGB) {\n <app-rgb\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-rgb>\n }\n @case (ColorInspector.CMYK) {\n <app-cmyk [color]=\"color\" (colorChange)=\"initColor($event)\"></app-cmyk>\n }\n }\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: #fff;--ngx-color-text: #000}:host-context(.dark){--ngx-color-bg: #222;--ngx-color-text: #fff}.ngx-input-color-picker{width:270px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-color-picker .ngx-c-inner{padding:12px;background:var(--ngx-color-bg);color:var(--ngx-color-text);border-radius:15px;margin-top:-15px;position:relative}.ngx-input-color-picker *{box-sizing:border-box}.ngx-input-color-picker.simple-mode{width:220px;--ngx-thumb-size: 24px}.ngx-input-color-picker.simple-mode .ngx-c-inner{padding:12px;margin:0}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-color)}.ngx-color-preview .rgbacode,.ngx-color-preview .colorname,.ngx-color-preview .color{text-shadow:0 0 1px #000000;position:relative;z-index:1}.button-groups{display:flex;border-radius:4px;overflow:hidden;border:1px #d3d3d3 solid}.button-groups button{cursor:pointer;background:#f9f9f9;outline:none;border:none;transition:all .3s;border-left:1px #d3d3d3 solid;padding:10px 12px;flex:auto}.button-groups button:hover{background:#8db6e4}.button-groups button:first-child{border-left-width:0}.ngx-btn-eyedroper{padding:2px;min-width:0;width:45px;cursor:pointer;background-color:transparent;outline:none;transition:all .3s;border:none;border-radius:6px}.ngx-btn-eyedroper svg{width:18px;fill:var(--ngx-color-text)}.top-actions{display:flex;justify-content:space-between;align-items:center;padding:0 0 12px}.top-actions select{outline:none;border:none;border-radius:4px;padding:5px 10px;background:none;color:var(--ngx-color-text)}.top-actions select:focus{cursor:pointer;background:#e5f0ff;color:#06f}.top-actions select option{padding:10px 20px;background:var(--ngx-color-bg);color:var(--ngx-color-text);transition:all .3s}.top-actions select option:hover{background:#f0f0f048}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple]):not([ngNoCva])[formControlName],select:not([multiple]):not([ngNoCva])[formControl],select:not([multiple]):not([ngNoCva])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PickerComponent, selector: "app-picker", inputs: ["simpleMode", "color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "component", type: CmykComponent, selector: "app-cmyk", inputs: ["color"], outputs: ["colorChange"] }, { kind: "component", type: HslComponent, selector: "app-hsl", inputs: ["color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "component", type: RgbComponent, selector: "app-rgb", inputs: ["color", "useAlphaChannel"], outputs: ["colorChange"] }, { kind: "pipe", type: i1$1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: EnumToArrayPipe, name: "enumToArray" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1226
1226
  }
1227
1227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputColorComponent, decorators: [{
1228
1228
  type: Component,
@@ -1247,7 +1247,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
1247
1247
  CmykComponent,
1248
1248
  HslComponent,
1249
1249
  RgbComponent,
1250
- ], template: "<div\r\n class=\"ngx-input-color-picker\"\r\n (click)=\"stopPropagation($event)\"\r\n [class.simple-mode]=\"simpleMode\">\r\n @if (!simpleMode) {\r\n <div\r\n class=\"ngx-color-preview\"\r\n [ngStyle]=\"{ '--ngx-selected-color': rgbaColor }\"\r\n [class.is-dark-color]=\"isDarkColor\">\r\n <div class=\"rgbacode\">{{ outputColor | uppercase }}</div>\r\n @if (outputType !== 'HEX') {\r\n <div class=\"hexacode\">{{ hexColor | uppercase }}</div>\r\n }\r\n <div class=\"colorname\">{{ name }}</div>\r\n <div class=\"color\"></div>\r\n </div>\r\n }\r\n <div class=\"ngx-c-inner\">\r\n <div class=\"top-actions\">\r\n <select [(ngModel)]=\"defaultInspector\" name=\"inspector\">\r\n @for (inspector of ColorInspector | enumToArray; track inspector) {\r\n <option [value]=\"inspector\">\r\n {{ ColorInspector[+inspector] }}\r\n </option>\r\n }\r\n </select>\r\n @if (isSupportedEyeDrop) {\r\n <button type=\"button\" (click)=\"openEyeDrop()\" class=\"ngx-btn-eyedroper\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <defs>\r\n <style>\r\n .fa-secondary {\r\n opacity: 0.4;\r\n }\r\n </style>\r\n </defs>\r\n <path\r\n class=\"fa-primary\"\r\n d=\"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM132.1 416H96V379.9C96 375.6 97.69 371.6 100.7 368.6L149.3 320H234.7L143.4 411.3C140.4 414.3 136.4 416 132.1 416H132.1z\" />\r\n <path\r\n class=\"fa-secondary\"\r\n d=\"M244 225.3L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L286.7 268L332 313.3L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.372 502.6C-1.414 491.8-3.087 474.9 5.374 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L198.7 180L244 225.3z\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n\r\n @switch (+defaultInspector) {\r\n @case (ColorInspector.Picker) {\r\n <app-picker\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [simpleMode]=\"simpleMode\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-picker>\r\n }\r\n @case (ColorInspector.HSL) {\r\n <app-hsl\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-hsl>\r\n }\r\n @case (ColorInspector.RGB) {\r\n <app-rgb\r\n [color]=\"color\"\r\n (colorChange)=\"initColor($event)\"\r\n [useAlphaChannel]=\"useAlphaChannel\"></app-rgb>\r\n }\r\n @case (ColorInspector.CMYK) {\r\n <app-cmyk [color]=\"color\" (colorChange)=\"initColor($event)\"></app-cmyk>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{--ngx-color-bg: #fff;--ngx-color-text: #000}:host-context(.dark){--ngx-color-bg: #222;--ngx-color-text: #fff}.ngx-input-color-picker{width:270px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-color-picker .ngx-c-inner{padding:12px;background:var(--ngx-color-bg);color:var(--ngx-color-text);border-radius:15px;margin-top:-15px;position:relative}.ngx-input-color-picker *{box-sizing:border-box}.ngx-input-color-picker.simple-mode{width:220px;--ngx-thumb-size: 24px}.ngx-input-color-picker.simple-mode .ngx-c-inner{padding:12px;margin:0}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-color)}.ngx-color-preview .rgbacode,.ngx-color-preview .colorname,.ngx-color-preview .color{text-shadow:0 0 1px #000000;position:relative;z-index:1}.button-groups{display:flex;border-radius:4px;overflow:hidden;border:1px #d3d3d3 solid}.button-groups button{cursor:pointer;background:#f9f9f9;outline:none;border:none;transition:all .3s;border-left:1px #d3d3d3 solid;padding:10px 12px;flex:auto}.button-groups button:hover{background:#8db6e4}.button-groups button:first-child{border-left-width:0}.ngx-btn-eyedroper{padding:2px;min-width:0;width:45px;cursor:pointer;background-color:transparent;outline:none;transition:all .3s;border:none;border-radius:6px}.ngx-btn-eyedroper svg{width:18px;fill:var(--ngx-color-text)}.top-actions{display:flex;justify-content:space-between;align-items:center;padding:0 0 12px}.top-actions select{outline:none;border:none;border-radius:4px;padding:5px 10px;background:none;color:var(--ngx-color-text)}.top-actions select:focus{cursor:pointer;background:#e5f0ff;color:#06f}.top-actions select option{padding:10px 20px;background:var(--ngx-color-bg);color:var(--ngx-color-text);transition:all .3s}.top-actions select option:hover{background:#f0f0f048}\n"] }]
1250
+ ], template: "<div\n class=\"ngx-input-color-picker\"\n (click)=\"stopPropagation($event)\"\n [class.simple-mode]=\"simpleMode\">\n @if (!simpleMode) {\n <div\n class=\"ngx-color-preview\"\n [ngStyle]=\"{ '--ngx-selected-color': rgbaColor }\"\n [class.is-dark-color]=\"isDarkColor\">\n <div class=\"rgbacode\">{{ outputColor | uppercase }}</div>\n @if (outputType !== 'HEX') {\n <div class=\"hexacode\">{{ hexColor | uppercase }}</div>\n }\n <div class=\"colorname\">{{ name }}</div>\n <div class=\"color\"></div>\n </div>\n }\n <div class=\"ngx-c-inner\">\n <div class=\"top-actions\">\n <select [(ngModel)]=\"defaultInspector\" name=\"inspector\">\n @for (inspector of ColorInspector | enumToArray; track inspector) {\n <option [value]=\"inspector\">\n {{ ColorInspector[+inspector] }}\n </option>\n }\n </select>\n @if (isSupportedEyeDrop) {\n <button type=\"button\" (click)=\"openEyeDrop()\" class=\"ngx-btn-eyedroper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <defs>\n <style>\n .fa-secondary {\n opacity: 0.4;\n }\n </style>\n </defs>\n <path\n class=\"fa-primary\"\n d=\"M482.8 29.23C521.7 68.21 521.7 131.4 482.8 170.4L381.2 271.9L390.6 281.4C403.1 293.9 403.1 314.1 390.6 326.6C378.1 339.1 357.9 339.1 345.4 326.6L185.4 166.6C172.9 154.1 172.9 133.9 185.4 121.4C197.9 108.9 218.1 108.9 230.6 121.4L240.1 130.8L341.6 29.23C380.6-9.744 443.8-9.744 482.8 29.23L482.8 29.23zM132.1 416H96V379.9C96 375.6 97.69 371.6 100.7 368.6L149.3 320H234.7L143.4 411.3C140.4 414.3 136.4 416 132.1 416H132.1z\" />\n <path\n class=\"fa-secondary\"\n d=\"M244 225.3L100.7 368.6C97.69 371.6 96 375.6 96 379.9V416H132.1C136.4 416 140.4 414.3 143.4 411.3L286.7 268L332 313.3L188.7 456.6C173.7 471.6 153.3 480 132.1 480H89.69L49.75 506.6C37.06 515.1 20.16 513.4 9.372 502.6C-1.414 491.8-3.087 474.9 5.374 462.2L32 422.3V379.9C32 358.7 40.43 338.3 55.43 323.3L198.7 180L244 225.3z\" />\n </svg>\n </button>\n }\n </div>\n\n @switch (+defaultInspector) {\n @case (ColorInspector.Picker) {\n <app-picker\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [simpleMode]=\"simpleMode\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-picker>\n }\n @case (ColorInspector.HSL) {\n <app-hsl\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-hsl>\n }\n @case (ColorInspector.RGB) {\n <app-rgb\n [color]=\"color\"\n (colorChange)=\"initColor($event)\"\n [useAlphaChannel]=\"useAlphaChannel\"></app-rgb>\n }\n @case (ColorInspector.CMYK) {\n <app-cmyk [color]=\"color\" (colorChange)=\"initColor($event)\"></app-cmyk>\n }\n }\n </div>\n</div>\n", styles: [":host{--ngx-color-bg: #fff;--ngx-color-text: #000}:host-context(.dark){--ngx-color-bg: #222;--ngx-color-text: #fff}.ngx-input-color-picker{width:270px;max-width:100%;border-radius:15px;overflow:hidden;direction:ltr;font-family:arial,tahoma;border:1px rgba(134,134,134,.3490196078) solid;box-shadow:0 0 20px #7a7a7a21}.ngx-input-color-picker .ngx-c-inner{padding:12px;background:var(--ngx-color-bg);color:var(--ngx-color-text);border-radius:15px;margin-top:-15px;position:relative}.ngx-input-color-picker *{box-sizing:border-box}.ngx-input-color-picker.simple-mode{width:220px;--ngx-thumb-size: 24px}.ngx-input-color-picker.simple-mode .ngx-c-inner{padding:12px;margin:0}.ngx-color-preview{min-height:100px;padding:10px 36px;line-height:1.6;font-size:14px;font-family:arial,tahoma;font-weight:700;position:relative;color:#353535;background-color:#fff}.ngx-color-preview.is-dark-color{color:#fff}.ngx-color-preview:after,.ngx-color-preview:before{content:\" \";position:absolute;inset:0}.ngx-color-preview:before{background-image:linear-gradient(45deg,#ccc 25%,transparent 25%),linear-gradient(-45deg,#ccc 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#ccc 75%),linear-gradient(-45deg,transparent 75%,#ccc 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0px}.ngx-color-preview:after{background:var(--ngx-selected-color)}.ngx-color-preview .rgbacode,.ngx-color-preview .colorname,.ngx-color-preview .color{text-shadow:0 0 1px #000000;position:relative;z-index:1}.button-groups{display:flex;border-radius:4px;overflow:hidden;border:1px #d3d3d3 solid}.button-groups button{cursor:pointer;background:#f9f9f9;outline:none;border:none;transition:all .3s;border-left:1px #d3d3d3 solid;padding:10px 12px;flex:auto}.button-groups button:hover{background:#8db6e4}.button-groups button:first-child{border-left-width:0}.ngx-btn-eyedroper{padding:2px;min-width:0;width:45px;cursor:pointer;background-color:transparent;outline:none;transition:all .3s;border:none;border-radius:6px}.ngx-btn-eyedroper svg{width:18px;fill:var(--ngx-color-text)}.top-actions{display:flex;justify-content:space-between;align-items:center;padding:0 0 12px}.top-actions select{outline:none;border:none;border-radius:4px;padding:5px 10px;background:none;color:var(--ngx-color-text)}.top-actions select:focus{cursor:pointer;background:#e5f0ff;color:#06f}.top-actions select option{padding:10px 20px;background:var(--ngx-color-bg);color:var(--ngx-color-text);transition:all .3s}.top-actions select option:hover{background:#f0f0f048}\n"] }]
1251
1251
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { setTheme: [{
1252
1252
  type: Input,
1253
1253
  args: ['theme']
@@ -1275,42 +1275,69 @@ class NgxInputColor {
1275
1275
  outputType = 'HEX';
1276
1276
  theme = 'auto';
1277
1277
  useAlphaChannel = true;
1278
- set setUseAlphaChannel(val) {
1279
- this.useAlphaChannel = val == true;
1278
+ set setUseAlphaChannel(value) {
1279
+ this.useAlphaChannel = value === true;
1280
1280
  if (!this.useAlphaChannel && this.color) {
1281
1281
  this.color.removeAlphaChannel();
1282
- this.color.getOutputResult(this.outputType).then((c) => {
1283
- this.emitChange(c);
1284
- });
1282
+ void this.color.getOutputResult(this.outputType).then((value) => this.emitChange(value));
1285
1283
  }
1286
1284
  }
1287
- boundInputHandler = (e) => {
1288
- this.writeValue(e.target.value);
1289
- };
1290
- _targetInput;
1291
- set ngxInputColor(el) {
1285
+ /**
1286
+ * Input target.
1287
+ *
1288
+ * Supported:
1289
+ *
1290
+ * <input ngxInputColor>
1291
+ *
1292
+ * or
1293
+ *
1294
+ * <div [ngxInputColor]="inputElement"></div>
1295
+ *
1296
+ * or
1297
+ *
1298
+ * <div [ngxInputColor]="inputRef"></div>
1299
+ */
1300
+ set ngxInputColor(element) {
1301
+ this.removeTargetInputListener();
1292
1302
  this.isHostInput = false;
1293
- if (el instanceof ElementRef) {
1294
- this._targetInput = el.nativeElement;
1303
+ this.explicitTargetInput = false;
1304
+ if (element instanceof ElementRef) {
1305
+ this._targetInput = element.nativeElement;
1306
+ this.explicitTargetInput = true;
1295
1307
  }
1296
- else if (el instanceof HTMLInputElement) {
1297
- this.isHostInput = true;
1298
- this._targetInput = el;
1308
+ else if (this.isInputElement(element)) {
1309
+ this._targetInput = element;
1310
+ this.explicitTargetInput = true;
1299
1311
  }
1300
1312
  else {
1301
- this._targetInput = undefined;
1302
- }
1303
- if (this._targetInput) {
1304
- this._targetInput.removeEventListener('input', this.boundInputHandler);
1305
- this._targetInput.addEventListener('input', this.boundInputHandler);
1313
+ /**
1314
+ * Bare directive:
1315
+ *
1316
+ * <input ngxInputColor>
1317
+ *
1318
+ * In this case the host itself is the target.
1319
+ */
1320
+ const host = this.el.nativeElement;
1321
+ if (host instanceof HTMLInputElement) {
1322
+ this._targetInput = host;
1323
+ this.isHostInput = true;
1324
+ }
1325
+ else {
1326
+ this._targetInput = undefined;
1327
+ }
1306
1328
  }
1329
+ this.bindTargetInput();
1307
1330
  }
1308
1331
  change = new EventEmitter();
1309
1332
  color;
1310
1333
  pickerRef;
1334
+ _targetInput;
1335
+ explicitTargetInput = false;
1311
1336
  isHostInput = false;
1312
- inValid = false;
1313
- _onChange = (value) => { };
1337
+ removeInputListener;
1338
+ disabled = false;
1339
+ invalid = false;
1340
+ _onChange = () => { };
1314
1341
  _onTouched = () => { };
1315
1342
  _onValidateChange = () => { };
1316
1343
  constructor(el, renderer, viewContainerRef, overlayService) {
@@ -1320,40 +1347,69 @@ class NgxInputColor {
1320
1347
  this.overlayService = overlayService;
1321
1348
  }
1322
1349
  ngAfterViewInit() {
1323
- if (this._targetInput && this._targetInput.tagName.toLowerCase() === 'input') {
1350
+ /**
1351
+ * The input binding may not have been processed in every
1352
+ * possible usage scenario. Make sure a host input is detected.
1353
+ */
1354
+ if (!this._targetInput && this.isInputElement(this.el.nativeElement)) {
1355
+ this._targetInput = this.el.nativeElement;
1356
+ this.isHostInput = true;
1357
+ this.bindTargetInput();
1358
+ }
1359
+ if (this._targetInput) {
1324
1360
  this.writeValue(this._targetInput.value);
1325
1361
  }
1326
1362
  }
1327
1363
  ngOnDestroy() {
1364
+ this.removeTargetInputListener();
1328
1365
  this.destroyColorPicker();
1329
1366
  }
1330
- onClick(ev) {
1331
- ev.stopPropagation();
1332
- ev.preventDefault();
1367
+ /**
1368
+ * Open the custom color picker.
1369
+ */
1370
+ onHostClick(event) {
1371
+ if (this.disabled) {
1372
+ return;
1373
+ }
1374
+ event.preventDefault();
1375
+ event.stopPropagation();
1333
1376
  this.toggleColorPicker();
1334
1377
  }
1378
+ /**
1379
+ * Called by Angular Forms.
1380
+ *
1381
+ * IMPORTANT:
1382
+ * writeValue must NEVER call _onChange().
1383
+ */
1335
1384
  writeValue(value) {
1385
+ if (value === null || value === undefined || value === '') {
1386
+ this.color = undefined;
1387
+ this.invalid = false;
1388
+ this.syncView('');
1389
+ this.notifyValidatorChange();
1390
+ return;
1391
+ }
1336
1392
  try {
1337
- this.color = value ? new NgxColor(value) : undefined;
1338
- const colorStr = this.color?.toHexString() ?? '';
1339
- // اگر دایرکتیو روی input باشه (ControlValueAccessor)
1340
- if (this.isHostInput) {
1341
- const input = this.el.nativeElement;
1342
- input.value = colorStr;
1393
+ const color = value instanceof NgxColor ? value : new NgxColor(String(value));
1394
+ if (color.isValid === false) {
1395
+ throw new Error('Invalid color');
1343
1396
  }
1344
- // اگر input خارجی مشخص شده
1345
- if (this._targetInput instanceof HTMLInputElement) {
1346
- this._targetInput.value = colorStr;
1347
- }
1348
- if (this.setInputBackgroundColor) {
1349
- this.renderer.setStyle(this.el.nativeElement, 'backgroundColor', colorStr);
1350
- }
1351
- this.inValid = false;
1352
- this._onValidateChange();
1397
+ this.color = color;
1398
+ this.invalid = false;
1399
+ const colorValue = this.getViewColor();
1400
+ this.syncView(colorValue);
1353
1401
  }
1354
- catch (e) {
1355
- this.color = new NgxColor('#000'); // مقدار پیش‌فرض
1356
- this.inValid = true;
1402
+ catch {
1403
+ this.color = undefined;
1404
+ this.invalid = true;
1405
+ /**
1406
+ * Do not replace an invalid value with black.
1407
+ *
1408
+ * Angular/form validation needs to know that the value
1409
+ * is invalid instead of silently turning it into #000.
1410
+ */
1411
+ this.syncView('');
1412
+ this.notifyValidatorChange();
1357
1413
  }
1358
1414
  }
1359
1415
  registerOnChange(fn) {
@@ -1363,23 +1419,91 @@ class NgxInputColor {
1363
1419
  this._onTouched = fn;
1364
1420
  }
1365
1421
  setDisabledState(disabled) {
1366
- if (disabled) {
1422
+ this.disabled = disabled;
1423
+ /**
1424
+ * Host element.
1425
+ */
1426
+ if (this.isInputElement(this.el.nativeElement)) {
1367
1427
  this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);
1368
1428
  }
1369
- else {
1370
- this.renderer.removeAttribute(this.el.nativeElement, 'disabled');
1429
+ /**
1430
+ * External target input.
1431
+ */
1432
+ if (this._targetInput && this._targetInput !== this.el.nativeElement) {
1433
+ this.renderer.setProperty(this._targetInput, 'disabled', disabled);
1434
+ }
1435
+ if (disabled) {
1436
+ this.destroyColorPicker();
1371
1437
  }
1372
1438
  }
1373
1439
  registerOnValidatorChange(fn) {
1374
1440
  this._onValidateChange = fn;
1375
1441
  }
1376
- validate(control) {
1377
- if ((this.color && this.color.isValid === false) || this.inValid === true) {
1378
- return { invalid: true };
1442
+ validate(_control) {
1443
+ if (this.invalid) {
1444
+ return {
1445
+ invalid: true,
1446
+ };
1447
+ }
1448
+ if (this.color?.isValid === false) {
1449
+ return {
1450
+ invalid: true,
1451
+ };
1379
1452
  }
1380
1453
  return null;
1381
1454
  }
1455
+ bindTargetInput() {
1456
+ if (!this._targetInput) {
1457
+ return;
1458
+ }
1459
+ this.removeInputListener?.();
1460
+ this.removeInputListener = this.renderer.listen(this._targetInput, 'input', (event) => {
1461
+ this.handleInputEvent(event);
1462
+ });
1463
+ }
1464
+ removeTargetInputListener() {
1465
+ this.removeInputListener?.();
1466
+ this.removeInputListener = undefined;
1467
+ }
1468
+ /**
1469
+ * Handles native input changes.
1470
+ *
1471
+ * This is deliberately NOT implemented using writeValue(),
1472
+ * because this is a user-originated value and therefore
1473
+ * must propagate through ControlValueAccessor.
1474
+ */
1475
+ handleInputEvent(event) {
1476
+ const input = event.target;
1477
+ const value = input.value;
1478
+ try {
1479
+ const color = value ? new NgxColor(value) : undefined;
1480
+ if (color && color.isValid === false) {
1481
+ this.color = undefined;
1482
+ this.invalid = true;
1483
+ this.notifyValidatorChange();
1484
+ return;
1485
+ }
1486
+ this.color = color;
1487
+ this.invalid = false;
1488
+ this.syncHostBackground(value);
1489
+ /**
1490
+ * User change → Angular Forms.
1491
+ */
1492
+ this._onChange(value);
1493
+ this.change.emit(value);
1494
+ this._onTouched();
1495
+ this.notifyValidatorChange();
1496
+ }
1497
+ catch {
1498
+ this.color = undefined;
1499
+ this.invalid = true;
1500
+ this.notifyValidatorChange();
1501
+ }
1502
+ }
1382
1503
  toggleColorPicker() {
1504
+ if (this.disabled) {
1505
+ return;
1506
+ }
1383
1507
  if (this.pickerRef) {
1384
1508
  this.destroyColorPicker();
1385
1509
  return;
@@ -1396,11 +1520,12 @@ class NgxInputColor {
1396
1520
  instance.outputType = this.outputType;
1397
1521
  instance.setTheme = this.theme;
1398
1522
  instance.setUseAlphaChannel = this.useAlphaChannel;
1399
- if (this.color?.isValid)
1523
+ if (this.color?.isValid) {
1400
1524
  instance.writeValue(this.color);
1401
- instance.change.subscribe((c) => {
1402
- this.color = new NgxColor(c);
1403
- this.emitChange(c);
1525
+ }
1526
+ instance.change.subscribe((value) => {
1527
+ this.color = new NgxColor(value);
1528
+ void this.emitChange(value);
1404
1529
  });
1405
1530
  // instance.closed.subscribe(() => ref.close());
1406
1531
  },
@@ -1413,27 +1538,94 @@ class NgxInputColor {
1413
1538
  this.pickerRef?.close();
1414
1539
  this.pickerRef = undefined;
1415
1540
  }
1416
- async emitChange(c) {
1417
- if (this.setInputBackgroundColor) {
1418
- this.renderer.setStyle(this.el.nativeElement, 'backgroundColor', c);
1541
+ /**
1542
+ * User-originated/custom-picker value.
1543
+ *
1544
+ * This is the ONLY place where _onChange is called.
1545
+ */
1546
+ async emitChange(value) {
1547
+ try {
1548
+ const color = new NgxColor(value);
1549
+ if (color.isValid === false) {
1550
+ this.invalid = true;
1551
+ this.notifyValidatorChange();
1552
+ return;
1553
+ }
1554
+ this.color = color;
1555
+ this.invalid = false;
1556
+ const viewValue = this.getViewColor();
1557
+ this.syncView(viewValue);
1558
+ /**
1559
+ * Do NOT dispatch another input event here.
1560
+ */
1561
+ this._onChange(viewValue);
1562
+ this.change.emit(viewValue);
1563
+ this._onTouched();
1564
+ this.notifyValidatorChange();
1419
1565
  }
1420
- // اگر روی input باشیم، مقدار رو در input قرار بده
1566
+ catch {
1567
+ this.invalid = true;
1568
+ this.notifyValidatorChange();
1569
+ }
1570
+ }
1571
+ /**
1572
+ * Synchronize all visual representations.
1573
+ */
1574
+ syncView(value) {
1575
+ /**
1576
+ * Host input value.
1577
+ */
1421
1578
  if (this.isHostInput) {
1422
1579
  const input = this.el.nativeElement;
1423
- input.value = c;
1580
+ input.value = this.getNativeInputColor(value);
1424
1581
  }
1425
- // اگر targetInput وجود داره، در اونم مقدار ست کن
1426
- if (this._targetInput instanceof HTMLInputElement) {
1427
- this._targetInput.value = c;
1428
- const event = new Event('input', { bubbles: true });
1429
- this._targetInput.dispatchEvent(event);
1582
+ /**
1583
+ * External target input.
1584
+ */
1585
+ if (this._targetInput && this._targetInput !== this.el.nativeElement) {
1586
+ this._targetInput.value = this.getNativeInputColor(value);
1430
1587
  }
1431
- this._onChange(c);
1432
- this.change.emit(c);
1433
- this._onTouched();
1588
+ /**
1589
+ * Background of host element.
1590
+ */
1591
+ this.syncHostBackground(value);
1592
+ }
1593
+ /**
1594
+ * input[type=color] only accepts a 6-digit RGB hex value.
1595
+ *
1596
+ * Therefore even if the selected color contains alpha,
1597
+ * the native color input receives #RRGGBB.
1598
+ */
1599
+ getNativeInputColor(value) {
1600
+ if (!value) {
1601
+ return '';
1602
+ }
1603
+ try {
1604
+ const color = new NgxColor(value);
1605
+ return color.toHexString();
1606
+ }
1607
+ catch {
1608
+ return '';
1609
+ }
1610
+ }
1611
+ getViewColor() {
1612
+ return this.color?.toHexString() ?? '';
1613
+ }
1614
+ syncHostBackground(value) {
1615
+ if (!this.setInputBackgroundColor) {
1616
+ return;
1617
+ }
1618
+ const element = this.el.nativeElement;
1619
+ this.renderer.setStyle(element, 'backgroundColor', value || null);
1620
+ }
1621
+ notifyValidatorChange() {
1622
+ this._onValidateChange();
1623
+ }
1624
+ isInputElement(value) {
1625
+ return value instanceof HTMLInputElement;
1434
1626
  }
1435
1627
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NgxInputColor, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i1$2.OverlayService }], target: i0.ɵɵFactoryTarget.Directive });
1436
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxInputColor, isStandalone: true, selector: "[ngxInputColor]", inputs: { setInputBackgroundColor: "setInputBackgroundColor", defaultInspector: "defaultInspector", simpleMode: "simpleMode", outputType: "outputType", theme: "theme", setUseAlphaChannel: ["useAlphaChannel", "setUseAlphaChannel"], ngxInputColor: "ngxInputColor" }, outputs: { change: "change" }, host: { listeners: { "click": "onClick($event)" } }, providers: [
1628
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.4", type: NgxInputColor, isStandalone: true, selector: "[ngxInputColor]", inputs: { setInputBackgroundColor: "setInputBackgroundColor", defaultInspector: "defaultInspector", simpleMode: "simpleMode", outputType: "outputType", theme: "theme", setUseAlphaChannel: ["useAlphaChannel", "setUseAlphaChannel"], ngxInputColor: "ngxInputColor" }, outputs: { change: "change" }, host: { listeners: { "click": "onHostClick($event)" } }, providers: [
1437
1629
  {
1438
1630
  provide: NG_VALUE_ACCESSOR,
1439
1631
  useExisting: forwardRef(() => NgxInputColor),
@@ -1481,7 +1673,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImpor
1481
1673
  args: ['ngxInputColor']
1482
1674
  }], change: [{
1483
1675
  type: Output
1484
- }], onClick: [{
1676
+ }], onHostClick: [{
1485
1677
  type: HostListener,
1486
1678
  args: ['click', ['$event']]
1487
1679
  }] } });