@updevs/components 1.0.0-alpha.17 → 1.0.0-alpha.19

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 (77) hide show
  1. package/esm2022/dropdown/dropdown.component.mjs +1 -1
  2. package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +18 -3
  3. package/esm2022/form/form.component.mjs +26 -6
  4. package/esm2022/form/models/file-upload-field.model.mjs +2 -0
  5. package/esm2022/form/models/form-config.mjs +2 -0
  6. package/esm2022/form/models/public-api.mjs +9 -1
  7. package/esm2022/form/upd-form.module.mjs +8 -4
  8. package/esm2022/form-controls/abstractions/base-control.mjs +8 -2
  9. package/esm2022/form-controls/checkbox/checkbox.component.mjs +2 -4
  10. package/esm2022/form-controls/date-picker/date-picker.component.mjs +1 -1
  11. package/esm2022/form-controls/file-upload/assets/i18n/en.json +15 -0
  12. package/esm2022/form-controls/file-upload/assets/i18n/pt.json +15 -0
  13. package/esm2022/form-controls/file-upload/file-upload-changed.event.mjs +2 -0
  14. package/esm2022/form-controls/file-upload/file-upload.component.mjs +169 -0
  15. package/esm2022/form-controls/file-upload/index.mjs +2 -0
  16. package/esm2022/form-controls/file-upload/public-api.mjs +4 -0
  17. package/esm2022/form-controls/file-upload/upd-file-upload.module.mjs +47 -0
  18. package/esm2022/form-controls/file-upload/updevs-components-form-controls-file-upload.mjs +5 -0
  19. package/esm2022/form-controls/input/input.component.mjs +5 -15
  20. package/esm2022/form-controls/radio/radio.component.mjs +3 -8
  21. package/esm2022/form-controls/select/components/multiple/select-multiple.component.mjs +1 -1
  22. package/esm2022/form-controls/select/components/single/select.component.mjs +1 -1
  23. package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +2 -8
  24. package/esm2022/form-controls/textarea/textarea.component.mjs +2 -4
  25. package/esm2022/form-controls/time-picker/time-picker.component.mjs +1 -1
  26. package/esm2022/layout/layouts/blank-layout/blank-layout.component.mjs +4 -1
  27. package/esm2022/list/list.component.mjs +1 -1
  28. package/esm2022/table/components/filter-row/filter-row.component.mjs +1 -1
  29. package/esm2022/table/components/search-section/search-section.component.mjs +1 -1
  30. package/esm2022/table/table.component.mjs +1 -1
  31. package/fesm2022/updevs-components-dropdown.mjs +1 -1
  32. package/fesm2022/updevs-components-dropdown.mjs.map +1 -1
  33. package/fesm2022/updevs-components-form-controls-abstractions.mjs +7 -1
  34. package/fesm2022/updevs-components-form-controls-abstractions.mjs.map +1 -1
  35. package/fesm2022/updevs-components-form-controls-checkbox.mjs +1 -3
  36. package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +1 -1
  37. package/fesm2022/updevs-components-form-controls-date-picker.mjs +1 -1
  38. package/fesm2022/updevs-components-form-controls-date-picker.mjs.map +1 -1
  39. package/fesm2022/updevs-components-form-controls-file-upload.mjs +263 -0
  40. package/fesm2022/updevs-components-form-controls-file-upload.mjs.map +1 -0
  41. package/fesm2022/updevs-components-form-controls-input.mjs +4 -14
  42. package/fesm2022/updevs-components-form-controls-input.mjs.map +1 -1
  43. package/fesm2022/updevs-components-form-controls-radio.mjs +2 -7
  44. package/fesm2022/updevs-components-form-controls-radio.mjs.map +1 -1
  45. package/fesm2022/updevs-components-form-controls-select.mjs +3 -9
  46. package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
  47. package/fesm2022/updevs-components-form-controls-textarea.mjs +1 -3
  48. package/fesm2022/updevs-components-form-controls-textarea.mjs.map +1 -1
  49. package/fesm2022/updevs-components-form-controls-time-picker.mjs +1 -1
  50. package/fesm2022/updevs-components-form-controls-time-picker.mjs.map +1 -1
  51. package/fesm2022/updevs-components-form.mjs +46 -8
  52. package/fesm2022/updevs-components-form.mjs.map +1 -1
  53. package/fesm2022/updevs-components-layout.mjs +3 -0
  54. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  55. package/fesm2022/updevs-components-list.mjs +1 -1
  56. package/fesm2022/updevs-components-list.mjs.map +1 -1
  57. package/fesm2022/updevs-components-table.mjs +3 -3
  58. package/fesm2022/updevs-components-table.mjs.map +1 -1
  59. package/form/components/dynamic-field/dynamic-field.component.d.ts +5 -0
  60. package/form/form.component.d.ts +3 -3
  61. package/form/models/file-upload-field.model.d.ts +16 -0
  62. package/form/models/form-config.d.ts +2 -0
  63. package/form/models/public-api.d.ts +8 -0
  64. package/form/upd-form.module.d.ts +2 -1
  65. package/form-controls/abstractions/base-control.d.ts +15 -10
  66. package/form-controls/checkbox/checkbox.component.d.ts +1 -3
  67. package/form-controls/file-upload/file-upload-changed.event.d.ts +4 -0
  68. package/form-controls/file-upload/file-upload.component.d.ts +46 -0
  69. package/form-controls/file-upload/index.d.ts +1 -0
  70. package/form-controls/file-upload/public-api.d.ts +3 -0
  71. package/form-controls/file-upload/upd-file-upload.module.d.ts +14 -0
  72. package/form-controls/input/input.component.d.ts +2 -6
  73. package/form-controls/radio/radio.component.d.ts +1 -3
  74. package/form-controls/select/models/abstractions/base-select.component.d.ts +2 -8
  75. package/form-controls/textarea/textarea.component.d.ts +1 -3
  76. package/layout/layouts/blank-layout/blank-layout.component.d.ts +3 -1
  77. package/package.json +30 -23
@@ -11,8 +11,6 @@ export class CheckboxComponent extends BaseControl {
11
11
  this.changed = new EventEmitter();
12
12
  this.value = input();
13
13
  this.customClasses = input();
14
- this.name = input();
15
- this.isDisabled = input(false);
16
14
  this.isChecked = model(false);
17
15
  this.isInline = input(false);
18
16
  this.isSwitch = input(false);
@@ -34,7 +32,7 @@ export class CheckboxComponent extends BaseControl {
34
32
  this.changed.emit(event.target.checked);
35
33
  }
36
34
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
37
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: CheckboxComponent, selector: "upd-checkbox", inputs: { wrapperClasses: { classPropertyName: "wrapperClasses", publicName: "wrapperClasses", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, customClasses: { classPropertyName: "customClasses", publicName: "customClasses", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, isChecked: { classPropertyName: "isChecked", publicName: "isChecked", isSignal: true, isRequired: false, transformFunction: null }, isInline: { classPropertyName: "isInline", publicName: "isInline", isSignal: true, isRequired: false, transformFunction: null }, isSwitch: { classPropertyName: "isSwitch", publicName: "isSwitch", isSignal: true, isRequired: false, transformFunction: null }, isIndeterminate: { classPropertyName: "isIndeterminate", publicName: "isIndeterminate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", isChecked: "isCheckedChange", isIndeterminate: "isIndeterminateChange" }, host: { properties: { "class": "this.wrapperClasses" } }, viewQueries: [{ propertyName: "checkboxInput", first: true, predicate: ["checkboxInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<label class=\"form-check\" [class.form-check-inline]=\"isInline()\" [class.form-switch]=\"isSwitch()\" [ngClass]=\"customClasses()\">\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n</label>\n\n<ng-template #contentTpl>\n <input #checkboxInput type=\"checkbox\" [disabled]=\"isDisabled()\" [ngClass]=\"classes()\" [value]=\"value()\" [attr.name]=\"name()\"\n [attr.readonly]=\"isDisabled() ? '' : undefined\" [(ngModel)]=\"isChecked\" (change)=\"onSelectChange($event)\">\n\n @if (!!labelText) {\n <span class=\"form-check-label\">{{ labelText }}</span>\n }\n\n @if (!!descriptionText) {\n <span class=\"form-check-description\">{{ descriptionText }}</span>\n }\n\n @if (validationStatus() === 'invalid' && !!validationStatusTexts) {\n <div class=\"invalid-feedback\">{{ validationStatusTexts }}</div>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: CheckboxComponent, selector: "upd-checkbox", inputs: { wrapperClasses: { classPropertyName: "wrapperClasses", publicName: "wrapperClasses", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, customClasses: { classPropertyName: "customClasses", publicName: "customClasses", isSignal: true, isRequired: false, transformFunction: null }, isChecked: { classPropertyName: "isChecked", publicName: "isChecked", isSignal: true, isRequired: false, transformFunction: null }, isInline: { classPropertyName: "isInline", publicName: "isInline", isSignal: true, isRequired: false, transformFunction: null }, isSwitch: { classPropertyName: "isSwitch", publicName: "isSwitch", isSignal: true, isRequired: false, transformFunction: null }, isIndeterminate: { classPropertyName: "isIndeterminate", publicName: "isIndeterminate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", isChecked: "isCheckedChange", isIndeterminate: "isIndeterminateChange" }, host: { properties: { "class": "this.wrapperClasses" } }, viewQueries: [{ propertyName: "checkboxInput", first: true, predicate: ["checkboxInput"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<label class=\"form-check\" [class.form-check-inline]=\"isInline()\" [class.form-switch]=\"isSwitch()\" [ngClass]=\"customClasses()\">\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n</label>\n\n<ng-template #contentTpl>\n <input #checkboxInput type=\"checkbox\" [disabled]=\"isDisabled()\" [ngClass]=\"classes()\" [value]=\"value()\" [attr.name]=\"name()\"\n [attr.readonly]=\"isDisabled() ? '' : undefined\" [(ngModel)]=\"isChecked\" (change)=\"onSelectChange($event)\">\n\n @if (!!labelText) {\n <span class=\"form-check-label\">{{ labelText }}</span>\n }\n\n @if (!!descriptionText) {\n <span class=\"form-check-description\">{{ descriptionText }}</span>\n }\n\n @if (validationStatus() === 'invalid' && !!validationStatusTexts) {\n <div class=\"invalid-feedback\">{{ validationStatusTexts }}</div>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
38
36
  }
39
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CheckboxComponent, decorators: [{
40
38
  type: Component,
@@ -50,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
50
48
  }], changed: [{
51
49
  type: Output
52
50
  }] } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm0tY29udHJvbHMvY2hlY2tib3gvc3JjL2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2NoZWNrYm94L3NyYy9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7OztBQVE1RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQXlCOUM7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXpCbUIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFHaEMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFekQsVUFBSyxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDaEMsU0FBSSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkMsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsb0JBQWUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEMsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxRQUFRLEdBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFLQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVk7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs4R0FwQ1EsaUJBQWlCO2tHQUFqQixpQkFBaUIsay9DQUVVLFVBQVUsb0RDeEJsRCwyNkNBa0NBOzsyRkRaYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJO3dEQUdOLGNBQWM7c0JBQTVDLFdBQVc7dUJBQUMsT0FBTzs7c0JBQUcsS0FBSztnQkFDc0IsYUFBYTtzQkFBOUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUU3QixPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgY29tcHV0ZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2Fic3RyYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveENvbXBvbmVudCBleHRlbmRzIEJhc2VDb250cm9sIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgQElucHV0KCkgd3JhcHBlckNsYXNzZXMgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjaGVja2JveElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNoZWNrYm94SW5wdXQhOiBFbGVtZW50UmVmO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICB2YWx1ZSA9IGlucHV0PGFueT4oKTtcbiAgICBjdXN0b21DbGFzc2VzID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gICAgaXNEaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBpc0NoZWNrZWQgPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gICAgaXNJbmxpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gICAgaXNTd2l0Y2ggPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gICAgaXNJbmRldGVybWluYXRlID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIGNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxDbGFzc2VzOiBzdHJpbmdbXSA9IFsnZm9ybS1jaGVjay1pbnB1dCddO1xuXG4gICAgICAgIGlmICghIXRoaXMudmFsaWRhdGlvblN0YXR1cygpKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXNDbHMgPSBgaXMtJHt0aGlzLnZhbGlkYXRpb25TdGF0dXMoKX1gO1xuICAgICAgICAgICAgbENsYXNzZXMucHVzaChzdGF0dXNDbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFsuLi5sQ2xhc3NlcywgLi4uKHRoaXMuY3VzdG9tQ2xhc3NlcygpIHx8ICcnKS5zcGxpdCgnICcpXTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94SW5wdXQubmF0aXZlRWxlbWVudC5pbmRldGVybWluYXRlID0gISF0aGlzLmlzSW5kZXRlcm1pbmF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlbGVjdENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICB9XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrXCIgW2NsYXNzLmZvcm0tY2hlY2staW5saW5lXT1cImlzSW5saW5lKClcIiBbY2xhc3MuZm9ybS1zd2l0Y2hdPVwiaXNTd2l0Y2goKVwiIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzZXMoKVwiPlxuICAgIEBpZiAoISFoaW50VGV4dCB8fCAhIWhpbnRUZW1wbGF0ZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBhbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1oZWxwXCIgW3VwZFBvcG92ZXJdPVwiaGludFRleHRcIiBbdXBkUG9wb3ZlclRlbXBsYXRlXT1cImhpbnRUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3VwZFBvcG92ZXJBY3RBc1Rvb2x0aXBdPVwiaGludEFzVG9vbHRpcCgpXCI+XG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L2xhYmVsPlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUcGw+XG4gICAgPGlucHV0ICNjaGVja2JveElucHV0IHR5cGU9XCJjaGVja2JveFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiBbbmdDbGFzc109XCJjbGFzc2VzKClcIiBbdmFsdWVdPVwidmFsdWUoKVwiIFthdHRyLm5hbWVdPVwibmFtZSgpXCJcbiAgICAgICAgW2F0dHIucmVhZG9ubHldPVwiaXNEaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIiBbKG5nTW9kZWwpXT1cImlzQ2hlY2tlZFwiIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiPlxuXG4gICAgQGlmICghIWxhYmVsVGV4dCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj57eyBsYWJlbFRleHQgfX08L3NwYW4+XG4gICAgfVxuXG4gICAgQGlmICghIWRlc2NyaXB0aW9uVGV4dCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvblRleHQgfX08L3NwYW4+XG4gICAgfVxuXG4gICAgQGlmICh2YWxpZGF0aW9uU3RhdHVzKCkgPT09ICdpbnZhbGlkJyAmJiAhIXZhbGlkYXRpb25TdGF0dXNUZXh0cykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7IHZhbGlkYXRpb25TdGF0dXNUZXh0cyB9fTwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm0tY29udHJvbHMvY2hlY2tib3gvc3JjL2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2NoZWNrYm94L3NyYy9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7OztBQVE1RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQXVCOUM7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQXZCbUIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFHaEMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFekQsVUFBSyxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3JCLGtCQUFhLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDaEMsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsb0JBQWUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEMsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsTUFBTSxRQUFRLEdBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFLQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVk7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs4R0FsQ1EsaUJBQWlCO2tHQUFqQixpQkFBaUIsc3ZDQUVVLFVBQVUsb0RDeEJsRCwyNkNBa0NBOzsyRkRaYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksY0FBYyxpQkFHVCxpQkFBaUIsQ0FBQyxJQUFJO3dEQUdOLGNBQWM7c0JBQTVDLFdBQVc7dUJBQUMsT0FBTzs7c0JBQUcsS0FBSztnQkFDc0IsYUFBYTtzQkFBOUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUU3QixPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgY29tcHV0ZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2Fic3RyYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLWNoZWNrYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveENvbXBvbmVudCBleHRlbmRzIEJhc2VDb250cm9sIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgQElucHV0KCkgd3JhcHBlckNsYXNzZXMgPSAnJztcbiAgICBAVmlld0NoaWxkKCdjaGVja2JveElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNoZWNrYm94SW5wdXQhOiBFbGVtZW50UmVmO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICB2YWx1ZSA9IGlucHV0PGFueT4oKTtcbiAgICBjdXN0b21DbGFzc2VzID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIGlzQ2hlY2tlZCA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBpc0lubGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBpc1N3aXRjaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBpc0luZGV0ZXJtaW5hdGUgPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gICAgY2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgbENsYXNzZXM6IHN0cmluZ1tdID0gWydmb3JtLWNoZWNrLWlucHV0J107XG5cbiAgICAgICAgaWYgKCEhdGhpcy52YWxpZGF0aW9uU3RhdHVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NscyA9IGBpcy0ke3RoaXMudmFsaWRhdGlvblN0YXR1cygpfWA7XG4gICAgICAgICAgICBsQ2xhc3Nlcy5wdXNoKHN0YXR1c0Nscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLmxDbGFzc2VzLCAuLi4odGhpcy5jdXN0b21DbGFzc2VzKCkgfHwgJycpLnNwbGl0KCcgJyldO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tib3hJbnB1dC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSAhIXRoaXMuaXNJbmRldGVybWluYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU2VsZWN0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNoYW5nZWQuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpO1xuICAgIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2tcIiBbY2xhc3MuZm9ybS1jaGVjay1pbmxpbmVdPVwiaXNJbmxpbmUoKVwiIFtjbGFzcy5mb3JtLXN3aXRjaF09XCJpc1N3aXRjaCgpXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3NlcygpXCI+XG4gICAgQGlmICghIWhpbnRUZXh0IHx8ICEhaGludFRlbXBsYXRlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhlbHBcIiBbdXBkUG9wb3Zlcl09XCJoaW50VGV4dFwiIFt1cGRQb3BvdmVyVGVtcGxhdGVdPVwiaGludFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbdXBkUG9wb3ZlckFjdEFzVG9vbHRpcF09XCJoaW50QXNUb29sdGlwKClcIj5cbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgIH1cbjwvbGFiZWw+XG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFRwbD5cbiAgICA8aW5wdXQgI2NoZWNrYm94SW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIFtuZ0NsYXNzXT1cImNsYXNzZXMoKVwiIFt2YWx1ZV09XCJ2YWx1ZSgpXCIgW2F0dHIubmFtZV09XCJuYW1lKClcIlxuICAgICAgICBbYXR0ci5yZWFkb25seV09XCJpc0Rpc2FibGVkKCkgPyAnJyA6IHVuZGVmaW5lZFwiIFsobmdNb2RlbCldPVwiaXNDaGVja2VkXCIgKGNoYW5nZSk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQpXCI+XG5cbiAgICBAaWYgKCEhbGFiZWxUZXh0KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPnt7IGxhYmVsVGV4dCB9fTwvc3Bhbj5cbiAgICB9XG5cbiAgICBAaWYgKCEhZGVzY3JpcHRpb25UZXh0KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1jaGVjay1kZXNjcmlwdGlvblwiPnt7IGRlc2NyaXB0aW9uVGV4dCB9fTwvc3Bhbj5cbiAgICB9XG5cbiAgICBAaWYgKHZhbGlkYXRpb25TdGF0dXMoKSA9PT0gJ2ludmFsaWQnICYmICEhdmFsaWRhdGlvblN0YXR1c1RleHRzKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+e3sgdmFsaWRhdGlvblN0YXR1c1RleHRzIH19PC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -112,7 +112,7 @@ export class DatePickerComponent extends BaseComponent {
112
112
  this.renderer.setStyle(ddElement, 'left', 0, RendererStyleFlags2.Important);
113
113
  }
114
114
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
115
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DatePickerComponent, selector: "upd-date-picker", inputs: { shouldCloseOnOutsideClick: "shouldCloseOnOutsideClick", minDate: "minDate", maxDate: "maxDate", startAt: "startAt", startView: "startView", dateFilter: "dateFilter", isRange: "isRange" }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged" }, viewQueries: [{ propertyName: "componentBox", first: true, predicate: ["componentBox"], descendants: true, read: ElementRef }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"dropdown\">\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n <div class=\"d-flex flex-row\">\n <upd-input [value]=\"startDate\" (valueChange)=\"updateStartDate($event)\" customClasses=\"date-input\" class=\"px-1\"\n [isPlainText]=\"true\">\n </upd-input>\n\n @if (isRange) {\n <span class=\"px-1\"> - </span>\n <upd-input [value]=\"endDate\" (valueChange)=\"updateEndDate($event)\" customClasses=\"date-input\" class=\"px-1\"\n [isPlainText]=\"true\">\n </upd-input>\n }\n </div>\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (hasSelectedData) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"clearSelection()\" customClasses=\"link-secondary\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"openDropdown()\" customClasses=\"link-secondary ms-2\">\n <upd-icon [model]=\"{tablerIcon:'calendar'}\"></upd-icon>\n </upd-button>\n </div>\n </div>\n <div #calendar class=\"dropdown-content remove-top-radius\" [style.display]=\"isDropdownOpen ? 'block' : 'none'\">\n <upd-calendar class=\"p-2\" [id]=\"id\" [startAt]=\"startAt\" [startView]=\"startView\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\n [dateFilter]=\"dateFilter\" [selected]=\"selectedData\" [comparisonStart]=\"comparisonStart\" [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\" [endDateAccessibleName]=\"endDateAccessibleName\" [isRange]=\"isRange\"\n (yearSelected)=\"yearSelected.emit($event)\" (monthSelected)=\"monthSelected.emit($event)\" (viewChanged)=\"viewChanged.emit($event)\"\n (userSelection)=\"handleUserSelection($event)\" (userDragDrop)=\"handleUserDragDrop($event)\">\n </upd-calendar>\n </div>\n</div>\n", styles: [".dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e;width:350px!important}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}::ng-deep .date-input{padding:0!important;width:80px!important}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.CalendarComponent, selector: "upd-calendar", inputs: ["startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "isRange"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "userSelection", "userDragDrop"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "name", "maxLength", "isDisabled", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "isRequired", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout", "labelColSize"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }] }); }
115
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: DatePickerComponent, selector: "upd-date-picker", inputs: { shouldCloseOnOutsideClick: "shouldCloseOnOutsideClick", minDate: "minDate", maxDate: "maxDate", startAt: "startAt", startView: "startView", dateFilter: "dateFilter", isRange: "isRange" }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged" }, viewQueries: [{ propertyName: "componentBox", first: true, predicate: ["componentBox"], descendants: true, read: ElementRef }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div class=\"dropdown\">\n <div #componentBox class=\"input-group input-group-flat\">\n <div class=\"form-control\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n <div class=\"d-flex flex-row\">\n <upd-input [value]=\"startDate\" (valueChange)=\"updateStartDate($event)\" customClasses=\"date-input\" class=\"px-1\"\n [isPlainText]=\"true\">\n </upd-input>\n\n @if (isRange) {\n <span class=\"px-1\"> - </span>\n <upd-input [value]=\"endDate\" (valueChange)=\"updateEndDate($event)\" customClasses=\"date-input\" class=\"px-1\"\n [isPlainText]=\"true\">\n </upd-input>\n }\n </div>\n </div>\n <div class=\"input-group-text\" [class.remove-bottom-radius]=\"isDropdownOpen\">\n @if (hasSelectedData) {\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"clearSelection()\" customClasses=\"link-secondary\">\n <upd-icon [model]=\"{tablerIcon:'x'}\"></upd-icon>\n </upd-button>\n }\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"openDropdown()\" customClasses=\"link-secondary ms-2\">\n <upd-icon [model]=\"{tablerIcon:'calendar'}\"></upd-icon>\n </upd-button>\n </div>\n </div>\n <div #calendar class=\"dropdown-content remove-top-radius\" [style.display]=\"isDropdownOpen ? 'block' : 'none'\">\n <upd-calendar class=\"p-2\" [id]=\"id\" [startAt]=\"startAt\" [startView]=\"startView\" [minDate]=\"minDate\" [maxDate]=\"maxDate\"\n [dateFilter]=\"dateFilter\" [selected]=\"selectedData\" [comparisonStart]=\"comparisonStart\" [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\" [endDateAccessibleName]=\"endDateAccessibleName\" [isRange]=\"isRange\"\n (yearSelected)=\"yearSelected.emit($event)\" (monthSelected)=\"monthSelected.emit($event)\" (viewChanged)=\"viewChanged.emit($event)\"\n (userSelection)=\"handleUserSelection($event)\" (userDragDrop)=\"handleUserDragDrop($event)\">\n </upd-calendar>\n </div>\n</div>\n", styles: [".dropdown-content{position:absolute!important;background-color:var(--upd-card-bg);z-index:1;border:var(--upd-card-border-width) solid var(--upd-card-border-color)!important;border-radius:var(--upd-card-border-radius)!important;box-shadow:0 1px 1px #0000002e;width:350px!important}.remove-bottom-radius{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.remove-top-radius{border-top-left-radius:0!important;border-top-right-radius:0!important}::ng-deep .date-input{padding:0!important;width:80px!important}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i2.CalendarComponent, selector: "upd-calendar", inputs: ["startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "isRange"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "userSelection", "userDragDrop"] }, { kind: "component", type: i3.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i4.InputComponent, selector: "upd-input", inputs: ["type", "mask", "maskConfig", "value", "size", "customClasses", "wrapperClasses", "maxLength", "isPlainText", "isReadOnly", "isLoading", "isRound", "isFlush", "isInputGroupFlat", "isPrependButton", "isAppendButton", "isFloating", "loaderPosition", "prependIconModel", "appendIconModel", "isValidationStatusLight", "layout"], outputs: ["valueChange", "blurred", "keyDown", "keyDownEsc", "keyUpEnter"] }] }); }
116
116
  }
117
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: DatePickerComponent, decorators: [{
118
118
  type: Component,
@@ -0,0 +1,15 @@
1
+ {
2
+ "UpDevs": {
3
+ "FormControls": {
4
+ "FileUpload": {
5
+ "DropzoneDesktopDescription": "Drop {isMultiple, select, true {files} other {a file}} here or <u>click</u> to select {isMultiple, select, true {them} other {it}}",
6
+ "DropzoneMobileDescription": "Touch to select {isMultiple, select, true {files} other {a file}} to upload",
7
+ "SelectFile": "Select {isMultiple, select, true {files} other {a file}}",
8
+ "NoFileSelected": "No {isMultiple, select, true {files} other {file}} selected",
9
+ "ExtensionNotAllowed": "The file ({{fileName}}) with the extension '{{extension}}' is not allowed. Allowed {hasMultipleExt, select, true {extensions are} other {extension is}}: {{allowedExtensions}}.",
10
+ "MinSizeNotMet": "The file ({{fileName}}) of size {{fileSize}} is smaller than the allowed of {{minAllowedSize}}.",
11
+ "MaxSizeExceeded": "The file ({{fileName}}) of size {{fileSize}} is bigger than the allowed of {{maxAllowedSize}}."
12
+ }
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "UpDevs": {
3
+ "FormControls": {
4
+ "FileUpload": {
5
+ "DropzoneDesktopDescription": "Arraste {isMultiple, select, true {arquivos} other {um arquivo}} para cá ou <u>clique</u> para selecioná-lo{isMultiple, select, true {s} other {}}",
6
+ "DropzoneMobileDescription": "Toque para selecionar {isMultiple, select, true {arquivos} other {um arquivo}} to upload",
7
+ "SelectFile": "Selecione {isMultiple, select, true {arquivos} other {um arquivo}}",
8
+ "NoFileSelected": "Nenhum arquivo selecionado",
9
+ "ExtensionNotAllowed": "O arquivo ({{fileName}}) tem a extensão '{{extension}}' que não é permitida. {hasMultipleExt, select, true {As extensões de arquivo permitidas são} other {A extensão de arquivo permitida é}}: {{allowedExtensions}}.",
10
+ "MinSizeNotMet": "O arquivo ({{fileName}}) de tamanho {{fileSize}} é menor do que o permitido de {{minAllowedSize}}.",
11
+ "MaxSizeExceeded": "O arquivo ({{fileName}}) de tamanho {{fileSize}} é maior do que o permitido de {{maxAllowedSize}}."
12
+ }
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQtY2hhbmdlZC5ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2ZpbGUtdXBsb2FkL3NyYy9maWxlLXVwbG9hZC1jaGFuZ2VkLmV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEZpbGVVcGxvYWRDaGFuZ2VkRXZlbnQge1xuICAgIGZpbGU6IEZpbGU7XG4gICAgZGF0YVVybDogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,169 @@
1
+ import { Component, computed, EventEmitter, HostBinding, inject, input, Output, signal } from '@angular/core';
2
+ import { ColumnSizeHelper } from '@updevs/components';
3
+ import { PlatformService, Tools } from '@updevs/sdk/core';
4
+ import { BaseControl } from '@updevs/components/form-controls/abstractions';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@jsverse/transloco";
8
+ import * as i3 from "@updevs/components/button";
9
+ import * as i4 from "@updevs/icons";
10
+ import * as i5 from "@updevs/components/popover";
11
+ export class FileUploadComponent extends BaseControl {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.hostWrapperClasses = '';
15
+ this.fileChanged = new EventEmitter();
16
+ this.fileName = input();
17
+ this.title = input();
18
+ this.allowFilesDrop = input(false);
19
+ this.isMultiple = input(false); // TODO: implement
20
+ this.allowedExtensions = input('*');
21
+ this.minFileSize = input();
22
+ this.maxFileSize = input();
23
+ this.layout = input('vertical');
24
+ this.isOver = signal(false);
25
+ this.showValidationStatus = computed(() => !!this.validationStatus() && (this.validationStatus() === 'invalid' || this.showValidStatus()));
26
+ this.validationStatusClass = computed(() => {
27
+ if (this.showValidationStatus()) {
28
+ return `is-${this.validationStatus()}`;
29
+ }
30
+ return '';
31
+ });
32
+ this.validationStatusBorderClass = computed(() => {
33
+ if (this.showValidationStatus()) {
34
+ return this.validationStatus() === 'invalid' ? 'border-danger' : 'border-success';
35
+ }
36
+ return '';
37
+ });
38
+ this.errorsList = computed(() => [...this.validationStatusTexts.concat(this.fileUploadErrors())]);
39
+ this.currentFiles = signal(undefined);
40
+ this.labelSizeClasses = computed(() => {
41
+ if (this.layout() !== 'horizontal') {
42
+ return 'form-label';
43
+ }
44
+ return ColumnSizeHelper.getClasses('col-form-label', ColumnSizeHelper.getSizeClasses(this.labelColSize(), 3));
45
+ });
46
+ this.firstFileName = computed(() => (this.currentFiles()?.length || 0) > 0 ? this.currentFiles()[0].name : this.fileName());
47
+ this.defaultMobileDesc = {
48
+ text: 'UpDevs.FormControls.FileUpload.DropzoneMobileDescription',
49
+ isTranslated: false
50
+ };
51
+ this.defaultDesktopDesc = {
52
+ text: 'UpDevs.FormControls.FileUpload.DropzoneDesktopDescription',
53
+ isTranslated: false
54
+ };
55
+ this.fileUploadErrors = signal([]);
56
+ this.platformService = inject(PlatformService);
57
+ }
58
+ get titleText() {
59
+ return this._textService.getText(this.title(), { isMultiple: this.isMultiple() });
60
+ }
61
+ get dropDescriptionText() {
62
+ return !!this.descriptionText
63
+ ? this.descriptionText
64
+ : this._textService.getText(this.platformService.isMobile ? this.defaultMobileDesc : this.defaultDesktopDesc, { isMultiple: this.isMultiple() });
65
+ }
66
+ get supportsAdvancedUpload() {
67
+ const div = document.createElement('div');
68
+ return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && 'FormData' in window && 'FileReader' in window;
69
+ }
70
+ onFileChange(event) {
71
+ event.stopPropagation();
72
+ const files = Array.from(event.target.files);
73
+ if (!!files) {
74
+ this.currentFiles.set([...files]);
75
+ const errors = files.map(f => this.getFileErrors(f)).reduce((acc, e) => acc.concat(e), []);
76
+ if (errors.length > 0) {
77
+ this.fileUploadErrors.set([...errors]);
78
+ return;
79
+ }
80
+ if (this.isMultiple()) {
81
+ // TODO: implement
82
+ }
83
+ else {
84
+ const file = files[0];
85
+ const reader = new FileReader();
86
+ reader.onload = (fileReader) => this.fileChanged.emit({ file: file, dataUrl: fileReader.target.result });
87
+ reader.readAsDataURL(file);
88
+ }
89
+ }
90
+ }
91
+ removeFile() {
92
+ this.currentFiles.set([]);
93
+ this.fileChanged.emit(undefined);
94
+ }
95
+ onDrag(event) {
96
+ event.preventDefault();
97
+ event.stopPropagation();
98
+ }
99
+ onDragStart(event) {
100
+ event.preventDefault();
101
+ event.stopPropagation();
102
+ }
103
+ onDragEnd(event) {
104
+ event.preventDefault();
105
+ event.stopPropagation();
106
+ this.isOver.set(false);
107
+ }
108
+ onDragOver(event) {
109
+ event.preventDefault();
110
+ event.stopPropagation();
111
+ this.isOver.set(true);
112
+ }
113
+ onDragEnter(event) {
114
+ event.preventDefault();
115
+ event.stopPropagation();
116
+ this.isOver.set(true);
117
+ }
118
+ onDragLeave(event) {
119
+ event.preventDefault();
120
+ event.stopPropagation();
121
+ this.isOver.set(false);
122
+ }
123
+ onDrop(event) {
124
+ event.preventDefault();
125
+ event.stopPropagation();
126
+ this.isOver.set(false);
127
+ const droppedFiles = event.dataTransfer.files;
128
+ }
129
+ getFileErrors(file) {
130
+ const extension = `.${file.name.split('.').pop() || ''}`;
131
+ const fileSizeInKB = Math.round(file.size / 1024);
132
+ const errors = [];
133
+ if (this.allowedExtensions() !== '*' && !this.allowedExtensions().includes(extension)) {
134
+ errors.push(this._textService.getText({ text: 'UpDevs.FormControls.FileUpload.ExtensionNotAllowed', isTranslated: false }, {
135
+ fileName: file.name,
136
+ extension,
137
+ hasMultipleExt: this.allowedExtensions().includes(','),
138
+ allowedExtensions: this.allowedExtensions()
139
+ }));
140
+ }
141
+ if (!!this.minFileSize() && fileSizeInKB < this.minFileSize()) {
142
+ errors.push(this._textService.getText({ text: 'UpDevs.FormControls.FileUpload.MinSizeNotMet', isTranslated: false }, {
143
+ fileName: file.name,
144
+ fileSize: Tools.Text.formatKilobytes(fileSizeInKB),
145
+ minAllowedSize: Tools.Text.formatKilobytes(this.minFileSize())
146
+ }));
147
+ }
148
+ if (!!this.maxFileSize() && fileSizeInKB > this.maxFileSize()) {
149
+ errors.push(this._textService.getText({ text: 'UpDevs.FormControls.FileUpload.MaxSizeExceeded', isTranslated: false }, {
150
+ fileName: file.name,
151
+ fileSize: Tools.Text.formatKilobytes(fileSizeInKB),
152
+ maxAllowedSize: Tools.Text.formatKilobytes(this.maxFileSize())
153
+ }));
154
+ }
155
+ return errors;
156
+ }
157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FileUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
158
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: FileUploadComponent, selector: "upd-file-upload", inputs: { fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, allowFilesDrop: { classPropertyName: "allowFilesDrop", publicName: "allowFilesDrop", isSignal: true, isRequired: false, transformFunction: null }, isMultiple: { classPropertyName: "isMultiple", publicName: "isMultiple", isSignal: true, isRequired: false, transformFunction: null }, allowedExtensions: { classPropertyName: "allowedExtensions", publicName: "allowedExtensions", isSignal: true, isRequired: false, transformFunction: null }, minFileSize: { classPropertyName: "minFileSize", publicName: "minFileSize", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileChanged: "fileChanged" }, host: { properties: { "class": "this.hostWrapperClasses" } }, usesInheritance: true, ngImport: i0, template: "<input class=\"d-none\" [attr.id]=\"name()\" [attr.name]=\"name()\" type=\"file\" [attr.multiple]=\"isMultiple() ? true : undefined\"\n [accept]=\"allowedExtensions()\" (change)=\"onFileChange($event)\" />\n\n<div class=\"row\">\n <ng-container *transloco=\"let t; prefix: 'UpDevs.FormControls.FileUpload'\">\n @if (!!labelText) {\n <div [ngClass]=\"labelSizeClasses()\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n }\n\n @if (supportsAdvancedUpload && allowFilesDrop()) {\n <div class=\"d-flex flex-column border rounded-2 p-2 w-100 h-100\" [ngClass]=\"validationStatusBorderClass()\"\n [class.bg-muted-lt]=\"!isOver()\" [class.bg-primary-lt]=\"isOver()\" (drag)=\"onDrag($event)\" (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd($event)\" (dragover)=\"onDragOver($event)\" (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n @if (!!titleText) {\n <span class=\"fw-bold align-self-center cursor-pointer\" [innerHTML]=\"titleText\"></span>\n }\n\n <label [for]=\"name()\" class=\"text-secondary align-self-center cursor-pointer\" [innerHTML]=\"dropDescriptionText\"></label>\n\n @if (!labelText && (!!hintText || !!this.hintTemplate())) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else {\n @if (!labelText && (!!hintText || !!this.hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n }\n }\n @if (validationStatus() === 'invalid' && errorsList().length > 0) {\n @for (desc of errorsList(); track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n\n <ng-template #inputTpl>\n <div class=\"input-group col\">\n <label class=\"input-group-text cursor-pointer\" [ngClass]=\"validationStatusBorderClass()\" [for]=\"name()\">\n {{ t('SelectFile', { isMultiple: isMultiple() }) }}\n </label>\n <input type=\"text\" class=\"form-control text-truncate\" [class.border-end-0]=\"!!firstFileName()\"\n [value]=\"firstFileName() || ''\"\n [ngClass]=\"validationStatusClass()\" placeholder=\"{{ t('NoFileSelected', { isMultiple: isMultiple() }) }}\"\n [attr.disabled]=\"isDisabled() || undefined\" readonly>\n\n @if (!!firstFileName()) {\n <div class=\"input-group-text bg-transparent\" [ngClass]=\"validationStatusBorderClass()\">\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"removeFile()\" customClasses=\"link-secondary cursor-pointer\">\n <upd-icon tablerIcon=\"trash\" [tablerIconSize]=\"18\"></upd-icon>\n </upd-button>\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n\n <ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i3.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }, { kind: "component", type: i4.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[updPopover]", inputs: ["updPopover", "updPopoverTitle", "updPopoverTitleTemplate", "updPopoverTemplate", "updPopoverPlacement", "updPopoverCustomClasses", "updPopoverActAsTooltip"] }] }); }
159
+ }
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: FileUploadComponent, decorators: [{
161
+ type: Component,
162
+ args: [{ selector: 'upd-file-upload', template: "<input class=\"d-none\" [attr.id]=\"name()\" [attr.name]=\"name()\" type=\"file\" [attr.multiple]=\"isMultiple() ? true : undefined\"\n [accept]=\"allowedExtensions()\" (change)=\"onFileChange($event)\" />\n\n<div class=\"row\">\n <ng-container *transloco=\"let t; prefix: 'UpDevs.FormControls.FileUpload'\">\n @if (!!labelText) {\n <div [ngClass]=\"labelSizeClasses()\">\n <label [class.required]=\"isRequired()\">{{ labelText }}</label>\n\n @if (!!hintText || !!this.hintTemplate()) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n }\n\n @if (supportsAdvancedUpload && allowFilesDrop()) {\n <div class=\"d-flex flex-column border rounded-2 p-2 w-100 h-100\" [ngClass]=\"validationStatusBorderClass()\"\n [class.bg-muted-lt]=\"!isOver()\" [class.bg-primary-lt]=\"isOver()\" (drag)=\"onDrag($event)\" (dragstart)=\"onDragStart($event)\"\n (dragend)=\"onDragEnd($event)\" (dragover)=\"onDragOver($event)\" (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n @if (!!titleText) {\n <span class=\"fw-bold align-self-center cursor-pointer\" [innerHTML]=\"titleText\"></span>\n }\n\n <label [for]=\"name()\" class=\"text-secondary align-self-center cursor-pointer\" [innerHTML]=\"dropDescriptionText\"></label>\n\n @if (!labelText && (!!hintText || !!this.hintTemplate())) {\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n }\n </div>\n } @else {\n @if (!labelText && (!!hintText || !!this.hintTemplate())) {\n <div class=\"row g-2\">\n <div class=\"col\">\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <ng-template [ngTemplateOutlet]=\"hintTpl\"></ng-template>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"inputTpl\"></ng-template>\n }\n }\n @if (validationStatus() === 'invalid' && errorsList().length > 0) {\n @for (desc of errorsList(); track desc) {\n <div class=\"invalid-feedback\">{{ desc }}</div>\n }\n }\n\n <ng-template #inputTpl>\n <div class=\"input-group col\">\n <label class=\"input-group-text cursor-pointer\" [ngClass]=\"validationStatusBorderClass()\" [for]=\"name()\">\n {{ t('SelectFile', { isMultiple: isMultiple() }) }}\n </label>\n <input type=\"text\" class=\"form-control text-truncate\" [class.border-end-0]=\"!!firstFileName()\"\n [value]=\"firstFileName() || ''\"\n [ngClass]=\"validationStatusClass()\" placeholder=\"{{ t('NoFileSelected', { isMultiple: isMultiple() }) }}\"\n [attr.disabled]=\"isDisabled() || undefined\" readonly>\n\n @if (!!firstFileName()) {\n <div class=\"input-group-text bg-transparent\" [ngClass]=\"validationStatusBorderClass()\">\n <upd-button [shouldIgnoreBtnClass]=\"true\" (clicked)=\"removeFile()\" customClasses=\"link-secondary cursor-pointer\">\n <upd-icon tablerIcon=\"trash\" [tablerIconSize]=\"18\"></upd-icon>\n </upd-button>\n </div>\n }\n </div>\n </ng-template>\n </ng-container>\n\n <ng-template #hintTpl>\n <span class=\"form-help ms-2\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\" [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </ng-template>\n</div>\n" }]
163
+ }], propDecorators: { hostWrapperClasses: [{
164
+ type: HostBinding,
165
+ args: ['class']
166
+ }], fileChanged: [{
167
+ type: Output
168
+ }] } });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Zvcm0tY29udHJvbHMvZmlsZS11cGxvYWQvc3JjL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2ZpbGUtdXBsb2FkL3NyYy9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sb0JBQW9CLENBQUM7QUFFOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7QUFVNUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFMcEQ7O1FBTTBCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUUzQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF3QyxDQUFDO1FBRWpGLGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUMzQixVQUFLLEdBQUcsS0FBSyxFQUFhLENBQUM7UUFDM0IsbUJBQWMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsZUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUM3QyxzQkFBaUIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEtBQUss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LEVBQUUsS0FBSyxFQUFFLEVBQy9FO2dCQUNJLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDbkIsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztnQkFDbEQsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQzthQUNsRSxDQUNKLENBQ0osQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOzhHQTlMUSxtQkFBbUI7a0dBQW5CLG1CQUFtQiwrdkNDZGhDLHc3SEE2RUE7OzJGRC9EYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksaUJBQWlCOzhCQUtMLGtCQUFrQjtzQkFBdkMsV0FBVzt1QkFBQyxPQUFPO2dCQUVELFdBQVc7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBpbmplY3QsIGlucHV0LCBPdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29sdW1uU2l6ZUhlbHBlciwgSG9yaXpvbnRhbFZlcnRpY2FsVHlwZSB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUZXh0TW9kZWwgfSBmcm9tICdAdXBkZXZzL3Nkayc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UsIFRvb2xzIH0gZnJvbSAnQHVwZGV2cy9zZGsvY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2Fic3RyYWN0aW9ucyc7XG5pbXBvcnQgeyBPcHRpb25hbFR5cGUgfSBmcm9tICdAdXBkZXZzL3Nkay90eXBlcyc7XG5cbmltcG9ydCB7IEZpbGVVcGxvYWRDaGFuZ2VkRXZlbnQgfSBmcm9tICcuL2ZpbGUtdXBsb2FkLWNoYW5nZWQuZXZlbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1maWxlLXVwbG9hZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29udHJvbCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RXcmFwcGVyQ2xhc3NlcyA9ICcnO1xuXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGZpbGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25hbFR5cGU8RmlsZVVwbG9hZENoYW5nZWRFdmVudD4+KCk7XG5cbiAgICByZWFkb25seSBmaWxlTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICByZWFkb25seSB0aXRsZSA9IGlucHV0PFRleHRNb2RlbD4oKTtcbiAgICByZWFkb25seSBhbGxvd0ZpbGVzRHJvcCA9IGlucHV0KGZhbHNlKTtcbiAgICByZWFkb25seSBpc011bHRpcGxlID0gaW5wdXQoZmFsc2UpOyAvLyBUT0RPOiBpbXBsZW1lbnRcbiAgICByZWFkb25seSBhbGxvd2VkRXh0ZW5zaW9ucyA9IGlucHV0KCcqJyk7XG4gICAgcmVhZG9ubHkgbWluRmlsZVNpemUgPSBpbnB1dDxudW1iZXI+KCk7XG4gICAgcmVhZG9ubHkgbWF4RmlsZVNpemUgPSBpbnB1dDxudW1iZXI+KCk7XG4gICAgcmVhZG9ubHkgbGF5b3V0ID0gaW5wdXQ8SG9yaXpvbnRhbFZlcnRpY2FsVHlwZT4oJ3ZlcnRpY2FsJyk7XG4gICAgcmVhZG9ubHkgaXNPdmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgICByZWFkb25seSBzaG93VmFsaWRhdGlvblN0YXR1cyA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgICEhdGhpcy52YWxpZGF0aW9uU3RhdHVzKCkgJiYgKHRoaXMudmFsaWRhdGlvblN0YXR1cygpID09PSAnaW52YWxpZCcgfHwgdGhpcy5zaG93VmFsaWRTdGF0dXMoKSlcbiAgICApO1xuICAgIHJlYWRvbmx5IHZhbGlkYXRpb25TdGF0dXNDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1ZhbGlkYXRpb25TdGF0dXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBpcy0ke3RoaXMudmFsaWRhdGlvblN0YXR1cygpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgdmFsaWRhdGlvblN0YXR1c0JvcmRlckNsYXNzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zaG93VmFsaWRhdGlvblN0YXR1cygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU3RhdHVzKCkgPT09ICdpbnZhbGlkJyA/ICdib3JkZXItZGFuZ2VyJyA6ICdib3JkZXItc3VjY2Vzcyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgZXJyb3JzTGlzdCA9IGNvbXB1dGVkKCgpID0+IFsuLi50aGlzLnZhbGlkYXRpb25TdGF0dXNUZXh0cy5jb25jYXQodGhpcy5maWxlVXBsb2FkRXJyb3JzKCkpXSk7XG4gICAgcmVhZG9ubHkgY3VycmVudEZpbGVzID0gc2lnbmFsPE9wdGlvbmFsVHlwZTxGaWxlW10+Pih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IGxhYmVsU2l6ZUNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxheW91dCgpICE9PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnZm9ybS1sYWJlbCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQ29sdW1uU2l6ZUhlbHBlci5nZXRDbGFzc2VzKFxuICAgICAgICAgICAgJ2NvbC1mb3JtLWxhYmVsJyxcbiAgICAgICAgICAgIENvbHVtblNpemVIZWxwZXIuZ2V0U2l6ZUNsYXNzZXModGhpcy5sYWJlbENvbFNpemUoKSwgMylcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICByZWFkb25seSBmaXJzdEZpbGVOYW1lID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY3VycmVudEZpbGVzKCk/Lmxlbmd0aCB8fCAwKSA+IDAgPyB0aGlzLmN1cnJlbnRGaWxlcygpIVswXS5uYW1lIDogdGhpcy5maWxlTmFtZSgpKTtcblxuICAgIGdldCB0aXRsZVRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRTZXJ2aWNlLmdldFRleHQodGhpcy50aXRsZSgpLCB7IGlzTXVsdGlwbGU6IHRoaXMuaXNNdWx0aXBsZSgpIH0pO1xuICAgIH1cbiAgICBnZXQgZHJvcERlc2NyaXB0aW9uVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRlc2NyaXB0aW9uVGV4dFxuICAgICAgICAgICAgPyB0aGlzLmRlc2NyaXB0aW9uVGV4dFxuICAgICAgICAgICAgOiB0aGlzLl90ZXh0U2VydmljZS5nZXRUZXh0KFxuICAgICAgICAgICAgICAgIHRoaXMucGxhdGZvcm1TZXJ2aWNlLmlzTW9iaWxlID8gdGhpcy5kZWZhdWx0TW9iaWxlRGVzYyA6IHRoaXMuZGVmYXVsdERlc2t0b3BEZXNjLCB7IGlzTXVsdGlwbGU6IHRoaXMuaXNNdWx0aXBsZSgpIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c0FkdmFuY2VkVXBsb2FkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcmV0dXJuICgoJ2RyYWdnYWJsZScgaW4gZGl2KSB8fCAoJ29uZHJhZ3N0YXJ0JyBpbiBkaXYgJiYgJ29uZHJvcCcgaW4gZGl2KSkgJiYgJ0Zvcm1EYXRhJyBpbiB3aW5kb3cgJiYgJ0ZpbGVSZWFkZXInIGluIHdpbmRvdztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRNb2JpbGVEZXNjOiBUZXh0TW9kZWwgPSB7XG4gICAgICAgIHRleHQ6ICdVcERldnMuRm9ybUNvbnRyb2xzLkZpbGVVcGxvYWQuRHJvcHpvbmVNb2JpbGVEZXNjcmlwdGlvbicsXG4gICAgICAgIGlzVHJhbnNsYXRlZDogZmFsc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdERlc2t0b3BEZXNjOiBUZXh0TW9kZWwgPSB7XG4gICAgICAgIHRleHQ6ICdVcERldnMuRm9ybUNvbnRyb2xzLkZpbGVVcGxvYWQuRHJvcHpvbmVEZXNrdG9wRGVzY3JpcHRpb24nLFxuICAgICAgICBpc1RyYW5zbGF0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVVcGxvYWRFcnJvcnMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtU2VydmljZSA9IGluamVjdChQbGF0Zm9ybVNlcnZpY2UpO1xuXG4gICAgb25GaWxlQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oKGV2ZW50LnRhcmdldCBhcyBhbnkpLmZpbGVzIGFzIEZpbGVMaXN0KTtcblxuICAgICAgICBpZiAoISFmaWxlcykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmlsZXMuc2V0KFsuLi5maWxlc10pO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gZmlsZXMubWFwKGYgPT4gdGhpcy5nZXRGaWxlRXJyb3JzKGYpKS5yZWR1Y2UoKGFjYywgZSkgPT4gYWNjLmNvbmNhdChlKSwgW10pO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFcnJvcnMuc2V0KFsuLi5lcnJvcnNdKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGltcGxlbWVudFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGZpbGVSZWFkZXI6IGFueSkgPT4gdGhpcy5maWxlQ2hhbmdlZC5lbWl0KHsgZmlsZTogZmlsZSwgZGF0YVVybDogZmlsZVJlYWRlci50YXJnZXQucmVzdWx0IH0pO1xuXG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVGaWxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWxlcy5zZXQoW10pO1xuICAgICAgICB0aGlzLmZpbGVDaGFuZ2VkLmVtaXQodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvbkRyYWcoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzT3Zlci5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pc092ZXIuc2V0KHRydWUpO1xuICAgIH1cblxuICAgIG9uRHJhZ0VudGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaXNPdmVyLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzT3Zlci5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmlzT3Zlci5zZXQoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IGRyb3BwZWRGaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2ZlciEuZmlsZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWxlRXJyb3JzKGZpbGU6IEZpbGUpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGAuJHtmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSB8fCAnJ31gO1xuICAgICAgICBjb25zdCBmaWxlU2l6ZUluS0IgPSBNYXRoLnJvdW5kKGZpbGUuc2l6ZSAvIDEwMjQpO1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dlZEV4dGVuc2lvbnMoKSAhPT0gJyonICYmICF0aGlzLmFsbG93ZWRFeHRlbnNpb25zKCkuaW5jbHVkZXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFNlcnZpY2UuZ2V0VGV4dChcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAnVXBEZXZzLkZvcm1Db250cm9scy5GaWxlVXBsb2FkLkV4dGVuc2lvbk5vdEFsbG93ZWQnLCBpc1RyYW5zbGF0ZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNNdWx0aXBsZUV4dDogdGhpcy5hbGxvd2VkRXh0ZW5zaW9ucygpLmluY2x1ZGVzKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXh0ZW5zaW9uczogdGhpcy5hbGxvd2VkRXh0ZW5zaW9ucygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEhdGhpcy5taW5GaWxlU2l6ZSgpICYmIGZpbGVTaXplSW5LQiA8IHRoaXMubWluRmlsZVNpemUoKSEpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRTZXJ2aWNlLmdldFRleHQoXG4gICAgICAgICAgICAgICAgICAgIHsgdGV4dDogJ1VwRGV2cy5Gb3JtQ29udHJvbHMuRmlsZVVwbG9hZC5NaW5TaXplTm90TWV0JywgaXNUcmFuc2xhdGVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNpemU6IFRvb2xzLlRleHQuZm9ybWF0S2lsb2J5dGVzKGZpbGVTaXplSW5LQiksXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5BbGxvd2VkU2l6ZTogVG9vbHMuVGV4dC5mb3JtYXRLaWxvYnl0ZXModGhpcy5taW5GaWxlU2l6ZSgpISlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLm1heEZpbGVTaXplKCkgJiYgZmlsZVNpemVJbktCID4gdGhpcy5tYXhGaWxlU2l6ZSgpISkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5fdGV4dFNlcnZpY2UuZ2V0VGV4dChcbiAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAnVXBEZXZzLkZvcm1Db250cm9scy5GaWxlVXBsb2FkLk1heFNpemVFeGNlZWRlZCcsIGlzVHJhbnNsYXRlZDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTaXplOiBUb29scy5UZXh0LmZvcm1hdEtpbG9ieXRlcyhmaWxlU2l6ZUluS0IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWxsb3dlZFNpemU6IFRvb2xzLlRleHQuZm9ybWF0S2lsb2J5dGVzKHRoaXMubWF4RmlsZVNpemUoKSEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG59XG4iLCI8aW5wdXQgY2xhc3M9XCJkLW5vbmVcIiBbYXR0ci5pZF09XCJuYW1lKClcIiBbYXR0ci5uYW1lXT1cIm5hbWUoKVwiIHR5cGU9XCJmaWxlXCIgW2F0dHIubXVsdGlwbGVdPVwiaXNNdWx0aXBsZSgpID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgW2FjY2VwdF09XCJhbGxvd2VkRXh0ZW5zaW9ucygpXCIgKGNoYW5nZSk9XCJvbkZpbGVDaGFuZ2UoJGV2ZW50KVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdDsgcHJlZml4OiAnVXBEZXZzLkZvcm1Db250cm9scy5GaWxlVXBsb2FkJ1wiPlxuICAgICAgICBAaWYgKCEhbGFiZWxUZXh0KSB7XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImxhYmVsU2l6ZUNsYXNzZXMoKVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3MucmVxdWlyZWRdPVwiaXNSZXF1aXJlZCgpXCI+e3sgbGFiZWxUZXh0IH19PC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIEBpZiAoISFoaW50VGV4dCB8fCAhIXRoaXMuaGludFRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzdXBwb3J0c0FkdmFuY2VkVXBsb2FkICYmIGFsbG93RmlsZXNEcm9wKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYm9yZGVyIHJvdW5kZWQtMiBwLTIgdy0xMDAgaC0xMDBcIiBbbmdDbGFzc109XCJ2YWxpZGF0aW9uU3RhdHVzQm9yZGVyQ2xhc3MoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJnLW11dGVkLWx0XT1cIiFpc092ZXIoKVwiIFtjbGFzcy5iZy1wcmltYXJ5LWx0XT1cImlzT3ZlcigpXCIgKGRyYWcpPVwib25EcmFnKCRldmVudClcIiAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQpXCIgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCIgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCEhdGl0bGVUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBhbGlnbi1zZWxmLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIFtpbm5lckhUTUxdPVwidGl0bGVUZXh0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIm5hbWUoKVwiIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgYWxpZ24tc2VsZi1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiBbaW5uZXJIVE1MXT1cImRyb3BEZXNjcmlwdGlvblRleHRcIj48L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgQGlmICghbGFiZWxUZXh0ICYmICghIWhpbnRUZXh0IHx8ICEhdGhpcy5oaW50VGVtcGxhdGUoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoIWxhYmVsVGV4dCAmJiAoISFoaW50VGV4dCB8fCAhIXRoaXMuaGludFRlbXBsYXRlKCkpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlucHV0VHBsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBhbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhpbnRUcGxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnB1dFRwbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmICh2YWxpZGF0aW9uU3RhdHVzKCkgPT09ICdpbnZhbGlkJyAmJiBlcnJvcnNMaXN0KCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgQGZvciAoZGVzYyBvZiBlcnJvcnNMaXN0KCk7IHRyYWNrIGRlc2MpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPnt7IGRlc2MgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRUcGw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgY29sXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBjdXJzb3ItcG9pbnRlclwiIFtuZ0NsYXNzXT1cInZhbGlkYXRpb25TdGF0dXNCb3JkZXJDbGFzcygpXCIgW2Zvcl09XCJuYW1lKClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdCgnU2VsZWN0RmlsZScsIHsgaXNNdWx0aXBsZTogaXNNdWx0aXBsZSgpIH0pIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LXRydW5jYXRlXCIgW2NsYXNzLmJvcmRlci1lbmQtMF09XCIhIWZpcnN0RmlsZU5hbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmaXJzdEZpbGVOYW1lKCkgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ2YWxpZGF0aW9uU3RhdHVzQ2xhc3MoKVwiIHBsYWNlaG9sZGVyPVwie3sgdCgnTm9GaWxlU2VsZWN0ZWQnLCB7IGlzTXVsdGlwbGU6IGlzTXVsdGlwbGUoKSB9KSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImlzRGlzYWJsZWQoKSB8fCB1bmRlZmluZWRcIiByZWFkb25seT5cblxuICAgICAgICAgICAgICAgIEBpZiAoISFmaXJzdEZpbGVOYW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgYmctdHJhbnNwYXJlbnRcIiBbbmdDbGFzc109XCJ2YWxpZGF0aW9uU3RhdHVzQm9yZGVyQ2xhc3MoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1idXR0b24gW3Nob3VsZElnbm9yZUJ0bkNsYXNzXT1cInRydWVcIiAoY2xpY2tlZCk9XCJyZW1vdmVGaWxlKClcIiBjdXN0b21DbGFzc2VzPVwibGluay1zZWNvbmRhcnkgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gdGFibGVySWNvbj1cInRyYXNoXCIgW3RhYmxlckljb25TaXplXT1cIjE4XCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdXBkLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2hpbnRUcGw+XG4gICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhlbHAgbXMtMlwiIFt1cGRQb3BvdmVyXT1cImhpbnRUZXh0XCIgW3VwZFBvcG92ZXJUZW1wbGF0ZV09XCJoaW50VGVtcGxhdGUoKVwiIFt1cGRQb3BvdmVyQWN0QXNUb29sdGlwXT1cImhpbnRBc1Rvb2x0aXAoKVwiPlxuICAgICAgICA/XG4gICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZm9ybS1jb250cm9scy9maWxlLXVwbG9hZC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,4 @@
1
+ export * from './file-upload.component';
2
+ export * from './file-upload-changed.event';
3
+ export * from './upd-file-upload.module';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2ZpbGUtdXBsb2FkL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlLXVwbG9hZC1jaGFuZ2VkLmV2ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdXBkLWZpbGUtdXBsb2FkLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,47 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslocoModule, TranslocoService } from '@jsverse/transloco';
4
+ import { UpdIconsModule } from '@updevs/icons';
5
+ import { UpdButtonModule } from '@updevs/components/button';
6
+ import { UpdPopoverModule } from '@updevs/components/popover';
7
+ import * as en from './assets/i18n/en.json';
8
+ import * as pt from './assets/i18n/pt.json';
9
+ import { FileUploadComponent } from './file-upload.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@jsverse/transloco";
12
+ export class UpdFileUploadModule {
13
+ constructor(translocoService) {
14
+ translocoService.setTranslation(en, 'en');
15
+ translocoService.setTranslation(pt, 'pt');
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdFileUploadModule, deps: [{ token: i1.TranslocoService }], target: i0.ɵɵFactoryTarget.NgModule }); }
18
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: UpdFileUploadModule, declarations: [FileUploadComponent], imports: [CommonModule,
19
+ TranslocoModule,
20
+ UpdButtonModule,
21
+ UpdIconsModule,
22
+ UpdPopoverModule], exports: [FileUploadComponent] }); }
23
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdFileUploadModule, imports: [CommonModule,
24
+ TranslocoModule,
25
+ UpdButtonModule,
26
+ UpdIconsModule,
27
+ UpdPopoverModule] }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdFileUploadModule, decorators: [{
30
+ type: NgModule,
31
+ args: [{
32
+ imports: [
33
+ CommonModule,
34
+ TranslocoModule,
35
+ UpdButtonModule,
36
+ UpdIconsModule,
37
+ UpdPopoverModule
38
+ ],
39
+ declarations: [
40
+ FileUploadComponent
41
+ ],
42
+ exports: [
43
+ FileUploadComponent
44
+ ]
45
+ }]
46
+ }], ctorParameters: () => [{ type: i1.TranslocoService }] });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkLWZpbGUtdXBsb2FkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2ZpbGUtdXBsb2FkL3NyYy91cGQtZmlsZS11cGxvYWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQWlCOUQsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUFZLGdCQUFrQztRQUMxQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FKUSxtQkFBbUI7K0dBQW5CLG1CQUFtQixpQkFOeEIsbUJBQW1CLGFBUG5CLFlBQVk7WUFDWixlQUFlO1lBQ2YsZUFBZTtZQUNmLGNBQWM7WUFDZCxnQkFBZ0IsYUFNaEIsbUJBQW1COytHQUdkLG1CQUFtQixZQWJ4QixZQUFZO1lBQ1osZUFBZTtZQUNmLGVBQWU7WUFDZixjQUFjO1lBQ2QsZ0JBQWdCOzsyRkFTWCxtQkFBbUI7a0JBZi9CLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3FCQUNuQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1YsbUJBQW1CO3FCQUN0QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsbUJBQW1CO3FCQUN0QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsb2NvTW9kdWxlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcbmltcG9ydCB7IFVwZEljb25zTW9kdWxlIH0gZnJvbSAnQHVwZGV2cy9pY29ucyc7XG5pbXBvcnQgeyBVcGRCdXR0b25Nb2R1bGUgfSBmcm9tICdAdXBkZXZzL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IFVwZFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAdXBkZXZzL2NvbXBvbmVudHMvcG9wb3Zlcic7XG5cbmltcG9ydCAqIGFzIGVuIGZyb20gJy4vYXNzZXRzL2kxOG4vZW4uanNvbic7XG5pbXBvcnQgKiBhcyBwdCBmcm9tICcuL2Fzc2V0cy9pMThuL3B0Lmpzb24nO1xuaW1wb3J0IHsgRmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4vZmlsZS11cGxvYWQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsb2NvTW9kdWxlLFxuICAgICAgICBVcGRCdXR0b25Nb2R1bGUsXG4gICAgICAgIFVwZEljb25zTW9kdWxlLFxuICAgICAgICBVcGRQb3BvdmVyTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgRmlsZVVwbG9hZENvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBGaWxlVXBsb2FkQ29tcG9uZW50XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBVcGRGaWxlVXBsb2FkTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlKSB7XG4gICAgICAgIHRyYW5zbG9jb1NlcnZpY2Uuc2V0VHJhbnNsYXRpb24oZW4sICdlbicpO1xuICAgICAgICB0cmFuc2xvY29TZXJ2aWNlLnNldFRyYW5zbGF0aW9uKHB0LCAncHQnKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkZXZzLWNvbXBvbmVudHMtZm9ybS1jb250cm9scy1maWxlLXVwbG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9mb3JtLWNvbnRyb2xzL2ZpbGUtdXBsb2FkL3NyYy91cGRldnMtY29tcG9uZW50cy1mb3JtLWNvbnRyb2xzLWZpbGUtdXBsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19