@datarailsshared/datarailsshared 1.6.316 → 1.6.318

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,31 @@
1
- import { Component, HostBinding, Input } from '@angular/core';
1
+ import { Component, ContentChild, HostBinding, Input, TemplateRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
+ function DrProgressBarComponent_ng_container_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
6
+ i0.ɵɵelementContainer(0);
7
+ } }
5
8
  function DrProgressBarComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
6
9
  i0.ɵɵelementContainerStart(0);
7
- i0.ɵɵtext(1);
10
+ i0.ɵɵtemplate(1, DrProgressBarComponent_ng_container_4_ng_container_1_Template, 1, 0, "ng-container", 5);
8
11
  i0.ɵɵelementContainerEnd();
9
12
  } if (rf & 2) {
10
13
  const ctx_r0 = i0.ɵɵnextContext();
14
+ const _r1 = i0.ɵɵreference(6);
15
+ let tmp_0_0;
11
16
  i0.ɵɵadvance(1);
12
- i0.ɵɵtextInterpolate1("", ctx_r0.progress || 0, "%");
17
+ i0.ɵɵproperty("ngTemplateOutlet", (tmp_0_0 = ctx_r0.customValueTemplate) !== null && tmp_0_0 !== undefined ? tmp_0_0 : _r1)("ngTemplateOutletContext", ctx_r0.valueTemplateContext);
18
+ } }
19
+ function DrProgressBarComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵtext(0);
21
+ } if (rf & 2) {
22
+ const progressPercent_r4 = ctx.progressPercent;
23
+ i0.ɵɵtextInterpolate1("", progressPercent_r4, "%");
13
24
  } }
14
25
  const _c0 = ["*"];
15
26
  export class DrProgressBarComponent {
16
27
  constructor() {
28
+ this.roundProgress = false;
17
29
  /**
18
30
  * Option to hide value label
19
31
  */
@@ -21,43 +33,104 @@ export class DrProgressBarComponent {
21
33
  this.theme = 'light';
22
34
  this.role = 'progressbar';
23
35
  this.ariaValueMin = 0;
24
- this.ariaValueMax = 100;
36
+ this._rawProgress = 0;
37
+ this._total = 100;
38
+ }
39
+ /**
40
+ * Progress value from 0 to total
41
+ */
42
+ set progress(value) {
43
+ this._rawProgress = this.clampNonNegativeNumber(value, 0);
44
+ }
45
+ get progress() {
46
+ return Math.min(this._rawProgress, this.total);
47
+ }
48
+ set total(value) {
49
+ this._total = this.clampNonNegativeNumber(value, 100);
50
+ }
51
+ get total() {
52
+ return this._total;
53
+ }
54
+ get ariaValueMax() {
55
+ return this.total;
25
56
  }
26
57
  get ariaValueNow() {
27
- return this.progress || 0;
58
+ return this.progress;
28
59
  }
29
60
  get ariaLabel() {
30
- const progressValue = this.progress || 0;
31
61
  if (this.customAriaLabel) {
32
- return `${this.customAriaLabel}: ${progressValue}% complete`;
62
+ return this.customAriaLabel
63
+ .replace(/\{progress\}/g, this.progress.toString())
64
+ .replace(/\{total\}/g, this.total.toString())
65
+ .replace(/\{progressPercent\}/g, this.progressPercent.toString());
66
+ }
67
+ return `Progress: ${this.progressPercent}% complete`;
68
+ }
69
+ get valueTemplateContext() {
70
+ return {
71
+ progress: this.progress,
72
+ total: this.total,
73
+ progressPercent: this.progressPercent,
74
+ };
75
+ }
76
+ get progressPercent() {
77
+ if (this.total <= 0) {
78
+ return 0;
33
79
  }
34
- return `Progress: ${progressValue}% complete`;
80
+ return this.clampProgress((this.progress / this.total) * 100);
81
+ }
82
+ clampProgress(value) {
83
+ if (Number.isNaN(value)) {
84
+ return 0;
85
+ }
86
+ const clampedValue = Math.min(100, Math.max(0, value));
87
+ return this.roundProgress ? Math.round(clampedValue) : clampedValue;
88
+ }
89
+ clampNonNegativeNumber(value, fallbackValue) {
90
+ const numericValue = typeof value === 'number' ? value : Number(value);
91
+ if (Number.isNaN(numericValue) || !Number.isFinite(numericValue)) {
92
+ return fallbackValue;
93
+ }
94
+ return Math.max(0, numericValue);
35
95
  }
36
96
  /** @nocollapse */ static { this.ɵfac = function DrProgressBarComponent_Factory(t) { return new (t || DrProgressBarComponent)(); }; }
37
- /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrProgressBarComponent, selectors: [["dr-progress-bar"]], hostVars: 7, hostBindings: function DrProgressBarComponent_HostBindings(rf, ctx) { if (rf & 2) {
97
+ /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrProgressBarComponent, selectors: [["dr-progress-bar"]], contentQueries: function DrProgressBarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
98
+ i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
99
+ } if (rf & 2) {
100
+ let _t;
101
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customValueTemplate = _t.first);
102
+ } }, hostVars: 7, hostBindings: function DrProgressBarComponent_HostBindings(rf, ctx) { if (rf & 2) {
38
103
  i0.ɵɵattribute("role", ctx.role)("aria-valuemin", ctx.ariaValueMin)("aria-valuemax", ctx.ariaValueMax)("aria-valuenow", ctx.ariaValueNow)("aria-label", ctx.ariaLabel);
39
104
  i0.ɵɵclassMap(ctx.theme);
40
- } }, inputs: { progress: "progress", showValue: "showValue", theme: "theme", customAriaLabel: ["aria-label", "customAriaLabel"] }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c0, decls: 5, vars: 3, consts: [["aria-hidden", "true", 1, "progress-bar__background"], [1, "progress-bar__background__fill"], ["aria-hidden", "true", 1, "progress-bar__value"], [4, "ngIf"]], template: function DrProgressBarComponent_Template(rf, ctx) { if (rf & 1) {
105
+ } }, inputs: { progress: "progress", total: "total", roundProgress: "roundProgress", showValue: "showValue", theme: "theme", customAriaLabel: ["aria-label", "customAriaLabel"] }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c0, decls: 7, vars: 3, consts: [["aria-hidden", "true", 1, "progress-bar__background"], [1, "progress-bar__background__fill"], ["aria-hidden", "true", 1, "progress-bar__value"], [4, "ngIf"], ["defaultValueTemplate", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function DrProgressBarComponent_Template(rf, ctx) { if (rf & 1) {
41
106
  i0.ɵɵprojectionDef();
42
107
  i0.ɵɵelementStart(0, "div", 0);
43
108
  i0.ɵɵelement(1, "div", 1);
44
109
  i0.ɵɵelementEnd();
45
110
  i0.ɵɵelementStart(2, "span", 2);
46
111
  i0.ɵɵprojection(3);
47
- i0.ɵɵtemplate(4, DrProgressBarComponent_ng_container_4_Template, 2, 1, "ng-container", 3);
112
+ i0.ɵɵtemplate(4, DrProgressBarComponent_ng_container_4_Template, 2, 2, "ng-container", 3);
48
113
  i0.ɵɵelementEnd();
114
+ i0.ɵɵtemplate(5, DrProgressBarComponent_ng_template_5_Template, 1, 1, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
49
115
  } if (rf & 2) {
50
116
  i0.ɵɵadvance(1);
51
- i0.ɵɵstyleProp("width", (ctx.progress || 0) + "%");
117
+ i0.ɵɵstyleProp("width", ctx.progressPercent + "%");
52
118
  i0.ɵɵadvance(3);
53
119
  i0.ɵɵproperty("ngIf", ctx.showValue);
54
- } }, dependencies: [CommonModule, i1.NgIf], styles: ["[_nghost-%COMP%]{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value[_ngcontent-%COMP%]{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__background[_ngcontent-%COMP%]{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill[_ngcontent-%COMP%]{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}.dark[_nghost-%COMP%] .progress-bar__value[_ngcontent-%COMP%]{color:#fff}"] }); }
120
+ } }, dependencies: [CommonModule, i1.NgIf, i1.NgTemplateOutlet], styles: ["[_nghost-%COMP%]{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value[_ngcontent-%COMP%]{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__value[_ngcontent-%COMP%]:empty{display:none}.progress-bar__background[_ngcontent-%COMP%]{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill[_ngcontent-%COMP%]{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}.dark[_nghost-%COMP%] .progress-bar__value[_ngcontent-%COMP%]{color:#fff}"] }); }
55
121
  }
56
122
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrProgressBarComponent, [{
57
123
  type: Component,
58
- args: [{ selector: 'dr-progress-bar', standalone: true, imports: [CommonModule], template: "<div class=\"progress-bar__background\" aria-hidden=\"true\">\n <div class=\"progress-bar__background__fill\" [style.width]=\"(progress || 0) + '%'\"></div>\n</div>\n<span class=\"progress-bar__value\" aria-hidden=\"true\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showValue\">{{ progress || 0 }}%</ng-container>\n</span>\n", styles: [":host{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__background{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}:host(.dark) .progress-bar__value{color:#fff}\n"] }]
124
+ args: [{ selector: 'dr-progress-bar', standalone: true, imports: [CommonModule], template: "<div class=\"progress-bar__background\" aria-hidden=\"true\">\n <div class=\"progress-bar__background__fill\" [style.width]=\"progressPercent + '%'\"></div>\n</div>\n<span class=\"progress-bar__value\" aria-hidden=\"true\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showValue\">\n <ng-container\n *ngTemplateOutlet=\"customValueTemplate ?? defaultValueTemplate; context: valueTemplateContext\"></ng-container>\n </ng-container>\n</span>\n<ng-template #defaultValueTemplate let-progressPercent=\"progressPercent\">{{ progressPercent }}%</ng-template>\n", styles: [":host{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__value:empty{display:none}.progress-bar__background{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}:host(.dark) .progress-bar__value{color:#fff}\n"] }]
59
125
  }], null, { progress: [{
60
126
  type: Input
127
+ }], total: [{
128
+ type: Input
129
+ }], roundProgress: [{
130
+ type: Input
131
+ }], customValueTemplate: [{
132
+ type: ContentChild,
133
+ args: [TemplateRef]
61
134
  }], showValue: [{
62
135
  type: Input
63
136
  }], theme: [{
@@ -84,4 +157,4 @@ export class DrProgressBarComponent {
84
157
  type: HostBinding,
85
158
  args: ['attr.aria-label']
86
159
  }] }); })();
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLXByb2dyZXNzLWJhci9kci1wcm9ncmVzcy1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItcHJvZ3Jlc3MtYmFyL2RyLXByb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0lDSTNDLDZCQUFnQztJQUFBLFlBQW9CO0lBQUEsMEJBQWU7OztJQUFuQyxlQUFvQjtJQUFwQixvREFBb0I7OztBRE94RCxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBY0k7O1dBRUc7UUFFSCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSWpCLFVBQUssR0FBc0IsT0FBTyxDQUFDO1FBUzFCLFNBQUksR0FBRyxhQUFhLENBQUM7UUFHckIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFHakIsaUJBQVksR0FBRyxHQUFHLENBQUM7S0FlL0I7SUFiRyxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUNJLFNBQVM7UUFDVCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxZQUFZLENBQUM7U0FDaEU7UUFDRCxPQUFPLGFBQWEsYUFBYSxZQUFZLENBQUM7SUFDbEQsQ0FBQzswR0E1Q1Esc0JBQXNCO21HQUF0QixzQkFBc0I7Ozs7O1lDWm5DLDhCQUF5RDtZQUNyRCx5QkFBd0Y7WUFDNUYsaUJBQU07WUFDTiwrQkFBcUQ7WUFDakQsa0JBQXlCO1lBQ3pCLHlGQUFtRTtZQUN2RSxpQkFBTzs7WUFMeUMsZUFBcUM7WUFBckMsa0RBQXFDO1lBSWxFLGVBQWU7WUFBZixvQ0FBZTs0QkRLcEIsWUFBWTs7dUZBRWIsc0JBQXNCO2NBUGxDLFNBQVM7MkJBQ0ksaUJBQWlCLGNBR2YsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDO2dCQU92QixRQUFRO2tCQURQLEtBQUs7WUFPTixTQUFTO2tCQURSLEtBQUs7WUFLTixLQUFLO2tCQUZKLEtBQUs7O2tCQUNMLFdBQVc7bUJBQUMsT0FBTztZQU9wQixlQUFlO2tCQURkLEtBQUs7bUJBQUMsWUFBWTtZQUlWLElBQUk7a0JBRFosV0FBVzttQkFBQyxXQUFXO1lBSWYsWUFBWTtrQkFEcEIsV0FBVzttQkFBQyxvQkFBb0I7WUFJeEIsWUFBWTtrQkFEcEIsV0FBVzttQkFBQyxvQkFBb0I7WUFJN0IsWUFBWTtrQkFEZixXQUFXO21CQUFDLG9CQUFvQjtZQU03QixTQUFTO2tCQURaLFdBQVc7bUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCB0eXBlIFRQcm9ncmVzc0JhclRoZW1lID0gJ2xpZ2h0JyB8ICdkYXJrJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1wcm9ncmVzcy1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kci1wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLXByb2dyZXNzLWJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIERyUHJvZ3Jlc3NCYXJDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIFByb2dyZXNzIHZhbHVlIGZyb20gMCB0byAxMDBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2dyZXNzPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogT3B0aW9uIHRvIGhpZGUgdmFsdWUgbGFiZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dWYWx1ZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHRoZW1lOiBUUHJvZ3Jlc3NCYXJUaGVtZSA9ICdsaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gYWNjZXNzaWJsZSBsYWJlbCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICAgKi9cbiAgICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICAgIGN1c3RvbUFyaWFMYWJlbD86IHN0cmluZztcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICByZWFkb25seSByb2xlID0gJ3Byb2dyZXNzYmFyJztcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbWluJylcbiAgICByZWFkb25seSBhcmlhVmFsdWVNaW4gPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKVxuICAgIHJlYWRvbmx5IGFyaWFWYWx1ZU1heCA9IDEwMDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JylcbiAgICBnZXQgYXJpYVZhbHVlTm93KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzIHx8IDA7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NWYWx1ZSA9IHRoaXMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jdXN0b21BcmlhTGFiZWx9OiAke3Byb2dyZXNzVmFsdWV9JSBjb21wbGV0ZWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBQcm9ncmVzczogJHtwcm9ncmVzc1ZhbHVlfSUgY29tcGxldGVgO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJfX2JhY2tncm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyX19iYWNrZ3JvdW5kX19maWxsXCIgW3N0eWxlLndpZHRoXT1cIihwcm9ncmVzcyB8fCAwKSArICclJ1wiPjwvZGl2PlxuPC9kaXY+XG48c3BhbiBjbGFzcz1cInByb2dyZXNzLWJhcl9fdmFsdWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dWYWx1ZVwiPnt7IHByb2dyZXNzIHx8IDAgfX0lPC9uZy1jb250YWluZXI+XG48L3NwYW4+XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLXByb2dyZXNzLWJhci9kci1wcm9ncmVzcy1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItcHJvZ3Jlc3MtYmFyL2RyLXByb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7SUNLdkMsd0JBQ2tIOzs7SUFGdEgsNkJBQWdDO0lBQzVCLHdHQUNrSDtJQUN0SCwwQkFBZTs7Ozs7SUFETixlQUErRDtJQUEvRCwySEFBK0Qsd0RBQUE7OztJQUdILFlBQXNCOzs7SUFBdEIsa0RBQXNCOzs7QURPL0YsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQTRCSSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUt0Qjs7V0FFRztRQUVILGNBQVMsR0FBRyxJQUFJLENBQUM7UUFJakIsVUFBSyxHQUFzQixPQUFPLENBQUM7UUFTMUIsU0FBSSxHQUFHLGFBQWEsQ0FBQztRQUdyQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQTBEbEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsV0FBTSxHQUFHLEdBQUcsQ0FBQztLQUN4QjtJQXpHRzs7T0FFRztJQUNILElBQ0ksUUFBUSxDQUFDLEtBQXlCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsSUFB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LGtEQUFxQztZQUlsRSxlQUFlO1lBQWYsb0NBQWU7NEJEVXBCLFlBQVk7O3VGQUViLHNCQUFzQjtjQVBsQyxTQUFTOzJCQUNJLGlCQUFpQixjQUdmLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQztnQkFPbkIsUUFBUTtrQkFEWCxLQUFLO1lBU0YsS0FBSztrQkFEUixLQUFLO1lBU04sYUFBYTtrQkFEWixLQUFLO1lBSU4sbUJBQW1CO2tCQURsQixZQUFZO21CQUFDLFdBQVc7WUFPekIsU0FBUztrQkFEUixLQUFLO1lBS04sS0FBSztrQkFGSixLQUFLOztrQkFDTCxXQUFXO21CQUFDLE9BQU87WUFPcEIsZUFBZTtrQkFEZCxLQUFLO21CQUFDLFlBQVk7WUFJVixJQUFJO2tCQURaLFdBQVc7bUJBQUMsV0FBVztZQUlmLFlBQVk7a0JBRHBCLFdBQVc7bUJBQUMsb0JBQW9CO1lBSTdCLFlBQVk7a0JBRGYsV0FBVzttQkFBQyxvQkFBb0I7WUFNN0IsWUFBWTtrQkFEZixXQUFXO21CQUFDLG9CQUFvQjtZQU03QixTQUFTO2tCQURaLFdBQVc7bUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCB0eXBlIFRQcm9ncmVzc0JhclRoZW1lID0gJ2xpZ2h0JyB8ICdkYXJrJztcbmV4cG9ydCB0eXBlIFRQcm9ncmVzc0JhclZhbHVlVGVtcGxhdGVDb250ZXh0ID0ge1xuICAgIHByb2dyZXNzOiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwcm9ncmVzc1BlcmNlbnQ6IG51bWJlcjtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItcHJvZ3Jlc3MtYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1wcm9ncmVzcy1iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBEclByb2dyZXNzQmFyQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBQcm9ncmVzcyB2YWx1ZSBmcm9tIDAgdG8gdG90YWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Jhd1Byb2dyZXNzID0gdGhpcy5jbGFtcE5vbk5lZ2F0aXZlTnVtYmVyKHZhbHVlLCAwKTtcbiAgICB9XG4gICAgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLl9yYXdQcm9ncmVzcywgdGhpcy50b3RhbCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgdG90YWwodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl90b3RhbCA9IHRoaXMuY2xhbXBOb25OZWdhdGl2ZU51bWJlcih2YWx1ZSwgMTAwKTtcbiAgICB9XG4gICAgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b3RhbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHJvdW5kUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXG4gICAgY3VzdG9tVmFsdWVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRQcm9ncmVzc0JhclZhbHVlVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIC8qKlxuICAgICAqIE9wdGlvbiB0byBoaWRlIHZhbHVlIGxhYmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93VmFsdWUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICB0aGVtZTogVFByb2dyZXNzQmFyVGhlbWUgPSAnbGlnaHQnO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGFjY2Vzc2libGUgbGFiZWwgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAgICovXG4gICAgQElucHV0KCdhcmlhLWxhYmVsJylcbiAgICBjdXN0b21BcmlhTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcmVhZG9ubHkgcm9sZSA9ICdwcm9ncmVzc2Jhcic7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpXG4gICAgcmVhZG9ubHkgYXJpYVZhbHVlTWluID0gMDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbWF4JylcbiAgICBnZXQgYXJpYVZhbHVlTWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JylcbiAgICBnZXQgYXJpYVZhbHVlTm93KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUFyaWFMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQXJpYUxhYmVsXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xce3Byb2dyZXNzXFx9L2csIHRoaXMucHJvZ3Jlc3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFx7dG90YWxcXH0vZywgdGhpcy50b3RhbC50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHtwcm9ncmVzc1BlcmNlbnRcXH0vZywgdGhpcy5wcm9ncmVzc1BlcmNlbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFByb2dyZXNzOiAke3RoaXMucHJvZ3Jlc3NQZXJjZW50fSUgY29tcGxldGVgO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZVRlbXBsYXRlQ29udGV4dCgpOiBUUHJvZ3Jlc3NCYXJWYWx1ZVRlbXBsYXRlQ29udGV4dCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9ncmVzczogdGhpcy5wcm9ncmVzcyxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLnRvdGFsLFxuICAgICAgICAgICAgcHJvZ3Jlc3NQZXJjZW50OiB0aGlzLnByb2dyZXNzUGVyY2VudCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXQgcHJvZ3Jlc3NQZXJjZW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhbXBQcm9ncmVzcygodGhpcy5wcm9ncmVzcyAvIHRoaXMudG90YWwpICogMTAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsYW1wUHJvZ3Jlc3ModmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYW1wZWRWYWx1ZSA9IE1hdGgubWluKDEwMCwgTWF0aC5tYXgoMCwgdmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91bmRQcm9ncmVzcyA/IE1hdGgucm91bmQoY2xhbXBlZFZhbHVlKSA6IGNsYW1wZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsYW1wTm9uTmVnYXRpdmVOdW1iZXIodmFsdWU6IHVua25vd24sIGZhbGxiYWNrVmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtZXJpY1ZhbHVlKSB8fCAhTnVtYmVyLmlzRmluaXRlKG51bWVyaWNWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIG51bWVyaWNWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmF3UHJvZ3Jlc3MgPSAwO1xuICAgIHByaXZhdGUgX3RvdGFsID0gMTAwO1xufVxuIiwiPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhcl9fYmFja2dyb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJfX2JhY2tncm91bmRfX2ZpbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NQZXJjZW50ICsgJyUnXCI+PC9kaXY+XG48L2Rpdj5cbjxzcGFuIGNsYXNzPVwicHJvZ3Jlc3MtYmFyX192YWx1ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1ZhbHVlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVmFsdWVUZW1wbGF0ZSA/PyBkZWZhdWx0VmFsdWVUZW1wbGF0ZTsgY29udGV4dDogdmFsdWVUZW1wbGF0ZUNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvc3Bhbj5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZhbHVlVGVtcGxhdGUgbGV0LXByb2dyZXNzUGVyY2VudD1cInByb2dyZXNzUGVyY2VudFwiPnt7IHByb2dyZXNzUGVyY2VudCB9fSU8L25nLXRlbXBsYXRlPlxuIl19
@@ -15183,18 +15183,30 @@ class DrGalleryComponent {
15183
15183
  args: ['carouselItem']
15184
15184
  }] }); })();
15185
15185
 
15186
+ function DrProgressBarComponent_ng_container_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
15187
+ i0.ɵɵelementContainer(0);
15188
+ } }
15186
15189
  function DrProgressBarComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
15187
15190
  i0.ɵɵelementContainerStart(0);
15188
- i0.ɵɵtext(1);
15191
+ i0.ɵɵtemplate(1, DrProgressBarComponent_ng_container_4_ng_container_1_Template, 1, 0, "ng-container", 5);
15189
15192
  i0.ɵɵelementContainerEnd();
15190
15193
  } if (rf & 2) {
15191
15194
  const ctx_r0 = i0.ɵɵnextContext();
15195
+ const _r1 = i0.ɵɵreference(6);
15196
+ let tmp_0_0;
15192
15197
  i0.ɵɵadvance(1);
15193
- i0.ɵɵtextInterpolate1("", ctx_r0.progress || 0, "%");
15198
+ i0.ɵɵproperty("ngTemplateOutlet", (tmp_0_0 = ctx_r0.customValueTemplate) !== null && tmp_0_0 !== undefined ? tmp_0_0 : _r1)("ngTemplateOutletContext", ctx_r0.valueTemplateContext);
15199
+ } }
15200
+ function DrProgressBarComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
15201
+ i0.ɵɵtext(0);
15202
+ } if (rf & 2) {
15203
+ const progressPercent_r4 = ctx.progressPercent;
15204
+ i0.ɵɵtextInterpolate1("", progressPercent_r4, "%");
15194
15205
  } }
15195
15206
  const _c0$m = ["*"];
15196
15207
  class DrProgressBarComponent {
15197
15208
  constructor() {
15209
+ this.roundProgress = false;
15198
15210
  /**
15199
15211
  * Option to hide value label
15200
15212
  */
@@ -15202,43 +15214,104 @@ class DrProgressBarComponent {
15202
15214
  this.theme = 'light';
15203
15215
  this.role = 'progressbar';
15204
15216
  this.ariaValueMin = 0;
15205
- this.ariaValueMax = 100;
15217
+ this._rawProgress = 0;
15218
+ this._total = 100;
15219
+ }
15220
+ /**
15221
+ * Progress value from 0 to total
15222
+ */
15223
+ set progress(value) {
15224
+ this._rawProgress = this.clampNonNegativeNumber(value, 0);
15225
+ }
15226
+ get progress() {
15227
+ return Math.min(this._rawProgress, this.total);
15228
+ }
15229
+ set total(value) {
15230
+ this._total = this.clampNonNegativeNumber(value, 100);
15231
+ }
15232
+ get total() {
15233
+ return this._total;
15234
+ }
15235
+ get ariaValueMax() {
15236
+ return this.total;
15206
15237
  }
15207
15238
  get ariaValueNow() {
15208
- return this.progress || 0;
15239
+ return this.progress;
15209
15240
  }
15210
15241
  get ariaLabel() {
15211
- const progressValue = this.progress || 0;
15212
15242
  if (this.customAriaLabel) {
15213
- return `${this.customAriaLabel}: ${progressValue}% complete`;
15243
+ return this.customAriaLabel
15244
+ .replace(/\{progress\}/g, this.progress.toString())
15245
+ .replace(/\{total\}/g, this.total.toString())
15246
+ .replace(/\{progressPercent\}/g, this.progressPercent.toString());
15247
+ }
15248
+ return `Progress: ${this.progressPercent}% complete`;
15249
+ }
15250
+ get valueTemplateContext() {
15251
+ return {
15252
+ progress: this.progress,
15253
+ total: this.total,
15254
+ progressPercent: this.progressPercent,
15255
+ };
15256
+ }
15257
+ get progressPercent() {
15258
+ if (this.total <= 0) {
15259
+ return 0;
15260
+ }
15261
+ return this.clampProgress((this.progress / this.total) * 100);
15262
+ }
15263
+ clampProgress(value) {
15264
+ if (Number.isNaN(value)) {
15265
+ return 0;
15266
+ }
15267
+ const clampedValue = Math.min(100, Math.max(0, value));
15268
+ return this.roundProgress ? Math.round(clampedValue) : clampedValue;
15269
+ }
15270
+ clampNonNegativeNumber(value, fallbackValue) {
15271
+ const numericValue = typeof value === 'number' ? value : Number(value);
15272
+ if (Number.isNaN(numericValue) || !Number.isFinite(numericValue)) {
15273
+ return fallbackValue;
15214
15274
  }
15215
- return `Progress: ${progressValue}% complete`;
15275
+ return Math.max(0, numericValue);
15216
15276
  }
15217
15277
  /** @nocollapse */ static { this.ɵfac = function DrProgressBarComponent_Factory(t) { return new (t || DrProgressBarComponent)(); }; }
15218
- /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrProgressBarComponent, selectors: [["dr-progress-bar"]], hostVars: 7, hostBindings: function DrProgressBarComponent_HostBindings(rf, ctx) { if (rf & 2) {
15278
+ /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrProgressBarComponent, selectors: [["dr-progress-bar"]], contentQueries: function DrProgressBarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
15279
+ i0.ɵɵcontentQuery(dirIndex, TemplateRef, 5);
15280
+ } if (rf & 2) {
15281
+ let _t;
15282
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customValueTemplate = _t.first);
15283
+ } }, hostVars: 7, hostBindings: function DrProgressBarComponent_HostBindings(rf, ctx) { if (rf & 2) {
15219
15284
  i0.ɵɵattribute("role", ctx.role)("aria-valuemin", ctx.ariaValueMin)("aria-valuemax", ctx.ariaValueMax)("aria-valuenow", ctx.ariaValueNow)("aria-label", ctx.ariaLabel);
15220
15285
  i0.ɵɵclassMap(ctx.theme);
15221
- } }, inputs: { progress: "progress", showValue: "showValue", theme: "theme", customAriaLabel: ["aria-label", "customAriaLabel"] }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c0$m, decls: 5, vars: 3, consts: [["aria-hidden", "true", 1, "progress-bar__background"], [1, "progress-bar__background__fill"], ["aria-hidden", "true", 1, "progress-bar__value"], [4, "ngIf"]], template: function DrProgressBarComponent_Template(rf, ctx) { if (rf & 1) {
15286
+ } }, inputs: { progress: "progress", total: "total", roundProgress: "roundProgress", showValue: "showValue", theme: "theme", customAriaLabel: ["aria-label", "customAriaLabel"] }, standalone: true, features: [i0.ɵɵStandaloneFeature], ngContentSelectors: _c0$m, decls: 7, vars: 3, consts: [["aria-hidden", "true", 1, "progress-bar__background"], [1, "progress-bar__background__fill"], ["aria-hidden", "true", 1, "progress-bar__value"], [4, "ngIf"], ["defaultValueTemplate", ""], [4, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function DrProgressBarComponent_Template(rf, ctx) { if (rf & 1) {
15222
15287
  i0.ɵɵprojectionDef();
15223
15288
  i0.ɵɵelementStart(0, "div", 0);
15224
15289
  i0.ɵɵelement(1, "div", 1);
15225
15290
  i0.ɵɵelementEnd();
15226
15291
  i0.ɵɵelementStart(2, "span", 2);
15227
15292
  i0.ɵɵprojection(3);
15228
- i0.ɵɵtemplate(4, DrProgressBarComponent_ng_container_4_Template, 2, 1, "ng-container", 3);
15293
+ i0.ɵɵtemplate(4, DrProgressBarComponent_ng_container_4_Template, 2, 2, "ng-container", 3);
15229
15294
  i0.ɵɵelementEnd();
15295
+ i0.ɵɵtemplate(5, DrProgressBarComponent_ng_template_5_Template, 1, 1, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
15230
15296
  } if (rf & 2) {
15231
15297
  i0.ɵɵadvance(1);
15232
- i0.ɵɵstyleProp("width", (ctx.progress || 0) + "%");
15298
+ i0.ɵɵstyleProp("width", ctx.progressPercent + "%");
15233
15299
  i0.ɵɵadvance(3);
15234
15300
  i0.ɵɵproperty("ngIf", ctx.showValue);
15235
- } }, dependencies: [CommonModule, i1$1.NgIf], styles: ["[_nghost-%COMP%]{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value[_ngcontent-%COMP%]{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__background[_ngcontent-%COMP%]{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill[_ngcontent-%COMP%]{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}.dark[_nghost-%COMP%] .progress-bar__value[_ngcontent-%COMP%]{color:#fff}"] }); }
15301
+ } }, dependencies: [CommonModule, i1$1.NgIf, i1$1.NgTemplateOutlet], styles: ["[_nghost-%COMP%]{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value[_ngcontent-%COMP%]{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__value[_ngcontent-%COMP%]:empty{display:none}.progress-bar__background[_ngcontent-%COMP%]{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill[_ngcontent-%COMP%]{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}.dark[_nghost-%COMP%] .progress-bar__value[_ngcontent-%COMP%]{color:#fff}"] }); }
15236
15302
  }
15237
15303
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrProgressBarComponent, [{
15238
15304
  type: Component,
15239
- args: [{ selector: 'dr-progress-bar', standalone: true, imports: [CommonModule], template: "<div class=\"progress-bar__background\" aria-hidden=\"true\">\n <div class=\"progress-bar__background__fill\" [style.width]=\"(progress || 0) + '%'\"></div>\n</div>\n<span class=\"progress-bar__value\" aria-hidden=\"true\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showValue\">{{ progress || 0 }}%</ng-container>\n</span>\n", styles: [":host{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__background{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}:host(.dark) .progress-bar__value{color:#fff}\n"] }]
15305
+ args: [{ selector: 'dr-progress-bar', standalone: true, imports: [CommonModule], template: "<div class=\"progress-bar__background\" aria-hidden=\"true\">\n <div class=\"progress-bar__background__fill\" [style.width]=\"progressPercent + '%'\"></div>\n</div>\n<span class=\"progress-bar__value\" aria-hidden=\"true\">\n <ng-content></ng-content>\n <ng-container *ngIf=\"showValue\">\n <ng-container\n *ngTemplateOutlet=\"customValueTemplate ?? defaultValueTemplate; context: valueTemplateContext\"></ng-container>\n </ng-container>\n</span>\n<ng-template #defaultValueTemplate let-progressPercent=\"progressPercent\">{{ progressPercent }}%</ng-template>\n", styles: [":host{display:flex;align-items:center;width:100%;gap:16px;height:6px}.progress-bar__value{display:flex;align-items:center;color:#333;font-size:14px;line-height:24px;font-weight:400}.progress-bar__value:empty{display:none}.progress-bar__background{display:flex;flex-grow:1;position:relative;background:#dfe0e3;border-radius:20px;height:inherit}.progress-bar__background__fill{transition:all .5s;position:absolute;left:0;top:0;width:0;height:100%;background:#4646ce;border-radius:20px}:host(.dark) .progress-bar__value{color:#fff}\n"] }]
15240
15306
  }], null, { progress: [{
15241
15307
  type: Input
15308
+ }], total: [{
15309
+ type: Input
15310
+ }], roundProgress: [{
15311
+ type: Input
15312
+ }], customValueTemplate: [{
15313
+ type: ContentChild,
15314
+ args: [TemplateRef]
15242
15315
  }], showValue: [{
15243
15316
  type: Input
15244
15317
  }], theme: [{