@unipin/angular-applet 18.6.8 → 18.6.10

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 (92) hide show
  1. package/esm2022/graphql/generated.mjs +570 -0
  2. package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +78 -0
  3. package/esm2022/lib/components/approval/form/approval-form.component.mjs +128 -0
  4. package/esm2022/lib/components/approval/index.mjs +3 -0
  5. package/esm2022/lib/components/approval/list/approval-list.component.mjs +113 -0
  6. package/esm2022/lib/components/approval/services/approval.service.mjs +46 -0
  7. package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +123 -0
  8. package/esm2022/lib/components/audit/index.mjs +3 -0
  9. package/esm2022/lib/components/audit/list/audit-list.component.mjs +81 -0
  10. package/esm2022/lib/components/audit/service/audit.service.mjs +49 -0
  11. package/esm2022/lib/components/audit/types/audit-detail-form.type.mjs +2 -0
  12. package/esm2022/lib/components/buttons/group/btn-group.component.mjs +45 -0
  13. package/esm2022/lib/components/buttons/group/interfaces/btn-group-config.interface.mjs +2 -0
  14. package/esm2022/lib/components/buttons/index.mjs +3 -0
  15. package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +48 -0
  16. package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +54 -0
  17. package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +23 -0
  18. package/esm2022/lib/components/containers/column-container/column-container.component.mjs +79 -0
  19. package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +23 -0
  20. package/esm2022/lib/components/containers/index.mjs +6 -0
  21. package/esm2022/lib/components/containers/list-container/index.mjs +3 -0
  22. package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +2 -0
  23. package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +58 -0
  24. package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +57 -0
  25. package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +40 -0
  26. package/esm2022/lib/components/filter/filter.component.mjs +121 -0
  27. package/esm2022/lib/components/filter/index.mjs +2 -0
  28. package/esm2022/lib/components/filter/interfaces/filter-config.interface.mjs +2 -0
  29. package/esm2022/lib/components/filter/interfaces/filter-field.interface.mjs +2 -0
  30. package/esm2022/lib/components/filter/interfaces/filter-search-event.interface.mjs +2 -0
  31. package/esm2022/lib/components/forms/country-input/form-country-input.component.mjs +122 -0
  32. package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +157 -0
  33. package/esm2022/lib/components/forms/date/form-date.component.mjs +109 -0
  34. package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +49 -0
  35. package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +68 -0
  36. package/esm2022/lib/components/forms/index.mjs +11 -0
  37. package/esm2022/lib/components/forms/input/form-input.component.mjs +94 -0
  38. package/esm2022/lib/components/forms/number/form-number.component.mjs +97 -0
  39. package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +38 -0
  40. package/esm2022/lib/components/forms/password/form-password.component.mjs +100 -0
  41. package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +132 -0
  42. package/esm2022/lib/components/forms/select/form-select.component.mjs +116 -0
  43. package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +88 -0
  44. package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +109 -0
  45. package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +107 -0
  46. package/esm2022/lib/components/grids/index.mjs +4 -0
  47. package/esm2022/lib/components/grids/interfaces/grid-config.interface.mjs +2 -0
  48. package/esm2022/lib/components/grids/services/grid.service.mjs +25 -0
  49. package/esm2022/lib/components/index.mjs +9 -0
  50. package/esm2022/lib/components/infinite-scroll/directive/infinite-scroll.directive.mjs +43 -0
  51. package/esm2022/lib/components/infinite-scroll/index.mjs +3 -0
  52. package/esm2022/lib/components/infinite-scroll/infinite-scroll.component.mjs +36 -0
  53. package/esm2022/lib/components/tabs/index.mjs +3 -0
  54. package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +37 -0
  55. package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +47 -0
  56. package/esm2022/lib/guards/auth/auth.guard.mjs +10 -0
  57. package/esm2022/lib/guards/index.mjs +2 -0
  58. package/esm2022/lib/interceptors/header/header.interceptor.mjs +20 -0
  59. package/esm2022/lib/interceptors/index.mjs +3 -0
  60. package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +45 -0
  61. package/esm2022/lib/interfaces/index.mjs +2 -0
  62. package/esm2022/lib/interfaces/user/user.interface.mjs +2 -0
  63. package/esm2022/lib/modules/index.mjs +3 -0
  64. package/esm2022/lib/modules/micro-frontend/index.mjs +2 -0
  65. package/esm2022/lib/modules/micro-frontend/utils/mf-bootstrap.util.mjs +55 -0
  66. package/esm2022/lib/modules/micro-frontend/utils/mf-global-state.util.mjs +14 -0
  67. package/esm2022/lib/modules/permission/directive/permission.directive.mjs +41 -0
  68. package/esm2022/lib/modules/permission/guards/permission.guard.mjs +26 -0
  69. package/esm2022/lib/modules/permission/index.mjs +7 -0
  70. package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +15 -0
  71. package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +52 -0
  72. package/esm2022/lib/modules/permission/permission.module.mjs +20 -0
  73. package/esm2022/lib/modules/permission/services/permission.service.mjs +47 -0
  74. package/esm2022/lib/resolvers/auth/auth.resolver.mjs +87 -0
  75. package/esm2022/lib/resolvers/index.mjs +2 -0
  76. package/esm2022/lib/services/auth/auth.service.mjs +145 -0
  77. package/esm2022/lib/services/country/country.service.mjs +43 -0
  78. package/esm2022/lib/services/currency/currency.service.mjs +40 -0
  79. package/esm2022/lib/services/index.mjs +5 -0
  80. package/esm2022/lib/services/profile/profile.service.mjs +71 -0
  81. package/esm2022/lib/utils/contrast-color-generator/contrast-color-generator.util.mjs +16 -0
  82. package/esm2022/lib/utils/form-error-message/form-error-message.util.mjs +21 -0
  83. package/esm2022/lib/utils/format-capitalize/format-capitalize.util.mjs +18 -0
  84. package/esm2022/lib/utils/index.mjs +4 -0
  85. package/esm2022/public-api.mjs +10 -0
  86. package/esm2022/unipin-angular-applet.mjs +2 -0
  87. package/fesm2022/unipin-angular-applet.mjs +156 -155
  88. package/fesm2022/unipin-angular-applet.mjs.map +1 -1
  89. package/lib/components/index.d.ts +1 -1
  90. package/lib/components/tabs/index.d.ts +2 -3
  91. package/package.json +5 -3
  92. package/public-api.d.ts +1 -1
@@ -0,0 +1,109 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { DatePipe } from '@angular/common';
3
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { getFormErrorMessage } from '../../../utils';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ionic/angular";
8
+ export class FormDateComponent {
9
+ constructor(name, placeholder, ch) {
10
+ this.name = name;
11
+ this.placeholder = placeholder;
12
+ this.ch = ch;
13
+ this.required = false;
14
+ this.disabled = false;
15
+ this.presentation = 'date';
16
+ this.isTouched = false;
17
+ this.value = '';
18
+ this.localValue = '';
19
+ this.dateFormat = 'dd LLL yyyy';
20
+ this.onChange = (_val) => { };
21
+ this.onTouched = () => { };
22
+ }
23
+ ngOnInit() {
24
+ if (this.presentation === 'date-time')
25
+ this.dateFormat = `${this.dateFormat} HH:mm`;
26
+ }
27
+ registerOnChange(fn) { this.onChange = fn; }
28
+ registerOnTouched(fn) { this.onTouched = fn; }
29
+ writeValue(val) {
30
+ this.value = val;
31
+ if (!val) {
32
+ this.ch.markForCheck();
33
+ return;
34
+ }
35
+ ;
36
+ let localTime = new Date(val);
37
+ localTime = new Date(localTime.getTime() - (localTime.getTimezoneOffset() * 60000));
38
+ this.localValue = localTime.toISOString();
39
+ this.ch.markForCheck();
40
+ }
41
+ setDisabledState(d) {
42
+ this.disabled = d;
43
+ this.ch.markForCheck();
44
+ }
45
+ validate(control) {
46
+ this.formControl = control;
47
+ return null;
48
+ }
49
+ changeDate({ detail: { value } }) {
50
+ if (!this.isTouched) {
51
+ this.onTouched();
52
+ this.isTouched = true;
53
+ }
54
+ if (!this.disabled) {
55
+ this.value = this.localValue = value;
56
+ this.ch.markForCheck();
57
+ this.onChange(this.value);
58
+ this.errorMsg = getFormErrorMessage(this.formControl.errors, this.label);
59
+ }
60
+ }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, deps: [{ token: 'name', attribute: true }, { token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
62
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormDateComponent, isStandalone: true, selector: "up-date", inputs: { label: "label", required: "required", disabled: "disabled", presentation: "presentation" }, host: { classAttribute: "d-block position-relative" }, providers: [
63
+ {
64
+ multi: true,
65
+ provide: NG_VALUE_ACCESSOR,
66
+ useExisting: FormDateComponent
67
+ },
68
+ {
69
+ multi: true,
70
+ provide: NG_VALIDATORS,
71
+ useExisting: FormDateComponent
72
+ }
73
+ ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" hourCycle=\"h23\" [presentation]=\"presentation\" value=\"{{ localValue }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"], dependencies: [{ kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "formatOptions", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ standalone: true, selector: 'up-date', changeDetection: ChangeDetectionStrategy.OnPush, host: {
78
+ class: 'd-block position-relative'
79
+ }, imports: [
80
+ DatePipe,
81
+ IonicModule
82
+ ], providers: [
83
+ {
84
+ multi: true,
85
+ provide: NG_VALUE_ACCESSOR,
86
+ useExisting: FormDateComponent
87
+ },
88
+ {
89
+ multi: true,
90
+ provide: NG_VALIDATORS,
91
+ useExisting: FormDateComponent
92
+ }
93
+ ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input readonly type=\"text\" id=\"{{ name }}-date\" placeholder=\"{{ placeholder }}\" class=\"form-control cursor-pointer\" [disabled]=\"disabled\" [required]=\"required\" [value]=\"value | date:dateFormat \">\n<ion-icon name=\"calendar\" class=\"position-absolute fs-4 cursor-pointer\" />\n\n<ion-modal trigger=\"{{ name }}-date\">\n <ng-template>\n <ion-datetime mode=\"md\" hourCycle=\"h23\" [presentation]=\"presentation\" value=\"{{ localValue }}\" [showDefaultButtons]=\"true\" (ionChange)=\"changeDate($event)\" />\n </ng-template>\n</ion-modal>\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: ["ion-datetime{--background: white}ion-modal{--width: 290px;--height: auto}ion-icon{top:32px;right:16px;color:#616161}\n"] }]
94
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
95
+ type: Attribute,
96
+ args: ['name']
97
+ }] }, { type: undefined, decorators: [{
98
+ type: Attribute,
99
+ args: ['placeholder']
100
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { label: [{
101
+ type: Input
102
+ }], required: [{
103
+ type: Input
104
+ }], disabled: [{
105
+ type: Input
106
+ }], presentation: [{
107
+ type: Input
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9kYXRlL2Zvcm0tZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUE0QnJELE1BQU0sT0FBTyxpQkFBaUI7SUFrRjVCLFlBQzRCLElBQVksRUFDTCxXQUFtQixFQUNqQyxFQUFxQjtRQUZkLFNBQUksR0FBSixJQUFJLENBQVE7UUFDTCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXhFMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBTzFCLGlCQUFZLEdBQXlCLE1BQU0sQ0FBQztRQU9yRCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBTzNCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFPbkIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQU92QixlQUFVLEdBQVcsYUFBYSxDQUFDO1FBbUJoQyxhQUFR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Q1AsUUFBUTt3QkFDUixXQUFXO3FCQUNaLGFBQ1U7d0JBQ1Q7NEJBQ0UsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxtQkFBbUI7eUJBQy9CO3dCQUNEOzRCQUNFLEtBQUssRUFBRSxJQUFJOzRCQUNYLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLG1CQUFtQjt5QkFDL0I7cUJBQ0Y7OzBCQXFGRSxTQUFTOzJCQUFDLE1BQU07OzBCQUNoQixTQUFTOzJCQUFDLGFBQWE7eUVBOUVWLEtBQUs7c0JBQXBCLEtBQUs7Z0JBT1UsUUFBUTtzQkFBdkIsS0FBSztnQkFPVSxRQUFRO3NCQUF2QixLQUFLO2dCQU9VLFlBQVk7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBnZXRGb3JtRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICd1cC1kYXRlJyxcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tZGF0ZS5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZSdcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIERhdGVQaXBlLFxuICAgIElvbmljTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybURhdGVDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGb3JtRGF0ZUNvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGF0ZSBpbnB1dCBpcyByZXF1aXJlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBkYXRlIHBpY2tlciBpcyBkYXRlIG9ubHkgb3IgZGF0ZSBhbmQgdGltZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJ2RhdGUnXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgcHJlc2VudGF0aW9uOiAnZGF0ZScgfCAnZGF0ZS10aW1lJyA9ICdkYXRlJztcblxuICAvKipcbiAgICogQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGF0ZSBpbnB1dCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBpc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgcHVibGljIHZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBsb2NhbGl6YXRpb24gZGF0ZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIHB1YmxpYyBsb2NhbFZhbHVlOiBzdHJpbmc9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIGRhdGUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdkZCBMTEwgeXl5eSdcbiAgICovXG4gIHB1YmxpYyBkYXRlRm9ybWF0OiBzdHJpbmcgPSAnZGQgTExMIHl5eXknO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBwdWJsaWMgZXJyb3JNc2chOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAdHlwZSB7QWJzdHJhY3RDb250cm9sfVxuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdmFsdWUgY2hhbmdlcyBpbiB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUgeyhfdmFsOiBhbnkpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2U6IChfdmFsOiBhbnkpID0+IHZvaWQgPSAoX3ZhbDogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBpbiB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHR5cGUgeygpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEF0dHJpYnV0ZSgnbmFtZScpIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgQEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICAvKipcbiAgICogTGlmZWN5Y2xlIGhvb2sgY2FsbGVkIGEgbW9tZW50IGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG4gICAqIENoZWNrIGlmIHRoZSBwcmVzZW50YXRpb24gaXMgJ2RhdGUtdGltZScgdGhlbiB0aGUgZGF0ZSBmb3JtYXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8gZGQgTExMIHl5eXkgSEg6bW0uXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZHtcbiAgICBpZiAodGhpcy5wcmVzZW50YXRpb24gPT09ICdkYXRlLXRpbWUnKSB0aGlzLmRhdGVGb3JtYXQgPSBgJHsgdGhpcy5kYXRlRm9ybWF0IH0gSEg6bW1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRlIGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7KF92YWw6IGFueSkgPT4gdm9pZH0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGRhdGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0b3VjaCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWR7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cblxuICAvKipcbiAgICogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBkYXRlIGlucHV0LlxuICAgKiBDYWxjdWxhdGUgYW5kIHdyaXRlcyB0aGUgbG9jYWwgdmFsdWUgZm9yIGlvbmljIGRhdGV0aW1lIHBpY2tlci5cbiAgICogQHBhcmFtIHsqfSB2YWwgLSBUaGUgbmV3IHZhbHVlIHRvIGJlIHNldC5cbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbDogYW55KTogdm9pZHsgXG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9O1xuXG4gICAgbGV0IGxvY2FsVGltZSA9IG5ldyBEYXRlKHZhbCk7XG5cbiAgICBsb2NhbFRpbWUgPSBuZXcgRGF0ZShsb2NhbFRpbWUuZ2V0VGltZSgpIC0gKGxvY2FsVGltZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcbiAgICB0aGlzLmxvY2FsVmFsdWUgPSBsb2NhbFRpbWUudG9JU09TdHJpbmcoKTtcblxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGRhdGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZCAtIFdoZXRoZXIgdGhlIGRhdGUgaW5wdXQgc2hvdWxkIGJlIGRpc2FibGVkIG9yIG5vdC5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhkOiBib29sZWFuKTogdm9pZHsgXG4gICAgdGhpcy5kaXNhYmxlZCA9IGQ7IFxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkYXRlIGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgZGF0ZSBpbnB1dC5cbiAgICogQHJldHVybnMgeyhWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCl9IC0gVmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55LCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gY29udHJvbDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBkYXRlIGNoYW5nZXMgaW4gdGhlIGRhdGUgaW5wdXQuXG4gICAqIElmIG5vdCB0b3VjaGVkLCBtYXJrcyB0aGUgaW5wdXQgYXMgdG91Y2hlZC5cbiAgICogSWYgbm90IGRpc2FibGVkLCB1cGRhdGVzIHRoZSB2YWx1ZSwgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiwgYW5kIGVtaXRzIHRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqIFVwZGF0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZm9ybSBjb250cm9sIGVycm9ycyBhbmQgbGFiZWwuXG4gICAqIEBwYXJhbSB7YW55fSBwYXJhbTAgLSBFdmVudCBkZXRhaWwgY29udGFpbmluZyB0aGUgbmV3IGRhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlRGF0ZSh7IGRldGFpbDogeyB2YWx1ZSB9fTogYW55KTogdm9pZHtcbiAgICBpZiAoIXRoaXMuaXNUb3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubG9jYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLmxhYmVsKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpY29uXVwiIC8+XG4gICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG48L2xhYmVsPlxuXG48aW5wdXQgcmVhZG9ubHkgdHlwZT1cInRleHRcIiBpZD1cInt7IG5hbWUgfX0tZGF0ZVwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBjdXJzb3ItcG9pbnRlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFt2YWx1ZV09XCJ2YWx1ZSB8IGRhdGU6ZGF0ZUZvcm1hdCBcIj5cbjxpb24taWNvbiBuYW1lPVwiY2FsZW5kYXJcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiAvPlxuXG48aW9uLW1vZGFsIHRyaWdnZXI9XCJ7eyBuYW1lIH19LWRhdGVcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgIDxpb24tZGF0ZXRpbWUgbW9kZT1cIm1kXCIgaG91ckN5Y2xlPVwiaDIzXCIgW3ByZXNlbnRhdGlvbl09XCJwcmVzZW50YXRpb25cIiB2YWx1ZT1cInt7IGxvY2FsVmFsdWUgfX1cIiBbc2hvd0RlZmF1bHRCdXR0b25zXT1cInRydWVcIiAoaW9uQ2hhbmdlKT1cImNoYW5nZURhdGUoJGV2ZW50KVwiIC8+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG5AaWYgKGVycm9yTXNnKSB7XG4gICAgPGxhYmVsIGNsYXNzPVwiaXMtaW52YWxpZFwiPnt7IGVycm9yTXNnIH19PC9sYWJlbD5cbn1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { Directive, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DragNDropDirective {
4
+ constructor() {
5
+ this.fileDropped = new EventEmitter();
6
+ }
7
+ onDragOver(evt) {
8
+ evt.preventDefault();
9
+ evt.stopPropagation();
10
+ const target = evt.target;
11
+ target.classList.add('dragging');
12
+ }
13
+ onDragLeave(evt) {
14
+ evt.preventDefault();
15
+ evt.stopPropagation();
16
+ const target = evt.target;
17
+ target.classList.remove('dragging');
18
+ }
19
+ onDrop(evt) {
20
+ evt.preventDefault();
21
+ evt.stopPropagation();
22
+ const target = evt.target;
23
+ target.classList.remove('dragging');
24
+ const files = evt.dataTransfer.files;
25
+ if (files.length > 0)
26
+ this.fileDropped.emit(files);
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DragNDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DragNDropDirective, isStandalone: true, selector: "[upDragNDrop]", outputs: { fileDropped: "fileDropped" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" } }, ngImport: i0 }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DragNDropDirective, decorators: [{
32
+ type: Directive,
33
+ args: [{
34
+ standalone: true,
35
+ selector: '[upDragNDrop]'
36
+ }]
37
+ }], propDecorators: { fileDropped: [{
38
+ type: Output
39
+ }], onDragOver: [{
40
+ type: HostListener,
41
+ args: ['dragover', ['$event']]
42
+ }], onDragLeave: [{
43
+ type: HostListener,
44
+ args: ['dragleave', ['$event']]
45
+ }], onDrop: [{
46
+ type: HostListener,
47
+ args: ['drop', ['$event']]
48
+ }] } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1uLWRyb3AuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2ltYWdlLXBpY2tlci9kaXJlY3RpdmVzL2RyYWctbi1kcm9wLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU05RSxNQUFNLE9BQU8sa0JBQWtCO0lBSi9CO1FBTW1CLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztLQStCeEQ7SUE1QlEsVUFBVSxDQUFDLEdBQVE7UUFDeEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBMEIsQ0FBQztRQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBR00sV0FBVyxDQUFDLEdBQVE7UUFDekIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBMEIsQ0FBQztRQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBR00sTUFBTSxDQUFDLEdBQVE7UUFDcEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBMEIsQ0FBQztRQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7K0dBaENVLGtCQUFrQjttR0FBbEIsa0JBQWtCOzs0RkFBbEIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZUFBZTtpQkFDMUI7OEJBR2tCLFdBQVc7c0JBQTNCLE1BQU07Z0JBR0EsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBRSxRQUFRLENBQUU7Z0JBVS9CLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUUsUUFBUSxDQUFFO2dCQVVoQyxNQUFNO3NCQURaLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t1cERyYWdORHJvcF0nXG59KVxuZXhwb3J0IGNsYXNzIERyYWdORHJvcERpcmVjdGl2ZSB7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBmaWxlRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyAnJGV2ZW50JyBdKSBcbiAgcHVibGljIG9uRHJhZ092ZXIoZXZ0OiBhbnkpOiB2b2lke1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmcnKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsgJyRldmVudCcgXSkgXG4gIHB1YmxpYyBvbkRyYWdMZWF2ZShldnQ6IGFueSk6IHZvaWR7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZycpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsgJyRldmVudCcgXSkgXG4gIHB1YmxpYyBvbkRyb3AoZXZ0OiBhbnkpOiB2b2lke1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmcnKTtcblxuICAgIGNvbnN0IGZpbGVzID0gZXZ0LmRhdGFUcmFuc2Zlci5maWxlcztcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgdGhpcy5maWxlRHJvcHBlZC5lbWl0KGZpbGVzKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,68 @@
1
+ import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { NgStyle } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { IonicModule } from '@ionic/angular';
5
+ import { DragNDropDirective } from './directives/drag-n-drop.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ionic/angular";
8
+ export class FormImagePickerComponent {
9
+ constructor(ch) {
10
+ this.ch = ch;
11
+ this.ratio = '16/9';
12
+ this.required = false;
13
+ this.onChange = new EventEmitter();
14
+ this.onChanged = (_val) => { };
15
+ this.onTouched = () => { };
16
+ }
17
+ registerOnChange(fn) { this.onChanged = fn; }
18
+ registerOnTouched(fn) { this.onTouched = fn; }
19
+ clear(ev) {
20
+ this.writeValue('');
21
+ ev?.stopPropagation();
22
+ }
23
+ writeValue(val) {
24
+ this.imgSrc = val;
25
+ this.ch.markForCheck();
26
+ }
27
+ selectPhoto(files) {
28
+ if (files?.target?.files)
29
+ files = files.target.files;
30
+ if (files && files[0]) {
31
+ this.imgSrc = URL.createObjectURL((files[0]));
32
+ this.onChange.emit(files[0]);
33
+ }
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormImagePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormImagePickerComponent, isStandalone: true, selector: "up-image-picker", inputs: { ratio: "ratio", label: "label", required: "required" }, outputs: { onChange: "onChange" }, host: { classAttribute: "d-block" }, providers: [
37
+ {
38
+ multi: true,
39
+ provide: NG_VALUE_ACCESSOR,
40
+ useExisting: FormImagePickerComponent
41
+ },
42
+ ], ngImport: i0, template: "<div class=\"flex-shrink-0 mb-4\">\n <label class=\"mb-2 d-flex align-items-center form-label\">\n @if (required) {\n <span class=\"text-danger me-2\">&ast;</span>\n }\n \n <ng-content select=\"[icon]\"/>\n <span>{{ label }}</span>\n </label>\n \n <div class=\"img-container position-relative border rounded\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" upDragNDrop (fileDropped)=\"selectPhoto($event)\"> \n @if (imgSrc) {\n <img alt=\"{{ label }}\" class=\"rounded\" width=\"100%\" height=\"100%\" src=\"{{ imgSrc }}\" />\n }\n \n <div class=\"upload-icon rounded position-absolute text-white align-items-center justify-content-center px-3 py-2 w-100\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" (click)=\"file.click();\">\n @if (!imgSrc) {\n <ion-icon class=\"upload-icon\" name=\"cloud-upload\" title=\"Drop file or click to browse\" />\n } \n @else {\n <div class=\"position-absolute display-flex justify-content-center rounded p-1 d-btn\">\n <ion-icon name=\"trash\" class=\"text-red-600\" title=\"Clear Image\" (click)=\"clear($event)\" />\n </div>\n }\n </div>\n \n <input type=\"file\" hidden accept=\"image/png, image/jpeg, image/jpg\" multiple=\"false\" (change)=\"selectPhoto($event)\" #file />\n </div>\n</div>\n", styles: ["ion-icon{font-size:24px}.img-container{width:250px;border-style:dashed!important}.img-container:hover .upload-icon{display:flex}.img-container:not(:has(img)):before{content:\"Choose file or Drag here.\";top:50%;left:50%;font-size:12px;position:absolute;color:gray;text-align:center;transform:translate(-50%,-50%)}.upload-icon:not(ion-icon){background:#00000050}.upload-icon{top:0;left:0;display:none;cursor:pointer}.d-btn{right:10px;bottom:10px;width:32px;height:32px;background-color:#fee2e2}.d-btn ion-icon{color:#dc2626}.dragging{border:2px dashed #ED6B26!important}.dragging:not(:has(img)):before{content:\"Drop\";font-size:32px}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: DragNDropDirective, selector: "[upDragNDrop]", outputs: ["fileDropped"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormImagePickerComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ standalone: true, selector: 'up-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: {
47
+ class: 'd-block'
48
+ }, imports: [
49
+ IonicModule,
50
+ NgStyle,
51
+ DragNDropDirective
52
+ ], providers: [
53
+ {
54
+ multi: true,
55
+ provide: NG_VALUE_ACCESSOR,
56
+ useExisting: FormImagePickerComponent
57
+ },
58
+ ], template: "<div class=\"flex-shrink-0 mb-4\">\n <label class=\"mb-2 d-flex align-items-center form-label\">\n @if (required) {\n <span class=\"text-danger me-2\">&ast;</span>\n }\n \n <ng-content select=\"[icon]\"/>\n <span>{{ label }}</span>\n </label>\n \n <div class=\"img-container position-relative border rounded\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" upDragNDrop (fileDropped)=\"selectPhoto($event)\"> \n @if (imgSrc) {\n <img alt=\"{{ label }}\" class=\"rounded\" width=\"100%\" height=\"100%\" src=\"{{ imgSrc }}\" />\n }\n \n <div class=\"upload-icon rounded position-absolute text-white align-items-center justify-content-center px-3 py-2 w-100\" [ngStyle]=\"{ 'aspect-ratio': ratio }\" (click)=\"file.click();\">\n @if (!imgSrc) {\n <ion-icon class=\"upload-icon\" name=\"cloud-upload\" title=\"Drop file or click to browse\" />\n } \n @else {\n <div class=\"position-absolute display-flex justify-content-center rounded p-1 d-btn\">\n <ion-icon name=\"trash\" class=\"text-red-600\" title=\"Clear Image\" (click)=\"clear($event)\" />\n </div>\n }\n </div>\n \n <input type=\"file\" hidden accept=\"image/png, image/jpeg, image/jpg\" multiple=\"false\" (change)=\"selectPhoto($event)\" #file />\n </div>\n</div>\n", styles: ["ion-icon{font-size:24px}.img-container{width:250px;border-style:dashed!important}.img-container:hover .upload-icon{display:flex}.img-container:not(:has(img)):before{content:\"Choose file or Drag here.\";top:50%;left:50%;font-size:12px;position:absolute;color:gray;text-align:center;transform:translate(-50%,-50%)}.upload-icon:not(ion-icon){background:#00000050}.upload-icon{top:0;left:0;display:none;cursor:pointer}.d-btn{right:10px;bottom:10px;width:32px;height:32px;background-color:#fee2e2}.d-btn ion-icon{color:#dc2626}.dragging{border:2px dashed #ED6B26!important}.dragging:not(:has(img)):before{content:\"Drop\";font-size:32px}\n"] }]
59
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { ratio: [{
60
+ type: Input
61
+ }], label: [{
62
+ type: Input
63
+ }], required: [{
64
+ type: Input
65
+ }], onChange: [{
66
+ type: Output
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbWFnZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL2ltYWdlLXBpY2tlci9mb3JtLWltYWdlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW1hZ2UtcGlja2VyL2Zvcm0taW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUF3QnhFLE1BQU0sT0FBTyx3QkFBd0I7SUF1Q25DLFlBQ3FCLEVBQXFCO1FBQXJCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBaEMxQixVQUFLLEdBQVcsTUFBTSxDQUFDO1FBYXZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFLekIsYUFBUSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBVS9ELGNBQVMsR0FBd0IsQ0FBQyxJQUFTLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBSXZDLENBQUM7SUFLRSxnQkFBZ0IsQ0FBQyxFQUFPLElBQVMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXZELGlCQUFpQixDQUFDLEVBQU8sSUFBUyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFLeEQsS0FBSyxDQUFDLEVBQVU7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixFQUFFLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQU9NLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU1NLFdBQVcsQ0FBQyxLQUFVO1FBQzNCLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLO1lBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXJELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7K0dBL0VVLHdCQUF3QjttR0FBeEIsd0JBQXdCLHdNQVJ4QjtZQUNUO2dCQUNFLEtBQUssRUFBRSxJQUFJO2dCQUNYLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSx3QkFBd0I7YUFDdEM7U0FDRiwwQkMxQkgsZzZDQTZCQSxvckJEYkksV0FBVyxvTUFDWCxPQUFPLDJFQUNQLGtCQUFrQjs7NEZBVVQsd0JBQXdCO2tCQXRCcEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04saUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osS0FBSyxFQUFFLFNBQVM7cUJBQ2pCLFdBQ1E7d0JBQ1AsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLGtCQUFrQjtxQkFDbkIsYUFDVTt3QkFDVDs0QkFDRSxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLDBCQUEwQjt5QkFDdEM7cUJBQ0Y7c0ZBVWUsS0FBSztzQkFBcEIsS0FBSztnQkFNVSxLQUFLO3NCQUFwQixLQUFLO2dCQU9VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1csUUFBUTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nU3R5bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBEcmFnTkRyb3BEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvZHJhZy1uLWRyb3AuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtaW1hZ2UtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0taW1hZ2UtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1pbWFnZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtYmxvY2snXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBJb25pY01vZHVsZSxcbiAgICBOZ1N0eWxlLFxuICAgIERyYWdORHJvcERpcmVjdGl2ZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZvcm1JbWFnZVBpY2tlckNvbXBvbmVudFxuICAgIH0sXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUltYWdlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIC8qKlxuICAgKiBBIHB1YmxpYyBpbnB1dCB2YXJpYWJsZSB0byBhZGp1c3QgaW1hZ2UgY29udGFpbmVyIGFzcGVjdCByYXRpbyBieSBjc3MsIHRvIGtlZXAgdGhlIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQgcHJvcG9ydGlvbmFsLlxuICAgKiBUaGUgY29tbW9uIGFzcGVjdCByYXRpbyBuYW1lbHkgMS8xLCA0LzMsIDE2LzkgZXRjLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCBgMTYvOWBcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyByYXRpbzogc3RyaW5nID0gJzE2LzknO1xuICAvKipcbiAgICogQSBwdWJsaWMgaW5wdXQgdmFyaWFibGUgdG8gc2V0IHRoZSBmb3JtIGxhYmVsLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgcHVibGljIGlucHV0IHZhcmlhYmxlIHRvIHNob3cgb3IgaGlkZSBhc3RyICgqKSBzaWduLlxuICAgKiBJdCB3aWxsIHNob3cgaWYgdGhlIHZhbHVlIGlzIHRydWUgbWVhbiB0aGUgZmllbGQgaXMgY2FuIG5vdCBiZSBlbXB0eSBhbmQgaGlkZSBpZiB0aGUgdmFsdWUgaXMgZmFsc2UuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAvKipcbiAgICogQSBwdWJsaWMgb3V0cHV0IHZhcmlhYmxlIHRvIGVtaXQgdGhlIEZpbGUgdG8gdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8RmlsZT59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gICAvKipcbiAgICogQSBwdWJsaWMgdmFyaWFibGUgY29udGFpbiB0ZW1wb3JhcnkgaW1hZ2UgdXJsIHNob3duIG9uIHRoZSBwcmV2aWV3LlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpYyBpbWdTcmMhOiBzdHJpbmc7XG4gICAvKipcbiAgICogQm90aCB0d28gbWV0aG9kcyBhcmUgbWFuZGF0b3J5IGFzIGltcGxlbWVudGF0aW9uIG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlZDogKF92YWw6IGFueSkgPT4gdm9pZCA9IChfdmFsOiBhbnkpID0+IHt9O1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBCb3RoIHR3byBtZXRob2RzIGFyZSBtYW5kYXRvcnkgYXMgaW1wbGVtZW50YXRpb24gb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHsgdGhpcy5vbkNoYW5nZWQgPSBmbjsgfVxuICBcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIEEgcHJvY2VkdXJlIGNhbGxlZCB0byBjbGVhciB0aGUgaW1hZ2UgcHJldmlldy5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihldj86IEV2ZW50KTogdm9pZHtcbiAgICB0aGlzLndyaXRlVmFsdWUoJycpO1xuICAgIGV2Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHByb2NlZHVyZSBjYWxsZWQgd2hlbiB0aGUgaW1hZ2Ugd2FzIHNldCBwcmV2aW91c2x5IGluIHRoZSBwYXJlbnQgZm9ybUNvbnRyb2xOYW1lIGNvbXBvbmVudCBhbmQgdGhlIHVzZXIgd2FudCB0byBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9uZS5cbiAgICogSXQgaXMgbWFuZGF0b3J5IGFzIGFuIGltcGxlbWVudGF0aW9uIG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIC0gY29udGFpbiBpbWFnZSB1cmwuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IGFueSk6IHZvaWR7XG4gICAgdGhpcy5pbWdTcmMgPSB2YWw7XG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHByb2NlZHVyZSBjYWxsZWQgd2hlbiB1c2VyIHBpY2sgb3IgZHJhZyBhbmQgZHJvcCBpbWFnZS5cbiAgICogQHBhcmFtIHthbnl9IGZpbGVzIC0gZmlsZXM/LnRhcmdldD8uZmlsZXMgdG8gY2hlY2sgaWYgaW1hZ2UgY29tZSBmcm9tIGRyYWcgYW5kIGRyb3AgYW5kIGZpbGVzWzBdIGZyb20gbm9ybWFsIHBpY2sgaW1hZ2UuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0UGhvdG8oZmlsZXM6IGFueSk6IHZvaWR7XG4gICAgaWYgKGZpbGVzPy50YXJnZXQ/LmZpbGVzKSBmaWxlcyA9IGZpbGVzLnRhcmdldC5maWxlcztcblxuICAgIGlmIChmaWxlcyAmJiBmaWxlc1swXSkge1xuICAgICAgdGhpcy5pbWdTcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKChmaWxlc1swXSkpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KGZpbGVzWzBdKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIG1iLTRcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJtYi0yIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybS1sYWJlbFwiPlxuICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIG1lLTJcIj4mYXN0Ozwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ljb25dXCIvPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJpbWctY29udGFpbmVyIHBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlciByb3VuZGVkXCIgW25nU3R5bGVdPVwieyAnYXNwZWN0LXJhdGlvJzogcmF0aW8gfVwiIHVwRHJhZ05Ecm9wIChmaWxlRHJvcHBlZCk9XCJzZWxlY3RQaG90bygkZXZlbnQpXCI+IFxuICAgICAgICBAaWYgKGltZ1NyYykge1xuICAgICAgICAgICAgPGltZyBhbHQ9XCJ7eyBsYWJlbCB9fVwiIGNsYXNzPVwicm91bmRlZFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBzcmM9XCJ7eyBpbWdTcmMgfX1cIiAvPlxuICAgICAgICB9XG4gICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaWNvbiByb3VuZGVkIHBvc2l0aW9uLWFic29sdXRlIHRleHQtd2hpdGUgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtMyBweS0yIHctMTAwXCIgW25nU3R5bGVdPVwieyAnYXNwZWN0LXJhdGlvJzogcmF0aW8gfVwiIChjbGljayk9XCJmaWxlLmNsaWNrKCk7XCI+XG4gICAgICAgICAgICBAaWYgKCFpbWdTcmMpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJ1cGxvYWQtaWNvblwiIG5hbWU9XCJjbG91ZC11cGxvYWRcIiB0aXRsZT1cIkRyb3AgZmlsZSBvciBjbGljayB0byBicm93c2VcIiAvPlxuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZGlzcGxheS1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcm91bmRlZCBwLTEgZC1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaFwiIGNsYXNzPVwidGV4dC1yZWQtNjAwXCIgdGl0bGU9XCJDbGVhciBJbWFnZVwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGhpZGRlbiBhY2NlcHQ9XCJpbWFnZS9wbmcsIGltYWdlL2pwZWcsIGltYWdlL2pwZ1wiIG11bHRpcGxlPVwiZmFsc2VcIiAoY2hhbmdlKT1cInNlbGVjdFBob3RvKCRldmVudClcIiAjZmlsZSAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,11 @@
1
+ export { FormDateComponent } from './date/form-date.component';
2
+ export { FormInputComponent } from './input/form-input.component';
3
+ export { FormNumberComponent } from './number/form-number.component';
4
+ export { FormPasswordComponent } from './password/form-password.component';
5
+ export { FormSearchableSelectComponent } from './searchable-select/form-searchable-select.component';
6
+ export { FormSelectComponent } from './select/form-select.component';
7
+ export { FormTextareaComponent } from './textarea/form-textarea.component';
8
+ export { FormImagePickerComponent } from './image-picker/form-image-picker.component';
9
+ export { FormCurrencyInputComponent } from './currency-input/form-currency-input.component';
10
+ export { FormCountryInputComponent } from './country-input/form-country-input.component';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDckcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGb3JtRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50JztcbmV4cG9ydCB7IEZvcm1JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0IHsgRm9ybU51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vbnVtYmVyL2Zvcm0tbnVtYmVyLmNvbXBvbmVudCc7XG5leHBvcnQgeyBGb3JtUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkL2Zvcm0tcGFzc3dvcmQuY29tcG9uZW50JztcbmV4cG9ydCB7IEZvcm1TZWFyY2hhYmxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9zZWFyY2hhYmxlLXNlbGVjdC9mb3JtLXNlYXJjaGFibGUtc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgeyBGb3JtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QvZm9ybS1zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCB7IEZvcm1UZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gJy4vdGV4dGFyZWEvZm9ybS10ZXh0YXJlYS5jb21wb25lbnQnO1xuZXhwb3J0IHsgRm9ybUltYWdlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9pbWFnZS1waWNrZXIvZm9ybS1pbWFnZS1waWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB7IEZvcm1DdXJyZW5jeUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jdXJyZW5jeS1pbnB1dC9mb3JtLWN1cnJlbmN5LWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgeyBGb3JtQ291bnRyeUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9jb3VudHJ5LWlucHV0L2Zvcm0tY291bnRyeS1pbnB1dC5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,94 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { getFormErrorMessage } from '../../../utils';
4
+ import * as i0 from "@angular/core";
5
+ export class FormInputComponent {
6
+ constructor(placeholder, type, autocomplete, ch) {
7
+ this.placeholder = placeholder;
8
+ this.type = type;
9
+ this.autocomplete = autocomplete;
10
+ this.ch = ch;
11
+ this.required = false;
12
+ this.disabled = false;
13
+ this.onInput = new EventEmitter();
14
+ this.isTouched = false;
15
+ this.onChange = (_val) => { };
16
+ this.onTouched = () => { };
17
+ }
18
+ registerOnChange(fn) { this.onChange = fn; }
19
+ registerOnTouched(fn) { this.onTouched = fn; }
20
+ input(val) { this.onInput.emit(val); }
21
+ writeValue(val) {
22
+ this.value = val;
23
+ this.ch.markForCheck();
24
+ }
25
+ setDisabledState(d) {
26
+ this.disabled = d;
27
+ this.ch.markForCheck();
28
+ }
29
+ validate(control) {
30
+ this.formControl = control;
31
+ return null;
32
+ }
33
+ change({ value }) {
34
+ if (!this.isTouched) {
35
+ this.onTouched();
36
+ this.isTouched = true;
37
+ }
38
+ if (!this.disabled) {
39
+ this.value = value;
40
+ this.onChange(this.value);
41
+ this.errorMsg = getFormErrorMessage(this.formControl.errors, this.label);
42
+ }
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, deps: [{ token: 'placeholder', attribute: true }, { token: 'type', attribute: true }, { token: 'autocomplete', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "up-input", inputs: { label: "label", value: "value", required: "required", disabled: "disabled" }, outputs: { onInput: "onInput" }, host: { classAttribute: "d-block" }, providers: [
46
+ {
47
+ multi: true,
48
+ provide: NG_VALUE_ACCESSOR,
49
+ useExisting: FormInputComponent
50
+ },
51
+ {
52
+ multi: true,
53
+ provide: NG_VALIDATORS,
54
+ useExisting: FormInputComponent
55
+ }
56
+ ], ngImport: i0, template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, decorators: [{
59
+ type: Component,
60
+ args: [{ standalone: true, selector: 'up-input', changeDetection: ChangeDetectionStrategy.OnPush, host: {
61
+ class: 'd-block'
62
+ }, providers: [
63
+ {
64
+ multi: true,
65
+ provide: NG_VALUE_ACCESSOR,
66
+ useExisting: FormInputComponent
67
+ },
68
+ {
69
+ multi: true,
70
+ provide: NG_VALIDATORS,
71
+ useExisting: FormInputComponent
72
+ }
73
+ ], template: "<label class=\"form-label d-flex align-items-center\">\n <ng-content select=\"[icon]\" />\n <span>{{ label }}</span>\n</label>\n\n<input type=\"{{ type }}\" autocomplete=\"{{ autocomplete }}\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value\" (change)=\"change($event.target)\" (input)=\"input($event)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
74
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
75
+ type: Attribute,
76
+ args: ['placeholder']
77
+ }] }, { type: undefined, decorators: [{
78
+ type: Attribute,
79
+ args: ['type']
80
+ }] }, { type: undefined, decorators: [{
81
+ type: Attribute,
82
+ args: ['autocomplete']
83
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { label: [{
84
+ type: Input
85
+ }], value: [{
86
+ type: Input
87
+ }], required: [{
88
+ type: Input
89
+ }], disabled: [{
90
+ type: Input
91
+ }], onInput: [{
92
+ type: Output
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvaW5wdXQvZm9ybS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUgsT0FBTyxFQUF5QyxhQUFhLEVBQUUsaUJBQWlCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBd0JyRCxNQUFNLE9BQU8sa0JBQWtCO0lBa0U3QixZQUNtQyxXQUFtQixFQUMxQixJQUF1RSxFQUMvRCxZQUF5eEIsRUFDeHlCLEVBQXFCO1FBSFAsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBbUU7UUFDL0QsaUJBQVksR0FBWixZQUFZLENBQTZ3QjtRQUN4eUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFuRDFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU16QixZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFPL0QsY0FBUyxHQUFZLEtBQUssQ0FBQztRQW1CeEIsYUFBUSxHQUF3QixDQUFDLElBQVMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBTWxELGNBQVMsR0FBZSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFPdkMsQ0FBQztJQU1FLGdCQUFnQixDQUFDLEVBQU8sSUFBUyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFNdEQsaUJBQWlCLENBQUMsRUFBTyxJQUFTLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQU14RCxLQUFLLENBQUMsR0FBUSxJQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQU1oRCxVQUFVLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFNTSxnQkFBZ0IsQ0FBRSxDQUFVO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQU9NLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFTTSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQU87UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7K0dBeklVLGtCQUFrQixrQkFtRWhCLGFBQWEsOEJBQ2IsTUFBTSw4QkFDTixjQUFjO21HQXJFaEIsa0JBQWtCLHFOQWJsQjtZQUNUO2dCQUNFLEtBQUssRUFBRSxJQUFJO2dCQUNYLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxrQkFBa0I7YUFDaEM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLGtCQUFrQjthQUNoQztTQUNGLDBCQ3hCSCxvZEFVQTs7NEZEZ0JhLGtCQUFrQjtrQkF0QjlCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsU0FBUztxQkFDakIsYUFDVTt3QkFDVDs0QkFDRSxLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLG9CQUFvQjt5QkFDaEM7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsb0JBQW9CO3lCQUNoQztxQkFDRjs7MEJBcUVFLFNBQVM7MkJBQUMsYUFBYTs7MEJBQ3ZCLFNBQVM7MkJBQUMsTUFBTTs7MEJBQ2hCLFNBQVM7MkJBQUMsY0FBYzt5RUEvRFgsS0FBSztzQkFBcEIsS0FBSztnQkFNVSxLQUFLO3NCQUFwQixLQUFLO2dCQU9VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBT1UsUUFBUTtzQkFBdkIsS0FBSztnQkFNVyxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndXAtaW5wdXQnLFxuICBzdHlsZVVybDogJy4vZm9ybS1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2QtYmxvY2snXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfSxcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogRm9ybUlucHV0Q29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGlucHV0IGlzIHJlcXVpcmVkLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW5wdXQgaXMgZGlzYWJsZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE91dHB1dCB2YXJpYWJsZSBmb3IgZW1pdHRpbmcgaW5wdXQgZXZlbnRzLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPGFueT59XG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIG9uSW5wdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIGlzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtBYnN0cmFjdENvbnRyb2x9XG4gICAqL1xuICBwcm90ZWN0ZWQgZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZSBjaGFuZ2VzIGluIHRoZSBpbnB1dC5cbiAgICogQHR5cGUgeyhfdmFsOiBhbnkpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2U6IChfdmFsOiBhbnkpID0+IHZvaWQgPSAoX3ZhbDogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBpbiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgQEF0dHJpYnV0ZSgndHlwZScpIHB1YmxpYyB0eXBlOiAnZW1haWwnIHwgJ2hpZGRlbicgfCAnbnVtYmVyJyB8ICdzZWFyY2gnIHwgJ3RlbCcgfCAndGV4dCcgfCAndXJsJyxcbiAgICBAQXR0cmlidXRlKCdhdXRvY29tcGxldGUnKSBwdWJsaWMgYXV0b2NvbXBsZXRlOiAnbmFtZScgfCAnZW1haWwnIHwgJ3RlbCcgfCAndXJsJyB8ICdvbicgfCAnb2ZmJyB8ICdob25vcmlmaWMtcHJlZml4JyB8ICdnaXZlbi1uYW1lJyB8ICdhZGRpdGlvbmFsLW5hbWUnIHwgJ2ZhbWlseS1uYW1lJyB8ICdob25vcmlmaWMtc3VmZml4JyB8ICduaWNrbmFtZScgfCAndXNlcm5hbWUnIHwgJ29uZS10aW1lLWNvZGUnIHwgJ29yZ2FuaXphdGlvbi10aXRsZScgfCAnb3JnYW5pemF0aW9uJyB8ICdzdHJlZXQtYWRkcmVzcycgfCAnYWRkcmVzcy1saW5lMScgfCAnYWRkcmVzcy1saW5lMicgfCAnYWRkcmVzcy1saW5lMycgfCAnYWRkcmVzcy1sZXZlbDQnIHwgJ2FkZHJlc3MtbGV2ZWwzJyB8ICdhZGRyZXNzLWxldmVsMicgfCAnYWRkcmVzcy1sZXZlbDEnIHwgJ2NvdW50cnknIHwgJ2NvdW50cnktbmFtZScgfCAncG9zdGFsLWNvZGUnIHwgJ2NjLW5hbWUnIHwgJ2NjLWdpdmVuLW5hbWUnIHwgJ2NjLWFkZGl0aW9uYWwtbmFtZScgfCAnY2MtZmFtaWx5LW5hbWUnIHwgJ2NjLW51bWJlcicgfCAnY2MtZXhwJyB8ICdjYy1leHAtbW9udGgnIHwgJ2NjLWV4cC15ZWFyJyB8ICdjYy1jc2MnIHwgJ2NjLXR5cGUnIHwgJ3RyYW5zYWN0aW9uLWN1cnJlbmN5JyB8ICd0cmFuc2FjdGlvbi1hbW91bnQnIHwgJ2xhbmd1YWdlJyB8ICdiZGF5JyB8ICdiZGF5LWRheScgfCAnYmRheS1tb250aCcgfCAnYmRheS15ZWFyJyB8ICdzZXgnIHwgJ3RlbC1jb3VudHJ5LWNvZGUnIHwgJ3RlbC1uYXRpb25hbCcgfCAndGVsLWFyZWEtY29kZScgfCAndGVsLWxvY2FsJyB8ICd0ZWwtZXh0ZW5zaW9uJyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2g6IENoYW5nZURldGVjdG9yUmVmXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0geyhfdmFsOiBhbnkpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBpcyB0b3VjaGVkLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRvdWNoIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfSBcblxuICAvKipcbiAgICogRW1pdHMgYW4gaW5wdXQgZXZlbnQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHthbnl9IHZhbCAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgKi9cbiAgcHVibGljIGlucHV0KHZhbDogYW55KTogdm9pZHsgdGhpcy5vbklucHV0LmVtaXQodmFsKTsgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGlucHV0LlxuICAgKiBAcGFyYW0geyp9IHZhbCAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgc2V0LlxuICAgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsOiBhbnkpOiB2b2lke1xuICAgIHRoaXMudmFsdWUgPSB2YWw7IFxuICAgIHRoaXMuY2gubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGlucHV0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGQgLSBXaGV0aGVyIHRoZSBpbnB1dCBzaG91bGQgYmUgZGlzYWJsZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGQ6IGJvb2xlYW4pOiB2b2lkeyBcbiAgICB0aGlzLmRpc2FibGVkID0gZDsgXG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBhYnN0cmFjdCBjb250cm9sIHJlcHJlc2VudGluZyB0aGUgaW5wdXQuXG4gICAqIEByZXR1cm5zIHsoVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpfSAtIFZhbGlkYXRpb24gZXJyb3JzIGlmIGFueSwgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGx7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IGNvbnRyb2w7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgaGFuZGxlciBmb3IgaW5wdXQgY2hhbmdlcyBpbiB0aGUgaW5wdXQuXG4gICAqIElmIG5vdCB0b3VjaGVkLCBtYXJrcyB0aGUgaW5wdXQgYXMgdG91Y2hlZC5cbiAgICogSWYgbm90IGRpc2FibGVkLCB1cGRhdGVzIHRoZSB2YWx1ZSwgdHJpZ2dlcnMgY2hhbmdlIGRldGVjdGlvbiwgYW5kIGVtaXRzIHRoZSBpbnB1dCBldmVudC5cbiAgICogVXBkYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBmb3JtIGNvbnRyb2wgZXJyb3JzIGFuZCBsYWJlbC5cbiAgICogQHBhcmFtIHthbnl9IHBhcmFtMCAtIEV2ZW50IGRldGFpbCBjb250YWluaW5nIHRoZSBuZXcgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlKHsgdmFsdWUgfTogYW55KTogdm9pZHtcbiAgICBpZiAoIXRoaXMuaXNUb3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzLCB0aGlzLmxhYmVsKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpY29uXVwiIC8+XG4gICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG48L2xhYmVsPlxuXG48aW5wdXQgdHlwZT1cInt7IHR5cGUgfX1cIiBhdXRvY29tcGxldGU9XCJ7eyBhdXRvY29tcGxldGUgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbdmFsdWVdPVwidmFsdWVcIiAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQudGFyZ2V0KVwiIChpbnB1dCk9XCJpbnB1dCgkZXZlbnQpXCIgLz5cblxuQGlmIChlcnJvck1zZykge1xuICAgIDxsYWJlbCBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG59XG4iXX0=
@@ -0,0 +1,97 @@
1
+ import { Attribute, ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { getFormErrorMessage } from '../../../utils';
4
+ import { LocaleNumberPipe } from './pipes/locale-number.pipe';
5
+ import * as i0 from "@angular/core";
6
+ export class FormNumberComponent {
7
+ constructor(placeholder, ch) {
8
+ this.placeholder = placeholder;
9
+ this.ch = ch;
10
+ this.required = false;
11
+ this.disabled = false;
12
+ this.locale = navigator.language;
13
+ this.isTouched = false;
14
+ this.onChange = (_val) => { };
15
+ this.onTouched = () => { };
16
+ }
17
+ registerOnChange(fn) { this.onChange = fn; }
18
+ registerOnTouched(fn) { this.onTouched = fn; }
19
+ writeValue(val) {
20
+ this.value = val;
21
+ this.ch.markForCheck();
22
+ }
23
+ setDisabledState(d) {
24
+ this.disabled = d;
25
+ this.ch.markForCheck();
26
+ }
27
+ validate(control) {
28
+ this.formControl = control;
29
+ return null;
30
+ }
31
+ change({ value }) {
32
+ if (!this.isTouched) {
33
+ this.onTouched();
34
+ this.isTouched = true;
35
+ }
36
+ if (!this.disabled) {
37
+ this.value = value;
38
+ this.onChange(this.value);
39
+ this.errorMsg = getFormErrorMessage(this.formControl?.errors, this.label);
40
+ }
41
+ }
42
+ onKeyDown(ev) {
43
+ const allowedKeys = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Home', 'End', ',', '.']);
44
+ const key = ev.key;
45
+ if (allowedKeys.has(key))
46
+ return;
47
+ if (!/^\d$/.test(key))
48
+ ev.preventDefault();
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormNumberComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormNumberComponent, isStandalone: true, selector: "up-number", inputs: { label: "label", value: "value", required: "required", disabled: "disabled", locale: "locale" }, host: { classAttribute: "d-block" }, providers: [
52
+ {
53
+ multi: true,
54
+ provide: NG_VALUE_ACCESSOR,
55
+ useExisting: FormNumberComponent
56
+ },
57
+ {
58
+ multi: true,
59
+ provide: NG_VALIDATORS,
60
+ useExisting: FormNumberComponent
61
+ }
62
+ ], ngImport: i0, template: "<label class=\"form-label\">{{ label }}</label>\n<input type=\"text\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value | localeNumber:locale\" (keydown)=\"onKeyDown($event)\" (change)=\"change($event.target)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: LocaleNumberPipe, name: "localeNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormNumberComponent, decorators: [{
65
+ type: Component,
66
+ args: [{ standalone: true, selector: 'up-number', changeDetection: ChangeDetectionStrategy.OnPush, host: {
67
+ class: 'd-block'
68
+ }, imports: [
69
+ FormsModule,
70
+ LocaleNumberPipe
71
+ ], providers: [
72
+ {
73
+ multi: true,
74
+ provide: NG_VALUE_ACCESSOR,
75
+ useExisting: FormNumberComponent
76
+ },
77
+ {
78
+ multi: true,
79
+ provide: NG_VALIDATORS,
80
+ useExisting: FormNumberComponent
81
+ }
82
+ ], template: "<label class=\"form-label\">{{ label }}</label>\n<input type=\"text\" placeholder=\"{{ placeholder }}\" class=\"form-control\" [required]=\"required\" [disabled]=\"disabled\" [value]=\"value | localeNumber:locale\" (keydown)=\"onKeyDown($event)\" (change)=\"change($event.target)\" />\n\n@if (errorMsg) {\n <label class=\"is-invalid\">{{ errorMsg }}</label>\n}\n" }]
83
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
84
+ type: Attribute,
85
+ args: ['placeholder']
86
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { label: [{
87
+ type: Input
88
+ }], value: [{
89
+ type: Input
90
+ }], required: [{
91
+ type: Input
92
+ }], disabled: [{
93
+ type: Input
94
+ }], locale: [{
95
+ type: Input
96
+ }] } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1udW1iZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL251bWJlci9mb3JtLW51bWJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmlwaW4tYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvbnVtYmVyL2Zvcm0tbnVtYmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUF5QyxXQUFXLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUErQixNQUFNLGdCQUFnQixDQUFDO0FBQ25KLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQTRCOUQsTUFBTSxPQUFPLG1CQUFtQjtJQW1FOUIsWUFDbUMsV0FBbUIsRUFDakMsRUFBcUI7UUFEUCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQWxEMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQU8xQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBTzFCLFdBQU0sR0FBVyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBTzdDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFtQnhCLGFBQVEsR0FBd0IsQ0FBQyxJQUFTLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQU1sRCxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBS3ZDLENBQUM7SUFNRSxnQkFBZ0IsQ0FBQyxFQUFPLElBQVMsSUFBSSxD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S0FBSztnQkFPVSxNQUFNO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0Rm9ybUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IExvY2FsZU51bWJlclBpcGUgfSBmcm9tICcuL3BpcGVzL2xvY2FsZS1udW1iZXIucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLW51bWJlcicsXG4gIHN0eWxlVXJsOiAnLi9mb3JtLW51bWJlci5jb21wb25lbnQuc2NzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLW51bWJlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkLWJsb2NrJ1xuICB9LFxuICBpbXBvcnRzOiBbIFxuICAgIEZvcm1zTW9kdWxlLCBcbiAgICBMb2NhbGVOdW1iZXJQaXBlIFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZvcm1OdW1iZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGb3JtTnVtYmVyQ29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1OdW1iZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgZm9yIHRoZSBsYWJlbCBhc3NvY2lhdGVkIHdpdGggdGhlIGlucHV0LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxhYmVsPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIGZvciB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHZhbHVlPzogc3RyaW5nIHwgbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaW5wdXQgaXMgcmVxdWlyZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElucHV0IHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5wdXQgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgbG9jYWxlIHRvIGJlIHVzZWQgZm9yIG1hc2tpbmcgbnVtYmVycyBiYXNlZCBvbiBsb2NhbGUuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IG5hdmlnYXRvci5sYW5ndWFnZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxvY2FsZTogc3RyaW5nID0gbmF2aWdhdG9yLmxhbmd1YWdlO1xuICBcbiAgLyoqXG4gICAqIEJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIGlzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGVycm9yTXNnITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHtBYnN0cmFjdENvbnRyb2x9XG4gICAqL1xuICBwcm90ZWN0ZWQgZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB2YWx1ZSBjaGFuZ2VzIGluIHRoZSBpbnB1dC5cbiAgICogQHR5cGUgeyhfdmFsOiBhbnkpID0+IHZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2U6IChfdmFsOiBhbnkpID0+IHZvaWQgPSAoX3ZhbDogYW55KSA9PiB7fTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRvdWNoIGV2ZW50cyBpbiB0aGUgaW5wdXQuXG4gICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgY2hhbmdlcy5cbiAgICogQHBhcmFtIHsoX3ZhbDogYW55KSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWR7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0b3VjaCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWR7IHRoaXMub25Ub3VjaGVkID0gZm47IH0gXG5cbiAgLyoqXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBzZXQuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IGFueSk6IHZvaWR7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDsgXG4gICAgdGhpcy5jaC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZCAtIFdoZXRoZXIgdGhlIGlucHV0IHNob3VsZCBiZSBkaXNhYmxlZCBvciBub3QuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oZDogYm9vbGVhbik6IHZvaWR7IFxuICAgIHRoaXMuZGlzYWJsZWQgPSBkOyBcbiAgICB0aGlzLmNoLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgaW5wdXQuXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGFic3RyYWN0IGNvbnRyb2wgcmVwcmVzZW50aW5nIHRoZSBpbnB1dC5cbiAgICogQHJldHVybnMgeyhWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCl9IC0gVmFsaWRhdGlvbiBlcnJvcnMgaWYgYW55LCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gY29udHJvbDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGlucHV0IGNoYW5nZXMgaW4gdGhlIGlucHV0LlxuICAgKiBJZiBub3QgdG91Y2hlZCwgbWFya3MgdGhlIGlucHV0IGFzIHRvdWNoZWQuXG4gICAqIElmIG5vdCBkaXNhYmxlZCwgdXBkYXRlcyB0aGUgdmFsdWUsIHRyaWdnZXJzIGNoYW5nZSBkZXRlY3Rpb24sIGFuZCBlbWl0cyB0aGUgaW5wdXQgZXZlbnQuXG4gICAqIFVwZGF0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZm9ybSBjb250cm9sIGVycm9ycyBhbmQgbGFiZWwuXG4gICAqIEBwYXJhbSB7YW55fSBwYXJhbSAtIEV2ZW50IGRldGFpbCBjb250YWluaW5nIHRoZSBuZXcgaW5wdXQgdmFsdWUuXG4gICAqL1xuIHB1YmxpYyBjaGFuZ2UoeyB2YWx1ZSB9OiBhbnkpOiB2b2lke1xuICAgIGlmICghdGhpcy5pc1RvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7IFxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSBnZXRGb3JtRXJyb3JNZXNzYWdlKHRoaXMuZm9ybUNvbnRyb2w/LmVycm9ycywgdGhpcy5sYWJlbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleWRvd24gZXZlbnRzIGluIHRoZSBpbnB1dC5cbiAgICogUHJldmVudHMgaW5wdXQgb2Ygbm9uLW51bWVyaWMgY2hhcmFjdGVycyBleGNlcHQgZm9yIHNwZWNpZmljIGFsbG93ZWQga2V5cy5cbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCAtIFRoZSBrZXlib2FyZCBldmVudCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25LZXlEb3duKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZHtcbiAgICBjb25zdCBhbGxvd2VkS2V5cyA9IG5ldyBTZXQoWydCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0JywgJ1RhYicsICdIb21lJywgJ0VuZCcsICcsJywgJy4nXSk7XG4gICAgY29uc3Qga2V5ID0gZXYua2V5O1xuXG4gICAgaWYgKGFsbG93ZWRLZXlzLmhhcyhrZXkpKSByZXR1cm47XG4gICAgaWYgKCEvXlxcZCQvLnRlc3Qoa2V5KSkgZXYucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbjxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt2YWx1ZV09XCJ2YWx1ZSB8IGxvY2FsZU51bWJlcjpsb2NhbGVcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudC50YXJnZXQpXCIgLz5cblxuQGlmIChlcnJvck1zZykge1xuICAgIDxsYWJlbCBjbGFzcz1cImlzLWludmFsaWRcIj57eyBlcnJvck1zZyB9fTwvbGFiZWw+XG59XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LocaleNumberPipe {
4
+ transform(value, locale) {
5
+ if (!value)
6
+ return '';
7
+ if (!/[.,]/.test(value))
8
+ return Number(value).toLocaleString(locale);
9
+ else {
10
+ if (/,/.test(value) && /\./.test(value)) {
11
+ const seperator = this.extractSeperator(value);
12
+ const splitValue = value.split(seperator[seperator.length - 1] === ',' ? /,/ : /\./);
13
+ return Number(splitValue[0].replaceAll(/[,.]/g, '')).toLocaleString(locale) + seperator[seperator.length - 1] + splitValue[1];
14
+ }
15
+ return Number(value.replaceAll(/[,.]/g, '')).toLocaleString(locale);
16
+ }
17
+ }
18
+ extractSeperator(input) {
19
+ const seperators = [];
20
+ for (let i = 0; i < input.length; i++) {
21
+ const char = input[i];
22
+ if (char === '.' || char === ',')
23
+ seperators.push(char);
24
+ }
25
+ return seperators;
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocaleNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
28
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: LocaleNumberPipe, isStandalone: true, name: "localeNumber" }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocaleNumberPipe, decorators: [{
31
+ type: Pipe,
32
+ args: [{
33
+ standalone: true,
34
+ name: 'localeNumber',
35
+ pure: true
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLW51bWJlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pcGluLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL251bWJlci9waXBlcy9sb2NhbGUtbnVtYmVyLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBT3BELE1BQU0sT0FBTyxnQkFBZ0I7SUFFcEIsU0FBUyxDQUFDLEtBQWdDLEVBQUUsTUFBYztRQUMvRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoRSxDQUFDO1lBQ0osSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFbkYsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ILENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVTLGdCQUFnQixDQUFDLEtBQWE7UUFDdEMsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO1FBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FBRztnQkFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOytHQXpCVSxnQkFBZ0I7NkdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFMNUIsSUFBSTttQkFBQztvQkFDSixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxJQUFJO2lCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AUGlwZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIG5hbWU6ICdsb2NhbGVOdW1iZXInLFxuICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsZU51bWJlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBsb2NhbGU6IHN0cmluZyk6IHN0cmluZ3tcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gIFxuICAgIGlmICghL1suLF0vLnRlc3QodmFsdWUpKSByZXR1cm4gTnVtYmVyKHZhbHVlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKC8sLy50ZXN0KHZhbHVlKSAmJiAvXFwuLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBzZXBlcmF0b3IgPSB0aGlzLmV4dHJhY3RTZXBlcmF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCBzcGxpdFZhbHVlID0gdmFsdWUuc3BsaXQoc2VwZXJhdG9yW3NlcGVyYXRvci5sZW5ndGggLTFdID09PSAnLCc/IC8sLyA6IC9cXC4vKTtcblxuICAgICAgICByZXR1cm4gTnVtYmVyKHNwbGl0VmFsdWVbMF0ucmVwbGFjZUFsbCgvWywuXS9nLCAnJykpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSkgKyBzZXBlcmF0b3Jbc2VwZXJhdG9yLmxlbmd0aCAtMV0gKyBzcGxpdFZhbHVlWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlQWxsKC9bLC5dL2csICcnKSkudG9Mb2NhbGVTdHJpbmcobG9jYWxlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZXh0cmFjdFNlcGVyYXRvcihpbnB1dDogc3RyaW5nKTogc3RyaW5nW117XG4gICAgY29uc3Qgc2VwZXJhdG9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoYXIgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjaGFyID09PSAnLicgfHwgY2hhciA9PT0gJywnKSBzZXBlcmF0b3JzLnB1c2goY2hhcik7XG4gICAgfVxuICAgIHJldHVybiBzZXBlcmF0b3JzO1xuICB9XG59XG4iXX0=