@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
55 lines (50 loc) • 3.05 kB
JavaScript
import * as i0 from '@angular/core';
import { inject, NgZone, Injectable, Directive } from '@angular/core';
import { toSignal, outputFromObservable } from '@angular/core/rxjs-interop';
import { WA_IS_MOBILE } from '@ng-web-apis/platform';
import { TUI_TRUE_HANDLER, TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
import { tuiTypedFromEvent, tuiZoneOptimized, tuiWatch } from '@taiga-ui/cdk/observables';
import { tuiIsElement, tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { Observable, merge, map, filter, distinctUntilChanged, of } from 'rxjs';
function movedOut({ currentTarget, relatedTarget }) {
return (!tuiIsElement(relatedTarget) ||
!tuiIsElement(currentTarget) ||
!currentTarget.contains(relatedTarget));
}
class TuiHoveredService extends Observable {
constructor() {
super((subscriber) => this.stream$.subscribe(subscriber));
this.el = tuiInjectElement();
this.zone = inject(NgZone);
this.stream$ = merge(tuiTypedFromEvent(this.el, 'mouseenter').pipe(map(TUI_TRUE_HANDLER)), tuiTypedFromEvent(this.el, 'mouseleave').pipe(map(TUI_FALSE_HANDLER)),
// Hello, Safari
tuiTypedFromEvent(this.el, 'mouseout').pipe(filter(movedOut), map(TUI_FALSE_HANDLER))).pipe(distinctUntilChanged(), tuiZoneOptimized(this.zone));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiHoveredService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiHoveredService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiHoveredService, decorators: [{
type: Injectable
}], ctorParameters: () => [] });
function tuiHovered() {
return toSignal(inject(WA_IS_MOBILE) ? of(false) : inject(TuiHoveredService).pipe(tuiWatch()), { initialValue: false });
}
class TuiHovered {
constructor() {
this.tuiHoveredChange = outputFromObservable(inject(TuiHoveredService));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiHovered, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: TuiHovered, isStandalone: true, selector: "[tuiHoveredChange]", outputs: { tuiHoveredChange: "tuiHoveredChange" }, providers: [TuiHoveredService], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TuiHovered, decorators: [{
type: Directive,
args: [{
selector: '[tuiHoveredChange]',
providers: [TuiHoveredService],
}]
}] });
/**
* Generated bundle index. Do not edit.
*/
export { TuiHovered, TuiHoveredService, tuiHovered };
//# sourceMappingURL=taiga-ui-cdk-directives-hovered.mjs.map