@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.
- package/esm2022/lib/atoms/button/button.component.mjs +55 -0
- package/esm2022/lib/atoms/checkbox/checkbox.component.mjs +174 -0
- package/esm2022/lib/atoms/date-picker/date-picker.component.mjs +835 -0
- package/esm2022/lib/atoms/input/input.component.mjs +218 -0
- package/esm2022/lib/atoms/loader/loader.component.mjs +81 -0
- package/esm2022/lib/atoms/radio/radio.component.mjs +142 -0
- package/esm2022/lib/atoms/textarea/textarea.component.mjs +126 -0
- package/esm2022/lib/directives/asset-source.directive.mjs +68 -0
- package/esm2022/lib/directives/icon-source.directive.mjs +65 -0
- package/esm2022/lib/directives/no-leading-space.directive.mjs +24 -0
- package/esm2022/lib/directives/only-letters.directive.mjs +25 -0
- package/esm2022/lib/directives/only-number.directive.mjs +21 -0
- package/esm2022/lib/directives/rfc.directive.mjs +67 -0
- package/esm2022/lib/directives/tooltip.directive.mjs +199 -0
- package/esm2022/lib/models/snackbar.models.mjs +2 -0
- package/esm2022/lib/molecules/alert/alert.component.mjs +79 -0
- package/esm2022/lib/molecules/copy-input/copy-input.component.mjs +46 -0
- package/esm2022/lib/molecules/multiselect/multiselect.component.mjs +466 -0
- package/esm2022/lib/molecules/option/option.component.mjs +55 -0
- package/esm2022/lib/molecules/phone-input/phone-input.component.mjs +64 -0
- package/esm2022/lib/molecules/select/select.component.mjs +498 -0
- package/esm2022/lib/molecules/snackbar/snackbar.component.mjs +581 -0
- package/esm2022/lib/organisms/sidebar/sidebar-icon.component.mjs +91 -0
- package/esm2022/lib/organisms/sidebar/sidebar.component.mjs +115 -0
- package/esm2022/lib/services/snackbar.service.mjs +96 -0
- package/esm2022/lib/tokens/asset-base-url.token.mjs +10 -0
- package/esm2022/public-api.mjs +37 -0
- package/esm2022/up_si_vale-sivale-componentes-angular.mjs +5 -0
- package/fesm2022/up_si_vale-sivale-componentes-angular.mjs +4116 -0
- package/fesm2022/up_si_vale-sivale-componentes-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/atoms/button/button.component.d.ts +20 -0
- package/lib/atoms/checkbox/checkbox.component.d.ts +31 -0
- package/lib/atoms/date-picker/date-picker.component.d.ts +134 -0
- package/lib/atoms/input/input.component.d.ts +35 -0
- package/lib/atoms/loader/loader.component.d.ts +10 -0
- package/lib/atoms/radio/radio.component.d.ts +25 -0
- package/lib/atoms/textarea/textarea.component.d.ts +27 -0
- package/lib/directives/asset-source.directive.d.ts +19 -0
- package/lib/directives/icon-source.directive.d.ts +18 -0
- package/lib/directives/no-leading-space.directive.d.ts +6 -0
- package/lib/directives/only-letters.directive.d.ts +7 -0
- package/lib/directives/only-number.directive.d.ts +6 -0
- package/lib/directives/rfc.directive.d.ts +12 -0
- package/lib/directives/tooltip.directive.d.ts +27 -0
- package/{src/lib/models/snackbar.models.ts → lib/models/snackbar.models.d.ts} +8 -10
- package/lib/molecules/alert/alert.component.d.ts +29 -0
- package/lib/molecules/copy-input/copy-input.component.d.ts +14 -0
- package/lib/molecules/multiselect/multiselect.component.d.ts +74 -0
- package/lib/molecules/option/option.component.d.ts +19 -0
- package/lib/molecules/phone-input/phone-input.component.d.ts +12 -0
- package/lib/molecules/select/select.component.d.ts +88 -0
- package/lib/molecules/snackbar/snackbar.component.d.ts +17 -0
- package/lib/organisms/sidebar/sidebar-icon.component.d.ts +8 -0
- package/lib/organisms/sidebar/sidebar.component.d.ts +47 -0
- package/lib/services/snackbar.service.d.ts +40 -0
- package/{src/lib/tokens/asset-base-url.token.ts → lib/tokens/asset-base-url.token.d.ts} +1 -5
- package/package.json +39 -28
- package/{src/public-api.ts → public-api.d.ts} +3 -15
- package/ng-package.json +0 -9
- package/src/lib/atoms/button/button.component.html +0 -21
- package/src/lib/atoms/button/button.component.scss +0 -242
- package/src/lib/atoms/button/button.component.ts +0 -43
- package/src/lib/atoms/checkbox/checkbox.component.scss +0 -131
- package/src/lib/atoms/checkbox/checkbox.component.ts +0 -130
- package/src/lib/atoms/date-picker/date-picker.component.html +0 -295
- package/src/lib/atoms/date-picker/date-picker.component.scss +0 -1002
- package/src/lib/atoms/date-picker/date-picker.component.ts +0 -942
- package/src/lib/atoms/input/input.component.ts +0 -239
- package/src/lib/atoms/loader/loader.component.scss +0 -144
- package/src/lib/atoms/loader/loader.component.ts +0 -44
- package/src/lib/atoms/radio/radio.component.scss +0 -115
- package/src/lib/atoms/radio/radio.component.ts +0 -103
- package/src/lib/atoms/textarea/textarea.component.ts +0 -155
- package/src/lib/directives/asset-source.directive.ts +0 -64
- package/src/lib/directives/icon-source.directive.ts +0 -74
- package/src/lib/directives/no-leading-space.directive.ts +0 -18
- package/src/lib/directives/only-letters.directive.ts +0 -21
- package/src/lib/directives/only-number.directive.ts +0 -15
- package/src/lib/directives/rfc.directive.ts +0 -60
- package/src/lib/directives/tooltip.directive.ts +0 -211
- package/src/lib/molecules/copy-input/copy-input.component.html +0 -29
- package/src/lib/molecules/copy-input/copy-input.component.scss +0 -101
- package/src/lib/molecules/copy-input/copy-input.component.ts +0 -41
- package/src/lib/molecules/multiselect/multiselect.component.scss +0 -298
- package/src/lib/molecules/multiselect/multiselect.component.ts +0 -487
- package/src/lib/molecules/option/option.component.ts +0 -45
- package/src/lib/molecules/phone-input/phone-input.component.scss +0 -78
- package/src/lib/molecules/phone-input/phone-input.component.ts +0 -43
- package/src/lib/molecules/select/select.component.ts +0 -482
- package/src/lib/molecules/snackbar/snackbar.component.scss +0 -201
- package/src/lib/molecules/snackbar/snackbar.component.ts +0 -321
- package/src/lib/services/snackbar.service.ts +0 -103
- 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
|