@up_si_vale/sivale-componentes-angular 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/esm2022/lib/atoms/button/button.component.mjs +55 -0
  2. package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +174 -0
  3. package/esm2022/lib/atoms/date-picker/date-picker.component.mjs +835 -0
  4. package/esm2022/lib/atoms/input/input.component.mjs +218 -0
  5. package/esm2022/lib/atoms/loader/loader.component.mjs +81 -0
  6. package/esm2022/lib/atoms/radio/radio.component.mjs +142 -0
  7. package/esm2022/lib/atoms/textarea/textarea.component.mjs +126 -0
  8. package/esm2022/lib/directives/asset-source.directive.mjs +68 -0
  9. package/esm2022/lib/directives/icon-source.directive.mjs +65 -0
  10. package/esm2022/lib/directives/no-leading-space.directive.mjs +24 -0
  11. package/esm2022/lib/directives/only-letters.directive.mjs +25 -0
  12. package/esm2022/lib/directives/only-number.directive.mjs +21 -0
  13. package/esm2022/lib/directives/rfc.directive.mjs +67 -0
  14. package/esm2022/lib/directives/tooltip.directive.mjs +199 -0
  15. package/esm2022/lib/models/snackbar.models.mjs +2 -0
  16. package/esm2022/lib/molecules/alert/alert.component.mjs +79 -0
  17. package/esm2022/lib/molecules/copy-input/copy-input.component.mjs +46 -0
  18. package/esm2022/lib/molecules/multiselect/multiselect.component.mjs +466 -0
  19. package/esm2022/lib/molecules/option/option.component.mjs +55 -0
  20. package/esm2022/lib/molecules/phone-input/phone-input.component.mjs +64 -0
  21. package/esm2022/lib/molecules/select/select.component.mjs +498 -0
  22. package/esm2022/lib/molecules/snackbar/snackbar.component.mjs +581 -0
  23. package/esm2022/lib/organisms/sidebar/sidebar-icon.component.mjs +91 -0
  24. package/esm2022/lib/organisms/sidebar/sidebar.component.mjs +115 -0
  25. package/esm2022/lib/services/snackbar.service.mjs +96 -0
  26. package/esm2022/lib/tokens/asset-base-url.token.mjs +10 -0
  27. package/esm2022/public-api.mjs +37 -0
  28. package/esm2022/up_si_vale-sivale-componentes-angular.mjs +5 -0
  29. package/fesm2022/up_si_vale-sivale-componentes-angular.mjs +4116 -0
  30. package/fesm2022/up_si_vale-sivale-componentes-angular.mjs.map +1 -0
  31. package/index.d.ts +5 -0
  32. package/lib/atoms/button/button.component.d.ts +20 -0
  33. package/lib/atoms/checkbox/checkbox.component.d.ts +31 -0
  34. package/lib/atoms/date-picker/date-picker.component.d.ts +134 -0
  35. package/lib/atoms/input/input.component.d.ts +35 -0
  36. package/lib/atoms/loader/loader.component.d.ts +10 -0
  37. package/lib/atoms/radio/radio.component.d.ts +25 -0
  38. package/lib/atoms/textarea/textarea.component.d.ts +27 -0
  39. package/lib/directives/asset-source.directive.d.ts +19 -0
  40. package/lib/directives/icon-source.directive.d.ts +18 -0
  41. package/lib/directives/no-leading-space.directive.d.ts +6 -0
  42. package/lib/directives/only-letters.directive.d.ts +7 -0
  43. package/lib/directives/only-number.directive.d.ts +6 -0
  44. package/lib/directives/rfc.directive.d.ts +12 -0
  45. package/lib/directives/tooltip.directive.d.ts +27 -0
  46. package/{src/lib/models/snackbar.models.ts → lib/models/snackbar.models.d.ts} +8 -10
  47. package/lib/molecules/alert/alert.component.d.ts +29 -0
  48. package/lib/molecules/copy-input/copy-input.component.d.ts +14 -0
  49. package/lib/molecules/multiselect/multiselect.component.d.ts +74 -0
  50. package/lib/molecules/option/option.component.d.ts +19 -0
  51. package/lib/molecules/phone-input/phone-input.component.d.ts +12 -0
  52. package/lib/molecules/select/select.component.d.ts +88 -0
  53. package/lib/molecules/snackbar/snackbar.component.d.ts +17 -0
  54. package/lib/organisms/sidebar/sidebar-icon.component.d.ts +8 -0
  55. package/lib/organisms/sidebar/sidebar.component.d.ts +47 -0
  56. package/lib/services/snackbar.service.d.ts +40 -0
  57. package/{src/lib/tokens/asset-base-url.token.ts → lib/tokens/asset-base-url.token.d.ts} +1 -5
  58. package/package.json +39 -28
  59. package/{src/public-api.ts → public-api.d.ts} +3 -15
  60. package/ng-package.json +0 -9
  61. package/src/lib/atoms/button/button.component.html +0 -21
  62. package/src/lib/atoms/button/button.component.scss +0 -242
  63. package/src/lib/atoms/button/button.component.ts +0 -43
  64. package/src/lib/atoms/checkbox/checkbox.component.scss +0 -131
  65. package/src/lib/atoms/checkbox/checkbox.component.ts +0 -130
  66. package/src/lib/atoms/date-picker/date-picker.component.html +0 -295
  67. package/src/lib/atoms/date-picker/date-picker.component.scss +0 -1002
  68. package/src/lib/atoms/date-picker/date-picker.component.ts +0 -942
  69. package/src/lib/atoms/input/input.component.ts +0 -239
  70. package/src/lib/atoms/loader/loader.component.scss +0 -144
  71. package/src/lib/atoms/loader/loader.component.ts +0 -44
  72. package/src/lib/atoms/radio/radio.component.scss +0 -115
  73. package/src/lib/atoms/radio/radio.component.ts +0 -103
  74. package/src/lib/atoms/textarea/textarea.component.ts +0 -155
  75. package/src/lib/directives/asset-source.directive.ts +0 -64
  76. package/src/lib/directives/icon-source.directive.ts +0 -74
  77. package/src/lib/directives/no-leading-space.directive.ts +0 -18
  78. package/src/lib/directives/only-letters.directive.ts +0 -21
  79. package/src/lib/directives/only-number.directive.ts +0 -15
  80. package/src/lib/directives/rfc.directive.ts +0 -60
  81. package/src/lib/directives/tooltip.directive.ts +0 -211
  82. package/src/lib/molecules/copy-input/copy-input.component.html +0 -29
  83. package/src/lib/molecules/copy-input/copy-input.component.scss +0 -101
  84. package/src/lib/molecules/copy-input/copy-input.component.ts +0 -41
  85. package/src/lib/molecules/multiselect/multiselect.component.scss +0 -298
  86. package/src/lib/molecules/multiselect/multiselect.component.ts +0 -487
  87. package/src/lib/molecules/option/option.component.ts +0 -45
  88. package/src/lib/molecules/phone-input/phone-input.component.scss +0 -78
  89. package/src/lib/molecules/phone-input/phone-input.component.ts +0 -43
  90. package/src/lib/molecules/select/select.component.ts +0 -482
  91. package/src/lib/molecules/snackbar/snackbar.component.scss +0 -201
  92. package/src/lib/molecules/snackbar/snackbar.component.ts +0 -321
  93. package/src/lib/services/snackbar.service.ts +0 -103
  94. package/tsconfig.json +0 -31
@@ -0,0 +1,218 @@
1
+ import { Component, Input, forwardRef, ChangeDetectionStrategy } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
4
+ import { IconSourceDirective } from '../../directives/icon-source.directive';
5
+ import { NoLeadingSpaceDirective } from '../../directives/no-leading-space.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ export class InputComponent {
9
+ cdr;
10
+ label = '';
11
+ id = '';
12
+ placeholder = '';
13
+ type = 'text';
14
+ maxLength;
15
+ hasError = false;
16
+ errorMessage = '';
17
+ disabled = false;
18
+ readonly = false;
19
+ format = 'alphanumeric';
20
+ unstyled = false; // Para usar dentro de componentes compuestos
21
+ value = '';
22
+ formattedValue = '';
23
+ onChange = () => { };
24
+ onTouched = () => { };
25
+ constructor(cdr) {
26
+ this.cdr = cdr;
27
+ }
28
+ writeValue(value) {
29
+ let processedValue = value || '';
30
+ // For currency format, enforce maxLength on the raw value (without commas)
31
+ if (this.format === 'currency' && this.maxLength) {
32
+ const rawValue = String(processedValue).replace(/[^0-9.]/g, '');
33
+ if (rawValue.length > this.maxLength) {
34
+ processedValue = rawValue.slice(0, this.maxLength);
35
+ }
36
+ }
37
+ // For number inputs, enforce maxLength on initial value
38
+ if (this.type === 'number' && this.maxLength && String(processedValue).length > this.maxLength) {
39
+ processedValue = String(processedValue).slice(0, this.maxLength);
40
+ }
41
+ this.value = processedValue;
42
+ this.formattedValue = this.applyFormat(this.value);
43
+ this.cdr.markForCheck();
44
+ }
45
+ registerOnChange(fn) {
46
+ this.onChange = fn;
47
+ }
48
+ registerOnTouched(fn) {
49
+ this.onTouched = fn;
50
+ }
51
+ setDisabledState(isDisabled) {
52
+ this.disabled = isDisabled;
53
+ this.cdr.markForCheck();
54
+ }
55
+ onInputChange(event) {
56
+ const target = event.target;
57
+ let inputValue = target.value;
58
+ // Parse the value first (removes formatting like commas)
59
+ let rawValue = this.parseValue(inputValue);
60
+ // For currency format, enforce maxLength on the raw value (without commas)
61
+ if (this.format === 'currency' && this.maxLength && String(rawValue).length > this.maxLength) {
62
+ rawValue = String(rawValue).slice(0, this.maxLength);
63
+ }
64
+ // For number inputs or numeric format, maxLength doesn't work natively, so we handle it manually
65
+ if ((this.type === 'number' || this.format === 'numeric') && this.maxLength) {
66
+ // Check the length of the raw value (without formatting)
67
+ const rawString = String(rawValue);
68
+ if (rawString.length > this.maxLength) {
69
+ rawValue = rawString.slice(0, this.maxLength);
70
+ // Update the input value to reflect the truncation
71
+ target.value = rawValue;
72
+ }
73
+ }
74
+ this.value = rawValue;
75
+ this.formattedValue = this.applyFormat(rawValue);
76
+ // Update the input display (for formatted inputs like currency)
77
+ if (this.format === 'currency') {
78
+ target.value = this.formattedValue;
79
+ }
80
+ this.onChange(rawValue);
81
+ }
82
+ onBlur() {
83
+ this.onTouched();
84
+ }
85
+ parseValue(value) {
86
+ switch (this.format) {
87
+ case 'currency':
88
+ // Remove all non-numeric characters except decimal point
89
+ return value.replace(/[^0-9.]/g, '');
90
+ case 'numeric':
91
+ // Remove all non-numeric characters (only digits allowed)
92
+ return value.replace(/[^0-9]/g, '');
93
+ case 'alphanumeric':
94
+ default:
95
+ return value;
96
+ }
97
+ }
98
+ applyFormat(value) {
99
+ if (!value && value !== 0)
100
+ return '';
101
+ switch (this.format) {
102
+ case 'currency':
103
+ return this.formatCurrency(value);
104
+ case 'alphanumeric':
105
+ default:
106
+ return String(value);
107
+ }
108
+ }
109
+ formatCurrency(value) {
110
+ const numValue = typeof value === 'string' ? parseFloat(value.replace(/[^0-9.]/g, '')) : value;
111
+ if (isNaN(numValue))
112
+ return '';
113
+ // Format with thousands separator
114
+ return numValue.toLocaleString('es-MX', {
115
+ minimumFractionDigits: 0,
116
+ maximumFractionDigits: 2
117
+ });
118
+ }
119
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
120
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InputComponent, isStandalone: true, selector: "app-input", inputs: { label: "label", id: "id", placeholder: "placeholder", type: "type", maxLength: "maxLength", hasError: "hasError", errorMessage: "errorMessage", disabled: "disabled", readonly: "readonly", format: "format", unstyled: "unstyled" }, providers: [
121
+ {
122
+ provide: NG_VALUE_ACCESSOR,
123
+ useExisting: forwardRef(() => InputComponent),
124
+ multi: true
125
+ }
126
+ ], ngImport: i0, template: `
127
+ <div class="input-wrapper" [class.input-wrapper--unstyled]="unstyled">
128
+ <label *ngIf="label && !unstyled" [for]="id">{{ label }}</label>
129
+ <div class="input-container" [class.error]="hasError && !unstyled" [class.input-container--unstyled]="unstyled">
130
+ <div class="input-prefix-wrapper">
131
+ <ng-content select="[prefix]"></ng-content>
132
+ </div>
133
+ <input
134
+ noLeadingSpace
135
+ [type]="type"
136
+ [id]="id"
137
+ [placeholder]="placeholder"
138
+ [attr.maxlength]="format === 'currency' ? null : maxLength"
139
+ [disabled]="disabled"
140
+ [readonly]="readonly"
141
+ class="input-field"
142
+ [class.error]="hasError && !unstyled"
143
+ [class.input-field--unstyled]="unstyled"
144
+ [value]="formattedValue"
145
+ (blur)="onBlur()"
146
+ (input)="onInputChange($event)">
147
+ <div class="input-suffix-wrapper">
148
+ <ng-content select="[suffix]"></ng-content>
149
+ </div>
150
+ </div>
151
+ <div *ngIf="hasError && errorMessage && !unstyled" class="field-error">
152
+ {{ errorMessage }}
153
+ </div>
154
+ </div>
155
+ `, isInline: true, styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px white inset!important;box-shadow:0 0 0 30px #fff inset!important;-webkit-text-fill-color:#2E353A!important;transition:background-color 5000s ease-in-out 0s}.input-prefix-wrapper,.input-suffix-wrapper{flex-shrink:0;display:flex;align-items:center;gap:.5rem;font-family:Quicksand,sans-serif;font-size:14px;font-weight:500;color:#969a9c;position:relative;z-index:2;pointer-events:auto!important}.input-prefix-wrapper{margin-right:.5rem;&:empty{display:none;margin-right:0}}.input-suffix-wrapper{margin-left:.5rem;&:empty{display:none;margin-left:0}}.input-prefix-wrapper *,.input-suffix-wrapper *{pointer-events:auto!important}.input-field{position:relative;z-index:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: NoLeadingSpaceDirective, selector: "[noLeadingSpace]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
156
+ }
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputComponent, decorators: [{
158
+ type: Component,
159
+ args: [{ selector: 'app-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, IconSourceDirective, NoLeadingSpaceDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: `
160
+ <div class="input-wrapper" [class.input-wrapper--unstyled]="unstyled">
161
+ <label *ngIf="label && !unstyled" [for]="id">{{ label }}</label>
162
+ <div class="input-container" [class.error]="hasError && !unstyled" [class.input-container--unstyled]="unstyled">
163
+ <div class="input-prefix-wrapper">
164
+ <ng-content select="[prefix]"></ng-content>
165
+ </div>
166
+ <input
167
+ noLeadingSpace
168
+ [type]="type"
169
+ [id]="id"
170
+ [placeholder]="placeholder"
171
+ [attr.maxlength]="format === 'currency' ? null : maxLength"
172
+ [disabled]="disabled"
173
+ [readonly]="readonly"
174
+ class="input-field"
175
+ [class.error]="hasError && !unstyled"
176
+ [class.input-field--unstyled]="unstyled"
177
+ [value]="formattedValue"
178
+ (blur)="onBlur()"
179
+ (input)="onInputChange($event)">
180
+ <div class="input-suffix-wrapper">
181
+ <ng-content select="[suffix]"></ng-content>
182
+ </div>
183
+ </div>
184
+ <div *ngIf="hasError && errorMessage && !unstyled" class="field-error">
185
+ {{ errorMessage }}
186
+ </div>
187
+ </div>
188
+ `, providers: [
189
+ {
190
+ provide: NG_VALUE_ACCESSOR,
191
+ useExisting: forwardRef(() => InputComponent),
192
+ multi: true
193
+ }
194
+ ], styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px white inset!important;box-shadow:0 0 0 30px #fff inset!important;-webkit-text-fill-color:#2E353A!important;transition:background-color 5000s ease-in-out 0s}.input-prefix-wrapper,.input-suffix-wrapper{flex-shrink:0;display:flex;align-items:center;gap:.5rem;font-family:Quicksand,sans-serif;font-size:14px;font-weight:500;color:#969a9c;position:relative;z-index:2;pointer-events:auto!important}.input-prefix-wrapper{margin-right:.5rem;&:empty{display:none;margin-right:0}}.input-suffix-wrapper{margin-left:.5rem;&:empty{display:none;margin-left:0}}.input-prefix-wrapper *,.input-suffix-wrapper *{pointer-events:auto!important}.input-field{position:relative;z-index:1}\n"] }]
195
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { label: [{
196
+ type: Input
197
+ }], id: [{
198
+ type: Input
199
+ }], placeholder: [{
200
+ type: Input
201
+ }], type: [{
202
+ type: Input
203
+ }], maxLength: [{
204
+ type: Input
205
+ }], hasError: [{
206
+ type: Input
207
+ }], errorMessage: [{
208
+ type: Input
209
+ }], disabled: [{
210
+ type: Input
211
+ }], readonly: [{
212
+ type: Input
213
+ }], format: [{
214
+ type: Input
215
+ }], unstyled: [{
216
+ type: Input
217
+ }] } });
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdG9tcy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQix1QkFBdUIsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQXlHdEYsTUFBTSxPQUFPLGNBQWM7SUFrQkw7SUFqQlgsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDUixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksR0FBcUQsTUFBTSxDQUFDO0lBQ2hFLFNBQVMsQ0FBaUI7SUFDMUIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixNQUFNLEdBQWdCLGNBQWMsQ0FBQztJQUNyQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsNkNBQTZDO0lBRXhFLEtBQUssR0FBUSxFQUFFLENBQUM7SUFDaEIsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsWUFBb0IsR0FBc0I7UUFBdEIs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Q0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJY29uU291cmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9pY29uLXNvdXJjZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9MZWFkaW5nU3BhY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vLWxlYWRpbmctc3BhY2UuZGlyZWN0aXZlJztcblxudHlwZSBJbnB1dEZvcm1hdCA9ICdhbHBoYW51bWVyaWMnIHwgJ2N1cnJlbmN5JyB8ICdudW1lcmljJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIEljb25Tb3VyY2VEaXJlY3RpdmUsIE5vTGVhZGluZ1NwYWNlRGlyZWN0aXZlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIiBbY2xhc3MuaW5wdXQtd3JhcHBlci0tdW5zdHlsZWRdPVwidW5zdHlsZWRcIj5cbiAgICAgIDxsYWJlbCAqbmdJZj1cImxhYmVsICYmICF1bnN0eWxlZFwiIFtmb3JdPVwiaWRcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCIgW2NsYXNzLmVycm9yXT1cImhhc0Vycm9yICYmICF1bnN0eWxlZFwiIFtjbGFzcy5pbnB1dC1jb250YWluZXItLXVuc3R5bGVkXT1cInVuc3R5bGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1wcmVmaXgtd3JhcHBlclwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgbm9MZWFkaW5nU3BhY2VcbiAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cImZvcm1hdCA9PT0gJ2N1cnJlbmN5JyA/IG51bGwgOiBtYXhMZW5ndGhcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkXCJcbiAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiaGFzRXJyb3IgJiYgIXVuc3R5bGVkXCJcbiAgICAgICAgICBbY2xhc3MuaW5wdXQtZmllbGQtLXVuc3R5bGVkXT1cInVuc3R5bGVkXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZm9ybWF0dGVkVmFsdWVcIlxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zdWZmaXgtd3JhcHBlclwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0Vycm9yICYmIGVycm9yTWVzc2FnZSAmJiAhdW5zdHlsZWRcIiBjbGFzcz1cImZpZWxkLWVycm9yXCI+XG4gICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAvKiBTb2x1Y2nDs24gcGFyYSBlbCBzb21icmVhZG8gYXp1bCBkZWwgYXV0b2NvbXBsZXRhZG8gZGVsIG5hdmVnYWRvciAqL1xuICAgIGlucHV0Oi13ZWJraXQtYXV0b2ZpbGwsXG4gICAgaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbDpob3ZlcixcbiAgICBpbnB1dDotd2Via2l0LWF1dG9maWxsOmZvY3VzLFxuICAgIGlucHV0Oi13ZWJraXQtYXV0b2ZpbGw6YWN0aXZlIHtcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgMzBweCB3aGl0ZSBpbnNldCAhaW1wb3J0YW50O1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMzBweCB3aGl0ZSBpbnNldCAhaW1wb3J0YW50O1xuICAgICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICMyRTM1M0EgIWltcG9ydGFudDtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgNTAwMHMgZWFzZS1pbi1vdXQgMHM7XG4gICAgfVxuXG4gICAgLyogV3JhcHBlcnMgcGFyYSBwcmVmaXggeSBzdWZmaXggY29uIHNvcG9ydGUgY29tcGxldG8gZGUgZXZlbnRvcyAqL1xuICAgIC5pbnB1dC1wcmVmaXgtd3JhcHBlcixcbiAgICAuaW5wdXQtc3VmZml4LXdyYXBwZXIge1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMC41cmVtO1xuICAgICAgZm9udC1mYW1pbHk6ICdRdWlja3NhbmQnLCBzYW5zLXNlcmlmO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjOTY5QTlDO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmlucHV0LXByZWZpeC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMC41cmVtO1xuXG4gICAgICAmOmVtcHR5IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pbnB1dC1zdWZmaXgtd3JhcHBlciB7XG4gICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuXG4gICAgICAmOmVtcHR5IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQXNlZ3VyYXIgcXVlIHRvZG9zIGxvcyBlbGVtZW50b3MgZGVudHJvIGRlIHByZWZpeC9zdWZmaXggc2VhbiBjbGlja2VhYmxlcyAqL1xuICAgIC5pbnB1dC1wcmVmaXgtd3JhcHBlciAqLFxuICAgIC5pbnB1dC1zdWZmaXgtd3JhcHBlciAqIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLyogRWwgaW5wdXQgbm8gZGViZSBjdWJyaXIgbG9zIHdyYXBwZXJzICovXG4gICAgLmlucHV0LWZpZWxkIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICBgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgdHlwZTogJ3RleHQnIHwgJ2VtYWlsJyB8ICd0ZWwnIHwgJ3Bhc3N3b3JkJyB8ICdudW1iZXInID0gJ3RleHQnO1xuICBASW5wdXQoKSBtYXhMZW5ndGg/OiBudW1iZXIgfCBudWxsO1xuICBASW5wdXQoKSBoYXNFcnJvciA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybWF0OiBJbnB1dEZvcm1hdCA9ICdhbHBoYW51bWVyaWMnO1xuICBASW5wdXQoKSB1bnN0eWxlZCA9IGZhbHNlOyAvLyBQYXJhIHVzYXIgZGVudHJvIGRlIGNvbXBvbmVudGVzIGNvbXB1ZXN0b3NcblxuICB2YWx1ZTogYW55ID0gJyc7XG4gIGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgbGV0IHByb2Nlc3NlZFZhbHVlID0gdmFsdWUgfHwgJyc7XG5cbiAgICAvLyBGb3IgY3VycmVuY3kgZm9ybWF0LCBlbmZvcmNlIG1heExlbmd0aCBvbiB0aGUgcmF3IHZhbHVlICh3aXRob3V0IGNvbW1hcylcbiAgICBpZiAodGhpcy5mb3JtYXQgPT09ICdjdXJyZW5jeScgJiYgdGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gU3RyaW5nKHByb2Nlc3NlZFZhbHVlKS5yZXBsYWNlKC9bXjAtOS5dL2csICcnKTtcbiAgICAgIGlmIChyYXdWYWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICBwcm9jZXNzZWRWYWx1ZSA9IHJhd1ZhbHVlLnNsaWNlKDAsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgbnVtYmVyIGlucHV0cywgZW5mb3JjZSBtYXhMZW5ndGggb24gaW5pdGlhbCB2YWx1ZVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInICYmIHRoaXMubWF4TGVuZ3RoICYmIFN0cmluZyhwcm9jZXNzZWRWYWx1ZSkubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcbiAgICAgIHByb2Nlc3NlZFZhbHVlID0gU3RyaW5nKHByb2Nlc3NlZFZhbHVlKS5zbGljZSgwLCB0aGlzLm1heExlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSA9IHByb2Nlc3NlZFZhbHVlO1xuICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmFwcGx5Rm9ybWF0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgbGV0IGlucHV0VmFsdWUgPSB0YXJnZXQudmFsdWU7XG5cbiAgICAvLyBQYXJzZSB0aGUgdmFsdWUgZmlyc3QgKHJlbW92ZXMgZm9ybWF0dGluZyBsaWtlIGNvbW1hcylcbiAgICBsZXQgcmF3VmFsdWUgPSB0aGlzLnBhcnNlVmFsdWUoaW5wdXRWYWx1ZSk7XG5cbiAgICAvLyBGb3IgY3VycmVuY3kgZm9ybWF0LCBlbmZvcmNlIG1heExlbmd0aCBvbiB0aGUgcmF3IHZhbHVlICh3aXRob3V0IGNvbW1hcylcbiAgICBpZiAodGhpcy5mb3JtYXQgPT09ICdjdXJyZW5jeScgJiYgdGhpcy5tYXhMZW5ndGggJiYgU3RyaW5nKHJhd1ZhbHVlKS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgcmF3VmFsdWUgPSBTdHJpbmcocmF3VmFsdWUpLnNsaWNlKDAsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbnVtYmVyIGlucHV0cyBvciBudW1lcmljIGZvcm1hdCwgbWF4TGVuZ3RoIGRvZXNuJ3Qgd29yayBuYXRpdmVseSwgc28gd2UgaGFuZGxlIGl0IG1hbnVhbGx5XG4gICAgaWYgKCh0aGlzLnR5cGUgPT09ICdudW1iZXInIHx8IHRoaXMuZm9ybWF0ID09PSAnbnVtZXJpYycpICYmIHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSByYXcgdmFsdWUgKHdpdGhvdXQgZm9ybWF0dGluZylcbiAgICAgIGNvbnN0IHJhd1N0cmluZyA9IFN0cmluZyhyYXdWYWx1ZSk7XG4gICAgICBpZiAocmF3U3RyaW5nLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgIHJhd1ZhbHVlID0gcmF3U3RyaW5nLnNsaWNlKDAsIHRoaXMubWF4TGVuZ3RoKTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSB0byByZWZsZWN0IHRoZSB0cnVuY2F0aW9uXG4gICAgICAgIHRhcmdldC52YWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSByYXdWYWx1ZTtcbiAgICB0aGlzLmZvcm1hdHRlZFZhbHVlID0gdGhpcy5hcHBseUZvcm1hdChyYXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGlucHV0IGRpc3BsYXkgKGZvciBmb3JtYXR0ZWQgaW5wdXRzIGxpa2UgY3VycmVuY3kpXG4gICAgaWYgKHRoaXMuZm9ybWF0ID09PSAnY3VycmVuY3knKSB7XG4gICAgICB0YXJnZXQudmFsdWUgPSB0aGlzLmZvcm1hdHRlZFZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2UocmF3VmFsdWUpO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgc3dpdGNoICh0aGlzLmZvcm1hdCkge1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICAvLyBSZW1vdmUgYWxsIG5vbi1udW1lcmljIGNoYXJhY3RlcnMgZXhjZXB0IGRlY2ltYWwgcG9pbnRcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1teMC05Ll0vZywgJycpO1xuICAgICAgY2FzZSAnbnVtZXJpYyc6XG4gICAgICAgIC8vIFJlbW92ZSBhbGwgbm9uLW51bWVyaWMgY2hhcmFjdGVycyAob25seSBkaWdpdHMgYWxsb3dlZClcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7XG4gICAgICBjYXNlICdhbHBoYW51bWVyaWMnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb3JtYXQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkgcmV0dXJuICcnO1xuXG4gICAgc3dpdGNoICh0aGlzLmZvcm1hdCkge1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRDdXJyZW5jeSh2YWx1ZSk7XG4gICAgICBjYXNlICdhbHBoYW51bWVyaWMnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRDdXJyZW5jeSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoL1teMC05Ll0vZywgJycpKSA6IHZhbHVlO1xuXG4gICAgaWYgKGlzTmFOKG51bVZhbHVlKSkgcmV0dXJuICcnO1xuXG4gICAgLy8gRm9ybWF0IHdpdGggdGhvdXNhbmRzIHNlcGFyYXRvclxuICAgIHJldHVybiBudW1WYWx1ZS50b0xvY2FsZVN0cmluZygnZXMtTVgnLCB7XG4gICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDJcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,81 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { AssetSourceDirective } from '../../directives/asset-source.directive';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class LoaderComponent {
7
+ show = false;
8
+ message;
9
+ logo;
10
+ image;
11
+ imageAlt = 'Loading';
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoaderComponent, isStandalone: true, selector: "app-loader", inputs: { show: "show", message: "message", logo: "logo", image: "image", imageAlt: "imageAlt" }, ngImport: i0, template: `
14
+ <div class="svu-loader-overlay" *ngIf="show">
15
+ <div class="svu-loader-content">
16
+ <!-- Logo -->
17
+ <div class="svu-loader-logo" *ngIf="logo">
18
+ <img [src]="logo" assetSource="mf" alt="Logo">
19
+ </div>
20
+
21
+ <!-- Image/Icon -->
22
+ <div class="svu-loader-image" *ngIf="image">
23
+ <img [src]="image" assetSource="mf" [alt]="imageAlt">
24
+ </div>
25
+
26
+ <!-- Loading Dots Animation -->
27
+ <div class="svu-loader-dots">
28
+ <span class="svu-loader-dot"></span>
29
+ <span class="svu-loader-dot"></span>
30
+ <span class="svu-loader-dot"></span>
31
+ </div>
32
+
33
+ <!-- Message -->
34
+ <div class="svu-loader-message" *ngIf="message">
35
+ <span [innerHTML]="message"></span>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ `, isInline: true, styles: [".svu-loader-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#f8f9fc;display:flex;align-items:center;justify-content:center;z-index:99999;animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.svu-loader-content{display:flex;flex-direction:column;align-items:center;gap:2rem;min-height:500px;justify-content:center}.svu-loader-logo{margin-bottom:2rem}.svu-loader-logo img{height:60px;width:auto}.svu-loader-image{display:flex;align-items:center;justify-content:center;animation:float 3s ease-in-out infinite}.svu-loader-image img{max-width:300px;height:auto}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}.svu-loader-dots{display:flex;gap:12px;align-items:center;justify-content:center;padding:1rem 0;height:80px}.svu-loader-dot{width:20px;height:20px;border-radius:50%;background:#f59100;position:relative;transform-origin:center}.svu-loader-dot:nth-child(1){animation:bounce 1.4s ease-in-out infinite}.svu-loader-dot:nth-child(2){animation:bounce 1.4s ease-in-out infinite;animation-delay:.2s}.svu-loader-dot:nth-child(3){animation:bounce 1.4s ease-in-out infinite;animation-delay:.4s}@keyframes bounce{0%,80%,to{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}.svu-loader-message{font-family:DM Sans,sans-serif;color:#2e353a;text-align:center;font-weight:900;font-size:30px}.svu-loader-message ::ng-deep strong,.svu-loader-message ::ng-deep b{color:#f26d00;font-weight:900}@media (max-width: 768px){.svu-loader-logo img{height:48px}.svu-loader-image img{max-width:200px}.svu-loader-message{font-size:20px;padding:0 1rem}.svu-loader-dots{height:50px;gap:5px}.svu-loader-dot{width:12px;height:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: AssetSourceDirective, selector: "[assetSource]", inputs: ["assetSource", "assetPath"] }] });
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ selector: 'app-loader', standalone: true, imports: [CommonModule, AssetSourceDirective], template: `
44
+ <div class="svu-loader-overlay" *ngIf="show">
45
+ <div class="svu-loader-content">
46
+ <!-- Logo -->
47
+ <div class="svu-loader-logo" *ngIf="logo">
48
+ <img [src]="logo" assetSource="mf" alt="Logo">
49
+ </div>
50
+
51
+ <!-- Image/Icon -->
52
+ <div class="svu-loader-image" *ngIf="image">
53
+ <img [src]="image" assetSource="mf" [alt]="imageAlt">
54
+ </div>
55
+
56
+ <!-- Loading Dots Animation -->
57
+ <div class="svu-loader-dots">
58
+ <span class="svu-loader-dot"></span>
59
+ <span class="svu-loader-dot"></span>
60
+ <span class="svu-loader-dot"></span>
61
+ </div>
62
+
63
+ <!-- Message -->
64
+ <div class="svu-loader-message" *ngIf="message">
65
+ <span [innerHTML]="message"></span>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ `, styles: [".svu-loader-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#f8f9fc;display:flex;align-items:center;justify-content:center;z-index:99999;animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.svu-loader-content{display:flex;flex-direction:column;align-items:center;gap:2rem;min-height:500px;justify-content:center}.svu-loader-logo{margin-bottom:2rem}.svu-loader-logo img{height:60px;width:auto}.svu-loader-image{display:flex;align-items:center;justify-content:center;animation:float 3s ease-in-out infinite}.svu-loader-image img{max-width:300px;height:auto}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}.svu-loader-dots{display:flex;gap:12px;align-items:center;justify-content:center;padding:1rem 0;height:80px}.svu-loader-dot{width:20px;height:20px;border-radius:50%;background:#f59100;position:relative;transform-origin:center}.svu-loader-dot:nth-child(1){animation:bounce 1.4s ease-in-out infinite}.svu-loader-dot:nth-child(2){animation:bounce 1.4s ease-in-out infinite;animation-delay:.2s}.svu-loader-dot:nth-child(3){animation:bounce 1.4s ease-in-out infinite;animation-delay:.4s}@keyframes bounce{0%,80%,to{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}.svu-loader-message{font-family:DM Sans,sans-serif;color:#2e353a;text-align:center;font-weight:900;font-size:30px}.svu-loader-message ::ng-deep strong,.svu-loader-message ::ng-deep b{color:#f26d00;font-weight:900}@media (max-width: 768px){.svu-loader-logo img{height:48px}.svu-loader-image img{max-width:200px}.svu-loader-message{font-size:20px;padding:0 1rem}.svu-loader-dots{height:50px;gap:5px}.svu-loader-dot{width:12px;height:12px}}\n"] }]
70
+ }], propDecorators: { show: [{
71
+ type: Input
72
+ }], message: [{
73
+ type: Input
74
+ }], logo: [{
75
+ type: Input
76
+ }], image: [{
77
+ type: Input
78
+ }], imageAlt: [{
79
+ type: Input
80
+ }] } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXRvbXMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFtQy9FLE1BQU0sT0FBTyxlQUFlO0lBQ2pCLElBQUksR0FBWSxLQUFLLENBQUM7SUFDdEIsT0FBTyxDQUFVO0lBQ2pCLElBQUksQ0FBVTtJQUNkLEtBQUssQ0FBVTtJQUNmLFFBQVEsR0FBVyxTQUFTLENBQUM7d0dBTDNCLGVBQWU7NEZBQWYsZUFBZSx3S0E3QmhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCw0dURBM0JTLFlBQVksbUlBQUUsb0JBQW9COzs0RkE4QmpDLGVBQWU7a0JBakMzQixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsWUFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzhCQUlRLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFzc2V0U291cmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9hc3NldC1zb3VyY2UuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFzc2V0U291cmNlRGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic3Z1LWxvYWRlci1vdmVybGF5XCIgKm5nSWY9XCJzaG93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Z1LWxvYWRlci1jb250ZW50XCI+XG4gICAgICAgIDwhLS0gTG9nbyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN2dS1sb2FkZXItbG9nb1wiICpuZ0lmPVwibG9nb1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJsb2dvXCIgYXNzZXRTb3VyY2U9XCJtZlwiIGFsdD1cIkxvZ29cIj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJbWFnZS9JY29uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Z1LWxvYWRlci1pbWFnZVwiICpuZ0lmPVwiaW1hZ2VcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VcIiBhc3NldFNvdXJjZT1cIm1mXCIgW2FsdF09XCJpbWFnZUFsdFwiPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIExvYWRpbmcgRG90cyBBbmltYXRpb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdnUtbG9hZGVyLWRvdHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2dS1sb2FkZXItZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Z1LWxvYWRlci1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdnUtbG9hZGVyLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBNZXNzYWdlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Z1LWxvYWRlci1tZXNzYWdlXCIgKm5nSWY9XCJtZXNzYWdlXCI+XG4gICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtZXNzYWdlXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9sb2FkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMb2FkZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBzaG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvZ28/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGltYWdlPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbWFnZUFsdDogc3RyaW5nID0gJ0xvYWRpbmcnO1xufVxuIl19
@@ -0,0 +1,142 @@
1
+ import { Component, Input, forwardRef, Output, EventEmitter } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class RadioComponent {
7
+ cdr;
8
+ label = '';
9
+ id = '';
10
+ name = '';
11
+ radioValue = '';
12
+ disabled = false;
13
+ changed = new EventEmitter();
14
+ value = null;
15
+ onChange = () => { };
16
+ onTouched = () => { };
17
+ constructor(cdr) {
18
+ this.cdr = cdr;
19
+ }
20
+ get isSelected() {
21
+ return this.value === this.radioValue;
22
+ }
23
+ onContainerClick() {
24
+ if (this.disabled)
25
+ return;
26
+ this.value = this.radioValue;
27
+ this.onChange(this.value);
28
+ this.changed.emit(this.value);
29
+ this.cdr.markForCheck();
30
+ }
31
+ onRadioChange(event) {
32
+ event.stopPropagation();
33
+ const target = event.target;
34
+ if (target.checked) {
35
+ this.value = this.radioValue;
36
+ this.onChange(this.value);
37
+ this.changed.emit(this.value);
38
+ this.cdr.markForCheck();
39
+ }
40
+ }
41
+ writeValue(value) {
42
+ this.value = value;
43
+ this.cdr.markForCheck();
44
+ }
45
+ registerOnChange(fn) {
46
+ this.onChange = fn;
47
+ }
48
+ registerOnTouched(fn) {
49
+ this.onTouched = fn;
50
+ }
51
+ setDisabledState(isDisabled) {
52
+ this.disabled = isDisabled;
53
+ this.cdr.markForCheck();
54
+ }
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RadioComponent, isStandalone: true, selector: "app-radio", inputs: { label: "label", id: "id", name: "name", radioValue: "radioValue", disabled: "disabled" }, outputs: { changed: "changed" }, providers: [
57
+ {
58
+ provide: NG_VALUE_ACCESSOR,
59
+ useExisting: forwardRef(() => RadioComponent),
60
+ multi: true
61
+ }
62
+ ], ngImport: i0, template: `
63
+ <div
64
+ class="radio-wrapper"
65
+ [class.disabled]="disabled"
66
+ [class.radio-wrapper--selected]="isSelected"
67
+ (click)="onContainerClick()"
68
+ >
69
+ <div class="radio-container">
70
+ <input
71
+ type="radio"
72
+ [id]="id"
73
+ [name]="name"
74
+ [value]="radioValue"
75
+ [disabled]="disabled"
76
+ [checked]="isSelected"
77
+ (blur)="onTouched()"
78
+ (change)="onRadioChange($event)"
79
+ class="radio-input"
80
+ />
81
+ <span class="radio-custom" [class.checked]="isSelected">
82
+ <span class="radio-dot" *ngIf="isSelected"></span>
83
+ </span>
84
+ <span class="radio-text">
85
+ <ng-content></ng-content>
86
+ <span *ngIf="label">{{ label }}</span>
87
+ </span>
88
+ </div>
89
+ </div>
90
+ `, isInline: true, styles: [":host{display:block;outline:none!important}:host:focus,:host:focus-visible,:host:focus-within{outline:none!important;box-shadow:none!important}.radio-wrapper{cursor:pointer;outline:none!important;box-shadow:none!important}.radio-wrapper:focus,.radio-wrapper:focus-visible,.radio-wrapper:focus-within{outline:none!important;box-shadow:none!important}.radio-wrapper.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.radio-wrapper--selected .radio-custom{border-color:#f59100}.radio-container{display:flex;align-items:center;gap:12px;padding:0;background:transparent;border:none;outline:none!important;box-shadow:none!important}.radio-container:focus,.radio-container:focus-visible,.radio-container:focus-within{outline:none!important;box-shadow:none!important}.radio-container:hover .radio-custom:not(.checked){border-color:#f59100}.radio-input{position:absolute;opacity:0;pointer-events:none;width:0;height:0;margin:0;padding:0;border:none!important;outline:none!important;box-shadow:none!important}.radio-input:focus,.radio-input:focus-visible,.radio-input:checked{outline:none!important;box-shadow:none!important;border:none!important}.radio-custom{width:20px;height:20px;min-width:20px;border:2px solid #D5D7DA;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:border-color .2s ease;background:#fff;flex-shrink:0;outline:none!important;box-shadow:none!important}.radio-custom.checked{border-color:#f59100}.radio-custom .radio-dot{width:10px;height:10px;border-radius:50%;background:#f59100}.radio-text{font-family:Quicksand,sans-serif;font-size:16px;font-weight:500;line-height:24px;color:#585d61;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }] });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RadioComponent, decorators: [{
93
+ type: Component,
94
+ args: [{ selector: 'app-radio', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule], template: `
95
+ <div
96
+ class="radio-wrapper"
97
+ [class.disabled]="disabled"
98
+ [class.radio-wrapper--selected]="isSelected"
99
+ (click)="onContainerClick()"
100
+ >
101
+ <div class="radio-container">
102
+ <input
103
+ type="radio"
104
+ [id]="id"
105
+ [name]="name"
106
+ [value]="radioValue"
107
+ [disabled]="disabled"
108
+ [checked]="isSelected"
109
+ (blur)="onTouched()"
110
+ (change)="onRadioChange($event)"
111
+ class="radio-input"
112
+ />
113
+ <span class="radio-custom" [class.checked]="isSelected">
114
+ <span class="radio-dot" *ngIf="isSelected"></span>
115
+ </span>
116
+ <span class="radio-text">
117
+ <ng-content></ng-content>
118
+ <span *ngIf="label">{{ label }}</span>
119
+ </span>
120
+ </div>
121
+ </div>
122
+ `, providers: [
123
+ {
124
+ provide: NG_VALUE_ACCESSOR,
125
+ useExisting: forwardRef(() => RadioComponent),
126
+ multi: true
127
+ }
128
+ ], styles: [":host{display:block;outline:none!important}:host:focus,:host:focus-visible,:host:focus-within{outline:none!important;box-shadow:none!important}.radio-wrapper{cursor:pointer;outline:none!important;box-shadow:none!important}.radio-wrapper:focus,.radio-wrapper:focus-visible,.radio-wrapper:focus-within{outline:none!important;box-shadow:none!important}.radio-wrapper.disabled{opacity:.6;cursor:not-allowed;pointer-events:none}.radio-wrapper--selected .radio-custom{border-color:#f59100}.radio-container{display:flex;align-items:center;gap:12px;padding:0;background:transparent;border:none;outline:none!important;box-shadow:none!important}.radio-container:focus,.radio-container:focus-visible,.radio-container:focus-within{outline:none!important;box-shadow:none!important}.radio-container:hover .radio-custom:not(.checked){border-color:#f59100}.radio-input{position:absolute;opacity:0;pointer-events:none;width:0;height:0;margin:0;padding:0;border:none!important;outline:none!important;box-shadow:none!important}.radio-input:focus,.radio-input:focus-visible,.radio-input:checked{outline:none!important;box-shadow:none!important;border:none!important}.radio-custom{width:20px;height:20px;min-width:20px;border:2px solid #D5D7DA;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:border-color .2s ease;background:#fff;flex-shrink:0;outline:none!important;box-shadow:none!important}.radio-custom.checked{border-color:#f59100}.radio-custom .radio-dot{width:10px;height:10px;border-radius:50%;background:#f59100}.radio-text{font-family:Quicksand,sans-serif;font-size:16px;font-weight:500;line-height:24px;color:#585d61;-webkit-user-select:none;user-select:none}\n"] }]
129
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { label: [{
130
+ type: Input
131
+ }], id: [{
132
+ type: Input
133
+ }], name: [{
134
+ type: Input
135
+ }], radioValue: [{
136
+ type: Input
137
+ }], disabled: [{
138
+ type: Input
139
+ }], changed: [{
140
+ type: Output
141
+ }] } });
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdG9tcy9yYWRpby9yYWRpby5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUE0QzNHLE1BQU0sT0FBTyxjQUFjO0lBYUw7SUFaWCxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNSLElBQUksR0FBRyxFQUFFLENBQUM7SUFDVixVQUFVLEdBQVEsRUFBRSxDQUFDO0lBQ3JCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFaEIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFNUMsS0FBSyxHQUFRLElBQUksQ0FBQztJQUNsQixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBRyxDQUFDO0lBRTlDLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUUxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFZO1FBQ3hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUNoRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7d0dBdkRVLGNBQWM7NEZBQWQsY0FBYyw2TEFSZDtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUM3QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJBcENTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJULGd1REE3QlMsWUFBWSxrSUFBRSxtQkFBbUIsOEJBQUUsV0FBVzs7NEZBdUM3QyxjQUFjO2tCQTFDMUIsU0FBUzsrQkFDRSxXQUFXLGNBQ1QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxZQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCVCxhQUVVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQzs0QkFDN0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7c0ZBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmFkaW8nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyYWRpby13cmFwcGVyXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbY2xhc3MucmFkaW8td3JhcHBlci0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgICAoY2xpY2spPVwib25Db250YWluZXJDbGljaygpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICBbdmFsdWVdPVwicmFkaW9WYWx1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwicmFkaW8taW5wdXRcIlxuICAgICAgICAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWN1c3RvbVwiIFtjbGFzcy5jaGVja2VkXT1cImlzU2VsZWN0ZWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLWRvdFwiICpuZ0lmPVwiaXNTZWxlY3RlZFwiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJhZGlvLXRleHRcIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYWRpb0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBSYWRpb0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgbmFtZSA9ICcnO1xuICBASW5wdXQoKSByYWRpb1ZhbHVlOiBhbnkgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHZhbHVlOiBhbnkgPSBudWxsO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSB0aGlzLnJhZGlvVmFsdWU7XG4gIH1cblxuICBvbkNvbnRhaW5lckNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLnZhbHVlID0gdGhpcy5yYWRpb1ZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblJhZGlvQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICh0YXJnZXQuY2hlY2tlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmFkaW9WYWx1ZTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,126 @@
1
+ import { Component, Input, forwardRef, ChangeDetectionStrategy } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class TextareaComponent {
7
+ cdr;
8
+ label = '';
9
+ id = '';
10
+ placeholder = '';
11
+ rows = 4;
12
+ maxLength;
13
+ hasError = false;
14
+ errorMessage = '';
15
+ disabled = false;
16
+ readonly = false;
17
+ value = '';
18
+ onChange = () => { };
19
+ onTouched = () => { };
20
+ constructor(cdr) {
21
+ this.cdr = cdr;
22
+ }
23
+ writeValue(value) {
24
+ this.value = value || '';
25
+ this.cdr.markForCheck();
26
+ }
27
+ registerOnChange(fn) {
28
+ this.onChange = fn;
29
+ }
30
+ registerOnTouched(fn) {
31
+ this.onTouched = fn;
32
+ }
33
+ setDisabledState(isDisabled) {
34
+ this.disabled = isDisabled;
35
+ this.cdr.markForCheck();
36
+ }
37
+ onInputChange(event) {
38
+ const target = event.target;
39
+ this.value = target.value;
40
+ this.onChange(this.value);
41
+ }
42
+ onBlur() {
43
+ this.onTouched();
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextareaComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TextareaComponent, isStandalone: true, selector: "app-textarea", inputs: { label: "label", id: "id", placeholder: "placeholder", rows: "rows", maxLength: "maxLength", hasError: "hasError", errorMessage: "errorMessage", disabled: "disabled", readonly: "readonly" }, providers: [
47
+ {
48
+ provide: NG_VALUE_ACCESSOR,
49
+ useExisting: forwardRef(() => TextareaComponent),
50
+ multi: true
51
+ }
52
+ ], ngImport: i0, template: `
53
+ <div class="textarea-wrapper">
54
+ <label *ngIf="label" [for]="id" class="textarea-label">{{ label }}</label>
55
+ <div class="textarea-container" [class.error]="hasError">
56
+ <textarea
57
+ [id]="id"
58
+ [placeholder]="placeholder"
59
+ [rows]="rows"
60
+ [disabled]="disabled"
61
+ [readonly]="readonly"
62
+ [attr.maxlength]="maxLength"
63
+ class="textarea-field"
64
+ [class.error]="hasError"
65
+ [value]="value"
66
+ (blur)="onBlur()"
67
+ (input)="onInputChange($event)"
68
+ ></textarea>
69
+ </div>
70
+ <div *ngIf="hasError && errorMessage" class="field-error">
71
+ {{ errorMessage }}
72
+ </div>
73
+ </div>
74
+ `, isInline: true, styles: [".textarea-wrapper{width:100%;display:flex;flex-direction:column;gap:6px}.textarea-label{font-family:Quicksand,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#414651}.textarea-container{width:100%;&.error .textarea-field{border-color:#f04438}}.textarea-field{width:100%;padding:10px 14px;background:#fff;border:1px solid #D5D7DA;border-radius:8px;font-family:Quicksand,sans-serif;font-weight:400;font-size:16px;line-height:24px;color:#2e353a;resize:vertical;min-height:100px;transition:all .2s ease;box-sizing:border-box;&::placeholder{color:#a4a7ae}&:focus{outline:none;border-color:#f59100;box-shadow:0 0 0 4px #f591001a}&:disabled{background:#f9fafb;cursor:not-allowed}&.error{border-color:#f04438;&:focus{box-shadow:0 0 0 4px #f044381a}}}.field-error{color:#f04438;font-size:.875rem;font-family:Quicksand,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextareaComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'app-textarea', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
79
+ <div class="textarea-wrapper">
80
+ <label *ngIf="label" [for]="id" class="textarea-label">{{ label }}</label>
81
+ <div class="textarea-container" [class.error]="hasError">
82
+ <textarea
83
+ [id]="id"
84
+ [placeholder]="placeholder"
85
+ [rows]="rows"
86
+ [disabled]="disabled"
87
+ [readonly]="readonly"
88
+ [attr.maxlength]="maxLength"
89
+ class="textarea-field"
90
+ [class.error]="hasError"
91
+ [value]="value"
92
+ (blur)="onBlur()"
93
+ (input)="onInputChange($event)"
94
+ ></textarea>
95
+ </div>
96
+ <div *ngIf="hasError && errorMessage" class="field-error">
97
+ {{ errorMessage }}
98
+ </div>
99
+ </div>
100
+ `, providers: [
101
+ {
102
+ provide: NG_VALUE_ACCESSOR,
103
+ useExisting: forwardRef(() => TextareaComponent),
104
+ multi: true
105
+ }
106
+ ], styles: [".textarea-wrapper{width:100%;display:flex;flex-direction:column;gap:6px}.textarea-label{font-family:Quicksand,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#414651}.textarea-container{width:100%;&.error .textarea-field{border-color:#f04438}}.textarea-field{width:100%;padding:10px 14px;background:#fff;border:1px solid #D5D7DA;border-radius:8px;font-family:Quicksand,sans-serif;font-weight:400;font-size:16px;line-height:24px;color:#2e353a;resize:vertical;min-height:100px;transition:all .2s ease;box-sizing:border-box;&::placeholder{color:#a4a7ae}&:focus{outline:none;border-color:#f59100;box-shadow:0 0 0 4px #f591001a}&:disabled{background:#f9fafb;cursor:not-allowed}&.error{border-color:#f04438;&:focus{box-shadow:0 0 0 4px #f044381a}}}.field-error{color:#f04438;font-size:.875rem;font-family:Quicksand,sans-serif}\n"] }]
107
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { label: [{
108
+ type: Input
109
+ }], id: [{
110
+ type: Input
111
+ }], placeholder: [{
112
+ type: Input
113
+ }], rows: [{
114
+ type: Input
115
+ }], maxLength: [{
116
+ type: Input
117
+ }], hasError: [{
118
+ type: Input
119
+ }], errorMessage: [{
120
+ type: Input
121
+ }], disabled: [{
122
+ type: Input
123
+ }], readonly: [{
124
+ type: Input
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hdG9tcy90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQix1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBNEczRyxNQUFNLE9BQU8saUJBQWlCO0lBZVI7SUFkWCxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNSLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULFNBQVMsQ0FBVTtJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRTFCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBRyxDQUFDO0lBRTlDLFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBNkIsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQzt3R0EzQ1UsaUJBQWlCOzRGQUFqQixpQkFBaUIsbVFBUmpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQW5HUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCxnNUJBeEJTLFlBQVksa0lBQUUsbUJBQW1CLDhCQUFFLFdBQVc7OzRGQXVHN0MsaUJBQWlCO2tCQTFHN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxtQkFDeEMsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVCxhQXVFVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7c0ZBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGV4dGFyZWEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0YXJlYS13cmFwcGVyXCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIiBjbGFzcz1cInRleHRhcmVhLWxhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHRhcmVhLWNvbnRhaW5lclwiIFtjbGFzcy5lcnJvcl09XCJoYXNFcnJvclwiPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dGFyZWEtZmllbGRcIlxuICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJoYXNFcnJvclwiXG4gICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3IgJiYgZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJmaWVsZC1lcnJvclwiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnRleHRhcmVhLXdyYXBwZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNnB4O1xuICAgIH1cblxuICAgIC50ZXh0YXJlYS1sYWJlbCB7XG4gICAgICBmb250LWZhbWlseTogJ1F1aWNrc2FuZCcsIHNhbnMtc2VyaWY7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgICBjb2xvcjogIzQxNDY1MTtcbiAgICB9XG5cbiAgICAudGV4dGFyZWEtY29udGFpbmVyIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAmLmVycm9yIC50ZXh0YXJlYS1maWVsZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI0YwNDQzODtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAudGV4dGFyZWEtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI0Q1RDdEQTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGZvbnQtZmFtaWx5OiAnUXVpY2tzYW5kJywgc2Fucy1zZXJpZjtcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICAgIGNvbG9yOiAjMkUzNTNBO1xuICAgICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgY29sb3I6ICNBNEE3QUU7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBib3JkZXItY29sb3I6ICNGNTkxMDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDRweCByZ2JhKDI0NSwgMTQ1LCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Y5RkFGQjtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIH1cblxuICAgICAgJi5lcnJvciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI0YwNDQzODtcblxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCA0cHggcmdiYSgyNDAsIDY4LCA1NiwgMC4xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5maWVsZC1lcnJvciB7XG4gICAgICBjb2xvcjogI0YwNDQzODtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LWZhbWlseTogJ1F1aWNrc2FuZCcsIHNhbnMtc2VyaWY7XG4gICAgfVxuICBgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0YXJlYUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgcm93cyA9IDQ7XG4gIEBJbnB1dCgpIG1heExlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KCkgaGFzRXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgdmFsdWUgPSAnJztcbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0aGlzLnZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxufVxuIl19