UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

109 lines 14.4 kB
import { createComponent, Directive, EnvironmentInjector, forwardRef, inject, INJECTOR, Input, signal, ViewContainerRef, } from '@angular/core'; import { TUI_IS_MOBILE } from '@taiga-ui/cdk/tokens'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiIsNativeFocused } from '@taiga-ui/cdk/utils/focus'; import { TuiDropdownDirective } from '@taiga-ui/core/directives/dropdown'; import { TuiWithIcons } from '@taiga-ui/core/directives/icons'; import { TuiDataListComponent } from '../data-list.component'; import { TUI_DATA_LIST_HOST } from '../data-list.tokens'; import { TUI_OPTION_CONTENT } from './option-content'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/core/directives/icons"; // TODO(v5): rename `TuiOptionNew` => `TuiOption` & remove [new] from selector // TODO: Consider all use cases for aria roles class TuiOptionNew { constructor() { this.vcr = inject(ViewContainerRef); this.isMobile = inject(TUI_IS_MOBILE); this.el = tuiInjectElement(); this.dataList = inject(forwardRef(() => TuiDataListComponent), { optional: true }); this.content = inject(TUI_OPTION_CONTENT, { optional: true, }); this.ref = this.content && createComponent(this.content, { environmentInjector: inject(EnvironmentInjector), elementInjector: inject(INJECTOR), hostElement: tuiInjectElement(), }); this.dropdown = inject(TuiDropdownDirective, { self: true, optional: true, })?.ref; this.disabled = false; if (this.ref) { this.vcr.insert(this.ref.hostView); this.ref.changeDetectorRef.detectChanges(); } } // Preventing focus loss upon focused option removal ngOnDestroy() { this.dataList?.handleFocusLossIfNecessary(this.el); } onMouseMove() { if (!this.isMobile && !tuiIsNativeFocused(this.el) && this.dataList && this.el.closest('[tuiDataListDropdownManager]')) { this.el.focus({ preventScroll: true }); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiOptionNew, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiOptionNew, isStandalone: true, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: { disabled: "disabled" }, host: { attributes: { "type": "button", "role": "option" }, listeners: { "mousemove.zoneless": "onMouseMove()" }, properties: { "attr.disabled": "disabled || null", "class._with-dropdown": "dropdown?.()" } }, hostDirectives: [{ directive: i1.TuiWithIcons }], ngImport: i0 }); } } export { TuiOptionNew }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiOptionNew, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]', hostDirectives: [TuiWithIcons], host: { type: 'button', role: 'option', '[attr.disabled]': 'disabled || null', '[class._with-dropdown]': 'dropdown?.()', '(mousemove.zoneless)': 'onMouseMove()', }, }] }], ctorParameters: function () { return []; }, propDecorators: { disabled: [{ type: Input }] } }); // TODO(v5): remove [new] from selector class TuiOptionWithValue { constructor() { this.host = inject(TUI_DATA_LIST_HOST, { optional: true, }); this.disabled = false; this.value = signal(undefined); } // TODO(v5): use `input.required<T>()` to remove `undefined` from `this.value()` set valueSetter(x) { this.value.set(x); } onClick(value = this.value()) { if (this.host?.handleOption && value !== undefined) { this.host.handleOption(value); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiOptionWithValue, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiOptionWithValue, isStandalone: true, selector: "button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]", inputs: { disabled: "disabled", valueSetter: ["value", "valueSetter"] }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); } } export { TuiOptionWithValue }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiOptionWithValue, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'button[tuiOption][value][new], a[tuiOption][value][new], label[tuiOption][value][new]', host: { '(click)': 'onClick()', }, }] }], propDecorators: { disabled: [{ type: Input }], valueSetter: [{ type: Input, args: [{ alias: 'value', required: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3Qvb3B0aW9uL29wdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBRU4sZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGtCQUFrQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQzdFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFFcEQsOEVBQThFO0FBQzlFLDhDQUE4QztBQUM5QyxNQVlhLFlBQVk7SUE2QnJCO1FBNUJpQixRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqQyxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFDdEMsRUFB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Q2hCLFFBQVEsRUFDSix1RkFBdUY7b0JBQzNGLElBQUksRUFBRTt3QkFDRixTQUFTLEVBQUUsV0FBVztxQkFDekI7aUJBQ0o7OEJBT1UsUUFBUTtzQkFEZCxLQUFLO2dCQU9LLFdBQVc7c0JBRHJCLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJTkpFQ1RPUixcbiAgICBJbnB1dCxcbiAgICB0eXBlIE9uRGVzdHJveSxcbiAgICBzaWduYWwsXG4gICAgdHlwZSBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpSXNOYXRpdmVGb2N1c2VkfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2ZvY3VzJztcbmltcG9ydCB7VHVpRHJvcGRvd25EaXJlY3RpdmV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvZHJvcGRvd24nO1xuaW1wb3J0IHtUdWlXaXRoSWNvbnN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2RpcmVjdGl2ZXMvaWNvbnMnO1xuXG5pbXBvcnQge1R1aURhdGFMaXN0Q29tcG9uZW50fSBmcm9tICcuLi9kYXRhLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7VFVJX0RBVEFfTElTVF9IT1NULCB0eXBlIFR1aURhdGFMaXN0SG9zdH0gZnJvbSAnLi4vZGF0YS1saXN0LnRva2Vucyc7XG5pbXBvcnQge1RVSV9PUFRJT05fQ09OVEVOVH0gZnJvbSAnLi9vcHRpb24tY29udGVudCc7XG5cbi8vIFRPRE8odjUpOiByZW5hbWUgYFR1aU9wdGlvbk5ld2AgPT4gYFR1aU9wdGlvbmAgJiByZW1vdmUgW25ld10gZnJvbSBzZWxlY3RvclxuLy8gVE9ETzogQ29uc2lkZXIgYWxsIHVzZSBjYXNlcyBmb3IgYXJpYSByb2xlc1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2J1dHRvblt0dWlPcHRpb25dW25ld10sIGFbdHVpT3B0aW9uXVtuZXddLCBsYWJlbFt0dWlPcHRpb25dW25ld10nLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbVHVpV2l0aEljb25zXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1tjbGFzcy5fd2l0aC1kcm9wZG93bl0nOiAnZHJvcGRvd24/LigpJyxcbiAgICAgICAgJyhtb3VzZW1vdmUuem9uZWxlc3MpJzogJ29uTW91c2VNb3ZlKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aU9wdGlvbk5ldzxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNNb2JpbGUgPSBpbmplY3QoVFVJX0lTX01PQklMRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFMaXN0ID0gaW5qZWN0PFR1aURhdGFMaXN0Q29tcG9uZW50PFQ+PihcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBUdWlEYXRhTGlzdENvbXBvbmVudCksXG4gICAgICAgIHtvcHRpb25hbDogdHJ1ZX0sXG4gICAgKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGVudCA9IGluamVjdDxUeXBlPGFueT4gfCBudWxsPihUVUlfT1BUSU9OX0NPTlRFTlQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZiA9XG4gICAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgICBjcmVhdGVDb21wb25lbnQodGhpcy5jb250ZW50LCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBpbmplY3QoRW52aXJvbm1lbnRJbmplY3RvciksXG4gICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGluamVjdChJTkpFQ1RPUiksXG4gICAgICAgICAgICBob3N0RWxlbWVudDogdHVpSW5qZWN0RWxlbWVudCgpLFxuICAgICAgICB9KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBkcm9wZG93biA9IGluamVjdChUdWlEcm9wZG93bkRpcmVjdGl2ZSwge1xuICAgICAgICBzZWxmOiB0cnVlLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KT8ucmVmO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5yZWYpIHtcbiAgICAgICAgICAgIHRoaXMudmNyLmluc2VydCh0aGlzLnJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICB0aGlzLnJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50aW5nIGZvY3VzIGxvc3MgdXBvbiBmb2N1c2VkIG9wdGlvbiByZW1vdmFsXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFMaXN0Py5oYW5kbGVGb2N1c0xvc3NJZk5lY2Vzc2FyeSh0aGlzLmVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Nb3VzZU1vdmUoKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAhdHVpSXNOYXRpdmVGb2N1c2VkKHRoaXMuZWwpICYmXG4gICAgICAgICAgICB0aGlzLmRhdGFMaXN0ICYmXG4gICAgICAgICAgICB0aGlzLmVsLmNsb3Nlc3QoJ1t0dWlEYXRhTGlzdERyb3Bkb3duTWFuYWdlcl0nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZWwuZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gVE9ETyh2NSk6IHJlbW92ZSBbbmV3XSBmcm9tIHNlbGVjdG9yXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOlxuICAgICAgICAnYnV0dG9uW3R1aU9wdGlvbl1bdmFsdWVdW25ld10sIGFbdHVpT3B0aW9uXVt2YWx1ZV1bbmV3XSwgbGFiZWxbdHVpT3B0aW9uXVt2YWx1ZV1bbmV3XScsXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdvbkNsaWNrKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aU9wdGlvbldpdGhWYWx1ZTxUID0gdW5rbm93bj4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdCA9IGluamVjdDxUdWlEYXRhTGlzdEhvc3Q8VD4+KFRVSV9EQVRBX0xJU1RfSE9TVCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWUgPSBzaWduYWw8VCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8vIFRPRE8odjUpOiB1c2UgYGlucHV0LnJlcXVpcmVkPFQ+KClgIHRvIHJlbW92ZSBgdW5kZWZpbmVkYCBmcm9tIGB0aGlzLnZhbHVlKClgXG4gICAgQElucHV0KHthbGlhczogJ3ZhbHVlJywgcmVxdWlyZWQ6IHRydWV9KVxuICAgIHB1YmxpYyBzZXQgdmFsdWVTZXR0ZXIoeDogVCkge1xuICAgICAgICB0aGlzLnZhbHVlLnNldCh4KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DbGljayh2YWx1ZSA9IHRoaXMudmFsdWUoKSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ob3N0Py5oYW5kbGVPcHRpb24gJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmhhbmRsZU9wdGlvbih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=