kivio 1.5.6 → 1.5.8

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.
@@ -0,0 +1,172 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { FormArray, ReactiveFormsModule, Validators } from '@angular/forms';
3
+ import { KvPopupComponent } from '../kv-popup/kv-popup.component';
4
+ import { ActionType } from '../../enums/action-type.enum';
5
+ import { DatePickerComponent } from '../date-picker/date-picker.component';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../factories/form-factory.service";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/forms";
11
+ export class KvItemCardComponent {
12
+ constructor(formFactory) {
13
+ this.formFactory = formFactory;
14
+ this.shouldShowDatepicker = false;
15
+ this.offerId = "";
16
+ this.showCostPopup = false;
17
+ this.itemsSpecificationForm = new FormArray([]);
18
+ this.onContinue = new EventEmitter();
19
+ this.onItemsProcessed = new EventEmitter();
20
+ this.actionTypeEnum = ActionType;
21
+ this.defaultDate = new Date();
22
+ this.pageSize = 2;
23
+ this.currentPage = 1;
24
+ this.Math = Math;
25
+ this.searchText = '';
26
+ }
27
+ ngOnInit() {
28
+ this.itemsSpecificationForm = new FormArray([]);
29
+ }
30
+ get filteredDataItems() {
31
+ return this.itemsSpecificationForm.controls
32
+ .filter((itemForm) => itemForm.get('name')?.value.toLowerCase().includes(this.searchText.toLowerCase()))
33
+ .slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize);
34
+ }
35
+ addItem(index, itemName, itemIsExternal, itemImage, availability, itemId, posId) {
36
+ const itemSpecFormConfig = [
37
+ { name: 'amount', defaultValue: 0, validators: [Validators.required] },
38
+ { name: 'availability', defaultValue: 0, validators: [Validators.required] },
39
+ { name: 'currency', defaultValue: 'COP', validators: [Validators.required] },
40
+ { name: 'expire_at', defaultValue: this.defaultDate, validators: [Validators.required] },
41
+ { name: 'offer_id', defaultValue: '' },
42
+ { name: 'item_id', defaultValue: '', validators: [Validators.required] },
43
+ { name: 'name', defaultValue: '', validators: [] },
44
+ { name: 'is_external', defaultValue: false, validators: [] },
45
+ { name: 'point_of_sale_id', defaultValue: '', validators: [Validators.required] },
46
+ { name: 'image_url', defaultValue: '', validators: [] },
47
+ { name: 'allow_multiple_items', defaultValue: false, validators: [] },
48
+ ];
49
+ const newItem = this.formFactory.createForm(itemSpecFormConfig);
50
+ newItem.get('name')?.setValue(itemName);
51
+ newItem.get('is_external')?.setValue(itemIsExternal ?? false);
52
+ newItem.get('point_of_sale_id')?.setValue(posId);
53
+ newItem.get('image_url')?.setValue(itemImage || '');
54
+ newItem.get('availability')?.setValue(availability || null);
55
+ newItem.get('item_id')?.setValue(itemId);
56
+ availability ? newItem.get('availability')?.disable() : newItem.get('availability')?.enable();
57
+ this.itemsSpecificationForm.push(newItem);
58
+ }
59
+ preventNegative(event) {
60
+ const invalidKeys = ['-', 'e'];
61
+ const input = event.target;
62
+ if (invalidKeys.includes(event.key) ||
63
+ (event.key === '0' && input.value.length === 0)) {
64
+ event.preventDefault();
65
+ }
66
+ }
67
+ onInput(event, itemForm) {
68
+ const input = event.target;
69
+ const number = input.value.replace(/\D/g, '');
70
+ const formatted = this.formatNumber(number);
71
+ itemForm.get('amount')?.setValue(formatted, { emitEvent: false });
72
+ }
73
+ formatNumber(value) {
74
+ if (!value)
75
+ return '';
76
+ return value.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
77
+ }
78
+ allTimesHasCost() {
79
+ return this.itemsSpecificationForm.invalid;
80
+ }
81
+ totalPages() {
82
+ return Math.ceil(this.itemsSpecificationForm.controls.filter((itemForm) => itemForm.get('name')?.value.toLowerCase()).length / this.pageSize);
83
+ }
84
+ changePage(direction) {
85
+ const newPage = this.currentPage + direction;
86
+ if (newPage > 0 && newPage <= this.totalPages()) {
87
+ this.currentPage = newPage;
88
+ }
89
+ }
90
+ hasItemsAssociated() {
91
+ return this.itemsSpecificationForm.length > 0;
92
+ }
93
+ onSubmit() {
94
+ this.onContinue.emit();
95
+ }
96
+ processItemSpecifications() {
97
+ this.itemsSpecificationForm.controls.forEach(itemForm => {
98
+ itemForm.get('offer_id')?.setValue(this.offerId);
99
+ });
100
+ if (this.itemsSpecificationForm.valid) {
101
+ this.showCostPopup = false;
102
+ this.itemsSpecificationForm.controls.forEach(control => {
103
+ let itemAmount = control.get('amount')?.value;
104
+ if (typeof itemAmount === 'string') {
105
+ itemAmount = itemAmount.replace(/\./g, '');
106
+ }
107
+ control.get('amount')?.setValue(Number(itemAmount));
108
+ });
109
+ }
110
+ const multipleItemsSpecs = [];
111
+ const regularItemsSpecs = [];
112
+ this.itemsSpecificationForm.controls.forEach(control => {
113
+ const allowMultiple = control.get('allow_multiple_items')?.value;
114
+ control.get('availability')?.enable();
115
+ const itemSpec = control.value;
116
+ if (allowMultiple) {
117
+ const multipleItemSpec = {
118
+ currency: itemSpec.currency,
119
+ offer_id: itemSpec.offer_id,
120
+ item_id: itemSpec.item_id,
121
+ point_of_sale_id: itemSpec.point_of_sale_id,
122
+ amount: itemSpec.amount,
123
+ availability: itemSpec.availability,
124
+ expire_at: itemSpec.expire_at,
125
+ is_external: itemSpec.is_external,
126
+ allow_multiple_items: true
127
+ };
128
+ multipleItemsSpecs.push(multipleItemSpec);
129
+ }
130
+ else {
131
+ regularItemsSpecs.push(itemSpec);
132
+ }
133
+ });
134
+ this.onItemsProcessed.emit({
135
+ multipleItems: multipleItemsSpecs,
136
+ regularItems: regularItemsSpecs,
137
+ });
138
+ }
139
+ onDatePicked(date, itemForm) {
140
+ itemForm.get('expire_at')?.setValue(date);
141
+ }
142
+ removeItem(itemId) {
143
+ const index = this.itemsSpecificationForm.controls.findIndex(control => control.get('item_id')?.value === itemId);
144
+ if (index !== -1) {
145
+ this.itemsSpecificationForm.removeAt(index);
146
+ }
147
+ }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvItemCardComponent, deps: [{ token: i1.FormFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: KvItemCardComponent, isStandalone: true, selector: "lib-kv-item-card", inputs: { shouldShowDatepicker: "shouldShowDatepicker", offerId: "offerId", showCostPopup: "showCostPopup", itemsSpecificationForm: "itemsSpecificationForm" }, outputs: { onContinue: "onContinue", onItemsProcessed: "onItemsProcessed" }, ngImport: i0, template: "<lib-kv-popup *ngIf=\"showCostPopup\" [title]=\"'Set pricing and availability for your items'\" [description]=\"'Configure the cost, availability, and expiration details for each selected item in your offer.'\" [isCustomTemplate]=\"true\" [actionType]=\"actionTypeEnum.Info\"\r\n (onAccept)=\"showCostPopup = false\" (onClose)=\"showCostPopup = false\">\r\n\r\n\r\n <div class=\"items-container\">\r\n <ng-container *ngFor=\"let itemForm of filteredDataItems; let i = index\">\r\n <div class=\"item-card\">\r\n <div class=\"item-header\">\r\n <div class=\"item-info\">\r\n <img *ngIf=\"itemForm.get('image_url')?.value\" \r\n [src]=\"itemForm.get('image_url')?.value\" \r\n [alt]=\"itemForm.get('name')?.value\"\r\n class=\"item-image\">\r\n <div class=\"item-details\">\r\n <h4 class=\"item-name\">{{ itemForm.get('name')?.value }}</h4>\r\n <span class=\"item-type\" *ngIf=\"itemForm.get('is_external')?.value\">External Item</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <form [formGroup]=\"itemForm\" class=\"item-form\">\r\n <div class=\"form-section\">\r\n <h5 class=\"section-title\">Pricing & Availability</h5>\r\n \r\n <div class=\"input-grid\">\r\n <div class=\"input-group\">\r\n <label for=\"amount-{{i}}\">Cost *</label>\r\n <div class=\"cost-input-container\">\r\n <input id=\"amount-{{i}}\" \r\n formControlName=\"amount\" \r\n type=\"text\" \r\n placeholder=\"Enter cost\"\r\n (input)=\"onInput($event, itemForm)\" />\r\n <select class=\"currency-select\" formControlName=\"currency\">\r\n <option value=\"COP\">COP</option>\r\n </select>\r\n </div>\r\n <div class=\"error-message\" *ngIf=\"itemForm.get('amount')?.invalid && itemForm.get('amount')?.touched\">\r\n Cost is required\r\n </div>\r\n </div>\r\n \r\n <div class=\"input-group\">\r\n <label for=\"availability-{{i}}\">Availability *</label>\r\n <input id=\"availability-{{i}}\" \r\n formControlName=\"availability\" \r\n type=\"number\" \r\n min=\"1\" \r\n placeholder=\"Available quantity\"\r\n (keydown)=\"preventNegative($event)\" />\r\n <div class=\"error-message\" *ngIf=\"itemForm.get('availability')?.invalid && itemForm.get('availability')?.touched\">\r\n Availability is required\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h5 class=\"section-title\">Multiple Items Settings</h5>\r\n \r\n <div class=\"toggle-container\">\r\n <label class=\"toggle-label\">\r\n <input type=\"checkbox\" \r\n formControlName=\"allow_multiple_items\"\r\n class=\"toggle-input\">\r\n <span class=\"toggle-slider\"></span>\r\n <span class=\"toggle-text\">Allow multiple items per user</span>\r\n </label>\r\n <p class=\"toggle-description\">When enabled, users can bid on multiple quantities of this item</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-section\" *ngIf=\"shouldShowDatepicker\">\r\n <h5 class=\"section-title\">Expiration</h5>\r\n <div class=\"input-group\">\r\n <label for=\"expireAt-{{i}}\">Expires on</label>\r\n <lib-kv-date-picker [initialDate]=\"defaultDate\" \r\n [showDetails]=\"true\"\r\n (dateSelected)=\"onDatePicked($event, itemForm)\">\r\n </lib-kv-date-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"pagination-container\" *ngIf=\"totalPages() > 1\">\r\n <div class=\"pagination-info\">\r\n <span>Showing {{ (currentPage - 1) * pageSize + 1 }} - {{ Math.min(currentPage * pageSize, itemsSpecificationForm.length) }} of {{ itemsSpecificationForm.length }} items</span>\r\n </div>\r\n <div class=\"pagination-controls\">\r\n <button class=\"pagination-btn\" \r\n (click)=\"changePage(-1)\" \r\n [disabled]=\"currentPage === 1\"\r\n [class.disabled]=\"currentPage === 1\">\r\n \u2190 Previous\r\n </button>\r\n <span class=\"page-indicator\">{{ currentPage }} / {{ totalPages() }}</span>\r\n <button class=\"pagination-btn\" \r\n (click)=\"changePage(1)\" \r\n [disabled]=\"currentPage === totalPages()\"\r\n [class.disabled]=\"currentPage === totalPages()\">\r\n Next \u2192\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"popup-footer\">\r\n <div class=\"footer-info\">\r\n <span class=\"items-count\">{{ itemsSpecificationForm.length }} item(s) configured</span>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <button type=\"button\" class=\"button--cancel\" (click)=\"showCostPopup = false; itemsSpecificationForm.clear()\">Cancel</button>\r\n <button type=\"submit\" class=\"button--primary-min\" \r\n [disabled]=\"allTimesHasCost()\"\r\n (click)=\"onSubmit()\">\r\n Continue\r\n </button>\r\n </div>\r\n </div>\r\n</lib-kv-popup>", styles: [".table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.input-cost{display:flex;gap:10px}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:100%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:100%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%;margin-left:1rem}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}table,table th{border:none!important}table td{border:none!important;padding:0!important}table td div{display:flex}table td div span{margin-top:5px;margin-left:10px}table td p{color:#101828}.card{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 4px 12px #0000001a}.simple-card{background-color:#f8fafb;padding:1rem;border-radius:8px;color:#101828}.border-card{background:#fff;padding:2rem;border-radius:8px;border:1px solid #ccc}select{width:100%;padding:12px 16px;font-size:16px;border:1px solid #ccc;border-radius:8px;color:#101828;appearance:none;transition:all .3s ease;cursor:pointer;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z' fill='%23333'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:calc(100% - 12px) center}select option{background-color:#fff;color:#101828;padding:28px;font-size:16px;cursor:pointer}select option:hover{background-color:#fff;color:#fff;cursor:pointer}select:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}select:disabled{background-color:#fff}select.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.pagination-container{display:flex;justify-content:space-between;align-items:center;padding:1rem 0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin-bottom:1.5rem}.pagination-container .pagination-info{font-size:.875rem;color:#475467}.pagination-container .pagination-controls{display:flex;align-items:center;gap:1rem}.pagination-container .pagination-controls .pagination-btn{padding:.5rem 1rem;border:1px solid #ccc;background:#fff;color:#101828;border-radius:6px;cursor:pointer;font-size:.875rem;transition:all .2s ease}.pagination-container .pagination-controls .pagination-btn:hover:not(.disabled){background:#f8fafb;border-color:#007bff}.pagination-container .pagination-controls .pagination-btn.disabled{color:#6c757d;cursor:not-allowed;background:#ededed}.pagination-container .pagination-controls .page-indicator{font-size:.875rem;font-weight:500;color:#101828;min-width:60px;text-align:center}.items-container{max-height:60vh;overflow-y:auto;margin-bottom:1.5rem}.items-container .item-card{background:#fff;border:1px solid #ccc;border-radius:8px;margin-bottom:1rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a;transition:all .2s ease}.items-container .item-card:hover{box-shadow:0 2px 8px #0000001f;border-color:#007bff}.items-container .item-card:last-child{margin-bottom:0}.items-container .item-header{margin-bottom:1.5rem}.items-container .item-header .item-info{display:flex;align-items:center;gap:1rem}.items-container .item-header .item-info .item-image{width:60px;height:60px;border-radius:8px;object-fit:cover;border:1px solid #ccc}.items-container .item-header .item-info .item-details{flex:1}.items-container .item-header .item-info .item-details .item-name{font-size:1.1rem;font-weight:600;color:#101828;margin:0 0 .25rem}@media (max-width: 768px){.items-container .item-header .item-info .item-details .item-name{font-size:1rem}}@media (max-width: 480px){.items-container .item-header .item-info .item-details .item-name{font-size:.9rem}}.items-container .item-header .item-info .item-details .item-type{font-size:.75rem;color:#475467;background:#ebebeb;padding:.25rem .5rem;border-radius:4px;text-transform:uppercase;font-weight:500}.items-container .item-form .form-section{margin-bottom:1.5rem}.items-container .item-form .form-section:last-child{margin-bottom:0}.items-container .item-form .form-section .section-title{font-size:.875rem;font-weight:600;color:#101828;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #EBEBEB}.items-container .item-form .input-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media (max-width: 768px){.items-container .item-form .input-grid{grid-template-columns:1fr}}.items-container .item-form .input-group{margin-bottom:1rem}.items-container .item-form .input-group label{font-size:.875rem;font-weight:500;color:#555;margin-bottom:.5rem;display:block}.items-container .item-form .input-group input,.items-container .item-form .input-group select{width:100%;padding:.75rem;border:1px solid #ccc;border-radius:6px;font-size:.875rem;transition:all .2s ease}.items-container .item-form .input-group input:focus,.items-container .item-form .input-group select:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 3px #007bff1a}.items-container .item-form .input-group input::placeholder,.items-container .item-form .input-group select::placeholder{color:#475467}.items-container .item-form .input-group input{width:95%!important}.items-container .item-form .input-group .error-message{font-size:.75rem;color:red;margin-top:.25rem}.items-container .item-form .cost-input-container{display:flex;gap:.5rem}.items-container .item-form .cost-input-container input{flex:1}.items-container .item-form .cost-input-container .currency-select{width:80px;flex-shrink:0}.toggle-container .toggle-label{display:flex;align-items:center;gap:.75rem;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-container .toggle-label .toggle-input{display:none}.toggle-container .toggle-label .toggle-slider{position:relative;width:44px;height:24px;background:#ededed;border-radius:12px;transition:background .3s ease}.toggle-container .toggle-label .toggle-slider:before{content:\"\";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .3s ease;box-shadow:0 1px 3px #0000004d}.toggle-container .toggle-label .toggle-input:checked+.toggle-slider{background:#0052cc}.toggle-container .toggle-label .toggle-input:checked+.toggle-slider:before{transform:translate(20px)}.toggle-container .toggle-label .toggle-text{font-weight:500;color:#101828}.toggle-container .toggle-description{font-size:.75rem;color:#475467;margin:.5rem 0 0;line-height:1.4}.popup-footer{display:flex;justify-content:space-between;align-items:center;padding-top:1.5rem;border-top:1px solid #ccc}.popup-footer .footer-info .items-count{font-size:.875rem;color:#475467;font-weight:500}.popup-footer .footer-actions{display:flex;gap:.75rem}.popup-footer .footer-actions button{min-width:120px;font-weight:500}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: KvPopupComponent, selector: "lib-kv-popup", inputs: ["title", "description", "isCustomTemplate", "actionType"], outputs: ["onAccept", "onClose"] }, { kind: "component", type: DatePickerComponent, selector: "lib-kv-date-picker", inputs: ["initialDate", "showDetails"], outputs: ["dateSelected"] }] }); }
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KvItemCardComponent, decorators: [{
152
+ type: Component,
153
+ args: [{ selector: 'lib-kv-item-card', standalone: true, imports: [
154
+ CommonModule,
155
+ ReactiveFormsModule,
156
+ KvPopupComponent,
157
+ DatePickerComponent,
158
+ ], template: "<lib-kv-popup *ngIf=\"showCostPopup\" [title]=\"'Set pricing and availability for your items'\" [description]=\"'Configure the cost, availability, and expiration details for each selected item in your offer.'\" [isCustomTemplate]=\"true\" [actionType]=\"actionTypeEnum.Info\"\r\n (onAccept)=\"showCostPopup = false\" (onClose)=\"showCostPopup = false\">\r\n\r\n\r\n <div class=\"items-container\">\r\n <ng-container *ngFor=\"let itemForm of filteredDataItems; let i = index\">\r\n <div class=\"item-card\">\r\n <div class=\"item-header\">\r\n <div class=\"item-info\">\r\n <img *ngIf=\"itemForm.get('image_url')?.value\" \r\n [src]=\"itemForm.get('image_url')?.value\" \r\n [alt]=\"itemForm.get('name')?.value\"\r\n class=\"item-image\">\r\n <div class=\"item-details\">\r\n <h4 class=\"item-name\">{{ itemForm.get('name')?.value }}</h4>\r\n <span class=\"item-type\" *ngIf=\"itemForm.get('is_external')?.value\">External Item</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <form [formGroup]=\"itemForm\" class=\"item-form\">\r\n <div class=\"form-section\">\r\n <h5 class=\"section-title\">Pricing & Availability</h5>\r\n \r\n <div class=\"input-grid\">\r\n <div class=\"input-group\">\r\n <label for=\"amount-{{i}}\">Cost *</label>\r\n <div class=\"cost-input-container\">\r\n <input id=\"amount-{{i}}\" \r\n formControlName=\"amount\" \r\n type=\"text\" \r\n placeholder=\"Enter cost\"\r\n (input)=\"onInput($event, itemForm)\" />\r\n <select class=\"currency-select\" formControlName=\"currency\">\r\n <option value=\"COP\">COP</option>\r\n </select>\r\n </div>\r\n <div class=\"error-message\" *ngIf=\"itemForm.get('amount')?.invalid && itemForm.get('amount')?.touched\">\r\n Cost is required\r\n </div>\r\n </div>\r\n \r\n <div class=\"input-group\">\r\n <label for=\"availability-{{i}}\">Availability *</label>\r\n <input id=\"availability-{{i}}\" \r\n formControlName=\"availability\" \r\n type=\"number\" \r\n min=\"1\" \r\n placeholder=\"Available quantity\"\r\n (keydown)=\"preventNegative($event)\" />\r\n <div class=\"error-message\" *ngIf=\"itemForm.get('availability')?.invalid && itemForm.get('availability')?.touched\">\r\n Availability is required\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-section\">\r\n <h5 class=\"section-title\">Multiple Items Settings</h5>\r\n \r\n <div class=\"toggle-container\">\r\n <label class=\"toggle-label\">\r\n <input type=\"checkbox\" \r\n formControlName=\"allow_multiple_items\"\r\n class=\"toggle-input\">\r\n <span class=\"toggle-slider\"></span>\r\n <span class=\"toggle-text\">Allow multiple items per user</span>\r\n </label>\r\n <p class=\"toggle-description\">When enabled, users can bid on multiple quantities of this item</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"form-section\" *ngIf=\"shouldShowDatepicker\">\r\n <h5 class=\"section-title\">Expiration</h5>\r\n <div class=\"input-group\">\r\n <label for=\"expireAt-{{i}}\">Expires on</label>\r\n <lib-kv-date-picker [initialDate]=\"defaultDate\" \r\n [showDetails]=\"true\"\r\n (dateSelected)=\"onDatePicked($event, itemForm)\">\r\n </lib-kv-date-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"pagination-container\" *ngIf=\"totalPages() > 1\">\r\n <div class=\"pagination-info\">\r\n <span>Showing {{ (currentPage - 1) * pageSize + 1 }} - {{ Math.min(currentPage * pageSize, itemsSpecificationForm.length) }} of {{ itemsSpecificationForm.length }} items</span>\r\n </div>\r\n <div class=\"pagination-controls\">\r\n <button class=\"pagination-btn\" \r\n (click)=\"changePage(-1)\" \r\n [disabled]=\"currentPage === 1\"\r\n [class.disabled]=\"currentPage === 1\">\r\n \u2190 Previous\r\n </button>\r\n <span class=\"page-indicator\">{{ currentPage }} / {{ totalPages() }}</span>\r\n <button class=\"pagination-btn\" \r\n (click)=\"changePage(1)\" \r\n [disabled]=\"currentPage === totalPages()\"\r\n [class.disabled]=\"currentPage === totalPages()\">\r\n Next \u2192\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"popup-footer\">\r\n <div class=\"footer-info\">\r\n <span class=\"items-count\">{{ itemsSpecificationForm.length }} item(s) configured</span>\r\n </div>\r\n <div class=\"footer-actions\">\r\n <button type=\"button\" class=\"button--cancel\" (click)=\"showCostPopup = false; itemsSpecificationForm.clear()\">Cancel</button>\r\n <button type=\"submit\" class=\"button--primary-min\" \r\n [disabled]=\"allTimesHasCost()\"\r\n (click)=\"onSubmit()\">\r\n Continue\r\n </button>\r\n </div>\r\n </div>\r\n</lib-kv-popup>", styles: [".table-button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.table-button--primary:hover{background-color:#00438a}.table-button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--primary{width:100%;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--primary:hover{background-color:#00438a}.button--primary:disabled{background-color:#ededed;cursor:not-allowed}.button--minimalist{height:min-content;padding:5px;background-color:#ebebeb;color:#475467;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--minimalist:disabled{background-color:#ededed;cursor:not-allowed}.button--primary-min{height:min-content;width:max-content;margin-left:8px;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;background:#0052cc;color:#fcfcfd}@media (max-width: 768px){.button--primary-min{padding:8px}}.button--primary-min:hover{background:#00438a}.button--primary-min:disabled{background-color:#ededed;cursor:not-allowed}.button--cancel{height:min-content;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;color:#475467;background-color:#fff;border:1px solid #ededed}.button--cancel:disabled{background-color:#ededed;cursor:not-allowed}.button--create{height:min-content;align-self:center;padding:10px;background-color:#0052cc;color:#fcfcfd;border:none;border-radius:5px;font-size:16px;cursor:pointer}.button--create:hover{background-color:#00438a}.button--create:disabled{background-color:#ededed;cursor:not-allowed}.button--sidenav{background-color:#fff;color:#475467;padding:8px;font-weight:700;border:none;display:flex;border-radius:4px;cursor:pointer;gap:10px;margin-top:10px;width:100%;align-items:center}.button--sidenav:hover{background-color:#f2f4f7;color:#101828}.button--sidenav:disabled{background-color:#ededed;cursor:not-allowed}.button--warn{background-color:#b90000;color:#f2f4f7;padding:8px 20px;border:none;border-radius:4px;cursor:pointer;height:min-content}.button--warn:hover{background-color:red}.button--warn:disabled{background-color:#ededed;cursor:not-allowed}.button-container{display:flex;justify-content:flex-end;gap:8px}.button-container:disabled{background-color:#ededed;cursor:not-allowed}input,textarea{padding:10px;width:-webkit-fill-available;border:1px solid #ccc;border-radius:5px;font-size:16px;font-family:Roboto,sans-serif!important;color:#101828;background-color:#fff}input::placeholder,textarea::placeholder{color:#475467}input:focus,textarea:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}input.error,textarea.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.input-group{margin-bottom:15px}.input-group label{font-size:14px;margin-bottom:5px;color:#555}.input-group .error-message{color:red}@media (max-width: 768px){.input-group{margin-bottom:13px}.input-group label{font-size:13px}}@media (max-width: 480px){.input-group{margin-bottom:3px}.input-group label{font-size:12px}}.input-cost{display:flex;gap:10px}.a-link{text-decoration:none}.a-link:hover{cursor:pointer;text-decoration:underline}.a-link2{text-decoration:underline}.a-link2:hover{cursor:pointer;text-decoration:underline}.column-direction{display:flex;flex-direction:row;gap:1rem;padding:2rem;width:100%}.main-text{font-size:30px;color:#101828}@media (max-width: 768px){.main-text{font-size:25px}}@media (max-width: 480px){.main-text{font-size:20px}}.secondary-text{font-size:16px;color:#475467}@media (max-width: 768px){.secondary-text{font-size:14px}}@media (max-width: 480px){.secondary-text{font-size:12px}}.sidebar-title{font-size:24px;color:#101828;font-weight:700;margin-bottom:20px}@media (max-width: 768px){.sidebar-title{margin-top:-36px;margin-bottom:3px;font-size:20px}}.description-section{margin-top:30px}@media (max-width: 768px){.description-section{margin-top:7px}}.description-section .description-title{color:#101828}.description-section .description-body{color:#475467}.list-container{width:100%;border:1px solid #ccc;border-radius:12px;margin-top:22px}@media (max-width: 768px){.list-container{margin-top:7px}}.list-container .list-section{margin:1rem;color:#101828}.list-container .list-section .list{margin-top:12px;color:#475467}@media (max-width: 768px){.list-container .list-section .list{margin-top:6px}}.required{color:#b90000;font-weight:700}.service-info{align-items:center;display:flex}.service-info img{width:40px;height:40px;border:2px solid #ccc;border-radius:50%;margin:5px}.popup-backdrop{position:fixed;inset:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;transform:translateZ(0)}.popup-container{max-height:80vh;background:#fff;padding:20px;border-radius:8px;box-shadow:0 2px 10px #0000001a;overflow-y:auto;width:50%;position:relative}@media (max-width: 768px){.popup-container{width:100%;max-height:80vh;padding:15px;border-radius:6px;margin:0 auto}}@media (max-width: 480px){.popup-container{width:100%;max-height:90vh;padding:10px;border-radius:4px}}.popup-container .close{float:right;font-size:20px;cursor:pointer}table{width:100%;border-collapse:collapse;text-align:left;border:1px solid #ccc;border-radius:4px}thead{background-color:#fff;color:#101828}tbody{color:#475467}th,td{padding:10px;font-size:14px;border-bottom:1px solid #ccc}tbody tr:hover{background-color:#fff}.state.Active{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Active a{color:#036338!important}.state.Waiting{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Waiting a{color:#b53701!important}.state.Created{background-color:#f8e0d1;color:#b53701!important;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Created a{color:#b53701!important}.state.Offered{background-color:#12b76a26;color:#036338!important;font-weight:700;width:min-content;padding:6px;border-radius:4px;white-space:nowrap}.state.Offered a{color:#036338!important}.state.Closed{background-color:#fcd9d9;color:#581d1d;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Closed a{color:#581d1d!important}.state.Approved{background-color:#d1e7dd;color:#0f5132;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Approved a{color:#0f5132!important}.state.Rejected{background-color:#f8d7da;color:#842029;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Rejected a{color:#842029!important}.state.Pending{background-color:#f8e0d1;color:#b53701;font-weight:700;width:min-content;padding:6px;border-radius:4px}.state.Pending a{color:#b53701!important}.pagination{display:flex;justify-content:space-between;margin-top:10px}.pagination button{padding:5px 10px;border:1px solid #ccc;background-color:#fff;cursor:pointer}.pagination button:disabled{color:#555;cursor:not-allowed}.search-container{margin-bottom:10px;display:flex;justify-content:flex-end;width:100%}.search-container .search-section input{width:min-content!important}.pagination{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:14px;color:#101828}.pagination button{padding:6px 12px;border:none;color:#101828;cursor:pointer;border-radius:4px;margin-right:6px}.pagination button:disabled{background-color:#ededed;cursor:not-allowed}@media (max-width: 768px){.pagination{gap:8px;margin:12px}.pagination button{padding:4px 10px;border-radius:3px}}@media (max-width: 480px){.pagination{gap:6px;margin:10px}.pagination button{padding:2px 8px;border-radius:2px}}.table-pagination{border-top:0!important}@media (max-width: 768px){.search-container{margin-bottom:10px;display:flex;justify-content:center;width:100%;margin-left:1rem}table{table-layout:auto!important;border:none!important}table td{padding:5px!important}.hidden-mobile{display:none}}table,table th{border:none!important}table td{border:none!important;padding:0!important}table td div{display:flex}table td div span{margin-top:5px;margin-left:10px}table td p{color:#101828}.card{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 4px 12px #0000001a}.simple-card{background-color:#f8fafb;padding:1rem;border-radius:8px;color:#101828}.border-card{background:#fff;padding:2rem;border-radius:8px;border:1px solid #ccc}select{width:100%;padding:12px 16px;font-size:16px;border:1px solid #ccc;border-radius:8px;color:#101828;appearance:none;transition:all .3s ease;cursor:pointer;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z' fill='%23333'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:calc(100% - 12px) center}select option{background-color:#fff;color:#101828;padding:28px;font-size:16px;cursor:pointer}select option:hover{background-color:#fff;color:#fff;cursor:pointer}select:focus{border-color:#007bff;box-shadow:0 0 8px #007bff80;background-color:#fff}select:disabled{background-color:#fff}select.error{border-color:#fcd9d9;box-shadow:0 0 8px #fcd9d980}.pagination-container{display:flex;justify-content:space-between;align-items:center;padding:1rem 0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin-bottom:1.5rem}.pagination-container .pagination-info{font-size:.875rem;color:#475467}.pagination-container .pagination-controls{display:flex;align-items:center;gap:1rem}.pagination-container .pagination-controls .pagination-btn{padding:.5rem 1rem;border:1px solid #ccc;background:#fff;color:#101828;border-radius:6px;cursor:pointer;font-size:.875rem;transition:all .2s ease}.pagination-container .pagination-controls .pagination-btn:hover:not(.disabled){background:#f8fafb;border-color:#007bff}.pagination-container .pagination-controls .pagination-btn.disabled{color:#6c757d;cursor:not-allowed;background:#ededed}.pagination-container .pagination-controls .page-indicator{font-size:.875rem;font-weight:500;color:#101828;min-width:60px;text-align:center}.items-container{max-height:60vh;overflow-y:auto;margin-bottom:1.5rem}.items-container .item-card{background:#fff;border:1px solid #ccc;border-radius:8px;margin-bottom:1rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a;transition:all .2s ease}.items-container .item-card:hover{box-shadow:0 2px 8px #0000001f;border-color:#007bff}.items-container .item-card:last-child{margin-bottom:0}.items-container .item-header{margin-bottom:1.5rem}.items-container .item-header .item-info{display:flex;align-items:center;gap:1rem}.items-container .item-header .item-info .item-image{width:60px;height:60px;border-radius:8px;object-fit:cover;border:1px solid #ccc}.items-container .item-header .item-info .item-details{flex:1}.items-container .item-header .item-info .item-details .item-name{font-size:1.1rem;font-weight:600;color:#101828;margin:0 0 .25rem}@media (max-width: 768px){.items-container .item-header .item-info .item-details .item-name{font-size:1rem}}@media (max-width: 480px){.items-container .item-header .item-info .item-details .item-name{font-size:.9rem}}.items-container .item-header .item-info .item-details .item-type{font-size:.75rem;color:#475467;background:#ebebeb;padding:.25rem .5rem;border-radius:4px;text-transform:uppercase;font-weight:500}.items-container .item-form .form-section{margin-bottom:1.5rem}.items-container .item-form .form-section:last-child{margin-bottom:0}.items-container .item-form .form-section .section-title{font-size:.875rem;font-weight:600;color:#101828;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #EBEBEB}.items-container .item-form .input-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}@media (max-width: 768px){.items-container .item-form .input-grid{grid-template-columns:1fr}}.items-container .item-form .input-group{margin-bottom:1rem}.items-container .item-form .input-group label{font-size:.875rem;font-weight:500;color:#555;margin-bottom:.5rem;display:block}.items-container .item-form .input-group input,.items-container .item-form .input-group select{width:100%;padding:.75rem;border:1px solid #ccc;border-radius:6px;font-size:.875rem;transition:all .2s ease}.items-container .item-form .input-group input:focus,.items-container .item-form .input-group select:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 3px #007bff1a}.items-container .item-form .input-group input::placeholder,.items-container .item-form .input-group select::placeholder{color:#475467}.items-container .item-form .input-group input{width:95%!important}.items-container .item-form .input-group .error-message{font-size:.75rem;color:red;margin-top:.25rem}.items-container .item-form .cost-input-container{display:flex;gap:.5rem}.items-container .item-form .cost-input-container input{flex:1}.items-container .item-form .cost-input-container .currency-select{width:80px;flex-shrink:0}.toggle-container .toggle-label{display:flex;align-items:center;gap:.75rem;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-container .toggle-label .toggle-input{display:none}.toggle-container .toggle-label .toggle-slider{position:relative;width:44px;height:24px;background:#ededed;border-radius:12px;transition:background .3s ease}.toggle-container .toggle-label .toggle-slider:before{content:\"\";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .3s ease;box-shadow:0 1px 3px #0000004d}.toggle-container .toggle-label .toggle-input:checked+.toggle-slider{background:#0052cc}.toggle-container .toggle-label .toggle-input:checked+.toggle-slider:before{transform:translate(20px)}.toggle-container .toggle-label .toggle-text{font-weight:500;color:#101828}.toggle-container .toggle-description{font-size:.75rem;color:#475467;margin:.5rem 0 0;line-height:1.4}.popup-footer{display:flex;justify-content:space-between;align-items:center;padding-top:1.5rem;border-top:1px solid #ccc}.popup-footer .footer-info .items-count{font-size:.875rem;color:#475467;font-weight:500}.popup-footer .footer-actions{display:flex;gap:.75rem}.popup-footer .footer-actions button{min-width:120px;font-weight:500}\n"] }]
159
+ }], ctorParameters: () => [{ type: i1.FormFactoryService }], propDecorators: { shouldShowDatepicker: [{
160
+ type: Input
161
+ }], offerId: [{
162
+ type: Input
163
+ }], showCostPopup: [{
164
+ type: Input
165
+ }], itemsSpecificationForm: [{
166
+ type: Input
167
+ }], onContinue: [{
168
+ type: Output
169
+ }], onItemsProcessed: [{
170
+ type: Output
171
+ }] } });
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtaXRlbS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1pdGVtLWNhcmQva3YtaXRlbS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdmlvL3NyYy9saWIvY29tcG9uZW50cy9rdi1pdGVtLWNhcmQva3YtaXRlbS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQThCL0MsTUFBTSxPQUFPLG1CQUFtQjtJQXNCOUIsWUFDbUIsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBdEJ6Qyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQiwyQkFBc0IsR0FBeUIsSUFBSSxTQUFTLENBQVksRUFBRSxDQUFDLENBQUM7UUFFM0UsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdEMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBR3pDLENBQUM7UUFJRSxtQkFBYyxHQUFHLFVBQVUs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LEVBQUU7WUFDaEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7K0dBL0tVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHlUQ3pDaEMsaThOQXlIZSwwN2JEekZYLFlBQVksK1BBQ1osbUJBQW1CLHMzREFDbkIsZ0JBQWdCLCtKQUNoQixtQkFBbUI7OzRGQU1WLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjtxQkFFcEI7dUZBS1Esb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEt2UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9rdi1wb3B1cC9rdi1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYWN0aW9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Zvcm0tZmllbGQuY29uZmlnJztcclxuaW1wb3J0IHsgRm9ybUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZmFjdG9yaWVzL2Zvcm0tZmFjdG9yeS5zZXJ2aWNlJztcclxuXHJcblxyXG5pbnRlcmZhY2UgQ3JlYXRlV2l0aE11bHRpcGxlSXRlbXNSZXF1ZXN0IHtcclxuICAgIGN1cnJlbmN5OiBzdHJpbmc7XHJcbiAgICBvZmZlcl9pZDogc3RyaW5nO1xyXG4gICAgaXRlbV9pZDogc3RyaW5nO1xyXG4gICAgcG9pbnRfb2Zfc2FsZV9pZDogc3RyaW5nO1xyXG4gICAgYW1vdW50OiBudW1iZXI7XHJcbiAgICBhdmFpbGFiaWxpdHk6IG51bWJlcjtcclxuICAgIGV4cGlyZV9hdDogc3RyaW5nO1xyXG4gICAgaXNfZXh0ZXJuYWw6IGJvb2xlYW47XHJcbiAgICBhbGxvd19tdWx0aXBsZV9pdGVtczogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWIta3YtaXRlbS1jYXJkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBLdlBvcHVwQ29tcG9uZW50LFxyXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCwgXHJcblxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWl0ZW0tY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2t2LWl0ZW0tY2FyZC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkl0ZW1DYXJkQ29tcG9uZW50e1xyXG4gIEBJbnB1dCgpIHNob3VsZFNob3dEYXRlcGlja2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb2ZmZXJJZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBzaG93Q29zdFBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXRlbXNTcGVjaWZpY2F0aW9uRm9ybTogRm9ybUFycmF5PEZvcm1Hcm91cD4gPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xyXG5cclxuICBAT3V0cHV0KCkgb25Db250aW51ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25JdGVtc1Byb2Nlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgbXVsdGlwbGVJdGVtczogQ3JlYXRlV2l0aE11bHRpcGxlSXRlbXNSZXF1ZXN0W107XHJcbiAgICByZWd1bGFySXRlbXM6IGFueVtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIFxyXG5cclxuICBwdWJsaWMgYWN0aW9uVHlwZUVudW0gPSBBY3Rpb25UeXBlO1xyXG4gIHB1YmxpYyBkZWZhdWx0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAyO1xyXG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIE1hdGggPSBNYXRoO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUZhY3Rvcnk6IEZvcm1GYWN0b3J5U2VydmljZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtc1NwZWNpZmljYXRpb25Gb3JtID0gbmV3IEZvcm1BcnJheTxGb3JtR3JvdXA+KFtdKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYXRhSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtc1NwZWNpZmljYXRpb25Gb3JtLmNvbnRyb2xzXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW1Gb3JtKSA9PlxyXG4gICAgICAgIGl0ZW1Gb3JtLmdldCgnbmFtZScpPy52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICApXHJcbiAgICAgIC5zbGljZSgodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSwgdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgICBhZGRJdGVtKGluZGV4OiBudW1iZXIsIGl0ZW1OYW1lPzogc3RyaW5nLCBpdGVtSXNFeHRlcm5hbD86IGJvb2xlYW4sIGl0ZW1JbWFnZT86IHN0cmluZywgYXZhaWxhYmlsaXR5PzogbnVtYmVyLCBpdGVtSWQ/OiBzdHJpbmcsIHBvc0lkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaXRlbVNwZWNGb3JtQ29uZmlnOiBGb3JtRmllbGRDb25maWdbXSA9IFtcclxuICAgICAgICB7IG5hbWU6ICdhbW91bnQnLCBkZWZhdWx0VmFsdWU6IDAsIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ2F2YWlsYWJpbGl0eScsIGRlZmF1bHRWYWx1ZTogMCwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnY3VycmVuY3knLCBkZWZhdWx0VmFsdWU6ICdDT1AnLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfSxcclxuICAgICAgICB7IG5hbWU6ICdleHBpcmVfYXQnLCBkZWZhdWx0VmFsdWU6IHRoaXMuZGVmYXVsdERhdGUsIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ29mZmVyX2lkJywgZGVmYXVsdFZhbHVlOiAnJyB9LFxyXG4gICAgICAgIHsgbmFtZTogJ2l0ZW1faWQnLCBkZWZhdWx0VmFsdWU6ICcnLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gfSxcclxuICAgICAgICB7IG5hbWU6ICduYW1lJywgZGVmYXVsdFZhbHVlOiAnJywgdmFsaWRhdG9yczogW10gfSxcclxuICAgICAgICB7IG5hbWU6ICdpc19leHRlcm5hbCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIHZhbGlkYXRvcnM6IFtdIH0sXHJcbiAgICAgICAgeyBuYW1lOiAncG9pbnRfb2Zfc2FsZV9pZCcsIGRlZmF1bHRWYWx1ZTogJycsIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSB9LFxyXG4gICAgICAgIHsgbmFtZTogJ2ltYWdlX3VybCcsIGRlZmF1bHRWYWx1ZTogJycsIHZhbGlkYXRvcnM6IFtdIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnYWxsb3dfbXVsdGlwbGVfaXRlbXMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCB2YWxpZGF0b3JzOiBbXSB9LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB0aGlzLmZvcm1GYWN0b3J5LmNyZWF0ZUZvcm0oaXRlbVNwZWNGb3JtQ29uZmlnKTtcclxuICAgICAgICBuZXdJdGVtLmdldCgnbmFtZScpPy5zZXRWYWx1ZShpdGVtTmFtZSk7XHJcbiAgICAgICAgbmV3SXRlbS5nZXQoJ2lzX2V4dGVybmFsJyk/LnNldFZhbHVlKGl0ZW1Jc0V4dGVybmFsID8/IGZhbHNlKTtcclxuICAgICAgICBuZXdJdGVtLmdldCgncG9pbnRfb2Zfc2FsZV9pZCcpPy5zZXRWYWx1ZShwb3NJZCk7XHJcbiAgICAgICAgbmV3SXRlbS5nZXQoJ2ltYWdlX3VybCcpPy5zZXRWYWx1ZShpdGVtSW1hZ2UgfHwgJycpO1xyXG4gICAgICAgIG5ld0l0ZW0uZ2V0KCdhdmFpbGFiaWxpdHknKT8uc2V0VmFsdWUoYXZhaWxhYmlsaXR5IHx8IG51bGwpO1xyXG4gICAgICAgIG5ld0l0ZW0uZ2V0KCdpdGVtX2lkJyk/LnNldFZhbHVlKGl0ZW1JZCk7XHJcbiAgICAgICAgYXZhaWxhYmlsaXR5ID8gbmV3SXRlbS5nZXQoJ2F2YWlsYWJpbGl0eScpPy5kaXNhYmxlKCkgOiBuZXdJdGVtLmdldCgnYXZhaWxhYmlsaXR5Jyk/LmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuaXRlbXNTcGVjaWZpY2F0aW9uRm9ybS5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgfVxyXG5cclxuICBwcmV2ZW50TmVnYXRpdmUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGludmFsaWRLZXlzID0gWyctJywgJ2UnXTtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGludmFsaWRLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkgfHxcclxuICAgICAgKGV2ZW50LmtleSA9PT0gJzAnICYmIGlucHV0LnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50LCBpdGVtRm9ybTogRm9ybUdyb3VwKSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgbnVtYmVyID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0TnVtYmVyKG51bWJlcik7XHJcbiAgICBpdGVtRm9ybS5nZXQoJ2Ftb3VudCcpPy5zZXRWYWx1ZShmb3JtYXR0ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGZvcm1hdE51bWJlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFsbFRpbWVzSGFzQ29zdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zU3BlY2lmaWNhdGlvbkZvcm0uaW52YWxpZDtcclxuICB9XHJcblxyXG4gIHRvdGFsUGFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwoXHJcbiAgICAgIHRoaXMuaXRlbXNTcGVjaWZpY2F0aW9uRm9ybS5jb250cm9scy5maWx0ZXIoKGl0ZW1Gb3JtKSA9PlxyXG4gICAgICAgIGl0ZW1Gb3JtLmdldCgnbmFtZScpPy52YWx1ZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICkubGVuZ3RoIC8gdGhpcy5wYWdlU2l6ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVBhZ2UoZGlyZWN0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5ld1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgZGlyZWN0aW9uO1xyXG4gICAgaWYgKG5ld1BhZ2UgPiAwICYmIG5ld1BhZ2UgPD0gdGhpcy50b3RhbFBhZ2VzKCkpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG5ld1BhZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgaGFzSXRlbXNBc3NvY2lhdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXNTcGVjaWZpY2F0aW9uRm9ybS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNvbnRpbnVlLmVtaXQoKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0l0ZW1TcGVjaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbXNTcGVjaWZpY2F0aW9uRm9ybS5jb250cm9scy5mb3JFYWNoKGl0ZW1Gb3JtID0+IHtcclxuICAgICAgaXRlbUZvcm0uZ2V0KCdvZmZlcl9pZCcpPy5zZXRWYWx1ZSh0aGlzLm9mZmVySWQpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5pdGVtc1NwZWNpZmljYXRpb25Gb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Nvc3RQb3B1cCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLml0ZW1zU3BlY2lmaWNhdGlvbkZvcm0uY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgICBsZXQgaXRlbUFtb3VudCA9IGNvbnRyb2wuZ2V0KCdhbW91bnQnKT8udmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtQW1vdW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaXRlbUFtb3VudCA9IGl0ZW1BbW91bnQucmVwbGFjZSgvXFwuL2csICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udHJvbC5nZXQoJ2Ftb3VudCcpPy5zZXRWYWx1ZShOdW1iZXIoaXRlbUFtb3VudCkpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbXVsdGlwbGVJdGVtc1NwZWNzOiBDcmVhdGVXaXRoTXVsdGlwbGVJdGVtc1JlcXVlc3RbXSA9IFtdO1xyXG4gICAgY29uc3QgcmVndWxhckl0ZW1zU3BlY3M6IGFueVtdID0gW107XHJcblxyXG4gICAgdGhpcy5pdGVtc1NwZWNpZmljYXRpb25Gb3JtLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGNvbnN0IGFsbG93TXVsdGlwbGUgPSBjb250cm9sLmdldCgnYWxsb3dfbXVsdGlwbGVfaXRlbXMnKT8udmFsdWU7XHJcbiAgICAgIGNvbnRyb2wuZ2V0KCdhdmFpbGFiaWxpdHknKT8uZW5hYmxlKCk7XHJcbiAgICAgIGNvbnN0IGl0ZW1TcGVjID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7XHJcbiAgICAgICAgY29uc3QgbXVsdGlwbGVJdGVtU3BlYzogQ3JlYXRlV2l0aE11bHRpcGxlSXRlbXNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgY3VycmVuY3k6IGl0ZW1TcGVjLmN1cnJlbmN5LFxyXG4gICAgICAgICAgb2ZmZXJfaWQ6IGl0ZW1TcGVjLm9mZmVyX2lkLFxyXG4gICAgICAgICAgaXRlbV9pZDogaXRlbVNwZWMuaXRlbV9pZCxcclxuICAgICAgICAgIHBvaW50X29mX3NhbGVfaWQ6IGl0ZW1TcGVjLnBvaW50X29mX3NhbGVfaWQsXHJcbiAgICAgICAgICBhbW91bnQ6IGl0ZW1TcGVjLmFtb3VudCxcclxuICAgICAgICAgIGF2YWlsYWJpbGl0eTogaXRlbVNwZWMuYXZhaWxhYmlsaXR5LFxyXG4gICAgICAgICAgZXhwaXJlX2F0OiBpdGVtU3BlYy5leHBpcmVfYXQsXHJcbiAgICAgICAgICBpc19leHRlcm5hbDogaXRlbVNwZWMuaXNfZXh0ZXJuYWwsXHJcbiAgICAgICAgICBhbGxvd19tdWx0aXBsZV9pdGVtczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbXVsdGlwbGVJdGVtc1NwZWNzLnB1c2gobXVsdGlwbGVJdGVtU3BlYyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVndWxhckl0ZW1zU3BlY3MucHVzaChpdGVtU3BlYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25JdGVtc1Byb2Nlc3NlZC5lbWl0KHtcclxuICAgICAgbXVsdGlwbGVJdGVtczogbXVsdGlwbGVJdGVtc1NwZWNzLFxyXG4gICAgICByZWd1bGFySXRlbXM6IHJlZ3VsYXJJdGVtc1NwZWNzLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uRGF0ZVBpY2tlZChkYXRlOiBhbnksIGl0ZW1Gb3JtOiBGb3JtR3JvdXApIHtcclxuICAgIGl0ZW1Gb3JtLmdldCgnZXhwaXJlX2F0Jyk/LnNldFZhbHVlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUl0ZW0oaXRlbUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtc1NwZWNpZmljYXRpb25Gb3JtLmNvbnRyb2xzLmZpbmRJbmRleChjb250cm9sID0+XHJcbiAgICAgIGNvbnRyb2wuZ2V0KCdpdGVtX2lkJyk/LnZhbHVlID09PSBpdGVtSWRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLml0ZW1zU3BlY2lmaWNhdGlvbkZvcm0ucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxsaWIta3YtcG9wdXAgKm5nSWY9XCJzaG93Q29zdFBvcHVwXCIgW3RpdGxlXT1cIidTZXQgcHJpY2luZyBhbmQgYXZhaWxhYmlsaXR5IGZvciB5b3VyIGl0ZW1zJ1wiIFtkZXNjcmlwdGlvbl09XCInQ29uZmlndXJlIHRoZSBjb3N0LCBhdmFpbGFiaWxpdHksIGFuZCBleHBpcmF0aW9uIGRldGFpbHMgZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbSBpbiB5b3VyIG9mZmVyLidcIiBbaXNDdXN0b21UZW1wbGF0ZV09XCJ0cnVlXCIgW2FjdGlvblR5cGVdPVwiYWN0aW9uVHlwZUVudW0uSW5mb1wiXHJcbiAgICAob25BY2NlcHQpPVwic2hvd0Nvc3RQb3B1cCA9IGZhbHNlXCIgKG9uQ2xvc2UpPVwic2hvd0Nvc3RQb3B1cCA9IGZhbHNlXCI+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1jb250YWluZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtRm9ybSBvZiBmaWx0ZXJlZERhdGFJdGVtczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpdGVtRm9ybS5nZXQoJ2ltYWdlX3VybCcpPy52YWx1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbUZvcm0uZ2V0KCdpbWFnZV91cmwnKT8udmFsdWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cIml0ZW1Gb3JtLmdldCgnbmFtZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIml0ZW0tbmFtZVwiPnt7IGl0ZW1Gb3JtLmdldCgnbmFtZScpPy52YWx1ZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdHlwZVwiICpuZ0lmPVwiaXRlbUZvcm0uZ2V0KCdpc19leHRlcm5hbCcpPy52YWx1ZVwiPkV4dGVybmFsIEl0ZW08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiaXRlbUZvcm1cIiBjbGFzcz1cIml0ZW0tZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlByaWNpbmcgJiBBdmFpbGFiaWxpdHk8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhbW91bnQte3tpfX1cIj5Db3N0ICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3N0LWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhbW91bnQte3tpfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY29zdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50LCBpdGVtRm9ybSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiY3VycmVuY3ktc2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDT1BcIj5DT1A8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIml0ZW1Gb3JtLmdldCgnYW1vdW50Jyk/LmludmFsaWQgJiYgaXRlbUZvcm0uZ2V0KCdhbW91bnQnKT8udG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3N0IGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF2YWlsYWJpbGl0eS17e2l9fVwiPkF2YWlsYWJpbGl0eSAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdmFpbGFiaWxpdHkte3tpfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImF2YWlsYWJpbGl0eVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBdmFpbGFibGUgcXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwicHJldmVudE5lZ2F0aXZlKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpdGVtRm9ybS5nZXQoJ2F2YWlsYWJpbGl0eScpPy5pbnZhbGlkICYmIGl0ZW1Gb3JtLmdldCgnYXZhaWxhYmlsaXR5Jyk/LnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPk11bHRpcGxlIEl0ZW1zIFNldHRpbmdzPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd19tdWx0aXBsZV9pdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLXNsaWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS10ZXh0XCI+QWxsb3cgbXVsdGlwbGUgaXRlbXMgcGVyIHVzZXI8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0b2dnbGUtZGVzY3JpcHRpb25cIj5XaGVuIGVuYWJsZWQsIHVzZXJzIGNhbiBiaWQgb24gbXVsdGlwbGUgcXVhbnRpdGllcyBvZiB0aGlzIGl0ZW08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIiAqbmdJZj1cInNob3VsZFNob3dEYXRlcGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5FeHBpcmF0aW9uPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhwaXJlQXQte3tpfX1cIj5FeHBpcmVzIG9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWIta3YtZGF0ZS1waWNrZXIgW2luaXRpYWxEYXRlXT1cImRlZmF1bHREYXRlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RGV0YWlsc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJvbkRhdGVQaWNrZWQoJGV2ZW50LCBpdGVtRm9ybSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLWt2LWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIiAqbmdJZj1cInRvdGFsUGFnZXMoKSA+IDFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi1pbmZvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPlNob3dpbmcge3sgKGN1cnJlbnRQYWdlIC0gMSkgKiBwYWdlU2l6ZSArIDEgfX0gLSB7eyBNYXRoLm1pbihjdXJyZW50UGFnZSAqIHBhZ2VTaXplLCBpdGVtc1NwZWNpZmljYXRpb25Gb3JtLmxlbmd0aCkgfX0gb2Yge3sgaXRlbXNTcGVjaWZpY2F0aW9uRm9ybS5sZW5ndGggfX0gaXRlbXM8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBhZ2luYXRpb24tYnRuXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhZ2UoLTEpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIj5cclxuICAgICAgICAgICAgICAgIOKGkCBQcmV2aW91c1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWluZGljYXRvclwiPnt7IGN1cnJlbnRQYWdlIH19IC8ge3sgdG90YWxQYWdlcygpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicGFnaW5hdGlvbi1idG5cIiBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFnZSgxKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxQYWdlcygpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgTmV4dCDihpJcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pbmZvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbXMtY291bnRcIj57eyBpdGVtc1NwZWNpZmljYXRpb25Gb3JtLmxlbmd0aCB9fSBpdGVtKHMpIGNvbmZpZ3VyZWQ8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uLS1jYW5jZWxcIiAoY2xpY2spPVwic2hvd0Nvc3RQb3B1cCA9IGZhbHNlOyBpdGVtc1NwZWNpZmljYXRpb25Gb3JtLmNsZWFyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b24tLXByaW1hcnktbWluXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbFRpbWVzSGFzQ29zdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgQ29udGludWVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9saWIta3YtcG9wdXA+Il19