{"version":3,"file":"bootkit-ng1-components-button.mjs","sources":["../../../projects/ng1/components/button/button.directive.ts","../../../projects/ng1/components/button/button.module.ts","../../../projects/ng1/components/button/bootkit-ng1-components-button.ts"],"sourcesContent":["import { Directive, Renderer2, ElementRef, OnInit, input, DestroyRef, model, booleanAttribute, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpService } from '@bootkit/ng1/http';\n\n@Directive({\n  selector: 'button[ng1Button], a[ng1Button], input[type=button][ng1Button], input[type=submit][ng1Button], input[type=reset][ng1Button]',\n  exportAs: 'ng1Button',\n  standalone: true,\n  host: {\n    '[class.disabled]': 'disabled()',\n    '[attr.disabled]': 'disabled() ? \"\" : undefined',\n    '[attr.aria-disabled]': 'disabled() ? \"\" : undefined',\n    '[attr.tabindex]': 'disabled() ? \"-1\" : undefined',\n  }\n})\nexport class ButtonDirective implements OnInit {\n  private _loadingElement: any;\n  private _element = inject(ElementRef);\n  private _renderer = inject(Renderer2);\n  private _http = inject(HttpService);\n  private _destroyRef = inject(DestroyRef);\n\n  /**\n   * The IDs of the HTTP requests that this button listens to.\n   * If one of these requests is in progress, it will show a loading indicator or will be disabled based on 'showLoading' and 'disableOnLoading' properties.\n   */\n  public readonly request = input<string | string[] | undefined>(undefined);\n\n  /** \n   * Whether the button is disabled or not.\n   */\n  public readonly disabled = model(false);\n\n  /**\n   * Whether to wait for the HTTP response before enabling the button again.\n   * If true, the button will remain disabled until the HTTP request completes.\n   * This is useful for preventing multiple clicks while waiting for a response.\n   * Default is true.\n   */\n  public readonly disableDuringRequest = input(true, { transform: booleanAttribute });\n\n  /**\n   * Whether to show a loading indicator when the HTTP request is in progress.\n   * If true, a loading spinner will be displayed on the button while the request is being processed.\n   * Default is true.\n   */\n  public readonly loadingIndicator = input(false, { transform: booleanAttribute });\n\n  ngOnInit(): void {\n    this._renderer.setStyle(this._element.nativeElement, \"position\", \"relative\");\n\n    if (this.request()) {\n      this._http.events.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(e => {\n        var ids = (Array.isArray(this.request()) ? this.request() : [this.request()]) as string[];\n\n        if (ids.includes(e?.options?.id)) {\n          let requestInProgress = e.type === 'Send' || e.type === 'Progress';\n\n          if (this.disableDuringRequest()) {\n            this.disabled.set(requestInProgress);\n          }\n\n          if (this.loadingIndicator()) {\n            if (requestInProgress) {\n              this._showLoading();\n            } else {\n              this._hideLoading();\n            }\n          }\n        }\n      });\n    }\n  }\n\n  // @HostListener('click', ['$event']) private _onClick(e: MouseEvent): void {\n  //   if (!this._disabled) {\n  //   }\n  // }\n  private _showLoading() {\n    this._loadingElement = this._renderer.createElement(\"div\");\n    [\"spinner-grow\", \"spinner-grow-sm\", \"text-warning\"].forEach(s => this._renderer.addClass(this._loadingElement, s));\n    this._renderer.setStyle(this._loadingElement, \"position\", \"absolute\");\n    this._renderer.setStyle(this._loadingElement, \"top\", \"-25%\");\n    this._renderer.setStyle(this._loadingElement, \"left\", \"-5px\");\n    this._renderer.appendChild(this._element.nativeElement, this._loadingElement);\n  }\n\n  private _hideLoading() {\n    this._renderer.removeChild(this._element.nativeElement, this._loadingElement);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ButtonDirective } from './button.directive';\n\n@NgModule({\n  imports: [\n    ButtonDirective,\n  ],\n  exports: [\n    ButtonDirective,\n  ]\n})\nexport class ButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAea,eAAe,CAAA;AAClB,IAAA,eAAe;AACf,IAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3B,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAExC;;;AAGG;AACa,IAAA,OAAO,GAAG,KAAK,CAAgC,SAAS,mDAAC;AAEzE;;AAEG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AAEvC;;;;;AAKG;AACa,IAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAEnF;;;;AAIG;AACa,IAAA,gBAAgB,GAAG,KAAK,CAAC,KAAK,oDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IAEhF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;AAE5E,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACzE,gBAAA,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAa;gBAEzF,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE;AAChC,oBAAA,IAAI,iBAAiB,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;AAElE,oBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;AAC/B,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACtC;AAEA,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;wBAC3B,IAAI,iBAAiB,EAAE;4BACrB,IAAI,CAAC,YAAY,EAAE;wBACrB;6BAAO;4BACL,IAAI,CAAC,YAAY,EAAE;wBACrB;oBACF;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;IACF;;;;;IAMQ,YAAY,GAAA;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QAC1D,CAAC,cAAc,EAAE,iBAAiB,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AAClH,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;IAC/E;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC;IAC/E;wGA1EW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6HAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,eAAA,EAAA,iCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6HAA6H;AACvI,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,iBAAiB,EAAE,6BAA6B;AAChD,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,iBAAiB,EAAE,+BAA+B;AACnD;AACF,iBAAA;;;MCHY,YAAY,CAAA;wGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAZ,YAAY,EAAA,OAAA,EAAA,CANrB,eAAe,CAAA,EAAA,OAAA,EAAA,CAGf,eAAe,CAAA,EAAA,CAAA;yGAGN,YAAY,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBARxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,eAAe;AAChB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;AAChB;AACF,iBAAA;;;ACVD;;AAEG;;;;"}