UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

120 lines (114 loc) 6.33 kB
import * as i0 from '@angular/core'; import { signal, InjectionToken, Optional, SkipSelf, inject, Directive, Input, effect } from '@angular/core'; import { tuiProvide } from '@taiga-ui/cdk/utils/miscellaneous'; import { TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER, TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants'; import { NG_VALIDATORS } from '@angular/forms'; import { TuiValidator } from '@taiga-ui/cdk/directives/validator'; const TUI_DEFAULT_ITEMS_HANDLERS = { stringify: signal(String), identityMatcher: signal(TUI_DEFAULT_IDENTITY_MATCHER), disabledItemHandler: signal(TUI_FALSE_HANDLER), }; /** * Default items handlers for components */ const TUI_ITEMS_HANDLERS = new InjectionToken(ngDevMode ? 'TUI_ITEMS_HANDLERS' : '', { factory: () => TUI_DEFAULT_ITEMS_HANDLERS, }); function tuiItemsHandlersProvider(options) { return { provide: TUI_ITEMS_HANDLERS, deps: [[new Optional(), new SkipSelf(), TUI_ITEMS_HANDLERS]], useFactory: (parent) => ({ stringify: signal(parent?.stringify() ?? TUI_DEFAULT_ITEMS_HANDLERS.stringify()), identityMatcher: signal(parent?.identityMatcher() ?? TUI_DEFAULT_ITEMS_HANDLERS.identityMatcher()), disabledItemHandler: signal(parent?.disabledItemHandler() ?? TUI_DEFAULT_ITEMS_HANDLERS.disabledItemHandler()), ...options, }), }; } class TuiItemsHandlersDirective { constructor() { this.defaultHandlers = inject(TUI_ITEMS_HANDLERS, { skipSelf: true, }); this.stringify = signal(this.defaultHandlers.stringify()); this.identityMatcher = signal(this.defaultHandlers.identityMatcher()); this.disabledItemHandler = signal(this.defaultHandlers.disabledItemHandler()); } // TODO(v5): use signal inputs set stringifySetter(x) { this.stringify.set(x); } // TODO(v5): use signal inputs set identityMatcherSetter(x) { this.identityMatcher.set(x); } // TODO(v5): use signal inputs set disabledItemHandlerSetter(x) { this.disabledItemHandler.set(x); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiItemsHandlersDirective, isStandalone: true, inputs: { stringifySetter: ["stringify", "stringifySetter"], identityMatcherSetter: ["identityMatcher", "identityMatcherSetter"], disabledItemHandlerSetter: ["disabledItemHandler", "disabledItemHandlerSetter"] }, providers: [tuiProvide(TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective)], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersDirective, decorators: [{ type: Directive, args: [{ standalone: true, providers: [tuiProvide(TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective)], }] }], propDecorators: { stringifySetter: [{ type: Input, args: ['stringify'] }], identityMatcherSetter: [{ type: Input, args: ['identityMatcher'] }], disabledItemHandlerSetter: [{ type: Input, args: ['disabledItemHandler'] }] } }); class TuiWithItemsHandlers { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithItemsHandlers, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiWithItemsHandlers, isStandalone: true, hostDirectives: [{ directive: TuiItemsHandlersDirective, inputs: ["stringify", "stringify", "identityMatcher", "identityMatcher", "disabledItemHandler", "disabledItemHandler"] }], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiWithItemsHandlers, decorators: [{ type: Directive, args: [{ standalone: true, hostDirectives: [ { directive: TuiItemsHandlersDirective, inputs: ['stringify', 'identityMatcher', 'disabledItemHandler'], }, ], }] }] }); class TuiItemsHandlersValidator extends TuiValidator { constructor() { super(...arguments); this.handlers = inject(TuiItemsHandlersDirective); this.update = effect(() => { this.handlers.disabledItemHandler(); this.onChange(); }, TUI_ALLOW_SIGNAL_WRITES); this.disabledItemHandler = (value) => Array.isArray(value) ? value.some((item) => this.handlers.disabledItemHandler()(item)) : Boolean(value) && this.handlers.disabledItemHandler()(value); this.validate = ({ value }) => this.disabledItemHandler(value) ? { tuiDisabledItem: value } : null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiItemsHandlersValidator, isStandalone: true, providers: [tuiProvide(NG_VALIDATORS, TuiItemsHandlersValidator, true)], usesInheritance: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsHandlersValidator, decorators: [{ type: Directive, args: [{ standalone: true, providers: [tuiProvide(NG_VALIDATORS, TuiItemsHandlersValidator, true)], }] }] }); /** * Generated bundle index. Do not edit. */ export { TUI_DEFAULT_ITEMS_HANDLERS, TUI_ITEMS_HANDLERS, TuiItemsHandlersDirective, TuiItemsHandlersValidator, TuiWithItemsHandlers, tuiItemsHandlersProvider }; //# sourceMappingURL=taiga-ui-core-directives-items-handlers.mjs.map