{"version":3,"file":"nw-style-guide-tooltips.mjs","sources":["../../../projects/nw-style-guide/tooltips/config/tooltip-context-token.ts","../../../projects/nw-style-guide/tooltips/tooltip-container.component.ts","../../../projects/nw-style-guide/tooltips/config/placement-flip-map.ts","../../../projects/nw-style-guide/tooltips/tooltip.directive.ts","../../../projects/nw-style-guide/tooltips/nw-style-guide-tooltips.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ITooltipData } from '../models/ITooltipData';\n\nexport const TOOLTIP_CONTEXT_TOKEN = new InjectionToken<ITooltipData>('tooltip-context');\n","import { Component, ChangeDetectionStrategy, TemplateRef, EventEmitter, inject } from '@angular/core';\nimport { ITooltipData } from './models/ITooltipData';\nimport { TOOLTIP_CONTEXT_TOKEN } from './config/tooltip-context-token';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'nw-tooltip-container',\n    template: `\n        <div\n            class=\"tooltip\"\n            [ngClass]=\"data.containerClass\">\n            @if (data.withArrow) {\n                <div class=\"tooltip-arrow\"></div>\n            }\n            <div class=\"tooltip-inner\">\n                @if (data.withClose) {\n                    <button\n                        (click)=\"close.emit()\"\n                        class=\"btn btn-ghost-alt btn-sm btn-close close-button\"></button>\n                }\n                @if (isTemplateRef) {\n                    <ng-container *ngTemplateOutlet=\"data.tooltip; context: data.templateRefContext\"></ng-container>\n                } @else {\n                    <div [outerHTML]=\"data.tooltip\"></div>\n                }\n            </div>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgClass, NgTemplateOutlet]\n})\nexport class TooltipContainerComponent {\n    data = inject<ITooltipData>(TOOLTIP_CONTEXT_TOKEN);\n\n    public close: EventEmitter<void> = new EventEmitter();\n    public isTemplateRef: boolean = false;\n\n    constructor() {\n        const data = this.data;\n\n        this.isTemplateRef = data.tooltip instanceof TemplateRef;\n    }\n}\n","import { PlacementFlipMap } from '../models/PlacementFlipMap.type';\n\nexport const placementFlipMap: PlacementFlipMap = {\n    top: 'bottom',\n    'top-start': 'bottom-start',\n    'top-end': 'bottom-end',\n    bottom: 'top',\n    'bottom-start': 'top-start',\n    'bottom-end': 'top-end',\n    right: 'left',\n    'right-start': 'left-start',\n    'right-end': 'left-end',\n    left: 'right',\n    'left-start': 'right-start',\n    'left-end': 'right-end'\n};\n","import {\n    CloseScrollStrategy,\n    ConnectionPositionPair,\n    FlexibleConnectedPositionStrategy,\n    Overlay,\n    OverlayRef,\n    RepositionScrollStrategy\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n    ComponentRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    Injector,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewContainerRef,\n    inject\n} from '@angular/core';\nimport { Placement } from './models/Placement.type';\nimport { Subject, fromEvent, merge, EMPTY, of, Observable, animationFrameScheduler, timer, interval } from 'rxjs';\nimport { takeUntil, filter, tap, map, debounce, switchMap, delay } from 'rxjs/operators';\nimport { TOOLTIP_CONTEXT_TOKEN } from './config/tooltip-context-token';\nimport { TooltipContainerComponent } from './tooltip-container.component';\nimport { ITooltipData } from './models/ITooltipData';\nimport { placementFlipMap } from './config/placement-flip-map';\n\n@Directive({\n    selector: '[nwTooltip],[nwPopover]',\n    exportAs: 'nw-tooltip,nw-popover'\n})\nexport class TooltipDirective implements OnInit, OnChanges, OnDestroy {\n    private _elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    private _overlay = inject(Overlay);\n    private _vcRef = inject(ViewContainerRef);\n    private _injector = inject(Injector);\n\n    /**\n     * This directive can be invoked by using the `nwTooltip` or `nwPopover` attributes. The only differences between using these\n     * attributes are the default values of certain properties, e.g. `delay` and open and close events\n     */\n    @Input('nwTooltip') tooltip: string | TemplateRef<any>;\n    @Input('nwPopover') popover: string | TemplateRef<any>;\n    /**\n     * An object that can be passed when the `nwTooltip` or `nwPopover` input is a `TemplateRef`\n     * ref: https://angular.io/api/core/ng-template#context\n     */\n    @Input() context: any;\n    /**\n     * One or more preferred placement options\n     */\n    @Input() placement: Placement | Placement[];\n    /**\n     * Manually control the opening and closing of the tooltip\n     */\n    @Input() isOpen: boolean;\n    /**\n     * When true, the tooltip will not not respond to any open or close events. Nor will it\n     * respond to changes to the `isOpen` input\n     */\n    @Input() isDisabled: boolean = false;\n    /**\n     * Number of ms to wait before opening\n     */\n    @Input() delay: number;\n    /**\n     * Change the placement of the tooltip to its opposite position when it moves outside the viewport\n     */\n    @Input() autoFlip: boolean = true;\n    /**\n     * A list of events that open the tooltip\n     */\n    @Input() openEvents: string[];\n    /**\n     * A list of events that close the tooltip\n     */\n    @Input() closeEvents: string[];\n    /**\n     * A class to apply to the tooltip container\n     */\n    @Input() containerClass: string;\n    /**\n     * Display an arrow or not. The location of the arrow is dependant on the current `placement`\n     */\n    @Input() withArrow: boolean = true;\n    /**\n     * Display a close button or not\n     */\n    @Input() withClose: boolean = false;\n    @Input() closeOnScroll: boolean;\n    @Input() closeOnOutsideClick: boolean = false;\n    /**\n     * WARNING: Use with caution - there are potential performance issues with this\n     *\n     * Update the position of the tooltip before the next browser repaint. An example of where this may be required is if\n     * the tooltip is attached (and open) to an element that transitions or animates to a new position\n     */\n    @Input() updatePositionOnAnimationFrame: boolean = false;\n    /**\n     * In the case where the tooltip should not be attached to the host element, a reference to another element can be used\n     */\n    @Input() connectedTo: ElementRef<HTMLElement> | Element;\n    /**\n     * Determines whether pointer events are enabled on the cdk-overlay-pane element\n     */\n    @Input() pointerEvents: 'auto' | 'none';\n    /**\n     * The screen size at which the tooltip should treated as a popover as there is no hover events on mobile\n     */\n    @Input() breakpoint: number = 767;\n    @Input() hostElementZIndex: number;\n\n    @Output() nwShown: EventEmitter<null> = new EventEmitter();\n    @Output() nwHidden: EventEmitter<null> = new EventEmitter();\n    @Output() nwClose: EventEmitter<null> = new EventEmitter();\n\n    private _overlayRef: OverlayRef | null = null;\n    private _destroyed$: Subject<void> = new Subject();\n    private _tooltipArrowSize: number = 5;\n    private _manualToggleEvent$: Subject<boolean> = new Subject();\n    private _cancelDelayedOpen$: Subject<void> = new Subject();\n    /**\n     * A subject that emits when the TooltipContainerComponent is destroyed\n     */\n    private _tooltipContainerDestroyed$: Subject<void> = new Subject();\n    private _outsideClick$: Subject<boolean> = new Subject();\n\n    ngOnInit() {\n        this._setInputDefaults();\n        this._subscribeToEvents();\n\n        if (this.isOpen) {\n            this._manualToggleEvent$.next(this.isOpen);\n        }\n\n        if (this.updatePositionOnAnimationFrame) {\n            interval(0, animationFrameScheduler)\n                .pipe(\n                    filter(_ => this.updatePositionOnAnimationFrame && this._overlayRef?.hasAttached()),\n                    takeUntil(this._destroyed$)\n                )\n                .subscribe(() => {\n                    this._overlayRef?.updatePosition();\n                });\n        }\n    }\n\n    ngOnChanges(c: SimpleChanges): void {\n        const shouldUpdatePositionStrategy = ['placement', 'withArrow', 'autoFlip'].some(\n            inputProp => c[inputProp]?.previousValue !== c[inputProp]?.currentValue && !c[inputProp]?.firstChange\n        );\n        const isOpenChange: boolean = c.isOpen?.previousValue !== c.isOpen?.currentValue && !c.isOpen.firstChange;\n        const shouldUpdateScrollStrategy: boolean =\n            c.closeOnScroll?.previousValue !== c.closeOnScroll?.currentValue && !c.closeOnScroll.firstChange;\n\n        if (shouldUpdatePositionStrategy && this._overlayRef) {\n            this._updatePositionStrategy(this.placement);\n        }\n\n        if (shouldUpdateScrollStrategy && this._overlayRef) {\n            this._updateScrollStrategy(this.closeOnScroll);\n        }\n\n        if (isOpenChange) {\n            this._manualToggleEvent$.next(this.isOpen);\n        }\n    }\n\n    /**\n     * Can be called manually from the exported directive to open the tooltip\n     */\n    show(): void {\n        this._manualToggleEvent$.next(true);\n    }\n\n    /**\n     * Can be called manually from the exported directive to close the tooltip\n     */\n    hide(): void {\n        this._manualToggleEvent$.next(false);\n    }\n\n    /**\n     * Can be called manually from the exported directive to toggle the tooltip\n     */\n    toggle(): void {\n        const isOpen = this._overlayRef?.hasAttached();\n        this._manualToggleEvent$.next(!isOpen);\n    }\n\n    /**\n     * Based on the selector used, choose different default if inputs are not defined\n     */\n    private _setInputDefaults(): void {\n        const getDefaultValue = <T>(currVal: T, defaultVal: T): T => {\n            return currVal ?? defaultVal;\n        };\n        const isMobileScreenSize = window.innerWidth < this.breakpoint;\n\n        /**\n         * Check for undefined and null, not empty strings. This prevents errors when an empty\n         * string is passed in the popover or tooltip input\n         */\n        if ((this.popover !== undefined && this.popover !== null) || isMobileScreenSize) {\n            this.delay = getDefaultValue(this.delay, 0);\n            this.openEvents = getDefaultValue(this.openEvents, ['click']);\n            this.closeEvents = getDefaultValue(this.closeEvents, ['click']);\n            this.closeOnScroll = getDefaultValue(this.closeOnScroll, false);\n            this.pointerEvents = getDefaultValue(this.pointerEvents, 'auto');\n            if (isMobileScreenSize) {\n                this.closeOnOutsideClick = true;\n            }\n        } else {\n            this.delay = getDefaultValue(this.delay, 500);\n            this.openEvents = getDefaultValue(this.openEvents, ['mouseenter']);\n            this.closeEvents = getDefaultValue(this.closeEvents, ['click', 'mouseleave']);\n            this.closeOnScroll = getDefaultValue(this.closeOnScroll, true);\n            this.pointerEvents = getDefaultValue(this.pointerEvents, 'none');\n        }\n    }\n\n    private _getTooltipContent(): string | TemplateRef<any> {\n        return this.tooltip || this.popover;\n    }\n\n    private _open(): ComponentRef<TooltipContainerComponent> {\n        if (!this._overlayRef) {\n            /**\n             * Create the overlay the first time the tooltip is opened\n             */\n            this._createOverlay();\n\n            if (this.closeOnOutsideClick) {\n                this._overlayRef\n                    .outsidePointerEvents()\n                    .pipe(\n                        filter(_ => this._overlayRef?.hasAttached()),\n                        filter(event => event.target !== this._elRef.nativeElement),\n                        map(_ => false),\n                        takeUntil(this._destroyed$)\n                    )\n                    .subscribe(v => this._outsideClick$.next(v));\n            }\n        }\n\n        if (!this._overlayRef.hasAttached()) {\n            const portal = new ComponentPortal(TooltipContainerComponent, this._vcRef, this._createInjector());\n            const ref = this._overlayRef.attach(portal);\n            this.nwShown.emit();\n            return ref;\n        }\n    }\n\n    private _close(): void {\n        if (this._overlayRef?.hasAttached()) {\n            this._overlayRef.detach();\n            this.nwHidden.emit();\n        }\n    }\n\n    private _createOverlay() {\n        const positionStrategy = this._getPositionStrategy(this.placement);\n        const scrollStrategy = this._getScrollStrategy(this.closeOnScroll);\n        const disposeOnNavigation = true;\n        const panelClasses: string[] = ['tooltip-overlay', `pointer-events-${this.pointerEvents}`];\n        this._overlayRef = this._overlay.create({\n            positionStrategy,\n            scrollStrategy,\n            disposeOnNavigation,\n            panelClass: panelClasses\n        });\n\n        if (this.hostElementZIndex) {\n            this._overlayRef.hostElement.style.zIndex = this.hostElementZIndex.toString();\n        }\n    }\n\n    /**\n     * Create and return a custom injector that provides the tooltip text as an injectable dependency\n     */\n    private _createInjector(): Injector {\n        const tooltipData: ITooltipData = {\n            tooltip: this._getTooltipContent(),\n            containerClass: this.containerClass,\n            withArrow: this.withArrow,\n            withClose: this.withClose,\n            templateRefContext: this.context\n        };\n\n        return Injector.create({\n            parent: this._injector,\n            providers: [{ provide: TOOLTIP_CONTEXT_TOKEN, useValue: tooltipData }]\n        });\n    }\n\n    private _subscribeToEvents() {\n        const openEvents$: Observable<boolean>[] = this.openEvents.map(eventName => {\n            return fromEvent(this._elRef.nativeElement, eventName).pipe(\n                filter(_ => !this._overlayRef?.hasAttached()),\n                map(_ => true)\n            );\n        });\n\n        const closeEvents$: Observable<boolean>[] = this.closeEvents.map(eventName => {\n            return fromEvent(this._elRef.nativeElement, eventName).pipe(\n                tap(_ => this._cancelDelayedOpen$.next()),\n                filter(_ => this._overlayRef?.hasAttached()),\n                map(_ => false)\n            );\n        });\n\n        const outsideClick$: Observable<boolean> = this.closeOnOutsideClick\n            ? this._outsideClick$.asObservable()\n            : EMPTY;\n\n        /**\n         * Merge all open and close events into a single stream that emits a boolean that indicates whether\n         * the tooltip should be opened or closed\n         */\n        const toggleEvents$ = merge(...openEvents$.concat(this._manualToggleEvent$, closeEvents$, outsideClick$));\n\n        toggleEvents$\n            .pipe(\n                /**\n                 * This debounce prevents instantaneous opening and closing (or vice-versa) in the scenario where `openEvents` contains the\n                 * same event as `closeEvents`. For example, if both contain the \"click\" event, this will be fired twice in the space of a few ms\n                 */\n                debounce(() => {\n                    if (this.openEvents.some(e => this.closeEvents.includes(e))) {\n                        return timer(5);\n                    }\n                    return of(0);\n                }),\n                filter(_ => !this.isDisabled),\n                /**\n                 * If this is an open event, use the input delay. Don't apply the delay to the close event\n                 */\n                switchMap(isOpenEvent => {\n                    if (isOpenEvent && this.delay) {\n                        return of(isOpenEvent).pipe(delay(this.delay), takeUntil(this._cancelDelayedOpen$));\n                    }\n                    return of(isOpenEvent);\n                }),\n                takeUntil(this._destroyed$)\n            )\n            .subscribe(isOpenEvent => {\n                if (isOpenEvent) {\n                    const ref = this._open();\n\n                    /**\n                     * No ref will be returned if the overlay is already attached\n                     */\n                    if (ref) {\n                        ref.changeDetectorRef.detectChanges();\n                        ref.instance.close.pipe(takeUntil(this._tooltipContainerDestroyed$)).subscribe(_ => {\n                            this.nwClose.emit();\n                            this._close();\n                        });\n\n                        /**\n                         * When the TooltipContainerComponent is destroyed we fire the _tooltipContainerDestroyed$\n                         * so that our subscription to TooltipContainerComponent.close is unsubscribed from\n                         */\n                        ref.onDestroy(() => {\n                            this._tooltipContainerDestroyed$.next();\n                            this._tooltipContainerDestroyed$.complete();\n                        });\n                    }\n                } else {\n                    this._close();\n                }\n            });\n    }\n\n    private _getPositionPair(placement: Placement): ConnectionPositionPair {\n        // Include a 3px offset so that the tooltip is not flush with the element\n        const offset = this._tooltipArrowSize + 3;\n        const getXOffset = (placement: Placement) => {\n            if (!this.withArrow) {\n                return 0;\n            }\n            if (placement.startsWith('right')) {\n                return offset;\n            }\n            if (placement.startsWith('left')) {\n                return -offset;\n            }\n        };\n        const getYOffset = (placement: Placement) => {\n            if (!this.withArrow) {\n                return 0;\n            }\n            if (placement.startsWith('top')) {\n                return -offset;\n            }\n            if (placement.startsWith('bottom')) {\n                return offset;\n            }\n        };\n        const getPanelClass = (placement: Placement): string => `tooltip-${placement}`;\n        /**\n         * The default position when no placement is specified\n         */\n        const bottom = new ConnectionPositionPair(\n            { originX: 'center', originY: 'bottom' },\n            { overlayX: 'center', overlayY: 'top' },\n            null,\n            getYOffset('bottom'),\n            getPanelClass('bottom')\n        );\n\n        switch (placement) {\n            case 'top':\n                return new ConnectionPositionPair(\n                    { originX: 'center', originY: 'top' },\n                    { overlayX: 'center', overlayY: 'bottom' },\n                    null,\n                    getYOffset(placement),\n                    getPanelClass(placement)\n                );\n\n            case 'top-start':\n                return new ConnectionPositionPair(\n                    { originX: 'start', originY: 'top' },\n                    { overlayX: 'start', overlayY: 'bottom' },\n                    null,\n                    getYOffset(placement),\n                    getPanelClass(placement)\n                );\n\n            case 'top-end':\n                return new ConnectionPositionPair(\n                    { originX: 'end', originY: 'top' },\n                    { overlayX: 'end', overlayY: 'bottom' },\n                    null,\n                    getYOffset(placement),\n                    getPanelClass(placement)\n                );\n\n            case 'bottom':\n                return bottom;\n\n            case 'bottom-start':\n                return new ConnectionPositionPair(\n                    { originX: 'start', originY: 'bottom' },\n                    { overlayX: 'start', overlayY: 'top' },\n                    null,\n                    getYOffset(placement),\n                    getPanelClass(placement)\n                );\n\n            case 'bottom-end':\n                return new ConnectionPositionPair(\n                    { originX: 'end', originY: 'bottom' },\n                    { overlayX: 'end', overlayY: 'top' },\n                    null,\n                    getYOffset(placement),\n                    getPanelClass(placement)\n                );\n\n            case 'right':\n                return new ConnectionPositionPair(\n                    { originX: 'end', originY: 'center' },\n                    { overlayX: 'start', overlayY: 'center' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            case 'right-start':\n                return new ConnectionPositionPair(\n                    { originX: 'end', originY: 'top' },\n                    { overlayX: 'start', overlayY: 'top' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            case 'right-end':\n                return new ConnectionPositionPair(\n                    { originX: 'end', originY: 'bottom' },\n                    { overlayX: 'start', overlayY: 'bottom' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            case 'left':\n                return new ConnectionPositionPair(\n                    { originX: 'start', originY: 'center' },\n                    { overlayX: 'end', overlayY: 'center' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            case 'left-start':\n                return new ConnectionPositionPair(\n                    { originX: 'start', originY: 'top' },\n                    { overlayX: 'end', overlayY: 'top' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            case 'left-end':\n                return new ConnectionPositionPair(\n                    { originX: 'start', originY: 'bottom' },\n                    { overlayX: 'end', overlayY: 'bottom' },\n                    getXOffset(placement),\n                    null,\n                    getPanelClass(placement)\n                );\n\n            default:\n                return bottom;\n        }\n    }\n\n    private _getPositionStrategy(placement: Placement | Placement[]): FlexibleConnectedPositionStrategy {\n        /**\n         * Format `placement` into a consistent data type of `Placement[]`\n         */\n        const placementsList: Placement[] = [placement].flat();\n        /**\n         * Get positions from preferred placements\n         */\n        const primaryPositions = placementsList.map(p => this._getPositionPair(p));\n        /**\n         * If `autoFlip` is enabled, include the inverse position of each `placement` input. Each of this inverse positions\n         * will have a lower priority than each of the preferred positions generated from the `placement` input\n         */\n        const positions = this.autoFlip\n            ? [...primaryPositions, ...placementsList.map(p => this._getPositionPair(placementFlipMap[p]))]\n            : [...primaryPositions];\n\n        return this._overlay\n            .position()\n            .flexibleConnectedTo(this.connectedTo || this._elRef)\n            .withFlexibleDimensions(false)\n            .withPositions(positions)\n            .withPush(false);\n    }\n\n    private _updatePositionStrategy(placement: Placement | Placement[]): void {\n        const positionStrategy = this._getPositionStrategy(placement);\n        this._overlayRef.updatePositionStrategy(positionStrategy);\n    }\n\n    private _getScrollStrategy(closeOnScroll: boolean): RepositionScrollStrategy | CloseScrollStrategy {\n        if (closeOnScroll) {\n            return this._overlay.scrollStrategies.close();\n        }\n        return this._overlay.scrollStrategies.reposition();\n    }\n\n    private _updateScrollStrategy(closeOnScroll: boolean): void {\n        const scrollStrategy = this._getScrollStrategy(closeOnScroll);\n        this._overlayRef.updateScrollStrategy(scrollStrategy);\n    }\n\n    ngOnDestroy() {\n        this.hide();\n        this._destroyed$.next();\n        this._destroyed$.complete();\n        this._overlayRef?.dispose();\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}