{"version":3,"file":"seniorsistemas-angular-components-help-popover.mjs","sources":["../../projects/angular-components/help-popover/src/lib/help-popover/help-popover/help-popover.component.ts","../../projects/angular-components/help-popover/src/lib/help-popover/help-popover/help-popover.component.html","../../projects/angular-components/help-popover/src/lib/help-popover/help-popover.directive.ts","../../projects/angular-components/help-popover/src/lib/help-popover/help-popover.module.ts","../../projects/angular-components/help-popover/src/seniorsistemas-angular-components-help-popover.ts"],"sourcesContent":["import { Component, ElementRef, EventEmitter, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { HelpPopoverArrowPosition, HelpPopoverPosition } from '../models/help-popover.models';\n\n@Component({\n  selector: 's-help-popover',\n  templateUrl: './help-popover.component.html',\n  styleUrls: ['./help-popover.component.scss']\n})\nexport class HelpPopoverComponent implements OnDestroy {\n  private readonly VALID_POSITIONS: HelpPopoverPosition[] = ['top', 'bottom', 'left', 'right'];\n  private readonly VALID_ARROW_POSITIONS: HelpPopoverArrowPosition[] = ['beginning', 'end', 'middle'];\n  private _position: HelpPopoverPosition = 'bottom';\n  popoverContent: string | TemplateRef<any> | null = null;\n  closeButton = true;\n  icon = '';\n  header = '';\n  footer = '';\n  button = '';\n  visible = false;\n  @ViewChild('arrowElement', { read: ElementRef, static: true }) arrowElement: ElementRef<HTMLElement> | null = null;\n  public get position(): HelpPopoverPosition {\n    return this._position;\n  }\n  public set position(value: HelpPopoverPosition) {\n    if (!this.VALID_POSITIONS.includes(value)) {\n      throw new Error(`Invalid position: ${value}. Valid positions: ${this.VALID_POSITIONS}`);\n    }\n    this._position = value;\n  }\n\n  private _arrowPosition: HelpPopoverArrowPosition = 'beginning';\n  public get arrowPosition(): HelpPopoverArrowPosition {\n    return this._arrowPosition;\n  }\n  public set arrowPosition(value: HelpPopoverArrowPosition) {\n    if (!this.VALID_ARROW_POSITIONS.includes(value)) {\n      throw new Error(`Invalid arrow position: ${value}. Valid arrow positions: ${this.VALID_ARROW_POSITIONS}`);\n    }\n    this._arrowPosition = value;\n  }\n\n  buttonClicked!: EventEmitter<void>;\n\n  closed = new Subject<void>();\n  get contentIsString() {\n    return typeof this.popoverContent === 'string';\n  }\n\n  get popoverContentTemplateRef() {\n    return this.popoverContent as TemplateRef<any>;\n  }\n\n  get hasHeaderContainer() {\n    const _hasHeader = this.hasHeaderText;\n    const hasIcon = this.hasIcon;\n    const hasCloseButton = this.closeButton;\n    return _hasHeader || hasIcon || hasCloseButton;\n  }\n\n  get hasFooter() {\n    const _hasFooterText = this.hasFooterText;\n    const hasButtonText = this.button && this.button.length > 0;\n    return _hasFooterText || hasButtonText;\n  }\n\n  get hasHeaderText() {\n    return this.header && this.header.length > 0;\n  }\n\n  get hasFooterText() {\n    return this.footer && this.footer.length > 0;\n  }\n\n  get hasIcon() {\n    return this.icon && this.icon.length > 0;\n  }\n\n  close() {\n    this.closed.next();\n  }\n\n  clickButton() {\n    this.buttonClicked!.emit();\n  }\n\n\n  ngOnDestroy(): void {\n    this.closed.complete();\n  }\n}\n","<div\n    class=\"popover-container\"\n    [style.visibility]=\"visible ? 'visible' : 'hidden'\"\n    [class.popover-container-top]=\"position === 'top'\"\n    [class.popover-container-right]=\"position === 'right'\"\n    [class.popover-container-bottom]=\"position === 'bottom'\"\n    [class.popover-container-left]=\"position === 'left'\"\n>\n    <div\n        class=\"arrow-container\"\n        [class.arrow-container-beginning]=\"arrowPosition === 'beginning'\"\n        [class.arrow-container-middle]=\"arrowPosition === 'middle'\"\n        [class.arrow-container-end]=\"arrowPosition === 'end'\"\n    >\n        <div\n            class=\"arrow\"\n            #arrowElement\n        ></div>\n    </div>\n    <div class=\"popover\">\n        @if (hasHeaderContainer) {\n            <div\n                class=\"popover-header-container\"\n                [class.space-between]=\"hasIcon || hasHeaderText\"\n                [class.flex-end]=\"!(hasIcon || hasHeaderText) && closeButton\"\n            >\n                @if (hasIcon || hasHeaderText) {\n                    <div class=\"popover-header-container-text\">\n                        @if (hasIcon) {\n                            <div class=\"popover-icon\">\n                                <i [class]=\"icon\"></i>\n                            </div>\n                        }\n                        @if (hasHeaderText) {\n                            <div class=\"popover-header-text\">\n                                {{ header }}\n                            </div>\n                        }\n                    </div>\n                }\n                @if (closeButton) {\n                    <div class=\"popover-close-button\">\n                        <i\n                            class=\"fas fa-times\"\n                            (click)=\"close()\"\n                        ></i>\n                    </div>\n                }\n            </div>\n        }\n\n        <div class=\"popover-content\">\n            @if (contentIsString) {\n                {{ popoverContent }}\n            } @else {\n                <ng-container *ngTemplateOutlet=\"popoverContentTemplateRef\"></ng-container>\n            }\n        </div>\n\n        @if (hasFooter) {\n            <div class=\"separator\"></div>\n            <div\n                class=\"popover-footer-container\"\n                [class.space-between]=\"hasFooterText\"\n                [class.flex-end]=\"!hasFooterText\"\n            >\n                @if (hasFooterText) {\n                    <p class=\"popover-footer-text\">\n                        {{ footer }}\n                    </p>\n                }\n                @if (button && button.length > 0) {\n                    <div class=\"popover-footer-button\">\n                        <s-button\n                            [label]=\"button\"\n                            priority=\"primary\"\n                            size=\"small\"\n                            (clicked)=\"clickButton()\"\n                            [disabled]=\"false\"\n                            [auxiliary]=\"false\"\n                        >\n                        </s-button>\n                    </div>\n                }\n            </div>\n        }\n    </div>\n</div>\n\n","import {\n    ComponentRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    TemplateRef,\n    ViewContainerRef,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { HelpPopoverComponent } from './help-popover/help-popover.component';\nimport { HelpPopoverArrowPosition, HelpPopoverPosition } from './models/help-popover.models';\nimport {\n    ElementLeftoverPosition,\n    ElementPosition,\n    getElementLeftoverContentAvailable,\n    getElementPositionInfo,\n    isMousePositionOutsideOfElement,\n} from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Diretiva que exibe um popover de ajuda ao clicar no elemento hospedeiro.\n * O popover suporta conteúdo como texto simples ou `TemplateRef`, além de botão de fechar,\n * ícone, cabeçalho, rodapé e posição configurável. Pode ser acionado programaticamente.\n *\n * @example\n * ```html\n * <button [sHelpPopover]=\"'Informe aqui o seu CPF'\" popoverPosition=\"right\">?</button>\n * ```\n *\n * @category Overlay\n */\n@Directive({\n    selector: '[sHelpPopover]',\n    exportAs: 'sHelpPopover',\n})\nexport class HelpPopoverDirective implements OnDestroy, OnInit {\n    private readonly MUTATION_OBSERVER_CONFIG: MutationObserverInit = {\n        attributes: true,\n        childList: true,\n        subtree: true,\n    };\n    private readonly OBSERVER_CALLBACK = () => {\n        if (!this.componentRef) {\n            return;\n        }\n        this.applyPositionIntoElement();\n    };\n    private readonly RESIZE_OBSERVER = () => {\n        this.onResize$.next();\n    };\n\n    /**\n     * @description Conteúdo do popover. Aceita uma `string` com texto simples ou um `TemplateRef`\n     * para renderizar conteúdo Angular customizado dentro do popover.\n     */\n    @Input() sHelpPopover: string | TemplateRef<any> | null = null;\n\n    /**\n     * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do popover.\n     *\n     * @default true\n     */\n    @Input() closeButton = true;\n\n    /**\n     * @description Classe de ícone exibida no cabeçalho do popover (ex: classe de Font Awesome).\n     */\n    @Input() popoverIcon = '';\n\n    /**\n     * @description Texto exibido no cabeçalho do popover.\n     */\n    @Input() popoverHeader = '';\n\n    /**\n     * @description Texto exibido no rodapé do popover.\n     */\n    @Input() popoverFooter = '';\n\n    /**\n     * @description Texto do botão de ação exibido no rodapé do popover.\n     * Ao clicar, emite o evento `buttonClicked`.\n     */\n    @Input() popoverButtonText = '';\n\n    /**\n     * @description Alinhamento da seta indicadora em relação ao lado do popover.\n     * Valores aceitos: `'beginning'` (padrão), `'middle'`, `'end'`.\n     *\n     * @default 'beginning'\n     */\n    @Input() popoverArrowPosition: HelpPopoverArrowPosition = 'beginning';\n\n    /**\n     * @description Posição do popover em relação ao elemento hospedeiro.\n     * Valores aceitos: `'top'`, `'bottom'` (padrão), `'left'`, `'right'`.\n     * O componente tenta reposicionar automaticamente caso não haja espaço.\n     *\n     * @default 'bottom'\n     */\n    @Input()\n    public set popoverPosition(value: HelpPopoverPosition) {\n        this._popoverPosition = value;\n        this.internalPosition = value;\n    }\n\n    public get popoverPosition(): HelpPopoverPosition {\n        return this._popoverPosition;\n    }\n\n    /**\n     * @description Emitido quando o usuário clica no botão de ação do rodapé do popover.\n     */\n    @Output() buttonClicked = new EventEmitter<void>();\n\n    private _popoverPosition: HelpPopoverPosition = 'bottom';\n\n    private onDestroy$ = new Subject<void>();\n    private componentRef: ComponentRef<HelpPopoverComponent> | null = null;\n    private mutationObserverPopoverElement: MutationObserver | null = null;\n    private mutationObserverPopoverContent: MutationObserver | null = null;\n    private internalPosition: HelpPopoverPosition = 'bottom';\n    private onResize$ = new Subject<void>();\n    private manualTrigger = false;\n    private listener = (event: PointerEvent | MouseEvent) => {\n        if (!this.componentRef) {\n            return;\n        }\n        const totalElementArea = this.getPopoverElement.getBoundingClientRect();\n        if (isMousePositionOutsideOfElement(event, totalElementArea)) {\n            this.destroy();\n        }\n    };\n    private readonly viewContainerRef = inject(ViewContainerRef);\n    private readonly element: ElementRef<HTMLElement> = inject(ElementRef);\n\n    ngOnInit(): void {\n        const popoverElementObserver = new MutationObserver(this.OBSERVER_CALLBACK);\n        this.mutationObserverPopoverElement = popoverElementObserver;\n        popoverElementObserver.observe(this.element.nativeElement, this.MUTATION_OBSERVER_CONFIG);\n        window.addEventListener('resize', this.RESIZE_OBSERVER);\n        window.addEventListener('scrollend', this.OBSERVER_CALLBACK);\n        this.onResize$.pipe(takeUntil(this.onDestroy$), debounceTime(100)).subscribe(this.OBSERVER_CALLBACK);\n    }\n\n    show() {\n        this.manualTrigger = true;\n        this._createComponent();\n    }\n\n    @HostListener('click')\n    doClick() {\n        if (this.manualTrigger) {\n            return;\n        }\n        this._createComponent();\n    }\n\n    ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n        this.destroy();\n        if (this.mutationObserverPopoverElement) {\n            this.mutationObserverPopoverElement.disconnect();\n        }\n        window.removeEventListener('resize', this.RESIZE_OBSERVER);\n        window.removeEventListener('scrollend', this.OBSERVER_CALLBACK);\n    }\n\n    private _createComponent() {\n        if (!this.sHelpPopover) {\n            return;\n        }\n        if (this.componentRef) {\n            this.destroy();\n        }\n        const componentRef = this.viewContainerRef.createComponent(HelpPopoverComponent);\n        this.componentRef = componentRef;\n        if (this.mutationObserverPopoverContent) {\n            this.mutationObserverPopoverContent.disconnect();\n        }\n        this.mutationObserverPopoverContent = new MutationObserver(this.OBSERVER_CALLBACK);\n        const element = this.getPopoverElement as HTMLElement;\n        this.mutationObserverPopoverContent.observe(\n            element.querySelector('.popover-content') as HTMLElement,\n            this.MUTATION_OBSERVER_CONFIG,\n        );\n        document.body.appendChild(componentRef.location.nativeElement);\n        setTimeout(() => {\n            document.addEventListener('click', this.listener);\n        });\n        const component = componentRef.instance;\n        component.popoverContent = this.sHelpPopover;\n        component.closeButton = this.closeButton;\n        component.icon = this.popoverIcon;\n        component.header = this.popoverHeader;\n        component.footer = this.popoverFooter;\n        component.button = this.popoverButtonText;\n        component.position = this.internalPosition;\n        component.arrowPosition = this.popoverArrowPosition;\n        component.buttonClicked = this.buttonClicked;\n        component.closed.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n            this.destroy();\n        });\n        this.applyPositionIntoElement();\n    }\n\n    private destroy() {\n        document.removeEventListener('click', this.listener);\n        if (this.componentRef) {\n            this.componentRef.destroy();\n            this.componentRef = null;\n        }\n\n        this.internalPosition = this.popoverPosition;\n\n        if (this.mutationObserverPopoverContent) {\n            this.mutationObserverPopoverContent.disconnect();\n        }\n    }\n\n    private applyPositionIntoElement() {\n        const popoverElementPosition = getElementPositionInfo(this.element.nativeElement);\n        const position = this.validPosition;\n        this.internalPosition = position;\n        this.popoverComponentInstance.position = this.internalPosition;\n        setTimeout(() => {\n            switch (this.internalPosition) {\n                case 'bottom': {\n                    this.applyPopoverPositionBottom(popoverElementPosition);\n                    break;\n                }\n                case 'top': {\n                    this.applyPopoverPositionTop(popoverElementPosition);\n                    break;\n                }\n                case 'left': {\n                    this.applyPopoverPositionLeft(popoverElementPosition);\n                    break;\n                }\n                case 'right': {\n                    this.applyPopoverPositionRight(popoverElementPosition);\n                    break;\n                }\n            }\n            this.popoverComponentInstance.visible = true;\n        });\n    }\n\n    private applyPopoverPositionBottom(popoverElementPosition: ElementPosition) {\n        const popoverElement = this.getPopoverElement;\n        const leftPopover = this.getHorizontalLeft(popoverElementPosition);\n        popoverElement.style.position = 'absolute';\n        popoverElement.style.left = `${leftPopover}px`;\n        popoverElement.style.top = `calc(${popoverElementPosition.top}px + ${popoverElementPosition.elementHeight}px)`;\n    }\n\n    private applyPopoverPositionTop(popoverElementPosition: ElementPosition) {\n        const popoverElement = this.getPopoverElement;\n        const leftPopover = this.getHorizontalLeft(popoverElementPosition);\n        const popoverHeight = popoverElement.getBoundingClientRect().height;\n        popoverElement.style.position = 'absolute';\n        popoverElement.style.left = `${leftPopover}px`;\n        popoverElement.style.top = `calc(${popoverElementPosition.top}px - ${popoverHeight}px)`;\n    }\n\n    private applyPopoverPositionLeft(popoverElementPosition: ElementPosition) {\n        const popoverElement = this.getPopoverElement;\n        const popoverWidth = popoverElement.getBoundingClientRect().width;\n        popoverElement.style.position = 'absolute';\n        popoverElement.style.left = `calc(${popoverElementPosition.right}px - ${popoverWidth + popoverElementPosition.elementWidth}px)`;\n        popoverElement.style.top = this.getVerticalTop(popoverElementPosition);\n    }\n\n    private applyPopoverPositionRight(popoverElementPosition: ElementPosition) {\n        const popoverElement = this.getPopoverElement;\n        popoverElement.style.position = 'absolute';\n        popoverElement.style.left = `calc(${popoverElementPosition.right}px)`;\n        popoverElement.style.top = this.getVerticalTop(popoverElementPosition);\n    }\n\n    private getHorizontalLeft(popoverElementPosition: ElementPosition) {\n        const popoverElement = this.getPopoverElement;\n        const popoverWidth = popoverElement.getBoundingClientRect().width;\n        let _horizontalLeft = popoverElementPosition.left;\n        if (this.popoverArrowPosition === 'end') {\n            _horizontalLeft = popoverElementPosition.right - popoverWidth;\n        } else if (this.popoverArrowPosition === 'middle') {\n            _horizontalLeft = popoverElementPosition.left + popoverElementPosition.elementWidth / 2 - popoverWidth / 2;\n        }\n        return _horizontalLeft;\n    }\n\n    private getVerticalTop(popoverElementPosition: ElementPosition) {\n        const arrowElement = this.popoverComponentInstance.arrowElement?.nativeElement as HTMLElement;\n        const arrowElementPosition = getElementPositionInfo(arrowElement);\n        const popoverContentPosition = getElementPositionInfo(this.getPopoverElement);\n        const popoverElement = this.getPopoverElement;\n        const popoverHeight = popoverElement.getBoundingClientRect().height;\n        let top = `calc(${popoverElementPosition.top}px - ${popoverHeight / 2}px + ${popoverElementPosition.elementHeight / 2}px)`;\n\n        const arrowMiddle = arrowElementPosition.elementHeight / 2;\n        if (this.popoverArrowPosition === 'beginning') {\n            const distanceArrowFromStart = arrowElementPosition.top - popoverContentPosition.top;\n            top = `calc(${popoverElementPosition.top}px + ${popoverElementPosition.elementHeight / 2}px - ${distanceArrowFromStart + arrowMiddle}px)`;\n        } else if (this.popoverArrowPosition === 'end') {\n            const distanceArrowFromEnd =\n                popoverContentPosition.top +\n                popoverContentPosition.elementHeight -\n                (arrowElementPosition.top + arrowElementPosition.elementHeight);\n            top = `calc(${popoverElementPosition.top}px - ${popoverContentPosition.elementHeight}px + ${popoverElementPosition.elementHeight / 2}px + ${distanceArrowFromEnd + arrowMiddle}px)`;\n        }\n        return top;\n    }\n\n    private getLeftoverContentAvailableForPopover(): ElementLeftoverPosition {\n        return getElementLeftoverContentAvailable(this.element.nativeElement);\n    }\n\n    private get getPopoverElement(): HTMLElement {\n        return this.componentRef?.location.nativeElement as HTMLElement;\n    }\n\n    private get popoverComponentInstance() {\n        return this.componentRef?.instance as HelpPopoverComponent;\n    }\n\n    /**\n     * Given the current position of the popover and the available space around\n     * the trigger element, this function will return the position that the popover\n     * will be set at.\n     *\n     * If the popover will fit at the given position, it will return the same\n     * position.\n     *\n     * If the popover will not fit at the given position, it will return the position\n     * that has the most available space (top or bottom).\n     *\n     * If there is no position with available space, it will return the given\n     * position.\n     *\n     * @returns The position that the popover will be set at.\n     */\n    private get validPosition(): HelpPopoverPosition {\n        const { freeDistanceToBottom, freeDistanceToTop, freeDistanceToLeft, freeDistanceToRight } =\n            this.getLeftoverContentAvailableForPopover();\n\n        const popoverElementPosition = getElementPositionInfo(this.getPopoverElement);\n        const popoverElementWidth = popoverElementPosition.elementWidth;\n        const popoverElementHeight = popoverElementPosition.elementHeight;\n\n        const remainingSpaceBottom = freeDistanceToBottom - popoverElementHeight;\n        const remainingSpaceTop = freeDistanceToTop - popoverElementHeight;\n        const remainingSpaceLeft = freeDistanceToLeft - popoverElementWidth;\n        const remainingSpaceRight = freeDistanceToRight - popoverElementWidth;\n\n        const canSetAtBottom = remainingSpaceBottom > 0;\n        const canSetAtTop = remainingSpaceTop > 0;\n        const canSetAtLeft = remainingSpaceLeft > 0;\n        const canSetAtRight = remainingSpaceRight > 0;\n\n        let validPosition: HelpPopoverPosition | undefined = undefined;\n        if (canSetAtBottom && this.popoverPosition === 'bottom') {\n            validPosition = 'bottom';\n        } else if (canSetAtTop && this.popoverPosition === 'top') {\n            validPosition = 'top';\n        } else if (canSetAtLeft && this.popoverPosition === 'left') {\n            validPosition = 'left';\n        } else if (canSetAtRight && this.popoverPosition === 'right') {\n            validPosition = 'right';\n        }\n\n        const needUseOtherPosition = !validPosition;\n        if (needUseOtherPosition) {\n            const freePositions: { position: HelpPopoverPosition; freeDistance: number }[] = [\n                {\n                    position: 'bottom' as HelpPopoverPosition,\n                    freeDistance: remainingSpaceBottom,\n                },\n                {\n                    position: 'top' as HelpPopoverPosition,\n                    freeDistance: remainingSpaceTop,\n                },\n            ].filter((x) => x.freeDistance > 0);\n\n            if (freePositions.length === 0) {\n                return this.popoverPosition;\n            }\n            const itemWithMaxFreeDistance = freePositions.sort((a, b) => b.freeDistance - a.freeDistance)[0];\n            return itemWithMaxFreeDistance.position;\n        } else {\n            return this.popoverPosition;\n        }\n    }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HelpPopoverDirective } from './help-popover.directive';\nimport { HelpPopoverComponent } from './help-popover/help-popover.component';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\n@NgModule({\n  declarations: [HelpPopoverComponent, HelpPopoverDirective],\n  imports: [\n    CommonModule,\n    ButtonModule,\n  ],\n  exports: [HelpPopoverDirective]\n})\nexport class HelpPopoverModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}