@taiga-ui/kit
Version:
Taiga UI Angular main components kit
163 lines • 15.3 kB
JavaScript
import { __decorate, __extends } from "tslib";
import { Directive, HostBinding, Input } from '@angular/core';
import { AbstractTuiControl, clamp, round, tuiDefaultProp, } from '@taiga-ui/cdk';
import { maskedNumberStringToNumber, tuiCreateAutoCorrectedNumberPipe, tuiCreateNumberMask, } from '@taiga-ui/core';
import { TUI_FLOATING_PRECISION } from '@taiga-ui/kit/constants';
export function quantumAssertion(quantum) {
return quantum > 0;
}
/**
* @internal
*/
var AbstractTuiInputSlider = /** @class */ (function (_super) {
__extends(AbstractTuiInputSlider, _super);
function AbstractTuiInputSlider() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.min = 0;
_this.max = Infinity;
_this.minLabel = '';
_this.maxLabel = '';
_this.pluralize = null;
_this.segmentsPluralize = null;
_this.segments = 0;
_this.steps = 0;
_this.quantum = 1;
_this.keySteps = null;
_this.size = 'l';
_this.mask = function (quantum, min) { return ({
mask: tuiCreateNumberMask({
allowNegative: min < 0,
allowDecimal: !Number.isInteger(quantum),
}),
pipe: tuiCreateAutoCorrectedNumberPipe(),
guide: false,
}); };
return _this;
}
Object.defineProperty(AbstractTuiInputSlider.prototype, "segmented", {
get: function () {
return this.segments > 0;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "hasPlaceholder", {
get: function () {
return this.size === 'l';
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "inputMode", {
get: function () {
return Number.isInteger(this.quantum)
? "numeric" /* Numeric */
: "decimal" /* Decimal */;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "length", {
get: function () {
return this.max - this.min;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "computedSteps", {
get: function () {
return this.steps || this.length / this.quantum;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "step", {
get: function () {
return this.length / this.computedSteps;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractTuiInputSlider.prototype, "hostMode", {
get: function () {
return this.modeDirective && this.modeDirective.mode;
},
enumerable: true,
configurable: true
});
AbstractTuiInputSlider.prototype.onHovered = function (hovered) {
this.updateHovered(hovered);
};
AbstractTuiInputSlider.prototype.isPluralized = function (pluralize) {
return pluralize !== null && pluralize.length === 3;
};
AbstractTuiInputSlider.prototype.valueGuard = function (value) {
return this.quantum
? clamp(round(Math.round(value / this.quantum) * this.quantum, TUI_FLOATING_PRECISION), this.min, this.max)
: clamp(value, this.min, this.max);
};
AbstractTuiInputSlider.prototype.capInputValue = function (value, max) {
if (max === void 0) { max = this.max; }
var capped = Math.min(maskedNumberStringToNumber(value), max);
if (this.min < 0 && capped < this.min) {
return this.min;
}
return isNaN(capped) || capped < this.min ? null : capped;
};
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "min", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "max", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "minLabel", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "maxLabel", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "pluralize", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "segmentsPluralize", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "segments", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "steps", void 0);
__decorate([
Input(),
tuiDefaultProp(quantumAssertion, 'Quantum must be positive')
], AbstractTuiInputSlider.prototype, "quantum", void 0);
__decorate([
Input(),
tuiDefaultProp()
], AbstractTuiInputSlider.prototype, "keySteps", void 0);
__decorate([
Input(),
HostBinding('attr.data-tui-host-size')
], AbstractTuiInputSlider.prototype, "size", void 0);
__decorate([
HostBinding('class._segmented')
], AbstractTuiInputSlider.prototype, "segmented", null);
__decorate([
HostBinding('attr.data-mode')
], AbstractTuiInputSlider.prototype, "hostMode", null);
AbstractTuiInputSlider = __decorate([
Directive()
], AbstractTuiInputSlider);
return AbstractTuiInputSlider;
}(AbstractTuiControl));
export { AbstractTuiInputSlider };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2xpZGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRhaWdhLXVpL2tpdC9hYnN0cmFjdC8iLCJzb3VyY2VzIjpbImlucHV0LXNsaWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsS0FBSyxFQUNMLEtBQUssRUFDTCxjQUFjLEdBR2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCwwQkFBMEIsRUFFMUIsZ0NBQWdDLEVBQ2hDLG1CQUFtQixHQU10QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRy9ELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFlO0lBQzVDLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2QixDQUFDO0FBRUQ7O0dBRUc7QUFFSDtJQUNZLDBDQUFxQjtJQURqQztRQUFBLHFFQTRIQztRQXZIRyxTQUFHLEdBQUcsQ0FBQyxDQUFDO1FBSVIsU0FBRyxHQUFHLFFBQVEsQ0FBQztRQUlmLGNBQVEsR0FBRyxFQUFFLENBQUM7UUFJZCxjQUFRLEdBQUcsRUFBRSxDQUFDO1FBSWQsZUFBUyxHQUF3QixJQUFJLENBQUM7UUFJdEMsdUJBQWlCLEdBQXdCLElBQUksQ0FBQztRQUk5QyxjQUFRLEdBQUcsQ0FBQyxDQUFDO1FBSWIsV0FBSyxHQUFHLENBQUMsQ0FBQztRQUlWLGFBQU8sR0FBRyxDQUFDLENBQUM7UUFJWixjQUFRLEdBQXVCLElBQUksQ0FBQztRQUlwQyxVQUFJLEdBQWEsR0FBRyxDQUFDO1FBRXJCLFVBQUksR0FBMEMsVUFBQyxPQUFlLEVBQUUsR0FBVyxJQUFLLE9BQUEsQ0FBQztZQUM3RSxJQUFJLEVBQUUsbUJBQW1CLENBQUM7Z0JBQ3RCLGFBQWEsRUFBRSxHQUFHLEdBQUcs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LEtBQUssRUFBRTtRQUNQLGNBQWMsRUFBRTs0REFDSDtJQUlkO1FBRkMsS0FBSyxFQUFFO1FBQ1AsY0FBYyxFQUFFOzREQUNIO0lBSWQ7UUFGQyxLQUFLLEVBQUU7UUFDUCxjQUFjLEVBQUU7NkRBQ3FCO0lBSXRDO1FBRkMsS0FBSyxFQUFFO1FBQ1AsY0FBYyxFQUFFO3FFQUM2QjtJQUk5QztRQUZDLEtBQUssRUFBRTtRQUNQLGNBQWMsRUFBRTs0REFDSjtJQUliO1FBRkMsS0FBSyxFQUFFO1FBQ1AsY0FBYyxFQUFFO3lEQUNQO0lBSVY7UUFGQyxLQUFLLEVBQUU7UUFDUCxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsMEJBQTBCLENBQUM7MkRBQ2pEO0lBSVo7UUFGQyxLQUFLLEVBQUU7UUFDUCxjQUFjLEVBQUU7NERBQ21CO0lBSXBDO1FBRkMsS0FBSyxFQUFFO1FBQ1AsV0FBVyxDQUFDLHlCQUF5QixDQUFDO3dEQUNsQjtJQWNyQjtRQURDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQzsyREFHL0I7SUF5QkQ7UUFEQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7MERBRzdCO0lBeEZpQixzQkFBc0I7UUFEM0MsU0FBUyxFQUFFO09BQ1Usc0JBQXNCLENBNEgzQztJQUFELDZCQUFDO0NBQUEsQUE1SEQsQ0FDWSxrQkFBa0IsR0EySDdCO1NBNUhxQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RUdWlDb250cm9sLFxuICAgIGNsYW1wLFxuICAgIHJvdW5kLFxuICAgIHR1aURlZmF1bHRQcm9wLFxuICAgIFR1aUlucHV0TW9kZSxcbiAgICBUdWlNYXBwZXIsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHtcbiAgICBtYXNrZWROdW1iZXJTdHJpbmdUb051bWJlcixcbiAgICBUdWlCcmlnaHRuZXNzLFxuICAgIHR1aUNyZWF0ZUF1dG9Db3JyZWN0ZWROdW1iZXJQaXBlLFxuICAgIHR1aUNyZWF0ZU51bWJlck1hc2ssXG4gICAgVHVpTW9kZURpcmVjdGl2ZSxcbiAgICBUdWlQbHVyYWxpemUsXG4gICAgVHVpU2l6ZUwsXG4gICAgVHVpVGV4dE1hc2tPcHRpb25zLFxuICAgIFR1aVdpdGhPcHRpb25hbE1pbk1heCxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtUVUlfRkxPQVRJTkdfUFJFQ0lTSU9OfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aUtleVN0ZXBzfSBmcm9tICdAdGFpZ2EtdWkva2l0L3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50dW1Bc3NlcnRpb24ocXVhbnR1bTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHF1YW50dW0gPiAwO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR1aUlucHV0U2xpZGVyPFQ+XG4gICAgZXh0ZW5kcyBBYnN0cmFjdFR1aUNvbnRyb2w8VD5cbiAgICBpbXBsZW1lbnRzIFR1aVdpdGhPcHRpb25hbE1pbk1heDxudW1iZXI+IHtcbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgbWluID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBtYXggPSBJbmZpbml0eTtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBtaW5MYWJlbCA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1heExhYmVsID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgcGx1cmFsaXplOiBUdWlQbHVyYWxpemUgfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzZWdtZW50c1BsdXJhbGl6ZTogVHVpUGx1cmFsaXplIHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgc2VnbWVudHMgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIHN0ZXBzID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKHF1YW50dW1Bc3NlcnRpb24sICdRdWFudHVtIG11c3QgYmUgcG9zaXRpdmUnKVxuICAgIHF1YW50dW0gPSAxO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIGtleVN0ZXBzOiBUdWlLZXlTdGVwcyB8IG51bGwgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10dWktaG9zdC1zaXplJylcbiAgICBzaXplOiBUdWlTaXplTCA9ICdsJztcblxuICAgIG1hc2s6IFR1aU1hcHBlcjxudW1iZXIsIFR1aVRleHRNYXNrT3B0aW9ucz4gPSAocXVhbnR1bTogbnVtYmVyLCBtaW46IG51bWJlcikgPT4gKHtcbiAgICAgICAgbWFzazogdHVpQ3JlYXRlTnVtYmVyTWFzayh7XG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiBtaW4gPCAwLFxuICAgICAgICAgICAgYWxsb3dEZWNpbWFsOiAhTnVtYmVyLmlzSW50ZWdlcihxdWFudHVtKSxcbiAgICAgICAgfSksXG4gICAgICAgIHBpcGU6IHR1aUNyZWF0ZUF1dG9Db3JyZWN0ZWROdW1iZXJQaXBlKCksXG4gICAgICAgIGd1aWRlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBtb2RlRGlyZWN0aXZlOiBUdWlNb2RlRGlyZWN0aXZlIHwgbnVsbDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX3NlZ21lbnRlZCcpXG4gICAgZ2V0IHNlZ21lbnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHMgPiAwO1xuICAgIH1cblxuICAgIGdldCBoYXNQbGFjZWhvbGRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2wnO1xuICAgIH1cblxuICAgIGdldCBpbnB1dE1vZGUoKTogVHVpSW5wdXRNb2RlIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodGhpcy5xdWFudHVtKVxuICAgICAgICAgICAgPyBUdWlJbnB1dE1vZGUuTnVtZXJpY1xuICAgICAgICAgICAgOiBUdWlJbnB1dE1vZGUuRGVjaW1hbDtcbiAgICB9XG5cbiAgICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heCAtIHRoaXMubWluO1xuICAgIH1cblxuICAgIGdldCBjb21wdXRlZFN0ZXBzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBzIHx8IHRoaXMubGVuZ3RoIC8gdGhpcy5xdWFudHVtO1xuICAgIH1cblxuICAgIGdldCBzdGVwKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAvIHRoaXMuY29tcHV0ZWRTdGVwcztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1tb2RlJylcbiAgICBnZXQgaG9zdE1vZGUoKTogVHVpQnJpZ2h0bmVzcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlRGlyZWN0aXZlICYmIHRoaXMubW9kZURpcmVjdGl2ZS5tb2RlO1xuICAgIH1cblxuICAgIGFic3RyYWN0IGdldCBzaG93TWluTGFiZWwoKTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGdldCBzaG93TWF4TGFiZWwoKTogYm9vbGVhbjtcblxuICAgIG9uSG92ZXJlZChob3ZlcmVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSG92ZXJlZChob3ZlcmVkKTtcbiAgICB9XG5cbiAgICBpc1BsdXJhbGl6ZWQocGx1cmFsaXplOiBUdWlQbHVyYWxpemUgfCBudWxsKTogcGx1cmFsaXplIGlzIFR1aVBsdXJhbGl6ZSB7XG4gICAgICAgIHJldHVybiBwbHVyYWxpemUgIT09IG51bGwgJiYgcGx1cmFsaXplLmxlbmd0aCA9PT0gMztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsdWVHdWFyZCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVhbnR1bVxuICAgICAgICAgICAgPyBjbGFtcChcbiAgICAgICAgICAgICAgICAgIHJvdW5kKFxuICAgICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodmFsdWUgLyB0aGlzLnF1YW50dW0pICogdGhpcy5xdWFudHVtLFxuICAgICAgICAgICAgICAgICAgICAgIFRVSV9GTE9BVElOR19QUkVDSVNJT04sXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdGhpcy5taW4sXG4gICAgICAgICAgICAgICAgICB0aGlzLm1heCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBjbGFtcCh2YWx1ZSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2FwSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nLCBtYXg6IG51bWJlciA9IHRoaXMubWF4KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNhcHBlZCA9IE1hdGgubWluKG1hc2tlZE51bWJlclN0cmluZ1RvTnVtYmVyKHZhbHVlKSwgbWF4KTtcblxuICAgICAgICBpZiAodGhpcy5taW4gPCAwICYmIGNhcHBlZCA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taW47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNOYU4oY2FwcGVkKSB8fCBjYXBwZWQgPCB0aGlzLm1pbiA/IG51bGwgOiBjYXBwZWQ7XG4gICAgfVxufVxuIl19