{"version":3,"file":"ea-controls-spinner.mjs","sources":["../../../projects/spinner/src/lib/spinner.component.ts","../../../projects/spinner/src/lib/spinner.service.ts","../../../projects/spinner/src/lib/spinner-template.directive.ts","../../../projects/spinner/src/ea-controls-spinner.ts"],"sourcesContent":["import { Component, signal, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SpinnerService } from './spinner.service';\r\n\r\nexport type SpinnerInto = {\r\n  status: boolean;\r\n  message?: string;\r\n};\r\n\r\n@Component({\r\n  selector: 'ea-spinner',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: `\r\n  @if (spinner.spinnerStatus().status) {\r\n    <div class=\"spinner-container\" [style.color]=\"color()\">\r\n\r\n      @if (template){\r\n        <ng-container *ngTemplateOutlet=\"template\" />\r\n      } @else {\r\n        <div class=\"spinner\" [style.border-left-color]=\"color()\"></div>\r\n      }\r\n\r\n      @if (spinner.spinnerStatus().message){\r\n        <div class=\"message\" >{{ spinner.spinnerStatus().message }}</div>\r\n      }\r\n    </div>\r\n  }`,\r\n  styleUrl: './spinner.component.css',\r\n})\r\nexport class SpinnerComponent {\r\n\r\n  color = signal(\"white\");\r\n  template: TemplateRef<any> | undefined;\r\n\r\n  constructor(public spinner: SpinnerService) { }\r\n}\r\n","import { ApplicationRef, ComponentFactoryResolver, ComponentRef, EnvironmentProviders, inject, Injectable, InjectionToken, Injector, makeEnvironmentProviders, OnDestroy, signal, TemplateRef } from \"@angular/core\";\r\nimport { SpinnerComponent, SpinnerInto } from \"./spinner.component\";\r\n\r\nexport const REPOSITORY_SPINNER_OPTIONS = new InjectionToken<SpinnerServiceOptions>('REPOSITORY_SPINNER_OPTIONS');\r\n\r\nexport interface SpinnerServiceOptions {\r\n  color?: string;\r\n}\r\n\r\nexport const provideEaSpinner = (options?: SpinnerServiceOptions): EnvironmentProviders => {\r\n\r\n  const defaultOptions: SpinnerServiceOptions = {\r\n    color: 'white'\r\n  }\r\n\r\n  return makeEnvironmentProviders([\r\n    {\r\n      provide: REPOSITORY_SPINNER_OPTIONS,\r\n      useValue: { ...defaultOptions, ...options }\r\n    },\r\n    {\r\n      provide: SpinnerService\r\n    }\r\n  ]);\r\n\r\n};\r\n\r\n@Injectable()\r\nexport class SpinnerService implements OnDestroy {\r\n  public spinnerStatus = signal<SpinnerInto>({ status: false });\r\n  public spinnerStatusObs$ = this.spinnerStatus;\r\n  private dialogComponentRef?: ComponentRef<SpinnerComponent>;\r\n  private options = inject(REPOSITORY_SPINNER_OPTIONS);\r\n\r\n  constructor(private componentFactoryResolver: ComponentFactoryResolver,\r\n    private appRef: ApplicationRef,\r\n    private injector: Injector) {\r\n\r\n    setTimeout(() => this.initComponentUI(), 0);\r\n  }\r\n\r\n  private initComponentUI() {\r\n    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(SpinnerComponent);\r\n\r\n    this.dialogComponentRef = componentFactory.create(this.injector);\r\n    this.dialogComponentRef.instance.color.set(this.options.color!);\r\n\r\n    this.appRef.attachView(this.dialogComponentRef.hostView);\r\n    const domElem = (this.dialogComponentRef.hostView as any).rootNodes[0] as HTMLElement;\r\n    document.body.appendChild(domElem);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.dialogComponentRef) {\r\n      this.appRef.detachView(this.dialogComponentRef.hostView);\r\n      this.dialogComponentRef.destroy();\r\n    }\r\n  }\r\n\r\n  show(message?: string): void {\r\n    this.spinnerStatus.set({ status: true, message });\r\n  }\r\n\r\n  hide(): void {\r\n    this.spinnerStatus.set({ status: false });\r\n  }\r\n\r\n  registerCustom(spinner: TemplateRef<any>) {\r\n    if (this.dialogComponentRef) {\r\n      this.dialogComponentRef.instance.template = spinner;\r\n    }\r\n  }\r\n\r\n  unregisterCustom() {\r\n    if (this.dialogComponentRef) {\r\n      this.dialogComponentRef.instance.template = undefined;\r\n    }\r\n  }\r\n\r\n}\r\n","import { Directive, OnInit, OnDestroy, TemplateRef } from \"@angular/core\";\r\nimport { SpinnerService } from \"./spinner.service\";\r\n\r\n@Directive({\r\n  selector: '[ea-spinner-template]',\r\n  standalone: true\r\n})\r\nexport class SpinnerTemplateDirective implements OnInit, OnDestroy {\r\n\r\n  constructor(private templateRef: TemplateRef<any>,\r\n    public spinner: SpinnerService\r\n  ) {\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.spinner.unregisterCustom();\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.spinner.registerCustom(this.templateRef);\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SpinnerService"],"mappings":"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"}