@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
110 lines • 15.6 kB
JavaScript
import { coerceArray } from '@angular/cdk/coercion';
import { ChangeDetectorRef, Directive, inject, INJECTOR, Input, signal, TemplateRef, } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { tuiZonefreeScheduler } from '@taiga-ui/cdk/observables';
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { tuiAsRectAccessor, tuiAsVehicle, } from '@taiga-ui/core/classes';
import { tuiCheckFixedPosition } from '@taiga-ui/core/utils';
import { PolymorpheusComponent, PolymorpheusTemplate, } from '@taiga-ui/polymorpheus';
import { Subject, throttleTime } from 'rxjs';
import { TuiDropdownDriver, TuiDropdownDriverDirective } from './dropdown.driver';
import { TUI_DROPDOWN_COMPONENT } from './dropdown.providers';
import { TuiDropdownService } from './dropdown.service';
import { TuiDropdownPosition } from './dropdown-position.directive';
import * as i0 from "@angular/core";
import * as i1 from "./dropdown.driver";
import * as i2 from "./dropdown-position.directive";
class TuiDropdownDirective {
constructor() {
this.refresh$ = new Subject();
this.service = inject(TuiDropdownService);
this.cdr = inject(ChangeDetectorRef);
// TODO: think of a better solution later
this.drivers = coerceArray(inject(TuiDropdownDriver, { self: true, optional: true }));
this.sub = this.refresh$
.pipe(throttleTime(0, tuiZonefreeScheduler()), takeUntilDestroyed())
.subscribe(() => {
this.ref()?.changeDetectorRef.detectChanges();
this.ref()?.changeDetectorRef.markForCheck();
});
this.el = tuiInjectElement();
this.type = 'dropdown';
this.component = new PolymorpheusComponent(inject(TUI_DROPDOWN_COMPONENT), inject(INJECTOR));
this.ref = signal(null);
// TODO(v5): rename to `content`
// eslint-disable-next-line @typescript-eslint/naming-convention
this._content = signal(null);
}
set tuiDropdown(content) {
this._content.set(content instanceof TemplateRef
? new PolymorpheusTemplate(content, this.cdr)
: content);
if (!this._content()) {
this.toggle(false);
}
}
get position() {
return tuiCheckFixedPosition(this.el) ? 'fixed' : 'absolute';
}
// TODO(v5): delete
get content() {
return this._content();
}
// TODO(v5): delete
set content(x) {
this._content.set(x);
}
ngAfterViewChecked() {
this.refresh$.next();
}
ngOnDestroy() {
this.toggle(false);
}
getClientRect() {
return this.el.getBoundingClientRect();
}
toggle(show) {
const ref = this.ref();
if (show && this._content() && !ref) {
this.ref.set(this.service.add(this.component));
}
else if (!show && ref) {
this.ref.set(null);
this.service.remove(ref);
}
this.drivers.forEach((driver) => driver?.next(show));
// TODO: Remove in v5, only needed in Angular 16
this.cdr.markForCheck();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { tuiDropdown: "tuiDropdown" }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [
tuiAsRectAccessor(TuiDropdownDirective),
tuiAsVehicle(TuiDropdownDirective),
], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: i1.TuiDropdownDriverDirective }, { directive: i2.TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); }
}
export { TuiDropdownDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[tuiDropdown]:not(ng-container):not(ng-template)',
providers: [
tuiAsRectAccessor(TuiDropdownDirective),
tuiAsVehicle(TuiDropdownDirective),
],
exportAs: 'tuiDropdown',
hostDirectives: [
TuiDropdownDriverDirective,
{
directive: TuiDropdownPosition,
outputs: ['tuiDropdownDirectionChange'],
},
],
host: {
'[class.tui-dropdown-open]': 'ref()',
},
}]
}], propDecorators: { tuiDropdown: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUVILGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUUvRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFlBQVksR0FHZixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFDSCxxQkFBcUIsRUFFckIsb0JBQW9CLEdBQ3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFFLDBCQUEwQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFFbEUsTUFtQmEsb0JBQW9CO0lBbkJqQztRQXNCcUIsYUFBUSxHQUFHLElB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QUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFckQsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0FwRlEsb0JBQW9CO21HQUFwQixvQkFBb0IscU1BaEJsQjtZQUNQLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztTQUNyQzs7U0FhUSxvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFuQmhDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrREFBa0Q7b0JBQzVELFNBQVMsRUFBRTt3QkFDUCxpQkFBaUIsc0JBQXNCO3dCQUN2QyxZQUFZLHNCQUFzQjtxQkFDckM7b0JBQ0QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLGNBQWMsRUFBRTt3QkFDWiwwQkFBMEI7d0JBQzFCOzRCQUNJLFNBQVMsRUFBRSxtQkFBbUI7NEJBQzlCLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDO3lCQUMxQztxQkFDSjtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsMkJBQTJCLEVBQUUsT0FBTztxQkFDdkM7aUJBQ0o7OEJBaUNjLFdBQVc7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvZXJjZUFycmF5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICB0eXBlIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgdHlwZSBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJTkpFQ1RPUixcbiAgICBJbnB1dCxcbiAgICB0eXBlIE9uRGVzdHJveSxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7dHVpWm9uZWZyZWVTY2hlZHVsZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0eXBlIFR1aUNvbnRleHR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge1xuICAgIHR1aUFzUmVjdEFjY2Vzc29yLFxuICAgIHR1aUFzVmVoaWNsZSxcbiAgICB0eXBlIFR1aVJlY3RBY2Nlc3NvcixcbiAgICB0eXBlIFR1aVZlaGljbGUsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NsYXNzZXMnO1xuaW1wb3J0IHt0eXBlIFR1aVBvcnRhbEl0ZW19IGZyb20gJ0B0YWlnYS11aS9jb3JlL3R5cGVzJztcbmltcG9ydCB7dHVpQ2hlY2tGaXhlZFBvc2l0aW9ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS91dGlscyc7XG5pbXBvcnQge1xuICAgIFBvbHltb3JwaGV1c0NvbXBvbmVudCxcbiAgICB0eXBlIFBvbHltb3JwaGV1c0NvbnRlbnQsXG4gICAgUG9seW1vcnBoZXVzVGVtcGxhdGUsXG59IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtTdWJqZWN0LCB0aHJvdHRsZVRpbWV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aURyb3Bkb3duRHJpdmVyLCBUdWlEcm9wZG93bkRyaXZlckRpcmVjdGl2ZX0gZnJvbSAnLi9kcm9wZG93bi5kcml2ZXInO1xuaW1wb3J0IHtUVUlfRFJPUERPV05fQ09NUE9ORU5UfSBmcm9tICcuL2Ryb3Bkb3duLnByb3ZpZGVycyc7XG5pbXBvcnQge1R1aURyb3Bkb3duU2VydmljZX0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7VHVpRHJvcGRvd25Qb3NpdGlvbn0gZnJvbSAnLi9kcm9wZG93bi1wb3NpdGlvbi5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aURyb3Bkb3duXTpub3QobmctY29udGFpbmVyKTpub3QobmctdGVtcGxhdGUpJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpQXNSZWN0QWNjZXNzb3IoVHVpRHJvcGRvd25EaXJlY3RpdmUpLFxuICAgICAgICB0dWlBc1ZlaGljbGUoVHVpRHJvcGRvd25EaXJlY3RpdmUpLFxuICAgIF0sXG4gICAgZXhwb3J0QXM6ICd0dWlEcm9wZG93bicsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAgVHVpRHJvcGRvd25Ecml2ZXJEaXJlY3RpdmUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpRHJvcGRvd25Qb3NpdGlvbixcbiAgICAgICAgICAgIG91dHB1dHM6IFsndHVpRHJvcGRvd25EaXJlY3Rpb25DaGFuZ2UnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy50dWktZHJvcGRvd24tb3Blbl0nOiAncmVmKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aURyb3Bkb3duRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIFR1aVBvcnRhbEl0ZW0sIFR1aVJlY3RBY2Nlc3NvciwgVHVpVmVoaWNsZVxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChUdWlEcm9wZG93blNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8vIFRPRE86IHRoaW5rIG9mIGEgYmV0dGVyIHNvbHV0aW9uIGxhdGVyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcml2ZXJzID0gY29lcmNlQXJyYXkoXG4gICAgICAgIGluamVjdChUdWlEcm9wZG93bkRyaXZlciwge3NlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlfSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWIgPSB0aGlzLnJlZnJlc2gkXG4gICAgICAgIC5waXBlKHRocm90dGxlVGltZSgwLCB0dWlab25lZnJlZVNjaGVkdWxlcigpKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWYoKT8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5yZWYoKT8uY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuICAgIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ2Ryb3Bkb3duJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50ID0gbmV3IFBvbHltb3JwaGV1c0NvbXBvbmVudChcbiAgICAgICAgaW5qZWN0KFRVSV9EUk9QRE9XTl9DT01QT05FTlQpLFxuICAgICAgICBpbmplY3QoSU5KRUNUT1IpLFxuICAgICk7XG5cbiAgICBwdWJsaWMgcmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuICAgIC8vIFRPRE8odjUpOiByZW5hbWUgdG8gYGNvbnRlbnRgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIHB1YmxpYyByZWFkb25seSBfY29udGVudCA9IHNpZ25hbDxQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+PihudWxsKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0dWlEcm9wZG93bihjb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+KSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuc2V0KFxuICAgICAgICAgICAgY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgPyBuZXcgUG9seW1vcnBoZXVzVGVtcGxhdGUoY29udGVudCwgdGhpcy5jZHIpXG4gICAgICAgICAgICAgICAgOiBjb250ZW50LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29udGVudCgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHtcbiAgICAgICAgcmV0dXJuIHR1aUNoZWNrRml4ZWRQb3NpdGlvbih0aGlzLmVsKSA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIH1cblxuICAgIC8vIFRPRE8odjUpOiBkZWxldGVcbiAgICBwdWJsaWMgZ2V0IGNvbnRlbnQoKTogUG9seW1vcnBoZXVzQ29udGVudDxUdWlDb250ZXh0PCgpID0+IHZvaWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50KCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETyh2NSk6IGRlbGV0ZVxuICAgIHB1YmxpYyBzZXQgY29udGVudCh4OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aUNvbnRleHQ8KCkgPT4gdm9pZD4+KSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuc2V0KHgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbGllbnRSZWN0KCk6IERPTVJlY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5yZWYoKTtcblxuICAgICAgICBpZiAoc2hvdyAmJiB0aGlzLl9jb250ZW50KCkgJiYgIXJlZikge1xuICAgICAgICAgICAgdGhpcy5yZWYuc2V0KHRoaXMuc2VydmljZS5hZGQodGhpcy5jb21wb25lbnQpKTtcbiAgICAgICAgfSBlbHNlIGlmICghc2hvdyAmJiByZWYpIHtcbiAgICAgICAgICAgIHRoaXMucmVmLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5yZW1vdmUocmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJpdmVycy5mb3JFYWNoKChkcml2ZXIpID0+IGRyaXZlcj8ubmV4dChzaG93KSk7XG5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGluIHY1LCBvbmx5IG5lZWRlZCBpbiBBbmd1bGFyIDE2XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbiJdfQ==