primeng 17.8.0 → 17.9.0

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.
Files changed (139) hide show
  1. package/buttongroup/buttongroup.d.ts +11 -0
  2. package/buttongroup/index.d.ts +5 -0
  3. package/buttongroup/public_api.d.ts +1 -0
  4. package/esm2022/autocomplete/autocomplete.mjs +11 -11
  5. package/esm2022/buttongroup/buttongroup.mjs +38 -0
  6. package/esm2022/buttongroup/primeng-buttongroup.mjs +5 -0
  7. package/esm2022/buttongroup/public_api.mjs +2 -0
  8. package/esm2022/calendar/calendar.mjs +9 -9
  9. package/esm2022/cascadeselect/cascadeselect.mjs +7 -7
  10. package/esm2022/dropdown/dropdown.mjs +9 -9
  11. package/esm2022/floatlabel/floatlabel.mjs +44 -0
  12. package/esm2022/floatlabel/primeng-floatlabel.mjs +5 -0
  13. package/esm2022/floatlabel/public_api.mjs +2 -0
  14. package/esm2022/iconfield/iconfield.mjs +44 -0
  15. package/esm2022/iconfield/primeng-iconfield.mjs +5 -0
  16. package/esm2022/iconfield/public_api.mjs +2 -0
  17. package/esm2022/inputicon/inputicon.mjs +38 -0
  18. package/esm2022/inputicon/primeng-inputicon.mjs +5 -0
  19. package/esm2022/inputicon/public_api.mjs +2 -0
  20. package/esm2022/inputnumber/inputnumber.interface.mjs +1 -1
  21. package/esm2022/inputnumber/inputnumber.mjs +27 -12
  22. package/esm2022/metergroup/metergroup.interface.mjs +2 -0
  23. package/esm2022/metergroup/metergroup.mjs +277 -0
  24. package/esm2022/metergroup/primeng-metergroup.mjs +5 -0
  25. package/esm2022/metergroup/public_api.mjs +3 -0
  26. package/esm2022/multiselect/multiselect.mjs +5 -5
  27. package/esm2022/password/password.mjs +3 -3
  28. package/esm2022/selectbutton/selectbutton.mjs +2 -2
  29. package/esm2022/table/table.mjs +5 -5
  30. package/esm2022/tabmenu/tabmenu.mjs +11 -3
  31. package/esm2022/togglebutton/togglebutton.mjs +2 -2
  32. package/esm2022/treeselect/treeselect.mjs +7 -7
  33. package/esm2022/utils/objectutils.mjs +2 -2
  34. package/fesm2022/primeng-autocomplete.mjs +10 -10
  35. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  36. package/fesm2022/primeng-buttongroup.mjs +45 -0
  37. package/fesm2022/primeng-buttongroup.mjs.map +1 -0
  38. package/fesm2022/primeng-calendar.mjs +8 -8
  39. package/fesm2022/primeng-calendar.mjs.map +1 -1
  40. package/fesm2022/primeng-cascadeselect.mjs +6 -6
  41. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  42. package/fesm2022/primeng-dropdown.mjs +8 -8
  43. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  44. package/fesm2022/primeng-floatlabel.mjs +51 -0
  45. package/fesm2022/primeng-floatlabel.mjs.map +1 -0
  46. package/fesm2022/primeng-iconfield.mjs +51 -0
  47. package/fesm2022/primeng-iconfield.mjs.map +1 -0
  48. package/fesm2022/primeng-inputicon.mjs +45 -0
  49. package/fesm2022/primeng-inputicon.mjs.map +1 -0
  50. package/fesm2022/primeng-inputnumber.mjs +26 -11
  51. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  52. package/fesm2022/primeng-metergroup.mjs +284 -0
  53. package/fesm2022/primeng-metergroup.mjs.map +1 -0
  54. package/fesm2022/primeng-multiselect.mjs +4 -4
  55. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  56. package/fesm2022/primeng-password.mjs +2 -2
  57. package/fesm2022/primeng-password.mjs.map +1 -1
  58. package/fesm2022/primeng-selectbutton.mjs +2 -2
  59. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  60. package/fesm2022/primeng-table.mjs +4 -4
  61. package/fesm2022/primeng-table.mjs.map +1 -1
  62. package/fesm2022/primeng-tabmenu.mjs +10 -2
  63. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  64. package/fesm2022/primeng-togglebutton.mjs +2 -2
  65. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  66. package/fesm2022/primeng-treeselect.mjs +6 -6
  67. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  68. package/fesm2022/primeng-utils.mjs +1 -1
  69. package/fesm2022/primeng-utils.mjs.map +1 -1
  70. package/floatlabel/floatlabel.d.ts +17 -0
  71. package/floatlabel/index.d.ts +5 -0
  72. package/floatlabel/public_api.d.ts +1 -0
  73. package/iconfield/iconfield.d.ts +25 -0
  74. package/iconfield/index.d.ts +5 -0
  75. package/iconfield/public_api.d.ts +1 -0
  76. package/inputicon/index.d.ts +5 -0
  77. package/inputicon/inputicon.d.ts +21 -0
  78. package/inputicon/public_api.d.ts +1 -0
  79. package/inputnumber/inputnumber.d.ts +3 -2
  80. package/inputnumber/inputnumber.interface.d.ts +1 -1
  81. package/metergroup/index.d.ts +5 -0
  82. package/metergroup/metergroup.d.ts +101 -0
  83. package/metergroup/metergroup.interface.d.ts +106 -0
  84. package/metergroup/public_api.d.ts +2 -0
  85. package/package.json +146 -116
  86. package/resources/components/button/button.css +32 -9
  87. package/resources/components/iconfield/iconfield.css +5 -0
  88. package/resources/components/inputicon/inputicon.css +6 -0
  89. package/resources/primeng.css +32 -9
  90. package/resources/primeng.min.css +1 -1
  91. package/resources/themes/arya-blue/theme.css +129 -0
  92. package/resources/themes/arya-green/theme.css +129 -0
  93. package/resources/themes/arya-orange/theme.css +129 -0
  94. package/resources/themes/arya-purple/theme.css +129 -0
  95. package/resources/themes/bootstrap4-dark-blue/theme.css +129 -0
  96. package/resources/themes/bootstrap4-dark-purple/theme.css +129 -0
  97. package/resources/themes/bootstrap4-light-blue/theme.css +129 -0
  98. package/resources/themes/bootstrap4-light-purple/theme.css +129 -0
  99. package/resources/themes/fluent-light/theme.css +129 -0
  100. package/resources/themes/lara-dark-blue/theme.css +129 -0
  101. package/resources/themes/lara-dark-indigo/theme.css +129 -0
  102. package/resources/themes/lara-dark-purple/theme.css +129 -0
  103. package/resources/themes/lara-dark-teal/theme.css +129 -0
  104. package/resources/themes/lara-light-blue/theme.css +129 -0
  105. package/resources/themes/lara-light-indigo/theme.css +129 -0
  106. package/resources/themes/lara-light-purple/theme.css +129 -0
  107. package/resources/themes/lara-light-teal/theme.css +129 -0
  108. package/resources/themes/luna-amber/theme.css +129 -0
  109. package/resources/themes/luna-blue/theme.css +129 -0
  110. package/resources/themes/luna-green/theme.css +129 -0
  111. package/resources/themes/luna-pink/theme.css +129 -0
  112. package/resources/themes/md-dark-deeppurple/theme.css +129 -0
  113. package/resources/themes/md-dark-indigo/theme.css +129 -0
  114. package/resources/themes/md-light-deeppurple/theme.css +129 -0
  115. package/resources/themes/md-light-indigo/theme.css +129 -0
  116. package/resources/themes/mdc-dark-deeppurple/theme.css +129 -0
  117. package/resources/themes/mdc-dark-indigo/theme.css +129 -0
  118. package/resources/themes/mdc-light-deeppurple/theme.css +129 -0
  119. package/resources/themes/mdc-light-indigo/theme.css +129 -0
  120. package/resources/themes/mira/theme.css +129 -0
  121. package/resources/themes/nano/theme.css +129 -0
  122. package/resources/themes/nova/theme.css +129 -0
  123. package/resources/themes/nova-accent/theme.css +129 -0
  124. package/resources/themes/nova-alt/theme.css +129 -0
  125. package/resources/themes/rhea/theme.css +129 -0
  126. package/resources/themes/saga-blue/theme.css +129 -0
  127. package/resources/themes/saga-green/theme.css +129 -0
  128. package/resources/themes/saga-orange/theme.css +129 -0
  129. package/resources/themes/saga-purple/theme.css +129 -0
  130. package/resources/themes/soho-dark/theme.css +129 -0
  131. package/resources/themes/soho-light/theme.css +129 -0
  132. package/resources/themes/tailwind-light/theme.css +129 -0
  133. package/resources/themes/vela-blue/theme.css +129 -0
  134. package/resources/themes/vela-green/theme.css +129 -0
  135. package/resources/themes/vela-orange/theme.css +129 -0
  136. package/resources/themes/vela-purple/theme.css +129 -0
  137. package/resources/themes/viva-dark/theme.css +129 -0
  138. package/resources/themes/viva-light/theme.css +129 -0
  139. package/tabmenu/tabmenu.d.ts +3 -1
@@ -0,0 +1,284 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, forwardRef, Component, Input, ContentChildren, viewChild, ElementRef, effect, ChangeDetectionStrategy, ViewEncapsulation, NgModule } from '@angular/core';
5
+ import { PrimeTemplate, SharedModule } from 'primeng/api';
6
+ import { DomHandler } from 'primeng/dom';
7
+
8
+ class MeterGroupLabel {
9
+ value = null;
10
+ labelPosition = 'end';
11
+ labelOrientation = 'horizontal';
12
+ min;
13
+ max;
14
+ iconTemplate;
15
+ templates;
16
+ get labelClass() {
17
+ return {
18
+ 'p-metergroup-labels p-component': true,
19
+ 'p-metergroup-labels-vertical': this.labelOrientation === 'vertical',
20
+ 'p-metergroup-labels-horizontal': this.labelOrientation === 'horizontal'
21
+ };
22
+ }
23
+ parentInstance = inject(forwardRef(() => MeterGroup));
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupLabel, deps: [], target: i0.ɵɵFactoryTarget.Component });
25
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type: MeterGroupLabel, selector: "p-meterGroupLabel", inputs: { value: "value", labelPosition: "labelPosition", labelOrientation: "labelOrientation", min: "min", max: "max", iconTemplate: "iconTemplate" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], ngImport: i0, template: `
26
+ <ol [ngClass]="labelClass">
27
+ <li *ngFor="let labelItem of value; let index = index; trackBy: parentInstance.trackByFn" class="p-metergroup-label">
28
+ <ng-container *ngIf="!iconTemplate">
29
+ <i *ngIf="labelItem.icon" [class]="labelItem.icon" [ngClass]="{ 'p-metergroup-label-icon': true }" [ngStyle]="{ color: labelItem.color }"></i>
30
+ <span *ngIf="!labelItem.icon" class="p-metergroup-label-marker" [ngStyle]="{ backgroundColor: labelItem.color }"></span>
31
+ </ng-container>
32
+ <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: labelItem, icon: labelItem.icon }"></ng-container>
33
+ <span class="p-metergroup-label-text">{{ labelItem.label }} ({{ parentInstance?.percentValue(labelItem.value) }})</span>
34
+ </li>
35
+ </ol>
36
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupLabel, decorators: [{
39
+ type: Component,
40
+ args: [{
41
+ selector: 'p-meterGroupLabel',
42
+ template: `
43
+ <ol [ngClass]="labelClass">
44
+ <li *ngFor="let labelItem of value; let index = index; trackBy: parentInstance.trackByFn" class="p-metergroup-label">
45
+ <ng-container *ngIf="!iconTemplate">
46
+ <i *ngIf="labelItem.icon" [class]="labelItem.icon" [ngClass]="{ 'p-metergroup-label-icon': true }" [ngStyle]="{ color: labelItem.color }"></i>
47
+ <span *ngIf="!labelItem.icon" class="p-metergroup-label-marker" [ngStyle]="{ backgroundColor: labelItem.color }"></span>
48
+ </ng-container>
49
+ <ng-container *ngTemplateOutlet="iconTemplate; context: { $implicit: labelItem, icon: labelItem.icon }"></ng-container>
50
+ <span class="p-metergroup-label-text">{{ labelItem.label }} ({{ parentInstance?.percentValue(labelItem.value) }})</span>
51
+ </li>
52
+ </ol>
53
+ `
54
+ }]
55
+ }], propDecorators: { value: [{
56
+ type: Input
57
+ }], labelPosition: [{
58
+ type: Input
59
+ }], labelOrientation: [{
60
+ type: Input
61
+ }], min: [{
62
+ type: Input
63
+ }], max: [{
64
+ type: Input
65
+ }], iconTemplate: [{
66
+ type: Input
67
+ }], templates: [{
68
+ type: ContentChildren,
69
+ args: [PrimeTemplate]
70
+ }] } });
71
+ /**
72
+ * MeterGroup displays scalar measurements within a known range.
73
+ * @group Components
74
+ */
75
+ class MeterGroup {
76
+ /**
77
+ * Current value of the metergroup.
78
+ * @group Props
79
+ */
80
+ value;
81
+ /**
82
+ * Mininum boundary value.
83
+ * @group Props
84
+ */
85
+ min = 0;
86
+ /**
87
+ * Maximum boundary value.
88
+ * @group Props
89
+ */
90
+ max = 100;
91
+ /**
92
+ * Specifies the layout of the component, valid values are 'horizontal' and 'vertical'.
93
+ * @group Props
94
+ */
95
+ orientation = 'horizontal';
96
+ /**
97
+ * Specifies the label position of the component, valid values are 'start' and 'end'.
98
+ * @group Props
99
+ */
100
+ labelPosition = 'end';
101
+ /**
102
+ * Specifies the label orientation of the component, valid values are 'horizontal' and 'vertical'.
103
+ * @group Props
104
+ */
105
+ labelOrientation = 'horizontal';
106
+ /**
107
+ * Inline style of the element.
108
+ * @group Props
109
+ */
110
+ style;
111
+ /**
112
+ * Style class of the element.
113
+ * @group Props
114
+ */
115
+ styleClass;
116
+ templates;
117
+ get vertical() {
118
+ return this.orientation === 'vertical';
119
+ }
120
+ get containerClass() {
121
+ return {
122
+ 'p-metergroup p-component': true,
123
+ 'p-metergroup-horizontal': this.orientation === 'horizontal',
124
+ 'p-metergroup-vertical': this.orientation === 'vertical'
125
+ };
126
+ }
127
+ labelTemplate;
128
+ meterTemplate;
129
+ endTemplate;
130
+ startTemplate;
131
+ iconTemplate;
132
+ container = viewChild('container', { read: ElementRef });
133
+ containerEffect = effect(() => {
134
+ const _container = this.container();
135
+ const height = DomHandler.getOuterHeight(_container.nativeElement);
136
+ this.vertical && (this.container().nativeElement.style.height = height + 'px');
137
+ });
138
+ ngAfterContentInit() {
139
+ this.templates?.forEach((item) => {
140
+ switch (item.getType()) {
141
+ case 'label':
142
+ this.labelTemplate = item.template;
143
+ break;
144
+ case 'meter':
145
+ this.meterTemplate = item.template;
146
+ break;
147
+ case 'icon':
148
+ this.iconTemplate = item.template;
149
+ break;
150
+ case 'start':
151
+ this.startTemplate = item.template;
152
+ break;
153
+ case 'end':
154
+ this.endTemplate = item.template;
155
+ break;
156
+ default:
157
+ break;
158
+ }
159
+ });
160
+ }
161
+ percent(meter = 0) {
162
+ const percentOfItem = ((meter - this.min) / (this.max - this.min)) * 100;
163
+ return Math.round(Math.max(0, Math.min(100, percentOfItem)));
164
+ }
165
+ percentValue(meter) {
166
+ return this.percent(meter) + '%';
167
+ }
168
+ meterStyle(val) {
169
+ return {
170
+ backgroundColor: val.color,
171
+ width: this.orientation === 'horizontal' && this.percentValue(val.value),
172
+ height: this.orientation === 'vertical' && this.percentValue(val.value)
173
+ };
174
+ }
175
+ totalPercent() {
176
+ return this.percent(this.value.reduce((total, val) => total + val.value, 0));
177
+ }
178
+ percentages() {
179
+ let sum = 0;
180
+ const sumsArray = [];
181
+ this.value.forEach((item) => {
182
+ sum += item.value;
183
+ sumsArray.push(sum);
184
+ });
185
+ return sumsArray;
186
+ }
187
+ trackByFn(index) {
188
+ return index;
189
+ }
190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: MeterGroup, selector: "p-meterGroup", inputs: { value: "value", min: "min", max: "max", orientation: "orientation", labelPosition: "labelPosition", labelOrientation: "labelOrientation", style: "style", styleClass: "styleClass" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
192
+ <div #container [ngClass]="containerClass" role="meter" [attr.aria-valuemin]="min" [attr.aria-valuemax]="max" [attr.aria-valuenow]="totalPercent()" [ngStyle]="style" [class]="styleClass">
193
+ @if(labelPosition ==='start') {
194
+ <p-meterGroupLabel *ngIf="!labelTemplate" [value]="value" [labelPosition]="labelPosition" [labelOrientation]="labelOrientation" [min]="min" [max]="max" [iconTemplate]="iconTemplate" />
195
+ <ng-container *ngTemplateOutlet="labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
196
+ }
197
+ <ng-container *ngTemplateOutlet="startTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
198
+ <div class="p-metergroup-meters">
199
+ <ng-container *ngFor="let meterItem of value; let index = index; trackBy: trackByFn">
200
+ <ng-container *ngTemplateOutlet="meterTemplate; context: { $implicit: meterItem, index: index, orientation: this.orientation, class: 'p-metergroup-meter', size: percentValue(meterItem.value), totalPercent: totalPercent() }">
201
+ </ng-container>
202
+ <ng-container *ngIf="!meterTemplate">
203
+ <span class="p-metergroup-meter" [ngStyle]="meterStyle(meterItem)"></span>
204
+ </ng-container>
205
+ </ng-container>
206
+ </div>
207
+ <ng-container *ngTemplateOutlet="endTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
208
+ @if(labelPosition === 'end') {
209
+ <p-meterGroupLabel *ngIf="!labelTemplate" [value]="value" [labelPosition]="labelPosition" [labelOrientation]="labelOrientation" [min]="min" [max]="max" [iconTemplate]="iconTemplate" />
210
+ <ng-container *ngTemplateOutlet="labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
211
+ }
212
+ </div>
213
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: MeterGroupLabel, selector: "p-meterGroupLabel", inputs: ["value", "labelPosition", "labelOrientation", "min", "max", "iconTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroup, decorators: [{
216
+ type: Component,
217
+ args: [{
218
+ selector: 'p-meterGroup',
219
+ template: `
220
+ <div #container [ngClass]="containerClass" role="meter" [attr.aria-valuemin]="min" [attr.aria-valuemax]="max" [attr.aria-valuenow]="totalPercent()" [ngStyle]="style" [class]="styleClass">
221
+ @if(labelPosition ==='start') {
222
+ <p-meterGroupLabel *ngIf="!labelTemplate" [value]="value" [labelPosition]="labelPosition" [labelOrientation]="labelOrientation" [min]="min" [max]="max" [iconTemplate]="iconTemplate" />
223
+ <ng-container *ngTemplateOutlet="labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
224
+ }
225
+ <ng-container *ngTemplateOutlet="startTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
226
+ <div class="p-metergroup-meters">
227
+ <ng-container *ngFor="let meterItem of value; let index = index; trackBy: trackByFn">
228
+ <ng-container *ngTemplateOutlet="meterTemplate; context: { $implicit: meterItem, index: index, orientation: this.orientation, class: 'p-metergroup-meter', size: percentValue(meterItem.value), totalPercent: totalPercent() }">
229
+ </ng-container>
230
+ <ng-container *ngIf="!meterTemplate">
231
+ <span class="p-metergroup-meter" [ngStyle]="meterStyle(meterItem)"></span>
232
+ </ng-container>
233
+ </ng-container>
234
+ </div>
235
+ <ng-container *ngTemplateOutlet="endTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
236
+ @if(labelPosition === 'end') {
237
+ <p-meterGroupLabel *ngIf="!labelTemplate" [value]="value" [labelPosition]="labelPosition" [labelOrientation]="labelOrientation" [min]="min" [max]="max" [iconTemplate]="iconTemplate" />
238
+ <ng-container *ngTemplateOutlet="labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }"></ng-container>
239
+ }
240
+ </div>
241
+ `,
242
+ changeDetection: ChangeDetectionStrategy.OnPush,
243
+ encapsulation: ViewEncapsulation.None
244
+ }]
245
+ }], propDecorators: { value: [{
246
+ type: Input
247
+ }], min: [{
248
+ type: Input
249
+ }], max: [{
250
+ type: Input
251
+ }], orientation: [{
252
+ type: Input
253
+ }], labelPosition: [{
254
+ type: Input
255
+ }], labelOrientation: [{
256
+ type: Input
257
+ }], style: [{
258
+ type: Input
259
+ }], styleClass: [{
260
+ type: Input
261
+ }], templates: [{
262
+ type: ContentChildren,
263
+ args: [PrimeTemplate]
264
+ }] } });
265
+ class MeterGroupModule {
266
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
267
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupModule, declarations: [MeterGroup, MeterGroupLabel], imports: [CommonModule, SharedModule], exports: [MeterGroup, SharedModule] });
268
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupModule, imports: [CommonModule, SharedModule, SharedModule] });
269
+ }
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MeterGroupModule, decorators: [{
271
+ type: NgModule,
272
+ args: [{
273
+ imports: [CommonModule, SharedModule],
274
+ exports: [MeterGroup, SharedModule],
275
+ declarations: [MeterGroup, MeterGroupLabel]
276
+ }]
277
+ }] });
278
+
279
+ /**
280
+ * Generated bundle index. Do not edit.
281
+ */
282
+
283
+ export { MeterGroup, MeterGroupLabel, MeterGroupModule };
284
+ //# sourceMappingURL=primeng-metergroup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primeng-metergroup.mjs","sources":["../../src/app/components/metergroup/metergroup.ts","../../src/app/components/metergroup/primeng-metergroup.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, Input, NgModule, QueryList, TemplateRef, ViewChild, ViewEncapsulation, effect, forwardRef, inject, viewChild } from '@angular/core';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { DomHandler } from 'primeng/dom';\nimport { MeterItem } from './metergroup.interface';\n\n@Component({\n selector: 'p-meterGroupLabel',\n template: `\n <ol [ngClass]=\"labelClass\">\n <li *ngFor=\"let labelItem of value; let index = index; trackBy: parentInstance.trackByFn\" class=\"p-metergroup-label\">\n <ng-container *ngIf=\"!iconTemplate\">\n <i *ngIf=\"labelItem.icon\" [class]=\"labelItem.icon\" [ngClass]=\"{ 'p-metergroup-label-icon': true }\" [ngStyle]=\"{ color: labelItem.color }\"></i>\n <span *ngIf=\"!labelItem.icon\" class=\"p-metergroup-label-marker\" [ngStyle]=\"{ backgroundColor: labelItem.color }\"></span>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: labelItem, icon: labelItem.icon }\"></ng-container>\n <span class=\"p-metergroup-label-text\">{{ labelItem.label }} ({{ parentInstance?.percentValue(labelItem.value) }})</span>\n </li>\n </ol>\n `\n})\nexport class MeterGroupLabel {\n @Input() value: any[] = null;\n\n @Input() labelPosition: 'start' | 'end' = 'end';\n\n @Input() labelOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() iconTemplate: TemplateRef<any> | undefined;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n get labelClass(): { [key: string]: boolean } {\n return {\n 'p-metergroup-labels p-component': true,\n 'p-metergroup-labels-vertical': this.labelOrientation === 'vertical',\n 'p-metergroup-labels-horizontal': this.labelOrientation === 'horizontal'\n };\n }\n\n parentInstance: MeterGroup = inject(forwardRef(() => MeterGroup));\n}\n/**\n * MeterGroup displays scalar measurements within a known range.\n * @group Components\n */\n@Component({\n selector: 'p-meterGroup',\n template: `\n <div #container [ngClass]=\"containerClass\" role=\"meter\" [attr.aria-valuemin]=\"min\" [attr.aria-valuemax]=\"max\" [attr.aria-valuenow]=\"totalPercent()\" [ngStyle]=\"style\" [class]=\"styleClass\">\n @if(labelPosition ==='start') {\n <p-meterGroupLabel *ngIf=\"!labelTemplate\" [value]=\"value\" [labelPosition]=\"labelPosition\" [labelOrientation]=\"labelOrientation\" [min]=\"min\" [max]=\"max\" [iconTemplate]=\"iconTemplate\" />\n <ng-container *ngTemplateOutlet=\"labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"startTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n <div class=\"p-metergroup-meters\">\n <ng-container *ngFor=\"let meterItem of value; let index = index; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"meterTemplate; context: { $implicit: meterItem, index: index, orientation: this.orientation, class: 'p-metergroup-meter', size: percentValue(meterItem.value), totalPercent: totalPercent() }\">\n </ng-container>\n <ng-container *ngIf=\"!meterTemplate\">\n <span class=\"p-metergroup-meter\" [ngStyle]=\"meterStyle(meterItem)\"></span>\n </ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"endTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n @if(labelPosition === 'end') {\n <p-meterGroupLabel *ngIf=\"!labelTemplate\" [value]=\"value\" [labelPosition]=\"labelPosition\" [labelOrientation]=\"labelOrientation\" [min]=\"min\" [max]=\"max\" [iconTemplate]=\"iconTemplate\" />\n <ng-container *ngTemplateOutlet=\"labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class MeterGroup implements AfterContentInit {\n /**\n * Current value of the metergroup.\n * @group Props\n */\n @Input() value: MeterItem[] | undefined;\n /**\n * Mininum boundary value.\n * @group Props\n */\n @Input() min: number = 0;\n /**\n * Maximum boundary value.\n * @group Props\n */\n @Input() max: number = 100;\n /**\n * Specifies the layout of the component, valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n /**\n * Specifies the label position of the component, valid values are 'start' and 'end'.\n * @group Props\n */\n @Input() labelPosition: 'start' | 'end' = 'end';\n /**\n * Specifies the label orientation of the component, valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n @Input() labelOrientation: string = 'horizontal';\n /**\n * Inline style of the element.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the element.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n get vertical(): boolean {\n return this.orientation === 'vertical';\n }\n\n get containerClass() {\n return {\n 'p-metergroup p-component': true,\n 'p-metergroup-horizontal': this.orientation === 'horizontal',\n 'p-metergroup-vertical': this.orientation === 'vertical'\n };\n }\n\n labelTemplate: TemplateRef<any> | undefined;\n\n meterTemplate: TemplateRef<any> | undefined;\n\n endTemplate: TemplateRef<any> | undefined;\n\n startTemplate: TemplateRef<any> | undefined;\n\n iconTemplate: TemplateRef<any> | undefined;\n\n container = viewChild('container', { read: ElementRef });\n\n containerEffect = effect(() => {\n const _container = this.container();\n const height = DomHandler.getOuterHeight(_container.nativeElement);\n this.vertical && (this.container().nativeElement.style.height = height + 'px');\n });\n\n ngAfterContentInit() {\n this.templates?.forEach((item) => {\n switch (item.getType()) {\n case 'label':\n this.labelTemplate = item.template;\n break;\n case 'meter':\n this.meterTemplate = item.template;\n break;\n case 'icon':\n this.iconTemplate = item.template;\n break;\n case 'start':\n this.startTemplate = item.template;\n break;\n case 'end':\n this.endTemplate = item.template;\n break;\n default:\n break;\n }\n });\n }\n\n percent(meter = 0) {\n const percentOfItem = ((meter - this.min) / (this.max - this.min)) * 100;\n\n return Math.round(Math.max(0, Math.min(100, percentOfItem)));\n }\n percentValue(meter) {\n return this.percent(meter) + '%';\n }\n meterStyle(val) {\n return {\n backgroundColor: val.color,\n width: this.orientation === 'horizontal' && this.percentValue(val.value),\n height: this.orientation === 'vertical' && this.percentValue(val.value)\n };\n }\n\n totalPercent() {\n return this.percent(this.value.reduce((total, val) => total + val.value, 0));\n }\n\n percentages() {\n let sum = 0;\n const sumsArray = [];\n\n this.value.forEach((item) => {\n sum += item.value;\n sumsArray.push(sum);\n });\n\n return sumsArray;\n }\n\n trackByFn(index: number): number {\n return index;\n }\n}\n\n@NgModule({\n imports: [CommonModule, SharedModule],\n exports: [MeterGroup, SharedModule],\n declarations: [MeterGroup, MeterGroupLabel]\n})\nexport class MeterGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1651,8 +1651,8 @@ class MultiSelect {
1651
1651
  [attr.aria-label]="ariaLabel"
1652
1652
  [attr.aria-labelledby]="ariaLabelledBy"
1653
1653
  [attr.aria-haspopup]="'listbox'"
1654
- [attr.aria-expanded]="overlayVisible"
1655
- [attr.aria-controls]="id + '_list'"
1654
+ [attr.aria-expanded]="overlayVisible ?? false"
1655
+ [attr.aria-controls]="overlayVisible ? id + '_list' : null"
1656
1656
  [attr.tabindex]="!disabled ? tabindex : -1"
1657
1657
  [attr.aria-activedescendant]="focused ? focusedOptionId : undefined"
1658
1658
  (focus)="onInputFocus($event)"
@@ -1896,8 +1896,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
1896
1896
  [attr.aria-label]="ariaLabel"
1897
1897
  [attr.aria-labelledby]="ariaLabelledBy"
1898
1898
  [attr.aria-haspopup]="'listbox'"
1899
- [attr.aria-expanded]="overlayVisible"
1900
- [attr.aria-controls]="id + '_list'"
1899
+ [attr.aria-expanded]="overlayVisible ?? false"
1900
+ [attr.aria-controls]="overlayVisible ? id + '_list' : null"
1901
1901
  [attr.tabindex]="!disabled ? tabindex : -1"
1902
1902
  [attr.aria-activedescendant]="focused ? focusedOptionId : undefined"
1903
1903
  (focus)="onInputFocus($event)"