{"version":3,"file":"rdlabo-ionic-angular-scroll-header.mjs","sources":["../../../projects/scroll-header/src/lib/directives/scroll-header.directive.ts","../../../projects/scroll-header/src/lib/directives/virtual-scroll-header.directive.ts","../../../projects/scroll-header/src/lib/directives/fix-virtual-scroll-element.directive.ts","../../../projects/scroll-header/src/public-api.ts","../../../projects/scroll-header/src/rdlabo-ionic-angular-scroll-header.ts"],"sourcesContent":["import { contentChild, Directive, effect, ElementRef, HostListener, inject, signal } from '@angular/core';\nimport { IonContent, IonHeader, ScrollDetail } from '@ionic/angular';\n\n@Directive({\n  selector: 'ion-content[rdlaboScrollHeader]',\n})\nexport class ScrollHeaderDirective {\n  readonly #elementRef = inject(ElementRef<IonContent>);\n\n  readonly scrollHeader = contentChild(IonHeader, { read: ElementRef });\n  readonly #nativeHeader = signal<HTMLElement | undefined>(undefined);\n  readonly #scrollHeaderSize = signal<number>(0);\n  readonly #beforeScrollTop = signal<number>(0);\n\n  readonly #minScrollAmount = 16;\n  readonly #scrollThrottle = 16; // 60fps\n  #lastScrollTime = 0;\n\n  constructor() {\n    effect(() => {\n      if (!this.scrollHeader()) {\n        return;\n      }\n      this.#elementRef.nativeElement.scrollEvents = true;\n      if (\n        this.#elementRef.nativeElement.previousElementSibling &&\n        this.#elementRef.nativeElement.previousElementSibling.classList.contains('native-header')\n      ) {\n        this.#nativeHeader.set(this.#elementRef.nativeElement.previousElementSibling);\n      }\n    });\n  }\n\n  @HostListener('ionScroll', ['$event'])\n  onWindowScroll($event: CustomEvent<ScrollDetail>) {\n    // スロットリングによる最適化\n    const now = performance.now();\n    if (now - this.#lastScrollTime < this.#scrollThrottle) {\n      return;\n    }\n    this.#lastScrollTime = now;\n\n    if (this.scrollHeader() === undefined) {\n      return;\n    }\n\n    if (this.#elementRef.nativeElement.classList.contains('fixed')) {\n      // ion-headerに.fixedが指定されている場合は固定\n      this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n      return;\n    }\n\n    if (!this.#scrollHeaderSize()) {\n      // 表示サイズを挿入\n      this.#scrollHeaderSize.set(this.scrollHeader()?.nativeElement.clientHeight);\n    }\n\n    if ($event.detail.scrollTop === 0) {\n      // 上部にきたら解除\n      this.#elementRef.nativeElement.classList.remove('scroll-header-sticky');\n      this.#elementRef.nativeElement.classList.remove('scroll-header-animated');\n    }\n\n    const scrollAmount = $event.detail.scrollTop - this.#beforeScrollTop();\n    if (Math.abs(scrollAmount) < this.#minScrollAmount) {\n      return;\n    }\n\n    if (scrollAmount < 0) {\n      // 上へスクロール\n      this.#elementRef.nativeElement.classList.remove('scroll-header-hidden');\n      if (this.#nativeHeader()) {\n        this.#nativeHeader.update((v) => {\n          v!.classList.remove('scroll-header-hidden');\n          return v;\n        });\n      }\n      if ($event.detail.scrollTop > this.#scrollHeaderSize()) {\n        this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n        this.#elementRef.nativeElement.classList.add('scroll-header-animated');\n      }\n    } else {\n      // 下にスクロール\n      if ($event.detail.scrollTop <= this.#scrollHeaderSize()) {\n        this.#elementRef.nativeElement.classList.remove('scroll-header-hidden');\n        this.#elementRef.nativeElement.classList.remove('scroll-header-sticky');\n        this.#elementRef.nativeElement.classList.remove('scroll-header-animated');\n        if (this.#nativeHeader()) {\n          this.#nativeHeader.update((v) => {\n            v!.classList.remove('scroll-header-hidden');\n            return v;\n          });\n        }\n      } else {\n        this.#elementRef.nativeElement.classList.add('scroll-header-hidden');\n        this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n        if (this.#nativeHeader()) {\n          this.#nativeHeader.update((v) => {\n            v!.classList.add('scroll-header-hidden');\n            return v;\n          });\n        }\n        requestAnimationFrame(() => this.#elementRef.nativeElement.classList.add('scroll-header-animated'));\n      }\n    }\n\n    this.#beforeScrollTop.set($event.detail.scrollTop);\n  }\n}\n","import { contentChild, Directive, effect, ElementRef, inject, OnDestroy, signal } from '@angular/core';\nimport { IonContent, IonHeader } from '@ionic/angular';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { fromEvent, Subscription } from 'rxjs';\n\n@Directive({\n  selector: 'ion-content[rdlaboVirtualScrollHeader]',\n})\nexport class VirtualScrollHeaderDirective implements OnDestroy {\n  readonly #elementRef = inject(ElementRef<IonContent>);\n\n  readonly virtualScroll = contentChild(CdkVirtualScrollViewport);\n  readonly scrollHeader = contentChild(IonHeader, { read: ElementRef });\n\n  readonly #minScrollAmount = 16;\n  readonly #scrollThrottle = 16; // 60fps\n  #lastScrollTime = 0;\n  readonly #nativeHeader = signal<HTMLElement | undefined>(undefined);\n  readonly #scrollRefresher = signal<HTMLElement | undefined>(undefined);\n  readonly #scrollHeaderSize = signal<number>(0);\n  readonly #beforeScrollTop = signal<number>(0);\n  readonly #scrollSubscription = new Subscription();\n  #initialized = false;\n\n  constructor() {\n    effect(() => {\n      const header = this.scrollHeader();\n      const viewport = this.virtualScroll();\n      if (!header || !viewport || this.#initialized) {\n        return;\n      }\n      this.#initialized = true;\n\n      this.#elementRef.nativeElement.classList.add('scroll-header-animated');\n\n      if (\n        this.#elementRef.nativeElement.previousElementSibling &&\n        this.#elementRef.nativeElement.previousElementSibling.classList.contains('native-header')\n      ) {\n        this.#nativeHeader.set(this.#elementRef.nativeElement.previousElementSibling);\n      }\n\n      this.#scrollSubscription.add(\n        fromEvent(viewport.elementRef.nativeElement, 'scroll').subscribe(() => {\n          this.onWindowScroll(viewport.measureScrollOffset('top'));\n        }),\n      );\n    });\n  }\n\n  ngOnDestroy() {\n    this.#scrollSubscription.unsubscribe();\n  }\n\n  onWindowScroll(scrollOffset: number) {\n    // スロットリングによる最適化\n    const now = performance.now();\n    if (now - this.#lastScrollTime < this.#scrollThrottle) {\n      return;\n    }\n    this.#lastScrollTime = now;\n\n    if (this.scrollHeader() === undefined || this.virtualScroll() === undefined) {\n      return;\n    }\n\n    if (this.#elementRef.nativeElement.classList.contains('fixed')) {\n      // ion-headerに.fixedが指定されている場合は固定\n      this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n      return;\n    }\n\n    if (!this.#scrollHeaderSize()) {\n      // 表示サイズを挿入\n      this.#scrollHeaderSize.set(this.scrollHeader()!.nativeElement.clientHeight);\n      this.virtualScroll()!.elementRef.nativeElement.style.marginTop = this.scrollHeader()!.nativeElement.clientHeight * -1 + 'px';\n      this.virtualScroll()!.elementRef.nativeElement.style.paddingTop = this.scrollHeader()!.nativeElement.clientHeight + 'px';\n\n      this.#scrollRefresher.set(this.#elementRef.nativeElement.querySelector('ion-refresher'));\n      if (this.#scrollRefresher()) {\n        this.#scrollRefresher.update((v) => {\n          v!.style.marginTop = this.scrollHeader()!.nativeElement.clientHeight + 'px';\n          return v;\n        });\n      }\n    }\n\n    if (scrollOffset === 0) {\n      // 上部にきたら解除\n      this.#elementRef.nativeElement.classList.remove('scroll-header-sticky');\n    }\n\n    const scrollAmount = scrollOffset - this.#beforeScrollTop();\n    if (Math.abs(scrollAmount) < this.#minScrollAmount) {\n      return;\n    }\n\n    if (scrollAmount < 0) {\n      // 上へスクロール\n      this.#elementRef.nativeElement.classList.remove('scroll-header-hidden');\n      if (this.#nativeHeader()) {\n        this.#nativeHeader.update((v) => {\n          v!.classList.remove('scroll-header-hidden');\n          return v;\n        });\n      }\n      if (scrollOffset > this.#scrollHeaderSize() / 1.5) {\n        this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n      }\n    } else {\n      // 下にスクロール\n      if (scrollOffset <= this.#scrollHeaderSize() / 1.5) {\n        this.#elementRef.nativeElement.classList.remove('scroll-header-hidden');\n        this.#elementRef.nativeElement.classList.remove('scroll-header-sticky');\n        if (this.#nativeHeader()) {\n          this.#nativeHeader.update((v) => {\n            v!.classList.remove('scroll-header-hidden');\n            return v;\n          });\n        }\n      } else {\n        this.#elementRef.nativeElement.classList.add('scroll-header-hidden');\n        this.#elementRef.nativeElement.classList.add('scroll-header-sticky');\n        if (this.#nativeHeader()) {\n          this.#nativeHeader.update((v) => {\n            v!.classList.add('scroll-header-hidden');\n            return v;\n          });\n        }\n      }\n    }\n\n    this.#beforeScrollTop.set(scrollOffset);\n  }\n}\n","import { Directive, ElementRef, inject, OnInit } from '@angular/core';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\n\n@Directive({\n  selector: 'cdk-virtual-scroll-viewport[rdlaboFixVirtualScrollElement]',\n})\nexport class FixVirtualScrollElementDirective implements OnInit {\n  readonly #elementRef = inject(ElementRef<CdkVirtualScrollViewport>);\n\n  ngOnInit() {\n    const nativeEl = this.#elementRef.nativeElement;\n    if (nativeEl) {\n      const last = nativeEl.lastElementChild;\n      if (nativeEl.firstElementChild && last) {\n        nativeEl.replaceChild(nativeEl.firstElementChild, nativeEl.lastElementChild);\n        nativeEl.insertBefore(last, nativeEl.firstElementChild);\n      }\n    }\n  }\n}\n","/*\n * Public API Surface of scroll-header\n */\n\nexport * from './lib/directives/scroll-header.directive';\nexport * from './lib/directives/virtual-scroll-header.directive';\nexport * from './lib/directives/fix-virtual-scroll-element.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}