UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

88 lines 14.2 kB
import { __decorate } from "tslib"; import { Directive, EventEmitter, inject, Output } from '@angular/core'; import { EMPTY_CLIENT_RECT } from '@taiga-ui/cdk/constants'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiPure } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiFallbackAccessor, TuiPositionAccessor, TuiRectAccessor, } from '@taiga-ui/core/classes'; import { TUI_VIEWPORT } from '@taiga-ui/core/tokens'; import { TuiDropdownDirective } from './dropdown.directive'; import { TUI_DROPDOWN_OPTIONS } from './dropdown-options.directive'; import * as i0 from "@angular/core"; class TuiDropdownPosition extends TuiPositionAccessor { constructor() { super(...arguments); this.el = tuiInjectElement(); this.options = inject(TUI_DROPDOWN_OPTIONS); this.viewport = inject(TUI_VIEWPORT); this.directionChange = new EventEmitter(); this.type = 'dropdown'; this.accessor = tuiFallbackAccessor('dropdown')(inject(TuiRectAccessor), inject(TuiDropdownDirective, { optional: true })); } emitDirection(direction) { this.directionChange.emit(direction); } getPosition({ width, height }) { if (!width && !height) { this.previous = undefined; } const hostRect = this.accessor?.getClientRect() ?? EMPTY_CLIENT_RECT; const viewportRect = this.viewport.getClientRect(); const { minHeight, direction, offset, limitWidth } = this.options; const align = this.getAlign(this.options.align); const viewport = { top: viewportRect.top - offset, bottom: viewportRect.bottom + offset, right: viewportRect.right - offset, left: viewportRect.left + offset, }; const previous = this.previous || direction || 'bottom'; const available = { top: hostRect.top - 2 * offset - viewport.top, bottom: viewport.bottom - hostRect.bottom - 2 * offset, }; const rectWidth = limitWidth === 'fixed' ? hostRect.width : width; const right = Math.max(hostRect.right - rectWidth, offset); const left = hostRect.left + width < viewport.right ? hostRect.left : right; const position = { top: hostRect.top - offset - height, bottom: hostRect.bottom + offset, right: Math.max(viewport.left, right), center: hostRect.left + hostRect.width / 2 + width / 2 < viewport.right ? hostRect.left + hostRect.width / 2 - width / 2 : right, left: Math.max(viewport.left, left), }; const better = available.top > available.bottom ? 'top' : 'bottom'; if ((available[previous] > minHeight && direction) || available[previous] > height) { this.emitDirection(previous); return [position[previous], position[align]]; } this.previous = better; this.emitDirection(better); return [position[better], position[align]]; } getAlign(align) { const rtl = this.el.matches('[dir="rtl"] :scope'); if (rtl && align === 'left') { return 'right'; } return rtl && align === 'right' ? 'left' : align; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownPosition, deps: null, target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiDropdownPosition, isStandalone: true, outputs: { directionChange: "tuiDropdownDirectionChange" }, usesInheritance: true, ngImport: i0 }); } } __decorate([ tuiPure ], TuiDropdownPosition.prototype, "emitDirection", null); export { TuiDropdownPosition }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDropdownPosition, decorators: [{ type: Directive, args: [{ standalone: true, }] }], propDecorators: { directionChange: [{ type: Output, args: ['tuiDropdownDirectionChange'] }], emitDirection: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tcG9zaXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duL2Ryb3Bkb3duLXBvc2l0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDMUQsT0FBTyxFQUNILG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsZUFBZSxHQUNsQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsb0JBQW9CLEVBQXdCLE1BQU0sOEJBQThCLENBQUM7O0FBRXpGLE1BR2EsbUJBQW9CLFNBQVEsbUJBQW1CO0lBSDVEOztRQUlxQixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixZQUFPLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUtqQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRTNELFNBQUksR0FBRyxVQUFVLENBQUM7UUFDbEIsYUFBUSxHQUNwQixtQkFBbUIsQ0FBa0IsVUFBVSxDQUFDLENBQzVDLE1BQU0sQ0FBTSxlQUFlLENBQUMsRUFDNUIsTUFBTSxDQUFDLG9CQUFv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Q0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBRXhELElBQ0ksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQztZQUM5QyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxFQUM5QjtZQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQXVCO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbEQsSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtZQUN6QixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELE9BQU8sR0FBRyxJQUFJLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3JELENBQUM7K0dBakZRLG1CQUFtQjttR0FBbkIsbUJBQW1COztBQWtCckI7SUFETixPQUFPO3dEQUdQO1NBcEJRLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs4QkFTbUIsZUFBZTtzQkFEOUIsTUFBTTt1QkFBQyw0QkFBNEI7Z0JBVzdCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0VNUFRZX0NMSUVOVF9SRUNUfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpUHVyZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7XG4gICAgdHVpRmFsbGJhY2tBY2Nlc3NvcixcbiAgICBUdWlQb3NpdGlvbkFjY2Vzc29yLFxuICAgIFR1aVJlY3RBY2Nlc3Nvcixcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY2xhc3Nlcyc7XG5pbXBvcnQge1RVSV9WSUVXUE9SVH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7dHlwZSBUdWlQb2ludCwgdHlwZSBUdWlWZXJ0aWNhbERpcmVjdGlvbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQge1R1aURyb3Bkb3duRGlyZWN0aXZlfSBmcm9tICcuL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1RVSV9EUk9QRE9XTl9PUFRJT05TLCB0eXBlIFR1aURyb3Bkb3duQWxpZ259IGZyb20gJy4vZHJvcGRvd24tb3B0aW9ucy5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlEcm9wZG93blBvc2l0aW9uIGV4dGVuZHMgVHVpUG9zaXRpb25BY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoVFVJX0RST1BET1dOX09QVElPTlMpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnQgPSBpbmplY3QoVFVJX1ZJRVdQT1JUKTtcblxuICAgIHByaXZhdGUgcHJldmlvdXM/OiBUdWlWZXJ0aWNhbERpcmVjdGlvbjtcblxuICAgIEBPdXRwdXQoJ3R1aURyb3Bkb3duRGlyZWN0aW9uQ2hhbmdlJylcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlyZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUdWlWZXJ0aWNhbERpcmVjdGlvbj4oKTtcblxuICAgIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ2Ryb3Bkb3duJztcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzb3I6IFR1aVJlY3RBY2Nlc3NvciB8IG51bGwgPVxuICAgICAgICB0dWlGYWxsYmFja0FjY2Vzc29yPFR1aVJlY3RBY2Nlc3Nvcj4oJ2Ryb3Bkb3duJykoXG4gICAgICAgICAgICBpbmplY3Q8YW55PihUdWlSZWN0QWNjZXNzb3IpLFxuICAgICAgICAgICAgaW5qZWN0KFR1aURyb3Bkb3duRGlyZWN0aXZlLCB7b3B0aW9uYWw6IHRydWV9KSEsXG4gICAgICAgICk7XG5cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBlbWl0RGlyZWN0aW9uKGRpcmVjdGlvbjogVHVpVmVydGljYWxEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25DaGFuZ2UuZW1pdChkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQb3NpdGlvbih7d2lkdGgsIGhlaWdodH06IERPTVJlY3QpOiBUdWlQb2ludCB7XG4gICAgICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhvc3RSZWN0ID0gdGhpcy5hY2Nlc3Nvcj8uZ2V0Q2xpZW50UmVjdCgpID8/IEVNUFRZX0NMSUVOVF9SRUNUO1xuICAgICAgICBjb25zdCB2aWV3cG9ydFJlY3QgPSB0aGlzLnZpZXdwb3J0LmdldENsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qge21pbkhlaWdodCwgZGlyZWN0aW9uLCBvZmZzZXQsIGxpbWl0V2lkdGh9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBhbGlnbiA9IHRoaXMuZ2V0QWxpZ24odGhpcy5vcHRpb25zLmFsaWduKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgICAgICB0b3A6IHZpZXdwb3J0UmVjdC50b3AgLSBvZmZzZXQsXG4gICAgICAgICAgICBib3R0b206IHZpZXdwb3J0UmVjdC5ib3R0b20gKyBvZmZzZXQsXG4gICAgICAgICAgICByaWdodDogdmlld3BvcnRSZWN0LnJpZ2h0IC0gb2Zmc2V0LFxuICAgICAgICAgICAgbGVmdDogdmlld3BvcnRSZWN0LmxlZnQgKyBvZmZzZXQsXG4gICAgICAgIH0gYXMgY29uc3Q7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5wcmV2aW91cyB8fCBkaXJlY3Rpb24gfHwgJ2JvdHRvbSc7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IHtcbiAgICAgICAgICAgIHRvcDogaG9zdFJlY3QudG9wIC0gMiAqIG9mZnNldCAtIHZpZXdwb3J0LnRvcCxcbiAgICAgICAgICAgIGJvdHRvbTogdmlld3BvcnQuYm90dG9tIC0gaG9zdFJlY3QuYm90dG9tIC0gMiAqIG9mZnNldCxcbiAgICAgICAgfSBhcyBjb25zdDtcbiAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbGltaXRXaWR0aCA9PT0gJ2ZpeGVkJyA/IGhvc3RSZWN0LndpZHRoIDogd2lkdGg7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgoaG9zdFJlY3QucmlnaHQgLSByZWN0V2lkdGgsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBob3N0UmVjdC5sZWZ0ICsgd2lkdGggPCB2aWV3cG9ydC5yaWdodCA/IGhvc3RSZWN0LmxlZnQgOiByaWdodDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICB0b3A6IGhvc3RSZWN0LnRvcCAtIG9mZnNldCAtIGhlaWdodCxcbiAgICAgICAgICAgIGJvdHRvbTogaG9zdFJlY3QuYm90dG9tICsgb2Zmc2V0LFxuICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KHZpZXdwb3J0LmxlZnQsIHJpZ2h0KSxcbiAgICAgICAgICAgIGNlbnRlcjpcbiAgICAgICAgICAgICAgICBob3N0UmVjdC5sZWZ0ICsgaG9zdFJlY3Qud2lkdGggLyAyICsgd2lkdGggLyAyIDwgdmlld3BvcnQucmlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBob3N0UmVjdC5sZWZ0ICsgaG9zdFJlY3Qud2lkdGggLyAyIC0gd2lkdGggLyAyXG4gICAgICAgICAgICAgICAgICAgIDogcmlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBNYXRoLm1heCh2aWV3cG9ydC5sZWZ0LCBsZWZ0KSxcbiAgICAgICAgfSBhcyBjb25zdDtcbiAgICAgICAgY29uc3QgYmV0dGVyOiBUdWlWZXJ0aWNhbERpcmVjdGlvbiA9XG4gICAgICAgICAgICBhdmFpbGFibGUudG9wID4gYXZhaWxhYmxlLmJvdHRvbSA/ICd0b3AnIDogJ2JvdHRvbSc7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGF2YWlsYWJsZVtwcmV2aW91c10gPiBtaW5IZWlnaHQgJiYgZGlyZWN0aW9uKSB8fFxuICAgICAgICAgICAgYXZhaWxhYmxlW3ByZXZpb3VzXSA+IGhlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdERpcmVjdGlvbihwcmV2aW91cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBbcG9zaXRpb25bcHJldmlvdXNdLCBwb3NpdGlvblthbGlnbl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2aW91cyA9IGJldHRlcjtcbiAgICAgICAgdGhpcy5lbWl0RGlyZWN0aW9uKGJldHRlcik7XG5cbiAgICAgICAgcmV0dXJuIFtwb3NpdGlvbltiZXR0ZXJdLCBwb3NpdGlvblthbGlnbl1dO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGlnbihhbGlnbjogVHVpRHJvcGRvd25BbGlnbik6IFR1aURyb3Bkb3duQWxpZ24ge1xuICAgICAgICBjb25zdCBydGwgPSB0aGlzLmVsLm1hdGNoZXMoJ1tkaXI9XCJydGxcIl0gOnNjb3BlJyk7XG5cbiAgICAgICAgaWYgKHJ0bCAmJiBhbGlnbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBydGwgJiYgYWxpZ24gPT09ICdyaWdodCcgPyAnbGVmdCcgOiBhbGlnbjtcbiAgICB9XG59XG4iXX0=