@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
@@ -44,11 +44,11 @@ export class ScPriceWarehouseStockComponent {
44
44
  }))));
45
45
  }
46
46
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPriceWarehouseStockComponent, deps: [{ token: i1.ScWarehouseService }], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScPriceWarehouseStockComponent, isStandalone: true, selector: "sc-price-warehouse-stock", inputs: { classList: "classList", product: "product", withStockHint: "withStockHint", fromMain: "fromMain" }, ngImport: i0, template: "<ng-container *ngIf=\"product\">\n @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n @let showStockHint = withStockHint && !!(warehousesList$ | async)?.length;\n <span>\n <ng-container *ngIf=\"!product.stockCount?.length && product.getNotStockMessage(warehouseSelect) as message\">\n @let showPlaningHint = !!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate);\n <a\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F <br />\n \u043D\u0430 \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u0441\u043A\u043B\u0430\u0434:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n \u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n \u041F\u043E\u0434 \u0437\u0430\u043A\u0430\u0437\n </span>\n </span>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count !== undefined && item.sc.count !== null ? item.sc.count + ' ' + product.unit.name : '\u0412 \u043D\u0430\u043B\u0438\u0447\u0438\u0438' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n", styles: ["::ng-deep tui-hint:has(.stock-table){max-inline-size:22rem}[tuiIconButton]{--tui-radius-m: .75rem;--tui-height-xs: 1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
47
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScPriceWarehouseStockComponent, isStandalone: true, selector: "sc-price-warehouse-stock", inputs: { classList: "classList", product: "product", withStockHint: "withStockHint", fromMain: "fromMain" }, ngImport: i0, template: "<ng-container *ngIf=\"product\">\n @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n @let showStockHint = withStockHint && !!(warehousesList$ | async)?.length;\n <span>\n <ng-container *ngIf=\"!product.stockCount?.length && product.getNotStockMessage(warehouseSelect) as message\">\n @let showPlaningHint = !!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate);\n <a\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F <br />\n \u043D\u0430 \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u0441\u043A\u043B\u0430\u0434:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n \u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n \u041F\u043E\u0434 \u0437\u0430\u043A\u0430\u0437\n </span>\n </span>\n <p\n *ngIf=\"product.properties?.planingProductionDate\"\n class=\"text-tui-text-02\"\n [class.disabled]=\"isDisabled\"\n [ngClass]=\"classList\"\n >\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430: {{ product.properties?.planingProductionDate }}\n </p>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count !== undefined && item.sc.count !== null ? item.sc.count + ' ' + product.unit.name : '\u0412 \u043D\u0430\u043B\u0438\u0447\u0438\u0438' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n", styles: ["::ng-deep tui-hint:has(.stock-table){max-inline-size:22rem}[tuiIconButton]{--tui-radius-m: .75rem;--tui-height-xs: 1.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
48
48
  }
49
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPriceWarehouseStockComponent, decorators: [{
50
50
  type: Component,
51
- args: [{ standalone: true, selector: 'sc-price-warehouse-stock', imports: [CommonModule, RouterModule, TuiTextfieldControllerModule, FormsModule, ReactiveFormsModule, ...TuiHint, TuiLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"product\">\n @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n @let showStockHint = withStockHint && !!(warehousesList$ | async)?.length;\n <span>\n <ng-container *ngIf=\"!product.stockCount?.length && product.getNotStockMessage(warehouseSelect) as message\">\n @let showPlaningHint = !!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate);\n <a\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F <br />\n \u043D\u0430 \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u0441\u043A\u043B\u0430\u0434:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n \u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n \u041F\u043E\u0434 \u0437\u0430\u043A\u0430\u0437\n </span>\n </span>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count !== undefined && item.sc.count !== null ? item.sc.count + ' ' + product.unit.name : '\u0412 \u043D\u0430\u043B\u0438\u0447\u0438\u0438' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n", styles: ["::ng-deep tui-hint:has(.stock-table){max-inline-size:22rem}[tuiIconButton]{--tui-radius-m: .75rem;--tui-height-xs: 1.25rem}\n"] }]
51
+ args: [{ standalone: true, selector: 'sc-price-warehouse-stock', imports: [CommonModule, RouterModule, TuiTextfieldControllerModule, FormsModule, ReactiveFormsModule, ...TuiHint, TuiLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"product\">\n @let isDisabled = product.isHidden || product.isNull;\n\n <ng-container *ngIf=\"selectedWarehouse$ | async as warehouseSelect\">\n @let showStockHint = withStockHint && !!(warehousesList$ | async)?.length;\n <span>\n <ng-container *ngIf=\"!product.stockCount?.length && product.getNotStockMessage(warehouseSelect) as message\">\n @let showPlaningHint = !!(product.properties?.planingIncomingDate || product.properties?.planingProductionDate);\n <a\n tuiLink\n [pseudo]=\"showPlaningHint\"\n [tuiHint]=\"showPlaningHint && planingHint\"\n [class.disabled]=\"isDisabled\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.cursor]=\"showPlaningHint && planingHint ? 'pointer' : 'default'\"\n [ngClass]=\"classList\"\n >\n {{ message }}\n </a>\n </ng-container>\n <ng-template #planingHint>\n <span *ngIf=\"product.properties?.planingIncomingDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u044F <br />\n \u043D\u0430 \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 \u0441\u043A\u043B\u0430\u0434:\n <span class=\"font-bold\">{{ product.properties?.planingIncomingDate }}</span>\n </span>\n <span *ngIf=\"product.properties?.planingProductionDate\">\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430:\n <span class=\"font-bold\">{{ product.properties?.planingProductionDate }}</span>\n </span>\n </ng-template>\n <span *ngIf=\"product.stockCount && product.stockCount.length && !product.onOrder\">\n <span\n tuiLink\n [style.color]=\"'var(--tui-status-positive)'\"\n [tuiHint]=\"showStockHint && stockHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n [ngClass]=\"classList\"\n [class.disabled]=\"isDisabled\"\n class=\"!underline\"\n >\n \u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435\n </span>\n </span>\n\n <span\n *ngIf=\"product.onOrder\"\n [style.color]=\"'var(--tui-status-warning)'\"\n [ngClass]=\"classList\"\n >\n \u041F\u043E\u0434 \u0437\u0430\u043A\u0430\u0437\n </span>\n </span>\n <p\n *ngIf=\"product.properties?.planingProductionDate\"\n class=\"text-tui-text-02\"\n [class.disabled]=\"isDisabled\"\n [ngClass]=\"classList\"\n >\n \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0434\u0430\u0442\u0430 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0430: {{ product.properties?.planingProductionDate }}\n </p>\n </ng-container>\n\n <ng-template #stockHint>\n <table\n *ngIf=\"selectedWarehouse$ | async as warehouseSelect\"\n class=\"stock-table table-auto text-body-s\"\n [ngClass]=\"classList\"\n >\n <tbody>\n <tr\n *ngFor=\"let item of warehousesList$ | async\"\n class=\"border-b\"\n >\n <ng-container>\n <td class=\"px-1\">{{ item.w?.name }}:</td>\n <td class=\"px-1\">{{ item.sc.count !== undefined && item.sc.count !== null ? item.sc.count + ' ' + product.unit.name : '\u0412 \u043D\u0430\u043B\u0438\u0447\u0438\u0438' }}</td>\n </ng-container>\n </tr>\n </tbody>\n </table>\n </ng-template>\n</ng-container>\n", styles: ["::ng-deep tui-hint:has(.stock-table){max-inline-size:22rem}[tuiIconButton]{--tui-radius-m: .75rem;--tui-height-xs: 1.25rem}\n"] }]
52
52
  }], ctorParameters: () => [{ type: i1.ScWarehouseService }], propDecorators: { classList: [{
53
53
  type: Input
54
54
  }], product: [{
@@ -58,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
58
58
  }], fromMain: [{
59
59
  type: Input
60
60
  }] } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL3ByaWNlLXdhcmVob3VzZS1zdG9jay9zYy1wcmljZS13YXJlaG91c2Utc3RvY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2Utd2FyZWhvdXNlLXN0b2NrL3NjLXByaWNlLXdhcmVob3VzZS1zdG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQUVsRDs7R0FFRztBQVNILE1BQU0sT0FBTyw4QkFBOEI7SUErQnZDOzs7O09BSUc7SUFDSCxZQUFvQyxnQkFBb0M7UUFBcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQXpCeEU7O1dBRUc7UUFDYSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNhLGFBQVEsR0FBWSxJQUFJLENBQUM7SUFpQmtDLENBQUM7SUFFNUUsa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakosSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUMvQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUMsQ0FBQyxVQUEwQixFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVsRixPQUFPO29CQUNILENBQUMsRUFBRSxDQUFDO29CQUNKLEVBQUUsRUFBRSxVQUFVLElBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUE2QjtpQkFDaEYsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzsrR0E1RFEsOEJBQThCO21HQUE5Qiw4QkFBOEIsa01DcEIzQyxpNUhBK0VBLHNMRDlEYyxZQUFZLGtaQUFFLFlBQVksOEJBQUUsNEJBQTRCLDhCQUFFLFdBQVcsOEJBQUUsbUJBQW1CLG9PQUFjLE9BQU87OzRGQUdoSCw4QkFBOEI7a0JBUjFDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLDBCQUEwQixXQUczQixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxtQkFDekcsdUJBQXVCLENBQUMsTUFBTTt1RkFNL0IsU0FBUztzQkFBeEIsS0FBSztnQkFLVSxPQUFPO3NCQUF0QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTY0lXYXJlaG91c2UsIFNjSVdhcmVob3VzZVN0b2NrQ291bnQsIFNjUHJvZHVjdCwgU2NXYXJlaG91c2VTZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlIaW50LCBUdWlMaW5rIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQsNC90L3Ri9GFINC+INC90LDQu9C40YfQuNC4INGC0L7QstCw0YDQsCDQvdCwINGB0LrQu9Cw0LTQtS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLXByaWNlLXdhcmVob3VzZS1zdG9jaycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXByaWNlLXdhcmVob3VzZS1zdG9jay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICdzYy1wcmljZS13YXJlaG91c2Utc3RvY2suY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIC4uLlR1aUhpbnQsIFR1aUxpbmtdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1ByaWNlV2FyZWhvdXNlU3RvY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCh0YLRgNC+0LrQsCDQutC70LDRgdGB0L7QsiDQtNC70Y8g0YHQstC+0LnRgdGC0LIg0YHRgtCw0YLRg9GB0L7Qsi5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgY2xhc3NMaXN0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1L9GD0YHQu9GD0LPQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJvZHVjdDogU2NQcm9kdWN0O1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQv9C+0LTRgdC60LDQt9C60YMg0L/QviDRgdC60LvQsNC00LDQvC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgd2l0aFN0b2NrSGludDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QuNGB0L7QuiDQvtGB0YLQsNGC0LrQvtCyINC/0L4g0YHQutC70LDQtNCw0Lwg0L/RgNC4INCy0YvQsdGA0LDQvdC90L7QvCDQvtGB0L3QvtCy0L3QvtC8INGB0LrQu9Cw0LTQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZnJvbU1haW46IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQstGL0LHRgNCw0L3QvdC+0LPQviDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkV2FyZWhvdXNlJDogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2UgfCBudWxsPjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQv9C40YHQutCwINGB0LrQu9Cw0LTQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3YXJlaG91c2VzTGlzdCQ/OiBPYnNlcnZhYmxlPEFycmF5PHsgc2M6IFNjSVdhcmVob3VzZVN0b2NrQ291bnQ7IHc6IFNjSVdhcmVob3VzZSB8IHVuZGVmaW5lZCB9PiB8IHVuZGVmaW5lZD47XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjUHJpY2VXYXJlaG91c2VTdG9ja0NvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2FyZWhvdXNlU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INGB0LrQu9Cw0LTQsNC80LguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd2FyZWhvdXNlU2VydmljZTogU2NXYXJlaG91c2VTZXJ2aWNlKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlJCA9IHRoaXMuZnJvbU1haW4gPyB0aGlzLndhcmVob3VzZVNlcnZpY2UuZ2V0Q2F0YWxvZ1dhcmVob3VzZUNoYW5nZSQoKSA6IHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRXYXJlaG91c2VTZWxlY3RDaGFuZ2UkKCk7XG5cbiAgICAgICAgdGhpcy53YXJlaG91c2VzTGlzdCQgPSB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh3YXJlaG91c2UpID0+XG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFdhcmVob3VzZXMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh3YXJlaG91c2VzOiBTY0lXYXJlaG91c2VbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB3YXJlaG91c2VzLm1hcCgodykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b2NrQ291bnQgPSB0aGlzLnByb2R1Y3Quc3RvY2tDb3VudD8uZmluZCgoc2MpID0+IHNjLndhcmVob3VzZUlkID09PSB3LmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBzdG9ja0NvdW50ID8/ICh7IHdhcmVob3VzZUlkOiB3LmlkLCBjb3VudDogMCB9IGFzIFNjSVdhcmVob3VzZVN0b2NrQ291bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnNvcnQoKGl0ZW0pID0+IChpdGVtLncuaWQgPT09IHdhcmVob3VzZT8uaWQgPyAtMSA6IDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2R1Y3RcIj5cbiAgICBAbGV0IGlzRGlzYWJsZWQgPSBwcm9kdWN0LmlzSGlkZGVuIHx8IHByb2R1Y3QuaXNOdWxsO1xuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkV2FyZWhvdXNlJCB8IGFzeW5jIGFzIHdhcmVob3VzZVNlbGVjdFwiPlxuICAgICAgICBAbGV0IHNob3dTdG9ja0hpbnQgPSB3aXRoU3RvY2tIaW50ICYmICEhKHdhcmVob3VzZXNMaXN0JCB8IGFzeW5jKT8ubGVuZ3RoO1xuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5zdG9ja0NvdW50Py5sZW5ndGggJiYgcHJvZHVjdC5nZXROb3RTdG9ja01lc3NhZ2Uod2FyZWhvdXNlU2VsZWN0KSBhcyBtZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgQGxldCBzaG93UGxhbmluZ0hpbnQgPSAhIShwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGUgfHwgcHJvZHVjdC5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGUpO1xuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgW3BzZXVkb109XCJzaG93UGxhbmluZ0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdHVpSGludF09XCJzaG93UGxhbmluZ0hpbnQgJiYgcGxhbmluZ0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFt0dWlIaW50U2hvd0RlbGF5XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIHR1aUhpbnREaXJlY3Rpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXR1aS1zdGF0dXMtbmVnYXRpdmUpJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwic2hvd1BsYW5pbmdIaW50ICYmIHBsYW5pbmdIaW50ID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhbmluZ0hpbnQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAg0J/Qu9Cw0L3QuNGA0YPQtdC80LDRjyDQtNCw0YLQsCDQv9C+0YHRgtGD0L/Qu9C10L3QuNGPIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICDQvdCwINCe0YHQvdC+0LLQvdC+0Lkg0YHQutC70LDQtDpcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAg0J/Qu9Cw0L3QuNGA0YPQtdC80LDRjyDQtNCw0YLQsCA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAg0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstCwOlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QucHJvcGVydGllcz8ucGxhbmluZ1Byb2R1Y3Rpb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3Quc3RvY2tDb3VudCAmJiBwcm9kdWN0LnN0b2NrQ291bnQubGVuZ3RoICYmICFwcm9kdWN0Lm9uT3JkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIndmFyKC0tdHVpLXN0YXR1cy1wb3NpdGl2ZSknXCJcbiAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRdPVwic2hvd1N0b2NrSGludCAmJiBzdG9ja0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdHVpSGludFNob3dEZWxheV09XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiF1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J/RgNC+0LLQtdGA0LjRgtGMINC90LDQu9C40YfQuNC1XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5vbk9yZGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXR1aS1zdGF0dXMtd2FybmluZyknXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCf0L7QtCDQt9Cw0LrQsNC3XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjc3RvY2tIaW50PlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRXYXJlaG91c2UkIHwgYXN5bmMgYXMgd2FyZWhvdXNlU2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3RvY2stdGFibGUgdGFibGUtYXV0byB0ZXh0LWJvZHktc1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdhcmVob3VzZXNMaXN0JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItYlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtMVwiPnt7IGl0ZW0udz8ubmFtZSB9fTo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHgtMVwiPnt7IGl0ZW0uc2MuY291bnQgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnNjLmNvdW50ICE9PSBudWxsID8gaXRlbS5zYy5jb3VudCArICcgJyArIHByb2R1Y3QudW5pdC5uYW1lIDogJ9CSINC90LDQu9C40YfQuNC4JyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL3ByaWNlLXdhcmVob3VzZS1zdG9jay9zYy1wcmljZS13YXJlaG91c2Utc3RvY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvcHJpY2Utd2FyZWhvdXNlLXN0b2NrL3NjLXByaWNlLXdhcmVob3VzZS1zdG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQUVsRDs7R0FFRztBQVNILE1BQU0sT0FBTyw4QkFBOEI7SUErQnZDOzs7O09BSUc7SUFDSCxZQUFvQyxnQkFBb0M7UUFBcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQXpCeEU7O1dBRUc7UUFDYSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5Qzs7V0FFRztRQUNhLGFBQVEsR0FBWSxJQUFJLENBQUM7SUFpQmtDLENBQUM7SUFFNUUsa0JBQWtCO0lBQ1gsUUFBUTtRQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakosSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUMvQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUN2QyxHQUFHLENBQUMsQ0FBQyxVQUEwQixFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVsRixPQUFPO29CQUNILENBQUMsRUFBRSxDQUFDO29CQUNKLEVBQUUsRUFBRSxVQUFVLElBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUE2QjtpQkFDaEYsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUNMLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzsrR0E1RFEsOEJBQThCO21HQUE5Qiw4QkFBOEIsa01DcEIzQyxvMUlBdUZBLHNMRHRFYyxZQUFZLGtaQUFFLFlBQVksOEJBQUUsNEJBQTRCLDhCQUFFLFdBQVcsOEJBQUUsbUJBQW1CLG9PQUFjLE9BQU87OzRGQUdoSCw4QkFBOEI7a0JBUjFDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLDBCQUEwQixXQUczQixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxtQkFDekcsdUJBQXVCLENBQUMsTUFBTTt1RkFNL0IsU0FBUztzQkFBeEIsS0FBSztnQkFLVSxPQUFPO3NCQUF0QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTY0lXYXJlaG91c2UsIFNjSVdhcmVob3VzZVN0b2NrQ291bnQsIFNjUHJvZHVjdCwgU2NXYXJlaG91c2VTZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlIaW50LCBUdWlMaW5rIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQsNC90L3Ri9GFINC+INC90LDQu9C40YfQuNC4INGC0L7QstCw0YDQsCDQvdCwINGB0LrQu9Cw0LTQtS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLXByaWNlLXdhcmVob3VzZS1zdG9jaycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXByaWNlLXdhcmVob3VzZS1zdG9jay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICdzYy1wcmljZS13YXJlaG91c2Utc3RvY2suY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIC4uLlR1aUhpbnQsIFR1aUxpbmtdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1ByaWNlV2FyZWhvdXNlU3RvY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCh0YLRgNC+0LrQsCDQutC70LDRgdGB0L7QsiDQtNC70Y8g0YHQstC+0LnRgdGC0LIg0YHRgtCw0YLRg9GB0L7Qsi5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgY2xhc3NMaXN0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1L9GD0YHQu9GD0LPQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcHJvZHVjdDogU2NQcm9kdWN0O1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQv9C+0LTRgdC60LDQt9C60YMg0L/QviDRgdC60LvQsNC00LDQvC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgd2l0aFN0b2NrSGludDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QuNGB0L7QuiDQvtGB0YLQsNGC0LrQvtCyINC/0L4g0YHQutC70LDQtNCw0Lwg0L/RgNC4INCy0YvQsdGA0LDQvdC90L7QvCDQvtGB0L3QvtCy0L3QvtC8INGB0LrQu9Cw0LTQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZnJvbU1haW46IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQstGL0LHRgNCw0L3QvdC+0LPQviDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkV2FyZWhvdXNlJDogT2JzZXJ2YWJsZTxTY0lXYXJlaG91c2UgfCBudWxsPjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQv9C40YHQutCwINGB0LrQu9Cw0LTQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3YXJlaG91c2VzTGlzdCQ/OiBPYnNlcnZhYmxlPEFycmF5PHsgc2M6IFNjSVdhcmVob3VzZVN0b2NrQ291bnQ7IHc6IFNjSVdhcmVob3VzZSB8IHVuZGVmaW5lZCB9PiB8IHVuZGVmaW5lZD47XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjUHJpY2VXYXJlaG91c2VTdG9ja0NvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2FyZWhvdXNlU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INGB0LrQu9Cw0LTQsNC80LguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgd2FyZWhvdXNlU2VydmljZTogU2NXYXJlaG91c2VTZXJ2aWNlKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlJCA9IHRoaXMuZnJvbU1haW4gPyB0aGlzLndhcmVob3VzZVNlcnZpY2UuZ2V0Q2F0YWxvZ1dhcmVob3VzZUNoYW5nZSQoKSA6IHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRXYXJlaG91c2VTZWxlY3RDaGFuZ2UkKCk7XG5cbiAgICAgICAgdGhpcy53YXJlaG91c2VzTGlzdCQgPSB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh3YXJlaG91c2UpID0+XG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFdhcmVob3VzZXMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCh3YXJlaG91c2VzOiBTY0lXYXJlaG91c2VbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB3YXJlaG91c2VzLm1hcCgodykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b2NrQ291bnQgPSB0aGlzLnByb2R1Y3Quc3RvY2tDb3VudD8uZmluZCgoc2MpID0+IHNjLndhcmVob3VzZUlkID09PSB3LmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBzdG9ja0NvdW50ID8/ICh7IHdhcmVob3VzZUlkOiB3LmlkLCBjb3VudDogMCB9IGFzIFNjSVdhcmVob3VzZVN0b2NrQ291bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnNvcnQoKGl0ZW0pID0+IChpdGVtLncuaWQgPT09IHdhcmVob3VzZT8uaWQgPyAtMSA6IDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2R1Y3RcIj5cbiAgICBAbGV0IGlzRGlzYWJsZWQgPSBwcm9kdWN0LmlzSGlkZGVuIHx8IHByb2R1Y3QuaXNOdWxsO1xuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkV2FyZWhvdXNlJCB8IGFzeW5jIGFzIHdhcmVob3VzZVNlbGVjdFwiPlxuICAgICAgICBAbGV0IHNob3dTdG9ja0hpbnQgPSB3aXRoU3RvY2tIaW50ICYmICEhKHdhcmVob3VzZXNMaXN0JCB8IGFzeW5jKT8ubGVuZ3RoO1xuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcHJvZHVjdC5zdG9ja0NvdW50Py5sZW5ndGggJiYgcHJvZHVjdC5nZXROb3RTdG9ja01lc3NhZ2Uod2FyZWhvdXNlU2VsZWN0KSBhcyBtZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgQGxldCBzaG93UGxhbmluZ0hpbnQgPSAhIShwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGUgfHwgcHJvZHVjdC5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGUpO1xuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICAgICAgW3BzZXVkb109XCJzaG93UGxhbmluZ0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdHVpSGludF09XCJzaG93UGxhbmluZ0hpbnQgJiYgcGxhbmluZ0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFt0dWlIaW50U2hvd0RlbGF5XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgIHR1aUhpbnREaXJlY3Rpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXR1aS1zdGF0dXMtbmVnYXRpdmUpJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwic2hvd1BsYW5pbmdIaW50ICYmIHBsYW5pbmdIaW50ID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhbmluZ0hpbnQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAg0J/Qu9Cw0L3QuNGA0YPQtdC80LDRjyDQtNCw0YLQsCDQv9C+0YHRgtGD0L/Qu9C10L3QuNGPIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICDQvdCwINCe0YHQvdC+0LLQvdC+0Lkg0YHQutC70LDQtDpcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAg0J/Qu9Cw0L3QuNGA0YPQtdC80LDRjyDQtNCw0YLQsCA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAg0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstCwOlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7IHByb2R1Y3QucHJvcGVydGllcz8ucGxhbmluZ1Byb2R1Y3Rpb25EYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3Quc3RvY2tDb3VudCAmJiBwcm9kdWN0LnN0b2NrQ291bnQubGVuZ3RoICYmICFwcm9kdWN0Lm9uT3JkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCIndmFyKC0tdHVpLXN0YXR1cy1wb3NpdGl2ZSknXCJcbiAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRdPVwic2hvd1N0b2NrSGludCAmJiBzdG9ja0hpbnRcIlxuICAgICAgICAgICAgICAgICAgICBbdHVpSGludFNob3dEZWxheV09XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiF1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J/RgNC+0LLQtdGA0LjRgtGMINC90LDQu9C40YfQuNC1XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5vbk9yZGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXR1aS1zdGF0dXMtd2FybmluZyknXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjbGFzc0xpc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCf0L7QtCDQt9Cw0LrQsNC3XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCf0LvQsNC90LjRgNGD0LXQvNCw0Y8g0LTQsNGC0LAg0L/RgNC+0LjQt9Cy0L7QtNGB0YLQstCwOiB7eyBwcm9kdWN0LnByb3BlcnRpZXM/LnBsYW5pbmdQcm9kdWN0aW9uRGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI3N0b2NrSGludD5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkV2FyZWhvdXNlJCB8IGFzeW5jIGFzIHdhcmVob3VzZVNlbGVjdFwiXG4gICAgICAgICAgICBjbGFzcz1cInN0b2NrLXRhYmxlIHRhYmxlLWF1dG8gdGV4dC1ib2R5LXNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2xhc3NMaXN0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB3YXJlaG91c2VzTGlzdCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTFcIj57eyBpdGVtLnc/Lm5hbWUgfX06PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB4LTFcIj57eyBpdGVtLnNjLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgaXRlbS5zYy5jb3VudCAhPT0gbnVsbCA/IGl0ZW0uc2MuY291bnQgKyAnICcgKyBwcm9kdWN0LnVuaXQubmFtZSA6ICfQkiDQvdCw0LvQuNGH0LjQuCcgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
2
+ /**
3
+ * Класс-помощник для сообщений об ошибках запросов к API.
4
+ */
5
+ export class ScApiErrorHelper {
6
+ /**
7
+ * Возвращает текст ошибки из ответа API или указанный текст, если ответ его не содержит.
8
+ *
9
+ * @param error Ошибка запроса.
10
+ * @param fallback Текст по умолчанию.
11
+ */
12
+ static getMessage(error, fallback) {
13
+ const message = error instanceof HttpErrorResponse ? error.error?.message : undefined;
14
+ return message?.trim() ? message : fallback;
15
+ }
16
+ /**
17
+ * Возвращает признак ответа 404: запись не найдена, например удалена в другой вкладке.
18
+ *
19
+ * @param error Ошибка запроса.
20
+ */
21
+ static isNotFound(error) {
22
+ return error instanceof HttpErrorResponse && error.status === HttpStatusCode.NotFound;
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXBpLWVycm9yLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9oZWxwZXJzL3NjLWFwaS1lcnJvci1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3pFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUN6Qjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBYyxFQUFFLFFBQWdCO1FBQ3JELE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxpQkFBaUIsQ0FBQyxDQUFDLENBQUUsS0FBSyxDQUFDLEtBQTZDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFL0gsT0FBTyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFjO1FBQ25DLE9BQU8sS0FBSyxZQUFZLGlCQUFpQixJQUFLLEtBQUssQ0FBQyxNQUF5QixLQUFLLGNBQWMsQ0FBQyxRQUFRLENBQUM7SUFDOUcsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU2NJQXBpRXJyb3JSZXNwb25zZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuXG4vKipcbiAqINCa0LvQsNGB0YEt0L/QvtC80L7RidC90LjQuiDQtNC70Y8g0YHQvtC+0LHRidC10L3QuNC5INC+0LEg0L7RiNC40LHQutCw0YUg0LfQsNC/0YDQvtGB0L7QsiDQuiBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY0FwaUVycm9ySGVscGVyIHtcbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgtC10LrRgdGCINC+0YjQuNCx0LrQuCDQuNC3INC+0YLQstC10YLQsCBBUEkg0LjQu9C4INGD0LrQsNC30LDQvdC90YvQuSDRgtC10LrRgdGCLCDQtdGB0LvQuCDQvtGC0LLQtdGCINC10LPQviDQvdC1INGB0L7QtNC10YDQttC40YIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXJyb3Ig0J7RiNC40LHQutCwINC30LDQv9GA0L7RgdCwLlxuICAgICAqIEBwYXJhbSBmYWxsYmFjayDQotC10LrRgdGCINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWVzc2FnZShlcnJvcjogdW5rbm93biwgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlID8gKGVycm9yLmVycm9yIGFzIFBhcnRpYWw8U2NJQXBpRXJyb3JSZXNwb25zZT4gfCBudWxsKT8ubWVzc2FnZSA6IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gbWVzc2FnZT8udHJpbSgpID8gbWVzc2FnZSA6IGZhbGxiYWNrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6INC+0YLQstC10YLQsCA0MDQ6INC30LDQv9C40YHRjCDQvdC1INC90LDQudC00LXQvdCwLCDQvdCw0L/RgNC40LzQtdGAINGD0LTQsNC70LXQvdCwINCyINC00YDRg9Cz0L7QuSDQstC60LvQsNC00LrQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlcnJvciDQntGI0LjQsdC60LAg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpc05vdEZvdW5kKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIChlcnJvci5zdGF0dXMgYXMgSHR0cFN0YXR1c0NvZGUpID09PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZDtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { ScUploadedFile } from '@snabcentr/client-core';
2
+ import { Observable } from 'rxjs';
3
+ /**
4
+ * Класс-помощник для работы с файлами, выбранными пользователем.
5
+ */
6
+ export class ScFileHelper {
7
+ /**
8
+ * Читает файл и возвращает его для отправки в API: название и содержимое в виде data-URI. При отписке чтение прерывается.
9
+ *
10
+ * @param file Выбранный файл.
11
+ */
12
+ static readAsUploadedFile$(file) {
13
+ return new Observable((observer) => {
14
+ const reader = new FileReader();
15
+ reader.addEventListener('load', () => {
16
+ observer.next(new ScUploadedFile(file.name, reader.result));
17
+ observer.complete();
18
+ });
19
+ reader.addEventListener('error', () => {
20
+ observer.error(reader.error);
21
+ });
22
+ reader.readAsDataURL(file);
23
+ return () => {
24
+ reader.abort();
25
+ };
26
+ });
27
+ }
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZmlsZS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvaGVscGVycy9zYy1maWxlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQzs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBQ3JCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBVTtRQUN4QyxPQUFPLElBQUksVUFBVSxDQUFpQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFFaEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0IsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NVcGxvYWRlZEZpbGUgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC70LDRgdGBLdC/0L7QvNC+0YnQvdC40Log0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDRhNCw0LnQu9Cw0LzQuCwg0LLRi9Cx0YDQsNC90L3Ri9C80Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LwuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY0ZpbGVIZWxwZXIge1xuICAgIC8qKlxuICAgICAqINCn0LjRgtCw0LXRgiDRhNCw0LnQuyDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQtdCz0L4g0LTQu9GPINC+0YLQv9GA0LDQstC60Lgg0LIgQVBJOiDQvdCw0LfQstCw0L3QuNC1INC4INGB0L7QtNC10YDQttC40LzQvtC1INCyINCy0LjQtNC1IGRhdGEtVVJJLiDQn9GA0Lgg0L7RgtC/0LjRgdC60LUg0YfRgtC10L3QuNC1INC/0YDQtdGA0YvQstCw0LXRgtGB0Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSDQktGL0LHRgNCw0L3QvdGL0Lkg0YTQsNC50LsuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWFkQXNVcGxvYWRlZEZpbGUkKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPFNjVXBsb2FkZWRGaWxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxTY1VwbG9hZGVkRmlsZT4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY1VwbG9hZGVkRmlsZShmaWxlLm5hbWUsIHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IocmVhZGVyLmVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWFkZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,83 @@
1
+ import { ScOrderDraft } from '@snabcentr/client-core';
2
+ /**
3
+ * Класс-помощник для работы со списком черновиков.
4
+ */
5
+ export class ScDraftListHelper {
6
+ /**
7
+ * Возвращает признак, что состав страницы не изменился: то же общее количество черновиков и те же черновики в том же порядке.
8
+ *
9
+ * @param items Текущие элементы списка.
10
+ * @param total Текущее общее количество черновиков.
11
+ * @param drafts Черновики полученной страницы.
12
+ * @param receivedTotal Общее количество черновиков в полученных данных.
13
+ */
14
+ static isSamePage(items, total, drafts, receivedTotal) {
15
+ return total === receivedTotal && items.length === drafts.length && drafts.every((draft, index) => draft.id === items.at(index)?.order.id);
16
+ }
17
+ /**
18
+ * Возвращает подпись состава страницы: общее количество черновиков и номера черновиков страницы по порядку.
19
+ *
20
+ * @param page Страница списка.
21
+ */
22
+ static getSignature(page) {
23
+ return `${page.meta.total}:${page.data.map(({ id }) => id).join(',')}`;
24
+ }
25
+ /**
26
+ * Возвращает элементы новой страницы списка. Черновики, которые уже есть в списке, сохраняют раскрытие и полные данные.
27
+ *
28
+ * @param items Текущие элементы списка.
29
+ * @param drafts Черновики новой страницы.
30
+ */
31
+ static fromPage(items, drafts) {
32
+ return drafts.map((short) => {
33
+ const item = items.find(({ order }) => order.id === short.id);
34
+ return item ? ScDraftListHelper.update(item, short) : { order: short, isExpanded: false };
35
+ });
36
+ }
37
+ /**
38
+ * Возвращает список с обновлёнными краткими данными полученных черновиков, состав и порядок списка не меняются.
39
+ * Полные данные раскрытых черновиков не меняются: их обновляет кэш черновика.
40
+ *
41
+ * @param items Текущие элементы списка.
42
+ * @param drafts Полученные краткие данные черновиков.
43
+ */
44
+ static merge(items, drafts) {
45
+ return items.map((item) => {
46
+ const short = drafts.find(({ id }) => id === item.order.id);
47
+ return short ? ScDraftListHelper.update(item, short) : item;
48
+ });
49
+ }
50
+ /**
51
+ * Возвращает номера черновиков с полными данными, у которых краткие данные отличаются: название или данные актуализации.
52
+ *
53
+ * @param items Текущие элементы списка.
54
+ * @param drafts Полученные краткие данные черновиков.
55
+ */
56
+ static getChangedFullDraftIds(items, drafts) {
57
+ return items
58
+ .filter(({ order }) => order instanceof ScOrderDraft)
59
+ .filter(({ order }) => {
60
+ const short = drafts.find(({ id }) => id === order.id);
61
+ if (!short) {
62
+ return false;
63
+ }
64
+ const isSameActualization = short.actualization ? short.actualization.isSameAs(order.actualization) : order.actualization === undefined;
65
+ return short.name !== order.name || !isSameActualization;
66
+ })
67
+ .map(({ order }) => order.id);
68
+ }
69
+ /**
70
+ * Обновляет элемент списка краткими данными черновика. Полные данные черновика не заменяются.
71
+ *
72
+ * @param item Элемент списка.
73
+ * @param short Краткие данные черновика.
74
+ */
75
+ static update(item, short) {
76
+ if (!(item.order instanceof ScOrderDraft)) {
77
+ // eslint-disable-next-line no-param-reassign
78
+ item.order = short;
79
+ }
80
+ return item;
81
+ }
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZHJhZnQtbGlzdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvZHJhZnQvaGVscGVycy9zYy1kcmFmdC1saXN0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsWUFBWSxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBSXRGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQjs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUF5QixFQUFFLEtBQWEsRUFBRSxNQUEyQixFQUFFLGFBQXFCO1FBQ2pILE9BQU8sS0FBSyxLQUFLLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQW9DO1FBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBeUIsRUFBRSxNQUEyQjtRQUN6RSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFOUQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDOUYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUF5QixFQUFFLE1BQTJCO1FBQ3RFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU1RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQXlCLEVBQUUsTUFBMkI7UUFDdkYsT0FBTyxLQUFLO2FBQ1AsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLFlBQVksQ0FBQzthQUNwRCxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNULE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUM7WUFFeEksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUM3RCxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFzQixFQUFFLEtBQXdCO1FBQ2xFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN4Qyw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjSVBhZ2luYXRlLCBTY09yZGVyRHJhZnQsIFNjT3JkZXJEcmFmdFNob3J0IH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbmltcG9ydCB7IFNjSURyYWZ0TGlzdEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvc2MtaS1kcmFmdC1saXN0LWl0ZW0nO1xuXG4vKipcbiAqINCa0LvQsNGB0YEt0L/QvtC80L7RidC90LjQuiDQtNC70Y8g0YDQsNCx0L7RgtGLINGB0L4g0YHQv9C40YHQutC+0Lwg0YfQtdGA0L3QvtCy0LjQutC+0LIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY0RyYWZ0TGlzdEhlbHBlciB7XG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC40LfQvdCw0LosINGH0YLQviDRgdC+0YHRgtCw0LIg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC40LfQvNC10L3QuNC70YHRjzog0YLQviDQttC1INC+0LHRidC10LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YfQtdGA0L3QvtCy0LjQutC+0LIg0Lgg0YLQtSDQttC1INGH0LXRgNC90L7QstC40LrQuCDQsiDRgtC+0Lwg0LbQtSDQv9C+0YDRj9C00LrQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyDQotC10LrRg9GJ0LjQtSDRjdC70LXQvNC10L3RgtGLINGB0L/QuNGB0LrQsC5cbiAgICAgKiBAcGFyYW0gdG90YWwg0KLQtdC60YPRidC10LUg0L7QsdGJ0LXQtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRh9C10YDQvdC+0LLQuNC60L7Qsi5cbiAgICAgKiBAcGFyYW0gZHJhZnRzINCn0LXRgNC90L7QstC40LrQuCDQv9C+0LvRg9GH0LXQvdC90L7QuSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSByZWNlaXZlZFRvdGFsINCe0LHRidC10LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YfQtdGA0L3QvtCy0LjQutC+0LIg0LIg0L/QvtC70YPRh9C10L3QvdGL0YUg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaXNTYW1lUGFnZShpdGVtczogU2NJRHJhZnRMaXN0SXRlbVtdLCB0b3RhbDogbnVtYmVyLCBkcmFmdHM6IFNjT3JkZXJEcmFmdFNob3J0W10sIHJlY2VpdmVkVG90YWw6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdG90YWwgPT09IHJlY2VpdmVkVG90YWwgJiYgaXRlbXMubGVuZ3RoID09PSBkcmFmdHMubGVuZ3RoICYmIGRyYWZ0cy5ldmVyeSgoZHJhZnQsIGluZGV4KSA9PiBkcmFmdC5pZCA9PT0gaXRlbXMuYXQoaW5kZXgpPy5vcmRlci5pZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/QvtC00L/QuNGB0Ywg0YHQvtGB0YLQsNCy0LAg0YHRgtGA0LDQvdC40YbRizog0L7QsdGJ0LXQtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRh9C10YDQvdC+0LLQuNC60L7QsiDQuCDQvdC+0LzQtdGA0LAg0YfQtdGA0L3QvtCy0LjQutC+0LIg0YHRgtGA0LDQvdC40YbRiyDQv9C+INC/0L7RgNGP0LTQutGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhZ2Ug0KHRgtGA0LDQvdC40YbQsCDRgdC/0LjRgdC60LAuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRTaWduYXR1cmUocGFnZTogU2NJUGFnaW5hdGU8U2NPcmRlckRyYWZ0U2hvcnQ+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3BhZ2UubWV0YS50b3RhbH06JHtwYWdlLmRhdGEubWFwKCh7IGlkIH0pID0+IGlkKS5qb2luKCcsJyl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRjdC70LXQvNC10L3RgtGLINC90L7QstC+0Lkg0YHRgtGA0LDQvdC40YbRiyDRgdC/0LjRgdC60LAuINCn0LXRgNC90L7QstC40LrQuCwg0LrQvtGC0L7RgNGL0LUg0YPQttC1INC10YHRgtGMINCyINGB0L/QuNGB0LrQtSwg0YHQvtGF0YDQsNC90Y/RjtGCINGA0LDRgdC60YDRi9GC0LjQtSDQuCDQv9C+0LvQvdGL0LUg0LTQsNC90L3Ri9C1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zINCi0LXQutGD0YnQuNC1INGN0LvQtdC80LXQvdGC0Ysg0YHQv9C40YHQutCwLlxuICAgICAqIEBwYXJhbSBkcmFmdHMg0KfQtdGA0L3QvtCy0LjQutC4INC90L7QstC+0Lkg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21QYWdlKGl0ZW1zOiBTY0lEcmFmdExpc3RJdGVtW10sIGRyYWZ0czogU2NPcmRlckRyYWZ0U2hvcnRbXSk6IFNjSURyYWZ0TGlzdEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBkcmFmdHMubWFwKChzaG9ydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zLmZpbmQoKHsgb3JkZXIgfSkgPT4gb3JkZXIuaWQgPT09IHNob3J0LmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPyBTY0RyYWZ0TGlzdEhlbHBlci51cGRhdGUoaXRlbSwgc2hvcnQpIDogeyBvcmRlcjogc2hvcnQsIGlzRXhwYW5kZWQ6IGZhbHNlIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDRgSDQvtCx0L3QvtCy0LvRkdC90L3Ri9C80Lgg0LrRgNCw0YLQutC40LzQuCDQtNCw0L3QvdGL0LzQuCDQv9C+0LvRg9GH0LXQvdC90YvRhSDRh9C10YDQvdC+0LLQuNC60L7Qsiwg0YHQvtGB0YLQsNCyINC4INC/0L7RgNGP0LTQvtC6INGB0L/QuNGB0LrQsCDQvdC1INC80LXQvdGP0Y7RgtGB0Y8uXG4gICAgICog0J/QvtC70L3Ri9C1INC00LDQvdC90YvQtSDRgNCw0YHQutGA0YvRgtGL0YUg0YfQtdGA0L3QvtCy0LjQutC+0LIg0L3QtSDQvNC10L3Rj9GO0YLRgdGPOiDQuNGFINC+0LHQvdC+0LLQu9GP0LXRgiDQutGN0Ygg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zINCi0LXQutGD0YnQuNC1INGN0LvQtdC80LXQvdGC0Ysg0YHQv9C40YHQutCwLlxuICAgICAqIEBwYXJhbSBkcmFmdHMg0J/QvtC70YPRh9C10L3QvdGL0LUg0LrRgNCw0YLQutC40LUg0LTQsNC90L3Ri9C1INGH0LXRgNC90L7QstC40LrQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbWVyZ2UoaXRlbXM6IFNjSURyYWZ0TGlzdEl0ZW1bXSwgZHJhZnRzOiBTY09yZGVyRHJhZnRTaG9ydFtdKTogU2NJRHJhZnRMaXN0SXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvcnQgPSBkcmFmdHMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gaXRlbS5vcmRlci5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBzaG9ydCA/IFNjRHJhZnRMaXN0SGVscGVyLnVwZGF0ZShpdGVtLCBzaG9ydCkgOiBpdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LzQtdGA0LAg0YfQtdGA0L3QvtCy0LjQutC+0LIg0YEg0L/QvtC70L3Ri9C80Lgg0LTQsNC90L3Ri9C80LgsINGDINC60L7RgtC+0YDRi9GFINC60YDQsNGC0LrQuNC1INC00LDQvdC90YvQtSDQvtGC0LvQuNGH0LDRjtGC0YHRjzog0L3QsNC30LLQsNC90LjQtSDQuNC70Lgg0LTQsNC90L3Ri9C1INCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyDQotC10LrRg9GJ0LjQtSDRjdC70LXQvNC10L3RgtGLINGB0L/QuNGB0LrQsC5cbiAgICAgKiBAcGFyYW0gZHJhZnRzINCf0L7Qu9GD0YfQtdC90L3Ri9C1INC60YDQsNGC0LrQuNC1INC00LDQvdC90YvQtSDRh9C10YDQvdC+0LLQuNC60L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldENoYW5nZWRGdWxsRHJhZnRJZHMoaXRlbXM6IFNjSURyYWZ0TGlzdEl0ZW1bXSwgZHJhZnRzOiBTY09yZGVyRHJhZnRTaG9ydFtdKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgb3JkZXIgfSkgPT4gb3JkZXIgaW5zdGFuY2VvZiBTY09yZGVyRHJhZnQpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG9yZGVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCA9IGRyYWZ0cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBvcmRlci5pZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNob3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1NhbWVBY3R1YWxpemF0aW9uID0gc2hvcnQuYWN0dWFsaXphdGlvbiA/IHNob3J0LmFjdHVhbGl6YXRpb24uaXNTYW1lQXMob3JkZXIuYWN0dWFsaXphdGlvbikgOiBvcmRlci5hY3R1YWxpemF0aW9uID09PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvcnQubmFtZSAhPT0gb3JkZXIubmFtZSB8fCAhaXNTYW1lQWN0dWFsaXphdGlvbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKCh7IG9yZGVyIH0pID0+IG9yZGVyLmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0Y3Qu9C10LzQtdC90YIg0YHQv9C40YHQutCwINC60YDQsNGC0LrQuNC80Lgg0LTQsNC90L3Ri9C80Lgg0YfQtdGA0L3QvtCy0LjQutCwLiDQn9C+0LvQvdGL0LUg0LTQsNC90L3Ri9C1INGH0LXRgNC90L7QstC40LrQsCDQvdC1INC30LDQvNC10L3Rj9GO0YLRgdGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0K3Qu9C10LzQtdC90YIg0YHQv9C40YHQutCwLlxuICAgICAqIEBwYXJhbSBzaG9ydCDQmtGA0LDRgtC60LjQtSDQtNCw0L3QvdGL0LUg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHVwZGF0ZShpdGVtOiBTY0lEcmFmdExpc3RJdGVtLCBzaG9ydDogU2NPcmRlckRyYWZ0U2hvcnQpOiBTY0lEcmFmdExpc3RJdGVtIHtcbiAgICAgICAgaWYgKCEoaXRlbS5vcmRlciBpbnN0YW5jZW9mIFNjT3JkZXJEcmFmdCkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgaXRlbS5vcmRlciA9IHNob3J0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1kcmFmdC1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvZHJhZnQvbW9kZWxzL3NjLWktZHJhZnQtbGlzdC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY09yZGVyRHJhZnQsIFNjT3JkZXJEcmFmdFNob3J0IH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbi8qKlxuICog0JTQsNC90L3Ri9C1INC+0LEg0Y3Qu9C10LzQtdC90YLQtSDRgdC/0LjRgdC60LAg0YfQtdGA0L3QvtCy0LjQutC+0LIg0LfQsNC60LDQt9C+0LIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJRHJhZnRMaXN0SXRlbSB7XG4gICAgLyoqXG4gICAgICog0JrRgNCw0YLQutC40LUg0LjQu9C4INC/0L7Qu9C90YvQtSDQtNCw0L3QvdGL0LUg0L4g0YfQtdGA0L3QvtCy0LjQutC1INC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBvcmRlcjogU2NPcmRlckRyYWZ0IHwgU2NPcmRlckRyYWZ0U2hvcnQ7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGH0LXRgNC90L7QstC40Log0YDQsNGB0LrRgNGL0YIg0LIg0YHQv9C40YHQutC1LlxuICAgICAqL1xuICAgIGlzRXhwYW5kZWQ6IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, computed, inject, input, output } from '@angular/core';
3
+ import { SC_URLS } from '@snabcentr/client-core';
4
+ import { TuiButton, TuiLink, TuiLoader, TuiNotification } from '@taiga-ui/core';
5
+ import { ScFormatDatePipe } from '../../../../pipes/sc-format-date';
6
+ import { ScProfstroyDraftState } from '../enums/sc-profstroy-draft-state';
7
+ import { ScProfstroyDraftHelper } from '../helpers/sc-profstroy-draft-helper';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Компонент панели состояния актуализации черновика Профстрой с действиями актуализации и пересборки.
11
+ */
12
+ export class ScProfstroyActualizationPanelComponent {
13
+ constructor() {
14
+ /**
15
+ * Список ссылок приложения.
16
+ */
17
+ this.urls = inject(SC_URLS);
18
+ /**
19
+ * Объект документа.
20
+ */
21
+ this.document = inject(DOCUMENT);
22
+ /**
23
+ * Черновик Профстрой.
24
+ */
25
+ this.draft = input.required();
26
+ /**
27
+ * Момент, на который определяется состояние. Передаётся снаружи и обновляется по таймеру проверки срока, иначе метка «Данные устарели» не сменится.
28
+ */
29
+ this.now = input.required();
30
+ /**
31
+ * Признак, что действия над черновиком недоступны.
32
+ */
33
+ this.busy = input(false);
34
+ /**
35
+ * Событие запуска актуализации.
36
+ */
37
+ this.actualize = output();
38
+ /**
39
+ * Событие запуска пересборки из файла.
40
+ */
41
+ this.reload = output();
42
+ /**
43
+ * Текущее состояние черновика.
44
+ */
45
+ this.state = computed(() => ScProfstroyDraftHelper.getState(this.draft().actualization, this.now()));
46
+ /**
47
+ * Данные об отображении состояния.
48
+ */
49
+ this.stateView = computed(() => ScProfstroyDraftHelper.getPanelView(this.draft(), this.now()));
50
+ /**
51
+ * Признак, что выполняется обработка.
52
+ */
53
+ this.isProcessing = computed(() => this.state() === ScProfstroyDraftState.processing);
54
+ /**
55
+ * Признак, что срок действия актуализации ещё не истёк.
56
+ */
57
+ this.isActual = computed(() => this.state() === ScProfstroyDraftState.actual);
58
+ /**
59
+ * Абсолютная ссылка на исходный файл заявки. Файл лежит на хосте API, адрес API может быть указан относительно сайта.
60
+ */
61
+ this.fileUrl = computed(() => {
62
+ const url = this.draft().file?.url;
63
+ return url ? new URL(url, new URL(this.urls.apiUrl, this.document.baseURI)).href : null;
64
+ });
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyActualizationPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScProfstroyActualizationPanelComponent, isStandalone: true, selector: "sc-profstroy-actualization-panel", inputs: { draft: { classPropertyName: "draft", publicName: "draft", isSignal: true, isRequired: true, transformFunction: null }, now: { classPropertyName: "now", publicName: "now", isSignal: true, isRequired: true, transformFunction: null }, busy: { classPropertyName: "busy", publicName: "busy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actualize: "actualize", reload: "reload" }, ngImport: i0, template: "@let actualization = draft().actualization;\n@let view = stateView();\n\n<tui-notification\n [appearance]=\"view.appearance\"\n size=\"m\"\n>\n <div class=\"flex flex-col items-start gap-2 text-start\">\n <div class=\"flex items-center justify-start gap-2 text-start font-bold\">\n @if (isProcessing()) {\n <tui-loader size=\"s\" />\n }\n {{ view.label }}\n </div>\n\n <div class=\"flex flex-col items-start gap-1\">\n @if (actualization?.actualizedAt; as actualizedAt) {\n <span>\u0410\u043A\u0442\u0443\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D {{ actualizedAt | scFormatDate }}</span>\n }\n @if (isActual() && actualization?.expiresAt; as expiresAt) {\n <span>\u0410\u043A\u0442\u0443\u0430\u043B\u0435\u043D \u0434\u043E {{ expiresAt | scFormatDate }}</span>\n }\n @if (view.description) {\n <span>{{ view.description }}</span>\n }\n @if (actualization?.error; as error) {\n <span class=\"font-bold\">{{ error }}</span>\n }\n @if (fileUrl(); as url) {\n <span>\n \u0424\u0430\u0439\u043B \u0437\u0430\u044F\u0432\u043A\u0438:\n <a\n tuiLink\n [href]=\"url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"break-all\"\n >\n {{ draft().file?.originalName ?? '\u0441\u043A\u0430\u0447\u0430\u0442\u044C' }}\n </a>\n </span>\n }\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <button\n tuiButton\n type=\"button\"\n size=\"s\"\n appearance=\"secondary\"\n iconStart=\"@tui.refresh-cw\"\n [disabled]=\"isProcessing() || busy()\"\n (click)=\"actualize.emit()\"\n >\n \u0410\u043A\u0442\u0443\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C\n </button>\n <button\n tuiButton\n type=\"button\"\n size=\"s\"\n appearance=\"secondary\"\n iconStart=\"@tui.file-up\"\n [disabled]=\"isProcessing() || busy()\"\n (click)=\"reload.emit()\"\n >\n \u0421\u043E\u0431\u0440\u0430\u0442\u044C \u0437\u0430\u043D\u043E\u0432\u043E \u0438\u0437 \u0444\u0430\u0439\u043B\u0430\n </button>\n </div>\n </div>\n</tui-notification>\n", dependencies: [{ kind: "directive", type: TuiNotification, selector: "tui-notification,a[tuiNotification],button[tuiNotification]", inputs: ["appearance", "icon", "size"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "pipe", type: ScFormatDatePipe, name: "scFormatDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyActualizationPanelComponent, decorators: [{
70
+ type: Component,
71
+ args: [{ standalone: true, selector: 'sc-profstroy-actualization-panel', imports: [TuiNotification, TuiLoader, TuiButton, TuiLink, ScFormatDatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let actualization = draft().actualization;\n@let view = stateView();\n\n<tui-notification\n [appearance]=\"view.appearance\"\n size=\"m\"\n>\n <div class=\"flex flex-col items-start gap-2 text-start\">\n <div class=\"flex items-center justify-start gap-2 text-start font-bold\">\n @if (isProcessing()) {\n <tui-loader size=\"s\" />\n }\n {{ view.label }}\n </div>\n\n <div class=\"flex flex-col items-start gap-1\">\n @if (actualization?.actualizedAt; as actualizedAt) {\n <span>\u0410\u043A\u0442\u0443\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D {{ actualizedAt | scFormatDate }}</span>\n }\n @if (isActual() && actualization?.expiresAt; as expiresAt) {\n <span>\u0410\u043A\u0442\u0443\u0430\u043B\u0435\u043D \u0434\u043E {{ expiresAt | scFormatDate }}</span>\n }\n @if (view.description) {\n <span>{{ view.description }}</span>\n }\n @if (actualization?.error; as error) {\n <span class=\"font-bold\">{{ error }}</span>\n }\n @if (fileUrl(); as url) {\n <span>\n \u0424\u0430\u0439\u043B \u0437\u0430\u044F\u0432\u043A\u0438:\n <a\n tuiLink\n [href]=\"url\"\n target=\"_blank\"\n rel=\"noopener\"\n class=\"break-all\"\n >\n {{ draft().file?.originalName ?? '\u0441\u043A\u0430\u0447\u0430\u0442\u044C' }}\n </a>\n </span>\n }\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <button\n tuiButton\n type=\"button\"\n size=\"s\"\n appearance=\"secondary\"\n iconStart=\"@tui.refresh-cw\"\n [disabled]=\"isProcessing() || busy()\"\n (click)=\"actualize.emit()\"\n >\n \u0410\u043A\u0442\u0443\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C\n </button>\n <button\n tuiButton\n type=\"button\"\n size=\"s\"\n appearance=\"secondary\"\n iconStart=\"@tui.file-up\"\n [disabled]=\"isProcessing() || busy()\"\n (click)=\"reload.emit()\"\n >\n \u0421\u043E\u0431\u0440\u0430\u0442\u044C \u0437\u0430\u043D\u043E\u0432\u043E \u0438\u0437 \u0444\u0430\u0439\u043B\u0430\n </button>\n </div>\n </div>\n</tui-notification>\n" }]
72
+ }] });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWFjdHVhbGl6YXRpb24tcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL2RyYWZ0L3Byb2ZzdHJveS9hY3R1YWxpemF0aW9uLXBhbmVsL3NjLXByb2ZzdHJveS1hY3R1YWxpemF0aW9uLXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvYWN0dWFsaXphdGlvbi1wYW5lbC9zYy1wcm9mc3Ryb3ktYWN0dWFsaXphdGlvbi1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBRTlFOztHQUVHO0FBUUgsTUFBTSxPQUFPLHNDQUFzQztJQVBuRDtRQVFJOztXQUVHO1FBQ2MsU0FBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4Qzs7V0FFRztRQUNjLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0M7O1dBRUc7UUFDYSxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZ0IsQ0FBQztRQUV2RDs7V0FFRztRQUNhLFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFRLENBQUM7UUFFN0M7O1dBRUc7UUFDYSxTQUFJLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRTdDOztXQUVHO1FBQ2EsY0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRXJDOztXQUVHO1FBQ2EsV0FBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2dCLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuSDs7V0FFRztRQUNnQixjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU3Rzs7V0FFRztRQUNnQixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUsscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEc7O1dBRUc7UUFDZ0IsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUsscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUY7O1dBRUc7UUFDZ0IsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFFbkMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7S0FDTjsrR0FoRVksc0NBQXNDO21HQUF0QyxzQ0FBc0MsNGZDbkJuRCwwdEZBc0VBLDRDRHREYyxlQUFlLGdKQUFFLFNBQVMsaUlBQUUsU0FBUyxvSUFBRSxPQUFPLHVGQUFFLGdCQUFnQjs7NEZBR2pFLHNDQUFzQztrQkFQbEQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0NBQWtDLFdBRW5DLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLG1CQUMxRCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU0NfVVJMUywgU2NPcmRlckRyYWZ0IH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b24sIFR1aUxpbmssIFR1aUxvYWRlciwgVHVpTm90aWZpY2F0aW9uIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuXG5pbXBvcnQgeyBTY0Zvcm1hdERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvc2MtZm9ybWF0LWRhdGUnO1xuaW1wb3J0IHsgU2NQcm9mc3Ryb3lEcmFmdFN0YXRlIH0gZnJvbSAnLi4vZW51bXMvc2MtcHJvZnN0cm95LWRyYWZ0LXN0YXRlJztcbmltcG9ydCB7IFNjUHJvZnN0cm95RHJhZnRIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3NjLXByb2ZzdHJveS1kcmFmdC1oZWxwZXInO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQv9Cw0L3QtdC70Lgg0YHQvtGB0YLQvtGP0L3QuNGPINCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuCDRh9C10YDQvdC+0LLQuNC60LAg0J/RgNC+0YTRgdGC0YDQvtC5INGBINC00LXQudGB0YLQstC40Y/QvNC4INCw0LrRgtGD0LDQu9C40LfQsNGG0LjQuCDQuCDQv9C10YDQtdGB0LHQvtGA0LrQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLXByb2ZzdHJveS1hY3R1YWxpemF0aW9uLXBhbmVsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtcHJvZnN0cm95LWFjdHVhbGl6YXRpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtUdWlOb3RpZmljYXRpb24sIFR1aUxvYWRlciwgVHVpQnV0dG9uLCBUdWlMaW5rLCBTY0Zvcm1hdERhdGVQaXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcm9mc3Ryb3lBY3R1YWxpemF0aW9uUGFuZWxDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGK0LXQutGCINC00L7QutGD0LzQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAgIC8qKlxuICAgICAqINCn0LXRgNC90L7QstC40Log0J/RgNC+0YTRgdGC0YDQvtC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkcmFmdCA9IGlucHV0LnJlcXVpcmVkPFNjT3JkZXJEcmFmdD4oKTtcblxuICAgIC8qKlxuICAgICAqINCc0L7QvNC10L3Rgiwg0L3QsCDQutC+0YLQvtGA0YvQuSDQvtC/0YDQtdC00LXQu9GP0LXRgtGB0Y8g0YHQvtGB0YLQvtGP0L3QuNC1LiDQn9C10YDQtdC00LDRkdGC0YHRjyDRgdC90LDRgNGD0LbQuCDQuCDQvtCx0L3QvtCy0LvRj9C10YLRgdGPINC/0L4g0YLQsNC50LzQtdGA0YMg0L/RgNC+0LLQtdGA0LrQuCDRgdGA0L7QutCwLCDQuNC90LDRh9C1INC80LXRgtC60LAgwqvQlNCw0L3QvdGL0LUg0YPRgdGC0LDRgNC10LvQuMK7INC90LUg0YHQvNC10L3QuNGC0YHRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbm93ID0gaW5wdXQucmVxdWlyZWQ8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LTQtdC50YHRgtCy0LjRjyDQvdCw0LQg0YfQtdGA0L3QvtCy0LjQutC+0Lwg0L3QtdC00L7RgdGC0YPQv9C90YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGJ1c3kgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQt9Cw0L/Rg9GB0LrQsCDQsNC60YLRg9Cw0LvQuNC30LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdHVhbGl6ZSA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0LfQsNC/0YPRgdC60LAg0L/QtdGA0LXRgdCx0L7RgNC60Lgg0LjQtyDRhNCw0LnQu9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZWxvYWQgPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCi0LXQutGD0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtSDRh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gU2NQcm9mc3Ryb3lEcmFmdEhlbHBlci5nZXRTdGF0ZSh0aGlzLmRyYWZ0KCkuYWN0dWFsaXphdGlvbiwgdGhpcy5ub3coKSkpO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+0LEg0L7RgtC+0LHRgNCw0LbQtdC90LjQuCDRgdC+0YHRgtC+0Y/QvdC40Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXRlVmlldyA9IGNvbXB1dGVkKCgpID0+IFNjUHJvZnN0cm95RHJhZnRIZWxwZXIuZ2V0UGFuZWxWaWV3KHRoaXMuZHJhZnQoKSwgdGhpcy5ub3coKSkpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC+0LHRgNCw0LHQvtGC0LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNQcm9jZXNzaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpID09PSBTY1Byb2ZzdHJveURyYWZ0U3RhdGUucHJvY2Vzc2luZyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGB0YDQvtC6INC00LXQudGB0YLQstC40Y8g0LDQutGC0YPQsNC70LjQt9Cw0YbQuNC4INC10YnRkSDQvdC1INC40YHRgtGR0LouXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQWN0dWFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpID09PSBTY1Byb2ZzdHJveURyYWZ0U3RhdGUuYWN0dWFsKTtcblxuICAgIC8qKlxuICAgICAqINCQ0LHRgdC+0LvRjtGC0L3QsNGPINGB0YHRi9C70LrQsCDQvdCwINC40YHRhdC+0LTQvdGL0Lkg0YTQsNC50Lsg0LfQsNGP0LLQutC4LiDQpNCw0LnQuyDQu9C10LbQuNGCINC90LAg0YXQvtGB0YLQtSBBUEksINCw0LTRgNC10YEgQVBJINC80L7QttC10YIg0LHRi9GC0Ywg0YPQutCw0LfQsNC9INC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDRgdCw0LnRgtCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWxlVXJsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmRyYWZ0KCkuZmlsZT8udXJsO1xuXG4gICAgICAgIHJldHVybiB1cmwgPyBuZXcgVVJMKHVybCwgbmV3IFVSTCh0aGlzLnVybHMuYXBpVXJsLCB0aGlzLmRvY3VtZW50LmJhc2VVUkkpKS5ocmVmIDogbnVsbDtcbiAgICB9KTtcbn1cbiIsIkBsZXQgYWN0dWFsaXphdGlvbiA9IGRyYWZ0KCkuYWN0dWFsaXphdGlvbjtcbkBsZXQgdmlldyA9IHN0YXRlVmlldygpO1xuXG48dHVpLW5vdGlmaWNhdGlvblxuICAgIFthcHBlYXJhbmNlXT1cInZpZXcuYXBwZWFyYW5jZVwiXG4gICAgc2l6ZT1cIm1cIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC0yIHRleHQtc3RhcnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTIgdGV4dC1zdGFydCBmb250LWJvbGRcIj5cbiAgICAgICAgICAgIEBpZiAoaXNQcm9jZXNzaW5nKCkpIHtcbiAgICAgICAgICAgICAgICA8dHVpLWxvYWRlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7eyB2aWV3LmxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGdhcC0xXCI+XG4gICAgICAgICAgICBAaWYgKGFjdHVhbGl6YXRpb24/LmFjdHVhbGl6ZWRBdDsgYXMgYWN0dWFsaXplZEF0KSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+0JDQutGC0YPQsNC70LjQt9C40YDQvtCy0LDQvSB7eyBhY3R1YWxpemVkQXQgfCBzY0Zvcm1hdERhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGlzQWN0dWFsKCkgJiYgYWN0dWFsaXphdGlvbj8uZXhwaXJlc0F0OyBhcyBleHBpcmVzQXQpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj7QkNC60YLRg9Cw0LvQtdC9INC00L4ge3sgZXhwaXJlc0F0IHwgc2NGb3JtYXREYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICh2aWV3LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmlldy5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYWN0dWFsaXphdGlvbj8uZXJyb3I7IGFzIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBlcnJvciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZmlsZVVybCgpOyBhcyB1cmwpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAg0KTQsNC50Lsg0LfQsNGP0LLQutC4OlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJyZWFrLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRyYWZ0KCkuZmlsZT8ub3JpZ2luYWxOYW1lID8/ICfRgdC60LDRh9Cw0YLRjCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkucmVmcmVzaC1jd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZygpIHx8IGJ1c3koKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdHVhbGl6ZS5lbWl0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCQ0LrRgtGD0LDQu9C40LfQuNGA0L7QstCw0YLRjFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuZmlsZS11cFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZygpIHx8IGJ1c3koKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbG9hZC5lbWl0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCh0L7QsdGA0LDRgtGMINC30LDQvdC+0LLQviDQuNC3INGE0LDQudC70LBcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdHVpLW5vdGlmaWNhdGlvbj5cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
+ import { TuiBadge } from '@taiga-ui/kit';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Компонент метки «Профстрой» у черновика или заказа, созданного из файла программы «Профстрой».
6
+ */
7
+ export class ScProfstroyBadgeComponent {
8
+ constructor() {
9
+ /**
10
+ * Размер метки.
11
+ */
12
+ this.size = input('m');
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ScProfstroyBadgeComponent, isStandalone: true, selector: "sc-profstroy-badge", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<tui-badge\n class=\"!font-medium\"\n appearance=\"primary\"\n [size]=\"size()\"\n>\n \u041F\u0440\u043E\u0444\u0441\u0442\u0440\u043E\u0439\n</tui-badge>\n", dependencies: [{ kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyBadgeComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ standalone: true, selector: 'sc-profstroy-badge', imports: [TuiBadge], changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-badge\n class=\"!font-medium\"\n appearance=\"primary\"\n [size]=\"size()\"\n>\n \u041F\u0440\u043E\u0444\u0441\u0442\u0440\u043E\u0439\n</tui-badge>\n" }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWJhZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvYmFkZ2Uvc2MtcHJvZnN0cm95LWJhZGdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvYmFkZ2Uvc2MtcHJvZnN0cm95LWJhZGdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXpDOztHQUVHO0FBUUgsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFJOztXQUVHO1FBQ2EsU0FBSSxHQUFHLEtBQUssQ0FBWSxHQUFHLENBQUMsQ0FBQztLQUNoRDsrR0FMWSx5QkFBeUI7bUdBQXpCLHlCQUF5QiwrTUNidEMsMEtBT0EsNENER2MsUUFBUTs7NEZBR1QseUJBQXlCO2tCQVByQyxTQUFTO2lDQUNNLElBQUksWUFDTixvQkFBb0IsV0FFckIsQ0FBQyxRQUFRLENBQUMsbUJBQ0YsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUdWlCYWRnZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQvNC10YLQutC4IMKr0J/RgNC+0YTRgdGC0YDQvtC5wrsg0YMg0YfQtdGA0L3QvtCy0LjQutCwINC40LvQuCDQt9Cw0LrQsNC30LAsINGB0L7Qt9C00LDQvdC90L7Qs9C+INC40Lcg0YTQsNC50LvQsCDQv9GA0L7Qs9GA0LDQvNC80YsgwqvQn9GA0L7RhNGB0YLRgNC+0LnCuy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLXByb2ZzdHJveS1iYWRnZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXByb2ZzdHJveS1iYWRnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1R1aUJhZGdlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NQcm9mc3Ryb3lCYWRnZUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0KDQsNC30LzQtdGAINC80LXRgtC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNpemUgPSBpbnB1dDwncycgfCAnbSc+KCdtJyk7XG59XG4iLCI8dHVpLWJhZGdlXG4gICAgY2xhc3M9XCIhZm9udC1tZWRpdW1cIlxuICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICBbc2l6ZV09XCJzaXplKClcIlxuPlxuICAgINCf0YDQvtGE0YHRgtGA0L7QuVxuPC90dWktYmFkZ2U+XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
+ import { TuiBadge } from '@taiga-ui/kit';
3
+ import { ScProfstroyBadgeComponent } from '../badge/sc-profstroy-badge.component';
4
+ import { ScProfstroyDraftHelper } from '../helpers/sc-profstroy-draft-helper';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Компонент меток черновика Профстрой: признак и текущее состояние обработки.
8
+ */
9
+ export class ScProfstroyDraftBadgesComponent {
10
+ constructor() {
11
+ /**
12
+ * Данные об актуализации черновика.
13
+ */
14
+ this.actualization = input();
15
+ /**
16
+ * Момент, на который определяется состояние. Передаётся снаружи и обновляется по таймеру проверки срока, иначе метка «Данные устарели» не сменится.
17
+ */
18
+ this.now = input.required();
19
+ /**
20
+ * Данные об отображении состояния.
21
+ */
22
+ this.stateView = computed(() => ScProfstroyDraftHelper.getStateView(this.actualization(), this.now()));
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyDraftBadgesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ScProfstroyDraftBadgesComponent, isStandalone: true, selector: "sc-profstroy-draft-badges", inputs: { actualization: { classPropertyName: "actualization", publicName: "actualization", isSignal: true, isRequired: false, transformFunction: null }, now: { classPropertyName: "now", publicName: "now", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<span class=\"inline-flex flex-wrap items-center gap-1\">\n <sc-profstroy-badge />\n <tui-badge\n class=\"!font-medium\"\n [appearance]=\"stateView().appearance\"\n size=\"m\"\n >\n {{ stateView().label }}\n </tui-badge>\n</span>\n", dependencies: [{ kind: "directive", type: TuiBadge, selector: "tui-badge,[tuiBadge]", inputs: ["size"] }, { kind: "component", type: ScProfstroyBadgeComponent, selector: "sc-profstroy-badge", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScProfstroyDraftBadgesComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ standalone: true, selector: 'sc-profstroy-draft-badges', imports: [TuiBadge, ScProfstroyBadgeComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"inline-flex flex-wrap items-center gap-1\">\n <sc-profstroy-badge />\n <tui-badge\n class=\"!font-medium\"\n [appearance]=\"stateView().appearance\"\n size=\"m\"\n >\n {{ stateView().label }}\n </tui-badge>\n</span>\n" }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZnN0cm95LWRyYWZ0LWJhZGdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvZHJhZnQvcHJvZnN0cm95L2JhZGdlcy9zYy1wcm9mc3Ryb3ktZHJhZnQtYmFkZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9kcmFmdC9wcm9mc3Ryb3kvYmFkZ2VzL3NjLXByb2ZzdHJveS1kcmFmdC1iYWRnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBRTlFOztHQUVHO0FBUUgsTUFBTSxPQUFPLCtCQUErQjtJQVA1QztRQVFJOztXQUVHO1FBQ2Esa0JBQWEsR0FBRyxLQUFLLEVBQXlDLENBQUM7UUFFL0U7O1dBRUc7UUFDYSxRQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBUSxDQUFDO1FBRTdDOztXQUVHO1FBQ2dCLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hIOytHQWZZLCtCQUErQjttR0FBL0IsK0JBQStCLGtXQ2pCNUMsaVJBVUEsNENESWMsUUFBUSxtRkFBRSx5QkFBeUI7OzRGQUdwQywrQkFBK0I7a0JBUDNDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLDJCQUEyQixXQUU1QixDQUFDLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxtQkFDN0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NPcmRlckRyYWZ0QWN0dWFsaXphdGlvbiB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQmFkZ2UgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcblxuaW1wb3J0IHsgU2NQcm9mc3Ryb3lCYWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2JhZGdlL3NjLXByb2ZzdHJveS1iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2NQcm9mc3Ryb3lEcmFmdEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvc2MtcHJvZnN0cm95LWRyYWZ0LWhlbHBlcic7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC80LXRgtC+0Log0YfQtdGA0L3QvtCy0LjQutCwINCf0YDQvtGE0YHRgtGA0L7QuTog0L/RgNC40LfQvdCw0Log0Lgg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC+0LHRgNCw0LHQvtGC0LrQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLXByb2ZzdHJveS1kcmFmdC1iYWRnZXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1wcm9mc3Ryb3ktZHJhZnQtYmFkZ2VzLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbVHVpQmFkZ2UsIFNjUHJvZnN0cm95QmFkZ2VDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1Byb2ZzdHJveURyYWZ0QmFkZ2VzQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L7QsSDQsNC60YLRg9Cw0LvQuNC30LDRhtC40Lgg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhY3R1YWxpemF0aW9uID0gaW5wdXQ8U2NPcmRlckRyYWZ0QWN0dWFsaXphdGlvbiB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCc0L7QvNC10L3Rgiwg0L3QsCDQutC+0YLQvtGA0YvQuSDQvtC/0YDQtdC00LXQu9GP0LXRgtGB0Y8g0YHQvtGB0YLQvtGP0L3QuNC1LiDQn9C10YDQtdC00LDRkdGC0YHRjyDRgdC90LDRgNGD0LbQuCDQuCDQvtCx0L3QvtCy0LvRj9C10YLRgdGPINC/0L4g0YLQsNC50LzQtdGA0YMg0L/RgNC+0LLQtdGA0LrQuCDRgdGA0L7QutCwLCDQuNC90LDRh9C1INC80LXRgtC60LAgwqvQlNCw0L3QvdGL0LUg0YPRgdGC0LDRgNC10LvQuMK7INC90LUg0YHQvNC10L3QuNGC0YHRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbm93ID0gaW5wdXQucmVxdWlyZWQ8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQvtCxINC+0YLQvtCx0YDQsNC20LXQvdC40Lgg0YHQvtGB0YLQvtGP0L3QuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGF0ZVZpZXcgPSBjb21wdXRlZCgoKSA9PiBTY1Byb2ZzdHJveURyYWZ0SGVscGVyLmdldFN0YXRlVmlldyh0aGlzLmFjdHVhbGl6YXRpb24oKSwgdGhpcy5ub3coKSkpO1xufVxuIiwiPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgPHNjLXByb2ZzdHJveS1iYWRnZSAvPlxuICAgIDx0dWktYmFkZ2VcbiAgICAgICAgY2xhc3M9XCIhZm9udC1tZWRpdW1cIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJzdGF0ZVZpZXcoKS5hcHBlYXJhbmNlXCJcbiAgICAgICAgc2l6ZT1cIm1cIlxuICAgID5cbiAgICAgICAge3sgc3RhdGVWaWV3KCkubGFiZWwgfX1cbiAgICA8L3R1aS1iYWRnZT5cbjwvc3Bhbj5cbiJdfQ==