UNPKG

@taiga-ui/addon-mobile

Version:

Extension package for Taiga UI that adds support for mobile specific behaviors such as custom data pickers, dropdowns, etc.

98 lines 15.3 kB
import { DOCUMENT } from '@angular/common'; import { ChangeDetectionStrategy, Component, DestroyRef, Directive, inject, Input, ViewEncapsulation, } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { tuiTypedFromEvent } from '@taiga-ui/cdk/observables'; import { tuiIsHTMLElement } from '@taiga-ui/cdk/utils/dom'; import { tuiPx, tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous'; import { TUI_ANIMATIONS_SPEED } from '@taiga-ui/core/tokens'; import { tuiGetDuration } from '@taiga-ui/core/utils/miscellaneous'; import { first, merge, race, switchMap, tap } from 'rxjs'; import * as i0 from "@angular/core"; const TO_KEYFRAMES = [ { transform: 'scale(0)', opacity: '0.12', }, { opacity: '0.12', }, ]; const FROM_KEYFRAMES = [ { opacity: '0.12', }, { opacity: '0', }, ]; class TuiRippleStyles { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRippleStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRippleStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-ripple-styles" }, ngImport: i0, template: '', isInline: true, styles: [".tui-ripple{position:absolute;z-index:100;opacity:.12;border-radius:100%;background:var(--tui-ripple-background, currentColor);animation-fill-mode:forwards;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRippleStyles, decorators: [{ type: Component, args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-ripple-styles', }, styles: [".tui-ripple{position:absolute;z-index:100;opacity:.12;border-radius:100%;background:var(--tui-ripple-background, currentColor);animation-fill-mode:forwards;pointer-events:none}\n"] }] }] }); class TuiRipple { constructor() { this.doc = inject(DOCUMENT); this.destroyRef = inject(DestroyRef); this.animationOptions = { duration: tuiGetDuration(inject(TUI_ANIMATIONS_SPEED)), }; this.nothing = tuiWithStyles(TuiRippleStyles); this.tuiRipple = ''; } start(x, y, target, el) { const element = this.tuiRipple ? target.closest(this.tuiRipple) : el; if (!tuiIsHTMLElement(element)) { return; } const ripple = this.createRipple(x, y, element.getBoundingClientRect()); const touchEnd$ = merge(tuiTypedFromEvent(element, 'pointerup'), tuiTypedFromEvent(element, 'pointercancel'), tuiTypedFromEvent(element, 'pointermove')); element.appendChild(ripple); const animationEndOn$ = tuiTypedFromEvent(ripple.animate(TO_KEYFRAMES, this.animationOptions), 'finish'); race(touchEnd$.pipe(switchMap(() => animationEndOn$)), animationEndOn$.pipe(switchMap(() => touchEnd$))) .pipe(first(), switchMap(() => tuiTypedFromEvent(ripple.animate(FROM_KEYFRAMES, this.animationOptions), 'finish')), first(), tap(() => element.removeChild(ripple)), takeUntilDestroyed(this.destroyRef)) .subscribe(); } createRipple(clientX, clientY, { width, height, top, left }) { const ripple = this.doc.createElement('div'); const radius = Math.sqrt(width * width + height * height); const dimension = radius * 2; const x = clientX - left - radius; const y = clientY - top - radius; Object.assign(ripple.style, { position: 'absolute', top: tuiPx(y), left: tuiPx(x), width: tuiPx(dimension), height: tuiPx(dimension), zIndex: 100, opacity: 0.12, borderRadius: '100%', background: 'var(--tui-ripple-background, currentColor)', animationFillMode: 'forwards', pointerEvents: 'none', }); return ripple; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRipple, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiRipple, isStandalone: true, selector: "[tuiRipple]", inputs: { tuiRipple: "tuiRipple" }, host: { listeners: { "pointerdown.zoneless": "start($event.clientX, $event.clientY, $event.target, $event.currentTarget)" } }, ngImport: i0 }); } } export { TuiRipple }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRipple, decorators: [{ type: Directive, args: [{ standalone: true, selector: '[tuiRipple]', host: { '(pointerdown.zoneless)': 'start($event.clientX, $event.clientY, $event.target, $event.currentTarget)', }, }] }], propDecorators: { tuiRipple: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLW1vYmlsZS9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUV4RCxNQUFNLFlBQVksR0FBRztJQUNqQjtRQUNJLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxNQUFNO0tBQ2xCO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsTUFBTTtLQUNsQjtDQUNKLENBQUM7QUFDRixNQUFNLGNBQWMsR0FBRztJQUNuQjtRQUNJLE9BQU8sRUFBRSxNQUFNO0tBQ2xCO0lBQ0Q7UUFDSSxPQUFPLEVBQUUsR0FBRztLQUNmO0NBQ0osQ0FBQztBQUVGLE1BVU0sZUFBZTsr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Q0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUVqQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDeEIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3ZCLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUFHO1lBQ1gsT0FBTyxFQUFFLElBQUk7WUFDYixZQUFZLEVBQUUsTUFBTTtZQUNwQixVQUFVLEVBQUUsNENBQTRDO1lBQ3hELGlCQUFpQixFQUFFLFVBQVU7WUFDN0IsYUFBYSxFQUFFLE1BQU07U0FDeEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzsrR0E5RVEsU0FBUzttR0FBVCxTQUFTOztTQUFULFNBQVM7NEZBQVQsU0FBUztrQkFSckIsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLElBQUksRUFBRTt3QkFDRix3QkFBd0IsRUFDcEIsNEVBQTRFO3FCQUNuRjtpQkFDSjs4QkFXVSxTQUFTO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge3R1aVR5cGVkRnJvbUV2ZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpSXNIVE1MRWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlQeCwgdHVpV2l0aFN0eWxlc30gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7VFVJX0FOSU1BVElPTlNfU1BFRUR9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3Rva2Vucyc7XG5pbXBvcnQge3R1aUdldER1cmF0aW9ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7Zmlyc3QsIG1lcmdlLCByYWNlLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IFRPX0tFWUZSQU1FUyA9IFtcbiAgICB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlKDApJyxcbiAgICAgICAgb3BhY2l0eTogJzAuMTInLFxuICAgIH0sXG4gICAge1xuICAgICAgICBvcGFjaXR5OiAnMC4xMicsXG4gICAgfSxcbl07XG5jb25zdCBGUk9NX0tFWUZSQU1FUyA9IFtcbiAgICB7XG4gICAgICAgIG9wYWNpdHk6ICcwLjEyJyxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgb3BhY2l0eTogJzAnLFxuICAgIH0sXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yaXBwbGUuc3R5bGUubGVzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3R1aS1yaXBwbGUtc3R5bGVzJyxcbiAgICB9LFxufSlcbmNsYXNzIFR1aVJpcHBsZVN0eWxlcyB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aVJpcHBsZV0nLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhwb2ludGVyZG93bi56b25lbGVzcyknOlxuICAgICAgICAgICAgJ3N0YXJ0KCRldmVudC5jbGllbnRYLCAkZXZlbnQuY2xpZW50WSwgJGV2ZW50LnRhcmdldCwgJGV2ZW50LmN1cnJlbnRUYXJnZXQpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlSaXBwbGUge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRpb25PcHRpb25zID0ge1xuICAgICAgICBkdXJhdGlvbjogdHVpR2V0RHVyYXRpb24oaW5qZWN0KFRVSV9BTklNQVRJT05TX1NQRUVEKSksXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBub3RoaW5nID0gdHVpV2l0aFN0eWxlcyhUdWlSaXBwbGVTdHlsZXMpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHVpUmlwcGxlID0gJyc7XG5cbiAgICBwcm90ZWN0ZWQgc3RhcnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHRhcmdldDogSFRNTEVsZW1lbnQsIGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50dWlSaXBwbGUgPyB0YXJnZXQuY2xvc2VzdCh0aGlzLnR1aVJpcHBsZSkgOiBlbDtcblxuICAgICAgICBpZiAoIXR1aUlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IHRoaXMuY3JlYXRlUmlwcGxlKHgsIHksIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICBjb25zdCB0b3VjaEVuZCQgPSBtZXJnZShcbiAgICAgICAgICAgIHR1aVR5cGVkRnJvbUV2ZW50KGVsZW1lbnQsICdwb2ludGVydXAnKSxcbiAgICAgICAgICAgIHR1aVR5cGVkRnJvbUV2ZW50KGVsZW1lbnQsICdwb2ludGVyY2FuY2VsJyksXG4gICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudChlbGVtZW50LCAncG9pbnRlcm1vdmUnKSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHJpcHBsZSk7XG5cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uRW5kT24kID0gdHVpVHlwZWRGcm9tRXZlbnQoXG4gICAgICAgICAgICByaXBwbGUuYW5pbWF0ZShUT19LRVlGUkFNRVMsIHRoaXMuYW5pbWF0aW9uT3B0aW9ucyksXG4gICAgICAgICAgICAnZmluaXNoJyxcbiAgICAgICAgKTtcblxuICAgICAgICByYWNlKFxuICAgICAgICAgICAgdG91Y2hFbmQkLnBpcGUoc3dpdGNoTWFwKCgpID0+IGFuaW1hdGlvbkVuZE9uJCkpLFxuICAgICAgICAgICAgYW5pbWF0aW9uRW5kT24kLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRvdWNoRW5kJCkpLFxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpcHBsZS5hbmltYXRlKEZST01fS0VZRlJBTUVTLCB0aGlzLmFuaW1hdGlvbk9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbmlzaCcsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiBlbGVtZW50LnJlbW92ZUNoaWxkKHJpcHBsZSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUmlwcGxlKFxuICAgICAgICBjbGllbnRYOiBudW1iZXIsXG4gICAgICAgIGNsaWVudFk6IG51bWJlcixcbiAgICAgICAge3dpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdH06IERPTVJlY3QsXG4gICAgKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCByaXBwbGU6IEhUTUxFbGVtZW50ID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IE1hdGguc3FydCh3aWR0aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gcmFkaXVzICogMjtcbiAgICAgICAgY29uc3QgeCA9IGNsaWVudFggLSBsZWZ0IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB5ID0gY2xpZW50WSAtIHRvcCAtIHJhZGl1cztcblxuICAgICAgICBPYmplY3QuYXNzaWduKHJpcHBsZS5zdHlsZSwge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICB0b3A6IHR1aVB4KHkpLFxuICAgICAgICAgICAgbGVmdDogdHVpUHgoeCksXG4gICAgICAgICAgICB3aWR0aDogdHVpUHgoZGltZW5zaW9uKSxcbiAgICAgICAgICAgIGhlaWdodDogdHVpUHgoZGltZW5zaW9uKSxcbiAgICAgICAgICAgIHpJbmRleDogMTAwLFxuICAgICAgICAgICAgb3BhY2l0eTogMC4xMixcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEwMCUnLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJ3ZhcigtLXR1aS1yaXBwbGUtYmFja2dyb3VuZCwgY3VycmVudENvbG9yKScsXG4gICAgICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2ZvcndhcmRzJyxcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJpcHBsZTtcbiAgICB9XG59XG4iXX0=