{"version":3,"file":"acorex-components-loading.mjs","sources":["../../../../packages/components/loading/src/lib/loading-spinner.component.ts","../../../../packages/components/loading/src/lib/loading.config.ts","../../../../packages/components/loading/src/lib/loading.component.ts","../../../../packages/components/loading/src/lib/loading.service.ts","../../../../packages/components/loading/src/lib/loading.directive.ts","../../../../packages/components/loading/src/lib/loading.module.ts","../../../../packages/components/loading/src/acorex-components-loading.ts"],"sourcesContent":["import { AXComponent, AXStyleColorType } from '@acorex/cdk/common';\nimport { Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * A loading spinner component that displays a rotating spinner icon.\n * @category Components\n */\n@Component({\n  selector: 'ax-loading-spinner',\n  template: `\n    <span\n      class=\"ax-loader\"\n      [style.width.px]=\"size\"\n      [style.height.px]=\"size\"\n      [style.border-width.px]=\"stroke\"\n      [style.border-color]=\"color\"\n    ></span>\n    @if (text) {\n      <span> {{ text }} </span>\n    }\n  `,\n  styleUrls: ['./loading-spinner.component.css'],\n  encapsulation: ViewEncapsulation.None,\n\n  providers: [{ provide: AXComponent, useExisting: AXLoadingSpinnerComponent }],\n})\nexport class AXLoadingSpinnerComponent {\n  /**\n   * The text to display alongside the spinner.\n   */\n  @Input()\n  text: string;\n\n  /**\n   * Color of the spinner. Can be a predefined style color or a custom color.\n   * @defaultValue 'default'\n   */\n  @Input()\n  color: AXStyleColorType | 'white' | 'black' = 'default';\n\n  /**\n   * Size of the spinner, in pixels. This determines both the width and height of the spinner.\n   * @defaultValue 16\n   */\n  @Input() size = 16;\n\n  /**\n   * Thickness of the spinner's border, in pixels. This affects the visual weight of the spinner's outline.\n   * @defaultValue 3\n   */\n  @Input() stroke = 3;\n\n  /**\n   *  @ignore\n   */\n  @HostBinding('class')\n  private get __hostClass(): string {\n    return `ax-${this.color}`;\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXLoadingSpinnerComponent } from './loading-spinner.component';\n\nexport interface AXLoadingConfig {\n  spinner: unknown;\n}\n\nexport const AX_LOADING_CONFIG = new InjectionToken<AXLoadingConfig>('AX_LOADING_CONFIG', {\n  providedIn: 'root',\n  factory: () => AXLoadingDefaultConfig,\n});\n\nexport const AXLoadingDefaultConfig: AXLoadingConfig = {\n  spinner: AXLoadingSpinnerComponent,\n};\n\nexport type PartialLoadingConfig = Partial<AXLoadingConfig>;\n\nexport function loadingConfig(config: PartialLoadingConfig = {}): AXLoadingConfig {\n  const result = {\n    ...AXLoadingDefaultConfig,\n    ...config,\n  };\n  return result;\n}\n","import { AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport {\n  CdkPortalOutlet,\n  CdkPortalOutletAttachedRef,\n  ComponentPortal,\n  ComponentType,\n  Portal,\n} from '@angular/cdk/portal';\nimport { Component, ComponentRef, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { AXLoadingConfig, AX_LOADING_CONFIG } from './loading.config';\n\n/**\n * A component that displays a loading indicator.\n * @category Components\n */\n@Component({\n  selector: 'ax-loading',\n  template: ` <ng-template [cdkPortalOutlet]=\"_selectedPortal\" (attached)=\"_handleAttached($event)\"></ng-template> `,\n  styleUrls: ['./loading.component.css'],\n\n  encapsulation: ViewEncapsulation.None,\n  imports: [CdkPortalOutlet],\n  providers: [{ provide: AXComponent, useExisting: AXLoadingComponent }],\n})\nexport class AXLoadingComponent extends MXBaseComponent implements OnInit {\n  private config: AXLoadingConfig = inject(AX_LOADING_CONFIG);\n\n  /**\n   *  @ignore\n   */\n  protected _selectedPortal: Portal<unknown>;\n\n  /**\n   * Emits an event when the visibility state of the component changes.\n   * @event\n   */\n  @Output()\n  visibleChange: EventEmitter<boolean> = new EventEmitter();\n\n  /**\n   *  @ignore\n   */\n  private _visible: boolean;\n\n  /**\n   * Determines whether the component is visible or not.\n   */\n  @Input()\n  public get visible(): boolean {\n    return this._visible;\n  }\n\n  /**\n   * Sets the visibility of the component and emits a visibility change event.\n   *\n   * @param v - A boolean value indicating whether the component should be visible.\n   */\n  public set visible(v: boolean) {\n    if (v != this._visible) {\n      this._visible = v;\n      v ? this.getHostElement().classList.remove('hidden') : this.getHostElement().classList.add('hidden');\n      this.visibleChange.emit(v);\n    }\n  }\n\n  /**\n   * Specifies the type of loading indicator to display.\n   * @defaultValue 'spinner'\n   */\n  @Input()\n  type = 'spinner';\n\n  /**\n   * Provides additional context or data that may be used by the component.\n   */\n  @Input()\n  context?: unknown;\n\n  /**\n   *  @ignore\n   */\n  override ngOnInit() {\n    super.ngOnInit();\n    this._selectedPortal = new ComponentPortal(this.config.spinner as ComponentType<unknown>);\n    this.cdr.markForCheck();\n  }\n\n  /**\n   *  @ignore\n   */\n  protected _handleAttached(ref: CdkPortalOutletAttachedRef) {\n    ref = ref as ComponentRef<unknown>;\n    if (ref.instance && this.context) {\n      Object.assign(ref.instance, this.context);\n    }\n  }\n}\n","import { AXOverlayService } from '@acorex/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\nimport { finalize, observeOn } from 'rxjs/operators';\nimport { AXLoadingComponent } from './loading.component';\n\ntype LoadingContext = object;\ntype LoaderId = string | number; // expected enum values\nconst DEFAULT_LOADER_ID: LoaderId = '_DEFAULT';\n\ninterface LoadingOverlayEntry {\n  dispose: () => void;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXLoadingService {\n  // WeakMap will remove components from itself upon\n  // their garbage collection by JS runtime.\n  protected loadingStates = new WeakMap<LoadingContext, Map<LoaderId, boolean>>();\n  // Both loading state maps are kept in-sync such that\n  // they can be used by both sync and async methods.\n  protected loadingStates$ = new WeakMap<LoadingContext, Map<LoaderId, BehaviorSubject<boolean>>>();\n\n  private overlayService = inject(AXOverlayService);\n  private document = inject(DOCUMENT);\n  private activeOverlays = new Map<number, LoadingOverlayEntry>();\n\n  /**\n   * Shows a modal loading overlay.\n   *\n   * If a host element is provided via `config.location`, the overlay is attached to that\n   * element; otherwise it is attached to `document.body`.\n   *\n   * @param config Optional configuration: host `location`, `type`, and `context` passed to the spinner instance.\n   * @returns number Unique loading reference id to be used with {@link hide}.\n   */\n  show(config?: { location?: Element; type?: string; context?: unknown }): number {\n    const ce = (config?.location ?? this.document.body) as HTMLElement;\n    const id = new Date().getTime();\n    const isElementLevel = ce !== this.document.body;\n\n    const inputs: Record<string, unknown> = {};\n    if (config?.type) inputs['type'] = config.type;\n    if (config?.context) inputs['context'] = config.context;\n\n    const entry: LoadingOverlayEntry = {\n      dispose: () => {\n        /* noop until overlay is created */\n      },\n    };\n    this.activeOverlays.set(id, entry);\n\n    this.overlayService\n      .create<AXLoadingComponent>(AXLoadingComponent, {\n        inputs,\n        backdrop: isElementLevel\n          ? { enabled: false }\n          : {\n              enabled: true,\n              background: true,\n              closeOnClick: false,\n              backdropClass: 'ax-loading-overlay-backdrop',\n            },\n        panelClass: ['ax-loading-pane', 'animate-fadeIn'],\n      })\n      .then((overlayRef) => {\n        if (overlayRef.instance instanceof ComponentRef) {\n          const instance = overlayRef.instance.instance;\n          instance.visible = true;\n          instance.id = id.toString();\n        }\n\n        if (isElementLevel) {\n          const backdrop = this.document.createElement('div');\n          backdrop.classList.add('ax-loading-overlay-backdrop', 'animate-fadeIn');\n          backdrop.style.position = 'absolute';\n          backdrop.style.top = '0';\n          backdrop.style.left = '0';\n          backdrop.style.width = '100%';\n          backdrop.style.height = '100%';\n\n          ce.style.position = 'relative';\n\n          const ov = overlayRef.overlayElement;\n          if (ov) {\n            ov.style.position = 'absolute';\n            ce.appendChild(backdrop);\n            ce.appendChild(ov);\n            setTimeout(() => {\n              ov.style.position = 'absolute';\n            });\n          }\n\n          entry.dispose = () => {\n            backdrop.remove();\n            overlayRef.dispose();\n          };\n        } else {\n          entry.dispose = () => overlayRef.dispose();\n        }\n\n        if (!this.activeOverlays.has(id)) {\n          entry.dispose();\n        }\n      });\n\n    return id;\n  }\n\n  /**\n   * Hides a previously shown modal loading overlay.\n   *\n   * @param id Loading reference id returned by {@link show}.\n   */\n  hide(id: number): void {\n    const entry = this.activeOverlays.get(id);\n    if (entry) {\n      entry.dispose();\n      this.activeOverlays.delete(id);\n    }\n  }\n\n  /**\n   * Wraps an Observable and toggles loading for its duration.\n   *\n   * Starts loading before subscription settles and ends loading on finalize.\n   *\n   * @param source$ Source observable.\n   * @param context Loading context key.\n   * @param loaderId Optional id to scope multiple loaders per context.\n   * @returns Observable<V> The original stream with loading side effects.\n   */\n  doLoading<V>(source$: Observable<V>, context: LoadingContext, loaderId?: LoaderId): Observable<V> {\n    this.startLoading(context, loaderId);\n    return source$.pipe(\n      observeOn(asyncScheduler),\n      finalize(() => this.endLoading(context, loaderId)),\n    );\n  }\n\n  /**\n   * Returns current loading state for the given context and optional loader id.\n   *\n   * @param context Loading context key.\n   * @param loaderId Optional loader id.\n   * @returns boolean True if any matching loader is active.\n   */\n  isLoading(context: LoadingContext, loaderId?: LoaderId): boolean {\n    const loaderStates = this.loadingStates.get(context);\n\n    if (!loaderStates) {\n      return false;\n    } else {\n      if (loaderId !== undefined) {\n        return loaderStates.get(this.getLoaderId(loaderId)) ?? false;\n      } else {\n        return [...loaderStates.values()].filter((state) => state).length > 0;\n      }\n    }\n  }\n\n  /**\n   * Observable loading state for the given context and optional loader id.\n   * Initializes the state if it does not exist yet.\n   *\n   * @param context Loading context key.\n   * @param loaderId Optional loader id.\n   * @returns Observable<boolean>\n   */\n  isLoading$(context: LoadingContext, loaderId?: LoaderId | any): Observable<boolean> {\n    const coalescedLoaderId = this.getLoaderId(loaderId);\n\n    if (!this.hasLoadingStates(context, coalescedLoaderId)) {\n      this.setLoadingState(context, false, loaderId);\n    }\n\n    return this.loadingStates$.get(context).get(coalescedLoaderId);\n  }\n\n  /**\n   * Sets loading state to true for the given context/loader id.\n   *\n   * @param context Loading context key.\n   * @param loaderId Optional loader id.\n   * @returns void\n   */\n  startLoading(context: LoadingContext, loaderId?: LoaderId): void {\n    this.setLoadingState(context, true, this.getLoaderId(loaderId));\n  }\n\n  /**\n   * Sets loading state to false for the given context/loader id.\n   *\n   * @param context Loading context key.\n   * @param loaderId Optional loader id.\n   * @returns void\n   */\n  endLoading(context: LoadingContext, loaderId?: LoaderId): void {\n    this.setLoadingState(context, false, this.getLoaderId(loaderId));\n  }\n\n  /**\n   * Clears all tracked loading states across all contexts.\n   *\n   * @returns void\n   */\n  clearLoadings(): void {\n    this.loadingStates = new WeakMap<LoadingContext, Map<LoaderId, boolean>>();\n    this.loadingStates$ = new WeakMap<LoadingContext, Map<LoaderId, BehaviorSubject<boolean>>>();\n  }\n\n  protected setLoadingState(context: LoadingContext, state: boolean, loaderId: LoaderId): void {\n    if (!this.hasLoadingStates(context, loaderId)) {\n      if (this.hasContextLoadingState(context)) {\n        this.loadingStates.get(context).set(loaderId, state);\n        this.loadingStates$.get(context).set(loaderId, new BehaviorSubject<boolean>(state));\n      } else {\n        this.loadingStates.set(context, new Map<LoaderId, boolean>([[loaderId, state]]));\n        this.loadingStates$.set(\n          context,\n          new Map<LoaderId, BehaviorSubject<boolean>>([[loaderId, new BehaviorSubject<boolean>(state)]]),\n        );\n      }\n    } else {\n      this.loadingStates.get(context).set(loaderId, state);\n      this.loadingStates$.get(context).get(loaderId).next(state);\n    }\n  }\n\n  protected hasLoadingStates(context: LoadingContext, loaderId: LoaderId) {\n    return this.hasContextLoadingState(context) && this.hasLoaderLoadingState(context, loaderId);\n  }\n\n  protected hasContextLoadingState(context: LoadingContext) {\n    return this.loadingStates.has(context) && this.loadingStates$.has(context);\n  }\n\n  protected hasLoaderLoadingState(context: LoadingContext, loaderId: LoaderId) {\n    return this.loadingStates.get(context).has(loaderId) && this.loadingStates$.get(context).has(loaderId);\n  }\n\n  protected getLoaderId(loaderId?: LoaderId): LoaderId {\n    return loaderId ?? DEFAULT_LOADER_ID;\n  }\n}\n","import { Directive, ElementRef, Input, inject } from '@angular/core';\nimport { AXLoadingService } from './loading.service';\n\n// This directive places an overlay with a loading spinner over its host element\n// if isLoading equals to true and hides the overlay when isLoading becomes false.\n@Directive({ selector: '[axIsLoading]' })\nexport class AXLoadingDirective {\n  protected readonly elementRef = inject(ElementRef);\n  protected readonly loadingService = inject(AXLoadingService);\n\n  private _hostElement!: HTMLDivElement;\n  private _loadingRef!: number;\n\n  private _isLoading: boolean;\n\n  @Input('axIsLoading')\n  public get isLoading(): boolean {\n    return this._isLoading;\n  }\n  public set isLoading(v: boolean) {\n    this._isLoading = v;\n    if (v) {\n      this._loadingRef = this.loadingService.show({\n        location: this._hostElement,\n      });\n    } else {\n      this.loadingService.hide(this._loadingRef);\n    }\n  }\n\n  constructor() {\n    this._hostElement = this.elementRef.nativeElement;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { AXLoadingSpinnerComponent } from './loading-spinner.component';\nimport { AXLoadingComponent } from './loading.component';\nimport { AXLoadingDirective } from './loading.directive';\n\n@NgModule({\n  imports: [AXLoadingComponent, AXLoadingDirective, AXLoadingSpinnerComponent],\n  exports: [AXLoadingComponent, AXLoadingDirective, AXLoadingSpinnerComponent],\n})\nexport class AXLoadingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}