UNPKG

ngxsmk-button-spinner

Version:

Directive to overlay a loading spinner on any button (Angular 17+).

68 lines (64 loc) 3.12 kB
import * as i0 from '@angular/core'; import { AfterViewInit, Signal, ElementRef, Renderer2 } from '@angular/core'; interface NgxSmkButtonSpinnerTheme { /** Spinner color (any CSS color). Default: currentColor */ color?: string; /** Spinner trail/track color. Default: transparent */ trackColor?: string; /** Border thickness. Default: 2px */ thickness?: string; /** Spinner size. Default: 1.2em */ size?: string; /** Animation speed in ms. Default: 700 */ speedMs?: number; /** Optional backdrop while loading (rgba recommended). Default: transparent */ dimOverlay?: string; /** Keep label text visible while loading (overlay mode). Default: false */ keepLabel?: boolean; } interface NgxSmkButtonSpinnerOptions { /** ARIA label for the spinner; default 'Loading' */ ariaLabel?: string; /** (future-proof) positioning mode; currently only 'overlay' */ mode?: 'overlay'; } declare class NgxSmkButtonSpinnerDirective implements AfterViewInit { private readonly el; private readonly renderer; /** loading: boolean | Signal<boolean> */ set ngxsmkButtonSpinner(v: boolean | Signal<boolean>); /** true → overlay/centered (hide label), false → inline after text */ set ngxsmkButtonSpinnerHideLabel(v: boolean | Signal<boolean>); /** a11y options (setter so we can update aria-label immediately) */ set ngxsmkButtonSpinnerOptions(v: NgxSmkButtonSpinnerOptions | undefined); /** THEME setter — push CSS vars immediately on every change */ set ngxsmkButtonSpinnerTheme(v: NgxSmkButtonSpinnerTheme | undefined); private spinnerEl; private labelEl; private overlayBoxEl; private readonly isBrowser; private _loadingSrc; private _hideSrc; private _theme; private _opts; constructor(el: ElementRef<HTMLElement>, renderer: Renderer2, platformId: object); ngAfterViewInit(): void; private read; private setLoading; /** Wrap all existing nodes so we can hide/show label reliably */ private ensureLabelWrapper; private applyLabelVisibility; private addSpinner; private removeSpinner; /** Create overlay box (grid centered) and move spinner inside it */ private ensureOverlayBox; private removeOverlayBox; /** Position spinner depending on mode */ private configureSpinnerLayout; private applyTheme; private ensureGlobalStyle; static ɵfac: i0.ɵɵFactoryDeclaration<NgxSmkButtonSpinnerDirective, never>; static ɵdir: i0.ɵɵDirectiveDeclaration<NgxSmkButtonSpinnerDirective, "[ngxsmkButtonSpinner]", never, { "ngxsmkButtonSpinner": { "alias": "ngxsmkButtonSpinner"; "required": false; }; "ngxsmkButtonSpinnerHideLabel": { "alias": "ngxsmkButtonSpinnerHideLabel"; "required": false; }; "ngxsmkButtonSpinnerOptions": { "alias": "ngxsmkButtonSpinnerOptions"; "required": false; }; "ngxsmkButtonSpinnerTheme": { "alias": "ngxsmkButtonSpinnerTheme"; "required": false; }; }, {}, never, never, true, never>; } export { NgxSmkButtonSpinnerDirective }; export type { NgxSmkButtonSpinnerOptions, NgxSmkButtonSpinnerTheme };