@taiga-ui/kit
Version:
Taiga UI Angular main components kit
115 lines • 19.3 kB
JavaScript
import { __decorate, __extends, __param } from "tslib";
import { DOCUMENT } from '@angular/common';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Inject, Optional, Self, } from '@angular/core';
import { NgControl } from '@angular/forms';
import { isNativeFocusedIn, round, TUI_FOCUSABLE_ITEM_ACCESSOR, } from '@taiga-ui/cdk';
import { AbstractTuiSlider, DOT_WIDTH, SLIDER_KEYBOARD_STEP } from '@taiga-ui/kit/abstract';
import { TUI_FLOATING_PRECISION } from '@taiga-ui/kit/constants';
import { TUI_FROM_TO_TEXTS } from '@taiga-ui/kit/tokens';
import { Observable } from 'rxjs';
// @dynamic
var TuiRangeComponent = /** @class */ (function (_super) {
__extends(TuiRangeComponent, _super);
function TuiRangeComponent(control, changeDetectorRef, documentRef, elementRef, fromToTexts$) {
var _this = _super.call(this, control, changeDetectorRef, documentRef, fromToTexts$) || this;
_this.elementRef = elementRef;
return _this;
}
TuiRangeComponent_1 = TuiRangeComponent;
Object.defineProperty(TuiRangeComponent.prototype, "nativeFocusableElement", {
get: function () {
if (this.computedDisabled || !this.dotLeft || !this.dotRight) {
return null;
}
return this.isLeftFocusable
? this.dotLeft.nativeElement
: this.dotRight.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiRangeComponent.prototype, "focused", {
get: function () {
return isNativeFocusedIn(this.elementRef.nativeElement);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiRangeComponent.prototype, "left", {
get: function () {
return 100 * this.getFractionFromValue(this.value[0]);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TuiRangeComponent.prototype, "right", {
get: function () {
return 100 - 100 * this.getFractionFromValue(this.value[1]);
},
enumerable: true,
configurable: true
});
TuiRangeComponent.prototype.getFallbackValue = function () {
return [0, 0];
};
TuiRangeComponent.prototype.processStep = function (increment, right) {
var fraction = this.getFractionFromValue(right ? this.value[1] : this.value[0]);
var step = this.discrete ? 1 / this.steps : SLIDER_KEYBOARD_STEP;
var value = this.getValueFromFraction(increment ? fraction + step : fraction - step);
this.processValue(value, right);
};
TuiRangeComponent.prototype.processValue = function (value, right) {
if (right === true) {
this.updateEnd(value);
}
else {
this.updateStart(value);
}
};
TuiRangeComponent.prototype.getCalibratedFractionFromEvents = function (rect, clientX, isMouseDownRight) {
var value = clientX -
rect.left -
DOT_WIDTH[this.size] / 2 -
(isMouseDownRight ? DOT_WIDTH[this.size] : 0);
var total = rect.width - 2 * DOT_WIDTH[this.size];
return round(value / total, TUI_FLOATING_PRECISION);
};
TuiRangeComponent.prototype.updateStart = function (value) {
this.updateValue([Math.min(value, this.value[1]), this.value[1]]);
};
TuiRangeComponent.prototype.updateEnd = function (value) {
this.updateValue([this.value[0], Math.max(value, this.value[0])]);
};
var TuiRangeComponent_1;
TuiRangeComponent.ctorParameters = function () { return [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] },
{ type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] },
{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
{ type: Observable, decorators: [{ type: Inject, args: [TUI_FROM_TO_TEXTS,] }] }
]; };
TuiRangeComponent = TuiRangeComponent_1 = __decorate([
Component({
selector: 'tui-range',
template: "<div\n class=\"event-catcher\"\n (tuiActiveZoneChange)=\"onActiveZone($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (touchstart)=\"onTouchStart($event)\"\n>\n <div class=\"wrapper\">\n <div *ngIf=\"segmented\" class=\"segments\">\n <span\n *tuiRepeatTimes=\"let segmentIndex of segments + 1\"\n class=\"segment\"\n automation-id=\"tui-slider__segment\"\n >\n <span *ngIf=\"fromToTexts$ | async as fromToText\" class=\"number\">\n {{getSegmentPrefix(segmentIndex, fromToText)}}\n {{getSegmentLabel(segmentIndex) | tuiFormatNumber}}\n <span *ngIf=\"isPluralized(pluralize)\">\n {{getSegmentLabel(segmentIndex) | tuiPluralize:\n pluralize}}\n </span>\n </span>\n </span>\n </div>\n <div\n class=\"bar\"\n automation-id=\"tui-slider__bar\"\n [style.left.%]=\"left\"\n [style.right.%]=\"right\"\n >\n <div\n #dotLeft\n class=\"dot\"\n automation-id=\"tui-slider__left\"\n [class.dot_focus-visible]=\"focusVisibleLeft && computedFocused\"\n [tuiFocusable]=\"isLeftFocusable\"\n (tuiFocusVisibleChange)=\"onLeftFocusVisible($event)\"\n (keydown.arrowLeft.prevent)=\"decrement(false)\"\n (keydown.arrowDown.prevent)=\"decrement(false)\"\n (keydown.arrowRight.prevent)=\"increment(false)\"\n (keydown.arrowUp.prevent)=\"increment(false)\"\n ></div>\n <div\n #dotRight\n class=\"dot\"\n automation-id=\"tui-slider__right\"\n [class.dot_focus-visible]=\"focusVisibleRight && computedFocused\"\n [tuiFocusable]=\"isRightFocusable\"\n (tuiFocusVisibleChange)=\"onRightFocusVisible($event)\"\n (keydown.arrowLeft.prevent)=\"decrement(true)\"\n (keydown.arrowDown.prevent)=\"decrement(true)\"\n (keydown.arrowRight.prevent)=\"increment(true)\"\n (keydown.arrowUp.prevent)=\"increment(true)\"\n ></div>\n </div>\n </div>\n</div>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{
provide: TUI_FOCUSABLE_ITEM_ACCESSOR,
useExisting: forwardRef(function () { return TuiRangeComponent_1; }),
},
],
styles: [":host{display:block;border-radius:var(--tui-radius-m);color:var(--tui-base-03);min-height:2px;font-size:16px}:host[data-tui-host-size='s']{min-height:2px;font-size:8px}:host._segmented{padding-bottom:20px}:host._disabled{cursor:default;pointer-events:none;opacity:var(--tui-disabled-opacity)}.event-catcher{min-height:inherit;border-radius:inherit;padding:7px 0;cursor:pointer}.wrapper{position:relative;min-height:inherit;border-radius:inherit;background-color:currentColor;border:solid transparent;border-width:0 1em}.bar{position:absolute;top:0;bottom:0;margin:0 -1em;border-radius:inherit;background-color:var(--tui-primary)}:host-context(tui-input-slider) .bar{margin-left:calc(var(--tui-radius-m)/ 2);border-bottom-left-radius:calc(var(--tui-radius-m) * 5) calc(var(--tui-radius-m) * 1.5)}.dot{transition-property:background-color;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;top:50%;z-index:1;width:1em;height:1em;transform:translate(0,-50%);border-radius:100%;background-color:var(--tui-primary);outline:0;cursor:ew-resize}.dot:last-child{right:0;transform:translate(0,-50%)}.dot:hover{background-color:var(--tui-primary-hover)}.dot:active{background-color:var(--tui-primary-active)}.dot_focus-visible{box-shadow:inset 0 0 0 2px var(--tui-focus)}.segments{position:relative;z-index:1;display:flex;justify-content:space-between;min-height:inherit;margin:0 -1em}.segments-spacer{height:26px}.segment{position:relative;height:inherit;width:4px;background-color:rgba(0,0,0,.36);pointer-events:none}.segment:first-of-type,.segment:last-of-type{background-color:transparent}.number{position:absolute;left:50%;transform:translate(-50%,0);font:var(--tui-font-text-s);top:100%;margin-top:8px;color:var(--tui-text-02);white-space:nowrap}.segment:first-of-type .number{left:-.05em;transform:none}.segment:last-of-type .number{left:auto;right:-.05em;transform:none}:host._disabled .number{color:var(--tui-text-01)}"]
}),
__param(0, Optional()),
__param(0, Self()),
__param(0, Inject(NgControl)),
__param(1, Inject(ChangeDetectorRef)),
__param(2, Inject(DOCUMENT)),
__param(3, Inject(ElementRef)),
__param(4, Inject(TUI_FROM_TO_TEXTS))
], TuiRangeComponent);
return TuiRangeComponent;
}(AbstractTuiSlider));
export { TuiRangeComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL3JhbmdlLyIsInNvdXJjZXMiOlsicmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixJQUFJLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLDJCQUEyQixHQUc5QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxXQUFXO0FBYVg7SUFDWSxxQ0FBbUM7SUFFM0MsMkJBSUksT0FBeUIsRUFDRSxpQkFBb0MsRUFDN0MsV0FBcUIsRUFDRixVQUFtQyxFQUM3QyxZQUEwQztRQVJ6RSxZQVVJLGtCQUFNLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLFNBQy9EO1FBSndDLGdCQUFVLEdBQVYsVUFBVSxDQUF5Qjs7SUFJNUUsQ0FBQzswQkFkUSxpQkFBaUI7SUFnQjFCLHNCQUFJLHFEQUFzQjthQUExQjtZQUNJLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFD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SUFBRCx3QkFBQztDQUFBLEFBbEZELENBQ1ksaUJBQWlCLEdBaUY1QjtTQWxGWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIGlzTmF0aXZlRm9jdXNlZEluLFxuICAgIHJvdW5kLFxuICAgIFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3IsXG4gICAgVHVpTmF0aXZlRm9jdXNhYmxlRWxlbWVudCxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge0Fic3RyYWN0VHVpU2xpZGVyLCBET1RfV0lEVEgsIFNMSURFUl9LRVlCT0FSRF9TVEVQfSBmcm9tICdAdGFpZ2EtdWkva2l0L2Fic3RyYWN0JztcbmltcG9ydCB7VFVJX0ZMT0FUSU5HX1BSRUNJU0lPTn0gZnJvbSAnQHRhaWdhLXVpL2tpdC9jb25zdGFudHMnO1xuaW1wb3J0IHtUVUlfRlJPTV9UT19URVhUU30gZnJvbSAnQHRhaWdhLXVpL2tpdC90b2tlbnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndHVpLXJhbmdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4uLy4uL2Fic3RyYWN0L3NsaWRlci9zbGlkZXIuY29tbW9uLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuLi8uLi9hYnN0cmFjdC9zbGlkZXIvc2xpZGVyLmNvbW1vbi5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFR1aVJhbmdlQ29tcG9uZW50KSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlSYW5nZUNvbXBvbmVudFxuICAgIGV4dGVuZHMgQWJzdHJhY3RUdWlTbGlkZXI8W251bWJlciwgbnVtYmVyXT5cbiAgICBpbXBsZW1lbnRzIFR1aUZvY3VzYWJsZUVsZW1lbnRBY2Nlc3NvciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBTZWxmKClcbiAgICAgICAgQEluamVjdChOZ0NvbnRyb2wpXG4gICAgICAgIGNvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnRSZWY6IERvY3VtZW50LFxuICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoVFVJX0ZST01fVE9fVEVYVFMpIGZyb21Ub1RleHRzJDogT2JzZXJ2YWJsZTxbc3RyaW5nLCBzdHJpbmddPixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udHJvbCwgY2hhbmdlRGV0ZWN0b3JSZWYsIGRvY3VtZW50UmVmLCBmcm9tVG9UZXh0cyQpO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVGb2N1c2FibGVFbGVtZW50KCk6IFR1aU5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcHV0ZWREaXNhYmxlZCB8fCAhdGhpcy5kb3RMZWZ0IHx8ICF0aGlzLmRvdFJpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGVmdEZvY3VzYWJsZVxuICAgICAgICAgICAgPyB0aGlzLmRvdExlZnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiB0aGlzLmRvdFJpZ2h0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc05hdGl2ZUZvY3VzZWRJbih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0IGxlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDEwMCAqIHRoaXMuZ2V0RnJhY3Rpb25Gcm9tVmFsdWUodGhpcy52YWx1ZVswXSk7XG4gICAgfVxuXG4gICAgZ2V0IHJpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxMDAgLSAxMDAgKiB0aGlzLmdldEZyYWN0aW9uRnJvbVZhbHVlKHRoaXMudmFsdWVbMV0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGYWxsYmFja1ZhbHVlKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICByZXR1cm4gWzAsIDBdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzU3RlcChpbmNyZW1lbnQ6IGJvb2xlYW4sIHJpZ2h0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGZyYWN0aW9uID0gdGhpcy5nZXRGcmFjdGlvbkZyb21WYWx1ZShyaWdodCA/IHRoaXMudmFsdWVbMV0gOiB0aGlzLnZhbHVlWzBdKTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuZGlzY3JldGUgPyAxIC8gdGhpcy5zdGVwcyA6IFNMSURFUl9LRVlCT0FSRF9TVEVQO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tRnJhY3Rpb24oXG4gICAgICAgICAgICBpbmNyZW1lbnQgPyBmcmFjdGlvbiArIHN0ZXAgOiBmcmFjdGlvbiAtIHN0ZXAsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUsIHJpZ2h0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZhbHVlKHZhbHVlOiBudW1iZXIsIHJpZ2h0OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChyaWdodCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVFbmQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFydCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q2FsaWJyYXRlZEZyYWN0aW9uRnJvbUV2ZW50cyhcbiAgICAgICAgcmVjdDogQ2xpZW50UmVjdCxcbiAgICAgICAgY2xpZW50WDogbnVtYmVyLFxuICAgICAgICBpc01vdXNlRG93blJpZ2h0OiBib29sZWFuLFxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgIGNsaWVudFggLVxuICAgICAgICAgICAgcmVjdC5sZWZ0IC1cbiAgICAgICAgICAgIERPVF9XSURUSFt0aGlzLnNpemVdIC8gMiAtXG4gICAgICAgICAgICAoaXNNb3VzZURvd25SaWdodCA/IERPVF9XSURUSFt0aGlzLnNpemVdIDogMCk7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gcmVjdC53aWR0aCAtIDIgKiBET1RfV0lEVEhbdGhpcy5zaXplXTtcblxuICAgICAgICByZXR1cm4gcm91bmQodmFsdWUgLyB0b3RhbCwgVFVJX0ZMT0FUSU5HX1BSRUNJU0lPTik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTdGFydCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoW01hdGgubWluKHZhbHVlLCB0aGlzLnZhbHVlWzFdKSwgdGhpcy52YWx1ZVsxXV0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShbdGhpcy52YWx1ZVswXSwgTWF0aC5tYXgodmFsdWUsIHRoaXMudmFsdWVbMF0pXSk7XG4gICAgfVxufVxuIl19