@kushki/ng-suka
Version:
<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>
208 lines • 16.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, ViewChild, ElementRef, HostListener, Output, EventEmitter, Input } from '@angular/core';
import { hexToRgb, rgbToHsv, rgbToHex } from './color-utils';
var ColorSlider = /** @class */ (function () {
function ColorSlider() {
this.baseClass = true;
this.mousedown = false;
this.hueChange = new EventEmitter();
}
/**
* @param {?} evt
* @return {?}
*/
ColorSlider.prototype.onMouseUp = /**
* @param {?} evt
* @return {?}
*/
function (evt) {
this.mousedown = false;
};
/**
* @return {?}
*/
ColorSlider.prototype.draw = /**
* @return {?}
*/
function () {
if (!this.ctx) {
this.ctx = this.canvas.nativeElement.getContext('2d');
}
/** @type {?} */
var width = this.canvas.nativeElement.width;
/** @type {?} */
var height = this.canvas.nativeElement.height;
this.ctx.clearRect(0, 0, width, height);
/** @type {?} */
var gradient = this.ctx.createLinearGradient(0, 0, 0, height);
gradient.addColorStop(0, 'rgba(255, 0, 0, 1)');
gradient.addColorStop(0.17, 'rgba(255, 255, 0, 1)');
gradient.addColorStop(0.34, 'rgba(0, 255, 0, 1)');
gradient.addColorStop(0.51, 'rgba(0, 255, 255, 1)');
gradient.addColorStop(0.68, 'rgba(0, 0, 255, 1)');
gradient.addColorStop(0.85, 'rgba(255, 0, 255, 1)');
gradient.addColorStop(1, 'rgba(255, 0, 0, 1)');
this.ctx.beginPath();
this.ctx.rect(0, 0, width, height);
this.ctx.fillStyle = gradient;
this.ctx.fill();
this.ctx.closePath();
if (this.selectedHeight) {
this.ctx.beginPath();
this.ctx.strokeStyle = 'white';
this.ctx.lineWidth = 4;
this.ctx.rect(0, this.selectedHeight - 5, width, 10);
this.ctx.stroke();
this.ctx.closePath();
}
};
/**
* @param {?} evt
* @return {?}
*/
ColorSlider.prototype.onMouseDown = /**
* @param {?} evt
* @return {?}
*/
function (evt) {
this.mousedown = true;
this.selectedHeight = evt.offsetY;
this.draw();
this.emitHue(evt.offsetY);
};
/**
* @param {?} evt
* @return {?}
*/
ColorSlider.prototype.onMouseMove = /**
* @param {?} evt
* @return {?}
*/
function (evt) {
if (this.mousedown) {
this.selectedHeight = evt.offsetY;
this.draw();
this.emitHue(evt.offsetY);
}
};
/**
* @param {?} y
* @return {?}
*/
ColorSlider.prototype.emitHue = /**
* @param {?} y
* @return {?}
*/
function (y) {
if (y < 0) {
y = 0;
}
else if (y >= 250) {
y = 249;
}
/** @type {?} */
var color = this.getColorAtPosition(y);
this.hueChange.emit(rgbToHex(color.r, color.g, color.b));
};
/**
* @param {?} y
* @return {?}
*/
ColorSlider.prototype.getColorAtPosition = /**
* @param {?} y
* @return {?}
*/
function (y) {
/** @type {?} */
var imageData = this.ctx.getImageData(5, y, 1, 1).data;
return {
r: imageData[0],
g: imageData[1],
b: imageData[2],
};
};
/**
* @param {?} changes
* @return {?}
*/
ColorSlider.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes.hue && !changes.hue.isFirstChange()) {
/** @type {?} */
var rgbColor = hexToRgb(this.hue);
if (rgbColor) {
/** @type {?} */
var hsvColor = rgbToHsv(rgbColor.r, rgbColor.g, rgbColor.b);
/** @type {?} */
var hueFactor = hsvColor.h / 360;
this.selectedHeight = hueFactor * 250;
this.draw();
}
}
};
/**
* @return {?}
*/
ColorSlider.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
if (this.hue) {
/** @type {?} */
var rgbColor = hexToRgb(this.hue);
/** @type {?} */
var hsvColor = rgbToHsv(rgbColor.r, rgbColor.g, rgbColor.b);
/** @type {?} */
var hueFactor = hsvColor.h / 360;
this.selectedHeight = hueFactor * 250;
}
this.draw();
};
ColorSlider.decorators = [
{ type: Component, args: [{
selector: 'suka-color-slider',
template: "\n <canvas\n #canvas\n class=\"color-slider\"\n width=\"20\"\n height=\"250\"\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n >\n </canvas>\n "
}] }
];
ColorSlider.propDecorators = {
baseClass: [{ type: HostBinding, args: ['class.color-slider-wrapper',] }],
hue: [{ type: Input }],
hueChange: [{ type: Output }],
canvas: [{ type: ViewChild, args: ['canvas', { static: false },] }],
onMouseUp: [{ type: HostListener, args: ['window:mouseup', ['$event'],] }]
};
return ColorSlider;
}());
export { ColorSlider };
if (false) {
/** @type {?} */
ColorSlider.prototype.baseClass;
/**
* @type {?}
* @private
*/
ColorSlider.prototype.ctx;
/**
* @type {?}
* @private
*/
ColorSlider.prototype.mousedown;
/**
* @type {?}
* @private
*/
ColorSlider.prototype.selectedHeight;
/** @type {?} */
ColorSlider.prototype.hue;
/** @type {?} */
ColorSlider.prototype.hueChange;
/** @type {?} */
ColorSlider.prototype.canvas;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Itc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9jb2xvci1waWNrZXIvY29sb3Itc2xpZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBR04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdEO0lBQUE7UUFlNkMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVwRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWhCLGNBQVMsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQW1HakUsQ0FBQzs7Ozs7SUE5RkMsK0JBQVM7Ozs7SUFEVCxVQUNVLEdBQWU7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQzs7OztJQUVELDBCQUFJOzs7SUFBSjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkQ7O1lBRUssS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7O1lBQ3ZDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztZQUVsQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFB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QUcsU0FBUyxHQUFHLEdBQUcsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7O2dCQXZIRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLHNOQVVUO2lCQUNGOzs7NEJBRUUsV0FBVyxTQUFDLDRCQUE0QjtzQkFLeEMsS0FBSzs0QkFDTCxNQUFNO3lCQUVOLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDOzRCQUVuQyxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBK0Y1QyxrQkFBQztDQUFBLEFBeEhELElBd0hDO1NBMUdZLFdBQVc7OztJQUN0QixnQ0FBNEQ7Ozs7O0lBQzVELDBCQUFzQzs7Ozs7SUFDdEMsZ0NBQTBCOzs7OztJQUMxQixxQ0FBK0I7O0lBRS9CLDBCQUFxQjs7SUFDckIsZ0NBQStEOztJQUUvRCw2QkFBNEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RCaW5kaW5nLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGhleFRvUmdiLCByZ2JUb0hzdiwgcmdiVG9IZXggfSBmcm9tICcuL2NvbG9yLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VrYS1jb2xvci1zbGlkZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxjYW52YXNcbiAgICAgICNjYW52YXNcbiAgICAgIGNsYXNzPVwiY29sb3Itc2xpZGVyXCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgaGVpZ2h0PVwiMjUwXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXG4gICAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxuICAgID5cbiAgICA8L2NhbnZhcz5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBDb2xvclNsaWRlciBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29sb3Itc2xpZGVyLXdyYXBwZXInKSBiYXNlQ2xhc3MgPSB0cnVlO1xuICBwcml2YXRlIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwcml2YXRlIG1vdXNlZG93biA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkSGVpZ2h0OiBudW1iZXI7XG5cbiAgQElucHV0KCkgaHVlOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBodWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHtzdGF0aWM6IGZhbHNlfSkgY2FudmFzOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIG9uTW91c2VVcChldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlZG93biA9IGZhbHNlO1xuICB9XG5cbiAgZHJhdygpIHtcbiAgICBpZiAoIXRoaXMuY3R4KSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5oZWlnaHQ7XG4gICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgY29uc3QgZ3JhZGllbnQgPSB0aGlzLmN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCgwLCAwLCAwLCBoZWlnaHQpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAncmdiYSgyNTUsIDAsIDAsIDEpJyk7XG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAuMTcsICdyZ2JhKDI1NSwgMjU1LCAwLCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjM0LCAncmdiYSgwLCAyNTUsIDAsIDEpJyk7XG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAuNTEsICdyZ2JhKDAsIDI1NSwgMjU1LCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjY4LCAncmdiYSgwLCAwLCAyNTUsIDEpJyk7XG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAuODUsICdyZ2JhKDI1NSwgMCwgMjU1LCAxKScpO1xuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAncmdiYSgyNTUsIDAsIDAsIDEpJyk7XG5cbiAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICB0aGlzLmN0eC5yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkSGVpZ2h0KSB7XG4gICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gJ3doaXRlJztcbiAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDQ7XG4gICAgICB0aGlzLmN0eC5yZWN0KDAsIHRoaXMuc2VsZWN0ZWRIZWlnaHQgLSA1LCB3aWR0aCwgMTApO1xuICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cblxuICBvbk1vdXNlRG93bihldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlZG93biA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEhlaWdodCA9IGV2dC5vZmZzZXRZO1xuICAgIHRoaXMuZHJhdygpO1xuICAgIHRoaXMuZW1pdEh1ZShldnQub2Zmc2V0WSk7XG4gIH1cblxuICBvbk1vdXNlTW92ZShldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5tb3VzZWRvd24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRIZWlnaHQgPSBldnQub2Zmc2V0WTtcbiAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgdGhpcy5lbWl0SHVlKGV2dC5vZmZzZXRZKTtcbiAgICB9XG4gIH1cblxuICBlbWl0SHVlKHk6IG51bWJlcikge1xuICAgIGlmICh5IDwgMCkge1xuICAgICAgeSA9IDA7XG4gICAgfSBlbHNlIGlmICh5ID49IDI1MCkge1xuICAgICAgeSA9IDI0OTtcbiAgICB9XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmdldENvbG9yQXRQb3NpdGlvbih5KTtcbiAgICB0aGlzLmh1ZUNoYW5nZS5lbWl0KHJnYlRvSGV4KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpKTtcbiAgfVxuXG4gIGdldENvbG9yQXRQb3NpdGlvbih5OiBudW1iZXIpIHtcbiAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLmN0eC5nZXRJbWFnZURhdGEoNSwgeSwgMSwgMSkuZGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgcjogaW1hZ2VEYXRhWzBdLFxuICAgICAgZzogaW1hZ2VEYXRhWzFdLFxuICAgICAgYjogaW1hZ2VEYXRhWzJdLFxuICAgIH07XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuaHVlICYmICFjaGFuZ2VzLmh1ZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGNvbnN0IHJnYkNvbG9yID0gaGV4VG9SZ2IodGhpcy5odWUpO1xuICAgICAgaWYgKHJnYkNvbG9yKSB7XG4gICAgICAgIGNvbnN0IGhzdkNvbG9yID0gcmdiVG9Ic3YocmdiQ29sb3IuciwgcmdiQ29sb3IuZywgcmdiQ29sb3IuYik7XG4gICAgICAgIGNvbnN0IGh1ZUZhY3RvciA9IGhzdkNvbG9yLmggLyAzNjA7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIZWlnaHQgPSBodWVGYWN0b3IgKiAyNTA7XG4gICAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5odWUpIHtcbiAgICAgIGNvbnN0IHJnYkNvbG9yID0gaGV4VG9SZ2IodGhpcy5odWUpO1xuICAgICAgY29uc3QgaHN2Q29sb3IgPSByZ2JUb0hzdihyZ2JDb2xvci5yLCByZ2JDb2xvci5nLCByZ2JDb2xvci5iKTtcbiAgICAgIGNvbnN0IGh1ZUZhY3RvciA9IGhzdkNvbG9yLmggLyAzNjA7XG4gICAgICB0aGlzLnNlbGVjdGVkSGVpZ2h0ID0gaHVlRmFjdG9yICogMjUwO1xuICAgIH1cblxuICAgIHRoaXMuZHJhdygpO1xuICB9XG59XG4iXX0=