{"version":3,"file":"libs-ui-components-popover.mjs","sources":["../../../../../libs-ui/components/popover/src/defines/constants.define.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.ts","../../../../../libs-ui/components/popover/src/overlay/overlay.component.html","../../../../../libs-ui/components/popover/src/popover.component.ts","../../../../../libs-ui/components/popover/src/popover.component.html","../../../../../libs-ui/components/popover/src/libs-ui-components-popover.ts"],"sourcesContent":["import { get, UtilsUrlSearchParams } from '@libs-ui/utils';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\n\nexport const KEY_QUERY_POPOVER_TIMER_DESTROY = 'popover-timer-destroy';\n\nconst timerDestroy = parseInt(new UtilsUrlSearchParams(location.href).get(KEY_QUERY_POPOVER_TIMER_DESTROY) || '0');\n\nexport const getPopoverTimerDestroyInQueryUrl = (): number => {\n  return timerDestroy;\n};\n\nexport const getListDirections = (direction: TYPE_POPOVER_DIRECTION): Array<TYPE_POPOVER_DIRECTION> => {\n  return get(\n    {\n      bottom: ['bottom', 'top', 'right', 'left'],\n      right: ['right', 'left', 'bottom', 'top'],\n      left: ['left', 'right', 'bottom', 'top'],\n      top: ['top', 'bottom', 'right', 'left'],\n    } as Record<TYPE_POPOVER_DIRECTION, Array<TYPE_POPOVER_DIRECTION>>,\n    direction\n  );\n};\n","import { AsyncPipe, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, OnDestroy, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { UtilsUrlSearchParams, cloneDeep, cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Subject, interval, take } from 'rxjs';\nimport { getListDirections } from '../defines/constants.define';\nimport { IPopoverOverlay } from '../interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION } from '../interfaces/popover.type';\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'libs_ui-components-popover-overlay',\n  templateUrl: './overlay.component.html',\n  styleUrls: ['./overlay.component.scss'],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [TranslateModule, NgStyle, AsyncPipe, LibsUiComponentsScrollOverlayDirective, NgTemplateOutlet],\n})\nexport class LibsUiComponentsPopoverOverlayComponent implements OnDestroy {\n  /* PROPERTIES */\n  protected currentDirection = signal<TYPE_POPOVER_DIRECTION>('bottom');\n  protected arrowClass = signal<string>('');\n  protected top = signal<number>(0);\n  protected left = signal<number>(0);\n  protected arrowLeft = signal<number>(0);\n  protected arrowTop = signal<number>(0);\n  protected config = signal<IPopoverOverlay>({});\n  private readonly timeout = signal<ReturnType<typeof setTimeout> | undefined>(undefined);\n  private readonly destroyRef = inject(DestroyRef);\n\n  // #region OUTPUT\n  readonly outEvent: Subject<TYPE_POPOVER_DIRECTION> = new Subject();\n\n  /* VIEW CHILD */\n  private readonly container = viewChild.required<ElementRef>('container');\n\n  // #region INJECT\n  private readonly elementRef = inject(ElementRef);\n\n  // #region FUNCTIONS\n  public get ElementRef() {\n    return this.elementRef;\n  }\n\n  public get ContainerElement() {\n    return this.container().nativeElement;\n  }\n\n  public setConfig(rectOrigin: IBoundingClientRect, config: IPopoverOverlay, isAddContentToParentDocument?: boolean) {\n    isAddContentToParentDocument = isAddContentToParentDocument || config.isAddContentToParentDocument;\n    rectOrigin = cloneIBoundingClientRect(rectOrigin);\n    this.config.set(cloneDeep(config));\n\n    this.container().nativeElement.style.opacity = 0;\n    if (this.config().widthByParent) {\n      this.config.update((config) => ({ ...config, width: rectOrigin.width - (config?.parentBorderWidth || 0) * 2 }));\n    }\n    let viewPort = getViewport();\n    let rectFrame: IBoundingClientRect | undefined = undefined;\n\n    if (isAddContentToParentDocument) {\n      viewPort = getViewport(window.parent);\n      const url = new UtilsUrlSearchParams(location.href);\n      const iframeId = url.get('iframeId');\n\n      rectFrame = window.parent.document.getElementById(`iframe-${iframeId}`)?.getBoundingClientRect();\n      if (rectFrame) {\n        rectOrigin.top += rectFrame.top;\n        rectOrigin.left += rectFrame.left;\n      }\n    }\n\n    if (this.config().maxHeight === null) {\n      this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - 44 }));\n    }\n\n    clearTimeout(this.timeout());\n    this.setVariableCss();\n    this.setDirections(rectOrigin, viewPort, rectFrame);\n    let rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n    if (rectFrame) {\n      rectContent.top += rectFrame.top;\n      rectContent.left += rectFrame.left;\n    }\n\n    interval(250)\n      .pipe(take(4), takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        const rect = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n        if (rectFrame) {\n          rect.top += rectFrame.top;\n          rect.left += rectFrame.left;\n        }\n        if (rect.width !== rectContent.width || rect.height !== rectContent.height || rect.top !== rectContent.top || rect.left !== rectContent.left) {\n          clearTimeout(this.timeout());\n          this.setDirections(rectOrigin, viewPort, rectFrame);\n          rectContent = rect;\n        }\n      });\n  }\n\n  private setDirections(rectOrigin: IBoundingClientRect, viewPort: { width: number; height: number }, rectFrame?: IBoundingClientRect) {\n    const directions = getListDirections(this.config().direction || 'bottom');\n    const positionLast = directions.length - 1;\n\n    this.timeout.set(\n      setTimeout(async () => {\n        const rectContent = cloneIBoundingClientRect(this.container().nativeElement.getBoundingClientRect());\n\n        if (rectFrame) {\n          rectContent.top += rectFrame.top;\n          rectContent.left += rectFrame.left;\n        }\n        for (const index in directions) {\n          if (await this.loopDirection(rectOrigin, rectContent, directions[index], positionLast === +index, viewPort)) {\n            return;\n          }\n        }\n\n        const directionByHeight = viewPort.height - rectOrigin.top - rectOrigin.height > rectOrigin.top - 4 ? 'bottom' : 'top';\n\n        this.loopDirection(rectOrigin, rectContent, directionByHeight, true, viewPort);\n        this.container().nativeElement.style.opacity = 1;\n      }, 50)\n    );\n  }\n\n  private loopDirection(rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, direction: TYPE_POPOVER_DIRECTION, isLast: boolean, viewPort: { width: number; height: number }): Promise<boolean> {\n    return new Promise((resolve) => {\n      const positionMode = this.config().position?.mode || 'start';\n      const { position } = this.config();\n      let result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);\n\n      if (!result) {\n        if (position) {\n          position.mode = positionMode === 'center' || positionMode === 'start' ? 'end' : 'start';\n          if (!this.config().ignoreArrow && position.autoUpdatePosition) {\n            position.distance = position.mode === 'end' ? position.autoUpdatePosition.endDistance : position.autoUpdatePosition.startDistance;\n          }\n          this.config.update((config) => ({ ...config }));\n        }\n        result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);\n      }\n      if (!result && positionMode === 'center') {\n        if (position) {\n          position.mode = position.mode === 'start' ? 'end' : 'start';\n          this.config.update((config) => ({ ...config }));\n        }\n        result = this.setPosition(direction, rectOrigin, rectContent, viewPort, isLast);\n      }\n      if (!result) {\n        if (position) {\n          position.mode = positionMode;\n          this.config.update((config) => ({ ...config }));\n        }\n\n        return resolve(false);\n      }\n      this.setAndEmitEvent(direction);\n\n      return resolve(true);\n    });\n  }\n\n  private setAndEmitEvent(direction: TYPE_POPOVER_DIRECTION) {\n    this.currentDirection.set(direction);\n    this.setVariableCss();\n    this.setClassArrow(direction);\n    this.container().nativeElement.style.opacity = 1;\n    this.outEvent.next(direction);\n  }\n\n  private setPosition(direction: TYPE_POPOVER_DIRECTION, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, viewPort: { width: number; height: number }, isLast: boolean): boolean {\n    const halfSquare = 6;\n    const distanceArrow = 4;\n    let bottomPositionRectContent = 0;\n    let positionTop = 0;\n    let positionLeft = 0;\n    let top = 0;\n    let left = 0;\n    const configValue = this.config();\n\n    switch (direction) {\n      case 'bottom':\n        positionTop = rectOrigin.top + rectOrigin.height + distanceArrow;\n        positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n        top = positionTop + halfSquare;\n        left = positionLeft - rectContent.width / 2 + halfSquare;\n        if (configValue.ignoreArrow) {\n          top = top - halfSquare - distanceArrow;\n        }\n        top += configValue.directionDistance || 0;\n        if (configValue.position?.mode === 'start') {\n          left = rectOrigin.left + (configValue.position.distance || 0);\n        }\n        if (configValue.position?.mode === 'end') {\n          left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n        }\n        left += configValue.parentBorderWidth || 0;\n\n        this.arrowLeft.set(positionLeft - left);\n        this.arrowTop.set(-6);\n        this.top.set(top);\n        this.left.set(left);\n\n        if (top + rectContent.height < viewPort.height && left >= 0 && left + rectContent.width < viewPort.width) {\n          return true;\n        }\n        if (isLast) {\n          if (this.config) {\n            this.config.update((config) => ({ ...config, maxHeight: viewPort.height - rectOrigin.top - rectOrigin.height }));\n          }\n          this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n          return true;\n        }\n\n        return false;\n\n      case 'right':\n        positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n        positionLeft = rectOrigin.left + rectOrigin.width + distanceArrow;\n        top = positionTop - rectContent.height / 2 + halfSquare;\n        left = positionLeft + halfSquare;\n\n        if (configValue.ignoreArrow) {\n          left = positionLeft - distanceArrow;\n        }\n\n        left += configValue.directionDistance || 0;\n        if (configValue.position?.mode === 'start') {\n          top = rectOrigin.top + (configValue.position?.distance || 0);\n        }\n\n        if (configValue.position?.mode === 'end') {\n          top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n        }\n\n        bottomPositionRectContent = top + rectContent.height;\n\n        if (bottomPositionRectContent > viewPort.height) {\n          top = top - (bottomPositionRectContent - viewPort.height);\n        }\n\n        this.arrowTop.set(positionTop - top + 2);\n        this.arrowLeft.set(-9);\n\n        this.top.set(top);\n        this.left.set(left);\n        if (top > 0 && left + rectContent.width < viewPort.width) {\n          return true;\n        }\n        if (isLast) {\n          if (this.config) {\n            this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n          }\n          this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n          return true;\n        }\n\n        return false;\n\n      case 'left':\n        positionTop = rectOrigin.top + rectOrigin.height / 2 - halfSquare;\n        positionLeft = rectOrigin.left - halfSquare * 2 - distanceArrow;\n        top = positionTop - rectContent.height / 2 + halfSquare;\n        left = positionLeft - rectContent.width + halfSquare;\n        if (configValue.ignoreArrow) {\n          left = left + halfSquare + distanceArrow;\n        }\n\n        left -= configValue?.directionDistance || 0;\n        if (configValue.position?.mode === 'start') {\n          top = rectOrigin.top + (configValue.position.distance || 0);\n        }\n\n        if (configValue.position?.mode === 'end') {\n          top = rectOrigin.top + rectOrigin.height - rectContent.height + (configValue.position.distance || 0);\n        }\n\n        bottomPositionRectContent = top + rectContent.height;\n\n        if (bottomPositionRectContent > viewPort.height) {\n          top = top - (bottomPositionRectContent - viewPort.height);\n        }\n\n        this.arrowTop.set(positionTop - top + 2);\n        this.arrowLeft.set(rectContent.width - 3);\n\n        this.top.set(top);\n        this.left.set(left);\n        if (left > 0 && top > 0) {\n          return true;\n        }\n\n        if (isLast) {\n          if (this.config) {\n            this.config.update((config) => ({ ...config, maxHeight: viewPort.height }));\n          }\n          this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n          return true;\n        }\n\n        return false;\n\n      case 'top':\n        positionTop = rectOrigin.top - halfSquare * 2 - distanceArrow;\n        positionLeft = rectOrigin.left + rectOrigin.width / 2 - halfSquare;\n        top = positionTop - rectContent.height + halfSquare;\n        left = positionLeft - rectContent.width / 2 + halfSquare;\n\n        if (configValue.ignoreArrow) {\n          top = top + halfSquare + distanceArrow;\n        }\n\n        top -= configValue.directionDistance || 0;\n\n        if (configValue.position && configValue.position?.mode === 'start') {\n          left = rectOrigin.left + (configValue.position.distance || 0);\n        }\n\n        if (configValue.position && configValue.position?.mode === 'end') {\n          left = rectOrigin.left + rectOrigin.width - rectContent.width + (configValue.position.distance || 0);\n        }\n\n        left += configValue.parentBorderWidth || 0;\n        this.arrowLeft.set(positionLeft - left);\n        this.arrowTop.set(rectContent.height);\n        this.top.set(top);\n        this.left.set(left);\n        if (top > 0 && left >= 0 && left + rectContent.width < viewPort.width) {\n          return true;\n        }\n\n        if (isLast) {\n          this.config.update((config) => ({ ...config, maxHeight: rectOrigin.top - 4 }));\n          this.left.set(this.getLeftPositionIsLast(isLast, left >= 0 ? left : 0, viewPort, rectOrigin, rectContent, halfSquare));\n\n          return true;\n        }\n\n        return false;\n    }\n  }\n\n  private setClassArrow(direction: TYPE_POPOVER_DIRECTION) {\n    if (direction === 'right') {\n      return this.arrowClass.set('libs-ui-popover-overlay-arrow-right');\n    }\n    if (direction === 'left') {\n      return this.arrowClass.set('libs-ui-popover-overlay-arrow-left');\n    }\n    if (direction === 'top') {\n      return this.arrowClass.set('libs-ui-popover-overlay-arrow-down');\n    }\n\n    return this.arrowClass.set('libs-ui-popover-overlay-arrow-up');\n  }\n\n  private setVariableCss() {\n    const configValue = this.config();\n    this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-time', `${configValue.animationConfig?.time || 0.4}s`);\n    this.ContainerElement.style.setProperty('--libs-ui-popover-overlay-time-animation-distance', `${this.currentDirection() === 'top' ? '-' : ''}${configValue.animationConfig?.distance || 12}px`);\n  }\n\n  private getLeftPositionIsLast(isLast: boolean, currentLeft: number, viewPort: { width: number; height: number }, rectOrigin: IBoundingClientRect, rectContent: IBoundingClientRect, halfSquare: number): number {\n    if (viewPort.width - (rectOrigin.left + rectOrigin.width + rectContent.width + halfSquare) > 0) {\n      return rectOrigin.left + rectOrigin.width + halfSquare;\n    }\n    return currentLeft;\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this.timeout());\n  }\n}\n","<div\n  #container\n  class=\"libs-ui-popover-overlay {{ config().classInclude || '' }}\"\n  [class.libs-ui-popover-overlay-white-theme]=\"config().whiteTheme\"\n  [class.libs-ui-popover-overlay-animation-move]=\"config().animationConfig\"\n  [ngStyle]=\"config().ngStyles || {}\"\n  [style.width]=\"config().width ? config().width + 'px' : 'auto'\"\n  [style.maxWidth.px]=\"config().maxWidth\"\n  [style.maxHeight.px]=\"config().maxHeight\"\n  [style.top.px]=\"top()\"\n  [style.left.px]=\"left()\"\n  [style.zIndex]=\"config().zIndex || 10\">\n  @if (config()) {\n    @if (!config().ignoreArrow) {\n      <div class=\"relative\">\n        <svg\n          [class]=\"'libs-ui-popover-overlay-arrow ' + arrowClass() + (config().whiteTheme ? ' libs-ui-popover-overlay-white-theme ' : '')\"\n          [style.top.px]=\"arrowTop()\"\n          [style.left.px]=\"arrowLeft()\"\n          [attr.direction]=\"outEvent | async\">\n          <polygon points=\"0,0 6,6 12,0\" />\n          Sorry, your browser does not support inline SVG.\n        </svg>\n      </div>\n    }\n    @if (config().template; as templateConfig) {\n      <div\n        LibsUiComponentsScrollOverlayDirective\n        class=\"libs-ui-popover-overlay-body {{ config().classIncludeOverlayBody || '' }}\"\n        [attr.isTemplate]=\"true\"\n        [style.max-height]=\"config().maxHeight + 'px'\">\n        <ng-container *ngTemplateOutlet=\"templateConfig; context: { itemContext: config().itemContext }\" />\n      </div>\n    } @else {\n      @let constHtmlContent = config().content || ' ';\n      <div\n        class=\"libs-ui-popover-overlay-body libs-ui-font-h7r {{ config().classIncludeOverlayBody || '' }}\"\n        LibsUiComponentsScrollOverlayDirective\n        [options]=\"config().scrollOverlayOptions\"\n        [style.maxHeight.px]=\"config().maxHeight\"\n        [style.paddingTop.px]=\"config().paddingTop ?? 8\"\n        [style.paddingRight.px]=\"config().paddingRight ?? 8\"\n        [style.paddingLeft.px]=\"config().paddingLeft ?? 8\"\n        [style.paddingBottom.px]=\"config().paddingBottom ?? 8\"\n        [innerHtml]=\"constHtmlContent | translate\"></div>\n    }\n  }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, OnDestroy, OnInit, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { IBoundingClientRect, PathOf } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { checkMouseOverInContainer, get, getEventNameHandleClick, getViewport, isNil, set } from '@libs-ui/utils';\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { getPopoverTimerDestroyInQueryUrl } from './defines/constants.define';\nimport { IFlagMouse } from './interfaces/flag-mouse.interface';\nimport { IPopoverFunctionControlEvent } from './interfaces/function-control.interface';\nimport { IPopoverOverlay } from './interfaces/overlay.interface';\nimport { TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT, TYPE_POPOVER_MODE, TYPE_POPOVER_TYPE } from './interfaces/popover.type';\nimport { LibsUiComponentsPopoverOverlayComponent } from './overlay/overlay.component';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'libs_ui-components-popover,[LibsUiComponentsPopoverDirective]',\n  templateUrl: './popover.component.html',\n  styleUrl: './popover.component.scss',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsPopoverComponent implements OnInit, AfterContentInit, OnDestroy {\n  // #region PROPERTY\n  private mouseEnter!: Observable<MouseEvent>;\n  private mouseWheel!: Observable<MouseEvent>;\n  private mouseClick!: Observable<MouseEvent>;\n  private windowResize!: Observable<MouseEvent>;\n  private windowWheel!: Observable<MouseEvent>;\n  private windowMouseDown!: Observable<MouseEvent>;\n  private windowClick!: Observable<MouseEvent>;\n  private windowMouseUp!: Observable<MouseEvent>;\n  private windowMousemove!: Observable<MouseEvent>;\n  private popoverOverlayComponent!: ComponentRef<LibsUiComponentsPopoverOverlayComponent> | undefined;\n  // Rect của container tại lần định vị overlay gần nhất — mốc so sánh để phát hiện container dịch chuyển/đổi kích thước (vd: resize window làm layout reflow).\n  private rectContainerLastPositioned?: IBoundingClientRect;\n  private subsEventPopup = new Subscription();\n  private readonly onDestroy = new Subject<void>();\n  private functionsControl?: IPopoverFunctionControlEvent;\n  private readonly firstClick = signal<boolean>(false);\n  private readonly contentInnerHtml = signal<string>('');\n  private readonly timer = signal<ReturnType<typeof setTimeout> | undefined>(undefined);\n  private readonly directionPopover = signal<TYPE_POPOVER_DIRECTION | undefined>(undefined);\n\n  // #region INPUT\n  readonly debugId = input<string>();\n  readonly flagMouse = input<IFlagMouse, IFlagMouse | undefined>(\n    { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false },\n    {\n      transform: (value: any) => value ?? { isMouseEnter: false, isMouseEnterContent: false, isContainerHasScroll: false },\n    }\n  );\n  readonly type = input<TYPE_POPOVER_TYPE, TYPE_POPOVER_TYPE | undefined>('other', { transform: (value) => value ?? 'other' });\n  readonly mode = input<TYPE_POPOVER_MODE, TYPE_POPOVER_MODE | undefined>('hover', { transform: (value) => value ?? 'hover' });\n  readonly config = input({}, { transform: (value: IPopoverOverlay | undefined) => value ?? {} });\n  readonly ignoreShowPopover = input<boolean>();\n  readonly elementRefCustom = input<HTMLElement>();\n  readonly initEventInElementRefCustom = input<boolean, boolean | undefined>(false, { transform: (value) => value ?? false });\n  readonly classInclude = input<string | undefined, string | undefined>('', { transform: (value) => value ?? '' });\n  readonly ignoreHiddenPopoverContentWhenMouseLeave = input<boolean>();\n  readonly ignoreStopPropagationEvent = input<boolean>();\n  readonly ignoreCursorPointerModeLikeClick = input<boolean>();\n  readonly isAddContentToParentDocument = input<boolean>();\n  readonly ignoreClickOutside = input<boolean>();\n\n  // #region OUTPUT\n  readonly outEvent = output<TYPE_POPOVER_EVENT>();\n  readonly outChangStageFlagMouse = output<IFlagMouse>();\n  readonly outEventPopoverContent = output<TYPE_POPOVER_DIRECTION>();\n  readonly outFunctionsControl = output<IPopoverFunctionControlEvent>();\n\n  // #region INJECT\n  private readonly elementRef = inject(ElementRef);\n  private readonly dynamicService = inject(LibsUiDynamicComponentService);\n\n  constructor() {\n    let classDefault: string | undefined = undefined;\n    effect(() => {\n      try {\n        if (classDefault === undefined) {\n          classDefault = this.Element.className;\n        }\n        if (this.elementRefCustom() !== this.Element && this.Element.tagName !== 'svg') {\n          this.Element.className = classDefault || '';\n        }\n        if (this.type() === 'text') {\n          this.Element.classList.add('popover-text-ellipsis');\n        }\n        if (this.mode().includes('click') && !this.ignoreCursorPointerModeLikeClick()) {\n          this.Element.classList.add('cursor-pointer');\n        }\n        if (this.classInclude()) {\n          this.classInclude()\n            ?.split(' ')\n            .forEach((className) => {\n              if (!className) {\n                return;\n              }\n              this.Element.classList.add(className);\n            });\n        }\n      } catch (error) {\n        console.log(error, this.Element, this.Element.tagName);\n      }\n    });\n\n    let first = true;\n    effect(() => {\n      this.config();\n      untracked(() => {\n        if (this.popoverOverlayComponent?.instance && !first) {\n          this.updatePopoverOverlayPosition();\n        }\n        first = false;\n      });\n    });\n  }\n\n  ngOnInit(): void {\n    this.outEventPopoverContent.subscribe((direction) => this.directionPopover.set(direction));\n    this.functionsControl = {\n      removePopoverOverlay: this.removePopoverOverlay.bind(this),\n      updatePopoverOverlayPosition: this.updatePopoverOverlayPosition.bind(this),\n      getRectContainer: async () => (this.elementRefCustom() || this.Element).getBoundingClientRect(),\n      getRectContent: async () => this.popoverOverlayComponent?.instance?.ContainerElement?.getBoundingClientRect(),\n      showPopover: this.addPopoverContent.bind(this),\n      updatePopoverOverlay: this.updatePopoverOverlay.bind(this),\n    };\n    this.outFunctionsControl.emit(this.FunctionsControl);\n  }\n\n  ngAfterContentInit() {\n    const nativeEl = this.Element;\n    this.mouseEnter = this.initObservable(nativeEl, 'mouseenter');\n    this.initObservable(nativeEl, 'click').subscribe();\n    this.mouseClick = this.initObservable(nativeEl, getEventNameHandleClick);\n    this.mouseWheel = this.initObservable(window, 'wheel');\n    this.windowResize = this.initObservable(window, 'resize');\n    this.windowWheel = this.initObservable(window, 'wheel');\n    this.windowMouseDown = this.initObservable(window, 'mousedown');\n    this.windowClick = this.initObservable(window, getEventNameHandleClick);\n    this.windowMouseUp = this.initObservable(window, 'mouseup');\n    this.windowMousemove = this.initObservable(window, 'mousemove');\n    this.mouseEnter.subscribe(() => {\n      if (!this.mode().includes('hover')) {\n        return;\n      }\n\n      if (this.type() === 'text' && nativeEl?.clientWidth >= nativeEl.scrollWidth && !this.popoverOverlayComponent) {\n        return;\n      }\n      this.addPopoverContent();\n    });\n    this.mouseClick.subscribe(() => {\n      this.firstClick.update((val) => (this.ignoreShowPopover() ? false : !val));\n      this.outEvent.emit('click');\n\n      if (!this.mode().startsWith('click')) {\n        return;\n      }\n\n      if (this.mode() === 'click-toggle' && !this.firstClick()) {\n        this.removePopoverOverlay();\n\n        return;\n      }\n      this.addPopoverContent();\n    });\n    this.windowResize.pipe(debounceTime(100)).subscribe(this.updatePopoverOverlayPosition.bind(this));\n  }\n\n  // #region FUNCTIONS\n  public get FunctionsControl(): IPopoverFunctionControlEvent {\n    return this.functionsControl as IPopoverFunctionControlEvent;\n  }\n  private async updatePopoverOverlay() {\n    const timer = setTimeout(() => {\n      clearTimeout(timer);\n      if (!this.popoverOverlayComponent?.instance || !this.config()) {\n        return;\n      }\n      const instance = this.popoverOverlayComponent.instance;\n      const nativeEl = this.elementRefCustom() || this.Element;\n      const rectContainer = nativeEl.getBoundingClientRect();\n\n      this.rectContainerLastPositioned = rectContainer;\n      instance.setConfig(rectContainer, { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n    });\n  }\n\n  private async updatePopoverOverlayPosition() {\n    clearTimeout(this.timer());\n    this.timer.set(\n      setTimeout(async () => {\n        if (!this.popoverOverlayComponent?.instance || !this.config() || !this.functionsControl) {\n          return;\n        }\n        const rectContainer = await this.functionsControl.getRectContainer();\n        // Container đã dịch chuyển/đổi kích thước so với lần định vị gần nhất (vd: resize window làm layout reflow ngang lẫn dọc)\n        // → định vị lại ngay; các điều kiện switch bên dưới chỉ phát hiện lệch dọc/tràn mép phải nên không bắt được trường hợp này.\n        if (this.checkRectContainerMoved(rectContainer)) {\n          this.updatePopoverOverlay();\n          return;\n        }\n        const viewPort = getViewport();\n        const rectListView = await this.functionsControl.getRectContent();\n\n        if (!rectListView) {\n          return;\n        }\n        const distanceListViewAndContainer = this.config()?.ignoreArrow === false ? 14 : 4;\n        switch (this.directionPopover()) {\n          case 'right':\n          case 'left':\n          case 'bottom':\n            if (\n              rectListView.top + rectListView.height > viewPort.height ||\n              rectListView.top < rectContainer.top + rectContainer.height ||\n              rectListView.top - (rectContainer.top + rectContainer.height) > distanceListViewAndContainer ||\n              rectListView.left + rectListView.width > viewPort.width\n            ) {\n              this.updatePopoverOverlay();\n            }\n            break;\n\n          case 'top':\n            if (\n              rectContainer.top - (rectListView.top + rectListView.height) > distanceListViewAndContainer ||\n              rectListView.top + rectListView.height + distanceListViewAndContainer > rectContainer.top + 2 ||\n              rectListView.left + rectListView.width > viewPort.width\n            ) {\n              this.updatePopoverOverlay();\n            }\n            break;\n        }\n      }, 250)\n    );\n  }\n\n  private checkRectContainerMoved(rectContainer: IBoundingClientRect): boolean {\n    const rectLast = this.rectContainerLastPositioned;\n    if (!rectLast) {\n      return false;\n    }\n    // Dung sai 1px để bỏ qua sai số subpixel khi trình duyệt làm tròn.\n    return Math.abs(rectLast.top - rectContainer.top) > 1 || Math.abs(rectLast.left - rectContainer.left) > 1 || Math.abs(rectLast.width - rectContainer.width) > 1 || Math.abs(rectLast.height - rectContainer.height) > 1;\n  }\n\n  protected get Element(): HTMLElement {\n    if (this.initEventInElementRefCustom() && this.elementRefCustom()) {\n      return this.elementRefCustom() as HTMLElement;\n    }\n    return this.elementRef.nativeElement.firstElementChild || this.elementRef.nativeElement;\n  }\n\n  private initObservable(el: any, eventName: string): Observable<MouseEvent> {\n    return fromEvent<MouseEvent>(el, eventName).pipe(\n      tap((e) => !this.ignoreStopPropagationEvent() && e.stopPropagation()),\n      takeUntil(this.onDestroy)\n    );\n  }\n\n  private async addPopoverContent(nativeEl?: HTMLElement) {\n    if (this.popoverOverlayComponent || this.ignoreShowPopover() || !this.config()) {\n      return;\n    }\n\n    this.popoverOverlayComponent = this.dynamicService.resolveComponentFactory(LibsUiComponentsPopoverOverlayComponent);\n    this.dynamicService.addToBody(this.popoverOverlayComponent, this.isAddContentToParentDocument() || this.config().isAddContentToParentDocument);\n    this.outEvent.emit('show');\n    const instance = this.popoverOverlayComponent.instance;\n\n    nativeEl = nativeEl || this.elementRefCustom() || this.Element;\n    this.rectContainerLastPositioned = nativeEl.getBoundingClientRect();\n    instance.setConfig(this.rectContainerLastPositioned, { ...(this.config() || {}), ...this.getDefaultConfigs() }, this.isAddContentToParentDocument());\n    const flagsMouses: IFlagMouse = {\n      isMouseEnter: true,\n      isMouseEnterContent: false,\n      isContainerHasScroll: nativeEl.offsetHeight < nativeEl.scrollHeight,\n    };\n    const nativeElContainer = instance.ElementRef.nativeElement;\n    const mouseEnterContent = this.initObservable(nativeElContainer, 'mouseenter');\n    const mouseLeaveContent = this.initObservable(nativeElContainer, 'mouseleave');\n    this.subsEventPopup.add(\n      instance.outEvent.subscribe((direction: TYPE_POPOVER_DIRECTION) => {\n        this.outEventPopoverContent.emit(direction);\n      })\n    );\n\n    this.subsEventPopup.add(\n      mouseEnterContent.subscribe(() => {\n        this.outEvent.emit('mouseenter-content');\n        flagsMouses.isMouseEnterContent = true;\n        this.outChangStageFlagMouse.emit(flagsMouses);\n      })\n    );\n\n    this.subsEventPopup.add(\n      this.mouseEnter.subscribe(() => {\n        this.outEvent.emit('mouseenter-element');\n        this.outChangStageFlagMouse.emit(flagsMouses);\n      })\n    );\n\n    this.subsEventPopup.add(\n      this.mouseWheel.subscribe(() => {\n        flagsMouses.isContainerHasScroll = false;\n\n        if (nativeEl.offsetHeight < nativeEl.scrollHeight) {\n          flagsMouses.isContainerHasScroll = true;\n        }\n        if ((flagsMouses.isMouseEnter && flagsMouses.isContainerHasScroll) || flagsMouses.isMouseEnterContent || this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent) {\n          return;\n        }\n        this.removePopoverOverlay();\n      })\n    );\n    this.handlerMouseLeaveRemovePopoverOverlay(this.windowMousemove, flagsMouses, 'isMouseEnter', 'isMouseEnterContent', 'mouseleave-element');\n    this.handlerMouseLeaveRemovePopoverOverlay(mouseLeaveContent, flagsMouses, 'isMouseEnterContent', 'isMouseEnter', 'mouseleave-content');\n\n    if (this.mode() === 'click_open_and_click_panel_content_hidden') {\n      this.subsEventPopup.add(\n        this.initObservable(nativeElContainer, 'click').subscribe(() => {\n          this.removePopoverOverlay();\n        })\n      );\n    }\n\n    this.handlerWindowEventRemovePopoverOverlay(this.windowClick, flagsMouses);\n    this.handlerWindowEventRemovePopoverOverlay(this.windowMouseDown, flagsMouses);\n    this.handlerWindowEventRemovePopoverOverlay(this.windowMouseUp, flagsMouses);\n    this.handlerWindowEventRemovePopoverOverlay(this.windowWheel, flagsMouses);\n  }\n\n  private handlerWindowEventRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse) {\n    this.subsEventPopup.add(\n      obs.pipe(debounceTime(10)).subscribe(() => {\n        if (flagsMouses.isMouseEnter || flagsMouses.isMouseEnterContent || this.ignoreClickOutside()) {\n          return;\n        }\n        if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n          return;\n        }\n        this.firstClick.set(false);\n        this.removePopoverOverlay();\n      })\n    );\n  }\n\n  private handlerMouseLeaveRemovePopoverOverlay(obs: Observable<MouseEvent>, flagsMouses: IFlagMouse, flagKeyChangeValue: PathOf<IFlagMouse>, flagKeyCheck: PathOf<IFlagMouse>, outEvent: TYPE_POPOVER_EVENT) {\n    this.subsEventPopup.add(\n      obs\n        .pipe(\n          tap(() => this.outEvent.emit(outEvent)),\n          debounceTime(getPopoverTimerDestroyInQueryUrl() || this.config()?.timerDestroy || 0)\n        )\n        .subscribe((e: MouseEvent) => {\n          if (\n            outEvent === 'mouseleave-element' &&\n            (checkMouseOverInContainer(e, this.Element) || checkMouseOverInContainer({ clientX: e.clientX + 2, clientY: e.clientY + 2 }, this.Element) || checkMouseOverInContainer({ clientX: e.clientX - 2, clientY: e.clientY - 2 }, this.Element))\n          ) {\n            return;\n          }\n          set(flagsMouses, flagKeyChangeValue, false);\n          this.outChangStageFlagMouse.emit(flagsMouses);\n          if (this.flagMouse() && (this.flagMouse().isMouseEnter || this.flagMouse().isMouseEnterContent)) {\n            return;\n          }\n\n          if (get(flagsMouses, flagKeyCheck) || this.ignoreHiddenPopoverContentWhenMouseLeave()) {\n            return;\n          }\n          this.removePopoverOverlay();\n        })\n    );\n  }\n\n  private getDefaultConfigs(): IPopoverOverlay {\n    const configValue = this.config() || {};\n    if (isNil(configValue.content) || (configValue.content === this.contentInnerHtml() && this.contentInnerHtml() !== this.Element.innerHTML)) {\n      configValue.content = this.Element.innerHTML;\n    }\n    this.contentInnerHtml.set(this.Element.innerHTML);\n    if (!configValue.maxWidth) {\n      configValue.maxWidth = 250;\n    }\n    if (configValue.maxHeight === undefined || configValue.maxHeight === 0) {\n      configValue.maxHeight = 140;\n    }\n    if (!configValue.direction) {\n      configValue.direction = 'bottom';\n    }\n    if (!configValue.position) {\n      configValue.position = {\n        mode: 'center',\n        distance: 0,\n      };\n    }\n\n    return configValue;\n  }\n\n  private async removePopoverOverlay() {\n    if (this.popoverOverlayComponent) {\n      this.outEvent.emit('remove');\n      this.subsEventPopup.unsubscribe();\n      this.subsEventPopup = new Subscription();\n    }\n    this.dynamicService.remove(this.popoverOverlayComponent);\n    this.popoverOverlayComponent = undefined;\n    this.rectContainerLastPositioned = undefined;\n    this.firstClick.set(false);\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this.timer());\n    this.removePopoverOverlay();\n    this.onDestroy.next();\n    this.onDestroy.complete();\n    this.subsEventPopup.unsubscribe();\n  }\n}\n","<ng-content />\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}