@snabcentr/client-ui 4.16.8 → 4.16.10-profstroy

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/alerts/confirm-alert/sc-confirm-alert.component.d.ts +22 -0
  2. package/alerts/index.d.ts +1 -0
  3. package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +1 -1
  4. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
  5. package/catalog/input-quantity/sc-input-quantity.component.d.ts +17 -1
  6. package/esm2022/alerts/confirm-alert/sc-confirm-alert.component.mjs +29 -0
  7. package/esm2022/alerts/index.mjs +2 -0
  8. package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +4 -3
  9. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +5 -16
  10. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +24 -4
  11. package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +3 -3
  12. package/esm2022/helpers/sc-api-error-helper.mjs +25 -0
  13. package/esm2022/helpers/sc-file-helper.mjs +29 -0
  14. package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +83 -0
  15. package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +2 -0
  16. package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +73 -0
  17. package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +21 -0
  18. package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +31 -0
  19. package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +139 -0
  20. package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +32 -0
  21. package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +94 -0
  22. package/esm2022/order/draft/profstroy/index.mjs +8 -0
  23. package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +2 -0
  24. package/esm2022/order/draft/sc-draft.component.mjs +148 -14
  25. package/esm2022/order/draft/services/sc-draft-expiration-clock.service.mjs +42 -0
  26. package/esm2022/order/draft/services/sc-draft-list-updates.service.mjs +288 -0
  27. package/esm2022/order/index.mjs +6 -1
  28. package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +11 -3
  29. package/esm2022/order/order-form/sc-order-form.component.mjs +4 -2
  30. package/esm2022/order/order-item/sc-order-item.component.mjs +37 -5
  31. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +180 -47
  32. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
  33. package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +15 -3
  34. package/esm2022/pipes/sc-format-date.mjs +1 -1
  35. package/esm2022/providers/sc-date-formatter.mjs +1 -1
  36. package/esm2022/public-api.mjs +2 -1
  37. package/fesm2022/snabcentr-client-ui.mjs +1275 -124
  38. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  39. package/helpers/sc-api-error-helper.d.ts +18 -0
  40. package/helpers/sc-file-helper.d.ts +13 -0
  41. package/order/draft/helpers/sc-draft-list-helper.d.ts +51 -0
  42. package/order/draft/models/sc-i-draft-list-item.d.ts +14 -0
  43. package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +58 -0
  44. package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +12 -0
  45. package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +21 -0
  46. package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +65 -0
  47. package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +29 -0
  48. package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +33 -0
  49. package/order/draft/profstroy/index.d.ts +7 -0
  50. package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +17 -0
  51. package/order/draft/sc-draft.component.d.ts +73 -1
  52. package/order/draft/services/sc-draft-expiration-clock.service.d.ts +29 -0
  53. package/order/draft/services/sc-draft-list-updates.service.d.ts +158 -0
  54. package/order/index.d.ts +5 -0
  55. package/order/new-order-items/sc-new-order-items.component.d.ts +9 -1
  56. package/order/order-form/sc-order-form.component.d.ts +1 -0
  57. package/order/order-item/sc-order-item.component.d.ts +25 -1
  58. package/order/order-items-list/sc-order-items-list.component.d.ts +87 -9
  59. package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +13 -1
  60. package/package.json +2 -2
  61. package/pipes/sc-format-date.d.ts +1 -1
  62. package/providers/sc-date-formatter.d.ts +1 -1
  63. package/public-api.d.ts +1 -0
  64. package/release_notes.tmp +1 -1
  65. package/styles/tailwind/tailwind.scss +41 -0
@@ -0,0 +1,139 @@
1
+ /* eslint-disable @typescript-eslint/unbound-method */
2
+ import { AsyncPipe } from '@angular/common';
3
+ import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
4
+ import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
7
+ import { ScOrderDraftsService } from '@snabcentr/client-core';
8
+ import { TuiValidationError } from '@taiga-ui/cdk';
9
+ import { TuiButton, TuiError, TuiLabel, TuiNotification, TuiTextfield } from '@taiga-ui/core';
10
+ import { TUI_INPUT_FILE_TEXTS, TUI_INPUT_FILES_OPTIONS, TuiButtonLoading, tuiCreateFileFormatValidator, tuiCreateFileSizeValidator, TuiFieldErrorPipe, TuiFileRejectedPipe, TuiFiles, } from '@taiga-ui/kit';
11
+ import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
12
+ import { finalize, map, switchMap } from 'rxjs';
13
+ import { ScApiErrorHelper } from '../../../../helpers/sc-api-error-helper';
14
+ import { ScFileHelper } from '../../../../helpers/sc-file-helper';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@angular/forms";
17
+ import * as i2 from "@taiga-ui/kit";
18
+ import * as i3 from "@taiga-ui/core";
19
+ /**
20
+ * Компонент диалога создания черновика заказа из файла программы «Профстрой».
21
+ */
22
+ export class ScProfstroyDraftCreateDialogComponent {
23
+ constructor() {
24
+ /**
25
+ * Контекст диалогового окна, в котором открыт компонент.
26
+ */
27
+ this.context = inject(POLYMORPHEUS_CONTEXT);
28
+ /**
29
+ * Сервис для работы с черновиками заказов.
30
+ */
31
+ this.draftsService = inject(ScOrderDraftsService);
32
+ /**
33
+ * Ссылка для автоматического управления уничтожением зависимостей.
34
+ */
35
+ this.destroyRef = inject(DestroyRef);
36
+ /**
37
+ * Настройки поля выбора файлов, в том числе наибольший размер файла из настроек приложения.
38
+ */
39
+ this.inputFilesOptions = inject(TUI_INPUT_FILES_OPTIONS);
40
+ /**
41
+ * Допустимое расширение файла.
42
+ */
43
+ this.accept = '.xlsx';
44
+ /**
45
+ * Наибольшая длина названия заявки.
46
+ */
47
+ this.nameMaxLength = 255;
48
+ /**
49
+ * Форма создания черновика. Формат и размер файла проверяются на самом поле: после выбора файла поле выбора убирается вместе со своими проверками.
50
+ */
51
+ this.form = new FormGroup({
52
+ file: new FormControl(null, [Validators.required, tuiCreateFileFormatValidator(this.accept), tuiCreateFileSizeValidator(this.inputFilesOptions.maxFileSize)]),
53
+ name: new FormControl('', { nonNullable: true, validators: Validators.maxLength(this.nameMaxLength) }),
54
+ });
55
+ /**
56
+ * Признак выполнения запроса создания.
57
+ */
58
+ this.submitting = signal(false);
59
+ /**
60
+ * Признак попытки создать заявку. До неё незаполненное поле файла ошибкой не подсвечивается: поле теряет фокус уже при открытии окна выбора файла.
61
+ */
62
+ this.submitAttempted = signal(false);
63
+ }
64
+ /**
65
+ * Удаляет выбранный файл.
66
+ */
67
+ removeFile() {
68
+ this.form.controls.file.setValue(null);
69
+ }
70
+ /**
71
+ * Отправляет файл и создаёт черновик. Ошибки сервера с прошлой отправки не мешают отправить форму снова.
72
+ */
73
+ submit() {
74
+ this.submitAttempted.set(true);
75
+ Object.values(this.form.controls).forEach((control) => {
76
+ control.updateValueAndValidity();
77
+ });
78
+ this.form.markAllAsTouched();
79
+ const file = this.form.controls.file.value;
80
+ if (this.form.invalid || !file || this.submitting()) {
81
+ return;
82
+ }
83
+ this.submitting.set(true);
84
+ ScFileHelper.readAsUploadedFile$(file)
85
+ .pipe(switchMap((uploadedFile) => this.draftsService.createProfstroy$({ file: uploadedFile, name: this.form.controls.name.value.trim() || undefined })), finalize(() => {
86
+ this.submitting.set(false);
87
+ }), takeUntilDestroyed(this.destroyRef))
88
+ .subscribe({
89
+ next: (draft) => {
90
+ this.context.completeWith(draft);
91
+ },
92
+ error: (error) => {
93
+ this.applyError(error);
94
+ },
95
+ });
96
+ }
97
+ /**
98
+ * Показывает ошибку создания в форме: ошибки проверки данных у полей, ошибку чтения файла у поля файла, остальные ошибкой формы (401 обрабатывает авторизация).
99
+ * Диалог остаётся открытым.
100
+ *
101
+ * @param error Ошибка чтения файла или запроса.
102
+ */
103
+ applyError(error) {
104
+ if (!(error instanceof HttpErrorResponse)) {
105
+ this.form.controls.file.setErrors({ serverResponse: new TuiValidationError('Не удалось прочитать файл.') });
106
+ return;
107
+ }
108
+ if (error.status === HttpStatusCode.Unauthorized) {
109
+ return;
110
+ }
111
+ const { errors } = (error.error ?? {});
112
+ if (error.status !== HttpStatusCode.UnprocessableEntity || !errors) {
113
+ this.form.setErrors({ serverResponse: new TuiValidationError(ScApiErrorHelper.getMessage(error, 'Не удалось создать заявку.')) });
114
+ return;
115
+ }
116
+ Object.entries(errors).forEach(([key, messages]) => {
117
+ const control = key === 'name' ? this.form.controls.name : this.form.controls.file;
118
+ control.setErrors({ serverResponse: new TuiValidationError(messages.join(' ')) });
119
+ control.markAsTouched();
120
+ });
121
+ }
122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyDraftCreateDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
123
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScProfstroyDraftCreateDialogComponent, isStandalone: true, selector: "sc-profstroy-draft-create-dialog", providers: [
124
+ {
125
+ provide: TUI_INPUT_FILE_TEXTS,
126
+ useFactory: () => inject(TUI_INPUT_FILE_TEXTS, { skipSelf: true }).pipe(map((texts) => ({ ...texts, formatRejectionReason: 'Файл должен быть в формате .xlsx' }))),
127
+ },
128
+ ], ngImport: i0, template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col gap-5\"\n (ngSubmit)=\"submit()\"\n>\n <!-- \u0424\u0430\u0439\u043B. \u041F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043E\u043A\u0430 \u0444\u0430\u0439\u043B\u0430, \u043F\u043E\u0434 \u043F\u043E\u043B\u0435\u043C \u043E\u043D\u0430 \u043D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u0442\u0441\u044F. \u041D\u0435\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u043E\u0435 \u043F\u043E\u043B\u0435 \u043F\u043E\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443. -->\n <div class=\"flex flex-col gap-1\">\n @let file = form.controls.file.value;\n @let rejected = file | tuiFileRejected: { accept } | async;\n @if (!file) {\n <label tuiInputFiles>\n <input\n tuiInputFiles\n formControlName=\"file\"\n [accept]=\"accept\"\n [invalid]=\"submitAttempted() ? null : false\"\n />\n </label>\n }\n <tui-files>\n @if (file) {\n <tui-file\n [state]=\"rejected ? 'error' : 'normal'\"\n [file]=\"rejected ?? file\"\n (remove)=\"removeFile()\"\n />\n }\n </tui-files>\n <span class=\"text-body-s text-tui-text-02\">\u0424\u0430\u0439\u043B Excel, \u0432\u044B\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0439 \u0438\u0437 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u00AB\u041F\u0440\u043E\u0444\u0441\u0442\u0440\u043E\u0439\u00BB: {{ accept }}</span>\n @if (!rejected) {\n @let fileErrorVisible = submitAttempted() || !form.controls.file.hasError('required');\n <tui-error\n formControlName=\"file\"\n [error]=\"fileErrorVisible ? (['required', 'serverResponse'] | tuiFieldError | async) : null\"\n />\n }\n </div>\n\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0438. -->\n <label tuiLabel>\n \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiTextfield\n formControlName=\"name\"\n placeholder=\"\u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: \u0411\u0430\u043B\u043A\u043E\u043D\u044B, \u043E\u0431\u044A\u0435\u043A\u0442 \u043D\u0430 \u041B\u0435\u043D\u0438\u043D\u0430\"\n autocomplete=\"off\"\n [maxLength]=\"nameMaxLength\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (form.errors?.['serverResponse']) {\n <tui-error [error]=\"[] | tuiFieldError | async\" />\n }\n\n <tui-notification\n appearance=\"info\"\n size=\"m\"\n >\n \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0444\u0430\u0439\u043B\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u0444\u043E\u043D\u0435: \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0438 \u0446\u0435\u043D\u044B \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0432 \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\u0435 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.\n </tui-notification>\n\n <div class=\"flex flex-wrap gap-2\">\n <button\n tuiButton\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n [loading]=\"submitting()\"\n >\n \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443\n </button>\n <button\n tuiButton\n type=\"button\"\n appearance=\"secondary\"\n [disabled]=\"submitting()\"\n (click)=\"context.$implicit.complete()\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i2.TuiInputFiles, selector: "label[tuiInputFiles]" }, { kind: "component", type: i2.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "pipe", type: i2.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "directive", type: i2.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "component", type: i3.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i3.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: TuiNotification, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["appearance", "icon", "size"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyDraftCreateDialogComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ standalone: true, selector: 'sc-profstroy-draft-create-dialog', imports: [ReactiveFormsModule, TuiFiles, TuiFileRejectedPipe, TuiLabel, TuiError, TuiFieldErrorPipe, TuiTextfield, TuiNotification, TuiButton, TuiButtonLoading, AsyncPipe], providers: [
133
+ {
134
+ provide: TUI_INPUT_FILE_TEXTS,
135
+ useFactory: () => inject(TUI_INPUT_FILE_TEXTS, { skipSelf: true }).pipe(map((texts) => ({ ...texts, formatRejectionReason: 'Файл должен быть в формате .xlsx' }))),
136
+ },
137
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col gap-5\"\n (ngSubmit)=\"submit()\"\n>\n <!-- \u0424\u0430\u0439\u043B. \u041F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043E\u043A\u0430 \u0444\u0430\u0439\u043B\u0430, \u043F\u043E\u0434 \u043F\u043E\u043B\u0435\u043C \u043E\u043D\u0430 \u043D\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u0442\u0441\u044F. \u041D\u0435\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u043E\u0435 \u043F\u043E\u043B\u0435 \u043F\u043E\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443. -->\n <div class=\"flex flex-col gap-1\">\n @let file = form.controls.file.value;\n @let rejected = file | tuiFileRejected: { accept } | async;\n @if (!file) {\n <label tuiInputFiles>\n <input\n tuiInputFiles\n formControlName=\"file\"\n [accept]=\"accept\"\n [invalid]=\"submitAttempted() ? null : false\"\n />\n </label>\n }\n <tui-files>\n @if (file) {\n <tui-file\n [state]=\"rejected ? 'error' : 'normal'\"\n [file]=\"rejected ?? file\"\n (remove)=\"removeFile()\"\n />\n }\n </tui-files>\n <span class=\"text-body-s text-tui-text-02\">\u0424\u0430\u0439\u043B Excel, \u0432\u044B\u0433\u0440\u0443\u0436\u0435\u043D\u043D\u044B\u0439 \u0438\u0437 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u00AB\u041F\u0440\u043E\u0444\u0441\u0442\u0440\u043E\u0439\u00BB: {{ accept }}</span>\n @if (!rejected) {\n @let fileErrorVisible = submitAttempted() || !form.controls.file.hasError('required');\n <tui-error\n formControlName=\"file\"\n [error]=\"fileErrorVisible ? (['required', 'serverResponse'] | tuiFieldError | async) : null\"\n />\n }\n </div>\n\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0438. -->\n <label tuiLabel>\n \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0437\u0430\u044F\u0432\u043A\u0438\n <tui-textfield>\n <input\n tuiTextfield\n formControlName=\"name\"\n placeholder=\"\u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: \u0411\u0430\u043B\u043A\u043E\u043D\u044B, \u043E\u0431\u044A\u0435\u043A\u0442 \u043D\u0430 \u041B\u0435\u043D\u0438\u043D\u0430\"\n autocomplete=\"off\"\n [maxLength]=\"nameMaxLength\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n @if (form.errors?.['serverResponse']) {\n <tui-error [error]=\"[] | tuiFieldError | async\" />\n }\n\n <tui-notification\n appearance=\"info\"\n size=\"m\"\n >\n \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0444\u0430\u0439\u043B\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0432 \u0444\u043E\u043D\u0435: \u043F\u043E\u0437\u0438\u0446\u0438\u0438 \u0438 \u0446\u0435\u043D\u044B \u043F\u043E\u044F\u0432\u044F\u0442\u0441\u044F \u0432 \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A\u0435 \u0447\u0435\u0440\u0435\u0437 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0432\u0440\u0435\u043C\u044F.\n </tui-notification>\n\n <div class=\"flex flex-wrap gap-2\">\n <button\n tuiButton\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n [loading]=\"submitting()\"\n >\n \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0437\u0430\u044F\u0432\u043A\u0443\n </button>\n <button\n tuiButton\n type=\"button\"\n appearance=\"secondary\"\n [disabled]=\"submitting()\"\n (click)=\"context.$implicit.complete()\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n </div>\n</form>\n" }]
138
+ }] });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWRyYWZ0LWNyZWF0ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL2RyYWZ0L3Byb2ZzdHJveS9jcmVhdGUtZGlhbG9nL3NjLXByb2ZzdHJveS1kcmFmdC1jcmVhdGUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvY3JlYXRlLWRpYWxvZy9zYy1wcm9mc3Ryb3ktZHJhZnQtY3JlYXRlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFFdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBcUMsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBb0IsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUNILG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsZ0JB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aUIsMFNBQWdCLGVBQWUsZ0pBQUUsU0FBUyxvSUFBRSxnQkFBZ0Isa0hBQUUsU0FBUzs7NEZBU2pLLHFDQUFxQztrQkFiakQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0NBQWtDLFdBRW5DLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLGFBQ2hLO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ3JLO3FCQUNKLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNjSUFwaUVycm9yUmVzcG9uc2UsIFNjT3JkZXJEcmFmdCwgU2NPcmRlckRyYWZ0c1NlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aVZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlEaWFsb2dDb250ZXh0LCBUdWlFcnJvciwgVHVpTGFiZWwsIFR1aU5vdGlmaWNhdGlvbiwgVHVpVGV4dGZpZWxkIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBUVUlfSU5QVVRfRklMRV9URVhUUyxcbiAgICBUVUlfSU5QVVRfRklMRVNfT1BUSU9OUyxcbiAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgIHR1aUNyZWF0ZUZpbGVGb3JtYXRWYWxpZGF0b3IsXG4gICAgdHVpQ3JlYXRlRmlsZVNpemVWYWxpZGF0b3IsXG4gICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgVHVpRmlsZVJlamVjdGVkUGlwZSxcbiAgICBUdWlGaWxlcyxcbn0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjQXBpRXJyb3JIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9oZWxwZXJzL3NjLWFwaS1lcnJvci1oZWxwZXInO1xuaW1wb3J0IHsgU2NGaWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycy9zYy1maWxlLWhlbHBlcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC00LjQsNC70L7Qs9CwINGB0L7Qt9C00LDQvdC40Y8g0YfQtdGA0L3QvtCy0LjQutCwINC30LDQutCw0LfQsCDQuNC3INGE0LDQudC70LAg0L/RgNC+0LPRgNCw0LzQvNGLIMKr0J/RgNC+0YTRgdGC0YDQvtC5wrsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1wcm9mc3Ryb3ktZHJhZnQtY3JlYXRlLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXByb2ZzdHJveS1kcmFmdC1jcmVhdGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgVHVpRmlsZXMsIFR1aUZpbGVSZWplY3RlZFBpcGUsIFR1aUxhYmVsLCBUdWlFcnJvciwgVHVpRmllbGRFcnJvclBpcGUsIFR1aVRleHRmaWVsZCwgVHVpTm90aWZpY2F0aW9uLCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmcsIEFzeW5jUGlwZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRVSV9JTlBVVF9GSUxFX1RFWFRTLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gaW5qZWN0KFRVSV9JTlBVVF9GSUxFX1RFWFRTLCB7IHNraXBTZWxmOiB0cnVlIH0pLnBpcGUobWFwKCh0ZXh0cykgPT4gKHsgLi4udGV4dHMsIGZvcm1hdFJlamVjdGlvblJlYXNvbjogJ9Ck0LDQudC7INC00L7Qu9C20LXQvSDQsdGL0YLRjCDQsiDRhNC+0YDQvNCw0YLQtSAueGxzeCcgfSkpKSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1Byb2ZzdHJveURyYWZ0Q3JlYXRlRGlhbG9nQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0L3RgtC10LrRgdGCINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAsINCyINC60L7RgtC+0YDQvtC8INC+0YLQutGA0YvRgiDQutC+0LzQv9C+0L3QtdC90YIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQgPSBpbmplY3Q8VHVpRGlhbG9nQ29udGV4dDxTY09yZGVyRHJhZnQgfCB1bmRlZmluZWQ+PihQT0xZTU9SUEhFVVNfQ09OVEVYVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDRh9C10YDQvdC+0LLQuNC60LDQvNC4INC30LDQutCw0LfQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRzU2VydmljZSA9IGluamVjdChTY09yZGVyRHJhZnRzU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQv9C+0LvRjyDQstGL0LHQvtGA0LAg0YTQsNC50LvQvtCyLCDQsiDRgtC+0Lwg0YfQuNGB0LvQtSDQvdCw0LjQsdC+0LvRjNGI0LjQuSDRgNCw0LfQvNC10YAg0YTQsNC50LvQsCDQuNC3INC90LDRgdGC0YDQvtC10Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dEZpbGVzT3B0aW9ucyA9IGluamVjdChUVUlfSU5QVVRfRklMRVNfT1BUSU9OUyk7XG5cbiAgICAvKipcbiAgICAgKiDQlNC+0L/Rg9GB0YLQuNC80L7QtSDRgNCw0YHRiNC40YDQtdC90LjQtSDRhNCw0LnQu9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhY2NlcHQgPSAnLnhsc3gnO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNC40LHQvtC70YzRiNCw0Y8g0LTQu9C40L3QsCDQvdCw0LfQstCw0L3QuNGPINC30LDRj9Cy0LrQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmFtZU1heExlbmd0aCA9IDI1NTtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LAg0YHQvtC30LTQsNC90LjRjyDRh9C10YDQvdC+0LLQuNC60LAuINCk0L7RgNC80LDRgiDQuCDRgNCw0LfQvNC10YAg0YTQsNC50LvQsCDQv9GA0L7QstC10YDRj9GO0YLRgdGPINC90LAg0YHQsNC80L7QvCDQv9C+0LvQtTog0L/QvtGB0LvQtSDQstGL0LHQvtGA0LAg0YTQsNC50LvQsCDQv9C+0LvQtSDQstGL0LHQvtGA0LAg0YPQsdC40YDQsNC10YLRgdGPINCy0LzQtdGB0YLQtSDRgdC+INGB0LLQvtC40LzQuCDQv9GA0L7QstC10YDQutCw0LzQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBmaWxlOiBuZXcgRm9ybUNvbnRyb2w8RmlsZSB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0dWlDcmVhdGVGaWxlRm9ybWF0VmFsaWRhdG9yKHRoaXMuYWNjZXB0KSwgdHVpQ3JlYXRlRmlsZVNpemVWYWxpZGF0b3IodGhpcy5pbnB1dEZpbGVzT3B0aW9ucy5tYXhGaWxlU2l6ZSldKSxcbiAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHsgbm9uTnVsbGFibGU6IHRydWUsIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubmFtZU1heExlbmd0aCkgfSksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQstGL0L/QvtC70L3QtdC90LjRjyDQt9Cw0L/RgNC+0YHQsCDRgdC+0LfQtNCw0L3QuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INC/0L7Qv9GL0YLQutC4INGB0L7Qt9C00LDRgtGMINC30LDRj9Cy0LrRgy4g0JTQviDQvdC10ZEg0L3QtdC30LDQv9C+0LvQvdC10L3QvdC+0LUg0L/QvtC70LUg0YTQsNC50LvQsCDQvtGI0LjQsdC60L7QuSDQvdC1INC/0L7QtNGB0LLQtdGH0LjQstCw0LXRgtGB0Y86INC/0L7Qu9C1INGC0LXRgNGP0LXRgiDRhNC+0LrRg9GBINGD0LbQtSDQv9GA0Lgg0L7RgtC60YDRi9GC0LjQuCDQvtC60L3QsCDQstGL0LHQvtGA0LAg0YTQsNC50LvQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3VibWl0QXR0ZW1wdGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINCy0YvQsdGA0LDQvdC90YvQuSDRhNCw0LnQuy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlRmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGUuc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC/0YDQsNCy0LvRj9C10YIg0YTQsNC50Lsg0Lgg0YHQvtC30LTQsNGR0YIg0YfQtdGA0L3QvtCy0LjQui4g0J7RiNC40LHQutC4INGB0LXRgNCy0LXRgNCwINGBINC/0YDQvtGI0LvQvtC5INC+0YLQv9GA0LDQstC60Lgg0L3QtSDQvNC10YjQsNGO0YIg0L7RgtC/0YDQsNCy0LjRgtGMINGE0L7RgNC80YMg0YHQvdC+0LLQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3VibWl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1Ym1pdEF0dGVtcHRlZC5zZXQodHJ1ZSk7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZm9ybS5jb250cm9scy5maWxlLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCAhZmlsZSB8fCB0aGlzLnN1Ym1pdHRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdWJtaXR0aW5nLnNldCh0cnVlKTtcblxuICAgICAgICBTY0ZpbGVIZWxwZXIucmVhZEFzVXBsb2FkZWRGaWxlJChmaWxlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh1cGxvYWRlZEZpbGUpID0+IHRoaXMuZHJhZnRzU2VydmljZS5jcmVhdGVQcm9mc3Ryb3kkKHsgZmlsZTogdXBsb2FkZWRGaWxlLCBuYW1lOiB0aGlzLmZvcm0uY29udHJvbHMubmFtZS52YWx1ZS50cmltKCkgfHwgdW5kZWZpbmVkIH0pKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZHJhZnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNvbXBsZXRlV2l0aChkcmFmdCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0L7QutCw0LfRi9Cy0LDQtdGCINC+0YjQuNCx0LrRgyDRgdC+0LfQtNCw0L3QuNGPINCyINGE0L7RgNC80LU6INC+0YjQuNCx0LrQuCDQv9GA0L7QstC10YDQutC4INC00LDQvdC90YvRhSDRgyDQv9C+0LvQtdC5LCDQvtGI0LjQsdC60YMg0YfRgtC10L3QuNGPINGE0LDQudC70LAg0YMg0L/QvtC70Y8g0YTQsNC50LvQsCwg0L7RgdGC0LDQu9GM0L3Ri9C1INC+0YjQuNCx0LrQvtC5INGE0L7RgNC80YsgKDQwMSDQvtCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0LDQstGC0L7RgNC40LfQsNGG0LjRjykuXG4gICAgICog0JTQuNCw0LvQvtCzINC+0YHRgtCw0ZHRgtGB0Y8g0L7RgtC60YDRi9GC0YvQvC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlcnJvciDQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPINGE0LDQudC70LAg0LjQu9C4INC30LDQv9GA0L7RgdCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGUuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINGE0LDQudC7LicpIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKGVycm9yLnN0YXR1cyBhcyBIdHRwU3RhdHVzQ29kZSkgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBlcnJvcnMgfSA9IChlcnJvci5lcnJvciA/PyB7fSkgYXMgUGFydGlhbDxTY0lBcGlFcnJvclJlc3BvbnNlPjtcblxuICAgICAgICBpZiAoKGVycm9yLnN0YXR1cyBhcyBIdHRwU3RhdHVzQ29kZSkgIT09IEh0dHBTdGF0dXNDb2RlLlVucHJvY2Vzc2FibGVFbnRpdHkgfHwgIWVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBuZXcgVHVpVmFsaWRhdGlvbkVycm9yKFNjQXBpRXJyb3JIZWxwZXIuZ2V0TWVzc2FnZShlcnJvciwgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LfQsNGP0LLQutGDLicpKSB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5mb3JFYWNoKChba2V5LCBtZXNzYWdlc10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBrZXkgPT09ICduYW1lJyA/IHRoaXMuZm9ybS5jb250cm9scy5uYW1lIDogdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGU7XG5cbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IobWVzc2FnZXMuam9pbignICcpKSB9KTtcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCJcbiAgICAobmdTdWJtaXQpPVwic3VibWl0KClcIlxuPlxuICAgIDwhLS0g0KTQsNC50LsuINCf0YDQuNGH0LjQvdGDINC+0YLQutC70L7QvdC10L3QuNGPINGE0LDQudC70LAg0L/QvtC60LDQt9GL0LLQsNC10YIg0YHRgtGA0L7QutCwINGE0LDQudC70LAsINC/0L7QtCDQv9C+0LvQtdC8INC+0L3QsCDQvdC1INC/0L7QstGC0L7RgNGP0LXRgtGB0Y8uINCd0LXQt9Cw0L/QvtC70L3QtdC90L3QvtC1INC/0L7Qu9C1INC/0L7QtNGB0LLQtdGH0LjQstCw0LXRgtGB0Y8g0YLQvtC70YzQutC+INC/0L7RgdC70LUg0L/QvtC/0YvRgtC60Lgg0YHQvtC30LTQsNGC0Ywg0LfQsNGP0LLQutGDLiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICBAbGV0IGZpbGUgPSBmb3JtLmNvbnRyb2xzLmZpbGUudmFsdWU7XG4gICAgICAgIEBsZXQgcmVqZWN0ZWQgPSBmaWxlIHwgdHVpRmlsZVJlamVjdGVkOiB7IGFjY2VwdCB9IHwgYXN5bmM7XG4gICAgICAgIEBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIDxsYWJlbCB0dWlJbnB1dEZpbGVzPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlJbnB1dEZpbGVzXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cInN1Ym1pdEF0dGVtcHRlZCgpID8gbnVsbCA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICA8dHVpLWZpbGVzPlxuICAgICAgICAgICAgQGlmIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJyZWplY3RlZCA/ICdlcnJvcicgOiAnbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtmaWxlXT1cInJlamVjdGVkID8/IGZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90dWktZmlsZXM+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXMgdGV4dC10dWktdGV4dC0wMlwiPtCk0LDQudC7IEV4Y2VsLCDQstGL0LPRgNGD0LbQtdC90L3Ri9C5INC40Lcg0L/RgNC+0LPRgNCw0LzQvNGLIMKr0J/RgNC+0YTRgdGC0YDQvtC5wrs6IHt7IGFjY2VwdCB9fTwvc3Bhbj5cbiAgICAgICAgQGlmICghcmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIEBsZXQgZmlsZUVycm9yVmlzaWJsZSA9IHN1Ym1pdEF0dGVtcHRlZCgpIHx8ICFmb3JtLmNvbnRyb2xzLmZpbGUuaGFzRXJyb3IoJ3JlcXVpcmVkJyk7XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cImZpbGVFcnJvclZpc2libGUgPyAoWydyZXF1aXJlZCcsICdzZXJ2ZXJSZXNwb25zZSddIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jKSA6IG51bGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDQndCw0LfQstCw0L3QuNC1INC30LDRj9Cy0LrQuC4gLS0+XG4gICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICDQndCw0LfQstCw0L3QuNC1INC30LDRj9Cy0LrQuFxuICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0J3QsNC/0YDQuNC80LXRgDog0JHQsNC70LrQvtC90YssINC+0LHRitC10LrRgiDQvdCwINCb0LXQvdC40L3QsFwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIm5hbWVNYXhMZW5ndGhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIEBpZiAoZm9ybS5lcnJvcnM/Llsnc2VydmVyUmVzcG9uc2UnXSkge1xuICAgICAgICA8dHVpLWVycm9yIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiIC8+XG4gICAgfVxuXG4gICAgPHR1aS1ub3RpZmljYXRpb25cbiAgICAgICAgYXBwZWFyYW5jZT1cImluZm9cIlxuICAgICAgICBzaXplPVwibVwiXG4gICAgPlxuICAgICAgICDQntCx0YDQsNCx0L7RgtC60LAg0YTQsNC50LvQsCDQstGL0L/QvtC70L3Rj9C10YLRgdGPINCyINGE0L7QvdC1OiDQv9C+0LfQuNGG0LjQuCDQuCDRhtC10L3RiyDQv9C+0Y/QstGP0YLRgdGPINCyINGH0LXRgNC90L7QstC40LrQtSDRh9C10YDQtdC3INC90LXQutC+0YLQvtGA0L7QtSDQstGA0LXQvNGPLlxuICAgIDwvdHVpLW5vdGlmaWNhdGlvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zYy5zZW5kXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cInN1Ym1pdHRpbmcoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCh0L7Qt9C00LDRgtGMINC30LDRj9Cy0LrRg1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmcoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCe0YLQvNC10L3QsFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Перечисление состояний черновика Профстрой для отображения пользователю.
3
+ */
4
+ // eslint-disable-next-line no-shadow
5
+ export var ScProfstroyDraftState;
6
+ (function (ScProfstroyDraftState) {
7
+ /**
8
+ * Выполняется обработка.
9
+ */
10
+ ScProfstroyDraftState["processing"] = "processing";
11
+ /**
12
+ * Актуализирован, срок действия не истёк.
13
+ */
14
+ ScProfstroyDraftState["actual"] = "actual";
15
+ /**
16
+ * Актуализирован, но срок действия истёк.
17
+ */
18
+ ScProfstroyDraftState["outdated"] = "outdated";
19
+ /**
20
+ * Обработка завершилась с ошибкой.
21
+ */
22
+ ScProfstroyDraftState["error"] = "error";
23
+ /**
24
+ * Требуется актуализация после изменения состава.
25
+ */
26
+ ScProfstroyDraftState["needsActualization"] = "needsActualization";
27
+ /**
28
+ * Состояние не известно.
29
+ */
30
+ ScProfstroyDraftState["unknown"] = "unknown";
31
+ })(ScProfstroyDraftState || (ScProfstroyDraftState = {}));
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWRyYWZ0LXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL2RyYWZ0L3Byb2ZzdHJveS9lbnVtcy9zYy1wcm9mc3Ryb3ktZHJhZnQtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxxQ0FBcUM7QUFDckMsTUFBTSxDQUFOLElBQVkscUJBOEJYO0FBOUJELFdBQVkscUJBQXFCO0lBQzdCOztPQUVHO0lBQ0gsa0RBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDhDQUFxQixDQUFBO0lBRXJCOztPQUVHO0lBQ0gsd0NBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsa0VBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtBQUN2QixDQUFDLEVBOUJXLHFCQUFxQixLQUFyQixxQkFBcUIsUUE4QmhDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YHQvtGB0YLQvtGP0L3QuNC5INGH0LXRgNC90L7QstC40LrQsCDQn9GA0L7RhNGB0YLRgNC+0Lkg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTY1Byb2ZzdHJveURyYWZ0U3RhdGUge1xuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L7QsdGA0LDQsdC+0YLQutCwLlxuICAgICAqL1xuICAgIHByb2Nlc3NpbmcgPSAncHJvY2Vzc2luZycsXG5cbiAgICAvKipcbiAgICAgKiDQkNC60YLRg9Cw0LvQuNC30LjRgNC+0LLQsNC9LCDRgdGA0L7QuiDQtNC10LnRgdGC0LLQuNGPINC90LUg0LjRgdGC0ZHQui5cbiAgICAgKi9cbiAgICBhY3R1YWwgPSAnYWN0dWFsJyxcblxuICAgIC8qKlxuICAgICAqINCQ0LrRgtGD0LDQu9C40LfQuNGA0L7QstCw0L0sINC90L4g0YHRgNC+0Log0LTQtdC50YHRgtCy0LjRjyDQuNGB0YLRkdC6LlxuICAgICAqL1xuICAgIG91dGRhdGVkID0gJ291dGRhdGVkJyxcblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0LrQsCDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGBINC+0YjQuNCx0LrQvtC5LlxuICAgICAqL1xuICAgIGVycm9yID0gJ2Vycm9yJyxcblxuICAgIC8qKlxuICAgICAqINCi0YDQtdCx0YPQtdGC0YHRjyDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Y8g0L/QvtGB0LvQtSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQsNCy0LAuXG4gICAgICovXG4gICAgbmVlZHNBY3R1YWxpemF0aW9uID0gJ25lZWRzQWN0dWFsaXphdGlvbicsXG5cbiAgICAvKipcbiAgICAgKiDQodC+0YHRgtC+0Y/QvdC40LUg0L3QtSDQuNC30LLQtdGB0YLQvdC+LlxuICAgICAqL1xuICAgIHVua25vd24gPSAndW5rbm93bicsXG59XG4iXX0=
@@ -0,0 +1,94 @@
1
+ import { ScOrderDraftActualizationStatus } from '@snabcentr/client-core';
2
+ import { ScProfstroyDraftState } from '../enums/sc-profstroy-draft-state';
3
+ /**
4
+ * Класс-помощник для отображения черновиков Профстрой.
5
+ */
6
+ export class ScProfstroyDraftHelper {
7
+ /**
8
+ * Данные об отображении состояний черновика.
9
+ */
10
+ static { this.stateViews = {
11
+ [ScProfstroyDraftState.processing]: {
12
+ label: 'Выполняется обработка',
13
+ appearance: 'info',
14
+ description: 'Файл обрабатывается, позиции и цены уточняются. Изменение состава и оформление заказа станут доступны после завершения.',
15
+ },
16
+ [ScProfstroyDraftState.actual]: {
17
+ label: 'Актуализирован',
18
+ appearance: 'positive',
19
+ description: 'Цены и позиции актуальны, заказ можно оформлять.',
20
+ },
21
+ [ScProfstroyDraftState.outdated]: {
22
+ label: 'Данные устарели',
23
+ appearance: 'warning',
24
+ description: 'С момента последней актуализации прошло много времени. Запустите её повторно, чтобы оформить заказ по актуальным ценам.',
25
+ },
26
+ [ScProfstroyDraftState.error]: {
27
+ label: 'Ошибка обработки',
28
+ appearance: 'negative',
29
+ description: 'Обработка завершилась с ошибкой. Запустите актуализацию повторно или соберите заявку из файла заново.',
30
+ },
31
+ [ScProfstroyDraftState.needsActualization]: {
32
+ label: 'Требуется актуализация',
33
+ appearance: 'warning',
34
+ description: 'Состав заявки изменён после последней актуализации. Запустите актуализацию, чтобы обновить цены и оформить заказ. Цены и примечания к позициям обновятся после актуализации.',
35
+ },
36
+ [ScProfstroyDraftState.unknown]: {
37
+ label: 'Состояние неизвестно',
38
+ appearance: 'neutral',
39
+ description: '',
40
+ },
41
+ }; }
42
+ /**
43
+ * Возвращает состояние черновика на указанный момент.
44
+ *
45
+ * @param actualization Данные об актуализации.
46
+ * @param now Момент проверки.
47
+ */
48
+ static getState(actualization, now) {
49
+ switch (actualization?.status) {
50
+ case ScOrderDraftActualizationStatus.processing:
51
+ return ScProfstroyDraftState.processing;
52
+ case ScOrderDraftActualizationStatus.completed:
53
+ return actualization.isOutdatedAt(now) ? ScProfstroyDraftState.outdated : ScProfstroyDraftState.actual;
54
+ case ScOrderDraftActualizationStatus.error:
55
+ return ScProfstroyDraftState.error;
56
+ case ScOrderDraftActualizationStatus.needsActualization:
57
+ return ScProfstroyDraftState.needsActualization;
58
+ default:
59
+ return ScProfstroyDraftState.unknown;
60
+ }
61
+ }
62
+ /**
63
+ * Возвращает данные об отображении состояния черновика на указанный момент.
64
+ *
65
+ * @param actualization Данные об актуализации.
66
+ * @param now Момент проверки.
67
+ */
68
+ static getStateView(actualization, now) {
69
+ return ScProfstroyDraftHelper.stateViews[ScProfstroyDraftHelper.getState(actualization, now)];
70
+ }
71
+ /**
72
+ * Возвращает данные об отображении панели состояния черновика: для актуальной заявки пояснение зависит от того, сколько позиций попадёт в заказ.
73
+ *
74
+ * @param draft Черновик Профстрой.
75
+ * @param now Момент проверки.
76
+ */
77
+ static getPanelView(draft, now) {
78
+ const view = ScProfstroyDraftHelper.getStateView(draft.actualization, now);
79
+ if (ScProfstroyDraftHelper.getState(draft.actualization, now) !== ScProfstroyDraftState.actual) {
80
+ return view;
81
+ }
82
+ const total = draft.products.length;
83
+ const orderable = draft.products.filter((item) => item.isOrderable).length;
84
+ if (orderable === 0) {
85
+ return {
86
+ ...view,
87
+ appearance: 'warning',
88
+ description: 'Актуализация завершена, но ни одна позиция не попадёт в заказ. Исправьте или удалите позиции с примечанием и запустите актуализацию повторно или соберите заявку заново из файла.',
89
+ };
90
+ }
91
+ return orderable < total ? { ...view, description: `Цены актуальны. В заказ попадут ${orderable} из ${total} позиций, остальные отмечены в поле «Примечание».` } : view;
92
+ }
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWRyYWZ0LWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvaGVscGVycy9zYy1wcm9mc3Ryb3ktZHJhZnQtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkMsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUcxRTs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFDL0I7O09BRUc7YUFDcUIsZUFBVSxHQUE4RDtRQUM1RixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssRUFBRSx1QkFBdUI7WUFDOUIsVUFBVSxFQUFFLE1BQU07WUFDbEIsV0FBVyxFQUFFLHlIQUF5SDtTQUN6STtRQUNELENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUIsS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixVQUFVLEVBQUUsVUFBVTtZQUN0QixXQUFXLEVBQUUsa0RBQWtEO1NBQ2xFO1FBQ0QsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSx5SEFBeUg7U0FDekk7UUFDRCxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsV0FBVyxFQUFFLHVHQUF1RztTQUN2SDtRQUNELENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUN4QyxLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFDUCw4S0FBOEs7U0FDckw7UUFDRCxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzdCLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsVUFBVSxFQUFFLFNBQVM7WUFDckIsV0FBVyxFQUFFLEVBQUU7U0FDbEI7S0FDSixDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQW9ELEVBQUUsR0FBUztRQUNsRixRQUFRLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM1QixLQUFLLCtCQUErQixDQUFDLFVBQVU7Z0JBQzNDLE9BQU8scUJBQXFCLENBQUMsVUFBVSxDQUFDO1lBQzVDLEtBQUssK0JBQStCLENBQUMsU0FBUztnQkFDMUMsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztZQUMzRyxLQUFLLCtCQUErQixDQUFDLEtBQUs7Z0JBQ3RDLE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLEtBQUssK0JBQStCLENBQUMsa0JBQWtCO2dCQUNuRCxPQUFPLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDO1lBQ3BEO2dCQUNJLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQzdDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQW9ELEVBQUUsR0FBUztRQUN0RixPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFtQixFQUFFLEdBQVM7UUFDckQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFM0UsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3RixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFM0UsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTztnQkFDSCxHQUFHLElBQUk7Z0JBQ1AsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFDUCxtTEFBbUw7YUFDMUwsQ0FBQztRQUNOLENBQUM7UUFFRCxPQUFPLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxTQUFTLE9BQU8sS0FBSyxtREFBbUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjT3JkZXJEcmFmdCwgU2NPcmRlckRyYWZ0QWN0dWFsaXphdGlvbiwgU2NPcmRlckRyYWZ0QWN0dWFsaXphdGlvblN0YXR1cyB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuXG5pbXBvcnQgeyBTY1Byb2ZzdHJveURyYWZ0U3RhdGUgfSBmcm9tICcuLi9lbnVtcy9zYy1wcm9mc3Ryb3ktZHJhZnQtc3RhdGUnO1xuaW1wb3J0IHsgU2NJUHJvZnN0cm95RHJhZnRTdGF0ZVZpZXcgfSBmcm9tICcuLi9tb2RlbHMvc2MtaS1wcm9mc3Ryb3ktZHJhZnQtc3RhdGUtdmlldyc7XG5cbi8qKlxuICog0JrQu9Cw0YHRgS3Qv9C+0LzQvtGJ0L3QuNC6INC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGH0LXRgNC90L7QstC40LrQvtCyINCf0YDQvtGE0YHRgtGA0L7QuS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjUHJvZnN0cm95RHJhZnRIZWxwZXIge1xuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQvtCxINC+0YLQvtCx0YDQsNC20LXQvdC40Lgg0YHQvtGB0YLQvtGP0L3QuNC5INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzdGF0ZVZpZXdzOiBSZWNvcmQ8U2NQcm9mc3Ryb3lEcmFmdFN0YXRlLCBTY0lQcm9mc3Ryb3lEcmFmdFN0YXRlVmlldz4gPSB7XG4gICAgICAgIFtTY1Byb2ZzdHJveURyYWZ0U3RhdGUucHJvY2Vzc2luZ106IHtcbiAgICAgICAgICAgIGxhYmVsOiAn0JLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQvtCx0YDQsNCx0L7RgtC60LAnLFxuICAgICAgICAgICAgYXBwZWFyYW5jZTogJ2luZm8nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICfQpNCw0LnQuyDQvtCx0YDQsNCx0LDRgtGL0LLQsNC10YLRgdGPLCDQv9C+0LfQuNGG0LjQuCDQuCDRhtC10L3RiyDRg9GC0L7Rh9C90Y/RjtGC0YHRjy4g0JjQt9C80LXQvdC10L3QuNC1INGB0L7RgdGC0LDQstCwINC4INC+0YTQvtGA0LzQu9C10L3QuNC1INC30LDQutCw0LfQsCDRgdGC0LDQvdGD0YIg0LTQvtGB0YLRg9C/0L3RiyDQv9C+0YHQu9C1INC30LDQstC10YDRiNC10L3QuNGPLicsXG4gICAgICAgIH0sXG4gICAgICAgIFtTY1Byb2ZzdHJveURyYWZ0U3RhdGUuYWN0dWFsXToge1xuICAgICAgICAgICAgbGFiZWw6ICfQkNC60YLRg9Cw0LvQuNC30LjRgNC+0LLQsNC9JyxcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6ICdwb3NpdGl2ZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9Cm0LXQvdGLINC4INC/0L7Qt9C40YbQuNC4INCw0LrRgtGD0LDQu9GM0L3Riywg0LfQsNC60LDQtyDQvNC+0LbQvdC+INC+0YTQvtGA0LzQu9GP0YLRjC4nLFxuICAgICAgICB9LFxuICAgICAgICBbU2NQcm9mc3Ryb3lEcmFmdFN0YXRlLm91dGRhdGVkXToge1xuICAgICAgICAgICAgbGFiZWw6ICfQlNCw0L3QvdGL0LUg0YPRgdGC0LDRgNC10LvQuCcsXG4gICAgICAgICAgICBhcHBlYXJhbmNlOiAnd2FybmluZycsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9ChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Lgg0L/RgNC+0YjQu9C+INC80L3QvtCz0L4g0LLRgNC10LzQtdC90LguINCX0LDQv9GD0YHRgtC40YLQtSDQtdGRINC/0L7QstGC0L7RgNC90L4sINGH0YLQvtCx0Ysg0L7RhNC+0YDQvNC40YLRjCDQt9Cw0LrQsNC3INC/0L4g0LDQutGC0YPQsNC70YzQvdGL0Lwg0YbQtdC90LDQvC4nLFxuICAgICAgICB9LFxuICAgICAgICBbU2NQcm9mc3Ryb3lEcmFmdFN0YXRlLmVycm9yXToge1xuICAgICAgICAgICAgbGFiZWw6ICfQntGI0LjQsdC60LAg0L7QsdGA0LDQsdC+0YLQutC4JyxcbiAgICAgICAgICAgIGFwcGVhcmFuY2U6ICduZWdhdGl2ZScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9Ce0LHRgNCw0LHQvtGC0LrQsCDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGBINC+0YjQuNCx0LrQvtC5LiDQl9Cw0L/Rg9GB0YLQuNGC0LUg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNGOINC/0L7QstGC0L7RgNC90L4g0LjQu9C4INGB0L7QsdC10YDQuNGC0LUg0LfQsNGP0LLQutGDINC40Lcg0YTQsNC50LvQsCDQt9Cw0L3QvtCy0L4uJyxcbiAgICAgICAgfSxcbiAgICAgICAgW1NjUHJvZnN0cm95RHJhZnRTdGF0ZS5uZWVkc0FjdHVhbGl6YXRpb25dOiB7XG4gICAgICAgICAgICBsYWJlbDogJ9Ci0YDQtdCx0YPQtdGC0YHRjyDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Y8nLFxuICAgICAgICAgICAgYXBwZWFyYW5jZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgJ9Ch0L7RgdGC0LDQsiDQt9Cw0Y/QstC60Lgg0LjQt9C80LXQvdGR0L0g0L/QvtGB0LvQtSDQv9C+0YHQu9C10LTQvdC10Lkg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LiDQl9Cw0L/Rg9GB0YLQuNGC0LUg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNGOLCDRh9GC0L7QsdGLINC+0LHQvdC+0LLQuNGC0Ywg0YbQtdC90Ysg0Lgg0L7RhNC+0YDQvNC40YLRjCDQt9Cw0LrQsNC3LiDQptC10L3RiyDQuCDQv9GA0LjQvNC10YfQsNC90LjRjyDQuiDQv9C+0LfQuNGG0LjRj9C8INC+0LHQvdC+0LLRj9GC0YHRjyDQv9C+0YHQu9C1INCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuC4nLFxuICAgICAgICB9LFxuICAgICAgICBbU2NQcm9mc3Ryb3lEcmFmdFN0YXRlLnVua25vd25dOiB7XG4gICAgICAgICAgICBsYWJlbDogJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQvdC10LjQt9Cy0LXRgdGC0L3QvicsXG4gICAgICAgICAgICBhcHBlYXJhbmNlOiAnbmV1dHJhbCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L7RgdGC0L7Rj9C90LjQtSDRh9C10YDQvdC+0LLQuNC60LAg0L3QsCDRg9C60LDQt9Cw0L3QvdGL0Lkg0LzQvtC80LXQvdGCLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdHVhbGl6YXRpb24g0JTQsNC90L3Ri9C1INC+0LEg0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4LlxuICAgICAqIEBwYXJhbSBub3cg0JzQvtC80LXQvdGCINC/0YDQvtCy0LXRgNC60LguXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRTdGF0ZShhY3R1YWxpemF0aW9uOiBTY09yZGVyRHJhZnRBY3R1YWxpemF0aW9uIHwgdW5kZWZpbmVkLCBub3c6IERhdGUpOiBTY1Byb2ZzdHJveURyYWZ0U3RhdGUge1xuICAgICAgICBzd2l0Y2ggKGFjdHVhbGl6YXRpb24/LnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBTY09yZGVyRHJhZnRBY3R1YWxpemF0aW9uU3RhdHVzLnByb2Nlc3Npbmc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNjUHJvZnN0cm95RHJhZnRTdGF0ZS5wcm9jZXNzaW5nO1xuICAgICAgICAgICAgY2FzZSBTY09yZGVyRHJhZnRBY3R1YWxpemF0aW9uU3RhdHVzLmNvbXBsZXRlZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0dWFsaXphdGlvbi5pc091dGRhdGVkQXQobm93KSA/IFNjUHJvZnN0cm95RHJhZnRTdGF0ZS5vdXRkYXRlZCA6IFNjUHJvZnN0cm95RHJhZnRTdGF0ZS5hY3R1YWw7XG4gICAgICAgICAgICBjYXNlIFNjT3JkZXJEcmFmdEFjdHVhbGl6YXRpb25TdGF0dXMuZXJyb3I6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNjUHJvZnN0cm95RHJhZnRTdGF0ZS5lcnJvcjtcbiAgICAgICAgICAgIGNhc2UgU2NPcmRlckRyYWZ0QWN0dWFsaXphdGlvblN0YXR1cy5uZWVkc0FjdHVhbGl6YXRpb246XG4gICAgICAgICAgICAgICAgcmV0dXJuIFNjUHJvZnN0cm95RHJhZnRTdGF0ZS5uZWVkc0FjdHVhbGl6YXRpb247XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBTY1Byb2ZzdHJveURyYWZ0U3RhdGUudW5rbm93bjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC00LDQvdC90YvQtSDQvtCxINC+0YLQvtCx0YDQsNC20LXQvdC40Lgg0YHQvtGB0YLQvtGP0L3QuNGPINGH0LXRgNC90L7QstC40LrQsCDQvdCwINGD0LrQsNC30LDQvdC90YvQuSDQvNC+0LzQtdC90YIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0dWFsaXphdGlvbiDQlNCw0L3QvdGL0LUg0L7QsSDQsNC60YLRg9Cw0LvQuNC30LDRhtC40LguXG4gICAgICogQHBhcmFtIG5vdyDQnNC+0LzQtdC90YIg0L/RgNC+0LLQtdGA0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldFN0YXRlVmlldyhhY3R1YWxpemF0aW9uOiBTY09yZGVyRHJhZnRBY3R1YWxpemF0aW9uIHwgdW5kZWZpbmVkLCBub3c6IERhdGUpOiBTY0lQcm9mc3Ryb3lEcmFmdFN0YXRlVmlldyB7XG4gICAgICAgIHJldHVybiBTY1Byb2ZzdHJveURyYWZ0SGVscGVyLnN0YXRlVmlld3NbU2NQcm9mc3Ryb3lEcmFmdEhlbHBlci5nZXRTdGF0ZShhY3R1YWxpemF0aW9uLCBub3cpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQtNCw0L3QvdGL0LUg0L7QsSDQvtGC0L7QsdGA0LDQttC10L3QuNC4INC/0LDQvdC10LvQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0YfQtdGA0L3QvtCy0LjQutCwOiDQtNC70Y8g0LDQutGC0YPQsNC70YzQvdC+0Lkg0LfQsNGP0LLQutC4INC/0L7Rj9GB0L3QtdC90LjQtSDQt9Cw0LLQuNGB0LjRgiDQvtGCINGC0L7Qs9C+LCDRgdC60L7Qu9GM0LrQviDQv9C+0LfQuNGG0LjQuSDQv9C+0L/QsNC00ZHRgiDQsiDQt9Cw0LrQsNC3LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRyYWZ0INCn0LXRgNC90L7QstC40Log0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqIEBwYXJhbSBub3cg0JzQvtC80LXQvdGCINC/0YDQvtCy0LXRgNC60LguXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRQYW5lbFZpZXcoZHJhZnQ6IFNjT3JkZXJEcmFmdCwgbm93OiBEYXRlKTogU2NJUHJvZnN0cm95RHJhZnRTdGF0ZVZpZXcge1xuICAgICAgICBjb25zdCB2aWV3ID0gU2NQcm9mc3Ryb3lEcmFmdEhlbHBlci5nZXRTdGF0ZVZpZXcoZHJhZnQuYWN0dWFsaXphdGlvbiwgbm93KTtcblxuICAgICAgICBpZiAoU2NQcm9mc3Ryb3lEcmFmdEhlbHBlci5nZXRTdGF0ZShkcmFmdC5hY3R1YWxpemF0aW9uLCBub3cpICE9PSBTY1Byb2ZzdHJveURyYWZ0U3RhdGUuYWN0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmlldztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gZHJhZnQucHJvZHVjdHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBvcmRlcmFibGUgPSBkcmFmdC5wcm9kdWN0cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNPcmRlcmFibGUpLmxlbmd0aDtcblxuICAgICAgICBpZiAob3JkZXJhYmxlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnZpZXcsXG4gICAgICAgICAgICAgICAgYXBwZWFyYW5jZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICAn0JDQutGC0YPQsNC70LjQt9Cw0YbQuNGPINC30LDQstC10YDRiNC10L3QsCwg0L3QviDQvdC4INC+0LTQvdCwINC/0L7Qt9C40YbQuNGPINC90LUg0L/QvtC/0LDQtNGR0YIg0LIg0LfQsNC60LDQty4g0JjRgdC/0YDQsNCy0YzRgtC1INC40LvQuCDRg9C00LDQu9C40YLQtSDQv9C+0LfQuNGG0LjQuCDRgSDQv9GA0LjQvNC10YfQsNC90LjQtdC8INC4INC30LDQv9GD0YHRgtC40YLQtSDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Y4g0L/QvtCy0YLQvtGA0L3QviDQuNC70Lgg0YHQvtCx0LXRgNC40YLQtSDQt9Cw0Y/QstC60YMg0LfQsNC90L7QstC+INC40Lcg0YTQsNC50LvQsC4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmRlcmFibGUgPCB0b3RhbCA/IHsgLi4udmlldywgZGVzY3JpcHRpb246IGDQptC10L3RiyDQsNC60YLRg9Cw0LvRjNC90YsuINCSINC30LDQutCw0Lcg0L/QvtC/0LDQtNGD0YIgJHtvcmRlcmFibGV9INC40LcgJHt0b3RhbH0g0L/QvtC30LjRhtC40LksINC+0YHRgtCw0LvRjNC90YvQtSDQvtGC0LzQtdGH0LXQvdGLINCyINC/0L7Qu9C1IMKr0J/RgNC40LzQtdGH0LDQvdC40LXCuy5gIH0gOiB2aWV3O1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ export * from './actualization-panel/sc-profstroy-actualization-panel.component';
2
+ export * from './badge/sc-profstroy-badge.component';
3
+ export * from './badges/sc-profstroy-draft-badges.component';
4
+ export * from './create-dialog/sc-profstroy-draft-create-dialog.component';
5
+ export * from './enums/sc-profstroy-draft-state';
6
+ export * from './helpers/sc-profstroy-draft-helper';
7
+ export * from './models/sc-i-profstroy-draft-state-view';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvZHJhZnQvcHJvZnN0cm95L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMENBQTBDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjdHVhbGl6YXRpb24tcGFuZWwvc2MtcHJvZnN0cm95LWFjdHVhbGl6YXRpb24tcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYmFkZ2Uvc2MtcHJvZnN0cm95LWJhZGdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2JhZGdlcy9zYy1wcm9mc3Ryb3ktZHJhZnQtYmFkZ2VzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1kaWFsb2cvc2MtcHJvZnN0cm95LWRyYWZ0LWNyZWF0ZS1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvc2MtcHJvZnN0cm95LWRyYWZ0LXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9zYy1wcm9mc3Ryb3ktZHJhZnQtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3NjLWktcHJvZnN0cm95LWRyYWZ0LXN0YXRlLXZpZXcnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1wcm9mc3Ryb3ktZHJhZnQtc3RhdGUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvbW9kZWxzL3NjLWktcHJvZnN0cm95LWRyYWZ0LXN0YXRlLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog0JTQsNC90L3Ri9C1INC+0LEg0L7RgtC+0LHRgNCw0LbQtdC90LjQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0YfQtdGA0L3QvtCy0LjQutCwINCf0YDQvtGE0YHRgtGA0L7QuS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY0lQcm9mc3Ryb3lEcmFmdFN0YXRlVmlldyB7XG4gICAgLyoqXG4gICAgICog0JrRgNCw0YLQutC+0LUg0L3QsNC30LLQsNC90LjQtSDRgdC+0YHRgtC+0Y/QvdC40Y8uXG4gICAgICovXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCe0YTQvtGA0LzQu9C10L3QuNC1INC80LXRgtC60Lgg0Lgg0L/QsNC90LXQu9C4INGB0L7RgdGC0L7Rj9C90LjRjy5cbiAgICAgKi9cbiAgICBhcHBlYXJhbmNlOiAnaW5mbycgfCAncG9zaXRpdmUnIHwgJ3dhcm5pbmcnIHwgJ25lZ2F0aXZlJyB8ICduZXV0cmFsJztcblxuICAgIC8qKlxuICAgICAqINCf0L7Rj9GB0L3QtdC90LjQtSDQuiDRgdC+0YHRgtC+0Y/QvdC40Y4uXG4gICAgICovXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbn1cbiJdfQ==