@hitsoft/smart-warehouse 1.0.1

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 (120) hide show
  1. package/README.md +24 -0
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +12 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/providers/connector-params-route.provider.d.ts +8 -0
  6. package/config/providers/index.d.ts +7 -0
  7. package/config/providers/order-station-route.provider.d.ts +8 -0
  8. package/config/providers/orders-route.provider.d.ts +8 -0
  9. package/config/providers/quantity-correction-route.provider.d.ts +8 -0
  10. package/config/providers/route.provider.d.ts +8 -0
  11. package/config/providers/shelf-placement-route.provider.d.ts +8 -0
  12. package/config/providers/shelf-transfer-route.provider.d.ts +8 -0
  13. package/config/providers/shortages-route.provider.d.ts +8 -0
  14. package/config/providers/station.provider.d.ts +8 -0
  15. package/config/providers/stock-report.d.ts +8 -0
  16. package/config/public-api.d.ts +3 -0
  17. package/config/smart-warehouse-config.module.d.ts +8 -0
  18. package/esm2020/config/enums/index.mjs +2 -0
  19. package/esm2020/config/enums/route-names.mjs +2 -0
  20. package/esm2020/config/hitsoft-smart-warehouse-config.mjs +5 -0
  21. package/esm2020/config/providers/connector-params-route.provider.mjs +25 -0
  22. package/esm2020/config/providers/index.mjs +8 -0
  23. package/esm2020/config/providers/order-station-route.provider.mjs +25 -0
  24. package/esm2020/config/providers/orders-route.provider.mjs +25 -0
  25. package/esm2020/config/providers/quantity-correction-route.provider.mjs +25 -0
  26. package/esm2020/config/providers/route.provider.mjs +24 -0
  27. package/esm2020/config/providers/shelf-placement-route.provider.mjs +25 -0
  28. package/esm2020/config/providers/shelf-transfer-route.provider.mjs +25 -0
  29. package/esm2020/config/providers/shortages-route.provider.mjs +25 -0
  30. package/esm2020/config/providers/station.provider.mjs +25 -0
  31. package/esm2020/config/providers/stock-report.mjs +25 -0
  32. package/esm2020/config/public-api.mjs +4 -0
  33. package/esm2020/config/smart-warehouse-config.module.mjs +37 -0
  34. package/esm2020/hitsoft-smart-warehouse.mjs +5 -0
  35. package/esm2020/lib/components/connector-params/connector-params.component.mjs +182 -0
  36. package/esm2020/lib/components/connector-params/connector-params.module.mjs +41 -0
  37. package/esm2020/lib/components/order-station/order-station.component.mjs +160 -0
  38. package/esm2020/lib/components/order-station/order-station.module.mjs +57 -0
  39. package/esm2020/lib/components/orders/orders.component.mjs +445 -0
  40. package/esm2020/lib/components/orders/orders.module.mjs +75 -0
  41. package/esm2020/lib/components/quantity-correction/quantity-correction.component.mjs +231 -0
  42. package/esm2020/lib/components/quantity-correction/quantity-correction.module.mjs +41 -0
  43. package/esm2020/lib/components/shelf-placement/shelf-placement.component.mjs +297 -0
  44. package/esm2020/lib/components/shelf-placement/shelf-placement.module.mjs +66 -0
  45. package/esm2020/lib/components/shelf-transfer/shelf-transfer.component.mjs +146 -0
  46. package/esm2020/lib/components/shelf-transfer/shelf-transfer.module.mjs +41 -0
  47. package/esm2020/lib/components/shortages/shortages.component.mjs +75 -0
  48. package/esm2020/lib/components/shortages/shortages.module.mjs +42 -0
  49. package/esm2020/lib/components/smart-warehouse.component.mjs +18 -0
  50. package/esm2020/lib/components/stock-report/stock-report.component.mjs +29 -0
  51. package/esm2020/lib/components/stock-report/stock-report.module.mjs +42 -0
  52. package/esm2020/lib/guards/connector-params.guard.mjs +58 -0
  53. package/esm2020/lib/hit-proxy/connector-params/connector-params.service.mjs +27 -0
  54. package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.mjs +2 -0
  55. package/esm2020/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.mjs +62 -0
  56. package/esm2020/lib/hit-proxy/inventory/inventory.service.mjs +21 -0
  57. package/esm2020/lib/hit-proxy/order-station/order-station.service.mjs +18 -0
  58. package/esm2020/lib/hit-proxy/orders/model.mjs +2 -0
  59. package/esm2020/lib/hit-proxy/orders/order.service.mjs +81 -0
  60. package/esm2020/lib/hit-proxy/quantity-correction/quantity-correction.service.mjs +47 -0
  61. package/esm2020/lib/hit-proxy/shortages/model.mjs +2 -0
  62. package/esm2020/lib/hit-proxy/shortages/shortages.service.mjs +26 -0
  63. package/esm2020/lib/hit-proxy/stations/station.service.mjs +86 -0
  64. package/esm2020/lib/hit-proxy/stock-report/stock-report.service.mjs +22 -0
  65. package/esm2020/lib/hit-proxy/stock-transfer/stock-transfer.service.mjs +21 -0
  66. package/esm2020/lib/hit-proxy/warehouse/warehouse.service.mjs +65 -0
  67. package/esm2020/lib/services/smart-warehouse.service.mjs +21 -0
  68. package/esm2020/lib/smart-warehouse-routing.module.mjs +79 -0
  69. package/esm2020/lib/smart-warehouse.module.mjs +34 -0
  70. package/esm2020/lib/stations/station.component.mjs +43 -0
  71. package/esm2020/lib/stations/station.module.mjs +42 -0
  72. package/esm2020/public-api.mjs +20 -0
  73. package/fesm2015/hitsoft-smart-warehouse-config.mjs +264 -0
  74. package/fesm2015/hitsoft-smart-warehouse-config.mjs.map +1 -0
  75. package/fesm2015/hitsoft-smart-warehouse.mjs +2577 -0
  76. package/fesm2015/hitsoft-smart-warehouse.mjs.map +1 -0
  77. package/fesm2020/hitsoft-smart-warehouse-config.mjs +264 -0
  78. package/fesm2020/hitsoft-smart-warehouse-config.mjs.map +1 -0
  79. package/fesm2020/hitsoft-smart-warehouse.mjs +2515 -0
  80. package/fesm2020/hitsoft-smart-warehouse.mjs.map +1 -0
  81. package/index.d.ts +5 -0
  82. package/lib/components/connector-params/connector-params.component.d.ts +44 -0
  83. package/lib/components/connector-params/connector-params.module.d.ts +13 -0
  84. package/lib/components/order-station/order-station.component.d.ts +31 -0
  85. package/lib/components/order-station/order-station.module.d.ts +16 -0
  86. package/lib/components/orders/orders.component.d.ts +63 -0
  87. package/lib/components/orders/orders.module.d.ts +17 -0
  88. package/lib/components/quantity-correction/quantity-correction.component.d.ts +52 -0
  89. package/lib/components/quantity-correction/quantity-correction.module.d.ts +16 -0
  90. package/lib/components/shelf-placement/shelf-placement.component.d.ts +93 -0
  91. package/lib/components/shelf-placement/shelf-placement.module.d.ts +17 -0
  92. package/lib/components/shelf-transfer/shelf-transfer.component.d.ts +26 -0
  93. package/lib/components/shelf-transfer/shelf-transfer.module.d.ts +16 -0
  94. package/lib/components/shortages/shortages.component.d.ts +25 -0
  95. package/lib/components/shortages/shortages.module.d.ts +17 -0
  96. package/lib/components/smart-warehouse.component.d.ts +10 -0
  97. package/lib/components/stock-report/stock-report.component.d.ts +16 -0
  98. package/lib/components/stock-report/stock-report.module.d.ts +17 -0
  99. package/lib/guards/connector-params.guard.d.ts +21 -0
  100. package/lib/hit-proxy/connector-params/connector-params.service.d.ts +46 -0
  101. package/lib/hit-proxy/devexpress-query-builder/devexpress-load-options.model.d.ts +8 -0
  102. package/lib/hit-proxy/devexpress-query-builder/devexpress-query-builder.d.ts +17 -0
  103. package/lib/hit-proxy/inventory/inventory.service.d.ts +22 -0
  104. package/lib/hit-proxy/order-station/order-station.service.d.ts +24 -0
  105. package/lib/hit-proxy/orders/model.d.ts +74 -0
  106. package/lib/hit-proxy/orders/order.service.d.ts +26 -0
  107. package/lib/hit-proxy/quantity-correction/quantity-correction.service.d.ts +88 -0
  108. package/lib/hit-proxy/shortages/model.d.ts +17 -0
  109. package/lib/hit-proxy/shortages/shortages.service.d.ts +13 -0
  110. package/lib/hit-proxy/stations/station.service.d.ts +25 -0
  111. package/lib/hit-proxy/stock-report/stock-report.service.d.ts +12 -0
  112. package/lib/hit-proxy/stock-transfer/stock-transfer.service.d.ts +19 -0
  113. package/lib/hit-proxy/warehouse/warehouse.service.d.ts +59 -0
  114. package/lib/services/smart-warehouse.service.d.ts +10 -0
  115. package/lib/smart-warehouse-routing.module.d.ts +7 -0
  116. package/lib/smart-warehouse.module.d.ts +13 -0
  117. package/lib/stations/station.component.d.ts +14 -0
  118. package/lib/stations/station.module.d.ts +17 -0
  119. package/package.json +45 -0
  120. package/public-api.d.ts +16 -0
@@ -0,0 +1,297 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../hit-proxy/inventory/inventory.service";
4
+ import * as i2 from "../../hit-proxy/warehouse/warehouse.service";
5
+ import * as i3 from "@abp/ng.theme.shared";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "@angular/forms";
8
+ import * as i6 from "devextreme-angular";
9
+ import * as i7 from "devextreme-angular/ui/nested";
10
+ import * as i8 from "@abp/ng.components/page";
11
+ export class ShelfPlacementComponent {
12
+ constructor(inventoryService, warehouseService, toasterService) {
13
+ this.inventoryService = inventoryService;
14
+ this.warehouseService = warehouseService;
15
+ this.toasterService = toasterService;
16
+ this.barcode = '';
17
+ this.itemCode = '';
18
+ this.itemName = '';
19
+ this.batch = '';
20
+ this.selectedWarehouse = '';
21
+ this.shelf = '';
22
+ this.quantity = null;
23
+ this.operationType = 'entry';
24
+ this.isShelfFixed = false;
25
+ this.warehouses = [];
26
+ this.gridDataSource = [];
27
+ this.nextId = 1;
28
+ // Loading states
29
+ this.isLoadingWarehouses = false;
30
+ this.isLoadingShelf = false;
31
+ this.shelfAbsEntry = null;
32
+ // Grid button handler (arrow function to preserve context)
33
+ this.deleteRowHandler = (e) => {
34
+ if (e.event) {
35
+ e.event.preventDefault();
36
+ e.event.stopPropagation();
37
+ }
38
+ this.gridDataSource = this.gridDataSource.filter(item => item.id !== e.row.data.id);
39
+ };
40
+ }
41
+ ngOnInit() {
42
+ this.loadWarehouses();
43
+ }
44
+ ngAfterViewInit() {
45
+ // İlk açılışta raf alanına focus ver
46
+ setTimeout(() => {
47
+ this.shelfInputRef?.nativeElement?.focus();
48
+ }, 200);
49
+ }
50
+ /**
51
+ * Raf okutulduğunda çağrılır.
52
+ * BinCode üzerinden SAP'den AbsEntry bilgisini çeker.
53
+ * Focus'u barkod alanına geçirir.
54
+ */
55
+ onShelfScanned() {
56
+ if (!this.shelf?.trim()) {
57
+ return;
58
+ }
59
+ this.isLoadingShelf = true;
60
+ this.shelfAbsEntry = null;
61
+ this.warehouseService.getBinLocationByBinCode(this.shelf.trim()).subscribe({
62
+ next: (binLocation) => {
63
+ if (binLocation) {
64
+ this.shelfAbsEntry = binLocation.AbsEntry;
65
+ setTimeout(() => {
66
+ this.barcodeInputRef?.nativeElement?.focus();
67
+ }, 100);
68
+ }
69
+ else {
70
+ this.toasterService.warn(`"${this.shelf}" bin kodu ile eşleşen depo yeri bulunamadı.`);
71
+ }
72
+ this.isLoadingShelf = false;
73
+ },
74
+ error: (err) => {
75
+ console.error('Bin location arama hatası:', err);
76
+ this.toasterService.error('Depo yeri bilgisi SAP\'den alınamadı.');
77
+ this.isLoadingShelf = false;
78
+ }
79
+ });
80
+ }
81
+ /**
82
+ * Barkod okutulduğunda çağrılır.
83
+ * Kalem kodu ve parti bilgisini barkoddan parse eder.
84
+ * Focus'u miktar alanına geçirir.
85
+ */
86
+ onBarcodeScanned() {
87
+ if (!this.barcode?.trim()) {
88
+ return;
89
+ }
90
+ this.parseBarcodeAndFill(this.barcode.trim());
91
+ setTimeout(() => {
92
+ this.quantityInputRef?.nativeElement?.focus();
93
+ }, 100);
94
+ }
95
+ /**
96
+ * Barkodu parse eder ve kalem kodu ile parti alanlarını doldurur.
97
+ * İlk 13 karakter = ürün barkodu, 14. karakterden itibaren = parti numarası
98
+ */
99
+ parseBarcodeAndFill(barcodeValue) {
100
+ const productBarcode = barcodeValue.substring(0, 13);
101
+ const batchNumber = barcodeValue.length > 13 ? barcodeValue.substring(13) : '';
102
+ this.itemCode = '';
103
+ this.itemName = '';
104
+ // SAP'den barkod ile kalem bilgisi getir
105
+ this.warehouseService.getItemByBarcode(productBarcode).subscribe({
106
+ next: (itemInfo) => {
107
+ if (itemInfo) {
108
+ this.itemCode = itemInfo.ItemCode || '';
109
+ this.itemName = itemInfo.ItemName || '';
110
+ this.batch = batchNumber;
111
+ }
112
+ else {
113
+ this.itemCode = '';
114
+ this.itemName = '';
115
+ this.toasterService.warn(`Barkod "${productBarcode}" ile eşleşen kalem bulunamadı.`);
116
+ }
117
+ },
118
+ error: (err) => {
119
+ console.error('Barkod ile kalem arama hatası:', err);
120
+ this.itemCode = '';
121
+ this.itemName = '';
122
+ this.toasterService.error('Barkod ile kalem bilgisi SAP\'den alınamadı.');
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * Kalem koduna göre SAP'den kalem adını çeker.
128
+ */
129
+ fetchItemNameFromSAP(itemCode) {
130
+ if (!itemCode?.trim()) {
131
+ this.itemName = '';
132
+ return;
133
+ }
134
+ this.warehouseService.getItemNameByCode(itemCode.trim()).subscribe({
135
+ next: (itemName) => {
136
+ this.itemName = itemName || '';
137
+ },
138
+ error: (err) => {
139
+ console.error('Kalem adı alınamadı:', err);
140
+ this.itemName = '';
141
+ this.toasterService.error('Kalem adı SAP\'den alınamadı.');
142
+ }
143
+ });
144
+ }
145
+ /**
146
+ * Depo seçimi değiştiğinde çağrılır.
147
+ * Seçilen depoya ait depo yerlerini (bin locations) yükler.
148
+ */
149
+ onWarehouseChanged() {
150
+ this.shelf = '';
151
+ }
152
+ /**
153
+ * Ekle butonuna basıldığında çağrılır.
154
+ * Form verilerini grid'e ekler.
155
+ */
156
+ onAdd() {
157
+ if (!this.itemCode?.trim() || !this.selectedWarehouse?.trim() || !this.shelf?.trim() || !this.quantity) {
158
+ this.toasterService.warn('Kalem kodu, depo, raf ve miktar alanları zorunludur.');
159
+ return;
160
+ }
161
+ if (!this.shelfAbsEntry) {
162
+ this.toasterService.warn('Raf için geçerli bir AbsEntry bulunamadı. Lütfen rafı tekrar okutun.');
163
+ return;
164
+ }
165
+ const newItem = {
166
+ id: this.nextId++,
167
+ barcode: this.barcode.trim(),
168
+ itemCode: this.itemCode.trim(),
169
+ itemName: this.itemName.trim(),
170
+ batch: this.batch.trim(),
171
+ warehouse: this.selectedWarehouse.trim(),
172
+ shelf: this.shelf.trim(),
173
+ shelfAbsEntry: this.shelfAbsEntry,
174
+ quantity: this.quantity,
175
+ };
176
+ this.gridDataSource = [...this.gridDataSource, newItem];
177
+ // Alanları temizle (raf sabit değilse)
178
+ if (!this.isShelfFixed) {
179
+ this.onClear();
180
+ }
181
+ else {
182
+ // Raf sabit ise sadece barkod, kalem kodu, kalem adı, parti ve miktarı temizle (depo ve raf kalır)
183
+ this.barcode = '';
184
+ this.itemCode = '';
185
+ this.itemName = '';
186
+ this.batch = '';
187
+ this.quantity = null;
188
+ // Raf sabit ise focus barkod alanına dönsün
189
+ setTimeout(() => {
190
+ this.barcodeInputRef?.nativeElement?.focus();
191
+ }, 100);
192
+ }
193
+ }
194
+ /**
195
+ * Kaydet butonuna basıldığında çağrılır.
196
+ * Grid'deki tüm verileri toplu olarak kaydeder.
197
+ */
198
+ onSave() {
199
+ if (this.gridDataSource.length === 0) {
200
+ this.toasterService.warn('Kaydedilecek veri yok.');
201
+ return;
202
+ }
203
+ const dto = {
204
+ operationType: this.operationType,
205
+ items: this.gridDataSource.map(item => ({
206
+ barcode: item.itemCode,
207
+ batch: item.batch,
208
+ warehouse: item.warehouse,
209
+ shelf: item.shelfAbsEntry?.toString(),
210
+ quantity: item.quantity
211
+ }))
212
+ };
213
+ this.inventoryService.processBulkOperation(dto).subscribe({
214
+ next: (result) => {
215
+ this.toasterService.success(result);
216
+ // Başarılı kayıt sonrası grid'i temizle
217
+ this.gridDataSource = [];
218
+ this.nextId = 1;
219
+ this.onClear();
220
+ },
221
+ error: (error) => {
222
+ const errorMessage = error?.error?.error?.message || 'İşlem sırasında bir hata oluştu.';
223
+ this.toasterService.error(errorMessage);
224
+ }
225
+ });
226
+ }
227
+ /**
228
+ * Temizle butonuna basıldığında çağrılır.
229
+ */
230
+ onClear() {
231
+ this.barcode = '';
232
+ this.itemCode = '';
233
+ this.itemName = '';
234
+ this.batch = '';
235
+ this.quantity = null;
236
+ if (!this.isShelfFixed) {
237
+ this.shelf = '';
238
+ this.shelfAbsEntry = null;
239
+ // Raf sabit değilse focus raf alanına dönsün
240
+ setTimeout(() => {
241
+ this.shelfInputRef?.nativeElement?.focus();
242
+ }, 100);
243
+ }
244
+ else {
245
+ // Raf sabit ise focus barkod alanına dönsün
246
+ setTimeout(() => {
247
+ this.barcodeInputRef?.nativeElement?.focus();
248
+ }, 100);
249
+ }
250
+ }
251
+ /**
252
+ * U_SWSmartWhs = "Y" olan depoları yükler.
253
+ * İlk depoyu otomatik olarak seçer.
254
+ */
255
+ loadWarehouses() {
256
+ this.isLoadingWarehouses = true;
257
+ this.warehouseService.getSmartWarehouses().subscribe({
258
+ next: (data) => {
259
+ this.warehouses = data || [];
260
+ console.log('Depolar yüklendi:', this.warehouses);
261
+ // İlk depoyu otomatik seç ve bin location'ları yükle
262
+ if (this.warehouses.length > 0) {
263
+ this.selectedWarehouse = this.warehouses[0].WhsCode || '';
264
+ this.onWarehouseChanged();
265
+ }
266
+ this.isLoadingWarehouses = false;
267
+ },
268
+ error: (err) => {
269
+ console.error('Depolar yüklenemedi:', err);
270
+ this.toasterService.error('Depolar yüklenemedi.');
271
+ this.isLoadingWarehouses = false;
272
+ }
273
+ });
274
+ }
275
+ }
276
+ ShelfPlacementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementComponent, deps: [{ token: i1.InventoryService }, { token: i2.WarehouseService }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component });
277
+ ShelfPlacementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ShelfPlacementComponent, selector: "lib-shelf-placement", viewQueries: [{ propertyName: "shelfInputRef", first: true, predicate: ["shelfInput"], descendants: true }, { propertyName: "barcodeInputRef", first: true, predicate: ["barcodeInput"], descendants: true }, { propertyName: "itemCodeInputRef", first: true, predicate: ["itemCodeInput"], descendants: true }, { propertyName: "quantityInputRef", first: true, predicate: ["quantityInput"], descendants: true }, { propertyName: "gridInstance", first: true, predicate: ["gridInstance"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'Raf Yerle\u015Ftirme'\">\r\n\r\n <!-- Loading Overlay -->\r\n <div *ngIf=\"isLoadingWarehouses\" class=\"loading-overlay\">\r\n <div class=\"loading-spinner\">\r\n <i class=\"fa fa-spinner fa-spin fa-3x\"></i>\r\n <p class=\"mt-3\">Depolar y\u00FCkleniyor...</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shelf-placement-container\">\r\n <div class=\"shelf-placement-layout\">\r\n <!-- Form Card -->\r\n <div class=\"shelf-form-card\">\r\n <!-- Radio Buttons: Giri\u015F / \u00C7\u0131k\u0131\u015F -->\r\n <!-- <div class=\"form-section\">\r\n <label class=\"section-label\">\u0130\u015Flem Tipi</label>\r\n <div class=\"radio-group\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"operationType\" id=\"opEntry\"\r\n value=\"entry\" [(ngModel)]=\"operationType\" />\r\n <label class=\"form-check-label\" for=\"opEntry\">Giri\u015F</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <hr class=\"form-divider\" /> -->\r\n \r\n <!-- Depo -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"warehouseSelect\">Depo</label>\r\n <select class=\"form-select form-input\"\r\n id=\"warehouseSelect\"\r\n [(ngModel)]=\"selectedWarehouse\"\r\n (ngModelChange)=\"onWarehouseChanged()\">\r\n <option value=\"\">Depo se\u00E7in...</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">\r\n {{ wh.WhsCode }} - {{ wh.WhsName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Raf -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"shelfInput\">Raf</label>\r\n <input #shelfInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"shelfInput\"\r\n [(ngModel)]=\"shelf\"\r\n (keydown.enter)=\"onShelfScanned()\"\r\n (blur)=\"onShelfScanned()\"\r\n placeholder=\"Raf kodu girin...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Barkod -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"barcodeInput\">Barkod</label>\r\n <input #barcodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"barcodeInput\"\r\n [(ngModel)]=\"barcode\"\r\n (keydown.enter)=\"onBarcodeScanned()\"\r\n placeholder=\"Barkod okutun...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Kodu -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemCodeInput\">Kalem Kodu</label>\r\n <input #itemCodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemCodeInput\"\r\n [(ngModel)]=\"itemCode\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Ad\u0131 -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemNameInput\">Kalem Ad\u0131</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemNameInput\"\r\n [(ngModel)]=\"itemName\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\" />\r\n </div>\r\n\r\n <!-- Parti -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"batchInput\">Parti</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"batchInput\"\r\n [(ngModel)]=\"batch\"\r\n placeholder=\"Parti numaras\u0131...\" />\r\n </div>\r\n\r\n <!-- Miktar -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"quantityInput\">Miktar</label>\r\n <input #quantityInput\r\n type=\"number\"\r\n class=\"form-control form-input\"\r\n id=\"quantityInput\"\r\n [(ngModel)]=\"quantity\"\r\n (keydown.enter)=\"onAdd()\"\r\n placeholder=\"Miktar girin...\"\r\n min=\"0\" />\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Checkbox: Raf Sabit -->\r\n <div class=\"form-section\">\r\n <div class=\"form-check checkbox-group\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"fixedShelf\"\r\n [(ngModel)]=\"isShelfFixed\" />\r\n <label class=\"form-check-label\" for=\"fixedShelf\">Raf Sabit</label>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Buttons -->\r\n <div class=\"form-section button-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onAdd()\">\r\n <i class=\"fa fa-plus\"></i> Ekle\r\n </button>\r\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onSave()\" [disabled]=\"gridDataSource.length === 0\">\r\n <i class=\"fa fa-save\"></i> Toplu Kaydet ({{ gridDataSource.length }})\r\n </button>\r\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\">\r\n <i class=\"fa fa-eraser\"></i> Temizle\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"grid-card\">\r\n <div class=\"grid-header\">\r\n <h6 class=\"grid-title\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n Raf Yerle\u015Ftirme Listesi ({{ gridDataSource.length }})\r\n </h6>\r\n </div>\r\n <dx-data-grid\r\n #gridInstance\r\n [dataSource]=\"gridDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n style=\"height: 65vh; min-height: 500px;\"\r\n >\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n \r\n <dxi-column\r\n dataField=\"barcode\"\r\n caption=\"Barkod\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemCode\"\r\n caption=\"Kalem Kodu\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemName\"\r\n caption=\"Kalem Ad\u0131\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"batch\"\r\n caption=\"Parti\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"warehouse\"\r\n caption=\"Depo\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"shelf\"\r\n caption=\"Raf\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"quantity\"\r\n caption=\"Miktar\"\r\n dataType=\"number\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n type=\"buttons\"\r\n [width]=\"80\"\r\n >\r\n <dxi-button\r\n icon=\"trash\"\r\n hint=\"Sil\"\r\n [onClick]=\"deleteRowHandler\"\r\n ></dxi-button>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", styles: [".shelf-placement-container{width:100%}.shelf-placement-layout{display:flex;gap:20px;align-items:flex-start}.shelf-form-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:20px 24px;box-shadow:0 1px 3px #0000000f;flex:0 0 450px;min-width:320px}.form-divider{border:none;border-top:1px solid #eee;margin:14px 0}.form-section{margin-bottom:12px}.section-label{display:block;font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.form-input{height:40px;border:1px solid #ced4da;border-radius:6px;padding:0 12px;font-size:14px;background:#fff;transition:border-color .15s;width:100%}.form-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.form-input[readonly]{background:#f5f5f5;color:#888}.radio-group{display:flex;gap:20px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:14px;cursor:pointer;white-space:nowrap;font-weight:500}.checkbox-group{display:flex;align-items:center;gap:8px}.checkbox-group .form-check-label{font-size:14px;cursor:pointer;font-weight:500}.button-group{display:flex;gap:10px;margin-top:4px;flex-wrap:wrap}.button-group .btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:8px 20px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s;flex:1 1 0;justify-content:center;min-width:120px}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-success:disabled{background:#9dd3bd;color:#fff;cursor:not-allowed}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.grid-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 1px 3px #0000000f;overflow:hidden;flex:1;min-width:0;display:flex;flex-direction:column;min-height:500px}.grid-header{display:flex;justify-content:flex-start;align-items:center;padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e0e0e0}.grid-title{margin:0;font-size:14px;font-weight:600;color:#495057}.grid-card dx-data-grid{padding:0;flex:1}@media (max-width: 1200px){.shelf-placement-layout{flex-direction:column}.shelf-form-card{flex:1;width:100%}.grid-card{width:100%;min-height:400px}}@media (max-width: 768px){.shelf-placement-container{padding:0 8px}.shelf-form-card{padding:16px;min-width:100%}.button-group{flex-direction:column}.button-group .btn{font-size:12px;padding:7px 14px;width:100%;flex:1 1 auto}}.loading-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:9999}.loading-spinner{background:#fff;padding:40px 60px;border-radius:8px;box-shadow:0 10px 40px #0000004d;text-align:center}.loading-spinner i{color:#556ee6}.loading-spinner p{margin:0;font-size:16px;font-weight:500;color:#495057}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }] });
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementComponent, decorators: [{
279
+ type: Component,
280
+ args: [{ selector: 'lib-shelf-placement', template: "<abp-page [title]=\"'Raf Yerle\u015Ftirme'\">\r\n\r\n <!-- Loading Overlay -->\r\n <div *ngIf=\"isLoadingWarehouses\" class=\"loading-overlay\">\r\n <div class=\"loading-spinner\">\r\n <i class=\"fa fa-spinner fa-spin fa-3x\"></i>\r\n <p class=\"mt-3\">Depolar y\u00FCkleniyor...</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"shelf-placement-container\">\r\n <div class=\"shelf-placement-layout\">\r\n <!-- Form Card -->\r\n <div class=\"shelf-form-card\">\r\n <!-- Radio Buttons: Giri\u015F / \u00C7\u0131k\u0131\u015F -->\r\n <!-- <div class=\"form-section\">\r\n <label class=\"section-label\">\u0130\u015Flem Tipi</label>\r\n <div class=\"radio-group\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"radio\" name=\"operationType\" id=\"opEntry\"\r\n value=\"entry\" [(ngModel)]=\"operationType\" />\r\n <label class=\"form-check-label\" for=\"opEntry\">Giri\u015F</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <hr class=\"form-divider\" /> -->\r\n \r\n <!-- Depo -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"warehouseSelect\">Depo</label>\r\n <select class=\"form-select form-input\"\r\n id=\"warehouseSelect\"\r\n [(ngModel)]=\"selectedWarehouse\"\r\n (ngModelChange)=\"onWarehouseChanged()\">\r\n <option value=\"\">Depo se\u00E7in...</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">\r\n {{ wh.WhsCode }} - {{ wh.WhsName }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n <!-- Raf -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"shelfInput\">Raf</label>\r\n <input #shelfInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"shelfInput\"\r\n [(ngModel)]=\"shelf\"\r\n (keydown.enter)=\"onShelfScanned()\"\r\n (blur)=\"onShelfScanned()\"\r\n placeholder=\"Raf kodu girin...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Barkod -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"barcodeInput\">Barkod</label>\r\n <input #barcodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"barcodeInput\"\r\n [(ngModel)]=\"barcode\"\r\n (keydown.enter)=\"onBarcodeScanned()\"\r\n placeholder=\"Barkod okutun...\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Kodu -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemCodeInput\">Kalem Kodu</label>\r\n <input #itemCodeInput\r\n type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemCodeInput\"\r\n [(ngModel)]=\"itemCode\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\"\r\n autocomplete=\"off\" />\r\n </div>\r\n\r\n <!-- Kalem Ad\u0131 -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"itemNameInput\">Kalem Ad\u0131</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"itemNameInput\"\r\n [(ngModel)]=\"itemName\"\r\n [readOnly]=\"true\"\r\n placeholder=\"\" />\r\n </div>\r\n\r\n <!-- Parti -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"batchInput\">Parti</label>\r\n <input type=\"text\"\r\n class=\"form-control form-input\"\r\n id=\"batchInput\"\r\n [(ngModel)]=\"batch\"\r\n placeholder=\"Parti numaras\u0131...\" />\r\n </div>\r\n\r\n <!-- Miktar -->\r\n <div class=\"form-section\">\r\n <label class=\"section-label\" for=\"quantityInput\">Miktar</label>\r\n <input #quantityInput\r\n type=\"number\"\r\n class=\"form-control form-input\"\r\n id=\"quantityInput\"\r\n [(ngModel)]=\"quantity\"\r\n (keydown.enter)=\"onAdd()\"\r\n placeholder=\"Miktar girin...\"\r\n min=\"0\" />\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Checkbox: Raf Sabit -->\r\n <div class=\"form-section\">\r\n <div class=\"form-check checkbox-group\">\r\n <input class=\"form-check-input\" type=\"checkbox\" id=\"fixedShelf\"\r\n [(ngModel)]=\"isShelfFixed\" />\r\n <label class=\"form-check-label\" for=\"fixedShelf\">Raf Sabit</label>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"form-divider\" />\r\n\r\n <!-- Buttons -->\r\n <div class=\"form-section button-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onAdd()\">\r\n <i class=\"fa fa-plus\"></i> Ekle\r\n </button>\r\n <button class=\"btn btn-action-success btn-sm\" (click)=\"onSave()\" [disabled]=\"gridDataSource.length === 0\">\r\n <i class=\"fa fa-save\"></i> Toplu Kaydet ({{ gridDataSource.length }})\r\n </button>\r\n <button class=\"btn btn-action-outline btn-sm\" (click)=\"onClear()\">\r\n <i class=\"fa fa-eraser\"></i> Temizle\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"grid-card\">\r\n <div class=\"grid-header\">\r\n <h6 class=\"grid-title\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n Raf Yerle\u015Ftirme Listesi ({{ gridDataSource.length }})\r\n </h6>\r\n </div>\r\n <dx-data-grid\r\n #gridInstance\r\n [dataSource]=\"gridDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n style=\"height: 65vh; min-height: 500px;\"\r\n >\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n \r\n <dxi-column\r\n dataField=\"barcode\"\r\n caption=\"Barkod\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemCode\"\r\n caption=\"Kalem Kodu\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"itemName\"\r\n caption=\"Kalem Ad\u0131\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"batch\"\r\n caption=\"Parti\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"warehouse\"\r\n caption=\"Depo\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"shelf\"\r\n caption=\"Raf\"\r\n [width]=\"150\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"quantity\"\r\n caption=\"Miktar\"\r\n dataType=\"number\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n type=\"buttons\"\r\n [width]=\"80\"\r\n >\r\n <dxi-button\r\n icon=\"trash\"\r\n hint=\"Sil\"\r\n [onClick]=\"deleteRowHandler\"\r\n ></dxi-button>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", styles: [".shelf-placement-container{width:100%}.shelf-placement-layout{display:flex;gap:20px;align-items:flex-start}.shelf-form-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:20px 24px;box-shadow:0 1px 3px #0000000f;flex:0 0 450px;min-width:320px}.form-divider{border:none;border-top:1px solid #eee;margin:14px 0}.form-section{margin-bottom:12px}.section-label{display:block;font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.form-input{height:40px;border:1px solid #ced4da;border-radius:6px;padding:0 12px;font-size:14px;background:#fff;transition:border-color .15s;width:100%}.form-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.form-input[readonly]{background:#f5f5f5;color:#888}.radio-group{display:flex;gap:20px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:14px;cursor:pointer;white-space:nowrap;font-weight:500}.checkbox-group{display:flex;align-items:center;gap:8px}.checkbox-group .form-check-label{font-size:14px;cursor:pointer;font-weight:500}.button-group{display:flex;gap:10px;margin-top:4px;flex-wrap:wrap}.button-group .btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:8px 20px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s;flex:1 1 0;justify-content:center;min-width:120px}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-success:disabled{background:#9dd3bd;color:#fff;cursor:not-allowed}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.grid-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 1px 3px #0000000f;overflow:hidden;flex:1;min-width:0;display:flex;flex-direction:column;min-height:500px}.grid-header{display:flex;justify-content:flex-start;align-items:center;padding:12px 16px;background:#f8f9fa;border-bottom:1px solid #e0e0e0}.grid-title{margin:0;font-size:14px;font-weight:600;color:#495057}.grid-card dx-data-grid{padding:0;flex:1}@media (max-width: 1200px){.shelf-placement-layout{flex-direction:column}.shelf-form-card{flex:1;width:100%}.grid-card{width:100%;min-height:400px}}@media (max-width: 768px){.shelf-placement-container{padding:0 8px}.shelf-form-card{padding:16px;min-width:100%}.button-group{flex-direction:column}.button-group .btn{font-size:12px;padding:7px 14px;width:100%;flex:1 1 auto}}.loading-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:9999}.loading-spinner{background:#fff;padding:40px 60px;border-radius:8px;box-shadow:0 10px 40px #0000004d;text-align:center}.loading-spinner i{color:#556ee6}.loading-spinner p{margin:0;font-size:16px;font-weight:500;color:#495057}\n"] }]
281
+ }], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.WarehouseService }, { type: i3.ToasterService }]; }, propDecorators: { shelfInputRef: [{
282
+ type: ViewChild,
283
+ args: ['shelfInput', { static: false }]
284
+ }], barcodeInputRef: [{
285
+ type: ViewChild,
286
+ args: ['barcodeInput', { static: false }]
287
+ }], itemCodeInputRef: [{
288
+ type: ViewChild,
289
+ args: ['itemCodeInput', { static: false }]
290
+ }], quantityInputRef: [{
291
+ type: ViewChild,
292
+ args: ['quantityInput', { static: false }]
293
+ }], gridInstance: [{
294
+ type: ViewChild,
295
+ args: ['gridInstance', { static: false }]
296
+ }] } });
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtcGxhY2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvc2hlbGYtcGxhY2VtZW50L3NoZWxmLXBsYWNlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL3NoZWxmLXBsYWNlbWVudC9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBdUJ6RSxNQUFNLE9BQU8sdUJBQXVCO0lBcUNoQyxZQUNZLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsY0FBOEI7UUFGOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpDMUMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixhQUFRLEdBQWtCLElBQUksQ0FBQztRQUUvQixrQkFBYSxHQUFXLE9BQU8sQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxtQkFBYyxHQUF5QixFQUFFLENBQUM7UUFDbEMsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUUzQixpQkFBaUI7UUFDakIsd0JBQW1CLEdBQVksS0FBSyxD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ZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IEludmVudG9yeVNlcnZpY2UsIEJ1bGtJbnZlbnRvcnlPcGVyYXRpb25EdG8gfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaW52ZW50b3J5L2ludmVudG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2FyZWhvdXNlU2VydmljZSwgV2FyZWhvdXNlRHRvIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L3dhcmVob3VzZS93YXJlaG91c2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaGVsZlBsYWNlbWVudEl0ZW0ge1xyXG4gICAgaWQ6IG51bWJlcjtcclxuICAgIGJhcmNvZGU6IHN0cmluZztcclxuICAgIGl0ZW1Db2RlOiBzdHJpbmc7XHJcbiAgICBpdGVtTmFtZTogc3RyaW5nO1xyXG4gICAgYmF0Y2g6IHN0cmluZztcclxuICAgIHdhcmVob3VzZTogc3RyaW5nO1xyXG4gICAgc2hlbGY6IHN0cmluZzsgICAgICAgLy8gQmluQ29kZSAoZ8O2csO8bsO8cilcclxuICAgIHNoZWxmQWJzRW50cnk6IG51bWJlcjsgLy8gQWJzRW50cnkgKGJhY2tlbmQnZSBnw7ZuZGVyaWxlY2VrKVxyXG4gICAgcXVhbnRpdHk6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1zaGVsZi1wbGFjZW1lbnQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NoZWxmLXBsYWNlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoZWxmUGxhY2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3NoZWxmSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2hlbGZJbnB1dFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2JhcmNvZGVJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBiYXJjb2RlSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdpdGVtQ29kZUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGl0ZW1Db2RlSW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdxdWFudGl0eUlucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHF1YW50aXR5SW5wdXRSZWY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdncmlkSW5zdGFuY2UnLCB7IHN0YXRpYzogZmFsc2UgfSkgZ3JpZEluc3RhbmNlOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG5cclxuICAgIGJhcmNvZGU6IHN0cmluZyA9ICcnO1xyXG4gICAgaXRlbUNvZGU6IHN0cmluZyA9ICcnO1xyXG4gICAgaXRlbU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gICAgYmF0Y2g6IHN0cmluZyA9ICcnO1xyXG4gICAgc2VsZWN0ZWRXYXJlaG91c2U6IHN0cmluZyA9ICcnO1xyXG4gICAgc2hlbGY6IHN0cmluZyA9ICcnO1xyXG4gICAgcXVhbnRpdHk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIG9wZXJhdGlvblR5cGU6IHN0cmluZyA9ICdlbnRyeSc7XHJcbiAgICBpc1NoZWxmRml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB3YXJlaG91c2VzOiBXYXJlaG91c2VEdG9bXSA9IFtdO1xyXG5cclxuICAgIGdyaWREYXRhU291cmNlOiBTaGVsZlBsYWNlbWVudEl0ZW1bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBuZXh0SWQ6IG51bWJlciA9IDE7XHJcblxyXG4gICAgLy8gTG9hZGluZyBzdGF0ZXNcclxuICAgIGlzTG9hZGluZ1dhcmVob3VzZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ1NoZWxmOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzaGVsZkFic0VudHJ5OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvLyBHcmlkIGJ1dHRvbiBoYW5kbGVyIChhcnJvdyBmdW5jdGlvbiB0byBwcmVzZXJ2ZSBjb250ZXh0KVxyXG4gICAgZGVsZXRlUm93SGFuZGxlciA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZS5ldmVudCkge1xyXG4gICAgICAgICAgICBlLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSB0aGlzLmdyaWREYXRhU291cmNlLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGUucm93LmRhdGEuaWQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB3YXJlaG91c2VTZXJ2aWNlOiBXYXJlaG91c2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sb2FkV2FyZWhvdXNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyDEsGxrIGHDp8SxbMSxxZ90YSByYWYgYWxhbsSxbmEgZm9jdXMgdmVyXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hlbGZJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmFmIG9rdXR1bGR1xJ91bmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEJpbkNvZGUgw7x6ZXJpbmRlbiBTQVAnZGVuIEFic0VudHJ5IGJpbGdpc2luaSDDp2VrZXIuXHJcbiAgICAgKiBGb2N1cyd1IGJhcmtvZCBhbGFuxLFuYSBnZcOnaXJpci5cclxuICAgICAqL1xyXG4gICAgb25TaGVsZlNjYW5uZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNoZWxmPy50cmltKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTaGVsZiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaGVsZkFic0VudHJ5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEJpbkxvY2F0aW9uQnlCaW5Db2RlKHRoaXMuc2hlbGYudHJpbSgpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoYmluTG9jYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChiaW5Mb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZBYnNFbnRyeSA9IGJpbkxvY2F0aW9uLkFic0VudHJ5O1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcmNvZGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oYFwiJHt0aGlzLnNoZWxmfVwiIGJpbiBrb2R1IGlsZSBlxZ9sZcWfZW4gZGVwbyB5ZXJpIGJ1bHVuYW1hZMSxLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTaGVsZiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmluIGxvY2F0aW9uIGFyYW1hIGhhdGFzxLE6JywgZXJyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoJ0RlcG8geWVyaSBiaWxnaXNpIFNBUFxcJ2RlbiBhbMSxbmFtYWTEsS4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU2hlbGYgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmFya29kIG9rdXR1bGR1xJ91bmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEthbGVtIGtvZHUgdmUgcGFydGkgYmlsZ2lzaW5pIGJhcmtvZGRhbiBwYXJzZSBlZGVyLlxyXG4gICAgICogRm9jdXMndSBtaWt0YXIgYWxhbsSxbmEgZ2XDp2lyaXIuXHJcbiAgICAgKi9cclxuICAgIG9uQmFyY29kZVNjYW5uZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJhcmNvZGU/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhcnNlQmFyY29kZUFuZEZpbGwodGhpcy5iYXJjb2RlLnRyaW0oKSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmFya29kdSBwYXJzZSBlZGVyIHZlIGthbGVtIGtvZHUgaWxlIHBhcnRpIGFsYW5sYXLEsW7EsSBkb2xkdXJ1ci5cclxuICAgICAqIMSwbGsgMTMga2FyYWt0ZXIgPSDDvHLDvG4gYmFya29kdSwgMTQuIGthcmFrdGVyZGVuIGl0aWJhcmVuID0gcGFydGkgbnVtYXJhc8SxXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyc2VCYXJjb2RlQW5kRmlsbChiYXJjb2RlVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RCYXJjb2RlID0gYmFyY29kZVZhbHVlLnN1YnN0cmluZygwLCAxMyk7XHJcbiAgICAgICAgY29uc3QgYmF0Y2hOdW1iZXIgPSBiYXJjb2RlVmFsdWUubGVuZ3RoID4gMTMgPyBiYXJjb2RlVmFsdWUuc3Vic3RyaW5nKDEzKSA6ICcnO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG5cclxuICAgICAgICAvLyBTQVAnZGVuIGJhcmtvZCBpbGUga2FsZW0gYmlsZ2lzaSBnZXRpclxyXG4gICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRJdGVtQnlCYXJjb2RlKHByb2R1Y3RCYXJjb2RlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoaXRlbUluZm8pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNvZGUgPSBpdGVtSW5mby5JdGVtQ29kZSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gaXRlbUluZm8uSXRlbU5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXRjaCA9IGJhdGNoTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybihgQmFya29kIFwiJHtwcm9kdWN0QmFyY29kZX1cIiBpbGUgZcWfbGXFn2VuIGthbGVtIGJ1bHVuYW1hZMSxLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFya29kIGlsZSBrYWxlbSBhcmFtYSBoYXRhc8SxOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdCYXJrb2QgaWxlIGthbGVtIGJpbGdpc2kgU0FQXFwnZGVuIGFsxLFuYW1hZMSxLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBLYWxlbSBrb2R1bmEgZ8O2cmUgU0FQJ2RlbiBrYWxlbSBhZMSxbsSxIMOnZWtlci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmZXRjaEl0ZW1OYW1lRnJvbVNBUChpdGVtQ29kZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpdGVtQ29kZT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbU5hbWUgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldEl0ZW1OYW1lQnlDb2RlKGl0ZW1Db2RlLnRyaW0oKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGl0ZW1OYW1lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gaXRlbU5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdLYWxlbSBhZMSxIGFsxLFuYW1hZMSxOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdLYWxlbSBhZMSxIFNBUFxcJ2RlbiBhbMSxbmFtYWTEsS4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVwbyBzZcOnaW1pIGRlxJ9pxZ90acSfaW5kZSDDp2HEn3LEsWzEsXIuXHJcbiAgICAgKiBTZcOnaWxlbiBkZXBveWEgYWl0IGRlcG8geWVybGVyaW5pIChiaW4gbG9jYXRpb25zKSB5w7xrbGVyLlxyXG4gICAgICovXHJcbiAgICBvbldhcmVob3VzZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaGVsZiA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWtsZSBidXRvbnVuYSBiYXPEsWxkxLHEn8SxbmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqIEZvcm0gdmVyaWxlcmluaSBncmlkJ2UgZWtsZXIuXHJcbiAgICAgKi9cclxuICAgIG9uQWRkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pdGVtQ29kZT8udHJpbSgpIHx8ICF0aGlzLnNlbGVjdGVkV2FyZWhvdXNlPy50cmltKCkgfHwgIXRoaXMuc2hlbGY/LnRyaW0oKSB8fCAhdGhpcy5xdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0thbGVtIGtvZHUsIGRlcG8sIHJhZiB2ZSBtaWt0YXIgYWxhbmxhcsSxIHpvcnVubHVkdXIuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zaGVsZkFic0VudHJ5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignUmFmIGnDp2luIGdlw6dlcmxpIGJpciBBYnNFbnRyeSBidWx1bmFtYWTEsS4gTMO8dGZlbiByYWbEsSB0ZWtyYXIgb2t1dHVuLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdJdGVtOiBTaGVsZlBsYWNlbWVudEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLm5leHRJZCsrLFxyXG4gICAgICAgICAgICBiYXJjb2RlOiB0aGlzLmJhcmNvZGUudHJpbSgpLFxyXG4gICAgICAgICAgICBpdGVtQ29kZTogdGhpcy5pdGVtQ29kZS50cmltKCksXHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB0aGlzLml0ZW1OYW1lLnRyaW0oKSxcclxuICAgICAgICAgICAgYmF0Y2g6IHRoaXMuYmF0Y2gudHJpbSgpLFxyXG4gICAgICAgICAgICB3YXJlaG91c2U6IHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UudHJpbSgpLFxyXG4gICAgICAgICAgICBzaGVsZjogdGhpcy5zaGVsZi50cmltKCksXHJcbiAgICAgICAgICAgIHNoZWxmQWJzRW50cnk6IHRoaXMuc2hlbGZBYnNFbnRyeSxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IHRoaXMucXVhbnRpdHksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IFsuLi50aGlzLmdyaWREYXRhU291cmNlLCBuZXdJdGVtXTtcclxuXHJcbiAgICAgICAgLy8gQWxhbmxhcsSxIHRlbWl6bGUgKHJhZiBzYWJpdCBkZcSfaWxzZSlcclxuICAgICAgICBpZiAoIXRoaXMuaXNTaGVsZkZpeGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DbGVhcigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBpc2Ugc2FkZWNlIGJhcmtvZCwga2FsZW0ga29kdSwga2FsZW0gYWTEsSwgcGFydGkgdmUgbWlrdGFyxLEgdGVtaXpsZSAoZGVwbyB2ZSByYWYga2FsxLFyKVxyXG4gICAgICAgICAgICB0aGlzLmJhcmNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5pdGVtQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1OYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuYmF0Y2ggPSAnJztcclxuICAgICAgICAgICAgdGhpcy5xdWFudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBpc2UgZm9jdXMgYmFya29kIGFsYW7EsW5hIGTDtm5zw7xuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXJjb2RlSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogS2F5ZGV0IGJ1dG9udW5hIGJhc8SxbGTEscSfxLFuZGEgw6dhxJ9yxLFsxLFyLlxyXG4gICAgICogR3JpZCdkZWtpIHTDvG0gdmVyaWxlcmkgdG9wbHUgb2xhcmFrIGtheWRlZGVyLlxyXG4gICAgICovXHJcbiAgICBvblNhdmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGFTb3VyY2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignS2F5ZGVkaWxlY2VrIHZlcmkgeW9rLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkdG86IEJ1bGtJbnZlbnRvcnlPcGVyYXRpb25EdG8gPSB7XHJcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6IHRoaXMub3BlcmF0aW9uVHlwZSxcclxuICAgICAgICAgICAgaXRlbXM6IHRoaXMuZ3JpZERhdGFTb3VyY2UubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgICAgIGJhcmNvZGU6IGl0ZW0uaXRlbUNvZGUsIC8vIEthbGVtIGtvZHVudSBnw7ZuZGVyXHJcbiAgICAgICAgICAgICAgICBiYXRjaDogaXRlbS5iYXRjaCxcclxuICAgICAgICAgICAgICAgIHdhcmVob3VzZTogaXRlbS53YXJlaG91c2UsXHJcbiAgICAgICAgICAgICAgICBzaGVsZjogaXRlbS5zaGVsZkFic0VudHJ5Py50b1N0cmluZygpLCAvLyBBYnNFbnRyeSBvbGFyYWsgZ8O2bmRlclxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLnByb2Nlc3NCdWxrT3BlcmF0aW9uKGR0bykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAvLyBCYcWfYXLEsWzEsSBrYXnEsXQgc29ucmFzxLEgZ3JpZCdpIHRlbWl6bGVcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dElkID0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhcigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICfEsMWfbGVtIHPEsXJhc8SxbmRhIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtaXpsZSBidXRvbnVuYSBiYXPEsWxkxLHEn8SxbmRhIMOnYcSfcsSxbMSxci5cclxuICAgICAqL1xyXG4gICAgb25DbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhcmNvZGUgPSAnJztcclxuICAgICAgICB0aGlzLml0ZW1Db2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pdGVtTmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuYmF0Y2ggPSAnJztcclxuICAgICAgICB0aGlzLnF1YW50aXR5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzU2hlbGZGaXhlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoZWxmID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2hlbGZBYnNFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIFJhZiBzYWJpdCBkZcSfaWxzZSBmb2N1cyByYWYgYWxhbsSxbmEgZMO2bnPDvG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWxmSW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmFmIHNhYml0IGlzZSBmb2N1cyBiYXJrb2QgYWxhbsSxbmEgZMO2bnPDvG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhcmNvZGVJbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVX1NXU21hcnRXaHMgPSBcIllcIiBvbGFuIGRlcG9sYXLEsSB5w7xrbGVyLlxyXG4gICAgICogxLBsayBkZXBveXUgb3RvbWF0aWsgb2xhcmFrIHNlw6dlci5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkV2FyZWhvdXNlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2FyZWhvdXNlU2VydmljZS5nZXRTbWFydFdhcmVob3VzZXMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJlaG91c2VzID0gZGF0YSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZXBvbGFyIHnDvGtsZW5kaTonLCB0aGlzLndhcmVob3VzZXMpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyDEsGxrIGRlcG95dSBvdG9tYXRpayBzZcOnIHZlIGJpbiBsb2NhdGlvbidsYXLEsSB5w7xrbGVcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLndhcmVob3VzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UgPSB0aGlzLndhcmVob3VzZXNbMF0uV2hzQ29kZSB8fCAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uV2FyZWhvdXNlQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RlcG9sYXIgecO8a2xlbmVtZWRpOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdEZXBvbGFyIHnDvGtsZW5lbWVkaS4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nV2FyZWhvdXNlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInUmFmIFllcmxlxZ90aXJtZSdcIj5cclxuXHJcbiAgPCEtLSBMb2FkaW5nIE92ZXJsYXkgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1dhcmVob3VzZXNcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpbiBmYS0zeFwiPjwvaT5cclxuICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+RGVwb2xhciB5w7xrbGVuaXlvci4uLjwvcD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2hlbGYtcGxhY2VtZW50LWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoZWxmLXBsYWNlbWVudC1sYXlvdXRcIj5cclxuICAgICAgPCEtLSBGb3JtIENhcmQgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGVsZi1mb3JtLWNhcmRcIj5cclxuICAgICAgPCEtLSBSYWRpbyBCdXR0b25zOiBHaXJpxZ8gLyDDh8Sxa8SxxZ8gLS0+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIj7EsMWfbGVtIFRpcGk8L2xhYmVsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJvcGVyYXRpb25UeXBlXCIgaWQ9XCJvcEVudHJ5XCJcclxuICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZW50cnlcIiBbKG5nTW9kZWwpXT1cIm9wZXJhdGlvblR5cGVcIiAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwib3BFbnRyeVwiPkdpcmnFnzwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgPCEtLSA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPiAtLT5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gRGVwbyAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJ3YXJlaG91c2VTZWxlY3RcIj5EZXBvPC9sYWJlbD5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cIndhcmVob3VzZVNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkV2FyZWhvdXNlXCJcclxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uV2FyZWhvdXNlQ2hhbmdlZCgpXCI+XHJcbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+RGVwbyBzZcOnaW4uLi48L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHdoIG9mIHdhcmVob3VzZXNcIiBbdmFsdWVdPVwid2guV2hzQ29kZVwiPlxyXG4gICAgICAgICAgICB7eyB3aC5XaHNDb2RlIH19IC0ge3sgd2guV2hzTmFtZSB9fVxyXG4gICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBSYWYgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWN0aW9uLWxhYmVsXCIgZm9yPVwic2hlbGZJbnB1dFwiPlJhZjwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNzaGVsZklucHV0XHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwic2hlbGZJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2hlbGZcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblNoZWxmU2Nhbm5lZCgpXCJcclxuICAgICAgICAgICAgICAgKGJsdXIpPVwib25TaGVsZlNjYW5uZWQoKVwiXHJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmFmIGtvZHUgZ2lyaW4uLi5cIlxyXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQmFya29kIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cImJhcmNvZGVJbnB1dFwiPkJhcmtvZDwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNiYXJjb2RlSW5wdXRcclxuICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWlucHV0XCJcclxuICAgICAgICAgICAgICAgaWQ9XCJiYXJjb2RlSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJhcmNvZGVcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkJhcmNvZGVTY2FubmVkKClcIlxyXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJhcmtvZCBva3V0dW4uLi5cIlxyXG4gICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gS2FsZW0gS29kdSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJpdGVtQ29kZUlucHV0XCI+S2FsZW0gS29kdTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0ICNpdGVtQ29kZUlucHV0XHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwiaXRlbUNvZGVJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbUNvZGVcIlxyXG4gICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEthbGVtIEFkxLEgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWN0aW9uLWxhYmVsXCIgZm9yPVwiaXRlbU5hbWVJbnB1dFwiPkthbGVtIEFkxLE8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0taW5wdXRcIlxyXG4gICAgICAgICAgICAgICBpZD1cIml0ZW1OYW1lSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1OYW1lXCJcclxuICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBQYXJ0aSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tc2VjdGlvblwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNlY3Rpb24tbGFiZWxcIiBmb3I9XCJiYXRjaElucHV0XCI+UGFydGk8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0taW5wdXRcIlxyXG4gICAgICAgICAgICAgICBpZD1cImJhdGNoSW5wdXRcIlxyXG4gICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJhdGNoXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXJ0aSBudW1hcmFzxLEuLi5cIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTWlrdGFyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VjdGlvbi1sYWJlbFwiIGZvcj1cInF1YW50aXR5SW5wdXRcIj5NaWt0YXI8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCAjcXVhbnRpdHlJbnB1dFxyXG4gICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwicXVhbnRpdHlJbnB1dFwiXHJcbiAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkFkZCgpXCJcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNaWt0YXIgZ2lyaW4uLi5cIlxyXG4gICAgICAgICAgICAgICBtaW49XCIwXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPlxyXG5cclxuICAgICAgPCEtLSBDaGVja2JveDogUmFmIFNhYml0IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgY2hlY2tib3gtZ3JvdXBcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImZpeGVkU2hlbGZcIlxyXG4gICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNTaGVsZkZpeGVkXCIgLz5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmaXhlZFNoZWxmXCI+UmFmIFNhYml0PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8aHIgY2xhc3M9XCJmb3JtLWRpdmlkZXJcIiAvPlxyXG5cclxuICAgICAgPCEtLSBCdXR0b25zIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uIGJ1dHRvbi1ncm91cFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1wcmltYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJvbkFkZCgpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+IEVrbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tc3VjY2VzcyBidG4tc21cIiAoY2xpY2spPVwib25TYXZlKClcIiBbZGlzYWJsZWRdPVwiZ3JpZERhdGFTb3VyY2UubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNhdmVcIj48L2k+IFRvcGx1IEtheWRldCAoe3sgZ3JpZERhdGFTb3VyY2UubGVuZ3RoIH19KVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1vdXRsaW5lIGJ0bi1zbVwiIChjbGljayk9XCJvbkNsZWFyKClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXJhc2VyXCI+PC9pPiBUZW1pemxlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBEYXRhIEdyaWQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWhlYWRlclwiPlxyXG4gICAgICAgIDxoNiBjbGFzcz1cImdyaWQtdGl0bGVcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgUmFmIFllcmxlxZ90aXJtZSBMaXN0ZXNpICh7eyBncmlkRGF0YVNvdXJjZS5sZW5ndGggfX0pXHJcbiAgICAgICAgPC9oNj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkeC1kYXRhLWdyaWRcclxuICAgICAgICAjZ3JpZEluc3RhbmNlXHJcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZ3JpZERhdGFTb3VyY2VcIlxyXG4gICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgICAgIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2FsbG93Q29sdW1uUmVzaXppbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDY1dmg7IG1pbi1oZWlnaHQ6IDUwMHB4O1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwic3RhbmRhcmRcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cImJhcmNvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cIkJhcmtvZFwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTUwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gS29kdVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJpdGVtTmFtZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gQWTEsVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjAwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJiYXRjaFwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwiUGFydGlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwid2FyZWhvdXNlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJEZXBvXCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cInNoZWxmXCJcclxuICAgICAgICAgIGNhcHRpb249XCJSYWZcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjE1MFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cIk1pa3RhclwiXHJcbiAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTAwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uc1wiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiODBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkeGktYnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJ0cmFzaFwiXHJcbiAgICAgICAgICAgIGhpbnQ9XCJTaWxcIlxyXG4gICAgICAgICAgICBbb25DbGlja109XCJkZWxldGVSb3dIYW5kbGVyXCJcclxuICAgICAgICAgID48L2R4aS1idXR0b24+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2FicC1wYWdlPlxyXG4iXX0=
@@ -0,0 +1,66 @@
1
+ import { CoreModule } from '@abp/ng.core';
2
+ import { ThemeSharedModule } from '@abp/ng.theme.shared';
3
+ import { NgModule } from '@angular/core';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { RouterModule } from '@angular/router';
6
+ import { NgbCollapseModule, NgbDatepickerModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
7
+ import { NgxValidateCoreModule } from '@ngx-validate/core';
8
+ import { CommercialUiModule } from '@volo/abp.commercial.ng.ui';
9
+ import { PageModule } from '@abp/ng.components/page';
10
+ import { DxDataGridModule } from 'devextreme-angular';
11
+ import { ShelfPlacementComponent } from './shelf-placement.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/router";
14
+ const routes = [
15
+ {
16
+ path: '',
17
+ component: ShelfPlacementComponent,
18
+ },
19
+ ];
20
+ export class ShelfPlacementModule {
21
+ }
22
+ ShelfPlacementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
+ ShelfPlacementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, declarations: [ShelfPlacementComponent], imports: [CoreModule,
24
+ ThemeSharedModule,
25
+ FormsModule,
26
+ CommercialUiModule,
27
+ NgxValidateCoreModule,
28
+ NgbCollapseModule,
29
+ NgbDatepickerModule,
30
+ NgbDropdownModule,
31
+ DxDataGridModule,
32
+ PageModule, i1.RouterModule] });
33
+ ShelfPlacementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, imports: [CoreModule,
34
+ ThemeSharedModule,
35
+ FormsModule,
36
+ CommercialUiModule,
37
+ NgxValidateCoreModule,
38
+ NgbCollapseModule,
39
+ NgbDatepickerModule,
40
+ NgbDropdownModule,
41
+ DxDataGridModule,
42
+ PageModule,
43
+ RouterModule.forChild(routes)] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ShelfPlacementModule, decorators: [{
45
+ type: NgModule,
46
+ args: [{
47
+ declarations: [ShelfPlacementComponent],
48
+ imports: [
49
+ CoreModule,
50
+ ThemeSharedModule,
51
+ FormsModule,
52
+ CommercialUiModule,
53
+ NgxValidateCoreModule,
54
+ NgbCollapseModule,
55
+ NgbDatepickerModule,
56
+ NgbDropdownModule,
57
+ DxDataGridModule,
58
+ PageModule,
59
+ RouterModule.forChild(routes),
60
+ ],
61
+ }]
62
+ }] });
63
+ export function loadShelfPlacementModuleAsChild() {
64
+ return Promise.resolve(ShelfPlacementModule);
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtcGxhY2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvc2hlbGYtcGxhY2VtZW50L3NoZWxmLXBsYWNlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFFdEUsTUFBTSxNQUFNLEdBQVc7SUFDbkI7UUFDSSxJQUFJLEVBQUUsRUFBRTtRQUNSLFNBQVMsRUFBRSx1QkFBdUI7S0FDckM7Q0FDSixDQUFDO0FBa0JGLE1BQU0sT0FBTyxvQkFBb0I7O2lIQUFwQixvQkFBb0I7a0hBQXBCLG9CQUFvQixpQkFmZCx1QkFBdUIsYUFFbEMsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsVUFBVTtrSEFJTCxvQkFBb0IsWUFiekIsVUFBVTtRQUNWLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsVUFBVTtRQUNWLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDOzJGQUd4QixvQkFBb0I7a0JBaEJoQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUN2QyxPQUFPLEVBQUU7d0JBQ0wsVUFBVTt3QkFDVixpQkFBaUI7d0JBQ2pCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsVUFBVTt3QkFDVixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztxQkFDaEM7aUJBQ0o7O0FBR0QsTUFBTSxVQUFVLCtCQUErQjtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IFRoZW1lU2hhcmVkTW9kdWxlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JDb2xsYXBzZU1vZHVsZSwgTmdiRGF0ZXBpY2tlck1vZHVsZSwgTmdiRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE5neFZhbGlkYXRlQ29yZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdmFsaWRhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lcmNpYWxVaU1vZHVsZSB9IGZyb20gJ0B2b2xvL2FicC5jb21tZXJjaWFsLm5nLnVpJztcclxuaW1wb3J0IHsgUGFnZU1vZHVsZSB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9wYWdlJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IFNoZWxmUGxhY2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9zaGVsZi1wbGFjZW1lbnQuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogU2hlbGZQbGFjZW1lbnRDb21wb25lbnQsXHJcbiAgICB9LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1NoZWxmUGxhY2VtZW50Q29tcG9uZW50XSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb3JlTW9kdWxlLFxyXG4gICAgICAgIFRoZW1lU2hhcmVkTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIENvbW1lcmNpYWxVaU1vZHVsZSxcclxuICAgICAgICBOZ3hWYWxpZGF0ZUNvcmVNb2R1bGUsXHJcbiAgICAgICAgTmdiQ29sbGFwc2VNb2R1bGUsXHJcbiAgICAgICAgTmdiRGF0ZXBpY2tlck1vZHVsZSxcclxuICAgICAgICBOZ2JEcm9wZG93bk1vZHVsZSxcclxuICAgICAgICBEeERhdGFHcmlkTW9kdWxlLFxyXG4gICAgICAgIFBhZ2VNb2R1bGUsXHJcbiAgICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyksXHJcbiAgICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hlbGZQbGFjZW1lbnRNb2R1bGUge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2hlbGZQbGFjZW1lbnRNb2R1bGVBc0NoaWxkKCkge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShTaGVsZlBsYWNlbWVudE1vZHVsZSk7XHJcbn1cclxuIl19