UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

110 lines 14.7 kB
import { __decorate } from "tslib"; import { Directive, forwardRef, inject, INJECTOR, Input, signal } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { NgControl } from '@angular/forms'; import { TuiControl } from '@taiga-ui/cdk/classes'; import { tuiControlValue } from '@taiga-ui/cdk/observables'; import { tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens'; import { tuiPure } from '@taiga-ui/cdk/utils/miscellaneous'; import { switchMap, timer } from 'rxjs'; import { TuiSliderComponent } from '../slider.component'; import { tuiCreateKeyStepsTransformer } from './key-steps'; import * as i0 from "@angular/core"; class TuiSliderKeyStepsBase { constructor() { this.injector = inject(INJECTOR); this.control = inject(NgControl, { self: true, optional: true }); this.step = 1; this.transformer = signal(null); this.value = toSignal(timer(0) // https://github.com/angular/angular/issues/54418 .pipe(switchMap(() => tuiControlValue(this.control)))); } get slider() { return this.injector.get(TuiSliderComponent); } set keySteps(steps) { this.transformer.set(steps && tuiCreateKeyStepsTransformer(steps, this.slider)); this.min = steps?.[0][1]; this.max = steps?.[steps.length - 1]?.[1]; } /** * TODO(v5): standardize logic between `TuiSlider` & `TuiInputSlider` & `Range` & `InputRange` * For non-linear slider (with `[keySteps]` property) `step` means percentage * Add these host-bindings to `TuiSliderKeyStepsBase`: * ``` * host: { * '[attr.min]': '0', * '[attr.step]': '1', * '[attr.max]': 'totalSteps', * }, * ``` */ get totalSteps() { /** * Not-integer amount of steps is invalid usage of native sliders * ```html * <input type="range" [max]="100" [step]="3.33" /> * ``` * (impossible to select 100; 99.9 is max allowed value) */ return this.step ? Math.round(100 / this.step) : Infinity; } takeStep(coefficient) { const newValue = this.slider.value + coefficient; return (this.transformer()?.toControlValue(this.slider.value + coefficient) ?? newValue); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeyStepsBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: TuiSliderKeyStepsBase, isStandalone: true, selector: "input[tuiSlider][keySteps]", inputs: { step: ["step", "step", (x) => (x === 'any' ? null : x)], keySteps: "keySteps" }, host: { properties: { "attr.aria-valuemin": "min", "attr.aria-valuemax": "max", "attr.aria-valuenow": "value()" } }, ngImport: i0 }); } } __decorate([ tuiPure ], TuiSliderKeyStepsBase.prototype, "slider", null); export { TuiSliderKeyStepsBase }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeyStepsBase, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'input[tuiSlider][keySteps]', host: { '[attr.aria-valuemin]': 'min', '[attr.aria-valuemax]': 'max', '[attr.aria-valuenow]': 'value()', }, }] }], propDecorators: { step: [{ type: Input, args: [{ transform: (x) => (x === 'any' ? null : x) }] }], slider: [], keySteps: [{ type: Input }] } }); class TuiSliderKeySteps extends TuiControl { constructor() { super(...arguments); this.slider = inject(forwardRef(() => TuiSliderComponent)); } set keySteps(steps) { this.transformer = tuiCreateKeyStepsTransformer(steps, this.slider); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeySteps, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiSliderKeySteps, isStandalone: true, selector: "input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]", inputs: { keySteps: "keySteps" }, host: { listeners: { "blur": "onTouched()", "input": "onChange($event.target.value)", "change": "onChange($event.target.value)" }, properties: { "value": "value()", "disabled": "disabled()" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0 }); } } export { TuiSliderKeySteps }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeySteps, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]', providers: [tuiFallbackValueProvider(0)], host: { '[value]': 'value()', '[disabled]': 'disabled()', '(blur)': 'onTouched()', '(input)': 'onChange($event.target.value)', '(change)': 'onChange($event.target.value)', }, }] }], propDecorators: { keySteps: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWtleS1zdGVwcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9zbGlkZXIvaGVscGVycy9zbGlkZXIta2V5LXN0ZXBzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBMkIsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzFELE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyw0QkFBNEIsRUFBbUIsTUFBTSxhQUFhLENBQUM7O0FBRTNFLE1BU2EscUJBQXFCO0lBVGxDO1FBVXFCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBTXBFLFNBQUksR0FBa0IsQ0FBQyxDQUFDO1FBRXhCLGdCQUFXLEdBQUcsTUFBTSxDQUE2QyxJQUFJ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LElBQUk7b0JBQ2hCLFFBQVEsRUFDSix5SEFBeUg7b0JBQzdILFNBQVMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFlBQVksRUFBRSxZQUFZO3dCQUMxQixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsU0FBUyxFQUFFLCtCQUErQjt3QkFDMUMsVUFBVSxFQUFFLCtCQUErQjtxQkFDOUM7aUJBQ0o7OEJBT2MsUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBpbmplY3QsIElOSkVDVE9SLCBJbnB1dCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1R1aUNvbnRyb2wsIHR5cGUgVHVpVmFsdWVUcmFuc2Zvcm1lcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7dHVpQ29udHJvbFZhbHVlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aVB1cmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aVNsaWRlckNvbXBvbmVudH0gZnJvbSAnLi4vc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge3R1aUNyZWF0ZUtleVN0ZXBzVHJhbnNmb3JtZXIsIHR5cGUgVHVpS2V5U3RlcHN9IGZyb20gJy4va2V5LXN0ZXBzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R1aVNsaWRlcl1ba2V5U3RlcHNdJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5hcmlhLXZhbHVlbWluXSc6ICdtaW4nLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZW1heF0nOiAnbWF4JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtdmFsdWVub3ddJzogJ3ZhbHVlKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNsaWRlcktleVN0ZXBzQmFzZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJTkpFQ1RPUik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwge3NlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICBwcm90ZWN0ZWQgbWluPzogbnVtYmVyO1xuICAgIHByb3RlY3RlZCBtYXg/OiBudW1iZXI7XG5cbiAgICBASW5wdXQoe3RyYW5zZm9ybTogKHg6IG51bWJlciB8ICdhbnknKSA9PiAoeCA9PT0gJ2FueScgPyBudWxsIDogeCl9KVxuICAgIHB1YmxpYyBzdGVwOiBudW1iZXIgfCBudWxsID0gMTtcblxuICAgIHB1YmxpYyB0cmFuc2Zvcm1lciA9IHNpZ25hbDxUdWlWYWx1ZVRyYW5zZm9ybWVyPG51bWJlciwgbnVtYmVyPiB8IG51bGw+KG51bGwpO1xuICAgIHB1YmxpYyB2YWx1ZSA9IHRvU2lnbmFsKFxuICAgICAgICB0aW1lcigwKSAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy81NDQxOFxuICAgICAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHR1aUNvbnRyb2xWYWx1ZTxudW1iZXI+KHRoaXMuY29udHJvbCkpKSxcbiAgICApO1xuXG4gICAgQHR1aVB1cmVcbiAgICBwdWJsaWMgZ2V0IHNsaWRlcigpOiBUdWlTbGlkZXJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoVHVpU2xpZGVyQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQga2V5U3RlcHMoc3RlcHM6IFR1aUtleVN0ZXBzIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLnNldChzdGVwcyAmJiB0dWlDcmVhdGVLZXlTdGVwc1RyYW5zZm9ybWVyKHN0ZXBzLCB0aGlzLnNsaWRlcikpO1xuICAgICAgICB0aGlzLm1pbiA9IHN0ZXBzPy5bMF1bMV07XG4gICAgICAgIHRoaXMubWF4ID0gc3RlcHM/LltzdGVwcy5sZW5ndGggLSAxXT8uWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRPRE8odjUpOiBzdGFuZGFyZGl6ZSBsb2dpYyBiZXR3ZWVuIGBUdWlTbGlkZXJgICYgYFR1aUlucHV0U2xpZGVyYCAmIGBSYW5nZWAgJiBgSW5wdXRSYW5nZWBcbiAgICAgKiBGb3Igbm9uLWxpbmVhciBzbGlkZXIgKHdpdGggYFtrZXlTdGVwc11gIHByb3BlcnR5KSBgc3RlcGAgbWVhbnMgcGVyY2VudGFnZVxuICAgICAqIEFkZCB0aGVzZSBob3N0LWJpbmRpbmdzIHRvIGBUdWlTbGlkZXJLZXlTdGVwc0Jhc2VgOlxuICAgICAqIGBgYFxuICAgICAqIGhvc3Q6IHtcbiAgICAgKiAgICAgJ1thdHRyLm1pbl0nOiAnMCcsXG4gICAgICogICAgICdbYXR0ci5zdGVwXSc6ICcxJyxcbiAgICAgKiAgICAgJ1thdHRyLm1heF0nOiAndG90YWxTdGVwcycsXG4gICAgICogfSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRvdGFsU3RlcHMoKTogbnVtYmVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5vdC1pbnRlZ2VyIGFtb3VudCBvZiBzdGVwcyBpcyBpbnZhbGlkIHVzYWdlIG9mIG5hdGl2ZSBzbGlkZXJzXG4gICAgICAgICAqIGBgYGh0bWxcbiAgICAgICAgICogPGlucHV0IHR5cGU9XCJyYW5nZVwiIFttYXhdPVwiMTAwXCIgW3N0ZXBdPVwiMy4zM1wiIC8+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKiAoaW1wb3NzaWJsZSB0byBzZWxlY3QgMTAwOyA5OS45IGlzIG1heCBhbGxvd2VkIHZhbHVlKVxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcCA/IE1hdGgucm91bmQoMTAwIC8gdGhpcy5zdGVwKSA6IEluZmluaXR5O1xuICAgIH1cblxuICAgIHB1YmxpYyB0YWtlU3RlcChjb2VmZmljaWVudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnNsaWRlci52YWx1ZSArIGNvZWZmaWNpZW50O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVyKCk/LnRvQ29udHJvbFZhbHVlKHRoaXMuc2xpZGVyLnZhbHVlICsgY29lZmZpY2llbnQpID8/XG4gICAgICAgICAgICBuZXdWYWx1ZVxuICAgICAgICApO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjpcbiAgICAgICAgJ2lucHV0W3R1aVNsaWRlcl1ba2V5U3RlcHNdW25nTW9kZWxdLGlucHV0W3R1aVNsaWRlcl1ba2V5U3RlcHNdW2Zvcm1Db250cm9sXSxpbnB1dFt0dWlTbGlkZXJdW2tleVN0ZXBzXVtmb3JtQ29udHJvbE5hbWVdJyxcbiAgICBwcm92aWRlcnM6IFt0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXIoMCldLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1t2YWx1ZV0nOiAndmFsdWUoKScsXG4gICAgICAgICdbZGlzYWJsZWRdJzogJ2Rpc2FibGVkKCknLFxuICAgICAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgpJyxcbiAgICAgICAgJyhpbnB1dCknOiAnb25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgICAgICAnKGNoYW5nZSknOiAnb25DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNsaWRlcktleVN0ZXBzIGV4dGVuZHMgVHVpQ29udHJvbDxudW1iZXI+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNsaWRlciA9IGluamVjdDxUdWlTbGlkZXJDb21wb25lbnQ+KFxuICAgICAgICBmb3J3YXJkUmVmKCgpID0+IFR1aVNsaWRlckNvbXBvbmVudCksXG4gICAgKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBrZXlTdGVwcyhzdGVwczogVHVpS2V5U3RlcHMpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1lciA9IHR1aUNyZWF0ZUtleVN0ZXBzVHJhbnNmb3JtZXIoc3RlcHMsIHRoaXMuc2xpZGVyKTtcbiAgICB9XG59XG4iXX0=