{"version":3,"file":"bravobit-bb-foundation-tooltip.mjs","sources":["../../../projects/bb-foundation/tooltip/src/lib/tooltip.interfaces.ts","../../../projects/bb-foundation/tooltip/src/lib/tooltip-container/tooltip-container.component.ts","../../../projects/bb-foundation/tooltip/src/lib/tooltip-container/tooltip-container.component.html","../../../projects/bb-foundation/tooltip/src/lib/tooltip.directive.ts","../../../projects/bb-foundation/tooltip/src/lib/tooltip.module.ts","../../../projects/bb-foundation/tooltip/src/bravobit-bb-foundation-tooltip.ts"],"sourcesContent":["import {InjectionToken, TemplateRef} from '@angular/core';\n\nexport type TooltipData = string | TemplateRef<void>;\n\nexport const TOOLTIP_DATA = new InjectionToken<TooltipData>('Data to display in tooltip');\nexport const TOOLTIP_CLASS = new InjectionToken<string>('Class to display in tooltip');\n","import {ChangeDetectionStrategy, Component, HostBinding, inject, ViewEncapsulation} from '@angular/core';\nimport {TOOLTIP_CLASS, TOOLTIP_DATA, TooltipData} from '../tooltip.interfaces';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\n\n@Component({\n    selector: 'bb-tooltip-container',\n    templateUrl: './tooltip-container.component.html',\n    styleUrls: ['./tooltip-container.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {'class': 'bb-tooltip-container'},\n    imports: [BbTemplate]\n})\nexport class TooltipContainerComponent {\n\n    readonly data: TooltipData = inject(TOOLTIP_DATA);\n    readonly classes: string = inject(TOOLTIP_CLASS);\n\n    @HostBinding('class')\n    get classBinding() {\n        return [this.classes]\n            .filter(item => !!item)\n            .join(' ');\n    }\n\n}\n","<ng-template [bbTemplate]=\"data\">{{ data }}</ng-template>\n","import {booleanAttribute, Directive, ElementRef, HostListener, inject, Injector, Input, OnDestroy, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {TooltipContainerComponent} from './tooltip-container/tooltip-container.component';\nimport {ConnectedPosition, Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {TOOLTIP_CLASS, TOOLTIP_DATA} from './tooltip.interfaces';\nimport {ComponentPortal} from '@angular/cdk/portal';\n\n@Directive({\n    selector: '[bbTooltip]'\n})\nexport class TooltipDirective implements OnDestroy {\n\n    // Dependencies.\n    private readonly _overlay = inject(Overlay);\n    private readonly _viewContainer = inject(ViewContainerRef);\n    private readonly _elementRef = inject(ElementRef<HTMLElement>);\n\n    // Inputs.\n    @Input() bbTooltip!: string | TemplateRef<void>;\n    @Input() bbTooltipClass: string | null = null;\n    @Input() bbTooltipOrigin: HTMLElement | null = null;\n    @Input() bbTooltipPositions: ConnectedPosition[] = [];\n    @Input({transform: booleanAttribute}) bbTooltipDisabled: boolean = false;\n\n    // State.\n    private _overlayRef: OverlayRef | null = null;\n\n    @HostListener('mouseenter')\n    @HostListener('focus')\n    showTooltip() {\n        if (this._overlayRef?.hasAttached() || this.bbTooltipDisabled) {\n            return;\n        }\n        this.attachTooltip();\n    }\n\n    @HostListener('mouseleave')\n    @HostListener('blur')\n    hideTooltip() {\n        if (!this._overlayRef?.hasAttached()) {\n            return;\n        }\n        this._overlayRef?.detach();\n    }\n\n    ngOnDestroy() {\n        this._overlayRef?.dispose();\n    }\n\n    private attachTooltip() {\n        if (this._overlayRef === null) {\n            const positionStrategy = this.getPositionStrategy();\n            const scrollStrategy = this._overlay.scrollStrategies.reposition();\n            this._overlayRef = this._overlay.create({positionStrategy, scrollStrategy});\n        }\n\n        const injector = Injector.create({\n            providers: [\n                {provide: TOOLTIP_DATA, useValue: this.bbTooltip},\n                {provide: TOOLTIP_CLASS, useValue: this.bbTooltipClass}\n            ]\n        });\n        const component = new ComponentPortal(TooltipContainerComponent, this._viewContainer, injector);\n        this._overlayRef.attach(component);\n    }\n\n    private getPositionStrategy() {\n        const element = this.bbTooltipOrigin ?? this._elementRef;\n        const positions = this.getPositions();\n\n        return this._overlay\n            .position()\n            .flexibleConnectedTo(element)\n            .withPositions(positions);\n    }\n\n    private getPositions() {\n        if (this.bbTooltipPositions?.length > 0) {\n            return this.bbTooltipPositions;\n        }\n\n        return [\n            {\n                originX: 'center',\n                originY: 'top',\n                overlayX: 'center',\n                overlayY: 'bottom',\n                offsetY: -10,\n                panelClass: 'bb-tooltip-container-top'\n            },\n            {\n                originX: 'center',\n                originY: 'bottom',\n                overlayX: 'center',\n                overlayY: 'top',\n                offsetY: 10,\n                panelClass: 'bb-tooltip-container-bottom'\n            },\n            {\n                originX: 'start',\n                originY: 'center',\n                overlayX: 'end',\n                overlayY: 'center',\n                offsetX: -10,\n                panelClass: 'bb-tooltip-container-left'\n            },\n            {\n                originX: 'end',\n                originY: 'center',\n                overlayX: 'start',\n                overlayY: 'center',\n                offsetX: 10,\n                panelClass: 'bb-tooltip-container-right'\n            }\n        ] satisfies ConnectedPosition[];\n    }\n\n}\n","import {TooltipDirective} from './tooltip.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n    imports: [TooltipDirective],\n    exports: [TooltipDirective]\n})\nexport class TooltipModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}