UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

103 lines 15.2 kB
import { computed, Directive, effect, inject, Input, signal } from '@angular/core'; import { MaskitoDirective } from '@maskito/angular'; import { maskitoNumberOptionsGenerator } from '@maskito/kit'; import { tuiAsControl, TuiControl, tuiValueTransformerFrom } from '@taiga-ui/cdk/classes'; import { TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants'; import { TuiCalendarYear } from '@taiga-ui/core/components/calendar'; import { tuiInjectAuxiliary, TuiTextfieldDirective, tuiTextfieldIconBinding, TuiWithTextfield, } from '@taiga-ui/core/components/textfield'; import { TuiDropdownAuto, tuiDropdownEnabled, tuiDropdownOpen, } from '@taiga-ui/core/directives/dropdown'; import { tuiMaskito } from '@taiga-ui/kit/utils'; import { TUI_INPUT_YEAR_OPTIONS } from './input-year.options'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/core/components/textfield"; import * as i2 from "@maskito/angular"; import * as i3 from "@taiga-ui/core/directives/dropdown"; class TuiInputYearDirective extends TuiControl { constructor() { super(...arguments); this.options = inject(TUI_INPUT_YEAR_OPTIONS); this.textfield = inject(TuiTextfieldDirective); this.open = tuiDropdownOpen(); this.initialItem = computed(() => this.value() ?? this.calendar()?.initialItem() ?? null); this.calendar = tuiInjectAuxiliary((x) => x instanceof TuiCalendarYear); this.dropdownEnabled = tuiDropdownEnabled(this.interactive); this.icon = tuiTextfieldIconBinding(TUI_INPUT_YEAR_OPTIONS); this.min = signal(this.options.min.year); this.max = signal(this.options.max.year); /** * TODO: move to [value]="value()" after update to Angular 17+ * something wrong with change detection on host binding */ this.valueEffect = effect(() => this.textfield.value.set(this.value()?.toString() ?? ''), TUI_ALLOW_SIGNAL_WRITES); this.mask = tuiMaskito(computed(() => maskitoNumberOptionsGenerator({ min: this.min(), max: this.max(), thousandSeparator: '', }))); this.calendarInEffect = effect(() => { const calendar = this.calendar(); if (calendar) { calendar.initialItemSetter = this.initialItem(); calendar.value.set(this.value()); calendar.min.set(this.min()); calendar.max.set(this.max()); } }, TUI_ALLOW_SIGNAL_WRITES); this.calendarOutEffect = effect((onCleanup) => { const subscription = this.calendar()?.yearClick.subscribe((year) => { this.onChange(year); this.open.set(false); }); onCleanup(() => subscription?.unsubscribe()); }); } // TODO(v5): use signal inputs set minSetter(x) { this.min.set(x); } // TODO(v5): use signal inputs set maxSetter(x) { this.max.set(x); } toggle() { if (this.interactive()) { this.open.update((x) => !x); } } onInput(raw) { const value = Number(raw); this.onChange(!raw || Number.isNaN(value) ? null : value); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputYearDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputYearDirective, isStandalone: true, selector: "input[tuiInputYear]", inputs: { minSetter: ["min", "minSetter"], maxSetter: ["max", "maxSetter"] }, host: { attributes: { "maxlength": "4", "inputmode": "numeric" }, listeners: { "click": "toggle()", "input": "onInput($event.target.value)" }, properties: { "disabled": "disabled()" } }, providers: [ tuiAsControl(TuiInputYearDirective), tuiValueTransformerFrom(TUI_INPUT_YEAR_OPTIONS), ], usesInheritance: true, hostDirectives: [{ directive: i1.TuiWithTextfield }, { directive: i2.MaskitoDirective }, { directive: i3.TuiDropdownAuto }], ngImport: i0 }); } } export { TuiInputYearDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputYearDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'input[tuiInputYear]', providers: [ tuiAsControl(TuiInputYearDirective), tuiValueTransformerFrom(TUI_INPUT_YEAR_OPTIONS), ], hostDirectives: [TuiWithTextfield, MaskitoDirective, TuiDropdownAuto], host: { maxlength: '4', inputmode: 'numeric', '[disabled]': 'disabled()', '(click)': 'toggle()', '(input)': 'onInput($event.target.value)', }, }] }], propDecorators: { minSetter: [{ type: Input, args: ['min'] }], maxSetter: [{ type: Input, args: ['max'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQteWVhci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9pbnB1dC15ZWFyL2lucHV0LXllYXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUNILGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNuQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGVBQWUsR0FDbEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFL0MsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBRTVELE1BZ0JhLHFCQUFzQixTQUFRLFVBQXlCO0lBaEJwRTs7UUFpQnFCLFlBQU8sR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6QyxjQUFTLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUMsU0FBSSxHQUFHLGVBQWUsRUFBRSxD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LENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVTLE9BQU8sQ0FBQyxHQUFXO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0EvRVEscUJBQXFCO21HQUFyQixxQkFBcUIsMlVBYm5CO1lBQ1AsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1lBQ25DLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDO1NBQ2xEOztTQVVRLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQWhCakMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsU0FBUyxFQUFFO3dCQUNQLFlBQVksdUJBQXVCO3dCQUNuQyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQztxQkFDbEQ7b0JBQ0QsY0FBYyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDO29CQUNyRSxJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLEdBQUc7d0JBQ2QsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFlBQVksRUFBRSxZQUFZO3dCQUMxQixTQUFTLEVBQUUsVUFBVTt3QkFDckIsU0FBUyxFQUFFLDhCQUE4QjtxQkFDNUM7aUJBQ0o7OEJBNERjLFNBQVM7c0JBRG5CLEtBQUs7dUJBQUMsS0FBSztnQkFPRCxTQUFTO3NCQURuQixLQUFLO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgaW5qZWN0LCBJbnB1dCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWFza2l0b0RpcmVjdGl2ZX0gZnJvbSAnQG1hc2tpdG8vYW5ndWxhcic7XG5pbXBvcnQge21hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yfSBmcm9tICdAbWFza2l0by9raXQnO1xuaW1wb3J0IHt0dWlBc0NvbnRyb2wsIFR1aUNvbnRyb2wsIHR1aVZhbHVlVHJhbnNmb3JtZXJGcm9tfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHtUVUlfQUxMT1dfU0lHTkFMX1dSSVRFU30gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlDYWxlbmRhclllYXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHtcbiAgICB0dWlJbmplY3RBdXhpbGlhcnksXG4gICAgVHVpVGV4dGZpZWxkRGlyZWN0aXZlLFxuICAgIHR1aVRleHRmaWVsZEljb25CaW5kaW5nLFxuICAgIFR1aVdpdGhUZXh0ZmllbGQsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB7XG4gICAgVHVpRHJvcGRvd25BdXRvLFxuICAgIHR1aURyb3Bkb3duRW5hYmxlZCxcbiAgICB0dWlEcm9wZG93bk9wZW4sXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvZHJvcGRvd24nO1xuaW1wb3J0IHt0dWlNYXNraXRvfSBmcm9tICdAdGFpZ2EtdWkva2l0L3V0aWxzJztcblxuaW1wb3J0IHtUVUlfSU5QVVRfWUVBUl9PUFRJT05TfSBmcm9tICcuL2lucHV0LXllYXIub3B0aW9ucyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdpbnB1dFt0dWlJbnB1dFllYXJdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNDb250cm9sKFR1aUlucHV0WWVhckRpcmVjdGl2ZSksXG4gICAgICAgIHR1aVZhbHVlVHJhbnNmb3JtZXJGcm9tKFRVSV9JTlBVVF9ZRUFSX09QVElPTlMpLFxuICAgIF0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtUdWlXaXRoVGV4dGZpZWxkLCBNYXNraXRvRGlyZWN0aXZlLCBUdWlEcm9wZG93bkF1dG9dLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgbWF4bGVuZ3RoOiAnNCcsXG4gICAgICAgIGlucHV0bW9kZTogJ251bWVyaWMnLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgJyhjbGljayknOiAndG9nZ2xlKCknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCRldmVudC50YXJnZXQudmFsdWUpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlJbnB1dFllYXJEaXJlY3RpdmUgZXh0ZW5kcyBUdWlDb250cm9sPG51bWJlciB8IG51bGw+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoVFVJX0lOUFVUX1lFQVJfT1BUSU9OUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXh0ZmllbGQgPSBpbmplY3QoVHVpVGV4dGZpZWxkRGlyZWN0aXZlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wZW4gPSB0dWlEcm9wZG93bk9wZW4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbEl0ZW0gPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy52YWx1ZSgpID8/IHRoaXMuY2FsZW5kYXIoKT8uaW5pdGlhbEl0ZW0oKSA/PyBudWxsLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXIgPSB0dWlJbmplY3RBdXhpbGlhcnk8VHVpQ2FsZW5kYXJZZWFyPihcbiAgICAgICAgKHgpID0+IHggaW5zdGFuY2VvZiBUdWlDYWxlbmRhclllYXIsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBkcm9wZG93bkVuYWJsZWQgPSB0dWlEcm9wZG93bkVuYWJsZWQodGhpcy5pbnRlcmFjdGl2ZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb24gPSB0dWlUZXh0ZmllbGRJY29uQmluZGluZyhUVUlfSU5QVVRfWUVBUl9PUFRJT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWluID0gc2lnbmFsKHRoaXMub3B0aW9ucy5taW4ueWVhcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1heCA9IHNpZ25hbCh0aGlzLm9wdGlvbnMubWF4LnllYXIpO1xuXG4gICAgLyoqXG4gICAgICogVE9ETzogbW92ZSB0byBbdmFsdWVdPVwidmFsdWUoKVwiIGFmdGVyIHVwZGF0ZSB0byBBbmd1bGFyIDE3K1xuICAgICAqIHNvbWV0aGluZyB3cm9uZyB3aXRoIGNoYW5nZSBkZXRlY3Rpb24gb24gaG9zdCBiaW5kaW5nXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbHVlRWZmZWN0ID0gZWZmZWN0KFxuICAgICAgICAoKSA9PiB0aGlzLnRleHRmaWVsZC52YWx1ZS5zZXQodGhpcy52YWx1ZSgpPy50b1N0cmluZygpID8/ICcnKSxcbiAgICAgICAgVFVJX0FMTE9XX1NJR05BTF9XUklURVMsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXNrID0gdHVpTWFza2l0byhcbiAgICAgICAgY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgICAgIG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICAgICAgICBtaW46IHRoaXMubWluKCksXG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heCgpLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kU2VwYXJhdG9yOiAnJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJJbkVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5jYWxlbmRhcigpO1xuXG4gICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY2FsZW5kYXIuaW5pdGlhbEl0ZW1TZXR0ZXIgPSB0aGlzLmluaXRpYWxJdGVtKCk7XG4gICAgICAgICAgICBjYWxlbmRhci52YWx1ZS5zZXQodGhpcy52YWx1ZSgpKTtcbiAgICAgICAgICAgIGNhbGVuZGFyLm1pbi5zZXQodGhpcy5taW4oKSk7XG4gICAgICAgICAgICBjYWxlbmRhci5tYXguc2V0KHRoaXMubWF4KCkpO1xuICAgICAgICB9XG4gICAgfSwgVFVJX0FMTE9XX1NJR05BTF9XUklURVMpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyT3V0RWZmZWN0ID0gZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5jYWxlbmRhcigpPy55ZWFyQ2xpY2suc3Vic2NyaWJlKCh5ZWFyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHllYXIpO1xuICAgICAgICAgICAgdGhpcy5vcGVuLnNldChmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uQ2xlYW51cCgoKSA9PiBzdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8gVE9ETyh2NSk6IHVzZSBzaWduYWwgaW5wdXRzXG4gICAgQElucHV0KCdtaW4nKVxuICAgIHB1YmxpYyBzZXQgbWluU2V0dGVyKHg6IG51bWJlcikge1xuICAgICAgICB0aGlzLm1pbi5zZXQoeCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2NSk6IHVzZSBzaWduYWwgaW5wdXRzXG4gICAgQElucHV0KCdtYXgnKVxuICAgIHB1YmxpYyBzZXQgbWF4U2V0dGVyKHg6IG51bWJlcikge1xuICAgICAgICB0aGlzLm1heC5zZXQoeCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3RpdmUoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuLnVwZGF0ZSgoeCkgPT4gIXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uSW5wdXQocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIocmF3KTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKCFyYXcgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSA/IG51bGwgOiB2YWx1ZSk7XG4gICAgfVxufVxuIl19