{"version":3,"file":"dotglitch-ngx-common-tooltip.mjs","sources":["../../packages/common/tooltip/tooltip.component.ts","../../packages/common/tooltip/tooltip.component.html","../../packages/common/tooltip/tooltip.directive.ts","../../packages/common/tooltip/dotglitch-ngx-common-tooltip.ts"],"sourcesContent":["import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { Component, HostListener, Inject, Input, Optional, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { createApplication } from '@angular/platform-browser';\nimport { MenuComponent, MenuItem } from '@dotglitch/ngx-common/core';\nimport { firstValueFrom } from 'rxjs';\nimport { TooltipOptions } from './types';\n\ndeclare const Zone;\nconst zone = new Zone(Zone.current, { name: \"@dotglitch_menu\", properties: {} });\n\nexport const calcTooltipBounds = async (template: TemplateRef<any> | Type<any>, data: any, matDialogConfig: MatDialogConfig) => {\n\n    const args = {\n        data: data || {},\n        template,\n        config: {},\n        selfCords: { left: \"0px\", top: \"0px\" },\n        ownerCords: { x: 0, y: 0, width: 0, height: 0 },\n        id: null\n    };\n\n    // dimensions should be in px... Might need to handle vw/v\n    if (matDialogConfig?.width && matDialogConfig?.height) {\n        return {\n            width: parseInt(matDialogConfig.width),\n            height: parseInt(matDialogConfig.height),\n            top: 0,\n            left: 0,\n            right: 0,\n            bottom: 0\n        } as DOMRect;\n    }\n\n    return new Promise<DOMRect>((res, rej) => {\n        zone.run(async () => {\n            // Forcibly bootstrap the ctx menu outside of the client application's zone.\n            const app = await createApplication({\n                providers: [\n                    { provide: MAT_DIALOG_DATA, useValue: args }\n                ]\n            });\n\n            const del = document.createElement(\"div\");\n            del.style.position = \"absolute\";\n            del.style.left = '-1000vw';\n            document.body.append(del);\n\n            const base = app.bootstrap(TooltipComponent, del);\n            const { instance } = base;\n\n            await firstValueFrom(app.isStable);\n\n            const el: HTMLElement = instance.viewContainer?.element?.nativeElement;\n\n            const rect = el.getBoundingClientRect();\n            app.destroy();\n            del.remove();\n\n            res(rect);\n        });\n    });\n};\n\n@Component({\n    selector: 'ngx-tooltip',\n    templateUrl: './tooltip.component.html',\n    styleUrls: ['./tooltip.component.scss'],\n    imports: [\n        NgTemplateOutlet,\n        NgComponentOutlet,\n        MenuComponent\n    ],\n    standalone: true\n})\nexport class TooltipComponent {\n    @Input() data: any;\n    @Input() config: TooltipOptions;\n    @Input() ownerCords: DOMRect;\n    @Input() selfCords;\n    @Input() template: TemplateRef<any> | Type<any> | MenuItem[];\n\n    public isTemplate = false;\n    public isMenu = false;\n    public hasBootstrapped = false;\n    public pointerIsOnVoid = false;\n    public isLockedOpen = false;\n\n    clientWidth = window.innerWidth;\n    clientHeight = window.innerHeight;\n\n    coverRectCords = {\n        top: 0,\n        left: 0,\n        height: 0,\n        width: 0\n    };\n\n    constructor(\n        public viewContainer: ViewContainerRef,\n        @Optional() @Inject(MAT_DIALOG_DATA) private _data: any,\n        @Optional() public dialog: MatDialog, // optional only for the purpose of estimating dimensions\n        @Optional() public dialogRef: MatDialogRef<any>,\n    ) {\n        // Defaults are set before @Input() hooks evaluate\n        this.data = this.data || this._data?.data || {};\n        this.config = this.config || this._data?.config;\n        this.dialog = this.dialog || this._data?.dialog;\n        this.template = this.template || this._data?.template;\n        this.ownerCords = this.ownerCords || this._data?.ownerCords;\n        this.selfCords = this.selfCords || this._data?.selfCords;\n        this.isLockedOpen = this._data?.isLockedOpen || this.config?.stayOpen;\n    }\n\n    ngOnInit() {\n\n        const selfY = parseInt(this.selfCords.top.replace('px', ''));\n        const selfX = parseInt(this.selfCords.left.replace('px', ''));\n\n        this.coverRectCords = {\n            top: this.ownerCords.y - selfY - 16,\n            left: this.ownerCords.x - selfX - 16,\n            height: this.ownerCords.height + 32,\n            width: this.ownerCords.width + 32\n        };\n\n        if (Array.isArray(this.template))\n            this.isMenu = true;\n        else if (this.template instanceof TemplateRef)\n            this.isTemplate = true;\n        else if (typeof this.template == \"function\")\n            this.isTemplate = false;\n        else\n            throw new Error(\"Unrecognized template object provided.\");\n\n        // TODO: resolve the event hook with the .void element\n        setTimeout(() => {\n            this.hasBootstrapped = true;\n            if (this.pointerIsOnVoid && !this.isLockedOpen)\n                this.dialogRef.close();\n        }, 200);\n    }\n\n    ngAfterViewInit() {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n\n        el.addEventListener(\"keydown\", evt => {\n            this.isLockedOpen = true;\n        });\n\n        el.addEventListener(\"pointerdown\", evt => {\n            this.isLockedOpen = true;\n        });\n\n        el.addEventListener(\"touch\", evt => {\n            this.isLockedOpen = true;\n        });\n    }\n\n    @HostListener(\"window:keydown\", ['$event'])\n    onKeyDown(evt: KeyboardEvent) {\n        if (this.config?.freezeOnKeyCode) {\n            if (evt.code == this.config.freezeOnKeyCode)\n                this.isLockedOpen = true;\n        }\n    }\n\n    onVoidPointerDown(evt: PointerEvent) {\n        if (!this.isLockedOpen) {\n            const el = this.viewContainer.element.nativeElement as HTMLElement;\n            el.querySelector(\".void\").remove();\n\n            setTimeout(() => {\n                const clonedEvt = new PointerEvent(\"pointerdown\", evt);\n                const target = document.elementFromPoint(evt.clientX, evt.clientY) as HTMLElement;\n\n                console.log(\"DEBUG EVENTS\", { evt, clonedEvt });\n                target.dispatchEvent(clonedEvt);\n            }, 15);\n        }\n\n        this.closeOnVoid(true);\n    }\n\n    // If the void element gets stuck open, make wheel events pass through.\n    onWheel(evt: WheelEvent) {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n        el.style.display = \"none\";\n        const target = document.elementFromPoint(evt.clientX, evt.clientY);\n        el.style.display = \"block\";\n\n        target.scroll({\n            top: evt.deltaY + target.scrollTop,\n            left: evt.deltaX + target.scrollLeft,\n            behavior: \"smooth\"\n        });\n    }\n\n    /**\n     * Close the tooltip if these actions occur\n     */\n    @HostListener(\"window:resize\")\n    @HostListener(\"window:blur\")\n    @HostListener(\"pointerleave\")\n    private onClose() {\n        if (!this.isLockedOpen)\n            this.dialogRef?.close();\n\n        this.clientWidth = window.innerWidth;\n        this.clientHeight = window.innerHeight;\n    }\n\n    closeOnVoid(force = false) {\n        if (!this.isLockedOpen || force)\n            this.dialogRef.close();\n    }\n}\n","<!-- Mouse event blocker for pointer leave -->\n@if (coverRectCords) {\n    <!-- <div\n        class=\"owner-mask\"\n        [style.top]=\"coverRectCords.top + 'px'\"\n        [style.left]=\"coverRectCords.left + 'px'\"\n        [style.height]=\"coverRectCords.height + 'px'\"\n        [style.width]=\"coverRectCords.width + 'px'\"\n        style=\"z-index: -1;\"\n        (pointerdown)=\"onVoidPointerDown($event)\"\n    ></div> -->\n\n    <div class=\"void left\"\n        [style.top]=\"'0px'\"\n        [style.left]=\"'0px'\"\n        [style.height]=\"'100%'\"\n        [style.width]=\"(ownerCords.left) + 'px'\"\n        (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && closeOnVoid()\"\n        (pointerleave)=\"pointerIsOnVoid = false\"\n        (pointerdown)=\"onVoidPointerDown($event)\"\n        (wheel)=\"onWheel($event)\"\n    ></div>\n    <div class=\"void top\"\n        [style.top]=\"'0px'\"\n        [style.left]=\"ownerCords.left + 'px'\"\n        [style.height]=\"ownerCords.top + 'px'\"\n        [style.width]=\"ownerCords.width + 'px'\"\n        (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && closeOnVoid()\"\n        (pointerleave)=\"pointerIsOnVoid = false\"\n        (pointerdown)=\"onVoidPointerDown($event)\"\n        (wheel)=\"onWheel($event)\"\n    ></div>\n    <div class=\"void right\"\n        [style.top]=\"'0px'\"\n        [style.left]=\"(ownerCords.left + ownerCords.width) + 'px'\"\n        [style.height]=\"'100%'\"\n        [style.width]=\"(clientWidth - (ownerCords.left + ownerCords.width)) + 'px'\"\n        (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && closeOnVoid()\"\n        (pointerleave)=\"pointerIsOnVoid = false\"\n        (pointerdown)=\"onVoidPointerDown($event)\"\n        (wheel)=\"onWheel($event)\"\n    ></div>\n    <div class=\"void\"\n        [style.top]=\"(ownerCords.top + ownerCords.height) + 'px'\"\n        [style.left]=\"ownerCords.left + 'px'\"\n        [style.height]=\"(clientHeight - (ownerCords.top + ownerCords.height)) + 'px'\"\n        [style.width]=\"ownerCords.width + 'px'\"\n        (pointerenter)=\"pointerIsOnVoid = true; hasBootstrapped && closeOnVoid()\"\n        (pointerleave)=\"pointerIsOnVoid = false\"\n        (pointerdown)=\"onVoidPointerDown($event)\"\n        (wheel)=\"onWheel($event)\"\n    ></div>\n}\n\n\n<div\n    #container\n    class=\"container\"\n>\n    @if (isMenu) {\n        <ngx-menu\n            [config]=\"config\"\n            [data]=\"data\"\n            [ownerCords]=\"ownerCords\"\n            [selfCords]=\"selfCords\"\n            [items]=\"$any(template)\"\n            [isLockedOpen]=\"config.stayOpen\"\n        />\n    }\n    @else if (isTemplate) {\n        <ng-container\n            [ngTemplateOutlet]=\"$any(template)\"\n            [ngTemplateOutletContext]=\"{\n                '$implicit': data,\n                'dialog': dialogRef,\n                'element': container,\n                'tooltip': this\n            }\"\n        ></ng-container>\n    }\n    @else {\n        <ng-container\n            [ngComponentOutlet]=\"$any(template)\"\n        >\n        </ng-container>\n    }\n</div>\n","import { Directive, HostListener, Input, TemplateRef, Type, ViewContainerRef } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { MenuComponent, MenuItem, getPosition } from '@dotglitch/ngx-common/core';\nimport { firstValueFrom } from 'rxjs';\nimport { ulid } from 'ulidx';\nimport { TooltipComponent, calcTooltipBounds } from './tooltip.component';\nimport { TooltipOptions } from './types';\n\n@Directive({\n    selector: '[ngx-tooltip]',\n    providers: [\n        MatDialog\n    ],\n    standalone: true\n})\nexport class TooltipDirective {\n\n    /**\n     */\n    @Input(\"ngx-tooltip\") template: TemplateRef<any> | Type<any> | MenuItem[];\n\n    /**\n     * Configuration for opening the app menu\n     */\n    @Input(\"ngx-tooltip-config\") config: TooltipOptions = {};\n\n    /**\n     * Arbitrary data to pass into the template\n     */\n    @Input(\"ngx-tooltip-context\") data: any = {};\n\n    private isCursorOverTarget = false;\n    private dialogIsOpen = false;\n\n    constructor(\n        private dialog: MatDialog,\n        private viewContainer: ViewContainerRef\n    ) {\n    }\n\n    ngAfterViewInit() {\n        const el = this.viewContainer.element.nativeElement as HTMLElement;\n\n        this.config?.triggers?.forEach(t => {\n            el.addEventListener(t, () => {\n                if (t == \"click\")\n                    this.config.stayOpen = true;\n\n                this.open();\n            });\n        });\n    }\n\n    async open() {\n        if (!this.dialogIsOpen) {\n            const el = this.viewContainer.element.nativeElement;\n            this.dialogIsOpen = true;\n            await openTooltip(this.dialog, this.template, this.data, el, this.config);\n            this.dialogIsOpen = false;\n        }\n    }\n\n    @HostListener('pointerenter', ['$event'])\n    public async onPointerEnter(evt: PointerEvent) {\n        // If the template is not a template ref, do nothing.\n        if (!(this.template instanceof TemplateRef))\n            return;\n\n        if (Array.isArray(this.config?.triggers) && !this.config.triggers.includes(\"hover\")) {\n            return;\n        }\n\n        this.isCursorOverTarget = true;\n\n        setTimeout(async () => {\n            // If the cursor moved away in the time\n            if (!this.isCursorOverTarget)\n                return;\n\n            this.open();\n        }, this.config.delay ?? 250);\n    }\n\n    @HostListener('pointerleave', ['$event'])\n    public async onPointerLeave(evt: PointerEvent) {\n        this.isCursorOverTarget = false;\n    }\n}\n\n// Helper to open the context menu without using the directive.\nexport const openTooltip = async (\n    dialog: MatDialog,\n    template: TemplateRef<any> | Type<any> | MenuItem[],\n    data: any,\n    el: HTMLElement,\n    config?: TooltipOptions,\n    focusTrap = false,\n    matPopupOptions?: MatDialogConfig<any>\n) => {\n\n    const component = Array.isArray(template) ? MenuComponent : template;\n    const rect = await calcTooltipBounds(component, data, matPopupOptions);\n    const ownerCords = el.getBoundingClientRect();\n    const cords = getPosition(el, config, rect);\n    const specificId = ulid();\n\n    return firstValueFrom(\n        dialog.open(TooltipComponent, {\n            autoFocus: focusTrap,\n            restoreFocus: focusTrap,\n            data: {\n                dialog,\n                data: data,\n                template: template,\n                config: config,\n                matPopupOptions,\n                ownerCords: ownerCords,\n                selfCords: cords,\n                id: specificId\n            },\n            panelClass: [\"ngx-tooltip\", 'ngx-' + specificId].concat(config?.customClass || []),\n            position: cords,\n            hasBackdrop: false,\n            ...matPopupOptions\n        })\n            .afterClosed()\n    );\n};\n\n@Directive({\n    selector: '[ngx-dropdown],[ngx-dropdown-config]',\n    providers: [\n        MatDialog\n    ],\n    standalone: true\n})\nexport class DropdownDirective extends TooltipDirective {\n    /**\n     * The items that will be bound to the menu that pops\n     * up when the user clicks the element.\n     */\n    @Input(\"ngx-dropdown\") override template: TemplateRef<any> | Type<any> | MenuItem[];\n\n    /**\n     * Configuration for opening the app menu\n     */\n    @Input(\"ngx-dropdown-config\") _config: TooltipOptions = {};\n\n    ngOnInit() {\n        // Set default values\n        this._config.position = this._config.position ?? \"bottom\";\n        this._config.alignment = this._config.alignment ?? \"start\";\n        this._config.stayOpen = this._config.stayOpen ?? true;\n\n        this.config = this._config;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}