{"version":3,"file":"bootkit-ng1-platform-browser.mjs","sources":["../../../projects/ng1/platform/browser/clipboard/clipboard.service.ts","../../../projects/ng1/platform/browser/clipboard/clipboard-copy.directive.ts","../../../projects/ng1/platform/browser/intersection-observer.directive.ts","../../../projects/ng1/platform/browser/provide-meta-tag-updater.ts","../../../projects/ng1/platform/browser/bootkit-ng1-platform-browser.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClipboardService {\n  private readonly _writeSubject = new Subject<any>;\n\n  /**\n   * \n   */\n  public readonly writeEvents = this._writeSubject.asObservable();\n\n  constructor() { }\n\n  public writeText(text: string) {\n    window.navigator.clipboard.writeText(text);\n    this._writeSubject.next(text);\n  }\n}\n","import { Directive, HostListener, input } from '@angular/core';\nimport { ClipboardService } from './clipboard.service';\n\n@Directive({\n  selector: '[ng1-clipboard-copy]',\n  standalone: true\n})\nexport class ClipboardCopyDirective {\n  public readonly value = input<string>(undefined, { alias: 'ng1-clipboard-copy' })\n\n  constructor(private clipboardService: ClipboardService) {\n  }\n\n  @HostListener('click') protected _onHostClick() {\n    this.clipboardService.writeText(this.value()!);\n  }\n}\n","import { ElementRef, input, OnInit, PLATFORM_ID, Directive, OnDestroy, Output, EventEmitter, inject, Renderer2, booleanAttribute } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\n/**\n * Directive that observes the intersection of an element with the viewport and optionally applies CSS classes when the element enters or leaves the viewport.\n * It uses the Intersection Observer API to monitor visibility changes.\n * It can be used to trigger animate-on-scroll (AOS) animations, lazy loading, or other actions based on element visibility.\n */\n@Directive({\n    selector: '[ng1IntersectionObserver]',\n    exportAs: 'ng1IntersectionObserver',\n    standalone: true\n})\nexport class IntersectionObserverDirective implements OnInit, OnDestroy {\n    private readonly _platformId = inject(PLATFORM_ID);\n    private readonly _elementRef = inject(ElementRef);\n    private readonly _renderer = inject(Renderer2);\n    private _entered?: boolean;\n    private _observer?: IntersectionObserver;\n    private _addClass(c: string) { this._renderer.addClass(this._elementRef.nativeElement, c) };\n    private _removeClass(c: string) { this._renderer.removeClass(this._elementRef.nativeElement, c) };\n\n    /**\n     * Threshold(s) at which to trigger the intersection callback.\n     * Can be a single number or an array of numbers between 0 and 1.\n     * For example, 0.5 means the callback will be triggered when 50% of the element is visible in the viewport.\n     */\n    public readonly threshold = input<number | number[] | undefined>();\n\n    /**\n     * Root element to use for intersection observation. \n     * If not provided, the viewport (browser window) is used as the root.\n     */\n    public readonly root = input<Element | Document | null | undefined>();\n\n    /**\n     * Root margin to apply to the intersection observer.\n     * This can be a string similar to the CSS margin property, e.g., '10px 20px 30px 40px'.\n     * It defines the margin around the root element (viewport) to consider for intersection.\n     */\n    public readonly rootMargin = input<string | undefined>();\n\n    /**\n     * Css class to apply when the element enters the viewport.\n     */\n    public readonly enterClass = input<string | undefined>();\n\n    /**\n     * Css class to apply when the element leaves the viewport.\n     */\n    public readonly leaveClass = input<string | undefined>();\n\n    /**\n     * Whether to observe only once (true) or continuously (false).\n     * If true, the observer will disconnect after the first intersection event.\n     * @default true\n     */\n    public readonly once = input(true, { transform: booleanAttribute });\n\n    /**\n     * Event emitted when the element enters the viewport.\n     */\n    @Output() public readonly enter = new EventEmitter<IntersectionObserverEntry>();\n\n    /**\n     * Event emitted when the element leaves the viewport.\n     * This event will only be emitted if the element has previously entered the viewport.\n     */\n    @Output() public readonly leave = new EventEmitter<IntersectionObserverEntry>();\n\n\n    ngOnInit(): void {\n        if (isPlatformServer(this._platformId)) {\n            return;\n        }\n\n        this._setupObserver();\n    }\n\n    private _setupObserver() {\n        this._observer = new IntersectionObserver(\n            (entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        if (this.enterClass()) {\n                            this._addClass(this.enterClass()!);\n\n                            if (this._entered === false && this.leaveClass()) {\n                                this._removeClass(this.leaveClass()!);\n                            }\n                        }\n\n                        this._entered = true;\n                        this.enter.emit(entry);\n\n                        if (this.once()) {\n                            this.disconnect();\n                        }\n                    } else {\n                        if (this._entered) {\n                            if (this.leaveClass()) {\n                                this._addClass(this.leaveClass()!);\n\n                                if (this.enterClass()) {\n                                    this._removeClass(this.enterClass()!);\n                                }\n                            }\n\n                            this._entered = false;\n                            this.leave.emit(entry);\n\n                            if (this.once()) {\n                                this.disconnect();\n                            }\n                        }\n                    }\n                });\n            },\n            {\n                root: this.root(),\n                threshold: this.threshold(),\n                rootMargin: this.rootMargin()\n            }\n        );\n\n        this._observer.takeRecords(); // Clear initial records\n        this._observer.observe(this._elementRef.nativeElement);\n    }\n\n    /**\n     * Disconnects the intersection observer.\n     * This stops all observation and releases resources.\n     */\n    public disconnect(): void {\n        this._observer?.disconnect();\n    }\n\n    ngOnDestroy(): void {\n        this.disconnect();\n    }\n}\n","import { isPlatformServer } from '@angular/common';\nimport { EnvironmentProviders, inject, PLATFORM_ID, provideAppInitializer, RendererFactory2 } from '@angular/core';\nimport { Meta } from '@angular/platform-browser';\nimport { RouterService } from '@bootkit/ng1/routing';\n\n/**\n * Provides a service that listens to route changes and updates meta tags accordingly.\n * @returns An environment provider for the MetaTagUpdater service.\n */\nexport function provideMetaTagUpdater(): EnvironmentProviders {\n  return provideAppInitializer(() => {\n    const routerService = inject(RouterService);\n    const metaService = inject(Meta);\n    const renderer = inject(RendererFactory2).createRenderer(null, null);\n    const platformId = inject(PLATFORM_ID);\n    const isServer = isPlatformServer(platformId);\n    const tags = new Set<HTMLMetaElement>();\n\n    // Find server generated meta tags and mark them for removal on the client\n    if (!isServer) {\n      const serverTags = metaService.getTags(\"data-ng1-meta\");\n      serverTags.forEach(t => tags.add(t as HTMLMetaElement));\n    }\n\n    routerService.listenToActivatedRoutes().subscribe(routes => {\n      tags.forEach(t => metaService.removeTagElement(t));\n      tags.clear();\n\n      routes\n        .map(x => x.metaTags)\n        .flat()\n        .filter(meta => !!meta)\n        .forEach(meta => {\n          const newTag = metaService.addTag(meta, true)!;\n\n          if (isServer) {\n            renderer.setAttribute(newTag, 'data-ng1-meta', '');\n          }\n\n          tags.add(newTag);\n        });\n    });\n  });\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ClipboardService"],"mappings":"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"}