@clr/angular 18.0.0-beta.1 → 18.0.0-beta.2

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 (76) hide show
  1. package/fesm2022/clr-angular-button.mjs +2 -2
  2. package/fesm2022/clr-angular-button.mjs.map +1 -1
  3. package/fesm2022/clr-angular-data-datagrid.mjs +12 -26
  4. package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
  5. package/fesm2022/clr-angular-data-tree-view.mjs +2 -2
  6. package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -1
  7. package/fesm2022/clr-angular-data.mjs +13 -27
  8. package/fesm2022/clr-angular-data.mjs.map +1 -1
  9. package/fesm2022/clr-angular-emphasis-alert.mjs +2 -2
  10. package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -1
  11. package/fesm2022/clr-angular-emphasis.mjs +2 -2
  12. package/fesm2022/clr-angular-emphasis.mjs.map +1 -1
  13. package/fesm2022/clr-angular-forms-checkbox.mjs +13 -44
  14. package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -1
  15. package/fesm2022/clr-angular-forms-combobox.mjs +94 -61
  16. package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
  17. package/fesm2022/clr-angular-forms-common.mjs +61 -58
  18. package/fesm2022/clr-angular-forms-common.mjs.map +1 -1
  19. package/fesm2022/clr-angular-forms-datalist.mjs +2 -14
  20. package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -1
  21. package/fesm2022/clr-angular-forms-datepicker.mjs +16 -24
  22. package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -1
  23. package/fesm2022/clr-angular-forms-file-input.mjs +72 -55
  24. package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -1
  25. package/fesm2022/clr-angular-forms-input.mjs +4 -18
  26. package/fesm2022/clr-angular-forms-input.mjs.map +1 -1
  27. package/fesm2022/clr-angular-forms-number-input.mjs +2 -14
  28. package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -1
  29. package/fesm2022/clr-angular-forms-password.mjs +2 -14
  30. package/fesm2022/clr-angular-forms-password.mjs.map +1 -1
  31. package/fesm2022/clr-angular-forms-radio.mjs +13 -44
  32. package/fesm2022/clr-angular-forms-radio.mjs.map +1 -1
  33. package/fesm2022/clr-angular-forms-range.mjs +3 -16
  34. package/fesm2022/clr-angular-forms-range.mjs.map +1 -1
  35. package/fesm2022/clr-angular-forms-select.mjs +3 -16
  36. package/fesm2022/clr-angular-forms-select.mjs.map +1 -1
  37. package/fesm2022/clr-angular-forms-textarea.mjs +4 -17
  38. package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -1
  39. package/fesm2022/clr-angular-forms.mjs +258 -358
  40. package/fesm2022/clr-angular-forms.mjs.map +1 -1
  41. package/fesm2022/clr-angular-modal.mjs +2 -2
  42. package/fesm2022/clr-angular-modal.mjs.map +1 -1
  43. package/fesm2022/clr-angular-popover-common.mjs +151 -85
  44. package/fesm2022/clr-angular-popover-common.mjs.map +1 -1
  45. package/fesm2022/clr-angular-popover-dropdown.mjs +7 -4
  46. package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -1
  47. package/fesm2022/clr-angular-popover-signpost.mjs +27 -12
  48. package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -1
  49. package/fesm2022/clr-angular-popover-tooltip.mjs +4 -4
  50. package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -1
  51. package/fesm2022/clr-angular-popover.mjs +186 -102
  52. package/fesm2022/clr-angular-popover.mjs.map +1 -1
  53. package/fesm2022/clr-angular-stepper.mjs +4 -4
  54. package/fesm2022/clr-angular-stepper.mjs.map +1 -1
  55. package/fesm2022/clr-angular-utils.mjs +12 -47
  56. package/fesm2022/clr-angular-utils.mjs.map +1 -1
  57. package/fesm2022/clr-angular-wizard.mjs +19 -11
  58. package/fesm2022/clr-angular-wizard.mjs.map +1 -1
  59. package/fesm2022/clr-angular.mjs +491 -548
  60. package/fesm2022/clr-angular.mjs.map +1 -1
  61. package/package.json +2 -2
  62. package/popover/common/README.md +14 -12
  63. package/types/clr-angular-data-datagrid.d.ts +0 -10
  64. package/types/clr-angular-data.d.ts +0 -10
  65. package/types/clr-angular-forms-combobox.d.ts +11 -4
  66. package/types/clr-angular-forms-common.d.ts +9 -9
  67. package/types/clr-angular-forms-datepicker.d.ts +7 -0
  68. package/types/clr-angular-forms-file-input.d.ts +5 -2
  69. package/types/clr-angular-forms.d.ts +31 -15
  70. package/types/clr-angular-popover-common.d.ts +38 -13
  71. package/types/clr-angular-popover-dropdown.d.ts +2 -1
  72. package/types/clr-angular-popover-signpost.d.ts +14 -6
  73. package/types/clr-angular-popover.d.ts +52 -18
  74. package/types/clr-angular-utils.d.ts +4 -14
  75. package/types/clr-angular-wizard.d.ts +7 -4
  76. package/types/clr-angular.d.ts +91 -59
@@ -2,13 +2,13 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Component, inject, TemplateRef, Directive, Injector, ContentChild, ViewChild, forwardRef, Input, HostListener, HostBinding, Self, Optional, NgModule } from '@angular/core';
3
3
  import * as i3 from '@clr/angular/forms/common';
4
4
  import { NgControlService, ClrAbstractContainer, ControlIdService, ControlClassService, WrappedFormControl, ClrCommonFormsModule } from '@clr/angular/forms/common';
5
- import * as i2$1 from '@clr/angular/utils';
5
+ import * as i2 from '@clr/angular/utils';
6
6
  import { ClrCommonStringsService } from '@clr/angular/utils';
7
- import * as i1 from '@angular/common';
7
+ import * as i1 from '@clr/angular/icon';
8
+ import { ClarityIcons, folderOpenIcon, successStandardIcon, errorStandardIcon, ClrIcon } from '@clr/angular/icon';
9
+ import * as i1$1 from '@angular/common';
8
10
  import { CommonModule } from '@angular/common';
9
- import * as i2 from '@clr/angular/icon';
10
- import { ClarityIcons, folderOpenIcon, ClrIcon } from '@clr/angular/icon';
11
- import * as i1$1 from '@angular/forms';
11
+ import * as i1$2 from '@angular/forms';
12
12
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
13
13
 
14
14
  /*
@@ -42,15 +42,23 @@ function clearFiles(fileInputElement) {
42
42
  const CLR_FILE_MESSAGES_TEMPLATE_CONTEXT = new InjectionToken('ClrFileMessagesTemplateContext');
43
43
  class ClrFileInfo {
44
44
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInfo, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrFileInfo, isStandalone: false, selector: "clr-file-info", host: { properties: { "class.clr-subtext": "true" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrFileInfo, isStandalone: false, selector: "clr-file-info", host: { properties: { "class.clr-subtext-wrapper": "true" } }, ngImport: i0, template: `
46
+ <span class="clr-subtext">
47
+ <ng-content></ng-content>
48
+ </span>
49
+ `, isInline: true }); }
46
50
  }
47
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInfo, decorators: [{
48
52
  type: Component,
49
53
  args: [{
50
54
  selector: 'clr-file-info',
51
- template: `<ng-content></ng-content>`,
55
+ template: `
56
+ <span class="clr-subtext">
57
+ <ng-content></ng-content>
58
+ </span>
59
+ `,
52
60
  host: {
53
- '[class.clr-subtext]': 'true',
61
+ '[class.clr-subtext-wrapper]': 'true',
54
62
  },
55
63
  standalone: false,
56
64
  }]
@@ -60,39 +68,57 @@ class ClrFileSuccess {
60
68
  this.context = inject(CLR_FILE_MESSAGES_TEMPLATE_CONTEXT);
61
69
  }
62
70
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileSuccess, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrFileSuccess, isStandalone: false, selector: "clr-file-success", host: { properties: { "style.display": "context.success ? \"inline-block\" : \"none\"", "class.clr-subtext": "true", "class.success": "true" } }, ngImport: i0, template: `@if (context.success) {
64
- <ng-content></ng-content>
65
- }`, isInline: true }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrFileSuccess, isStandalone: false, selector: "clr-file-success", host: { properties: { "style.display": "context.success ? \"flex\" : \"none\"", "class.clr-subtext-wrapper": "true" } }, ngImport: i0, template: `
72
+ @if (context.success) {
73
+ <cds-icon class="clr-validate-icon" shape="success-standard" status="success" aria-hidden="true"></cds-icon>
74
+ <span class="clr-subtext success">
75
+ <ng-content></ng-content>
76
+ </span>
77
+ }
78
+ `, isInline: true, dependencies: [{ kind: "component", type: i1.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }] }); }
66
79
  }
67
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileSuccess, decorators: [{
68
81
  type: Component,
69
82
  args: [{
70
83
  selector: 'clr-file-success',
71
84
  // We check for success here so that consumers don't have to.
72
- template: `@if (context.success) {
73
- <ng-content></ng-content>
74
- }`,
85
+ template: `
86
+ @if (context.success) {
87
+ <cds-icon class="clr-validate-icon" shape="success-standard" status="success" aria-hidden="true"></cds-icon>
88
+ <span class="clr-subtext success">
89
+ <ng-content></ng-content>
90
+ </span>
91
+ }
92
+ `,
75
93
  host: {
76
- '[style.display]': 'context.success ? "inline-block" : "none"',
77
- '[class.clr-subtext]': 'true',
78
- '[class.success]': 'true',
94
+ '[style.display]': 'context.success ? "flex" : "none"',
95
+ '[class.clr-subtext-wrapper]': 'true',
79
96
  },
80
97
  standalone: false,
81
98
  }]
82
99
  }] });
83
100
  class ClrFileError {
84
101
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileError, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrFileError, isStandalone: false, selector: "clr-file-error", host: { properties: { "class.clr-subtext": "true", "class.error": "true" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ClrFileError, isStandalone: false, selector: "clr-file-error", host: { properties: { "class.clr-subtext-wrapper": "true" } }, ngImport: i0, template: `
103
+ <cds-icon class="clr-validate-icon" shape="error-standard" status="danger" aria-hidden="true"></cds-icon>
104
+ <span class="clr-subtext error">
105
+ <ng-content></ng-content>
106
+ </span>
107
+ `, isInline: true, dependencies: [{ kind: "component", type: i1.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }] }); }
86
108
  }
87
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileError, decorators: [{
88
110
  type: Component,
89
111
  args: [{
90
112
  selector: 'clr-file-error',
91
- // The host should have an `@if` or `@if` that checks for the relevant error.
92
- template: `<ng-content></ng-content>`,
113
+ // The host should have an `*ngIf` or `@if` that checks for the relevant error.
114
+ template: `
115
+ <cds-icon class="clr-validate-icon" shape="error-standard" status="danger" aria-hidden="true"></cds-icon>
116
+ <span class="clr-subtext error">
117
+ <ng-content></ng-content>
118
+ </span>
119
+ `,
93
120
  host: {
94
- '[class.clr-subtext]': 'true',
95
- '[class.error]': 'true',
121
+ '[class.clr-subtext-wrapper]': 'true',
96
122
  },
97
123
  standalone: false,
98
124
  }]
@@ -130,6 +156,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
130
156
  */
131
157
  class ClrFileList {
132
158
  constructor() {
159
+ this.injectorCache = new Map();
160
+ this.contextCache = new Map();
133
161
  this.injector = inject(Injector);
134
162
  this.commonStrings = inject(ClrCommonStringsService);
135
163
  this.ngControlService = inject(NgControlService, { optional: true });
@@ -168,7 +196,17 @@ class ClrFileList {
168
196
  maxFileSize: fileInputErrors.maxFileSize?.find(error => error.name === file.name),
169
197
  };
170
198
  const success = Object.values(errors).every(error => !error);
171
- return { $implicit: file, success, errors };
199
+ const cached = this.contextCache.get(file);
200
+ if (cached && cached.success === success && this.errorsEqual(cached.errors, errors)) {
201
+ return cached;
202
+ }
203
+ // new context is made and old reference replaced
204
+ const context = { $implicit: file, success, errors };
205
+ this.contextCache.set(file, context);
206
+ // new injector is made and old reference replaced
207
+ const injector = this.createFileMessagesTemplateInjector(context);
208
+ this.injectorCache.set(file, injector);
209
+ return context;
172
210
  }
173
211
  createFileMessagesTemplateInjector(fileMessagesTemplateContext) {
174
212
  return Injector.create({
@@ -176,6 +214,9 @@ class ClrFileList {
176
214
  providers: [{ provide: CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, useValue: fileMessagesTemplateContext }],
177
215
  });
178
216
  }
217
+ errorsEqual(a, b) {
218
+ return a.accept === b.accept && a.minFileSize === b.minFileSize && a.maxFileSize === b.maxFileSize;
219
+ }
179
220
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
180
221
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrFileList, isStandalone: false, selector: "clr-file-list", host: { properties: { "attr.role": "\"list\"", "class.clr-file-list": "true" } }, queries: [{ propertyName: "fileMessagesTemplate", first: true, predicate: ClrFileMessagesTemplate, descendants: true }], ngImport: i0, template: `
181
222
  @for (file of files; track file) {
@@ -199,24 +240,18 @@ class ClrFileList {
199
240
  <cds-icon shape="times"></cds-icon>
200
241
  </button>
201
242
  </span>
202
- <cds-icon
203
- class="clr-validate-icon"
204
- [shape]="fileMessagesTemplateContext.success ? 'check-circle' : 'exclamation-circle'"
205
- [status]="fileMessagesTemplateContext.success ? 'success' : 'danger'"
206
- aria-hidden="true"
207
- ></cds-icon>
208
243
  </div>
209
244
  @if (fileMessagesTemplate) {
210
245
  <ng-container
211
246
  [ngTemplateOutlet]="fileMessagesTemplate.templateRef"
212
247
  [ngTemplateOutletContext]="fileMessagesTemplateContext"
213
- [ngTemplateOutletInjector]="createFileMessagesTemplateInjector(fileMessagesTemplateContext)"
248
+ [ngTemplateOutletInjector]="injectorCache.get(file)"
214
249
  ></ng-container>
215
250
  }
216
251
  </div>
217
252
  }
218
253
  }
219
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }] }); }
254
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }] }); }
220
255
  }
221
256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileList, decorators: [{
222
257
  type: Component,
@@ -244,18 +279,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
244
279
  <cds-icon shape="times"></cds-icon>
245
280
  </button>
246
281
  </span>
247
- <cds-icon
248
- class="clr-validate-icon"
249
- [shape]="fileMessagesTemplateContext.success ? 'check-circle' : 'exclamation-circle'"
250
- [status]="fileMessagesTemplateContext.success ? 'success' : 'danger'"
251
- aria-hidden="true"
252
- ></cds-icon>
253
282
  </div>
254
283
  @if (fileMessagesTemplate) {
255
284
  <ng-container
256
285
  [ngTemplateOutlet]="fileMessagesTemplate.templateRef"
257
286
  [ngTemplateOutletContext]="fileMessagesTemplateContext"
258
- [ngTemplateOutletInjector]="createFileMessagesTemplateInjector(fileMessagesTemplateContext)"
287
+ [ngTemplateOutletInjector]="injectorCache.get(file)"
259
288
  ></ng-container>
260
289
  }
261
290
  </div>
@@ -379,12 +408,6 @@ class ClrFileInputContainer extends ClrAbstractContainer {
379
408
  <cds-icon shape="times" status="neutral"></cds-icon>
380
409
  </button>
381
410
  }
382
- @if (showInvalid) {
383
- <cds-icon class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true"></cds-icon>
384
- }
385
- @if (showValid) {
386
- <cds-icon class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true"></cds-icon>
387
- }
388
411
  </div>
389
412
  @if (showHelper) {
390
413
  <ng-content select="clr-control-helper"></ng-content>
@@ -402,7 +425,7 @@ class ClrFileInputContainer extends ClrAbstractContainer {
402
425
  <ng-content select="clr-file-list"></ng-content>
403
426
  </ng-container>
404
427
  </div>
405
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i3.ClrControlLabel, selector: "label", inputs: ["id", "for"] }] }); }
428
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i1.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i3.ClrControlLabel, selector: "label", inputs: ["id", "for"] }] }); }
406
429
  }
407
430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInputContainer, decorators: [{
408
431
  type: Component,
@@ -453,12 +476,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
453
476
  <cds-icon shape="times" status="neutral"></cds-icon>
454
477
  </button>
455
478
  }
456
- @if (showInvalid) {
457
- <cds-icon class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true"></cds-icon>
458
- }
459
- @if (showValid) {
460
- <cds-icon class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true"></cds-icon>
461
- }
462
479
  </div>
463
480
  @if (showHelper) {
464
481
  <ng-content select="clr-control-helper"></ng-content>
@@ -554,7 +571,7 @@ class ClrFileInput extends WrappedFormControl {
554
571
  clearFilesButtonLabel,
555
572
  };
556
573
  }
557
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInput, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1$1.NgControl, optional: true, self: true }, { token: i2$1.ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Directive }); }
574
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInput, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i1$2.NgControl, optional: true, self: true }, { token: i2.ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Directive }); }
558
575
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: ClrFileInput, isStandalone: false, selector: "input[type=\"file\"][clrFileInput]", host: { attributes: { "tabindex": "-1", "aria-hidden": "true" }, listeners: { "change": "handleChange()" }, properties: { "class.clr-file-input": "true", "disabled": "this.disabled" } }, usesInheritance: true, ngImport: i0 }); }
559
576
  }
560
577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInput, decorators: [{
@@ -568,11 +585,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
568
585
  },
569
586
  standalone: false,
570
587
  }]
571
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i1$1.NgControl, decorators: [{
588
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i1$2.NgControl, decorators: [{
572
589
  type: Self
573
590
  }, {
574
591
  type: Optional
575
- }] }, { type: i2$1.ClrCommonStringsService }], propDecorators: { disabled: [{
592
+ }] }, { type: i2.ClrCommonStringsService }], propDecorators: { disabled: [{
576
593
  type: HostBinding,
577
594
  args: ['disabled']
578
595
  }], handleChange: [{
@@ -742,7 +759,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
742
759
  */
743
760
  class ClrFileInputModule {
744
761
  constructor() {
745
- ClarityIcons.addIcons(folderOpenIcon);
762
+ ClarityIcons.addIcons(folderOpenIcon, successStandardIcon, errorStandardIcon);
746
763
  }
747
764
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
748
765
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrFileInputModule, declarations: [ClrFileInput,
@@ -1 +1 @@
1
- {"version":3,"file":"clr-angular-forms-file-input.mjs","sources":["../../../projects/angular/forms/file-input/file-input.helpers.ts","../../../projects/angular/forms/file-input/file-messages.ts","../../../projects/angular/forms/file-input/file-messages-template.ts","../../../projects/angular/forms/file-input/file-list.ts","../../../projects/angular/forms/file-input/file-input-container.ts","../../../projects/angular/forms/file-input/file-input.ts","../../../projects/angular/forms/file-input/file-input-validator.ts","../../../projects/angular/forms/file-input/file-input-validator-errors.ts","../../../projects/angular/forms/file-input/file-input-value-accessor.ts","../../../projects/angular/forms/file-input/file-input.module.ts","../../../projects/angular/forms/file-input/index.ts","../../../projects/angular/forms/file-input/clr-angular-forms-file-input.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport function buildFileList(files: File[]) {\n const dataTransfer = new DataTransfer();\n\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n return dataTransfer.files;\n}\n\nexport function selectFiles(fileInputElement: HTMLInputElement, files: File[] | FileList) {\n fileInputElement.files = files instanceof FileList ? files : buildFileList(files);\n fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n}\n\nexport function clearFiles(fileInputElement: HTMLInputElement) {\n fileInputElement.value = '';\n fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, inject, InjectionToken } from '@angular/core';\n\nimport { ClrFileMessagesTemplateContext } from './file-messages-template';\n\nexport const CLR_FILE_MESSAGES_TEMPLATE_CONTEXT = new InjectionToken<ClrFileMessagesTemplateContext>(\n 'ClrFileMessagesTemplateContext'\n);\n\n@Component({\n selector: 'clr-file-info',\n template: `<ng-content></ng-content>`,\n host: {\n '[class.clr-subtext]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileInfo {}\n\n@Component({\n selector: 'clr-file-success',\n // We check for success here so that consumers don't have to.\n template: `@if (context.success) {\n <ng-content></ng-content>\n }`,\n host: {\n '[style.display]': 'context.success ? \"inline-block\" : \"none\"',\n '[class.clr-subtext]': 'true',\n '[class.success]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileSuccess {\n protected readonly context: ClrFileMessagesTemplateContext = inject(CLR_FILE_MESSAGES_TEMPLATE_CONTEXT);\n}\n\n@Component({\n selector: 'clr-file-error',\n // The host should have an `@if` or `@if` that checks for the relevant error.\n template: `<ng-content></ng-content>`,\n host: {\n '[class.clr-subtext]': 'true',\n '[class.error]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileError {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { ClrFileAcceptError, ClrFileMaxFileSizeError, ClrFileMinFileSizeError } from './file-input-validator-errors';\n\nexport interface ClrSingleFileValidationErrors {\n accept?: ClrFileAcceptError;\n minFileSize?: ClrFileMinFileSizeError;\n maxFileSize?: ClrFileMaxFileSizeError;\n}\n\nexport interface ClrFileMessagesTemplateContext {\n $implicit: File;\n success: boolean;\n errors: ClrSingleFileValidationErrors;\n}\n\n@Directive({\n selector: 'ng-template[clr-file-messages]',\n standalone: false,\n})\nexport class ClrFileMessagesTemplate {\n readonly templateRef: TemplateRef<ClrFileMessagesTemplateContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n directive: ClrFileMessagesTemplate,\n context: unknown\n ): context is ClrFileMessagesTemplateContext {\n return true;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, inject, Injector } from '@angular/core';\nimport { NgControlService } from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInputContainer } from './file-input-container';\nimport { ClrFileListValidationErrors } from './file-input-validator-errors';\nimport { selectFiles } from './file-input.helpers';\nimport { CLR_FILE_MESSAGES_TEMPLATE_CONTEXT } from './file-messages';\nimport {\n ClrFileMessagesTemplate,\n ClrFileMessagesTemplateContext,\n ClrSingleFileValidationErrors,\n} from './file-messages-template';\n\n@Component({\n selector: 'clr-file-list',\n template: `\n @for (file of files; track file) {\n @if (createFileMessagesTemplateContext(file); as fileMessagesTemplateContext) {\n <div\n role=\"listitem\"\n class=\"clr-file-list-item\"\n [ngClass]=\"{\n 'clr-error': !fileMessagesTemplateContext.success,\n 'clr-success': fileMessagesTemplateContext.success,\n }\"\n >\n <div class=\"clr-file-label-and-status-icon\">\n <span class=\"label clr-file-label\">\n {{ file.name }}\n <button\n class=\"btn btn-sm btn-link-neutral btn-icon clr-file-clear-button\"\n [attr.aria-label]=\"getClearFileLabel(file.name)\"\n (click)=\"clearFile(file)\"\n >\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n </span>\n <cds-icon\n class=\"clr-validate-icon\"\n [shape]=\"fileMessagesTemplateContext.success ? 'check-circle' : 'exclamation-circle'\"\n [status]=\"fileMessagesTemplateContext.success ? 'success' : 'danger'\"\n aria-hidden=\"true\"\n ></cds-icon>\n </div>\n @if (fileMessagesTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"fileMessagesTemplate.templateRef\"\n [ngTemplateOutletContext]=\"fileMessagesTemplateContext\"\n [ngTemplateOutletInjector]=\"createFileMessagesTemplateInjector(fileMessagesTemplateContext)\"\n ></ng-container>\n }\n </div>\n }\n }\n `,\n host: {\n '[attr.role]': '\"list\"',\n '[class.clr-file-list]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileList {\n @ContentChild(ClrFileMessagesTemplate) protected readonly fileMessagesTemplate: ClrFileMessagesTemplate;\n\n private readonly injector = inject(Injector);\n private readonly commonStrings = inject(ClrCommonStringsService);\n private readonly ngControlService = inject(NgControlService, { optional: true });\n private readonly fileInputContainer = inject(ClrFileInputContainer, { optional: true });\n\n constructor() {\n if (!this.ngControlService || !this.fileInputContainer) {\n throw new Error('The clr-file-list component can only be used within a clr-file-input-container.');\n }\n }\n\n protected get files() {\n if (!this.fileInputContainer.fileInput) {\n return [];\n }\n\n const fileInputElement = this.fileInputContainer.fileInput.elementRef.nativeElement;\n\n return Array.from(fileInputElement.files).sort((a, b) => a.name.localeCompare(b.name));\n }\n\n protected getClearFileLabel(filename: string) {\n return this.commonStrings.parse(this.commonStrings.keys.clearFile, {\n FILE: filename,\n });\n }\n\n protected clearFile(fileToRemove: File) {\n if (!this.fileInputContainer.fileInput) {\n return;\n }\n\n const fileInputElement = this.fileInputContainer.fileInput.elementRef.nativeElement;\n const files = Array.from(fileInputElement.files);\n const newFiles = files.filter(file => file !== fileToRemove);\n\n selectFiles(fileInputElement, newFiles);\n this.fileInputContainer.focusBrowseButton();\n }\n\n protected createFileMessagesTemplateContext(file: File): ClrFileMessagesTemplateContext {\n const fileInputErrors: ClrFileListValidationErrors = this.ngControlService.controls[0].errors || {};\n\n const errors: ClrSingleFileValidationErrors = {\n accept: fileInputErrors.accept?.find(error => error.name === file.name),\n minFileSize: fileInputErrors.minFileSize?.find(error => error.name === file.name),\n maxFileSize: fileInputErrors.maxFileSize?.find(error => error.name === file.name),\n };\n\n const success = Object.values(errors).every(error => !error);\n\n return { $implicit: file, success, errors };\n }\n\n protected createFileMessagesTemplateInjector(fileMessagesTemplateContext: ClrFileMessagesTemplateContext) {\n return Injector.create({\n parent: this.injector,\n providers: [{ provide: CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, useValue: fileMessagesTemplateContext }],\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, ElementRef, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport {\n ClrAbstractContainer,\n ControlClassService,\n ControlIdService,\n NgControlService,\n} from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInput } from './file-input';\nimport { selectFiles } from './file-input.helpers';\nimport { ClrFileList } from './file-list';\nimport { ClrFileError, ClrFileSuccess } from './file-messages';\n\n@Component({\n selector: 'clr-file-input-container',\n template: `\n <ng-content select=\"label\"></ng-content>\n @if (!label && addGrid()) {\n <label></label>\n }\n <div class=\"clr-control-container\" [ngClass]=\"controlClass()\">\n <div class=\"clr-file-input-wrapper\">\n <ng-content select=\"[clrFileInput]\"></ng-content>\n\n <!-- file input to handle adding new files to selection when file list is present (prevent replacing selected files on the main file input) -->\n @if (fileList) {\n <input\n #fileListFileInput\n type=\"file\"\n class=\"clr-file-input\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n (change)=\"addFilesToSelection(fileListFileInput.files)\"\n />\n }\n\n <button\n #browseButton\n type=\"button\"\n class=\"btn btn-sm clr-file-input-browse-button\"\n [attr.aria-describedby]=\"browseButtonDescribedBy\"\n [disabled]=\"disabled\"\n (click)=\"browse()\"\n >\n <cds-icon shape=\"folder-open\"></cds-icon>\n <span class=\"clr-file-input-browse-button-text\">{{ browseButtonText }}</span>\n </button>\n @if (!fileList && fileInput?.selection?.fileCount) {\n <button\n type=\"button\"\n class=\"btn btn-sm clr-file-input-clear-button\"\n [attr.aria-label]=\"fileInput?.selection?.clearFilesButtonLabel\"\n (click)=\"clearSelectedFiles()\"\n >\n <cds-icon shape=\"times\" status=\"neutral\"></cds-icon>\n </button>\n }\n @if (showInvalid) {\n <cds-icon class=\"clr-validate-icon\" shape=\"exclamation-circle\" status=\"danger\" aria-hidden=\"true\"></cds-icon>\n }\n @if (showValid) {\n <cds-icon class=\"clr-validate-icon\" shape=\"check-circle\" status=\"success\" aria-hidden=\"true\"></cds-icon>\n }\n </div>\n @if (showHelper) {\n <ng-content select=\"clr-control-helper\"></ng-content>\n }\n @if (showInvalid) {\n <ng-content select=\"clr-control-error\"></ng-content>\n }\n @if (showValid) {\n <ng-content select=\"clr-control-success\"></ng-content>\n }\n\n <!-- If this is present, this file input becomes an \"advanced\" file input. -->\n <ng-container>\n <div class=\"clr-file-list-break\"></div>\n <ng-content select=\"clr-file-list\"></ng-content>\n </ng-container>\n </div>\n `,\n host: {\n '[class.clr-form-control]': 'true',\n '[class.clr-form-control-disabled]': 'disabled',\n '[class.clr-row]': 'addGrid()',\n },\n providers: [NgControlService, ControlIdService, ControlClassService],\n standalone: false,\n})\nexport class ClrFileInputContainer extends ClrAbstractContainer {\n @Input('clrButtonLabel') customButtonLabel: string;\n\n @ContentChild(forwardRef(() => ClrFileInput)) readonly fileInput: ClrFileInput;\n @ContentChild(forwardRef(() => ClrFileList)) protected readonly fileList: ClrFileList;\n\n @ViewChild('browseButton') private browseButtonElementRef: ElementRef<HTMLButtonElement>;\n @ViewChild('fileListFileInput') private fileListFileInputElementRef: ElementRef<HTMLInputElement>;\n\n // These are for the \"message present\" override properties\n @ContentChild(ClrFileSuccess) private readonly fileSuccessComponent: ClrFileSuccess;\n @ContentChild(ClrFileError) private readonly fileErrorComponent: ClrFileError;\n\n private readonly commonStrings = inject(ClrCommonStringsService);\n\n protected get accept() {\n return this.fileInput.elementRef.nativeElement.accept;\n }\n\n protected get multiple() {\n return this.fileInput.elementRef.nativeElement.multiple;\n }\n\n protected get disabled() {\n return this.fileInput.elementRef.nativeElement.disabled || (this.control && this.control.disabled);\n }\n\n protected get browseButtonText() {\n const selectionButtonLabel = this.fileList ? undefined : this.fileInput?.selection?.buttonLabel;\n\n return selectionButtonLabel || this.customButtonLabel || this.commonStrings.keys.browse;\n }\n\n protected get browseButtonDescribedBy() {\n return `${this.label?.forAttr} ${this.fileInput.elementRef.nativeElement.getAttribute('aria-describedby')}`;\n }\n\n protected override get successMessagePresent() {\n return super.successMessagePresent || !!this.fileSuccessComponent;\n }\n\n protected override get errorMessagePresent() {\n return super.errorMessagePresent || !!this.fileErrorComponent;\n }\n\n focusBrowseButton() {\n this.browseButtonElementRef.nativeElement.focus();\n }\n\n protected browse() {\n const fileInputElementRef =\n this.fileList && this.multiple ? this.fileListFileInputElementRef : this.fileInput.elementRef;\n\n fileInputElementRef.nativeElement.click();\n }\n\n protected clearSelectedFiles() {\n this.fileInput.elementRef.nativeElement.value = '';\n this.fileInput.elementRef.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n\n this.focusBrowseButton();\n }\n\n protected addFilesToSelection(newFiles: FileList) {\n if (!newFiles.length) {\n return;\n }\n\n // start with new files\n const mergedFiles = [...newFiles];\n\n // add existing files if a new file doesn't have the same name\n for (const existingFile of this.fileInput.elementRef.nativeElement.files) {\n if (!mergedFiles.some(file => file.name === existingFile.name)) {\n mergedFiles.push(existingFile);\n }\n }\n\n // update file selection\n selectFiles(this.fileInput.elementRef.nativeElement, mergedFiles);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Injector,\n Optional,\n Renderer2,\n Self,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { WrappedFormControl } from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInputContainer } from './file-input-container';\n\nexport interface ClrFileInputSelection {\n fileCount: number;\n buttonLabel: string;\n clearFilesButtonLabel: string;\n}\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n host: {\n tabindex: '-1', // Remove the hidden file `input` element from the tab order because the browse `button` replaces it.\n 'aria-hidden': 'true', // Remove the hidden file `input` element from the accessibility tree because the browse `button` replaces it.\n '[class.clr-file-input]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileInput extends WrappedFormControl<ClrFileInputContainer> {\n selection: ClrFileInputSelection = undefined;\n\n constructor(\n injector: Injector,\n renderer: Renderer2,\n viewContainerRef: ViewContainerRef,\n readonly elementRef: ElementRef<HTMLInputElement>,\n @Self() @Optional() private readonly control: NgControl,\n private readonly commonStrings: ClrCommonStringsService\n ) {\n super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);\n }\n\n @HostBinding('disabled')\n protected get disabled() {\n return this.elementRef.nativeElement.disabled || (this.control && this.control.disabled);\n }\n\n @HostListener('change')\n private handleChange() {\n this.updateSelection();\n }\n\n private updateSelection() {\n const files = this.elementRef.nativeElement.files;\n let selectionButtonLabel: string;\n let clearFilesButtonLabel: string;\n\n if (files?.length === 1) {\n const filename = files[0].name;\n\n selectionButtonLabel = filename;\n\n clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFile, {\n FILE: filename,\n });\n } else if (files?.length > 1) {\n const fileCount = files.length.toString();\n\n selectionButtonLabel = this.commonStrings.parse(this.commonStrings.keys.fileCount, {\n COUNT: fileCount,\n });\n\n clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFiles, {\n COUNT: fileCount,\n });\n }\n\n this.selection = {\n fileCount: files.length,\n buttonLabel: selectionButtonLabel,\n clearFilesButtonLabel,\n };\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\nimport { ClrFileListValidationErrors } from './file-input-validator-errors';\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n providers: [{ provide: NG_VALIDATORS, useExisting: ClrFileInputValidator, multi: true }],\n standalone: false,\n})\nexport class ClrFileInputValidator implements Validator {\n @Input('clrMinFileSize') minFileSize: number;\n @Input('clrMaxFileSize') maxFileSize: number;\n\n constructor(private readonly elementRef: ElementRef<HTMLInputElement>) {}\n\n validate(control: AbstractControl<FileList>): ValidationErrors {\n const files = control.value;\n const fileInputElement = this.elementRef.nativeElement;\n\n const errors: ClrFileListValidationErrors = {};\n\n // required validation (native attribute)\n if (fileInputElement.required && files?.length === 0) {\n errors.required = true;\n }\n\n const accept = fileInputElement.accept ? fileInputElement.accept.split(',').map(type => type.trim()) : null;\n\n if (files?.length > 0 && (accept || this.minFileSize || this.maxFileSize)) {\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n\n // accept validation (native attribute)\n if (accept && accept.length) {\n if (!this.validateAccept(file, accept)) {\n errors.accept = errors.accept || [];\n errors.accept.push({\n name: file.name,\n accept,\n type: file.type || '',\n extension: this.getSuffixByDepth(file.name, 2), // last up to 2 parts for reporting\n });\n }\n }\n\n // min file validation (custom input)\n if (this.minFileSize && file.size < this.minFileSize) {\n errors.minFileSize = errors.minFileSize || [];\n errors.minFileSize.push({ name: file.name, minFileSize: this.minFileSize, actualFileSize: file.size });\n }\n\n // max file validation (custom input)\n if (this.maxFileSize && file.size > this.maxFileSize) {\n errors.maxFileSize = errors.maxFileSize || [];\n errors.maxFileSize.push({ name: file.name, maxFileSize: this.maxFileSize, actualFileSize: file.size });\n }\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n private getSuffixByDepth(filename: string, depth: number): string {\n const match = filename.toLowerCase().match(new RegExp(`(\\\\.[^.]+){1,${depth}}$`, 'i'));\n return match ? match[0] : '';\n }\n\n private validateAccept(file: File, acceptList: string[]): boolean {\n const name = file.name.toLowerCase();\n const type = (file.type || '').toLowerCase();\n\n for (const entryRaw of acceptList) {\n const entry = entryRaw.trim().toLowerCase();\n if (!entry) {\n continue;\n }\n\n // Extension check\n if (entry.startsWith('.')) {\n const depth = (entry.match(/\\./g) || []).length;\n if (this.getSuffixByDepth(name, depth) === entry) {\n return true;\n }\n continue;\n }\n\n // MIME check\n if (entry.endsWith('/*')) {\n const prefix = entry.slice(0, entry.length - 1); // keep trailing slash\n if (type.startsWith(prefix)) {\n return true;\n }\n } else if (entry.includes('/') && type === entry) {\n return true;\n }\n }\n\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrFileListValidationErrors {\n required?: boolean;\n accept?: ClrFileAcceptError[];\n minFileSize?: ClrFileMinFileSizeError[];\n maxFileSize?: ClrFileMaxFileSizeError[];\n}\n\nexport interface ClrFileAcceptError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The file types that are accepted by the file input.\n */\n accept: string[];\n\n /**\n * The actual MIME type of the selected file.\n */\n type: string;\n\n /**\n * The actual extension of the selected file.\n */\n extension: string;\n}\n\nexport interface ClrFileMinFileSizeError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The minimum file size that is accepted by the file input.\n */\n minFileSize: number;\n\n /**\n * The actual size of the selected file.\n */\n actualFileSize: number;\n}\n\nexport interface ClrFileMaxFileSizeError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The maximum file size that is accepted by the file input.\n */\n maxFileSize: number;\n\n /**\n * The actual size of the selected file.\n */\n actualFileSize: number;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, HostListener } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { clearFiles, selectFiles } from './file-input.helpers';\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ClrFileInputValueAccessor, multi: true }],\n standalone: false,\n})\nexport class ClrFileInputValueAccessor implements ControlValueAccessor {\n constructor(private readonly elementRef: ElementRef<HTMLInputElement>) {}\n\n writeValue(value: FileList) {\n if (value !== undefined && value !== null && !(value instanceof FileList)) {\n throw new Error('The value of a file input control must be a FileList.');\n }\n\n if (value) {\n selectFiles(this.elementRef.nativeElement, value);\n } else if (this.elementRef.nativeElement.files.length) {\n clearFiles(this.elementRef.nativeElement);\n }\n }\n\n registerOnChange(fn: (value: FileList) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n @HostListener('change')\n private handleChange() {\n this.onTouched();\n this.onChange(this.elementRef.nativeElement.files);\n }\n\n private onChange = (_value: FileList) => {};\n\n private onTouched = () => {};\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ClrCommonFormsModule } from '@clr/angular/forms/common';\nimport { ClarityIcons, ClrIcon, folderOpenIcon } from '@clr/angular/icon';\n\nimport { ClrFileInput } from './file-input';\nimport { ClrFileInputContainer } from './file-input-container';\nimport { ClrFileInputValidator } from './file-input-validator';\nimport { ClrFileInputValueAccessor } from './file-input-value-accessor';\nimport { ClrFileList } from './file-list';\nimport { ClrFileError, ClrFileInfo, ClrFileSuccess } from './file-messages';\nimport { ClrFileMessagesTemplate } from './file-messages-template';\n\n@NgModule({\n imports: [CommonModule, ClrIcon, ClrCommonFormsModule],\n declarations: [\n ClrFileInput,\n ClrFileInputContainer,\n ClrFileInputValidator,\n ClrFileInputValueAccessor,\n ClrFileList,\n ClrFileMessagesTemplate,\n ClrFileInfo,\n ClrFileSuccess,\n ClrFileError,\n ],\n exports: [\n ClrCommonFormsModule,\n ClrFileInput,\n ClrFileInputContainer,\n ClrFileInputValidator,\n ClrFileInputValueAccessor,\n ClrFileList,\n ClrFileMessagesTemplate,\n ClrFileInfo,\n ClrFileSuccess,\n ClrFileError,\n ],\n})\nexport class ClrFileInputModule {\n constructor() {\n ClarityIcons.addIcons(folderOpenIcon);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './file-input';\nexport * from './file-input-validator';\nexport * from './file-input-validator-errors';\nexport * from './file-input-value-accessor';\nexport * from './file-input-container';\nexport * from './file-list';\nexport * from './file-messages-template';\nexport * from './file-messages';\nexport * from './file-input.module';\nexport * from './file-input.helpers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"clr-angular-forms-file-input.mjs","sources":["../../../projects/angular/forms/file-input/file-input.helpers.ts","../../../projects/angular/forms/file-input/file-messages.ts","../../../projects/angular/forms/file-input/file-messages-template.ts","../../../projects/angular/forms/file-input/file-list.ts","../../../projects/angular/forms/file-input/file-input-container.ts","../../../projects/angular/forms/file-input/file-input.ts","../../../projects/angular/forms/file-input/file-input-validator.ts","../../../projects/angular/forms/file-input/file-input-validator-errors.ts","../../../projects/angular/forms/file-input/file-input-value-accessor.ts","../../../projects/angular/forms/file-input/file-input.module.ts","../../../projects/angular/forms/file-input/index.ts","../../../projects/angular/forms/file-input/clr-angular-forms-file-input.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport function buildFileList(files: File[]) {\n const dataTransfer = new DataTransfer();\n\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n return dataTransfer.files;\n}\n\nexport function selectFiles(fileInputElement: HTMLInputElement, files: File[] | FileList) {\n fileInputElement.files = files instanceof FileList ? files : buildFileList(files);\n fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n}\n\nexport function clearFiles(fileInputElement: HTMLInputElement) {\n fileInputElement.value = '';\n fileInputElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, inject, InjectionToken } from '@angular/core';\n\nimport { ClrFileMessagesTemplateContext } from './file-messages-template';\n\nexport const CLR_FILE_MESSAGES_TEMPLATE_CONTEXT = new InjectionToken<ClrFileMessagesTemplateContext>(\n 'ClrFileMessagesTemplateContext'\n);\n\n@Component({\n selector: 'clr-file-info',\n template: `\n <span class=\"clr-subtext\">\n <ng-content></ng-content>\n </span>\n `,\n host: {\n '[class.clr-subtext-wrapper]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileInfo {}\n\n@Component({\n selector: 'clr-file-success',\n // We check for success here so that consumers don't have to.\n template: `\n @if (context.success) {\n <cds-icon class=\"clr-validate-icon\" shape=\"success-standard\" status=\"success\" aria-hidden=\"true\"></cds-icon>\n <span class=\"clr-subtext success\">\n <ng-content></ng-content>\n </span>\n }\n `,\n host: {\n '[style.display]': 'context.success ? \"flex\" : \"none\"',\n '[class.clr-subtext-wrapper]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileSuccess {\n protected readonly context: ClrFileMessagesTemplateContext = inject(CLR_FILE_MESSAGES_TEMPLATE_CONTEXT);\n}\n\n@Component({\n selector: 'clr-file-error',\n // The host should have an `*ngIf` or `@if` that checks for the relevant error.\n template: `\n <cds-icon class=\"clr-validate-icon\" shape=\"error-standard\" status=\"danger\" aria-hidden=\"true\"></cds-icon>\n <span class=\"clr-subtext error\">\n <ng-content></ng-content>\n </span>\n `,\n host: {\n '[class.clr-subtext-wrapper]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileError {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { ClrFileAcceptError, ClrFileMaxFileSizeError, ClrFileMinFileSizeError } from './file-input-validator-errors';\n\nexport interface ClrSingleFileValidationErrors {\n accept?: ClrFileAcceptError;\n minFileSize?: ClrFileMinFileSizeError;\n maxFileSize?: ClrFileMaxFileSizeError;\n}\n\nexport interface ClrFileMessagesTemplateContext {\n $implicit: File;\n success: boolean;\n errors: ClrSingleFileValidationErrors;\n}\n\n@Directive({\n selector: 'ng-template[clr-file-messages]',\n standalone: false,\n})\nexport class ClrFileMessagesTemplate {\n readonly templateRef: TemplateRef<ClrFileMessagesTemplateContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n directive: ClrFileMessagesTemplate,\n context: unknown\n ): context is ClrFileMessagesTemplateContext {\n return true;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, inject, Injector } from '@angular/core';\nimport { NgControlService } from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInputContainer } from './file-input-container';\nimport { ClrFileListValidationErrors } from './file-input-validator-errors';\nimport { selectFiles } from './file-input.helpers';\nimport { CLR_FILE_MESSAGES_TEMPLATE_CONTEXT } from './file-messages';\nimport {\n ClrFileMessagesTemplate,\n ClrFileMessagesTemplateContext,\n ClrSingleFileValidationErrors,\n} from './file-messages-template';\n\n@Component({\n selector: 'clr-file-list',\n template: `\n @for (file of files; track file) {\n @if (createFileMessagesTemplateContext(file); as fileMessagesTemplateContext) {\n <div\n role=\"listitem\"\n class=\"clr-file-list-item\"\n [ngClass]=\"{\n 'clr-error': !fileMessagesTemplateContext.success,\n 'clr-success': fileMessagesTemplateContext.success,\n }\"\n >\n <div class=\"clr-file-label-and-status-icon\">\n <span class=\"label clr-file-label\">\n {{ file.name }}\n <button\n class=\"btn btn-sm btn-link-neutral btn-icon clr-file-clear-button\"\n [attr.aria-label]=\"getClearFileLabel(file.name)\"\n (click)=\"clearFile(file)\"\n >\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n </span>\n </div>\n @if (fileMessagesTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"fileMessagesTemplate.templateRef\"\n [ngTemplateOutletContext]=\"fileMessagesTemplateContext\"\n [ngTemplateOutletInjector]=\"injectorCache.get(file)\"\n ></ng-container>\n }\n </div>\n }\n }\n `,\n host: {\n '[attr.role]': '\"list\"',\n '[class.clr-file-list]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileList {\n @ContentChild(ClrFileMessagesTemplate) protected readonly fileMessagesTemplate: ClrFileMessagesTemplate;\n\n protected injectorCache = new Map<File, Injector>();\n private contextCache = new Map<File, ClrFileMessagesTemplateContext>();\n\n private readonly injector = inject(Injector);\n private readonly commonStrings = inject(ClrCommonStringsService);\n private readonly ngControlService = inject(NgControlService, { optional: true });\n private readonly fileInputContainer = inject(ClrFileInputContainer, { optional: true });\n\n constructor() {\n if (!this.ngControlService || !this.fileInputContainer) {\n throw new Error('The clr-file-list component can only be used within a clr-file-input-container.');\n }\n }\n\n protected get files() {\n if (!this.fileInputContainer.fileInput) {\n return [];\n }\n\n const fileInputElement = this.fileInputContainer.fileInput.elementRef.nativeElement;\n\n return Array.from(fileInputElement.files).sort((a, b) => a.name.localeCompare(b.name));\n }\n\n protected getClearFileLabel(filename: string) {\n return this.commonStrings.parse(this.commonStrings.keys.clearFile, {\n FILE: filename,\n });\n }\n\n protected clearFile(fileToRemove: File) {\n if (!this.fileInputContainer.fileInput) {\n return;\n }\n\n const fileInputElement = this.fileInputContainer.fileInput.elementRef.nativeElement;\n const files = Array.from(fileInputElement.files);\n const newFiles = files.filter(file => file !== fileToRemove);\n\n selectFiles(fileInputElement, newFiles);\n this.fileInputContainer.focusBrowseButton();\n }\n\n protected createFileMessagesTemplateContext(file: File): ClrFileMessagesTemplateContext {\n const fileInputErrors: ClrFileListValidationErrors = this.ngControlService.controls[0].errors || {};\n\n const errors: ClrSingleFileValidationErrors = {\n accept: fileInputErrors.accept?.find(error => error.name === file.name),\n minFileSize: fileInputErrors.minFileSize?.find(error => error.name === file.name),\n maxFileSize: fileInputErrors.maxFileSize?.find(error => error.name === file.name),\n };\n\n const success = Object.values(errors).every(error => !error);\n\n const cached = this.contextCache.get(file);\n if (cached && cached.success === success && this.errorsEqual(cached.errors, errors)) {\n return cached;\n }\n\n // new context is made and old reference replaced\n const context: ClrFileMessagesTemplateContext = { $implicit: file, success, errors };\n this.contextCache.set(file, context);\n\n // new injector is made and old reference replaced\n const injector = this.createFileMessagesTemplateInjector(context);\n this.injectorCache.set(file, injector);\n\n return context;\n }\n\n private createFileMessagesTemplateInjector(fileMessagesTemplateContext: ClrFileMessagesTemplateContext) {\n return Injector.create({\n parent: this.injector,\n providers: [{ provide: CLR_FILE_MESSAGES_TEMPLATE_CONTEXT, useValue: fileMessagesTemplateContext }],\n });\n }\n\n private errorsEqual(a: ClrSingleFileValidationErrors, b: ClrSingleFileValidationErrors): boolean {\n return a.accept === b.accept && a.minFileSize === b.minFileSize && a.maxFileSize === b.maxFileSize;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, ElementRef, forwardRef, inject, Input, ViewChild } from '@angular/core';\nimport {\n ClrAbstractContainer,\n ControlClassService,\n ControlIdService,\n NgControlService,\n} from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInput } from './file-input';\nimport { selectFiles } from './file-input.helpers';\nimport { ClrFileList } from './file-list';\nimport { ClrFileError, ClrFileSuccess } from './file-messages';\n\n@Component({\n selector: 'clr-file-input-container',\n template: `\n <ng-content select=\"label\"></ng-content>\n @if (!label && addGrid()) {\n <label></label>\n }\n <div class=\"clr-control-container\" [ngClass]=\"controlClass()\">\n <div class=\"clr-file-input-wrapper\">\n <ng-content select=\"[clrFileInput]\"></ng-content>\n\n <!-- file input to handle adding new files to selection when file list is present (prevent replacing selected files on the main file input) -->\n @if (fileList) {\n <input\n #fileListFileInput\n type=\"file\"\n class=\"clr-file-input\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n (change)=\"addFilesToSelection(fileListFileInput.files)\"\n />\n }\n\n <button\n #browseButton\n type=\"button\"\n class=\"btn btn-sm clr-file-input-browse-button\"\n [attr.aria-describedby]=\"browseButtonDescribedBy\"\n [disabled]=\"disabled\"\n (click)=\"browse()\"\n >\n <cds-icon shape=\"folder-open\"></cds-icon>\n <span class=\"clr-file-input-browse-button-text\">{{ browseButtonText }}</span>\n </button>\n @if (!fileList && fileInput?.selection?.fileCount) {\n <button\n type=\"button\"\n class=\"btn btn-sm clr-file-input-clear-button\"\n [attr.aria-label]=\"fileInput?.selection?.clearFilesButtonLabel\"\n (click)=\"clearSelectedFiles()\"\n >\n <cds-icon shape=\"times\" status=\"neutral\"></cds-icon>\n </button>\n }\n </div>\n @if (showHelper) {\n <ng-content select=\"clr-control-helper\"></ng-content>\n }\n @if (showInvalid) {\n <ng-content select=\"clr-control-error\"></ng-content>\n }\n @if (showValid) {\n <ng-content select=\"clr-control-success\"></ng-content>\n }\n\n <!-- If this is present, this file input becomes an \"advanced\" file input. -->\n <ng-container>\n <div class=\"clr-file-list-break\"></div>\n <ng-content select=\"clr-file-list\"></ng-content>\n </ng-container>\n </div>\n `,\n host: {\n '[class.clr-form-control]': 'true',\n '[class.clr-form-control-disabled]': 'disabled',\n '[class.clr-row]': 'addGrid()',\n },\n providers: [NgControlService, ControlIdService, ControlClassService],\n standalone: false,\n})\nexport class ClrFileInputContainer extends ClrAbstractContainer {\n @Input('clrButtonLabel') customButtonLabel: string;\n\n @ContentChild(forwardRef(() => ClrFileInput)) readonly fileInput: ClrFileInput;\n @ContentChild(forwardRef(() => ClrFileList)) protected readonly fileList: ClrFileList;\n\n @ViewChild('browseButton') private browseButtonElementRef: ElementRef<HTMLButtonElement>;\n @ViewChild('fileListFileInput') private fileListFileInputElementRef: ElementRef<HTMLInputElement>;\n\n // These are for the \"message present\" override properties\n @ContentChild(ClrFileSuccess) private readonly fileSuccessComponent: ClrFileSuccess;\n @ContentChild(ClrFileError) private readonly fileErrorComponent: ClrFileError;\n\n private readonly commonStrings = inject(ClrCommonStringsService);\n\n protected get accept() {\n return this.fileInput.elementRef.nativeElement.accept;\n }\n\n protected get multiple() {\n return this.fileInput.elementRef.nativeElement.multiple;\n }\n\n protected get disabled() {\n return this.fileInput.elementRef.nativeElement.disabled || (this.control && this.control.disabled);\n }\n\n protected get browseButtonText() {\n const selectionButtonLabel = this.fileList ? undefined : this.fileInput?.selection?.buttonLabel;\n\n return selectionButtonLabel || this.customButtonLabel || this.commonStrings.keys.browse;\n }\n\n protected get browseButtonDescribedBy() {\n return `${this.label?.forAttr} ${this.fileInput.elementRef.nativeElement.getAttribute('aria-describedby')}`;\n }\n\n protected override get successMessagePresent() {\n return super.successMessagePresent || !!this.fileSuccessComponent;\n }\n\n protected override get errorMessagePresent() {\n return super.errorMessagePresent || !!this.fileErrorComponent;\n }\n\n focusBrowseButton() {\n this.browseButtonElementRef.nativeElement.focus();\n }\n\n protected browse() {\n const fileInputElementRef =\n this.fileList && this.multiple ? this.fileListFileInputElementRef : this.fileInput.elementRef;\n\n fileInputElementRef.nativeElement.click();\n }\n\n protected clearSelectedFiles() {\n this.fileInput.elementRef.nativeElement.value = '';\n this.fileInput.elementRef.nativeElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n\n this.focusBrowseButton();\n }\n\n protected addFilesToSelection(newFiles: FileList) {\n if (!newFiles.length) {\n return;\n }\n\n // start with new files\n const mergedFiles = [...newFiles];\n\n // add existing files if a new file doesn't have the same name\n for (const existingFile of this.fileInput.elementRef.nativeElement.files) {\n if (!mergedFiles.some(file => file.name === existingFile.name)) {\n mergedFiles.push(existingFile);\n }\n }\n\n // update file selection\n selectFiles(this.fileInput.elementRef.nativeElement, mergedFiles);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Injector,\n Optional,\n Renderer2,\n Self,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { WrappedFormControl } from '@clr/angular/forms/common';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrFileInputContainer } from './file-input-container';\n\nexport interface ClrFileInputSelection {\n fileCount: number;\n buttonLabel: string;\n clearFilesButtonLabel: string;\n}\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n host: {\n tabindex: '-1', // Remove the hidden file `input` element from the tab order because the browse `button` replaces it.\n 'aria-hidden': 'true', // Remove the hidden file `input` element from the accessibility tree because the browse `button` replaces it.\n '[class.clr-file-input]': 'true',\n },\n standalone: false,\n})\nexport class ClrFileInput extends WrappedFormControl<ClrFileInputContainer> {\n selection: ClrFileInputSelection = undefined;\n\n constructor(\n injector: Injector,\n renderer: Renderer2,\n viewContainerRef: ViewContainerRef,\n readonly elementRef: ElementRef<HTMLInputElement>,\n @Self() @Optional() private readonly control: NgControl,\n private readonly commonStrings: ClrCommonStringsService\n ) {\n super(viewContainerRef, ClrFileInputContainer, injector, control, renderer, elementRef);\n }\n\n @HostBinding('disabled')\n protected get disabled() {\n return this.elementRef.nativeElement.disabled || (this.control && this.control.disabled);\n }\n\n @HostListener('change')\n private handleChange() {\n this.updateSelection();\n }\n\n private updateSelection() {\n const files = this.elementRef.nativeElement.files;\n let selectionButtonLabel: string;\n let clearFilesButtonLabel: string;\n\n if (files?.length === 1) {\n const filename = files[0].name;\n\n selectionButtonLabel = filename;\n\n clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFile, {\n FILE: filename,\n });\n } else if (files?.length > 1) {\n const fileCount = files.length.toString();\n\n selectionButtonLabel = this.commonStrings.parse(this.commonStrings.keys.fileCount, {\n COUNT: fileCount,\n });\n\n clearFilesButtonLabel = this.commonStrings.parse(this.commonStrings.keys.clearFiles, {\n COUNT: fileCount,\n });\n }\n\n this.selection = {\n fileCount: files.length,\n buttonLabel: selectionButtonLabel,\n clearFilesButtonLabel,\n };\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\n\nimport { ClrFileListValidationErrors } from './file-input-validator-errors';\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n providers: [{ provide: NG_VALIDATORS, useExisting: ClrFileInputValidator, multi: true }],\n standalone: false,\n})\nexport class ClrFileInputValidator implements Validator {\n @Input('clrMinFileSize') minFileSize: number;\n @Input('clrMaxFileSize') maxFileSize: number;\n\n constructor(private readonly elementRef: ElementRef<HTMLInputElement>) {}\n\n validate(control: AbstractControl<FileList>): ValidationErrors {\n const files = control.value;\n const fileInputElement = this.elementRef.nativeElement;\n\n const errors: ClrFileListValidationErrors = {};\n\n // required validation (native attribute)\n if (fileInputElement.required && files?.length === 0) {\n errors.required = true;\n }\n\n const accept = fileInputElement.accept ? fileInputElement.accept.split(',').map(type => type.trim()) : null;\n\n if (files?.length > 0 && (accept || this.minFileSize || this.maxFileSize)) {\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n\n // accept validation (native attribute)\n if (accept && accept.length) {\n if (!this.validateAccept(file, accept)) {\n errors.accept = errors.accept || [];\n errors.accept.push({\n name: file.name,\n accept,\n type: file.type || '',\n extension: this.getSuffixByDepth(file.name, 2), // last up to 2 parts for reporting\n });\n }\n }\n\n // min file validation (custom input)\n if (this.minFileSize && file.size < this.minFileSize) {\n errors.minFileSize = errors.minFileSize || [];\n errors.minFileSize.push({ name: file.name, minFileSize: this.minFileSize, actualFileSize: file.size });\n }\n\n // max file validation (custom input)\n if (this.maxFileSize && file.size > this.maxFileSize) {\n errors.maxFileSize = errors.maxFileSize || [];\n errors.maxFileSize.push({ name: file.name, maxFileSize: this.maxFileSize, actualFileSize: file.size });\n }\n }\n }\n\n return Object.keys(errors).length ? errors : null;\n }\n\n private getSuffixByDepth(filename: string, depth: number): string {\n const match = filename.toLowerCase().match(new RegExp(`(\\\\.[^.]+){1,${depth}}$`, 'i'));\n return match ? match[0] : '';\n }\n\n private validateAccept(file: File, acceptList: string[]): boolean {\n const name = file.name.toLowerCase();\n const type = (file.type || '').toLowerCase();\n\n for (const entryRaw of acceptList) {\n const entry = entryRaw.trim().toLowerCase();\n if (!entry) {\n continue;\n }\n\n // Extension check\n if (entry.startsWith('.')) {\n const depth = (entry.match(/\\./g) || []).length;\n if (this.getSuffixByDepth(name, depth) === entry) {\n return true;\n }\n continue;\n }\n\n // MIME check\n if (entry.endsWith('/*')) {\n const prefix = entry.slice(0, entry.length - 1); // keep trailing slash\n if (type.startsWith(prefix)) {\n return true;\n }\n } else if (entry.includes('/') && type === entry) {\n return true;\n }\n }\n\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrFileListValidationErrors {\n required?: boolean;\n accept?: ClrFileAcceptError[];\n minFileSize?: ClrFileMinFileSizeError[];\n maxFileSize?: ClrFileMaxFileSizeError[];\n}\n\nexport interface ClrFileAcceptError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The file types that are accepted by the file input.\n */\n accept: string[];\n\n /**\n * The actual MIME type of the selected file.\n */\n type: string;\n\n /**\n * The actual extension of the selected file.\n */\n extension: string;\n}\n\nexport interface ClrFileMinFileSizeError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The minimum file size that is accepted by the file input.\n */\n minFileSize: number;\n\n /**\n * The actual size of the selected file.\n */\n actualFileSize: number;\n}\n\nexport interface ClrFileMaxFileSizeError {\n /**\n * The name of the selected file.\n */\n name: string;\n\n /**\n * The maximum file size that is accepted by the file input.\n */\n maxFileSize: number;\n\n /**\n * The actual size of the selected file.\n */\n actualFileSize: number;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, HostListener } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { clearFiles, selectFiles } from './file-input.helpers';\n\n@Directive({\n selector: 'input[type=\"file\"][clrFileInput]',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: ClrFileInputValueAccessor, multi: true }],\n standalone: false,\n})\nexport class ClrFileInputValueAccessor implements ControlValueAccessor {\n constructor(private readonly elementRef: ElementRef<HTMLInputElement>) {}\n\n writeValue(value: FileList) {\n if (value !== undefined && value !== null && !(value instanceof FileList)) {\n throw new Error('The value of a file input control must be a FileList.');\n }\n\n if (value) {\n selectFiles(this.elementRef.nativeElement, value);\n } else if (this.elementRef.nativeElement.files.length) {\n clearFiles(this.elementRef.nativeElement);\n }\n }\n\n registerOnChange(fn: (value: FileList) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n @HostListener('change')\n private handleChange() {\n this.onTouched();\n this.onChange(this.elementRef.nativeElement.files);\n }\n\n private onChange = (_value: FileList) => {};\n\n private onTouched = () => {};\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ClrCommonFormsModule } from '@clr/angular/forms/common';\nimport { ClarityIcons, ClrIcon, errorStandardIcon, folderOpenIcon, successStandardIcon } from '@clr/angular/icon';\n\nimport { ClrFileInput } from './file-input';\nimport { ClrFileInputContainer } from './file-input-container';\nimport { ClrFileInputValidator } from './file-input-validator';\nimport { ClrFileInputValueAccessor } from './file-input-value-accessor';\nimport { ClrFileList } from './file-list';\nimport { ClrFileError, ClrFileInfo, ClrFileSuccess } from './file-messages';\nimport { ClrFileMessagesTemplate } from './file-messages-template';\n\n@NgModule({\n imports: [CommonModule, ClrIcon, ClrCommonFormsModule],\n declarations: [\n ClrFileInput,\n ClrFileInputContainer,\n ClrFileInputValidator,\n ClrFileInputValueAccessor,\n ClrFileList,\n ClrFileMessagesTemplate,\n ClrFileInfo,\n ClrFileSuccess,\n ClrFileError,\n ],\n exports: [\n ClrCommonFormsModule,\n ClrFileInput,\n ClrFileInputContainer,\n ClrFileInputValidator,\n ClrFileInputValueAccessor,\n ClrFileList,\n ClrFileMessagesTemplate,\n ClrFileInfo,\n ClrFileSuccess,\n ClrFileError,\n ],\n})\nexport class ClrFileInputModule {\n constructor() {\n ClarityIcons.addIcons(folderOpenIcon, successStandardIcon, errorStandardIcon);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './file-input';\nexport * from './file-input-validator';\nexport * from './file-input-validator-errors';\nexport * from './file-input-value-accessor';\nexport * from './file-input-container';\nexport * from './file-list';\nexport * from './file-messages-template';\nexport * from './file-messages';\nexport * from './file-input.module';\nexport * from './file-input.helpers';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, Self, Optional, Directive, NgModule } from '@angular/core';
3
- import * as i3 from '@clr/angular/forms/common';
3
+ import * as i2 from '@clr/angular/forms/common';
4
4
  import { ClrAbstractContainer, NgControlService, ControlIdService, ControlClassService, WrappedFormControl, ClrCommonFormsModule } from '@clr/angular/forms/common';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
- import * as i2 from '@clr/angular/icon';
8
- import { ClarityIcons, exclamationCircleIcon, checkCircleIcon, ClrIcon } from '@clr/angular/icon';
9
7
  import * as i1$1 from '@angular/forms';
10
8
  import { FormsModule } from '@angular/forms';
9
+ import { ClarityIcons, successStandardIcon, errorStandardIcon, ClrIcon } from '@clr/angular/icon';
11
10
 
12
11
  /*
13
12
  * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
@@ -29,12 +28,6 @@ class ClrInputContainer extends ClrAbstractContainer {
29
28
  <ng-content select="[clrInput]"></ng-content>
30
29
  <ng-content select="[clrInputSuffix]"></ng-content>
31
30
  </div>
32
- @if (showInvalid) {
33
- <cds-icon class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true"></cds-icon>
34
- }
35
- @if (showValid) {
36
- <cds-icon class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true"></cds-icon>
37
- }
38
31
  </div>
39
32
  @if (showHelper) {
40
33
  <ng-content select="clr-control-helper"></ng-content>
@@ -46,7 +39,7 @@ class ClrInputContainer extends ClrAbstractContainer {
46
39
  <ng-content select="clr-control-success"></ng-content>
47
40
  }
48
41
  </div>
49
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i3.ClrControlLabel, selector: "label", inputs: ["id", "for"] }] }); }
42
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.ClrControlLabel, selector: "label", inputs: ["id", "for"] }] }); }
50
43
  }
51
44
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrInputContainer, decorators: [{
52
45
  type: Component,
@@ -64,12 +57,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
64
57
  <ng-content select="[clrInput]"></ng-content>
65
58
  <ng-content select="[clrInputSuffix]"></ng-content>
66
59
  </div>
67
- @if (showInvalid) {
68
- <cds-icon class="clr-validate-icon" shape="exclamation-circle" status="danger" aria-hidden="true"></cds-icon>
69
- }
70
- @if (showValid) {
71
- <cds-icon class="clr-validate-icon" shape="check-circle" status="success" aria-hidden="true"></cds-icon>
72
- }
73
60
  </div>
74
61
  @if (showHelper) {
75
62
  <ng-content select="clr-control-helper"></ng-content>
@@ -136,8 +123,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
136
123
  */
137
124
  class ClrInputModule {
138
125
  constructor() {
139
- ClarityIcons.addIcons(exclamationCircleIcon, checkCircleIcon // caret
140
- );
126
+ ClarityIcons.addIcons(successStandardIcon, errorStandardIcon);
141
127
  }
142
128
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
143
129
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrInputModule, declarations: [ClrInput, ClrInputContainer], imports: [CommonModule, FormsModule, ClrIcon, ClrCommonFormsModule], exports: [ClrCommonFormsModule, ClrInput, ClrInputContainer] }); }