{"version":3,"file":"bootkit-angular-components-overlay.mjs","sources":["../../../projects/bootkit/components/overlay/private/utils.ts","../../../projects/bootkit/components/overlay/overlay.directive.ts","../../../projects/bootkit/components/overlay/overlay.module.ts","../../../projects/bootkit/components/overlay/bootkit-angular-components-overlay.ts"],"sourcesContent":["import { ConnectedPosition } from \"@angular/cdk/overlay\";\r\nimport { Alignment, Placement } from \"@bootkit/angular/common\";\r\n\r\n/**\r\n * Get the overlay position based on the provided placement and alignment.\r\n * \r\n * @param overlayPlacement - The placement of the overlay (e.g., 'bottom', 'top', 'start', 'end').\r\n * @param overlayAlignment - The alignment of the overlay (e.g., 'start', 'center', 'end').\r\n * @returns The connected position for the overlay.\r\n */\r\nexport function getOverlayPosition(overlayPlacement: Placement, overlayAlignment: Alignment): ConnectedPosition {\r\n      let p = {} as ConnectedPosition;\r\n      switch (overlayPlacement) {\r\n            case 'bottom':\r\n                  p.originY = 'bottom';\r\n                  p.overlayY = 'top';\r\n                  p.originX = overlayAlignment;\r\n                  p.overlayX = overlayAlignment;\r\n                  break;\r\n            case 'top':\r\n                  p.originY = 'top';\r\n                  p.overlayY = 'bottom';\r\n                  p.originX = overlayAlignment;\r\n                  p.overlayX = overlayAlignment;\r\n                  break;\r\n            case 'start':\r\n                  p.originX = 'start';\r\n                  p.overlayX = 'end';\r\n\r\n                  if (overlayAlignment == 'start') {\r\n                        p.originY = 'top';\r\n                        p.overlayY = 'top';\r\n                  } else if (overlayAlignment == 'center') {\r\n                        p.originY = 'center';\r\n                        p.overlayY = 'center';\r\n                  } else {\r\n                        p.originY = 'bottom';\r\n                        p.overlayY = 'bottom';\r\n                  }\r\n                  break;\r\n            case 'end':\r\n                  p.originX = 'end';\r\n                  p.overlayX = 'start';\r\n\r\n                  if (overlayAlignment == 'start') {\r\n                        p.originY = 'top';\r\n                        p.overlayY = 'top';\r\n                  } else if (overlayAlignment == 'center') {\r\n                        p.originY = 'center';\r\n                        p.overlayY = 'center';\r\n                  } else {\r\n                        p.originY = 'bottom';\r\n                        p.overlayY = 'bottom';\r\n                  }\r\n                  break;\r\n      }\r\n\r\n      return p;\r\n}\r\n","import { Directive, EventEmitter, Injector, OnDestroy, Output, Renderer2, TemplateRef, ViewContainerRef, effect, input, model } from '@angular/core';\r\nimport { Alignment, Placement } from '@bootkit/angular/common';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { flipPlacement } from '@bootkit/angular/private';\r\nimport { getOverlayPosition } from './private/utils';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * Directive to manage overlay behavior.\r\n */\r\n@Directive({\r\n      selector: '[bkOverlay]',\r\n      exportAs: 'bkOverlay',\r\n      standalone: true,\r\n})\r\nexport class OverlayDirective implements OnDestroy {\r\n      public anchor = input.required<any>();\r\n      public open = model(false);\r\n      public placement = input<Placement>('bottom');\r\n      public alignment = input<Alignment>('start');\r\n\r\n      /**\r\n       * Event emitted when a pointer event occurs outside the overlay.\r\n       */\r\n      @Output() public outsidePointerEvent = new EventEmitter<MouseEvent>();\r\n\r\n      private _overlayRef?: OverlayRef;\r\n      private _templatePortal: TemplatePortal<any>;\r\n      private _outsidePointerEventsSubscription?: Subscription;\r\n      private _hideTimeoutId: any;\r\n\r\n      constructor(\r\n            public readonly templateRef: TemplateRef<any>,\r\n            private _overlayService: Overlay,\r\n            private _injector: Injector,\r\n            private _renderer: Renderer2,\r\n            private _viewRef: ViewContainerRef) {\r\n\r\n            this._templatePortal = new TemplatePortal(this.templateRef, this._viewRef, null, this._injector);\r\n\r\n            effect(() => {\r\n                  if (this.open()) {\r\n                        this._clearTimeout()\r\n\r\n                        if (!this._overlayRef) {\r\n                              const p1 = getOverlayPosition(this.placement(), this.alignment());\r\n                              const p2 = getOverlayPosition(flipPlacement(this.placement()), this.alignment());\r\n                              const scrollStrategy = this._overlayService.scrollStrategies.reposition();\r\n                              const positionStrategy = this._overlayService.position().flexibleConnectedTo(this.anchor()).withPositions([p1, p2]);\r\n                              this._overlayRef = this._overlayService.create({ scrollStrategy, positionStrategy, });\r\n                        }\r\n\r\n                        this._outsidePointerEventsSubscription = this._overlayRef.outsidePointerEvents().subscribe(e => this.outsidePointerEvent.emit(e))\r\n                        this._overlayRef.attach(this._templatePortal);\r\n                  } else {\r\n                        this._clearTimeout();\r\n                        this._outsidePointerEventsSubscription?.unsubscribe();\r\n                        this._overlayRef?.detach();\r\n                  }\r\n            });\r\n      }\r\n\r\n      /**\r\n       * Show the overlay.\r\n       */\r\n      public show() {\r\n            this._clearTimeout();\r\n            this.open.set(true);\r\n      }\r\n\r\n      /**\r\n       * Hide the overlay.\r\n       */\r\n      public hide() {\r\n            this._clearTimeout();\r\n            this.open.set(false);\r\n      }\r\n\r\n      /**\r\n       * Hide the overlay after a period of time.\r\n       */\r\n      public hideAfter(ms: number) {\r\n            this._clearTimeout();\r\n            this._hideTimeoutId = setTimeout(() => {\r\n                  this.open.set(false);\r\n            }, ms);\r\n      }\r\n\r\n      /**\r\n       * Toggle the overlay visibility.\r\n       */\r\n      public toggle() {\r\n            this.open.update(x => !x);\r\n      }\r\n\r\n      private _clearTimeout() {\r\n            if (this._hideTimeoutId) {\r\n                  clearTimeout(this._hideTimeoutId);\r\n                  this._hideTimeoutId = 0;\r\n            }\r\n      }\r\n\r\n      /**\r\n       * Lifecycle hook that is called when the directive is destroyed.\r\n       */\r\n      ngOnDestroy(): void {\r\n            this._outsidePointerEventsSubscription?.unsubscribe();\r\n            this._clearTimeout()\r\n            this._overlayRef?.dispose();\r\n      }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OverlayDirective } from './overlay.directive';\r\n\r\nconst Items = [\r\n    OverlayDirective,\r\n]\r\n\r\n/**\r\n * OverlayModule.\r\n */\r\n@NgModule({\r\n    imports: Items,\r\n    exports: Items\r\n})\r\nexport class OverlayModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}