{"version":3,"file":"realsoft-reusable-components-progress-bar.mjs","sources":["../../../src/reusable-components/progress-bar/src/progress-bar.ts","../../../src/reusable-components/progress-bar/src/progress-bar.html","../../../src/reusable-components/progress-bar/realsoft-reusable-components-progress-bar.ts"],"sourcesContent":["import {\r\n    ChangeDetectionStrategy,\r\n    Component,\r\n    ViewEncapsulation,\r\n    ElementRef,\r\n    NgZone,\r\n    Input,\r\n    Output,\r\n    EventEmitter,\r\n    AfterViewInit,\r\n    OnDestroy,\r\n    ChangeDetectorRef,\r\n    InjectionToken,\r\n    inject,\r\n    numberAttribute,\r\n    ANIMATION_MODULE_TYPE,\r\n    Renderer2,\r\n    effect,\r\n    booleanAttribute,\r\n    computed,\r\n    } from '@angular/core';\r\n  import { Subscription } from 'rxjs';\r\n  \r\n  \r\n  //Last animation end data interface\r\n  \r\n  export interface ProgressAnimationEnd {\r\n    value: number;\r\n  }\r\n  \r\n  export interface RealsoftProgressBarDefaultOptions { \r\n    mode: ProgressBarMode; //Default Mode of the progress bar\r\n  }\r\n  \r\n  //Injection token that can be used to override the default options for `realsoft-progress-bar`\r\n  export const REALSOFT_PROGRESS_BAR_DEFAULT_OPTIONS = new InjectionToken<RealsoftProgressBarDefaultOptions>(\r\n    'REALSOFT_PROGRESS_BAR_DEFAULT_OPTIONS',\r\n  );\r\n  \r\n  export type ProgressBarMode = 'determinate' | 'indeterminate' | 'buffer' | 'query';\r\n    \r\n  @Component({\r\n      selector: 'realsoft-progress-bar',\r\n      exportAs: 'realsoftProgressBar',\r\n      templateUrl: './progress-bar.html',\r\n      styleUrl: './progress-bar.scss',\r\n      host: {\r\n        'class': 'realsoft-progress-bar realsoft-linear-progress',\r\n        '[class.realsoft-no-animation]': '_isNoopAnimations()',\r\n        '[class.realsoft-linear-progress-animation-ready]': '!_isNoopAnimations()',\r\n        '[class.realsoft-linear-progress-indeterminate]': 'isIndeterminate()',\r\n        'role': 'progressbar',\r\n        'aria-valuemin': '0',\r\n        'aria-valuemax': '100',\r\n        'tabindex': '-1',\r\n        '[attr.mode]': 'mode',\r\n        '[attr.aria-valuenow]': 'isIndeterminate() ? null : value',\r\n      },\r\n      changeDetection: ChangeDetectionStrategy.OnPush,\r\n      encapsulation: ViewEncapsulation.None,\r\n      standalone: true\r\n  })\r\n  export class RealsoftProgressBar implements AfterViewInit, OnDestroy {\r\n    readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef); //For accessing the host element. Readonly to ensure the reference cannot be reassigned thus improving code safety and predictability.\r\n    private _ngZone = inject(NgZone);\r\n    private _renderer = inject(Renderer2);\r\n    private _changeDetectorRef = inject(ChangeDetectorRef);\r\n    private _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\r\n    private _defaults = inject<RealsoftProgressBarDefaultOptions>(REALSOFT_PROGRESS_BAR_DEFAULT_OPTIONS, {optional: true});\r\n    private _cleanupTransitionEnd = new Subscription();\r\n  \r\n    _isNoopAnimations = computed(() => this._animationMode === 'NoopAnimations');\r\n    \r\n  \r\n    //Progress Bar Mode\r\n    private _mode : ProgressBarMode = 'determinate';\r\n    private _value = 0;\r\n    private _bufferValue = 0;\r\n  \r\n    constructor() {\r\n      effect(() => this._changeDetectorRef.markForCheck());\r\n  \r\n      if(this._defaults) {\r\n        this.mode = this._defaults.mode || this.mode\r\n      }\r\n    }\r\n  \r\n    ngAfterViewInit(): void {\r\n      this._ngZone.runOutsideAngular(() => {\r\n        this._cleanupTransitionEnd.add(\r\n          this._renderer.listen(this.elementRef.nativeElement, 'transitionend', this._onTransitionEnd)\r\n        )\r\n      })\r\n    }\r\n    \r\n  \r\n    //Mode of the progress bar\r\n    @Input()\r\n    get mode(): ProgressBarMode {\r\n      return this._mode;\r\n    }\r\n    set mode(value: ProgressBarMode) {\r\n      this._mode = value;\r\n    }\r\n  \r\n    isIndeterminate = computed(() => this.mode === 'indeterminate' || this.mode === 'query' );\r\n  \r\n    //Value of the progress bar, defaults to 0\r\n    @Input({transform: numberAttribute})\r\n    get value(): number {\r\n      return this._value;\r\n    }\r\n    set value(v: number) {\r\n      this._value = this.clampValue(v || 0)\r\n    }\r\n  \r\n    //Buffer Value of the progress bar, defaults to 0\r\n    @Input({transform: numberAttribute})\r\n    get bufferValue(): number {\r\n      return this._bufferValue;\r\n    }\r\n    set bufferValue(v: number) {\r\n      this._bufferValue = this.clampValue(v || 0);\r\n    }\r\n  \r\n    //Event emitted when animation of the progress bar completes.\r\n    @Output() readonly animationEnd = new EventEmitter<ProgressAnimationEnd>();\r\n  \r\n    //For styling purposes => Get the transform style based on the mode of the progress bar \r\n    getValueforBarTransform(): string {\r\n      return `scaleX(${this.isIndeterminate() ? 1 : this.value / 100})`;\r\n    }\r\n  \r\n    //Flex basis Getter for the progress bar when mode is set to buffer\r\n    getBufferFlexBasis(): string {\r\n      return `${this.mode === 'buffer' ? this.bufferValue : 100}%`;\r\n    }\r\n  \r\n    //Handling => transitionend events \r\n    private _onTransitionEnd = (event: TransitionEvent) => {\r\n      const target = event.target as HTMLElement;\r\n  \r\n      if(this.animationEnd.observers.length === 0 || !target?.classList.contains('realsoft-linear-progress__primary-bar')) return;\r\n  \r\n      if(this.mode === 'determinate' || this.mode === 'buffer') {\r\n        this._ngZone.run(() => this.animationEnd.next({value: this.value}));\r\n      }\r\n    }\r\n  \r\n    //For ensuring that a given number stays within a specified range => from min to max.\r\n    clampValue(value: number, min = 0, max = 100) {\r\n      const result = Math.min(value, max); //Ensures the value doesn't exceed max.\r\n      return Math.max(min, result);//Ensures the result doesn't go below the min value\r\n    }\r\n  \r\n    ngOnDestroy(): void {\r\n      this._cleanupTransitionEnd.unsubscribe();\r\n    }\r\n  }\r\n  ","<div class=\"realsoft-linear-progress__buffer\" aria-hidden=\"true\">\r\n    <div class=\"realsoft-linear-progress__buffer-bar\" [style.flex-basis]=\"getBufferFlexBasis()\"></div>\r\n    @if(mode === 'buffer') {\r\n        <div class=\"realsoft-linear-progress__buffer-dots\"></div>\r\n    }\r\n</div>\r\n\r\n<div class=\"realsoft-linear-progress__bar realsoft-linear-progress__primary-bar\" aria-hidden=\"true\" [style.transform]=\"getValueforBarTransform()\">\r\n    <span class=\"realsoft-linear-progress__bar-inner\"></span>\r\n</div>\r\n\r\n<div class=\"realsoft-linear-progress__bar realsoft-linear-progress__secondary-bar\" aria-hidden=\"true\">\r\n    <span class=\"realsoft-linear-progress__bar-inner\"></span>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAkCE;MACa,qCAAqC,GAAG,IAAI,cAAc,CACrE,uCAAuC,EACvC;MAyBW,mBAAmB,CAAA;AACrB,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAC1D,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9B,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/C,cAAc,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IACjE,SAAS,GAAG,MAAM,CAAoC,qCAAqC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAC/G,IAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,KAAK,gBAAgB,CAAC,CAAC;;IAIrE,KAAK,GAAqB,aAAa,CAAC;IACxC,MAAM,GAAG,CAAC,CAAC;IACX,YAAY,GAAG,CAAC,CAAC;AAEzB,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC;AAErD,QAAA,IAAG,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;SAC7C;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAC7F,CAAA;AACH,SAAC,CAAC,CAAA;KACH;;AAID,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,KAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAE,CAAC;;AAG1F,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;KACtC;;AAGD,IAAA,IACI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IACD,IAAI,WAAW,CAAC,CAAS,EAAA;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7C;;AAGkB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAwB,CAAC;;IAG3E,uBAAuB,GAAA;AACrB,QAAA,OAAO,UAAU,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC;KACnE;;IAGD,kBAAkB,GAAA;AAChB,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC;KAC9D;;AAGO,IAAA,gBAAgB,GAAG,CAAC,KAAsB,KAAI;AACpD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAE3C,QAAA,IAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YAAE,OAAO;AAE5H,QAAA,IAAG,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;YACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC;SACrE;AACH,KAAC,CAAA;;IAGD,UAAU,CAAC,KAAa,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAA;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAC9B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;KAC1C;uGA/FU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EA8CX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,eAAe,CASf,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,eAAe,kkBCrHtC,+tBAcA,EAAA,MAAA,EAAA,CAAA,6yOAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDgDe,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArB/B,SAAS;+BACI,uBAAuB,EAAA,QAAA,EACvB,qBAAqB,EAGzB,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,gDAAgD;AACzD,wBAAA,+BAA+B,EAAE,qBAAqB;AACtD,wBAAA,kDAAkD,EAAE,sBAAsB;AAC1E,wBAAA,gDAAgD,EAAE,mBAAmB;AACrE,wBAAA,MAAM,EAAE,aAAa;AACrB,wBAAA,eAAe,EAAE,GAAG;AACpB,wBAAA,eAAe,EAAE,KAAK;AACtB,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,aAAa,EAAE,MAAM;AACrB,wBAAA,sBAAsB,EAAE,kCAAkC;qBAC3D,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,cACzB,IAAI,EAAA,QAAA,EAAA,+tBAAA,EAAA,MAAA,EAAA,CAAA,6yOAAA,CAAA,EAAA,CAAA;wDAsCd,IAAI,EAAA,CAAA;sBADP,KAAK;gBAYF,KAAK,EAAA,CAAA;sBADR,KAAK;uBAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAA;gBAU/B,WAAW,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAA;gBAShB,YAAY,EAAA,CAAA;sBAA9B,MAAM;;;AE9HX;;AAEG;;;;"}