UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

109 lines 14.6 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` (for non-linear slider `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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWtleS1zdGVwcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9zbGlkZXIvaGVscGVycy9zbGlkZXIta2V5LXN0ZXBzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDMUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sYUFBYSxDQUFDOztBQUV6RCxNQVNhLHFCQUFxQjtJQVRsQztRQVVxQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQU1wRSxTQUFJLEdBQWtCLENBQUMsQ0FBQztRQUV4QixnQkFBVyxHQUFHLE1BQU0sQ0FBNkMsSUFBSSxD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QUk7b0JBQ2hCLFFBQVEsRUFDSix5SEFBeUg7b0JBQzdILFNBQVMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFlBQVksRUFBRSxZQUFZO3dCQUMxQixRQUFRLEVBQUUsYUFBYTt3QkFDdkIsU0FBUyxFQUFFLCtCQUErQjt3QkFDMUMsVUFBVSxFQUFFLCtCQUErQjtxQkFDOUM7aUJBQ0o7OEJBT2MsUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBpbmplY3QsIElOSkVDVE9SLCBJbnB1dCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TmdDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgdHlwZSB7VHVpVmFsdWVUcmFuc2Zvcm1lcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7VHVpQ29udHJvbH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7dHVpQ29udHJvbFZhbHVlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpRmFsbGJhY2tWYWx1ZVByb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aVB1cmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aVNsaWRlckNvbXBvbmVudH0gZnJvbSAnLi4vc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7VHVpS2V5U3RlcHN9IGZyb20gJy4va2V5LXN0ZXBzJztcbmltcG9ydCB7dHVpQ3JlYXRlS2V5U3RlcHNUcmFuc2Zvcm1lcn0gZnJvbSAnLi9rZXktc3RlcHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpU2xpZGVyXVtrZXlTdGVwc10nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmFyaWEtdmFsdWVtaW5dJzogJ21pbicsXG4gICAgICAgICdbYXR0ci5hcmlhLXZhbHVlbWF4XSc6ICdtYXgnLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZW5vd10nOiAndmFsdWUoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpU2xpZGVyS2V5U3RlcHNCYXNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KElOSkVDVE9SKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sLCB7c2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWV9KTtcblxuICAgIHByb3RlY3RlZCBtaW4/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIG1heD86IG51bWJlcjtcblxuICAgIEBJbnB1dCh7dHJhbnNmb3JtOiAoeDogbnVtYmVyIHwgJ2FueScpID0+ICh4ID09PSAnYW55JyA/IG51bGwgOiB4KX0pXG4gICAgcHVibGljIHN0ZXA6IG51bWJlciB8IG51bGwgPSAxO1xuXG4gICAgcHVibGljIHRyYW5zZm9ybWVyID0gc2lnbmFsPFR1aVZhbHVlVHJhbnNmb3JtZXI8bnVtYmVyLCBudW1iZXI+IHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIHZhbHVlID0gdG9TaWduYWwoXG4gICAgICAgIHRpbWVyKDApIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzU0NDE4XG4gICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdHVpQ29udHJvbFZhbHVlPG51bWJlcj4odGhpcy5jb250cm9sKSkpLFxuICAgICk7XG5cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBnZXQgc2xpZGVyKCk6IFR1aVNsaWRlckNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChUdWlTbGlkZXJDb21wb25lbnQpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBrZXlTdGVwcyhzdGVwczogVHVpS2V5U3RlcHMgfCBudWxsKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXIuc2V0KHN0ZXBzICYmIHR1aUNyZWF0ZUtleVN0ZXBzVHJhbnNmb3JtZXIoc3RlcHMsIHRoaXMuc2xpZGVyKSk7XG4gICAgICAgIHRoaXMubWluID0gc3RlcHM/LlswXVsxXTtcbiAgICAgICAgdGhpcy5tYXggPSBzdGVwcz8uW3N0ZXBzLmxlbmd0aCAtIDFdPy5bMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVE9ETyh2NSk6IHN0YW5kYXJkaXplIGxvZ2ljIGJldHdlZW4gYFR1aVNsaWRlcmAgJiBgVHVpSW5wdXRTbGlkZXJgIChmb3Igbm9uLWxpbmVhciBzbGlkZXIgYHN0ZXBgIG1lYW5zIHBlcmNlbnRhZ2UpXG4gICAgICogQWRkIHRoZXNlIGhvc3QtYmluZGluZ3MgdG8gYFR1aVNsaWRlcktleVN0ZXBzQmFzZWA6XG4gICAgICogYGBgXG4gICAgICogaG9zdDoge1xuICAgICAqICAgICAnW2F0dHIubWluXSc6ICcwJyxcbiAgICAgKiAgICAgJ1thdHRyLnN0ZXBdJzogJzEnLFxuICAgICAqICAgICAnW2F0dHIubWF4XSc6ICd0b3RhbFN0ZXBzJyxcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdG90YWxTdGVwcygpOiBudW1iZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogTm90LWludGVnZXIgYW1vdW50IG9mIHN0ZXBzIGlzIGludmFsaWQgdXNhZ2Ugb2YgbmF0aXZlIHNsaWRlcnNcbiAgICAgICAgICogYGBgaHRtbFxuICAgICAgICAgKiA8aW5wdXQgdHlwZT1cInJhbmdlXCIgW21heF09XCIxMDBcIiBbc3RlcF09XCIzLjMzXCIgLz5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqIChpbXBvc3NpYmxlIHRvIHNlbGVjdCAxMDA7IDk5LjkgaXMgbWF4IGFsbG93ZWQgdmFsdWUpXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwID8gTWF0aC5yb3VuZCgxMDAgLyB0aGlzLnN0ZXApIDogSW5maW5pdHk7XG4gICAgfVxuXG4gICAgcHVibGljIHRha2VTdGVwKGNvZWZmaWNpZW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuc2xpZGVyLnZhbHVlICsgY29lZmZpY2llbnQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtZXIoKT8udG9Db250cm9sVmFsdWUodGhpcy5zbGlkZXIudmFsdWUgKyBjb2VmZmljaWVudCkgPz9cbiAgICAgICAgICAgIG5ld1ZhbHVlXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOlxuICAgICAgICAnaW5wdXRbdHVpU2xpZGVyXVtrZXlTdGVwc11bbmdNb2RlbF0saW5wdXRbdHVpU2xpZGVyXVtrZXlTdGVwc11bZm9ybUNvbnRyb2xdLGlucHV0W3R1aVNsaWRlcl1ba2V5U3RlcHNdW2Zvcm1Db250cm9sTmFtZV0nLFxuICAgIHByb3ZpZGVyczogW3R1aUZhbGxiYWNrVmFsdWVQcm92aWRlcigwKV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW3ZhbHVlXSc6ICd2YWx1ZSgpJyxcbiAgICAgICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQoKScsXG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpU2xpZGVyS2V5U3RlcHMgZXh0ZW5kcyBUdWlDb250cm9sPG51bWJlcj4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xpZGVyID0gaW5qZWN0PFR1aVNsaWRlckNvbXBvbmVudD4oXG4gICAgICAgIGZvcndhcmRSZWYoKCkgPT4gVHVpU2xpZGVyQ29tcG9uZW50KSxcbiAgICApO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGtleVN0ZXBzKHN0ZXBzOiBUdWlLZXlTdGVwcykge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyID0gdHVpQ3JlYXRlS2V5U3RlcHNUcmFuc2Zvcm1lcihzdGVwcywgdGhpcy5zbGlkZXIpO1xuICAgIH1cbn1cbiJdfQ==