@snabcentr/client-ui 3.9.4 → 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +267 -0
- package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +32 -0
- package/esm2022/feedback/index.mjs +3 -0
- package/esm2022/providers/index.mjs +2 -1
- package/esm2022/providers/sc-max-files-in-form-input.mjs +6 -0
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/samples/index.mjs +1 -2
- package/esm2022/samples/sc-sample.module.mjs +5 -6
- package/feedback/feedback-form/sc-feedback-form.component.d.ts +123 -0
- package/feedback/gratitude/sc-gratitude.component.d.ts +20 -0
- package/feedback/index.d.ts +2 -0
- package/fesm2022/snabcentr-client-ui.mjs +317 -140
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/providers/index.d.ts +1 -0
- package/providers/sc-max-files-in-form-input.d.ts +5 -0
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +3 -3
- package/samples/index.d.ts +0 -1
- package/samples/sc-sample.module.d.ts +10 -11
- package/styles/tailwind/tailwind.scss +26 -0
- package/esm2022/samples/ask-to-sample-form/sc-ask-to-sample-form.component.mjs +0 -117
- package/samples/ask-to-sample-form/sc-ask-to-sample-form.component.d.ts +0 -52
package/package.json
CHANGED
package/providers/index.d.ts
CHANGED
package/public-api.d.ts
CHANGED
package/release_notes.tmp
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
## 3.
|
1
|
+
## 3.10.0 (2025-01-29)
|
2
2
|
|
3
|
-
###
|
3
|
+
### added (1 change)
|
4
4
|
|
5
|
-
- [#
|
5
|
+
- [#10982: Добавлена единая форма обратной связи.](web_soft/libs/angular/snabcentr-client-ui-lib@0fe8f276b5f2af3b893e3fb9823cc026f6012d16) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!218))
|
6
6
|
|
package/samples/index.d.ts
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
import * as i0 from "@angular/core";
|
2
2
|
import * as i1 from "./preview-sample/sc-preview-sample.component";
|
3
|
-
import * as i2 from "
|
4
|
-
import * as i3 from "@angular/
|
5
|
-
import * as i4 from "@
|
6
|
-
import * as i5 from "@taiga-ui/
|
7
|
-
import * as i6 from "
|
8
|
-
import * as i7 from "
|
9
|
-
import * as i8 from "@taiga-ui/
|
10
|
-
import * as i9 from "@taiga-ui/cdk
|
11
|
-
import * as i10 from "
|
12
|
-
import * as i11 from "ng-recaptcha-2";
|
3
|
+
import * as i2 from "@angular/common";
|
4
|
+
import * as i3 from "@angular/forms";
|
5
|
+
import * as i4 from "@taiga-ui/core";
|
6
|
+
import * as i5 from "@taiga-ui/kit";
|
7
|
+
import * as i6 from "../form-fields/form-fields.module";
|
8
|
+
import * as i7 from "@taiga-ui/legacy";
|
9
|
+
import * as i8 from "@taiga-ui/cdk/directives/item";
|
10
|
+
import * as i9 from "@taiga-ui/cdk";
|
11
|
+
import * as i10 from "ng-recaptcha-2";
|
13
12
|
/**
|
14
13
|
* Модуль представления образцов товара.
|
15
14
|
*/
|
16
15
|
export declare class ScPreviewSampleModule {
|
17
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScPreviewSampleModule, never>;
|
18
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent
|
17
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ScPreviewSampleModule, [typeof i1.ScPreviewSampleComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.TuiError, typeof i5.TuiFieldErrorPipe, typeof i6.ScFormFieldsModule, typeof i7.TuiInputModule, typeof i7.TuiInputPhoneModule, typeof i8.TuiItem, typeof i5.TuiCarouselComponent, typeof i5.TuiCarouselDirective, typeof i5.TuiCarouselAutoscroll, typeof i5.TuiCarouselButtons, typeof i5.TuiCarouselScroll, typeof i5.TuiAvatar, typeof i9.TuiHovered, typeof i9.TuiLet, typeof i4.TuiButton, typeof i5.TuiButtonLoading, typeof i4.TuiLabel, typeof i10.RecaptchaFormsModule, typeof i10.RecaptchaModule], [typeof i1.ScPreviewSampleComponent]>;
|
19
18
|
static ɵinj: i0.ɵɵInjectorDeclaration<ScPreviewSampleModule>;
|
20
19
|
}
|
@@ -704,6 +704,11 @@ video {
|
|
704
704
|
margin: -0.5rem !important;
|
705
705
|
}
|
706
706
|
|
707
|
+
.mx-2 {
|
708
|
+
margin-left: 0.5rem;
|
709
|
+
margin-right: 0.5rem;
|
710
|
+
}
|
711
|
+
|
707
712
|
.my-2 {
|
708
713
|
margin-top: 0.5rem;
|
709
714
|
margin-bottom: 0.5rem;
|
@@ -801,6 +806,11 @@ video {
|
|
801
806
|
display: none;
|
802
807
|
}
|
803
808
|
|
809
|
+
.\!size-20 {
|
810
|
+
width: 5rem !important;
|
811
|
+
height: 5rem !important;
|
812
|
+
}
|
813
|
+
|
804
814
|
.size-20 {
|
805
815
|
width: 5rem;
|
806
816
|
height: 5rem;
|
@@ -1305,6 +1315,11 @@ video {
|
|
1305
1315
|
padding-right: 1.5rem;
|
1306
1316
|
}
|
1307
1317
|
|
1318
|
+
.py-14 {
|
1319
|
+
padding-top: 3.5rem;
|
1320
|
+
padding-bottom: 3.5rem;
|
1321
|
+
}
|
1322
|
+
|
1308
1323
|
.py-4\.5 {
|
1309
1324
|
padding-top: 1.125rem;
|
1310
1325
|
padding-bottom: 1.125rem;
|
@@ -1338,6 +1353,11 @@ video {
|
|
1338
1353
|
vertical-align: baseline;
|
1339
1354
|
}
|
1340
1355
|
|
1356
|
+
.\!text-5xl {
|
1357
|
+
font-size: 3rem !important;
|
1358
|
+
line-height: 1 !important;
|
1359
|
+
}
|
1360
|
+
|
1341
1361
|
.\!text-body-m-bold {
|
1342
1362
|
font-size: 0.9375rem !important;
|
1343
1363
|
line-height: 1.5rem !important;
|
@@ -1375,6 +1395,12 @@ video {
|
|
1375
1395
|
font-weight: 800;
|
1376
1396
|
}
|
1377
1397
|
|
1398
|
+
.text-body-m {
|
1399
|
+
font-size: 0.9375rem;
|
1400
|
+
line-height: 1.5rem;
|
1401
|
+
font-weight: 500;
|
1402
|
+
}
|
1403
|
+
|
1378
1404
|
.text-body-m-bold {
|
1379
1405
|
font-size: 0.9375rem;
|
1380
1406
|
line-height: 1.5rem;
|
@@ -1,117 +0,0 @@
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
2
|
-
import { FormControl, FormGroup, Validators } from '@angular/forms';
|
3
|
-
import { ScFeedbackService, ScISuggestionType, ScUserService } from '@snabcentr/client-core';
|
4
|
-
import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
|
5
|
-
import { catchError, filter, map, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "@angular/common";
|
8
|
-
import * as i2 from "@angular/forms";
|
9
|
-
import * as i3 from "@taiga-ui/core";
|
10
|
-
import * as i4 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
|
11
|
-
import * as i5 from "@taiga-ui/legacy";
|
12
|
-
import * as i6 from "@taiga-ui/cdk";
|
13
|
-
import * as i7 from "@taiga-ui/kit";
|
14
|
-
import * as i8 from "ng-recaptcha-2";
|
15
|
-
/**
|
16
|
-
* Компонент формы запроса бесплатного образца.
|
17
|
-
*/
|
18
|
-
export class ScAskToSampleFormComponent {
|
19
|
-
constructor() {
|
20
|
-
/**
|
21
|
-
* Сервис обратной связи.
|
22
|
-
*/
|
23
|
-
this.feedbackService = inject(ScFeedbackService);
|
24
|
-
/**
|
25
|
-
* Сервис данных о пользователе.
|
26
|
-
*/
|
27
|
-
this.user$ = inject(ScUserService)
|
28
|
-
.getUserChange$()
|
29
|
-
.pipe(tap((user) => {
|
30
|
-
if (user.isGuest) {
|
31
|
-
this.form.addControl('recaptcha', this.recaptchaControl);
|
32
|
-
this.form.controls.email.reset();
|
33
|
-
this.form.controls.name.reset();
|
34
|
-
this.form.controls.phone.reset();
|
35
|
-
}
|
36
|
-
else {
|
37
|
-
this.form.removeControl('recaptcha');
|
38
|
-
this.form.patchValue({
|
39
|
-
name: user.name,
|
40
|
-
phone: user.contacts.phone.value,
|
41
|
-
email: user.contacts.email.value,
|
42
|
-
});
|
43
|
-
}
|
44
|
-
}));
|
45
|
-
/**
|
46
|
-
* Контекст диалогового окна, в котором открыт компонент.
|
47
|
-
*/
|
48
|
-
this.context = inject(POLYMORPHEUS_CONTEXT, {
|
49
|
-
optional: true,
|
50
|
-
});
|
51
|
-
/**
|
52
|
-
* Поле ввода для recaptcha.
|
53
|
-
*/
|
54
|
-
this.recaptchaControl = new FormControl(null, Validators.required);
|
55
|
-
/**
|
56
|
-
* Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
|
57
|
-
*/
|
58
|
-
this.form = new FormGroup({
|
59
|
-
name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
|
60
|
-
phone: new FormControl(null, [Validators.required, Validators.minLength(12)]),
|
61
|
-
email: new FormControl(null, [Validators.required, Validators.email]),
|
62
|
-
recaptcha: new FormControl(null, Validators.required),
|
63
|
-
});
|
64
|
-
/**
|
65
|
-
* Перечисление типов подсказок.
|
66
|
-
*/
|
67
|
-
this.suggestionType = ScISuggestionType;
|
68
|
-
/**
|
69
|
-
* {@link Subject} события отправки формы.
|
70
|
-
*/
|
71
|
-
this.onSubmit = new Subject();
|
72
|
-
/**
|
73
|
-
* {@link Observable} запроса на отправку данных.
|
74
|
-
*/
|
75
|
-
this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.feedbackService.sendFeedback('samples', value).pipe(tap(() => {
|
76
|
-
if (this.context) {
|
77
|
-
this.context.completeWith();
|
78
|
-
}
|
79
|
-
else {
|
80
|
-
this.form.controls.email.reset();
|
81
|
-
this.form.controls.name.reset();
|
82
|
-
this.form.controls.phone.reset();
|
83
|
-
}
|
84
|
-
}),
|
85
|
-
// eslint-disable-next-line rxjs/no-implicit-any-catch
|
86
|
-
catchError((error) => {
|
87
|
-
this.form.markAllAsTouched();
|
88
|
-
const { errors, message } = error.error;
|
89
|
-
if (errors) {
|
90
|
-
Object.keys(errors).forEach((key) => {
|
91
|
-
const control = this.form.get(key);
|
92
|
-
if (control) {
|
93
|
-
// eslint-disable-next-line security/detect-object-injection
|
94
|
-
control.setErrors({ serverResponse: errors[key] });
|
95
|
-
}
|
96
|
-
});
|
97
|
-
}
|
98
|
-
else if (message) {
|
99
|
-
this.form.setErrors({ serverResponse: [message] });
|
100
|
-
}
|
101
|
-
return of(null);
|
102
|
-
}),
|
103
|
-
// eslint-disable-next-line unicorn/no-useless-undefined
|
104
|
-
startWith(undefined))), share());
|
105
|
-
/**
|
106
|
-
* {@link Observable} изменения состояния загрузки данных.
|
107
|
-
*/
|
108
|
-
this.loading$ = this.request$.pipe(map((value) => value === undefined));
|
109
|
-
}
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScAskToSampleFormComponent, selector: "sc-ask-to-sample-form", ngImport: i0, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >\u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\n >\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\"></re-captcha>\n </div>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n</form>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i4.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "component", type: i5.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i5.TuiInputDirective, selector: "tui-input" }, { kind: "component", type: i5.TuiInputPhoneComponent, selector: "tui-input-phone", inputs: ["phoneMaskAfterCountryCode", "allowText", "search", "countryCode"], outputs: ["searchChange"] }, { kind: "directive", type: i5.TuiInputPhoneDirective, selector: "tui-input-phone" }, { kind: "directive", type: i6.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "directive", type: i3.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i7.TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: i3.TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: i8.RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]" }, { kind: "component", type: i8.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
112
|
-
}
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScAskToSampleFormComponent, decorators: [{
|
114
|
-
type: Component,
|
115
|
-
args: [{ selector: 'sc-ask-to-sample-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *tuiLet=\"user$ | async\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <label tuiLabel\n >\u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0418\u0432\u0430\u043D\u043E\u0432 \u0418\u0432\u0430\u043D \u0418\u0432\u0430\u043D\u043E\u0432\u0438\u0447 </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label tuiLabel\n >\u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-input-phone formControlName=\"phone\"> \u0422\u0435\u043B\u0435\u0444\u043E\u043D </tui-input-phone>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <label\n tuiLabel\n class=\"w-full\"\n >\u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n ></sc-suggestion-field>\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n ></tui-error>\n </label>\n <div\n *ngIf=\"form.get('recaptcha')\"\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\"></re-captcha>\n </div>\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C\n </button>\n</form>\n" }]
|
116
|
-
}] });
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXNrLXRvLXNhbXBsZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL2Fzay10by1zYW1wbGUtZm9ybS9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NhbXBsZXMvYXNrLXRvLXNhbXBsZS1mb3JtL3NjLWFzay10by1zYW1wbGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQUkxRzs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFMdkM7UUFNSTs7V0FFRztRQUNjLG9CQUFlLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhGOztXQUVHO1FBQ2EsVUFBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFDeEMsY0FBYyxFQUFFO2FBQ2hCLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE9B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LENBQUM7S0FDM0c7K0dBOUdZLDBCQUEwQjttR0FBMUIsMEJBQTBCLDZEQ3BCdkMsaWxFQXdEQTs7NEZEcENhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBRWhCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kICovXG5cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NGZWVkYmFja1NlcnZpY2UsIFNjSUZlZWRiYWNrTWVzc2FnZSwgU2NJU3VnZ2VzdGlvblR5cGUsIFNjVXNlclNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vYXV0aCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGE0L7RgNC80Ysg0LfQsNC/0YDQvtGB0LAg0LHQtdGB0L/Qu9Cw0YLQvdC+0LPQviDQvtCx0YDQsNC30YbQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1hc2stdG8tc2FtcGxlLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1hc2stdG8tc2FtcGxlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Fza1RvU2FtcGxlRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZlZWRiYWNrU2VydmljZTogU2NGZWVkYmFja1NlcnZpY2UgPSBpbmplY3QoU2NGZWVkYmFja1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LDQvdC90YvRhSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXIkID0gaW5qZWN0KFNjVXNlclNlcnZpY2UpXG4gICAgICAgIC5nZXRVc2VyQ2hhbmdlJCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKCh1c2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNHdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbCgncmVjYXB0Y2hhJywgdGhpcy5yZWNhcHRjaGFDb250cm9sKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmVtYWlsLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5uYW1lLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHVzZXIuY29udGFjdHMucGhvbmUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogdXNlci5jb250YWN0cy5lbWFpbC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8VHVpRGlhbG9nQ29udGV4dD4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC00LvRjyByZWNhcHRjaGEuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlY2FwdGNoYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQstCy0L7QtNCwINC00LvRjyDRhNC+0YDQvNGLIMKr0J/QvtC20LXQu9Cw0L3QuNGPINC4INC/0YDQtdC00LvQvtC20LXQvdC40Y8g0L/QviDRg9C70YPRh9GI0LXQvdC40Y4g0YHQsNC50YLQsMK7LlxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyldKSxcbiAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTIpXSksXG4gICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSxcbiAgICAgICAgcmVjYXB0Y2hhOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC+0YLQv9GA0LDQstC60YMg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTx1bmRlZmluZWQgfCBudWxsPiA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRmVlZGJhY2tNZXNzYWdlKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZmVlZGJhY2tTZXJ2aWNlLnNlbmRGZWVkYmFjaygnc2FtcGxlcycsIHZhbHVlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5lbWFpbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5waG9uZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8taW1wbGljaXQtYW55LWNhdGNoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIG1lc3NhZ2UgfSA9IGVycm9yLmVycm9yIGFzIEFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yc1trZXldIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogW21lc3NhZ2VdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXVzZWxlc3MtdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCkpO1xufVxuIiwiPGZvcm1cbiAgICAqdHVpTGV0PVwidXNlciQgfCBhc3luY1wiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcbj5cbiAgICA8bGFiZWwgdHVpTGFiZWxcbiAgICAgICAgPtCk0JjQnlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj4g0JjQstCw0L3QvtCyINCY0LLQsNC9INCY0LLQsNC90L7QstC40YcgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgIDwvbGFiZWw+XG4gICAgPGxhYmVsIHR1aUxhYmVsXG4gICAgICAgID7QotC10LvQtdGE0L7QvVxuICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCI+INCi0LXQu9C10YTQvtC9IDwvdHVpLWlucHV0LXBob25lPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgPC9sYWJlbD5cbiAgICA8bGFiZWxcbiAgICAgICAgdHVpTGFiZWxcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICA+0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgIDxzYy1zdWdnZXN0aW9uLWZpZWxkXG4gICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgID48L3R1aS1lcnJvcj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgncmVjYXB0Y2hhJylcIlxuICAgICAgICBjbGFzcz1cIm1iLTMgbWF4LWgtMjAgb3ZlcmZsb3ctaGlkZGVuIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJyFtYXgtaC0wICEtbS0yJzogZm9ybS5nZXQoJ3JlY2FwdGNoYScpPy52YWxpZCB9XCJcbiAgICA+XG4gICAgICAgIDxyZS1jYXB0Y2hhIGZvcm1Db250cm9sTmFtZT1cInJlY2FwdGNoYVwiPjwvcmUtY2FwdGNoYT5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR1aUJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zYy5zZW5kXCJcbiAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgPlxuICAgICAgICDQntGB0YLQsNCy0LjRgtGMXG4gICAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
|
@@ -1,52 +0,0 @@
|
|
1
|
-
import { FormControl, FormGroup } from '@angular/forms';
|
2
|
-
import { ScISuggestionType } from '@snabcentr/client-core';
|
3
|
-
import { Observable, Subject } from 'rxjs';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
/**
|
6
|
-
* Компонент формы запроса бесплатного образца.
|
7
|
-
*/
|
8
|
-
export declare class ScAskToSampleFormComponent {
|
9
|
-
/**
|
10
|
-
* Сервис обратной связи.
|
11
|
-
*/
|
12
|
-
private readonly feedbackService;
|
13
|
-
/**
|
14
|
-
* Сервис данных о пользователе.
|
15
|
-
*/
|
16
|
-
readonly user$: Observable<import("@snabcentr/client-core").ScUser>;
|
17
|
-
/**
|
18
|
-
* Контекст диалогового окна, в котором открыт компонент.
|
19
|
-
*/
|
20
|
-
private readonly context;
|
21
|
-
/**
|
22
|
-
* Поле ввода для recaptcha.
|
23
|
-
*/
|
24
|
-
readonly recaptchaControl: FormControl<string | null>;
|
25
|
-
/**
|
26
|
-
* Группа полей ввода для формы «Пожелания и предложения по улучшению сайта».
|
27
|
-
*/
|
28
|
-
form: FormGroup<{
|
29
|
-
name: FormControl<string | null>;
|
30
|
-
phone: FormControl<string | null>;
|
31
|
-
email: FormControl<string | null>;
|
32
|
-
recaptcha: FormControl<null>;
|
33
|
-
}>;
|
34
|
-
/**
|
35
|
-
* Перечисление типов подсказок.
|
36
|
-
*/
|
37
|
-
readonly suggestionType: typeof ScISuggestionType;
|
38
|
-
/**
|
39
|
-
* {@link Subject} события отправки формы.
|
40
|
-
*/
|
41
|
-
readonly onSubmit: Subject<void>;
|
42
|
-
/**
|
43
|
-
* {@link Observable} запроса на отправку данных.
|
44
|
-
*/
|
45
|
-
readonly request$: Observable<undefined | null>;
|
46
|
-
/**
|
47
|
-
* {@link Observable} изменения состояния загрузки данных.
|
48
|
-
*/
|
49
|
-
readonly loading$: Observable<boolean>;
|
50
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ScAskToSampleFormComponent, never>;
|
51
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScAskToSampleFormComponent, "sc-ask-to-sample-form", never, {}, {}, never, never, false, never>;
|
52
|
-
}
|