@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
90 lines • 11.7 kB
JavaScript
import { ChangeDetectionStrategy, Component, forwardRef, inject, Input, } 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 { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
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): delete
* @deprecated use `<button tuiOption new />` / `<a tuiOption new /> / `<label tuiOption new /> instead
*/
class TuiOption {
constructor() {
this.isMobile = inject(TUI_IS_MOBILE);
this.el = tuiInjectElement();
this.dataList = inject(forwardRef(() => TuiDataListComponent), { optional: true });
this.host = inject(TUI_DATA_LIST_HOST, {
optional: true,
});
this.content = inject(TUI_OPTION_CONTENT, { optional: true });
this.dropdown = inject(TuiDropdownDirective, {
self: true,
optional: true,
})?.ref;
this.disabled = false;
}
// Preventing focus loss upon focused option removal
ngOnDestroy() {
this.dataList?.handleFocusLossIfNecessary(this.el);
}
onClick() {
if (this.host?.handleOption && this.value !== undefined) {
this.host.handleOption(this.value);
}
}
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: TuiOption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiOption, isStandalone: true, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: { disabled: "disabled", value: "value" }, host: { attributes: { "type": "button", "role": "option" }, listeners: { "click": "onClick()", "mousemove.zoneless": "onMouseMove()" }, properties: { "attr.disabled": "disabled || null", "class._with-dropdown": "dropdown?.()" } }, hostDirectives: [{ directive: i1.TuiWithIcons }], ngImport: i0, template: `
<ng-container *polymorpheusOutlet="content || t as text; context: {$implicit: t}">
{{ text }}
</ng-container>
<ng-template #t>
<ng-content />
</ng-template>
`, isInline: true, dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
export { TuiOption };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiOption, decorators: [{
type: Component,
args: [{
standalone: true,
selector: 'button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])',
imports: [PolymorpheusOutlet],
template: `
<ng-container *polymorpheusOutlet="content || t as text; context: {$implicit: t}">
{{ text }}
</ng-container>
<ng-template #t>
<ng-content />
</ng-template>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
hostDirectives: [TuiWithIcons],
host: {
type: 'button',
role: 'option',
'[attr.disabled]': 'disabled || null',
'[class._with-dropdown]': 'dropdown?.()',
'(click)': 'onClick()',
'(mousemove.zoneless)': 'onMouseMove()',
},
}]
}], propDecorators: { disabled: [{
type: Input
}], value: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWxlZ2FjeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvZGF0YS1saXN0L29wdGlvbi9vcHRpb24tbGVnYWN5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssR0FHUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBMkIsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsa0JBQWtCLEVBQXVCLE1BQU0scUJBQXFCLENBQUM7QUFDN0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7OztBQUVwRDs7O0dBR0c7QUFDSCxNQXdCYSxTQUFTO0lBeEJ0QjtRQXlCcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqQyxPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFDdEMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQ25CLENBQUM7UUFFZSxTQUFJLEdBQUcsTUFBTSxDQUFxQixrQkFBa0IsRUFBRTtZQUNuRSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFZ0IsWUFBTyxHQUV0QixNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUU5QixhQUFRLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFO1lBQ3ZELElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUdELGFBQVEsR0FBRyxLQUFLLENBQUM7S0EwQjNCO0lBckJHLG9EQUFvRDtJQUM3QyxXQUFXO1FBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVTLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFUyxXQUFXO1FBQ2pCLElBQ0ksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNkLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLEVBQ2pEO1lBQ0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBQyxhQUFhLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7K0dBL0NRLFNBQVM7bUdBQVQsU0FBUyx5ZEFuQlI7Ozs7Ozs7S0FPVCw0REFSUyxrQkFBa0I7O1NBb0JuQixTQUFTOzRGQUFULFNBQVM7a0JBeEJyQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQ0osb0ZBQW9GO29CQUN4RixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7O0tBT1Q7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGNBQWMsRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDOUIsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxRQUFRO3dCQUNkLGlCQUFpQixFQUFFLGtCQUFrQjt3QkFDckMsd0JBQXdCLEVBQUUsY0FBYzt3QkFDeEMsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLHNCQUFzQixFQUFFLGVBQWU7cUJBQzFDO2lCQUNKOzhCQXVCVSxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsS0FBSztzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgdHlwZSBPbkRlc3Ryb3ksXG4gICAgdHlwZSBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RVSV9JU19NT0JJTEV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHlwZSBUdWlDb250ZXh0fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3R5cGVzJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlJc05hdGl2ZUZvY3VzZWR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZm9jdXMnO1xuaW1wb3J0IHtUdWlEcm9wZG93bkRpcmVjdGl2ZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9kcm9wZG93bic7XG5pbXBvcnQge1R1aVdpdGhJY29uc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pY29ucyc7XG5pbXBvcnQge3R5cGUgUG9seW1vcnBoZXVzQ29udGVudCwgUG9seW1vcnBoZXVzT3V0bGV0fSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcblxuaW1wb3J0IHtUdWlEYXRhTGlzdENvbXBvbmVudH0gZnJvbSAnLi4vZGF0YS1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1RVSV9EQVRBX0xJU1RfSE9TVCwgdHlwZSBUdWlEYXRhTGlzdEhvc3R9IGZyb20gJy4uL2RhdGEtbGlzdC50b2tlbnMnO1xuaW1wb3J0IHtUVUlfT1BUSU9OX0NPTlRFTlR9IGZyb20gJy4vb3B0aW9uLWNvbnRlbnQnO1xuXG4vKipcbiAqIFRPRE8odjUpOiBkZWxldGVcbiAqIEBkZXByZWNhdGVkIHVzZSBgPGJ1dHRvbiB0dWlPcHRpb24gbmV3IC8+YCAvIGA8YSB0dWlPcHRpb24gbmV3IC8+IC8gYDxsYWJlbCB0dWlPcHRpb24gbmV3IC8+IGluc3RlYWRcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjpcbiAgICAgICAgJ2J1dHRvblt0dWlPcHRpb25dOm5vdChbbmV3XSksIGFbdHVpT3B0aW9uXTpub3QoW25ld10pLCBsYWJlbFt0dWlPcHRpb25dOm5vdChbbmV3XSknLFxuICAgIGltcG9ydHM6IFtQb2x5bW9ycGhldXNPdXRsZXRdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cImNvbnRlbnQgfHwgdCBhcyB0ZXh0OyBjb250ZXh0OiB7JGltcGxpY2l0OiB0fVwiPlxuICAgICAgICAgICAge3sgdGV4dCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbVHVpV2l0aEljb25zXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1tjbGFzcy5fd2l0aC1kcm9wZG93bl0nOiAnZHJvcGRvd24/LigpJyxcbiAgICAgICAgJyhjbGljayknOiAnb25DbGljaygpJyxcbiAgICAgICAgJyhtb3VzZW1vdmUuem9uZWxlc3MpJzogJ29uTW91c2VNb3ZlKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aU9wdGlvbjxUID0gdW5rbm93bj4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNNb2JpbGUgPSBpbmplY3QoVFVJX0lTX01PQklMRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFMaXN0ID0gaW5qZWN0PFR1aURhdGFMaXN0Q29tcG9uZW50PFQ+PihcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBUdWlEYXRhTGlzdENvbXBvbmVudCksXG4gICAgICAgIHtvcHRpb25hbDogdHJ1ZX0sXG4gICAgKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdCA9IGluamVjdDxUdWlEYXRhTGlzdEhvc3Q8VD4+KFRVSV9EQVRBX0xJU1RfSE9TVCwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFxuICAgICAgICBUdWlDb250ZXh0PFRlbXBsYXRlUmVmPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj5cbiAgICA+ID0gaW5qZWN0KFRVSV9PUFRJT05fQ09OVEVOVCwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd24gPSBpbmplY3QoVHVpRHJvcGRvd25EaXJlY3RpdmUsIHtcbiAgICAgICAgc2VsZjogdHJ1ZSxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk/LnJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZT86IFQ7XG5cbiAgICAvLyBQcmV2ZW50aW5nIGZvY3VzIGxvc3MgdXBvbiBmb2N1c2VkIG9wdGlvbiByZW1vdmFsXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFMaXN0Py5oYW5kbGVGb2N1c0xvc3NJZk5lY2Vzc2FyeSh0aGlzLmVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaG9zdD8uaGFuZGxlT3B0aW9uICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ob3N0LmhhbmRsZU9wdGlvbih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbk1vdXNlTW92ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgICF0dWlJc05hdGl2ZUZvY3VzZWQodGhpcy5lbCkgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0YUxpc3QgJiZcbiAgICAgICAgICAgIHRoaXMuZWwuY2xvc2VzdCgnW3R1aURhdGFMaXN0RHJvcGRvd25NYW5hZ2VyXScpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5lbC5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19