@maplander/components 0.20.9 → 0.21.2
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.
- package/bundles/maplander-components.umd.js +39 -12
- package/bundles/maplander-components.umd.js.map +1 -1
- package/bundles/maplander-components.umd.min.js +2 -2
- package/bundles/maplander-components.umd.min.js.map +1 -1
- package/esm2015/lib/components/filters/filters.component.js +39 -5
- package/esm2015/lib/components/panorama-visor/panorama-visor.component.js +1 -1
- package/esm2015/lib/components/property/components/details/details.component.js +1 -1
- package/esm2015/lib/components/property/components/editor/editor.component.js +1 -1
- package/esm2015/lib/components/property/components/gallery/gallery.component.js +1 -1
- package/esm2015/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +1 -1
- package/esm2015/lib/components/property/components/property/property.component.js +1 -1
- package/esm2015/lib/components/property/components/slideshow/slide-show.component.js +1 -1
- package/esm2015/lib/components/property/components/stats/stats.component.js +1 -1
- package/esm2015/lib/components/property-card/property-card.component.js +1 -1
- package/esm5/lib/components/filters/filters.component.js +40 -5
- package/esm5/lib/components/panorama-visor/panorama-visor.component.js +1 -1
- package/esm5/lib/components/property/components/details/details.component.js +1 -1
- package/esm5/lib/components/property/components/editor/editor.component.js +1 -1
- package/esm5/lib/components/property/components/gallery/gallery.component.js +1 -1
- package/esm5/lib/components/property/components/multimedia-uploader/multimedia-uploader.component.js +1 -1
- package/esm5/lib/components/property/components/property/property.component.js +1 -1
- package/esm5/lib/components/property/components/slideshow/slide-show.component.js +1 -1
- package/esm5/lib/components/property/components/stats/stats.component.js +1 -1
- package/esm5/lib/components/property-card/property-card.component.js +1 -1
- package/fesm2015/maplander-components.js +39 -13
- package/fesm2015/maplander-components.js.map +1 -1
- package/fesm5/maplander-components.js +40 -13
- package/fesm5/maplander-components.js.map +1 -1
- package/lib/components/filters/filters.component.d.ts +14 -1
- package/maplander-components.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @fileoverview added by tsickle
|
|
3
3
|
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
4
|
*/
|
|
5
|
-
import { Component, ElementRef, Inject, Input, Optional, Renderer2 } from '@angular/core';
|
|
5
|
+
import { Component, ElementRef, EventEmitter, Inject, Input, Optional, Output, Renderer2 } from '@angular/core';
|
|
6
6
|
import { FormBuilder, Validators } from '@angular/forms';
|
|
7
7
|
import { Subscription } from 'rxjs';
|
|
8
8
|
import { Currency, OfferingTypeEnum, PropertyTypeEnum } from '@maplander/types';
|
|
@@ -32,6 +32,7 @@ export class FiltersComponent {
|
|
|
32
32
|
this._formBuilder = _formBuilder;
|
|
33
33
|
this._converter = _converter;
|
|
34
34
|
this.METERS_TO_SQ = 10.76391042;
|
|
35
|
+
this.changeFilter = new EventEmitter();
|
|
35
36
|
this.isOPI = this._config || false;
|
|
36
37
|
this._subscription = new Subscription();
|
|
37
38
|
this.propertyTypeList = ConstantsComponents.PropertyTypeList.map((/**
|
|
@@ -39,6 +40,13 @@ export class FiltersComponent {
|
|
|
39
40
|
* @return {?}
|
|
40
41
|
*/
|
|
41
42
|
item => (Object.assign({}, item))));
|
|
43
|
+
if (this.newFilters) {
|
|
44
|
+
for (let i = 0; i < this.propertyTypeList.length; i++) {
|
|
45
|
+
if (this.propertyTypeList[i].value === PropertyTypeEnum.ROOM || this.propertyTypeList[i].value === PropertyTypeEnum.RESIDENTIAL) {
|
|
46
|
+
this.propertyTypeList.splice(i, 1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
42
50
|
this.bedroomsList = Object.assign([], ConstantsComponents.BedroomList);
|
|
43
51
|
this.bathroomsList = Object.assign([], ConstantsComponents.BathroomList);
|
|
44
52
|
this.parkingPlacesList = Object.assign([], ConstantsComponents.ParkingSpacesList);
|
|
@@ -110,6 +118,7 @@ export class FiltersComponent {
|
|
|
110
118
|
this.filtersForm.controls['offering'].setValue(OfferingTypeEnum.SALE);
|
|
111
119
|
break;
|
|
112
120
|
}
|
|
121
|
+
this.changeFilter.emit({ type: 'propertyType', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
113
122
|
}
|
|
114
123
|
/**
|
|
115
124
|
* @param {?} ev
|
|
@@ -117,6 +126,7 @@ export class FiltersComponent {
|
|
|
117
126
|
*/
|
|
118
127
|
changeOffering(ev) {
|
|
119
128
|
this.filter.offering = (/** @type {?} */ (ev));
|
|
129
|
+
this.changeFilter.emit({ type: 'filter', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
120
130
|
}
|
|
121
131
|
/**
|
|
122
132
|
* @param {?} ev
|
|
@@ -124,6 +134,7 @@ export class FiltersComponent {
|
|
|
124
134
|
*/
|
|
125
135
|
changeCurrency(ev) {
|
|
126
136
|
this.filter.currency = ev;
|
|
137
|
+
this.changeFilter.emit({ type: 'filter', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
127
138
|
}
|
|
128
139
|
/**
|
|
129
140
|
* @param {?} amenity
|
|
@@ -141,6 +152,7 @@ export class FiltersComponent {
|
|
|
141
152
|
this.filter.extras.push(amenity.value);
|
|
142
153
|
}
|
|
143
154
|
amenity.checked = !amenity.checked;
|
|
155
|
+
this.changeFilter.emit({ type: 'filter', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
144
156
|
}
|
|
145
157
|
/**
|
|
146
158
|
* @return {?}
|
|
@@ -179,6 +191,7 @@ export class FiltersComponent {
|
|
|
179
191
|
this.filter = propertyTypeItemIndex ? Utils.getFilterByPropertyType(this.filter) : Utils.getInitialFilter(this.isOPI, this.filter);
|
|
180
192
|
this.updateFormByFilters();
|
|
181
193
|
this.setPrices();
|
|
194
|
+
this.changeFilter.emit({ type: 'filter', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
182
195
|
}
|
|
183
196
|
/**
|
|
184
197
|
* @private
|
|
@@ -186,6 +199,7 @@ export class FiltersComponent {
|
|
|
186
199
|
*/
|
|
187
200
|
buildForm() {
|
|
188
201
|
this.filtersForm = this._formBuilder.group({
|
|
202
|
+
state: [],
|
|
189
203
|
offering: [],
|
|
190
204
|
currency: [],
|
|
191
205
|
minPrice: ['', [Validators.required, Validators.pattern(new RegExp('(^[0-9]+)'))]],
|
|
@@ -199,6 +213,12 @@ export class FiltersComponent {
|
|
|
199
213
|
}, {
|
|
200
214
|
validator: CurrencyFilterValidator('minPrice', 'maxPrice')
|
|
201
215
|
});
|
|
216
|
+
this.filtersForm.valueChanges.subscribe((/**
|
|
217
|
+
* @return {?}
|
|
218
|
+
*/
|
|
219
|
+
() => {
|
|
220
|
+
this.changeFilter.emit({ type: 'filter', payload: { filter: this.filter, value: this.filtersForm.value } });
|
|
221
|
+
}));
|
|
202
222
|
}
|
|
203
223
|
/**
|
|
204
224
|
* @private
|
|
@@ -206,6 +226,7 @@ export class FiltersComponent {
|
|
|
206
226
|
*/
|
|
207
227
|
updateFormByFilters() {
|
|
208
228
|
this.filtersForm.patchValue({
|
|
229
|
+
state: null,
|
|
209
230
|
offering: this.filter.offering,
|
|
210
231
|
currency: this.filter.currency,
|
|
211
232
|
minPrice: this.filter.downLimitPrice,
|
|
@@ -225,6 +246,7 @@ export class FiltersComponent {
|
|
|
225
246
|
getFilterByForm() {
|
|
226
247
|
/** @type {?} */
|
|
227
248
|
const data = this.filtersForm.value;
|
|
249
|
+
this.filter.state = data.state;
|
|
228
250
|
this.filter.offering = data.offering;
|
|
229
251
|
this.filter.currency = data.currency;
|
|
230
252
|
this.filter.downLimitPrice = Number(data.minPrice);
|
|
@@ -451,8 +473,8 @@ export class FiltersComponent {
|
|
|
451
473
|
FiltersComponent.decorators = [
|
|
452
474
|
{ type: Component, args: [{
|
|
453
475
|
selector: 'lib-filters',
|
|
454
|
-
template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"property-type-list mat-elevation-z2\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE'\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" >\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor minimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\">\r\n <mat-option [value]=\"0\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle [value]=\"0\">m2</mat-button-toggle>\r\n <mat-button-toggle [value]=\"1\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"actions\">\r\n <ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template>\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n <button mat-flat-button=\"\" type=\"submit\" class=\"action__button\" color=\"primary\"\r\n (click)=\"applyFilters()\">APLICAR\r\n </button>\r\n </div>\r\n</form>\r\n",
|
|
455
|
-
styles: [":host{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;display:flex;background:var(--overlay);transition:250ms}.filters--opened{height:90%!important}@media screen and (max-width:600px){.filters--opened{width:100%!important;height:100%!important;top:0!important}}.filters{width:700px;height:auto;margin:auto;border-radius:16px;position:relative;overflow:hidden;transition:150ms}.filters .--padding{padding:16px 48px;box-sizing:border-box}.filters .--row{display:flex;justify-content:space-between;align-items:flex-start}.filters .--col{width:45%}.filters .--title{margin:16px 0;color:#707070}.filters .float-button-close{position:absolute;top:16px;right:16px;height:16px;border-radius:50%}.filters .body{height:calc(100% - 36px);overflow-x:hidden;overflow-y:auto}.filters .header{display:flex;align-items:center;justify-content:space-around;margin-bottom:8px}.filters .listing-types{width:100%;border-radius:16px}.filters .listing-types mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .listing-types mat-button-toggle button{height:36px}.filters ::ng-deep .listing-types mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .currency ::ng-deep .mat-form-field-wrapper{padding:0}@media screen and (max-width:600px){.filters{width:100%;position:absolute;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;top:initial;bottom:0;left:0}.filters .--padding{padding:16px 24px}.filters .header{flex-direction:column}.filters .currency{width:70%;margin-bottom:8px}}.filters .offering-type-list{width:40%;border-radius:16px}.filters .offering-type-list mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button{height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(
|
|
476
|
+
template: "<!-- Todo: [FiltersComponent] Refactor code -->\r\n<form class=\"filters\" [formGroup]=\"filtersForm\" [ngClass]=\"{'filters--opened': propertyTypeSelected.value !== 'NONE'}\">\r\n <ng-template [ngIf]=\"!isOPI\">\r\n <div class=\"float-button-close\">\r\n <button mat-icon-button type=\"button\" class=\"float-button-close__button\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <div class=\"body\">\r\n <div class=\"--padding\">\r\n <div class=\"header\">\r\n <mat-form-field class=\"currency\" appearance=\"outline\">\r\n <mat-label>Divisa</mat-label>\r\n <mat-select formControlName=\"currency\">\r\n <ng-container *ngFor=\"let currency of currencyList\">\r\n <mat-option [value]=\"currency.type\" (click)=\"changeCurrency(currency.type)\">\r\n {{currency.type}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group class=\"offering-type-list\" name=\"offering-type\" formControlName=\"offering\"\r\n aria-label=\"Offering type\">\r\n <mat-button-toggle (click)=\"changeOffering('SALE')\" [value]=\"'SALE'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'ROOM'\">\r\n Venta\r\n </mat-button-toggle>\r\n <mat-button-toggle (click)=\"changeOffering('RENT')\" [value]=\"'RENT'\"\r\n [disabled]=\"propertyTypeSelected.value === 'NONE' || propertyTypeSelected.value === 'INVESTMENT'\">\r\n Renta\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"property-type-list mat-elevation-z2\">\r\n <ng-container *ngFor=\"let type of propertyTypeList; let i = index\">\r\n <ng-template [ngIf]=\"type.value !== 'NONE'\">\r\n <div class=\"property-type-list__button\">\r\n <div\r\n class=\"property-type-list__border\"\r\n [ngClass]=\"{'property-type-list__border--active': (type.value === propertyTypeSelected.value) || (propertyTypeSelected.value === 'NONE') || ((type.value === 'HOUSE' || type.value === 'APARTMENT') && propertyTypeSelected.value === 'RESIDENTIAL')}\"\r\n [ngStyle]=\"{'border-color': 'var(--' + type.iconName + ')'}\">\r\n <button mat-mini-fab=\"\" type=\"button\" (click)=\"changePropertyType(i)\"\r\n [ngStyle]=\"{'background-color': 'var(--' + type.iconName + ')'}\">\r\n <span class=\"property-type-list__icon ic-property-{{type.iconName}}\"></span>\r\n </button>\r\n </div>\r\n <span class=\"property-type-list__label\">{{type.shortName}}</span>\r\n <ng-template [ngIf]=\"type.value === 'RESIDENTIAL' && propertyTypeSelected.value === 'RESIDENTIAL'\">\r\n <div class=\"property-type-list__divider property-type-list__divider--left\"></div>\r\n <div class=\"property-type-list__divider property-type-list__divider--right\"></div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n <ng-template [ngIf]=\"isOPI\">\r\n <div class=\"all\">\r\n <button mat-raised-button=\"\" type=\"button\" class=\"all__button\"\r\n [ngClass]=\"{'all__button--active': propertyTypeSelected.value === 'NONE'}\"\r\n (click)=\"changePropertyType(9)\">Todo\r\n </button>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'NONE'\">\r\n <mat-divider></mat-divider>\r\n <div class=\"--padding\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-price\"></span>\r\n Presupuesto\r\n </h4>\r\n <div class=\"budget\">\r\n <!-- Min price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00EDnimo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"Min price\" formControlName=\"minPrice\" min=\"1\" >\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('pattern')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['minPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Min price [END] -->\r\n <!-- Max price [START] -->\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>M\u00E1ximo</mat-label>\r\n <input autocomplete=\"off\" matInput=\"\" type=\"number\" title=\"max price\" formControlName=\"maxPrice\">\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('pattern')\">\r\n Debe ingresar solo numeros\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('required')\">\r\n Este campo es requerido\r\n </mat-error>\r\n <mat-error *ngIf=\"filtersForm.controls['maxPrice'].hasError('currency')\">\r\n Valor minimo excedido\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- Max price [END] -->\r\n </div>\r\n <div class=\"features\">\r\n <ng-template\r\n [ngIf]=\"propertyTypeSelected.value === 'RESIDENTIAL' || propertyTypeSelected.value === 'HOUSE' || propertyTypeSelected.value === 'APARTMENT'\">\r\n <div class=\"features__bedrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bedroom\"></span>\r\n Habitaciones\r\n </h4>\r\n <mat-button-toggle-group name=\"bedrooms\" aria-label=\"Bedrooms\" formControlName=\"bedrooms\">\r\n <ng-container *ngFor=\"let bedroom of bedroomsList\">\r\n <ng-template [ngIf]=\"bedroom === 0\" [ngIfElse]=\"bedroomNumber\">\r\n <mat-button-toggle [value]=\"bedroom\" class=\"features__bedrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bedroomNumber>\r\n <mat-button-toggle [value]=\"bedroom\">{{bedroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n <div class=\"features__bathrooms\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-bathroom\"></span>\r\n Ba\u00F1os\r\n </h4>\r\n <mat-button-toggle-group name=\"bathrooms\" aria-label=\"Bathrooms\" formControlName=\"bathrooms\">\r\n <ng-container *ngFor=\"let bathroom of bathroomsList\">\r\n <ng-template [ngIf]=\"bathroom === 0\" [ngIfElse]=\"bathroomNumber\">\r\n <mat-button-toggle [value]=\"bathroom\"\r\n class=\"features__bathrooms--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #bathroomNumber>\r\n <mat-button-toggle [value]=\"bathroom\">{{bathroom}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'LAND' && propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__parking-places\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-parking\"></span>\r\n Estacionamientos\r\n </h4>\r\n <mat-button-toggle-group name=\"parking_places\" aria-label=\"Parking Places\"\r\n formControlName=\"parkingPlaces\">\r\n <ng-container *ngFor=\"let parking of parkingPlacesList\">\r\n <ng-template [ngIf]=\"parking === 0\" [ngIfElse]=\"parkingNumber\">\r\n <mat-button-toggle [value]=\"parking\"\r\n class=\"features__parking-places--unlimited\">\r\n Sin <br> l\u00EDmite\r\n </mat-button-toggle>\r\n </ng-template>\r\n <ng-template #parkingNumber>\r\n <mat-button-toggle [value]=\"parking\">{{parking}}+\r\n </mat-button-toggle>\r\n </ng-template>\r\n </ng-container>\r\n </mat-button-toggle-group>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value !== 'INVESTMENT'\">\r\n <div class=\"features__surface\">\r\n <h4 class=\"--title\">\r\n <span class=\"ic-features-surface\"></span>\r\n Superficie\r\n </h4>\r\n <div class=\"--row\">\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>\u00C1rea</mat-label>\r\n <mat-select formControlName=\"surface\">\r\n <mat-option [value]=\"0\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let surface of surfaceList\">\r\n <mat-option [value]=\"surface\">\r\n {{surface}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group name=\"unit_surface\" aria-label=\"Unit surface\" formControlName=\"surfaceUnit\">\r\n <mat-button-toggle [value]=\"0\">m2</mat-button-toggle>\r\n <mat-button-toggle [value]=\"1\">sq ft</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.value === 'INVESTMENT'\">\r\n <div class=\"feature investment\">\r\n <h4 class=\"--title\">Retorno de inversi\u00F3n</h4>\r\n <mat-form-field appearance=\"outline\" class=\"--col\">\r\n <mat-label>Porcentaje</mat-label>\r\n <mat-select formControlName=\"roi\">\r\n <mat-option [value]=\"0\">\r\n Sin l\u00EDmite\r\n </mat-option>\r\n <ng-container *ngFor=\"let roi of roiList\">\r\n <mat-option [value]=\"roi\">\r\n {{roi}}%\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n <div class=\"amenities-container\">\r\n <ng-template [ngIf]=\"propertyTypeSelected.amenities.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Amenidades\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let amenity of propertyTypeSelected.amenities\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(amenity)\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"\r\n [ngClass]=\"{'amenity--active': amenity.checked}\"></span>\r\n <span class=\"amenity__label\">{{amenity.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template [ngIf]=\"propertyTypeSelected.features.length > 0\">\r\n <div class=\"amenities\">\r\n <h4 class=\"--title\">\r\n Caracteristicas de la ubicaci\u00F3n\r\n </h4>\r\n <div class=\"amenities__list\">\r\n <ng-container *ngFor=\"let feature of propertyTypeSelected.features\">\r\n <div class=\"amenities__amenity\" matRipple (click)=\"updateAmenity(feature)\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"\r\n [ngClass]=\"{'amenity--active': feature.checked}\"></span>\r\n <span class=\"amenity__label\">{{feature.name}}</span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"actions\">\r\n <!--ng-template [ngIf]=\"!isOPI\" [ngIfElse]=\"closeButtonTemplate\">\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"saveSearchByFilters()\">\r\n GUARDAR\r\n </button>\r\n </ng-template-->\r\n <ng-template #closeButtonTemplate>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\" (click)=\"close()\">CERRAR</button>\r\n </ng-template>\r\n <button mat-flat-button=\"\" type=\"button\" class=\"action__button\" color=\"primary\"\r\n (click)=\"resetFilters()\">LIMPIAR\r\n </button>\r\n <button mat-flat-button=\"\" type=\"submit\" class=\"action__button\" color=\"primary\"\r\n (click)=\"applyFilters()\">APLICAR\r\n </button>\r\n </div>\r\n</form>\r\n",
|
|
477
|
+
styles: [":host{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;display:flex;background:var(--overlay);transition:250ms}.filters--opened{height:90%!important}@media screen and (max-width:600px){.filters--opened{width:100%!important;height:100%!important;top:0!important}}.filters{width:700px;height:auto;margin:auto;border-radius:16px;position:relative;overflow:hidden;transition:150ms}.filters .--padding{padding:16px 48px;box-sizing:border-box}.filters .--row{display:flex;justify-content:space-between;align-items:flex-start}.filters .--col{width:45%}.filters .--title{margin:16px 0;color:#707070}.filters .float-button-close{position:absolute;top:16px;right:16px;height:16px;border-radius:50%}.filters .body{height:calc(100% - 36px);overflow-x:hidden;overflow-y:auto}.filters .header{display:flex;align-items:center;justify-content:space-around;margin-bottom:8px}.filters .listing-types{width:100%;border-radius:16px}.filters .listing-types mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .listing-types mat-button-toggle button{height:36px}.filters ::ng-deep .listing-types mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .currency ::ng-deep .mat-form-field-wrapper{padding:0}@media screen and (max-width:600px){.filters{width:100%;position:absolute;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;top:initial;bottom:0;left:0}.filters .--padding{padding:16px 24px}.filters .header{flex-direction:column}.filters .currency{width:70%;margin-bottom:8px}}.filters .offering-type-list{width:40%;border-radius:16px}.filters .offering-type-list mat-button-toggle{width:50%;height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button{height:36px}.filters ::ng-deep .offering-type-list mat-button-toggle button .mat-button-toggle-label-content{line-height:36px}.filters .property-type-list{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 9))[9];grid-template-columns:repeat(9,calc(100% / 9));-ms-grid-rows:(80px)[1];grid-template-rows:repeat(1,80px);border-radius:40px;padding:8px;box-sizing:border-box}.filters .property-type-list .property-type-list__button{margin:auto;position:relative}.filters .property-type-list .property-type-list__button button{box-shadow:none}.filters .property-type-list .property-type-list__icon{width:24px;height:24px;font-size:24px}.filters .property-type-list .property-type-list__border{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:auto;opacity:.7;border-radius:50%;box-sizing:border-box}.filters .property-type-list .property-type-list__border--active{padding:4px;border:2px solid;opacity:1!important}.filters .property-type-list .property-type-list__label{font-size:12px;display:block;margin:8px 0;text-align:center}.filters .property-type-list .property-type-list__divider{width:14%;height:2px;background:#707070;top:30%;position:absolute}.filters .property-type-list .property-type-list__divider--left{left:-9px}.filters .property-type-list .property-type-list__divider--right{right:-9px}@media screen and (max-width:600px){.filters .offering-type-list{width:70%}.filters .property-type-list{-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3));-ms-grid-rows:(80px)[3];grid-template-rows:repeat(3,80px)}.filters .property-type-list .property-type-list__divider{width:60%}.filters .property-type-list .property-type-list__divider--left{left:-38px}.filters .property-type-list .property-type-list__divider--right{right:-38px}}.filters .all{width:100%;margin:8px 0}.filters .all .all__button{margin:0 40%;width:20%;border-radius:16px;background:0 0}.filters .budget{display:flex}.filters .budget mat-form-field{margin-right:8px;width:calc(100% / 2 - 8px)}.filters .features{display:-ms-grid;display:grid;-ms-grid-columns:(50%)[2];grid-template-columns:repeat(2,50%);-ms-grid-rows:(auto)[2];grid-template-rows:repeat(2,auto)}@media screen and (max-width:600px){.filters .all .all__button{width:50%;margin:0 25%}.filters .features{display:block}.filters .amenities-container{flex-direction:column}}.filters .features .features__bathrooms mat-button-toggle-group,.filters .features .features__bedrooms mat-button-toggle-group,.filters .features .features__parking-places mat-button-toggle-group{width:calc(100% - 16px)}.filters .features .features__bathrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__bedrooms mat-button-toggle-group mat-button-toggle,.filters .features .features__parking-places mat-button-toggle-group mat-button-toggle{width:calc(100% / 5)}.filters .features .features__bedrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__bathrooms--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__parking-places--unlimited ::ng-deep .mat-button-toggle-label-content{line-height:16px;padding:8px;font-size:12px}.filters .features .features__surface mat-button-toggle-group{margin-top:6px;margin-right:16px}.filters .amenities-container{width:100%;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:2;grid-column-end:3;display:flex}.filters .amenities{width:50%}@media screen and (max-width:600px){.filters .amenities{width:100%}}.filters .amenities__amenity{width:calc(100% / 3 - 24px);height:120px;border-radius:8px;padding:8px;display:inline-flex;flex-direction:column;align-items:center;box-sizing:border-box;margin:0 8px 8px 0;cursor:pointer}.filters .amenity__icon{display:block;width:24px;height:24px;margin:8px auto;font-size:24px;padding:8px;border-radius:50%}.filters .amenity__label{width:100%;display:block;text-align:center;font-size:12px;margin:auto}.filters .actions{display:flex}.filters .actions .action__button{width:50%;border-radius:0}"]
|
|
456
478
|
}] }
|
|
457
479
|
];
|
|
458
480
|
/** @nocollapse */
|
|
@@ -465,11 +487,23 @@ FiltersComponent.ctorParameters = () => [
|
|
|
465
487
|
{ type: CurrencyConverterService }
|
|
466
488
|
];
|
|
467
489
|
FiltersComponent.propDecorators = {
|
|
468
|
-
utils: [{ type: Input }]
|
|
490
|
+
utils: [{ type: Input }],
|
|
491
|
+
newFilters: [{ type: Input }],
|
|
492
|
+
stateOptions: [{ type: Input }],
|
|
493
|
+
propertyTotal: [{ type: Input }],
|
|
494
|
+
changeFilter: [{ type: Output }]
|
|
469
495
|
};
|
|
470
496
|
if (false) {
|
|
471
497
|
/** @type {?} */
|
|
472
498
|
FiltersComponent.prototype.utils;
|
|
499
|
+
/** @type {?} */
|
|
500
|
+
FiltersComponent.prototype.newFilters;
|
|
501
|
+
/** @type {?} */
|
|
502
|
+
FiltersComponent.prototype.stateOptions;
|
|
503
|
+
/** @type {?} */
|
|
504
|
+
FiltersComponent.prototype.propertyTotal;
|
|
505
|
+
/** @type {?} */
|
|
506
|
+
FiltersComponent.prototype.changeFilter;
|
|
473
507
|
/**
|
|
474
508
|
* @type {?}
|
|
475
509
|
* @private
|
|
@@ -554,4 +588,4 @@ if (false) {
|
|
|
554
588
|
*/
|
|
555
589
|
FiltersComponent.prototype._converter;
|
|
556
590
|
}
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUlMLFFBQVEsRUFDUixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBYSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBZSxRQUFRLEVBQXNCLGdCQUFnQixFQUFpQixnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9ILE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBRXhHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQU96RixNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7Ozs7SUFzQjNCLFlBQzZDLE9BQWdCLEVBQ25ELE9BQWtCLEVBQ2xCLElBQWdCLEVBQ2hCLFFBQXdC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TyxDQUFDLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7c0JBQ0osVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDdEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN4RTtRQUNILENBQUMsRUFBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7WUF4VUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QiwyMmJBQXVDOzthQUV4Qzs7OzswQ0F3QkksUUFBUSxZQUFJLE1BQU0sU0FBQyxhQUFhO1lBaERuQyxTQUFTO1lBUFQsVUFBVTtZQW9CSixjQUFjO1lBVmQsV0FBVztZQVFYLHdCQUF3Qjs7O29CQWU3QixLQUFLOzs7O0lBQU4saUNBQXdCOzs7OztJQUN4Qix3Q0FBNEM7Ozs7O0lBQzVDLDRDQUFtQzs7Ozs7SUFDbkMsNENBQW1DOzs7OztJQUNuQyx5Q0FBb0M7Ozs7O0lBQ3BDLCtDQUFxQzs7SUFDckMsdUNBQThCOztJQUM5Qiw0Q0FBNEM7O0lBQzVDLHdDQUE4Qjs7SUFDOUIseUNBQStCOztJQUMvQiw2Q0FBbUM7O0lBQ25DLHdDQUEyQjs7SUFDM0Isd0NBQThCOztJQUM5Qix3Q0FBOEI7O0lBQzlCLHVDQUE2Qjs7SUFDN0IsbUNBQXlCOztJQUN6QixnREFBOEM7O0lBQzlDLGtDQUFzQjs7SUFDdEIsaUNBQXNCOztJQUN0QiwrQ0FBbUM7Ozs7O0lBR2pDLG1DQUEyRDs7Ozs7SUFDM0QsbUNBQTBCOzs7OztJQUMxQixnQ0FBd0I7Ozs7O0lBQ3hCLG9DQUFnQzs7Ozs7SUFDaEMsd0NBQWlDOzs7OztJQUNqQyxzQ0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QXBwVXRpbCwgQ0VSLCBDdXJyZW5jeSwgRmlsdGVyLCBMaW1pdFByaWNlLCBPZmZlcmluZ1R5cGVFbnVtLCBQcm9wZXJ0eVJhbmdlLCBQcm9wZXJ0eVR5cGVFbnVtfSBmcm9tICdAbWFwbGFuZGVyL3R5cGVzJztcclxuaW1wb3J0IHtDb25zdGFudHNDb21wb25lbnRzfSBmcm9tICcuLi8uLi9jb25zdGFudHNDb21wb25lbnRzJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQge0ZpbHRlcnNDaGFuZ2V9IGZyb20gJy4vLi4vLi4vdXRpbHMvbW9kZWxzL2ZpbHRlcnMtY2hhbmdlJztcclxuaW1wb3J0IHtGaWx0ZXJzV3JhcHBlcn0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3Nlcy9maWx0ZXJzLXdyYXBwZXInO1xyXG5pbXBvcnQge1Byb3BlcnR5VHlwZUl0ZW19IGZyb20gJy4vLi4vLi4vdXRpbHMvbW9kZWxzL3Byb3BlcnR5LXR5cGUtaXRlbSc7XHJcbmltcG9ydCB7Q3VycmVuY3lDb252ZXJ0ZXJTZXJ2aWNlfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2N1cnJlbmN5LWNvbnZlcnRlci9jdXJyZW5jeS1jb252ZXJ0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RmlsdGVyc30gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJmYWNlcy9maWx0ZXJzJztcclxuaW1wb3J0IHtGaWx0ZXJzU2VydmljZX0gZnJvbSAnLi9maWx0ZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZpbHRlcnNDaGFuZ2VUeXBlfSBmcm9tICcuLi8uLi91dGlscy9lbnVtcyc7XHJcbmltcG9ydCB7RklMVEVSU19UT0tFTn0gZnJvbSAnLi90b2tlbic7XHJcbmltcG9ydCB7TVV0aWxzfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc2VzL21VdGlscyc7XHJcbmltcG9ydCB7QW1lbml0eUl0ZW19IGZyb20gJy4uLy4uL3V0aWxzL21vZGVscyc7XHJcbmltcG9ydCB7Q3VycmVuY3lGaWx0ZXJWYWxpZGF0b3J9IGZyb20gJy4uL3Byb3BlcnR5L3ZhbGlkYXRvcnMvY3VycmVuY3ktZmlsdGVyLXZhbGlkYXRvcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1maWx0ZXJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVycy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRmlsdGVycyB7XHJcbiAgQElucHV0KCkgdXRpbHM6IEFwcFV0aWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBNRVRFUlNfVE9fU1EgPSAxMC43NjM5MTA0MjtcclxuICBwcml2YXRlIF90bXBNaW5QcmljZUxpc3Q6IG51bWJlcltdO1xyXG4gIHByaXZhdGUgX3RtcE1heFByaWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfaXNTaGFyZWRQcm9wZXJ0aWVzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmaWx0ZXJzRm9ybTogRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBwcm9wZXJ0eVR5cGVMaXN0OiBQcm9wZXJ0eVR5cGVJdGVtW107XHJcbiAgcHVibGljIGJlZHJvb21zTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIGJhdGhyb29tc0xpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyBwYXJraW5nUGxhY2VzTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIGN1cnJlbmN5TGlzdDogQ0VSW107XHJcbiAgcHVibGljIG1pblByaWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIG1heFByaWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHN1cmZhY2VMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgcm9pTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHByb3BlcnR5VHlwZVNlbGVjdGVkOiBQcm9wZXJ0eVR5cGVJdGVtO1xyXG4gIHB1YmxpYyBmaWx0ZXI6IEZpbHRlcjtcclxuICBwdWJsaWMgaXNPUEk6IGJvb2xlYW47XHJcbiAgcHVibGljIHN1cmZhY2VVbml0U2VsZWN0ZWQ6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZJTFRFUlNfVE9LRU4pIHByaXZhdGUgX2NvbmZpZzogYm9vbGVhbixcclxuICAgIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogRmlsdGVyc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9jb252ZXJ0ZXI6IEN1cnJlbmN5Q29udmVydGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5pc09QSSA9IHRoaXMuX2NvbmZpZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMucHJvcGVydHlUeXBlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5tYXAoaXRlbSA9PiAoey4uLml0ZW19KSk7XHJcbiAgICB0aGlzLmJlZHJvb21zTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuQmVkcm9vbUxpc3QpO1xyXG4gICAgdGhpcy5iYXRocm9vbXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5CYXRocm9vbUxpc3QpO1xyXG4gICAgdGhpcy5wYXJraW5nUGxhY2VzTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuUGFya2luZ1NwYWNlc0xpc3QpO1xyXG4gICAgdGhpcy5zdXJmYWNlTGlzdCA9IE9iamVjdC5hc3NpZ24oW10sIENvbnN0YW50c0NvbXBvbmVudHMuU3VyZmFjZUxpc3QpO1xyXG4gICAgdGhpcy5yb2lMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5ST0lMaXN0KTtcclxuICAgIHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlQcm9wZXJ0eVR5cGUoKTtcclxuICAgIHRoaXMucmVzdG9yZUxhc3RGaWx0ZXJzU2F2ZWQodHJ1ZSk7XHJcbiAgICB0aGlzLmxpc3RlbkNoYW5nZXNPbkZvcm0oKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vcGVuQ29tcG9uZW50KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy51dGlscykge1xyXG4gICAgICByZXR1cm4gY29uc29sZS53YXJuKCdbRmlsdGVyc0NvbXBvbmVudF0gdXRpbHMgcGFyYW0gaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3V0aWxzJ10gJiYgY2hhbmdlc1sndXRpbHMnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1tGaWx0ZXJzQ29tcG9uZW50XSB1dGlscyByZWFkeScpO1xyXG4gICAgICB0aGlzLmluaXRDb21wb25lbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXN0b3JlTGFzdEZpbHRlcnNTYXZlZCgpO1xyXG4gICAgdGhpcy5vcGVuQ29tcG9uZW50KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUHJvcGVydHlUeXBlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRGaWx0ZXJzKGluZGV4KTtcclxuICAgIHRoaXMuYXBwbHlBbWVuaXRpZXMoKTtcclxuICAgIHRoaXMuZmlsdGVyLnR5cGUgPSB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkLnZhbHVlO1xyXG4gICAgc3dpdGNoICh0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkLnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlRW51bS5ST09NOlxyXG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10uc2V0VmFsdWUoT2ZmZXJpbmdUeXBlRW51bS5SRU5UKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLklOVkVTVE1FTlQ6XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS5zZXRWYWx1ZShPZmZlcmluZ1R5cGVFbnVtLlNBTEUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlT2ZmZXJpbmcoZXY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBldiBhcyBPZmZlcmluZ1R5cGVFbnVtO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlQ3VycmVuY3koZXY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIuY3VycmVuY3kgPSBldjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFtZW5pdHkoYW1lbml0eTogQW1lbml0eUl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChhbWVuaXR5LmNoZWNrZWQpIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMuZmlsdGVyLmV4dHJhcy5pbmRleE9mKGFtZW5pdHkudmFsdWUpO1xyXG4gICAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIuZXh0cmFzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXIuZXh0cmFzLnB1c2goYW1lbml0eS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbWVuaXR5LmNoZWNrZWQgPSAhYW1lbml0eS5jaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlYXJjaEJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLlNBVkUpO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKHR5cGU/OiBGaWx0ZXJzQ2hhbmdlVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJCeUZvcm0oKTtcclxuICAgIGNvbnN0IGZpbHRlclRvU2VhcmNoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgaWYgKHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJUb1NlYXJjaC5tYWluQXJlYSA9IGZpbHRlclRvU2VhcmNoLm1haW5BcmVhICogdGhpcy5NRVRFUlNfVE9fU1E7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChmaWx0ZXJUb1NlYXJjaCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnNldENoYW5nZSh7XHJcbiAgICAgIHR5cGU6IHR5cGUgfHwgRmlsdGVyc0NoYW5nZVR5cGUuQVBQTFksXHJcbiAgICAgIGZpbHRlcjogZmlsdGVyVG9TZWFyY2gsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzXHJcbiAgICB9KTtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZXNldEZpbHRlcnMocHJvcGVydHlUeXBlSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlci5jdXJyZW5jeSA9ICFwcm9wZXJ0eVR5cGVJdGVtSW5kZXggPyAnTVhOJyA6IHRoaXMuZmlsdGVyLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlSXRlbUluZGV4KTtcclxuICAgIHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmZpbHRlciA9IHByb3BlcnR5VHlwZUl0ZW1JbmRleCA/IFV0aWxzLmdldEZpbHRlckJ5UHJvcGVydHlUeXBlKHRoaXMuZmlsdGVyKSA6IFV0aWxzLmdldEluaXRpYWxGaWx0ZXIodGhpcy5pc09QSSwgdGhpcy5maWx0ZXIpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQnlGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBvZmZlcmluZzogW10sXHJcbiAgICAgIGN1cnJlbmN5OiBbXSxcclxuICAgICAgbWluUHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgbWF4UHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybihuZXcgUmVnRXhwKCcoXlswLTldKyknKSldXSxcclxuICAgICAgYmVkcm9vbXM6IFtdLFxyXG4gICAgICBiYXRocm9vbXM6IFtdLFxyXG4gICAgICBwYXJraW5nUGxhY2VzOiBbXSxcclxuICAgICAgc3VyZmFjZTogW10sXHJcbiAgICAgIHN1cmZhY2VVbml0OiBbXSxcclxuICAgICAgcm9pOiBbXVxyXG4gICAgfSwge1xyXG4gICAgICB2YWxpZGF0b3I6IEN1cnJlbmN5RmlsdGVyVmFsaWRhdG9yKCdtaW5QcmljZScsICdtYXhQcmljZScpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUJ5RmlsdGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgIG9mZmVyaW5nOiB0aGlzLmZpbHRlci5vZmZlcmluZyxcclxuICAgICAgY3VycmVuY3k6IHRoaXMuZmlsdGVyLmN1cnJlbmN5LFxyXG4gICAgICBtaW5QcmljZTogdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UsXHJcbiAgICAgIG1heFByaWNlOiB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UsXHJcbiAgICAgIGJlZHJvb21zOiB0aGlzLmZpbHRlci5iZWRyb29tcyxcclxuICAgICAgYmF0aHJvb21zOiB0aGlzLmZpbHRlci5iYXRocm9vbXMsXHJcbiAgICAgIHBhcmtpbmdQbGFjZXM6IHRoaXMuZmlsdGVyLnBhcmtpbmdQbGFjZXMsXHJcbiAgICAgIHN1cmZhY2U6IHRoaXMuZmlsdGVyLm1haW5BcmVhLFxyXG4gICAgICBzdXJmYWNlVW5pdDogdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkLFxyXG4gICAgICByb2k6IHRoaXMuZmlsdGVyLnJvaVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlckJ5Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlO1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBkYXRhLm9mZmVyaW5nO1xyXG4gICAgdGhpcy5maWx0ZXIuY3VycmVuY3kgPSBkYXRhLmN1cnJlbmN5O1xyXG4gICAgdGhpcy5maWx0ZXIuZG93bkxpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5taW5QcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci51cExpbWl0UHJpY2UgPSBOdW1iZXIoZGF0YS5tYXhQcmljZSk7XHJcbiAgICB0aGlzLmZpbHRlci5iZWRyb29tcyA9IE51bWJlcihkYXRhLmJlZHJvb21zKTtcclxuICAgIHRoaXMuZmlsdGVyLmJhdGhyb29tcyA9IE51bWJlcihkYXRhLmJhdGhyb29tcyk7XHJcbiAgICB0aGlzLmZpbHRlci5wYXJraW5nUGxhY2VzID0gTnVtYmVyKGRhdGEucGFya2luZ1BsYWNlcyk7XHJcbiAgICB0aGlzLmZpbHRlci5tYWluQXJlYSA9IE51bWJlcihkYXRhLnN1cmZhY2UpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gTnVtYmVyKGRhdGEuc3VyZmFjZVVuaXQpO1xyXG4gICAgdGhpcy5maWx0ZXIucm9pID0gTnVtYmVyKGRhdGEucm9pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFV0aWxzKCk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmdldENoYW5nZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBGaWx0ZXJzQ2hhbmdlKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIEZpbHRlcnNDaGFuZ2VUeXBlLkxJU1RfVFlQRTpcclxuICAgICAgICAgICAgdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzID0gcmVzcG9uc2UuaXNTaGFyZWRQcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChyZXNwb25zZS5maWx0ZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgRmlsdGVyc0NoYW5nZVR5cGUuQVJFQTpcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzU2F2ZWQocmVzcG9uc2UuZmlsdGVyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3NlcnZpY2Uuc3RhcnRDb21wb25lbnQobmV3IEZpbHRlcnNXcmFwcGVyKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFV0aWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW5jeUxpc3QgPSB0aGlzLnV0aWxzLmNlcnM7XHJcbiAgICB0aGlzLnNldFByaWNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQcmljZXModG8/OiBDdXJyZW5jeSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWluUHJpY2UnXS5yZXNldCgwKTtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21heFByaWNlJ10ucmVzZXQoMCk7XHJcbiAgICBjb25zdCBvZmZlcmluZyA9IHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWU7XHJcbiAgICB0aGlzLm1pblByaWNlTGlzdCA9IHRoaXMuY3JlYXRlUHJpY2VzKHRoaXMudXRpbHMubGltaXRQcmljZSwgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC52YWx1ZSwgb2ZmZXJpbmcpO1xyXG4gICAgdGhpcy5taW5QcmljZUxpc3QgPSB0aGlzLl9jb252ZXJ0ZXIubGlzdCh0aGlzLm1pblByaWNlTGlzdCwgdGhpcy51dGlscy5jZXJzLCBDdXJyZW5jeS5VU0QsIHRvIHx8IHRoaXMuZmlsdGVyLmN1cnJlbmN5IGFzIEN1cnJlbmN5KTtcclxuICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5taW5QcmljZUxpc3QpO1xyXG4gICAgdGhpcy5fdG1wTWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5tYXhQcmljZUxpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUFtZW5pdGllcygpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuYW1lbml0aWVzID0gdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5hbWVuaXRpZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5mZWF0dXJlcyA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQuZmVhdHVyZXMubWFwKGFtZW5pdHkgPT4ge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5maWx0ZXIuZXh0cmFzLmluZGV4T2YoYW1lbml0eS52YWx1ZSk7XHJcbiAgICAgIGFtZW5pdHkuY2hlY2tlZCA9IChpID4gLTEpO1xyXG4gICAgICByZXR1cm4gYW1lbml0eTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQcmljZXMobGltaXRQcmljZTogTGltaXRQcmljZSwgcHJvcGVydHlUeXBlOiBQcm9wZXJ0eVR5cGVFbnVtLCBvZmZlcmluZzogT2ZmZXJpbmdUeXBlRW51bSk6IG51bWJlcltdIHtcclxuICAgIGxldCBsaXN0OiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGltaXRQcmljZS5wcm9wZXJ0eVJhbmdlcy5mb3JFYWNoKChyYW5nZTogUHJvcGVydHlSYW5nZSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2Uub2ZmZXJpbmcgPT09IG9mZmVyaW5nICYmIHJhbmdlLnR5cGUgPT09IHByb3BlcnR5VHlwZSkge1xyXG4gICAgICAgIGxpc3QgPSBNVXRpbHMubGluU3BhY2VFeHAocmFuZ2UubWluLCByYW5nZS5tYXgsIDIwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbXBvbmVudEJ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZUl0ZW1JbmRleDogbnVtYmVyID0gbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdFtwcm9wZXJ0eVR5cGVJdGVtSW5kZXggIT09IG51bGwgPyBwcm9wZXJ0eVR5cGVJdGVtSW5kZXggOiA5XSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJzU2F2ZWQoZmlsdGVyczogRmlsdGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnM7XHJcbiAgICBGaWx0ZXJzU2VydmljZS5zYXZlRmlsdGVycyh7XHJcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXHJcbiAgICAgIGZ0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEsXHJcbiAgICAgIGlzU2hhcmVkUHJvcGVydGllczogdGhpcy5faXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzdG9yZUxhc3RGaWx0ZXJzU2F2ZWQoaW5pdD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcnNTYXZlZCA9IEZpbHRlcnNTZXJ2aWNlLmdldEZpbHRlcnNTYXZlZCgpIHx8IG51bGw7XHJcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcnNTYXZlZCA/IGZpbHRlcnNTYXZlZC5maWx0ZXJzIDogVXRpbHMuZ2V0SW5pdGlhbEZpbHRlcih0aGlzLmlzT1BJKTtcclxuICAgIGlmIChmaWx0ZXJzU2F2ZWQpIHtcclxuICAgICAgaWYgKGZpbHRlcnNTYXZlZC5mdCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLm1haW5BcmVhID0gTnVtYmVyKCh0aGlzLmZpbHRlci5tYWluQXJlYSAvIHRoaXMuTUVURVJTX1RPX1NRKS50b0ZpeGVkKDApKTtcclxuICAgICAgICB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPSBmaWx0ZXJzU2F2ZWQuZnQgPyAxIDogMDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pc1NoYXJlZFByb3BlcnRpZXMgPSBmaWx0ZXJzU2F2ZWQuaXNTaGFyZWRQcm9wZXJ0aWVzIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZCA9IENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5maWx0ZXIudHlwZSk7XHJcbiAgICB0aGlzLmFwcGx5QW1lbml0aWVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1CeUZpbHRlcnMoKTtcclxuICAgIGlmIChpbml0KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKEZpbHRlcnNDaGFuZ2VUeXBlLklOSVQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuQ29tcG9uZW50KG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChvcGVuKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICdvcGFjaXR5JywgJzEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ29wYWNpdHknLCAnMCcpO1xyXG4gICAgICB0aGlzLl9yZW5kZXIuc2V0U3R5bGUodGhpcy5fcmVmLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2NvbGxhcHNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlbkNoYW5nZXNPbkZvcm0oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snY3VycmVuY3knXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJpY2VzKHZhbHVlLnRvU3RyaW5nKCkgYXMgQ3VycmVuY3kpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ21pblByaWNlJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF4UHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWF4UHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5taW5QcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5tYXhQcmljZUxpc3Quc3BsaWNlKDAsIGkgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWF4UHJpY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWluUHJpY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5fdG1wTWluUHJpY2VMaXN0KTtcclxuICAgICAgICBjb25zdCBpID0gdGhpcy5tYXhQcmljZUxpc3QuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMubWluUHJpY2VMaXN0Lmxlbmd0aCAtIHRoaXMubWF4UHJpY2VMaXN0Lmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMubWluUHJpY2VMaXN0LnNwbGljZShpICsgZGlmZmVyZW5jZSwgdGhpcy5taW5QcmljZUxpc3QubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbWFwbGFuZGVyL2NvbXBvbmVudHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFBRSxZQUFZLEVBQ3hCLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUFFLE1BQU0sRUFDaEIsU0FBUyxFQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQWUsUUFBUSxFQUFzQixnQkFBZ0IsRUFBaUIsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVuRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUV4RyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFPekYsTUFBTSxPQUFPLGdCQUFnQjs7Ozs7Ozs7O0lBMEIzQixZQUM2QyxPQUFnQixFQUNuRCxPQUFrQixF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LENBQUMsRUFBQyxDQUNILENBQUM7SUFDSixDQUFDOzs7WUFoV0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QixnM2JBQXVDOzthQUV4Qzs7OzswQ0E0QkksUUFBUSxZQUFJLE1BQU0sU0FBQyxhQUFhO1lBcERuQyxTQUFTO1lBUFQsVUFBVTtZQW9CSixjQUFjO1lBVmQsV0FBVztZQVFYLHdCQUF3Qjs7O29CQWU3QixLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzs0QkFDTCxLQUFLOzJCQUNMLE1BQU07Ozs7SUFKUCxpQ0FBd0I7O0lBQ3hCLHNDQUE2Qjs7SUFDN0Isd0NBQTREOztJQUM1RCx5Q0FBK0I7O0lBQy9CLHdDQUErRzs7Ozs7SUFDL0csd0NBQTRDOzs7OztJQUM1Qyw0Q0FBbUM7Ozs7O0lBQ25DLDRDQUFtQzs7Ozs7SUFDbkMseUNBQW9DOzs7OztJQUNwQywrQ0FBcUM7O0lBQ3JDLHVDQUE4Qjs7SUFDOUIsNENBQTRDOztJQUM1Qyx3Q0FBOEI7O0lBQzlCLHlDQUErQjs7SUFDL0IsNkNBQW1DOztJQUNuQyx3Q0FBMkI7O0lBQzNCLHdDQUE4Qjs7SUFDOUIsd0NBQThCOztJQUM5Qix1Q0FBNkI7O0lBQzdCLG1DQUF5Qjs7SUFDekIsZ0RBQThDOztJQUM5QyxrQ0FBc0I7O0lBQ3RCLGlDQUFzQjs7SUFDdEIsK0NBQW1DOzs7OztJQUdqQyxtQ0FBMkQ7Ozs7O0lBQzNELG1DQUEwQjs7Ozs7SUFDMUIsZ0NBQXdCOzs7OztJQUN4QixvQ0FBZ0M7Ozs7O0lBQ2hDLHdDQUFpQzs7Ozs7SUFDakMsc0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLCBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBcHBVdGlsLCBDRVIsIEN1cnJlbmN5LCBGaWx0ZXIsIExpbWl0UHJpY2UsIE9mZmVyaW5nVHlwZUVudW0sIFByb3BlcnR5UmFuZ2UsIFByb3BlcnR5VHlwZUVudW19IGZyb20gJ0BtYXBsYW5kZXIvdHlwZXMnO1xyXG5pbXBvcnQge0NvbnN0YW50c0NvbXBvbmVudHN9IGZyb20gJy4uLy4uL2NvbnN0YW50c0NvbXBvbmVudHMnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvZmlsdGVycy1jaGFuZ2UnO1xyXG5pbXBvcnQge0ZpbHRlcnNXcmFwcGVyfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc2VzL2ZpbHRlcnMtd3JhcHBlcic7XHJcbmltcG9ydCB7UHJvcGVydHlUeXBlSXRlbX0gZnJvbSAnLi8uLi8uLi91dGlscy9tb2RlbHMvcHJvcGVydHktdHlwZS1pdGVtJztcclxuaW1wb3J0IHtDdXJyZW5jeUNvbnZlcnRlclNlcnZpY2V9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvY3VycmVuY3ktY29udmVydGVyL2N1cnJlbmN5LWNvbnZlcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtGaWx0ZXJzfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcmZhY2VzL2ZpbHRlcnMnO1xyXG5pbXBvcnQge0ZpbHRlcnNTZXJ2aWNlfSBmcm9tICcuL2ZpbHRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7RmlsdGVyc0NoYW5nZVR5cGV9IGZyb20gJy4uLy4uL3V0aWxzL2VudW1zJztcclxuaW1wb3J0IHtGSUxURVJTX1RPS0VOfSBmcm9tICcuL3Rva2VuJztcclxuaW1wb3J0IHtNVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzZXMvbVV0aWxzJztcclxuaW1wb3J0IHtBbWVuaXR5SXRlbX0gZnJvbSAnLi4vLi4vdXRpbHMvbW9kZWxzJztcclxuaW1wb3J0IHtDdXJyZW5jeUZpbHRlclZhbGlkYXRvcn0gZnJvbSAnLi4vcHJvcGVydHkvdmFsaWRhdG9ycy9jdXJyZW5jeS1maWx0ZXItdmFsaWRhdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGaWx0ZXJzIHtcclxuICBASW5wdXQoKSB1dGlsczogQXBwVXRpbDtcclxuICBASW5wdXQoKSBuZXdGaWx0ZXJzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHN0YXRlT3B0aW9uczogQXJyYXk8e25hbWU6IHN0cmluZywgdG90YWw6IG51bWJlcn0+O1xyXG4gIEBJbnB1dCgpIHByb3BlcnR5VG90YWw6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgY2hhbmdlRmlsdGVyOiBFdmVudEVtaXR0ZXI8e3R5cGU6ICdwcm9wZXJ0eVR5cGUnIHwgJ2ZpbHRlcicsIHBheWxvYWQ6IHtmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueX19PjtcclxuICBwcml2YXRlIHJlYWRvbmx5IE1FVEVSU19UT19TUSA9IDEwLjc2MzkxMDQyO1xyXG4gIHByaXZhdGUgX3RtcE1pblByaWNlTGlzdDogbnVtYmVyW107XHJcbiAgcHJpdmF0ZSBfdG1wTWF4UHJpY2VMaXN0OiBudW1iZXJbXTtcclxuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9pc1NoYXJlZFByb3BlcnRpZXM6IGJvb2xlYW47XHJcbiAgcHVibGljIGZpbHRlcnNGb3JtOiBGb3JtR3JvdXA7XHJcbiAgcHVibGljIHByb3BlcnR5VHlwZUxpc3Q6IFByb3BlcnR5VHlwZUl0ZW1bXTtcclxuICBwdWJsaWMgYmVkcm9vbXNMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgYmF0aHJvb21zTGlzdDogbnVtYmVyW107XHJcbiAgcHVibGljIHBhcmtpbmdQbGFjZXNMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgY3VycmVuY3lMaXN0OiBDRVJbXTtcclxuICBwdWJsaWMgbWluUHJpY2VMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgbWF4UHJpY2VMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgc3VyZmFjZUxpc3Q6IG51bWJlcltdO1xyXG4gIHB1YmxpYyByb2lMaXN0OiBudW1iZXJbXTtcclxuICBwdWJsaWMgcHJvcGVydHlUeXBlU2VsZWN0ZWQ6IFByb3BlcnR5VHlwZUl0ZW07XHJcbiAgcHVibGljIGZpbHRlcjogRmlsdGVyO1xyXG4gIHB1YmxpYyBpc09QSTogYm9vbGVhbjtcclxuICBwdWJsaWMgc3VyZmFjZVVuaXRTZWxlY3RlZDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRklMVEVSU19UT0tFTikgcHJpdmF0ZSBfY29uZmlnOiBib29sZWFuLFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIF9yZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBGaWx0ZXJzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX2NvbnZlcnRlcjogQ3VycmVuY3lDb252ZXJ0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e3R5cGU6ICdwcm9wZXJ0eVR5cGUnIHwgJ2ZpbHRlcicsIHBheWxvYWQ6IHtmaWx0ZXI6IEZpbHRlciwgdmFsdWU6IGFueX19PigpO1xyXG4gICAgdGhpcy5pc09QSSA9IHRoaXMuX2NvbmZpZyB8fCBmYWxzZTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHRoaXMucHJvcGVydHlUeXBlTGlzdCA9IENvbnN0YW50c0NvbXBvbmVudHMuUHJvcGVydHlUeXBlTGlzdC5tYXAoaXRlbSA9PiAoey4uLml0ZW19KSk7XHJcbiAgICBpZiAodGhpcy5uZXdGaWx0ZXJzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0eVR5cGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydHlUeXBlTGlzdFtpXS52YWx1ZSA9PT0gUHJvcGVydHlUeXBlRW51bS5ST09NIHx8IHRoaXMucHJvcGVydHlUeXBlTGlzdFtpXS52YWx1ZSA9PT0gUHJvcGVydHlUeXBlRW51bS5SRVNJREVOVElBTCkge1xyXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVMaXN0LnNwbGljZShpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYmVkcm9vbXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5CZWRyb29tTGlzdCk7XHJcbiAgICB0aGlzLmJhdGhyb29tc0xpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLkJhdGhyb29tTGlzdCk7XHJcbiAgICB0aGlzLnBhcmtpbmdQbGFjZXNMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5QYXJraW5nU3BhY2VzTGlzdCk7XHJcbiAgICB0aGlzLnN1cmZhY2VMaXN0ID0gT2JqZWN0LmFzc2lnbihbXSwgQ29uc3RhbnRzQ29tcG9uZW50cy5TdXJmYWNlTGlzdCk7XHJcbiAgICB0aGlzLnJvaUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCBDb25zdGFudHNDb21wb25lbnRzLlJPSUxpc3QpO1xyXG4gICAgdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID0gMDtcclxuICAgIHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB0aGlzLmluaXRDb21wb25lbnRCeVByb3BlcnR5VHlwZSgpO1xyXG4gICAgdGhpcy5yZXN0b3JlTGFzdEZpbHRlcnNTYXZlZCh0cnVlKTtcclxuICAgIHRoaXMubGlzdGVuQ2hhbmdlc09uRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnV0aWxzKSB7XHJcbiAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ1tGaWx0ZXJzQ29tcG9uZW50XSB1dGlscyBwYXJhbSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sndXRpbHMnXSAmJiBjaGFuZ2VzWyd1dGlscyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnW0ZpbHRlcnNDb21wb25lbnRdIHV0aWxzIHJlYWR5Jyk7XHJcbiAgICAgIHRoaXMuaW5pdENvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc3RvcmVMYXN0RmlsdGVyc1NhdmVkKCk7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub3BlbkNvbXBvbmVudChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQcm9wZXJ0eVR5cGUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNldEZpbHRlcnMoaW5kZXgpO1xyXG4gICAgdGhpcy5hcHBseUFtZW5pdGllcygpO1xyXG4gICAgdGhpcy5maWx0ZXIudHlwZSA9IHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMucHJvcGVydHlUeXBlU2VsZWN0ZWQudmFsdWUpIHtcclxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGVFbnVtLlJPT006XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS5zZXRWYWx1ZShPZmZlcmluZ1R5cGVFbnVtLlJFTlQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BlcnR5VHlwZUVudW0uSU5WRVNUTUVOVDpcclxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydvZmZlcmluZyddLnNldFZhbHVlKE9mZmVyaW5nVHlwZUVudW0uU0FMRSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZUZpbHRlci5lbWl0KHt0eXBlOiAncHJvcGVydHlUeXBlJywgcGF5bG9hZDoge2ZpbHRlcjogdGhpcy5maWx0ZXIsIHZhbHVlOiB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlfX0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT2ZmZXJpbmcoZXY6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIub2ZmZXJpbmcgPSBldiBhcyBPZmZlcmluZ1R5cGVFbnVtO1xyXG4gICAgdGhpcy5jaGFuZ2VGaWx0ZXIuZW1pdCh7dHlwZTogJ2ZpbHRlcicsIHBheWxvYWQ6IHtmaWx0ZXI6IHRoaXMuZmlsdGVyLCB2YWx1ZTogdGhpcy5maWx0ZXJzRm9ybS52YWx1ZX19KTtcclxuXHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDdXJyZW5jeShldjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlci5jdXJyZW5jeSA9IGV2O1xyXG4gICAgdGhpcy5jaGFuZ2VGaWx0ZXIuZW1pdCh7dHlwZTogJ2ZpbHRlcicsIHBheWxvYWQ6IHtmaWx0ZXI6IHRoaXMuZmlsdGVyLCB2YWx1ZTogdGhpcy5maWx0ZXJzRm9ybS52YWx1ZX19KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFtZW5pdHkoYW1lbml0eTogQW1lbml0eUl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChhbWVuaXR5LmNoZWNrZWQpIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMuZmlsdGVyLmV4dHJhcy5pbmRleE9mKGFtZW5pdHkudmFsdWUpO1xyXG4gICAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIuZXh0cmFzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXIuZXh0cmFzLnB1c2goYW1lbml0eS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbWVuaXR5LmNoZWNrZWQgPSAhYW1lbml0eS5jaGVja2VkO1xyXG4gICAgdGhpcy5jaGFuZ2VGaWx0ZXIuZW1pdCh7dHlwZTogJ2ZpbHRlcicsIHBheWxvYWQ6IHtmaWx0ZXI6IHRoaXMuZmlsdGVyLCB2YWx1ZTogdGhpcy5maWx0ZXJzRm9ybS52YWx1ZX19KTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWFyY2hCeUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycyhGaWx0ZXJzQ2hhbmdlVHlwZS5TQVZFKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RmlsdGVycyh0eXBlPzogRmlsdGVyc0NoYW5nZVR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RmlsdGVyQnlGb3JtKCk7XHJcbiAgICBjb25zdCBmaWx0ZXJUb1NlYXJjaCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsdGVyKTtcclxuICAgIGlmICh0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPT09IDEpIHtcclxuICAgICAgZmlsdGVyVG9TZWFyY2gubWFpbkFyZWEgPSBmaWx0ZXJUb1NlYXJjaC5tYWluQXJlYSAqIHRoaXMuTUVURVJTX1RPX1NRO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzU2F2ZWQoZmlsdGVyVG9TZWFyY2gpO1xyXG4gICAgdGhpcy5fc2VydmljZS5zZXRDaGFuZ2Uoe1xyXG4gICAgICB0eXBlOiB0eXBlIHx8IEZpbHRlcnNDaGFuZ2VUeXBlLkFQUExZLFxyXG4gICAgICBmaWx0ZXI6IGZpbHRlclRvU2VhcmNoLFxyXG4gICAgICBmdDogdGhpcy5zdXJmYWNlVW5pdFNlbGVjdGVkID09PSAxLFxyXG4gICAgICBpc1NoYXJlZFByb3BlcnRpZXM6IHRoaXMuX2lzU2hhcmVkUHJvcGVydGllc1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9wZW5Db21wb25lbnQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXJzKHByb3BlcnR5VHlwZUl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXIuY3VycmVuY3kgPSAhcHJvcGVydHlUeXBlSXRlbUluZGV4ID8gJ01YTicgOiB0aGlzLmZpbHRlci5jdXJyZW5jeTtcclxuICAgIHRoaXMuaW5pdENvbXBvbmVudEJ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZUl0ZW1JbmRleCk7XHJcbiAgICB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPSAwO1xyXG4gICAgdGhpcy5maWx0ZXIgPSBwcm9wZXJ0eVR5cGVJdGVtSW5kZXggPyBVdGlscy5nZXRGaWx0ZXJCeVByb3BlcnR5VHlwZSh0aGlzLmZpbHRlcikgOiBVdGlscy5nZXRJbml0aWFsRmlsdGVyKHRoaXMuaXNPUEksIHRoaXMuZmlsdGVyKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUJ5RmlsdGVycygpO1xyXG4gICAgdGhpcy5zZXRQcmljZXMoKTtcclxuICAgIHRoaXMuY2hhbmdlRmlsdGVyLmVtaXQoe3R5cGU6ICdmaWx0ZXInLCBwYXlsb2FkOiB7ZmlsdGVyOiB0aGlzLmZpbHRlciwgdmFsdWU6IHRoaXMuZmlsdGVyc0Zvcm0udmFsdWV9fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHN0YXRlOiBbXSxcclxuICAgICAgb2ZmZXJpbmc6IFtdLFxyXG4gICAgICBjdXJyZW5jeTogW10sXHJcbiAgICAgIG1pblByaWNlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4obmV3IFJlZ0V4cCgnKF5bMC05XSspJykpXV0sXHJcbiAgICAgIG1heFByaWNlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4obmV3IFJlZ0V4cCgnKF5bMC05XSspJykpXV0sXHJcbiAgICAgIGJlZHJvb21zOiBbXSxcclxuICAgICAgYmF0aHJvb21zOiBbXSxcclxuICAgICAgcGFya2luZ1BsYWNlczogW10sXHJcbiAgICAgIHN1cmZhY2U6IFtdLFxyXG4gICAgICBzdXJmYWNlVW5pdDogW10sXHJcbiAgICAgIHJvaTogW11cclxuICAgIH0sIHtcclxuICAgICAgdmFsaWRhdG9yOiBDdXJyZW5jeUZpbHRlclZhbGlkYXRvcignbWluUHJpY2UnLCAnbWF4UHJpY2UnKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZUZpbHRlci5lbWl0KHt0eXBlOiAnZmlsdGVyJywgcGF5bG9hZDoge2ZpbHRlcjogdGhpcy5maWx0ZXIsIHZhbHVlOiB0aGlzLmZpbHRlcnNGb3JtLnZhbHVlfX0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1CeUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBzdGF0ZTogbnVsbCxcclxuICAgICAgb2ZmZXJpbmc6IHRoaXMuZmlsdGVyLm9mZmVyaW5nLFxyXG4gICAgICBjdXJyZW5jeTogdGhpcy5maWx0ZXIuY3VycmVuY3ksXHJcbiAgICAgIG1pblByaWNlOiB0aGlzLmZpbHRlci5kb3duTGltaXRQcmljZSxcclxuICAgICAgbWF4UHJpY2U6IHRoaXMuZmlsdGVyLnVwTGltaXRQcmljZSxcclxuICAgICAgYmVkcm9vbXM6IHRoaXMuZmlsdGVyLmJlZHJvb21zLFxyXG4gICAgICBiYXRocm9vbXM6IHRoaXMuZmlsdGVyLmJhdGhyb29tcyxcclxuICAgICAgcGFya2luZ1BsYWNlczogdGhpcy5maWx0ZXIucGFya2luZ1BsYWNlcyxcclxuICAgICAgc3VyZmFjZTogdGhpcy5maWx0ZXIubWFpbkFyZWEsXHJcbiAgICAgIHN1cmZhY2VVbml0OiB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQsXHJcbiAgICAgIHJvaTogdGhpcy5maWx0ZXIucm9pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVyQnlGb3JtKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVyc0Zvcm0udmFsdWU7XHJcbiAgICB0aGlzLmZpbHRlci5zdGF0ZSA9IGRhdGEuc3RhdGU7XHJcbiAgICB0aGlzLmZpbHRlci5vZmZlcmluZyA9IGRhdGEub2ZmZXJpbmc7XHJcbiAgICB0aGlzLmZpbHRlci5jdXJyZW5jeSA9IGRhdGEuY3VycmVuY3k7XHJcbiAgICB0aGlzLmZpbHRlci5kb3duTGltaXRQcmljZSA9IE51bWJlcihkYXRhLm1pblByaWNlKTtcclxuICAgIHRoaXMuZmlsdGVyLnVwTGltaXRQcmljZSA9IE51bWJlcihkYXRhLm1heFByaWNlKTtcclxuICAgIHRoaXMuZmlsdGVyLmJlZHJvb21zID0gTnVtYmVyKGRhdGEuYmVkcm9vbXMpO1xyXG4gICAgdGhpcy5maWx0ZXIuYmF0aHJvb21zID0gTnVtYmVyKGRhdGEuYmF0aHJvb21zKTtcclxuICAgIHRoaXMuZmlsdGVyLnBhcmtpbmdQbGFjZXMgPSBOdW1iZXIoZGF0YS5wYXJraW5nUGxhY2VzKTtcclxuICAgIHRoaXMuZmlsdGVyLm1haW5BcmVhID0gTnVtYmVyKGRhdGEuc3VyZmFjZSk7XHJcbiAgICB0aGlzLnN1cmZhY2VVbml0U2VsZWN0ZWQgPSBOdW1iZXIoZGF0YS5zdXJmYWNlVW5pdCk7XHJcbiAgICB0aGlzLmZpbHRlci5yb2kgPSBOdW1iZXIoZGF0YS5yb2kpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0VXRpbHMoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2UuZ2V0Q2hhbmdlcygpLnN1YnNjcmliZSgocmVzcG9uc2U6IEZpbHRlcnNDaGFuZ2UpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgRmlsdGVyc0NoYW5nZVR5cGUuTElTVF9UWVBFOlxyXG4gICAgICAgICAgICB0aGlzLl9pc1NoYXJlZFByb3BlcnRpZXMgPSByZXNwb25zZS5pc1NoYXJlZFByb3BlcnRpZXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyc1NhdmVkKHJlc3BvbnNlLmZpbHRlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBGaWx0ZXJzQ2hhbmdlVHlwZS5BUkVBOlxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNTYXZlZChyZXNwb25zZS5maWx0ZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc2VydmljZS5zdGFydENvbXBvbmVudChuZXcgRmlsdGVyc1dyYXBwZXIodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VXRpbHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbmN5TGlzdCA9IHRoaXMudXRpbHMuY2VycztcclxuICAgIHRoaXMuc2V0UHJpY2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFByaWNlcyh0bz86IEN1cnJlbmN5KTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydtaW5QcmljZSddLnJlc2V0KDApO1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWF4UHJpY2UnXS5yZXNldCgwKTtcclxuICAgIGNvbnN0IG9mZmVyaW5nID0gdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snb2ZmZXJpbmcnXS52YWx1ZTtcclxuICAgIHRoaXMubWluUHJpY2VMaXN0ID0gdGhpcy5jcmVhdGVQcmljZXModGhpcy51dGlscy5saW1pdFByaWNlLCB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkLnZhbHVlLCBvZmZlcmluZyk7XHJcbiAgICB0aGlzLm1pblByaWNlTGlzdCA9IHRoaXMuX2NvbnZlcnRlci5saXN0KHRoaXMubWluUHJpY2VMaXN0LCB0aGlzLnV0aWxzLmNlcnMsIEN1cnJlbmN5LlVTRCwgdG8gfHwgdGhpcy5maWx0ZXIuY3VycmVuY3kgYXMgQ3VycmVuY3kpO1xyXG4gICAgdGhpcy5tYXhQcmljZUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLm1pblByaWNlTGlzdCk7XHJcbiAgICB0aGlzLl90bXBNaW5QcmljZUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLm1pblByaWNlTGlzdCk7XHJcbiAgICB0aGlzLl90bXBNYXhQcmljZUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLm1heFByaWNlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QW1lbml0aWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5hbWVuaXRpZXMgPSB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkLmFtZW5pdGllcy5tYXAoYW1lbml0eSA9PiB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZpbHRlci5leHRyYXMuaW5kZXhPZihhbWVuaXR5LnZhbHVlKTtcclxuICAgICAgYW1lbml0eS5jaGVja2VkID0gKGkgPiAtMSk7XHJcbiAgICAgIHJldHVybiBhbWVuaXR5O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkLmZlYXR1cmVzID0gdGhpcy5wcm9wZXJ0eVR5cGVTZWxlY3RlZC5mZWF0dXJlcy5tYXAoYW1lbml0eSA9PiB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZpbHRlci5leHRyYXMuaW5kZXhPZihhbWVuaXR5LnZhbHVlKTtcclxuICAgICAgYW1lbml0eS5jaGVja2VkID0gKGkgPiAtMSk7XHJcbiAgICAgIHJldHVybiBhbWVuaXR5O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVByaWNlcyhsaW1pdFByaWNlOiBMaW1pdFByaWNlLCBwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZUVudW0sIG9mZmVyaW5nOiBPZmZlcmluZ1R5cGVFbnVtKTogbnVtYmVyW10ge1xyXG4gICAgbGV0IGxpc3Q6IG51bWJlcltdID0gW107XHJcbiAgICBsaW1pdFByaWNlLnByb3BlcnR5UmFuZ2VzLmZvckVhY2goKHJhbmdlOiBQcm9wZXJ0eVJhbmdlKSA9PiB7XHJcbiAgICAgIGlmIChyYW5nZS5vZmZlcmluZyA9PT0gb2ZmZXJpbmcgJiYgcmFuZ2UudHlwZSA9PT0gcHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgbGlzdCA9IE1VdGlscy5saW5TcGFjZUV4cChyYW5nZS5taW4sIHJhbmdlLm1heCwgMjApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29tcG9uZW50QnlQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlSXRlbUluZGV4OiBudW1iZXIgPSBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkoQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0W3Byb3BlcnR5VHlwZUl0ZW1JbmRleCAhPT0gbnVsbCA/IHByb3BlcnR5VHlwZUl0ZW1JbmRleCA6IDldKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcnNTYXZlZChmaWx0ZXJzOiBGaWx0ZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyID0gZmlsdGVycztcclxuICAgIEZpbHRlcnNTZXJ2aWNlLnNhdmVGaWx0ZXJzKHtcclxuICAgICAgZmlsdGVyczogZmlsdGVycyxcclxuICAgICAgZnQ6IHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9PT0gMSxcclxuICAgICAgaXNTaGFyZWRQcm9wZXJ0aWVzOiB0aGlzLl9pc1NoYXJlZFByb3BlcnRpZXMgfHwgZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN0b3JlTGFzdEZpbHRlcnNTYXZlZChpbml0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsdGVyc1NhdmVkID0gRmlsdGVyc1NlcnZpY2UuZ2V0RmlsdGVyc1NhdmVkKCkgfHwgbnVsbDtcclxuICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyc1NhdmVkID8gZmlsdGVyc1NhdmVkLmZpbHRlcnMgOiBVdGlscy5nZXRJbml0aWFsRmlsdGVyKHRoaXMuaXNPUEkpO1xyXG4gICAgaWYgKGZpbHRlcnNTYXZlZCkge1xyXG4gICAgICBpZiAoZmlsdGVyc1NhdmVkLmZ0KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIubWFpbkFyZWEgPSBOdW1iZXIoKHRoaXMuZmlsdGVyLm1haW5BcmVhIC8gdGhpcy5NRVRFUlNfVE9fU1EpLnRvRml4ZWQoMCkpO1xyXG4gICAgICAgIHRoaXMuc3VyZmFjZVVuaXRTZWxlY3RlZCA9IGZpbHRlcnNTYXZlZC5mdCA/IDEgOiAwO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2lzU2hhcmVkUHJvcGVydGllcyA9IGZpbHRlcnNTYXZlZC5pc1NoYXJlZFByb3BlcnRpZXMgfHwgZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb3BlcnR5VHlwZVNlbGVjdGVkID0gQ29uc3RhbnRzQ29tcG9uZW50cy5Qcm9wZXJ0eVR5cGVMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmZpbHRlci50eXBlKTtcclxuICAgIHRoaXMuYXBwbHlBbWVuaXRpZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUJ5RmlsdGVycygpO1xyXG4gICAgaWYgKGluaXQpIHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoRmlsdGVyc0NoYW5nZVR5cGUuSU5JVCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5Db21wb25lbnQob3BlbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKG9wZW4pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyLnNldFN0eWxlKHRoaXMuX3JlZi5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ29wYWNpdHknLCAnMScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcmVuZGVyLnNldFN0eWxlKHRoaXMuX3JlZi5uYXRpdmVFbGVtZW50LCAnb3BhY2l0eScsICcwJyk7XHJcbiAgICAgIHRoaXMuX3JlbmRlci5zZXRTdHlsZSh0aGlzLl9yZWYubmF0aXZlRWxlbWVudCwgJ3Zpc2liaWxpdHknLCAnY29sbGFwc2UnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2hhbmdlc09uRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0uY29udHJvbHNbJ29mZmVyaW5nJ10udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRQcmljZXMoKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydjdXJyZW5jeSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRQcmljZXModmFsdWUudG9TdHJpbmcoKSBhcyBDdXJyZW5jeSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1snbWluUHJpY2UnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXhQcmljZUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLl90bXBNYXhQcmljZUxpc3QpO1xyXG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLm1pblByaWNlTGlzdC5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLm1heFByaWNlTGlzdC5zcGxpY2UoMCwgaSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzWydtYXhQcmljZSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5taW5QcmljZUxpc3QgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLl90bXBNaW5QcmljZUxpc3QpO1xyXG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLm1heFByaWNlTGlzdC5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICBpZiAoaSA+IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5taW5QcmljZUxpc3QubGVuZ3RoIC0gdGhpcy5tYXhQcmljZUxpc3QubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5taW5QcmljZUxpc3Quc3BsaWNlKGkgKyBkaWZmZXJlbmNlLCB0aGlzLm1pblByaWNlTGlzdC5sZW5ndGggLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -203,7 +203,7 @@ PanoramaVisorComponent.decorators = [
|
|
|
203
203
|
{ type: Component, args: [{
|
|
204
204
|
selector: 'lib-panorama-visor',
|
|
205
205
|
template: "<div class=\"panorama-visor\">\r\n <ng-template [ngIf]=\"!showPanorama\">\r\n <div class=\"panorama-visor__loading\">\r\n <img class=\"loading__image\" src=\"https://storage.googleapis.com/maplander-develop/public/file/front-end/cdn/360-animation.gif\" alt=\"360 icon\">\r\n <p class=\"loading__label\">Cargando...</p>\r\n </div>\r\n </ng-template>\r\n <div #container class=\"panorama-visor__container\" [ngStyle]=\"{'opacity': showPanorama ? '1' : '0'}\">\r\n <div class=\"panorama-visor__actions\">\r\n <a mat-icon-button class=\"actions__menu-item\">\r\n <mat-icon>settings</mat-icon>\r\n <ul class=\"menu-item__hidden-list mat-elevation-z2\">\r\n <li mat-menu-item class=\"hidden-list__item\">\r\n Control\r\n <ul class=\"hidden-list__nested-list mat-elevation-z2\">\r\n <li mat-menu-item class=\"nested-list__item\" *ngIf=\"!isTouch\" (click)=\"changeControl('MOUSE')\">\r\n Mouse\r\n </li>\r\n <li mat-menu-item class=\"nested-list__item\" *ngIf=\"isTouch\" (click)=\"changeControl('TOUCH')\">\r\n Touch\r\n </li>\r\n <li mat-menu-item class=\"nested-list__item\" (click)=\"changeControl('SENSOR')\">\r\n Sensor\r\n </li>\r\n </ul>\r\n </li>\r\n <li mat-menu-item class=\"hidden-list__item\">\r\n Mode\r\n <ul class=\"hidden-list__nested-list mat-elevation-z2\">\r\n <li mat-menu-item class=\"nested-list__item\" (click)=\"changeMode('NORMAL')\">\r\n Normal\r\n </li>\r\n <li mat-menu-item class=\"nested-list__item\" (click)=\"changeMode('CARDBOARD')\">\r\n Cardboard\r\n </li>\r\n <li mat-menu-item class=\"nested-list__item\" (click)=\"changeMode('STEREOSCOPIC')\">\r\n Stereoscopic\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </a>\r\n <button mat-icon-button (click)=\"fullscreen()\">\r\n <mat-icon *ngIf=\"!isFullScreen\">fullscreen</mat-icon>\r\n <mat-icon *ngIf=\"isFullScreen\">fullscreen_exit</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
206
|
-
styles: [":host{display:block;width:inherit;height:inherit}.panorama-visor{width:100%;padding-bottom:
|
|
206
|
+
styles: [":host{display:block;width:inherit;height:inherit}.panorama-visor{width:100%;padding-bottom:calc(100% / 4 * 3);position:relative;border-radius:8px;transition:.2s;cursor:move}.panorama-visor__loading{position:absolute;width:100%;height:100%;font-size:12px;display:flex;flex-direction:column;align-items:center;justify-content:center}.loading__image{width:200px}.loading__label{color:#fff;font-weight:700}.panorama-visor__actions{position:absolute;border-radius:0 8px 8px 0;background:rgba(0,0,0,.4);z-index:100;color:#fff}.panorama-visor__actions button{display:block}.actions__menu-item{position:relative}.actions__menu-item:hover .menu-item__hidden-list,.hidden-list__item:hover .hidden-list__nested-list{display:block}.hidden-list__nested-list,.menu-item__hidden-list{display:none;list-style:none;position:absolute;background:#fff;margin:0;padding:0;left:calc(100% - 8px);top:0;z-index:1;border-radius:4px}.hidden-list__item,.nested-list__item{min-width:80px;padding:0 16px;text-align:left;cursor:pointer}.panorama-visor__container{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:8px;transition:250ms}::ng-deep .panorama-visor__container canvas{width:100%!important;height:100%!important}"]
|
|
207
207
|
}] }
|
|
208
208
|
];
|
|
209
209
|
/** @nocollapse */
|
|
@@ -130,7 +130,7 @@ DetailsComponent.decorators = [
|
|
|
130
130
|
{ type: Component, args: [{
|
|
131
131
|
selector: 'lib-property-details',
|
|
132
132
|
template: "<div class=\"info\" *ngIf=\"property\">\r\n <h1 class=\"title\">\r\n <span class=\"title__address\">\r\n <!--\r\n Address visible\r\n Street #Ext Int. Lt Mz, Colony, PostalCode, Township, City, State, Country\r\n Address hidden\r\n Colony, PostalCode, Township, City, State, Country\r\n -->\r\n <ng-template [ngIf]=\"property.address.visible\">\r\n {{property.address.street}}\r\n <span *ngIf=\"property.address.outdoorNumber\">#{{property.address.outdoorNumber}} </span>\r\n <span *ngIf=\"property.address.interiorNumber\">Int. {{property.address.interiorNumber}} </span>\r\n <span *ngIf=\"property.address.lt\">Lt. {{property.address.lt}} </span>\r\n <span *ngIf=\"property.address.mz\">Mz. {{property.address.mz}} </span>\r\n </ng-template>\r\n <span *ngIf=\"property.address.colony\">{{property.address.colony}}, </span>\r\n <span *ngIf=\"property.address.postalCode\">{{property.address.postalCode}}, </span>\r\n <span *ngIf=\"property.address.township\">{{property.address.township}}, </span>\r\n <span *ngIf=\"property.address.city\">{{property.address.city}}, </span>\r\n <span *ngIf=\"property.address.state\">{{property.address.state}}, </span>\r\n <span *ngIf=\"property.address.country\">{{property.address.country}}</span>\r\n <span *ngIf=\"!property.address.visible\" class=\"address-street__hidden\"><br> Direcci\u00F3n aproximada</span>\r\n </span>\r\n <span class=\"title__property-offering\">\r\n <span class=\"title__property-offering-price\">\r\n <ng-template [ngIf]=\"currencyConverted\" [ngIfElse]=\"realPrice\">\r\n {{currencyConverted.price | currency : '' : 'symbol' : '1.0-0'}} {{currencyConverted.currency}}\r\n <br>\r\n <span class=\"property-offering-price__info-currency\"><mat-icon class=\"info-currency__icon\">info</mat-icon> Precio convertido <br> aproximado</span>\r\n </ng-template>\r\n <ng-template #realPrice>\r\n {{property.price | currency : '' : 'symbol' : '1.0-0'}} {{property.currency}}\r\n </ng-template>\r\n </span>\r\n <ng-template [ngIf]=\"currencyConverted\">\r\n <br>\r\n <span>{{property.price | currency : '' : 'symbol' : '1.0-0'}} {{property.currency}}</span>\r\n <br>\r\n <span class=\"property-offering-price__info-currency\"><mat-icon class=\"info-currency__icon\">info</mat-icon> Precio publicado</span>\r\n </ng-template>\r\n <br>\r\n <div class=\"div__title-sku\">\r\n <div>\r\n <span\r\n class=\"ic-property-{{propertyType.iconName}}\">\r\n </span>{{property.type | propertyType}} {{property.offering | offeringType}}\r\n </div>\r\n <ng-template [ngIf]=\"property.sku !== '' && property.sku\">\r\n <span class=\"title__sku\">\r\n SKU: {{property.sku}}\r\n </span>\r\n </ng-template>\r\n </div>\r\n </span>\r\n </h1>\r\n <hr class=\"divider\">\r\n <section class=\"features\">\r\n <ng-template [ngIf]=\"property.features.bedrooms && property.features.bedrooms > 0\">\r\n <p class=\"features__item\">\r\n <span class=\"features__item-icon ic-features-bedroom\"></span>\r\n <span class=\"features__item-text\">{{property.features.bedrooms}}</span>\r\n </p>\r\n </ng-template>\r\n <ng-template [ngIf]=\"property.features.bathrooms && property.features.bathrooms > 0\">\r\n <p class=\"features__item\">\r\n <span class=\"features__item-icon ic-features-bathroom\"></span>\r\n <span class=\"features__item-text\">{{property.features.bathrooms}}</span>\r\n </p>\r\n </ng-template>\r\n <ng-template [ngIf]=\"property.features.mainArea && property.features.mainArea > 0\">\r\n <p class=\"features__item\">\r\n <span class=\"features__item-icon ic-features-surface\"></span>\r\n <span class=\"features__item-text\">\r\n {{property.features.mainArea}}\r\n <span>m<sup>2</sup></span>\r\n </span>\r\n </p>\r\n </ng-template>\r\n <ng-template [ngIf]=\"property.features.parkingSpaces && property.features.parkingSpaces > 0\">\r\n <p class=\"features__item\">\r\n <span class=\"features__item-icon ic-features-parking\"></span>\r\n <span class=\"features__item-text\">{{property.features.parkingSpaces}}</span>\r\n </p>\r\n </ng-template>\r\n <ng-template [ngIf]=\"property.features.roi && property.features.roi > 0\">\r\n <p class=\"features__item\">\r\n <span class=\"features__item-icon ic-features-roi\"></span>\r\n <span class=\"features__item-text\">{{property.features.roi}}</span>\r\n </p>\r\n </ng-template>\r\n </section>\r\n <section class=\"description\">\r\n <h2 class=\"sub-title\">\r\n Descripci\u00F3n\r\n </h2>\r\n <p class=\"description__body\">\r\n {{property.description}}\r\n </p>\r\n </section>\r\n <ng-template [ngIf]=\"property.externalLink && visibleTour\">\r\n <hr class=\"divider\">\r\n <section class=\"external-link\">\r\n <h2 class=\"sub-title\">\r\n Tour virtual\r\n </h2>\r\n <iframe class=\"external-link__body\" [src]=\"getTourUrl()\"></iframe>\r\n </section>\r\n </ng-template>\r\n <ng-template [ngIf]=\"record\">\r\n <hr class=\"divider\">\r\n <section class=\"agreement\">\r\n <h2 class=\"sub-title\">\r\n Contrato\r\n </h2>\r\n <p class=\"agreement__body\">\r\n <span class=\"agreement__body-filed\">\r\n <span class=\"agreement__body-field-title\">\r\n Exclusividad de contrato\r\n </span>\r\n <span class=\"agreement__body-field-content\">\r\n {{property.propertyInfo.exclusivity ? 'Si' : 'No'}}\r\n </span>\r\n </span>\r\n <span class=\"agreement__body-filed\" *ngIf=\"property.propertyInfo.listingAgreementStartDate\">\r\n <span class=\"agreement__body-field-title\">\r\n Fecha de inicio de contrato\r\n </span>\r\n <span class=\"agreement__body-field-content\">\r\n {{property.propertyInfo.listingAgreementStartDate | libFormatDate : true : 'dd/MM/yyyy'}}\r\n </span>\r\n </span>\r\n <span class=\"agreement__body-filed\" *ngIf=\"agreementEndDate\">\r\n <span class=\"agreement__body-field-title\">\r\n Fecha de termino de contrato\r\n </span>\r\n <span class=\"agreement__body-field-content\">\r\n {{agreementEndDate | libFormatDate : true : 'dd/MM/yyyy'}}\r\n </span>\r\n </span>\r\n <span class=\"agreement__body-filed\" *ngIf=\"property.propertyInfo.commission\">\r\n <span class=\"agreement__body-field-title\">\r\n Comisi\u00F3n\r\n </span>\r\n <span class=\"agreement__body-field-content\">\r\n <span *ngIf=\"property.offering === 'RENT'\">{{property.propertyInfo.commission}} meses</span>\r\n <span *ngIf=\"property.offering === 'SALE'\">{{property.propertyInfo.commission * 100}}%</span>\r\n </span>\r\n </span>\r\n <span class=\"agreement__body-filed\">\r\n <span class=\"agreement__body-field-title\">\r\n Anunciada en el {{mlsLabel || 'MLS'}}\r\n </span>\r\n <span class=\"agreement__body-field-content\">\r\n {{property.propertyInfo.mls ? 'Si' : 'No'}}\r\n </span>\r\n </span>\r\n </p>\r\n </section>\r\n <hr class=\"divider\">\r\n <section class=\"private-features\">\r\n <h2 class=\"sub-title\">\r\n Caracteristicas\r\n </h2>\r\n <p class=\"private-features__body\">\r\n <span class=\"private-features__body-filed\" *ngIf=\"property.propertyInfo.lowestPrice\">\r\n <span class=\"private-features__body-field-title\">\r\n Precio minimo\r\n </span>\r\n <span class=\"private-features__body-field-content\">\r\n {{property.propertyInfo.lowestPrice | currency : '' : 'symbol' : '1.0-0'}}\r\n </span>\r\n </span>\r\n <span class=\"private-features__body-filed\" *ngIf=\"property.features.condominiumFeePrice\">\r\n <span class=\"private-features__body-field-title\">\r\n Cuota de mantenimiento\r\n </span>\r\n <span class=\"private-features__body-field-content\">\r\n {{property.features.condominiumFeePrice | currency : '' : 'symbol' : '1.0-0'}}\r\n </span>\r\n </span>\r\n <span class=\"private-features__body-filed\" *ngIf=\"property.propertyInfo.leaseTransferPrice\">\r\n <span class=\"private-features__body-field-title\">\r\n Traspaso\r\n </span>\r\n <span class=\"private-features__body-field-content\">\r\n {{property.propertyInfo.leaseTransferPrice | currency : '' : 'symbol' : '1.0-0'}}\r\n </span>\r\n </span>\r\n <span class=\"private-features__body-filed\" *ngIf=\"property.features.builtIn\">\r\n <span class=\"private-features__body-field-title\">\r\n A\u00F1o de construcci\u00F3n\r\n </span>\r\n <span class=\"private-features__body-field-content\">\r\n {{property.features.builtIn}}\r\n </span>\r\n </span>\r\n <span class=\"private-features__body-filed\" *ngIf=\"property.features.roi\">\r\n <span class=\"private-features__body-field-title\">\r\n Retorno de inversi\u00F3n\r\n </span>\r\n <span class=\"private-features__body-field-content\">\r\n {{property.features.roi}}\r\n </span>\r\n </span>\r\n </p>\r\n </section>\r\n <ng-template [ngIf]=\"property.propertyInfo.consumerReporting && property.propertyInfo.consumerReporting !== 0\">\r\n <hr class=\"divider\">\r\n <section class=\"buro-rentas\">\r\n <h2 class=\"sub-title\">\r\n Bur\u00F3 Rentas\r\n </h2>\r\n <p class=\"private-features__body\" *ngIf=\"property.propertyInfo.consumerReporting === 1\">Requerir certificado de\r\n fiabiidad\r\n </p>\r\n <p class=\"private-features__body\" *ngIf=\"property.propertyInfo.consumerReporting === 2\">Requerir poliza de\r\n arrendamiento\r\n </p>\r\n </section>\r\n </ng-template>\r\n <ng-template [ngIf]=\"property.propertyInfo.notes\">\r\n <hr class=\"divider\">\r\n <section class=\"notes\">\r\n <h2 class=\"sub-title\">\r\n Notas\r\n </h2>\r\n <p class=\"notes__body\">{{property.propertyInfo.notes}}</p>\r\n </section>\r\n </ng-template>\r\n </ng-template>\r\n <hr class=\"divider\">\r\n <section class=\"indications\">\r\n <h2 class=\"sub-title\">\r\n Indicaciones\r\n </h2>\r\n <div class=\"indications__body\">\r\n <a class=\"indications__body-item-link\"\r\n href=\"https://www.google.com/maps/dir/?api=1&destination={{property.address.location.latitude}},{{property.address.location.longitude}}\"\r\n [target]=\"'_blank'\">\r\n <p matRipple class=\"indications__body-item\">\r\n <span class=\"indications__body-item-icon ic-component-property-marker\"></span>\r\n <span class=\"indications__body-item-text\">\u00BFCOMO LLEGAR?</span>\r\n </p>\r\n </a>\r\n <a class=\"indications__body-item-link\"\r\n href=\"https://www.google.com/maps/@?api=1&map_action=pano&viewpoint={{property.address.location.latitude}},{{property.address.location.longitude}}\"\r\n [target]=\"'_blank'\">\r\n <p matRipple class=\"indications__body-item\">\r\n <span class=\"indications__body-item-icon ic-component-property-streetview\"></span>\r\n <span class=\"indications__body-item-text\">VISTA DE LA CALLE</span>\r\n </p>\r\n </a>\r\n </div>\r\n </section>\r\n <hr class=\"divider\">\r\n <ng-template [ngIf]=\"amenities && amenities.length > 0\">\r\n <section class=\"amenities\">\r\n <h2 class=\"sub-title\">Amenidades</h2>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let amenity of amenities\">\r\n <span matRipple class=\"list-amenities__amenity\">\r\n <span class=\"amenity__icon ic-amenities-{{amenity.iconName}}\"></span>\r\n <span class=\"amenity__text\">{{amenity.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </section>\r\n </ng-template>\r\n <ng-template [ngIf]=\"features && features.length > 0\">\r\n <section class=\"amenities\">\r\n <h2 class=\"sub-title\">Caracteristicas de la zona</h2>\r\n <p class=\"amenities__list-amenities\">\r\n <ng-container *ngFor=\"let feature of features\">\r\n <span matRipple class=\"list-amenities__amenity\">\r\n <span class=\"amenity__icon ic-amenities-{{feature.iconName}}\"></span>\r\n <span class=\"amenity__text\">{{feature.name}}</span>\r\n </span>\r\n </ng-container>\r\n </p>\r\n </section>\r\n </ng-template>\r\n</div>\r\n",
|
|
133
|
-
styles: [":host{display:block;width:100%}.divider{border:none;border-bottom:1px solid}.title{display:flex;font-size:18px;color:#707070;font-weight:400}.sub-title{margin:0;font-size:18px;padding:0 16px 16px 0}.title>span:first-child{width:60%}@media screen and (max-width:600px){.title{flex-direction:column}.title>span:first-child{width:100%}}.title>span:last-child{width:40%}.div__title-sku{display:flex;flex-direction:column}.title__sku{margin-bottom:2%}.address-street__hidden{font-size:12px}.title__property-offering{text-align:right}@media screen and (max-width:600px){.title>span:last-child{width:100%}.title__property-offering{text-align:left;margin:16px 0}}.title__property-offering-price{font-size:26px;font-weight:700}.property-offering-price__info-currency{font-size:12px;display:inline-block;margin:4px 0}.info-currency__icon{width:12px;height:12px;font-size:12px}.features{padding:8px 0;display:flex;align-items:center}.features__item{width:auto;margin:0 24px 0 0;display:flex;justify-content:center;align-items:center;position:relative}.features__item:last-child:after{content:none}.features__item-text{font-size:16px;display:inline-block}.features__item-icon{display:inline-block;font-size:24px;width:24px;height:24px;margin-right:8px}.agreement,.buro-rentas,.description,.external-link,.indications,.notes,.private-features{display:flex;padding:16px 0}.indications__body{display:flex}.indications__body-item-link{color:inherit;text-decoration:none}.indications__body-item{padding:8px;margin:0 16px 0 0;border-radius:8px;cursor:pointer}.indications__body-item-icon{margin:auto;padding:8px;border-radius:8px;display:block;font-size:24px;width:24px;height:24px}.indications__body-item-text{display:block;text-align:center;font-size:12px;margin:6px 0}.agreement__body,.description__body,.notes__body,.private-features__body{width:75%;margin:0 0 0 auto}@media screen and (max-width:600px){.agreement,.buro-rentas,.description,.external-link,.indications,.notes,.private-features{flex-direction:column;align-items:start}.agreement__body,.description__body,.notes__body,.private-features__body{width:100%;margin:0}}.external-link__body{width:75%;height:280px;border-radius:16px;margin-left:20px}@media screen and (max-width:600px){.external-link__body{width:100%;margin:0}}.agreement__body-filed,.private-features__body-filed{display:block;padding:8px 0}.agreement__body-field-content,.agreement__body-field-title,.private-features__body-field-content,.private-features__body-field-title{width:50%;display:inline-block}.amenities__list{width:50%;display:-ms-grid;display:grid;-ms-grid-columns:(
|
|
133
|
+
styles: [":host{display:block;width:100%}.divider{border:none;border-bottom:1px solid}.title{display:flex;font-size:18px;color:#707070;font-weight:400}.sub-title{margin:0;font-size:18px;padding:0 16px 16px 0}.title>span:first-child{width:60%}@media screen and (max-width:600px){.title{flex-direction:column}.title>span:first-child{width:100%}}.title>span:last-child{width:40%}.div__title-sku{display:flex;flex-direction:column}.title__sku{margin-bottom:2%}.address-street__hidden{font-size:12px}.title__property-offering{text-align:right}@media screen and (max-width:600px){.title>span:last-child{width:100%}.title__property-offering{text-align:left;margin:16px 0}}.title__property-offering-price{font-size:26px;font-weight:700}.property-offering-price__info-currency{font-size:12px;display:inline-block;margin:4px 0}.info-currency__icon{width:12px;height:12px;font-size:12px}.features{padding:8px 0;display:flex;align-items:center}.features__item{width:auto;margin:0 24px 0 0;display:flex;justify-content:center;align-items:center;position:relative}.features__item:last-child:after{content:none}.features__item-text{font-size:16px;display:inline-block}.features__item-icon{display:inline-block;font-size:24px;width:24px;height:24px;margin-right:8px}.agreement,.buro-rentas,.description,.external-link,.indications,.notes,.private-features{display:flex;padding:16px 0}.indications__body{display:flex}.indications__body-item-link{color:inherit;text-decoration:none}.indications__body-item{padding:8px;margin:0 16px 0 0;border-radius:8px;cursor:pointer}.indications__body-item-icon{margin:auto;padding:8px;border-radius:8px;display:block;font-size:24px;width:24px;height:24px}.indications__body-item-text{display:block;text-align:center;font-size:12px;margin:6px 0}.agreement__body,.description__body,.notes__body,.private-features__body{width:75%;margin:0 0 0 auto}@media screen and (max-width:600px){.agreement,.buro-rentas,.description,.external-link,.indications,.notes,.private-features{flex-direction:column;align-items:start}.agreement__body,.description__body,.notes__body,.private-features__body{width:100%;margin:0}}.external-link__body{width:75%;height:280px;border-radius:16px;margin-left:20px}@media screen and (max-width:600px){.external-link__body{width:100%;margin:0}}.agreement__body-filed,.private-features__body-filed{display:block;padding:8px 0}.agreement__body-field-content,.agreement__body-field-title,.private-features__body-field-content,.private-features__body-field-title{width:50%;display:inline-block}.amenities__list{width:50%;display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 4))[4];grid-template-columns:repeat(4,calc(100% / 4))}.amenities,.attributes{width:50%;display:inline-block}@media screen and (max-width:600px){.amenities,.attributes{width:100%;display:block}}.amenities__list-amenities{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 4))[4];grid-template-columns:repeat(4,calc(100% / 4))}.list-amenities__amenity{display:flex;flex-direction:column;align-items:center;cursor:pointer;padding:4px;box-sizing:border-box;border-radius:8px;text-align:center}.amenity__icon{width:24px;height:24px;font-size:24px;border-radius:50%;padding:8px;display:block;margin:8px}.amenity__text{padding:8px;box-sizing:border-box;display:block;font-size:12px}"]
|
|
134
134
|
}] }
|
|
135
135
|
];
|
|
136
136
|
/** @nocollapse */
|
|
@@ -542,7 +542,7 @@ EditorComponent.decorators = [
|
|
|
542
542
|
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS] },
|
|
543
543
|
{ provide: MAT_DATE_FORMATS, useValue: ɵ0 }
|
|
544
544
|
],
|
|
545
|
-
styles: [":host{display:block;width:100%}.section_label{font-weight:700;display:flex;justify-content:space-between}.address__label-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.offering{margin-bottom:8px}.direct-debit{margin:16px 0;display:flex}.direct-debit__check-box{margin-top:4px}.direct-debit__radio-group{display:inline-block;margin:0 0 0 32px}@media screen and (max-width:600px){.section_label{flex-direction:column}.section_label :last-child{margin-top:16px}.direct-debit{flex-direction:column;align-items:flex-start}.direct-debit__radio-group{margin:16px 0 0}}.direct-debit__radio-button{margin-right:16px}.pricing{display:-ms-grid;display:grid;-ms-grid-columns:(
|
|
545
|
+
styles: [":host{display:block;width:100%}.section_label{font-weight:700;display:flex;justify-content:space-between}.address__label-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.offering{margin-bottom:8px}.direct-debit{margin:16px 0;display:flex}.direct-debit__check-box{margin-top:4px}.direct-debit__radio-group{display:inline-block;margin:0 0 0 32px}@media screen and (max-width:600px){.section_label{flex-direction:column}.section_label :last-child{margin-top:16px}.direct-debit{flex-direction:column;align-items:flex-start}.direct-debit__radio-group{margin:16px 0 0}}.direct-debit__radio-button{margin-right:16px}.pricing{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3))}@media screen and (max-width:600px){.pricing{-ms-grid-columns:100%;grid-template-columns:100%}}@media screen and (min-width:1800px){.pricing{-ms-grid-columns:(calc(100% / 4))[4];grid-template-columns:repeat(4,calc(100% / 4))}}.agreement__body{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 3))[2];grid-template-columns:repeat(2,calc(100% / 3))}@media screen and (max-width:600px){.agreement__body{-ms-grid-columns:100%;grid-template-columns:100%}}@media screen and (min-width:1800px){.agreement__body{-ms-grid-columns:(calc(100% / 4))[4];grid-template-columns:repeat(4,calc(100% / 4))}}.agreement__body-check-box{margin-bottom:16px;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:2;grid-column-end:3}.address__body{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 4))[4];grid-template-columns:repeat(4,calc(100% / 4))}@media screen and (max-width:600px){.agreement__body-check-box{-ms-grid-column-span:auto;grid-column-end:auto}.address__body{-ms-grid-columns:100%;grid-template-columns:100%}}@media screen and (min-width:1800px){.address__body{-ms-grid-columns:(calc(100% / 5))[4];grid-template-columns:repeat(4,calc(100% / 5))}}.features__body{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 2))[2];grid-template-columns:repeat(2,calc(100% / 2))}.features-item__label{display:flex;align-items:center;margin:0;padding:8px 0}.features-item__radio-group{display:block;margin:8px 0}.features-item__radio-button{margin-right:16px}.features-item-bathrooms,.features-item-parking-spaces{-ms-grid-column:1;grid-column-start:1}.features-item-surface{-ms-grid-column:2;grid-column-start:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-row-span:2;grid-row-end:3}.address__form-field,.agreement__form-field,.description__form-field,.external-link__form-field,.notes__form-field,.pricing__form-field{width:95%;margin:0 auto 0 0}@media screen and (max-width:600px){.features__body{-ms-grid-columns:100%;grid-template-columns:100%}.features-item-surface{-ms-grid-column:auto;grid-column-start:auto;-ms-grid-row:auto;grid-row-start:auto;-ms-grid-row-span:NaN;grid-row-end:auto}.address__form-field,.agreement__form-field,.description__form-field,.external-link__form-field,.notes__form-field,.pricing__form-field{width:100%;margin:0}}.pricing__maintenance-fee{display:flex;align-items:center;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:2;grid-column-end:3}.pricing__maintenance-fee :first-child{margin:0 16px 0 0}@media screen and (max-width:600px){.pricing__maintenance-fee{flex-direction:column;align-items:start;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:NaN;grid-column-end:auto}.pricing__maintenance-fee :first-child{margin:0 0 16px}}.address__visibility{-ms-grid-row:4;grid-row-start:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-column-span:4;grid-column-end:5}.address__visibility-body{display:flex}.address__visibility-radio-group{display:block;margin-right:16px}.visibility-radio-group__button{margin-bottom:16px;display:block}.visibility__about{margin:0}.visibility__about-label{display:block;padding:0 8px 8px;font-size:14px}.label__icon{width:24px;height:24px;font-size:24px;color:#707070;margin-right:8px}.amenities,.attributes{width:50%;display:inline-block}@media screen and (max-width:600px){.address__visibility{-ms-grid-row:auto;grid-row-start:auto;-ms-grid-column:auto;grid-column-start:auto;-ms-grid-column-span:NaN;grid-column-end:auto}.address__visibility-body{flex-direction:column}.amenities,.attributes{width:100%;display:block}}.amenities__list-amenities{display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3))}.list-amenities__amenity{display:flex;flex-direction:column;justify-content:space-between;align-items:center;cursor:pointer;width:100px;padding:4px;box-sizing:border-box;border-radius:8px;margin:8px auto 0;text-align:center}.amenity__icon{width:24px;height:24px;font-size:24px;background:#707070;border-radius:50%;padding:8px;color:#fff;display:block;margin:0 auto}.amenity__text{padding:8px;box-sizing:border-box;display:block;font-size:12px}.button-submit{display:none}"]
|
|
546
546
|
}] }
|
|
547
547
|
];
|
|
548
548
|
/** @nocollapse */
|
|
@@ -127,7 +127,7 @@ GalleryComponent.decorators = [
|
|
|
127
127
|
{ type: Component, args: [{
|
|
128
128
|
selector: 'lib-gallery',
|
|
129
129
|
template: "<div class=\"gallery\">\r\n <mat-sidenav-container class=\"gallery__sidenav-container\">\r\n <mat-sidenav mode=\"side\" [opened]=\"sideOpened\" class=\"sidenav-container__sidenav\">\r\n <mat-toolbar class=\"sidenav__toolbar\" color=\"primary\">\r\n <span>Galeria</span>\r\n <button mat-icon-button (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </mat-toolbar>\r\n <mat-toolbar class=\"sidenav__thumbnails-types\">\r\n <button class=\"thumbnails-types__item-type\" mat-button\r\n [ngClass]=\"{'item-type--selected': typeSelected === 'IMAGE'}\" (click)=\"changePFileType('IMAGE')\">\r\n <span class=\"item-type__icon ic-component-property-file-image\"></span>\r\n <span class=\"item-type__label\">{{count.image}}</span>\r\n </button>\r\n <button class=\"thumbnails-types__item-type\" mat-button\r\n [ngClass]=\"{'item-type--selected': typeSelected === 'SPHERIC'}\" (click)=\"changePFileType('SPHERIC')\">\r\n <span class=\"item-type__icon ic-component-property-sphere\"></span>\r\n <span class=\"item-type__label\">{{count.sphere}}</span>\r\n </button>\r\n <button class=\"thumbnails-types__item-type\" mat-button\r\n [ngClass]=\"{'item-type--selected': typeSelected === 'VIDEO'}\" (click)=\"changePFileType('VIDEO')\">\r\n <span class=\"item-type__icon ic-component-property-video\"></span>\r\n <span class=\"item-type__label\">{{count.video}}</span>\r\n </button>\r\n </mat-toolbar>\r\n <div class=\"sidenav__thumbnail-list\">\r\n <ng-container *ngFor=\"let image of multimedia; let i = index\">\r\n <div class=\"thumbnail-list__item\" (click)=\"selectPFile(i)\"\r\n [ngClass]=\"{'thumbnail-list__item--selected': indexSelected === i}\">\r\n <ng-template [ngIf]=\"image.type !== 'VIDEO'\" [ngIfElse]=\"youTubeVideo\">\r\n <img class=\"item__img\" [src]=\"image.fileCS.thumbnail\" alt=\"Property image\">\r\n </ng-template>\r\n <ng-template #youTubeVideo>\r\n <img class=\"item__img\" [src]=\"'https://i3.ytimg.com/vi/'+image.fileCS.thumbnail+'/hqdefault.jpg'\"\r\n alt=\"Property image\">\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n <ng-template [ngIf]=\"multimedia.length === 0\">\r\n <div class=\"thumbnail-list__empty-list\">\r\n <p class=\"empty-list__label\">\r\n Por el momento no hay\r\n <span *ngIf=\"typeSelected === 'IMAGE'\">fotos</span>\r\n <span *ngIf=\"typeSelected === 'VIDEO'\">videos</span>\r\n <span *ngIf=\"typeSelected === 'SPHERIC'\">fotos esf\u00E9ricas</span>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </mat-sidenav>\r\n <mat-sidenav-content class=\"sidenav-container__content\" [ngStyle]=\"{'width': sideOpened ? '80%' : '100%'}\">\r\n <button class=\"sidenav-container__button-sidenav\" mat-flat-button color=\"primary\" (click)=\"updateSideNav()\">\r\n <mat-icon *ngIf=\"sideOpened\">chevron_left</mat-icon>\r\n <mat-icon *ngIf=\"!sideOpened\">chevron_right</mat-icon>\r\n </button>\r\n <button class=\"sidenav-container__button-close\" mat-mini-fab color=\"primary\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <div class=\"content__list-container\">\r\n <lib-property-slide-show class=\"list-container__slide-show\" [multimedia]=\"multimedia\" [selectIndex]=\"indexSelected\"\r\n [initialIndex]=\"indexSelected\"\r\n (currentIndex)=\"onIndexSelectedChange($event)\"></lib-property-slide-show>\r\n </div>\r\n </mat-sidenav-content>\r\n </mat-sidenav-container>\r\n</div>\r\n",
|
|
130
|
-
styles: ["::ng-deep .gallery_dialog{max-width:100%!important;width:100%;height:100%}::ng-deep .gallery_dialog mat-dialog-container{width:100%;height:100%;padding:0}:host{display:block;width:100%;height:100%}.gallery,.gallery__sidenav-container{width:100%;height:100%}.sidenav__toolbar{display:flex;justify-content:space-between}.sidenav__thumbnail-list{width:100%;height:calc(100% - 128px);padding:16px;box-sizing:border-box;overflow-x:hidden;overflow-y:auto}.thumbnail-list__empty-list{width:100%;height:100%;display:flex}.empty-list__label{margin:auto;text-align:center}.thumbnail-list__item{width:100%;cursor:pointer;padding-bottom:
|
|
130
|
+
styles: ["::ng-deep .gallery_dialog{max-width:100%!important;width:100%;height:100%}::ng-deep .gallery_dialog mat-dialog-container{width:100%;height:100%;padding:0}:host{display:block;width:100%;height:100%}.gallery,.gallery__sidenav-container{width:100%;height:100%}.sidenav__toolbar{display:flex;justify-content:space-between}.sidenav__thumbnail-list{width:100%;height:calc(100% - 128px);padding:16px;box-sizing:border-box;overflow-x:hidden;overflow-y:auto}.thumbnail-list__empty-list{width:100%;height:100%;display:flex}.empty-list__label{margin:auto;text-align:center}.thumbnail-list__item{width:100%;cursor:pointer;padding-bottom:calc(100% / 4 * 3);border-radius:8px;margin-bottom:16px;position:relative}.item__img{position:absolute;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;border-radius:8px}.sidenav-container__sidenav{width:20%}@media screen and (max-width:1024px){.sidenav-container__sidenav{width:100%}}.sidenav__thumbnails-types{display:flex;align-items:center;justify-content:space-around}.item-type{padding:0}.item-type__label{padding:0 4px;display:inline-block}.item-type__icon{display:inline-block;width:24px;height:24px;font-size:24px;margin:auto}.sidenav-container__content{width:80%;display:flex;position:relative}@media screen and (max-width:1024px){.sidenav-container__content{width:100%}}.sidenav-container__button-sidenav{position:absolute;top:0;left:0;height:64px;padding:0;min-width:36px;border-radius:0 8px 8px 0;z-index:1}.sidenav-container__button-close{position:absolute;top:16px;right:16px;z-index:1}.content__list-container{width:100%;height:100%;margin:auto;overflow:hidden;position:relative;border-radius:8px}.list-container__slide-show{width:100%;height:100%;padding:initial}::ng-deep .list-container__slide-show .panorama-visor{height:100%!important;padding:initial!important}::ng-deep .list-container__slide-show lib-panorama-visor .panorama-visor__actions{top:72px!important}"]
|
|
131
131
|
}] }
|
|
132
132
|
];
|
|
133
133
|
/** @nocollapse */
|
|
@@ -359,7 +359,7 @@ MultimediaUploaderComponent.decorators = [
|
|
|
359
359
|
{ type: Component, args: [{
|
|
360
360
|
selector: 'lib-property-multimedia-uploader',
|
|
361
361
|
template: "<div class=\"multimedia-uploader\">\r\n <p class=\"title\">\r\n Multimedia\r\n <ng-template [ngIf]=\"currentIndex !== 2\">\r\n <lib-upload-file [content]=\"buttonUploadTemplate\" [noCrop]=\"true\" [fab]=\"true\" [fileType]=\"fileType\" [aspectRatio]=\"4 / 3\"\r\n [multiple]=\"true\"\r\n (loadImage)=\"onUploadImage($event)\">\r\n <ng-template #buttonUploadTemplate>\r\n <button mat-icon-button color=\"primary\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n </ng-template>\r\n </lib-upload-file>\r\n </ng-template>\r\n </p>\r\n <mat-tab-group class=\"multimedia-uploader__tab-group\" [selectedIndex]=\"currentIndex\"\r\n (selectedIndexChange)=\"onTabChanged($event)\">\r\n <mat-tab label=\"Fotografias\">\r\n <lib-custom-drag-and-drop [items]=\"images\" [content]=\"imageTemplate\" (itemsChanged)=\"onListChanged($event)\">\r\n <ng-template #imageTemplate let-image=\"image\" let-index=\"index\">\r\n <div class=\"list__item\" [ngClass]=\"{'first-photo': index === 0}\">\r\n <img alt=\"Property image\" [src]=\"image.fileCS.thumbnail\" class=\"list__item-img\">\r\n <button mat-icon-button class=\"list__item-button mat-elevation-z2\" (click)=\"removeMedia(image)\">\r\n <mat-icon class=\"list__item-icon\">close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </lib-custom-drag-and-drop>\r\n </mat-tab>\r\n <mat-tab label=\"Esfericas\">\r\n <lib-custom-drag-and-drop [items]=\"images360\" [content]=\"image360Template\" (itemsChanged)=\"onListChanged($event)\">\r\n <ng-template #image360Template let-image=\"image\">\r\n <div class=\"list__item\">\r\n <img alt=\"Property image\" [src]=\"image.fileCS.thumbnail\" class=\"list__item-img\">\r\n <button mat-icon-button class=\"list__item-button mat-elevation-z2\" (click)=\"removeMedia(image)\">\r\n <mat-icon class=\"list__item-icon\">close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </lib-custom-drag-and-drop>\r\n </mat-tab>\r\n <mat-tab label=\"Videos\">\r\n <div class=\"you-tube-container\">\r\n <span class=\"you-tube-container__searchbox\">\r\n <button *ngIf=\"inputYouTube.value !== ''\" mat-icon-button class=\"you-tube-container__close-btn\"\r\n (click)=\"inputYouTube.value = ''\"><mat-icon>close</mat-icon></button>\r\n <input class=\"you-tube-container__input\" #inputYouTube (input)=\"onYouTubeInputTextChanged(inputYouTube)\"\r\n title=\"YouTube URL\" placeholder=\"YouTube URL o YouTube Video ID\">\r\n </span>\r\n <a href=\"https://www.youtube.com\" target=\"_blank\" mat-button color=\"primary\">\r\n Ir a Youtube\r\n </a>\r\n </div>\r\n <lib-custom-drag-and-drop [items]=\"videos\" [content]=\"videosTemplate\" (itemsChanged)=\"onListChanged($event)\">\r\n <ng-template #videosTemplate let-image=\"image\">\r\n <div class=\"list__item\">\r\n <img alt=\"Property image\" [src]=\"'https://i3.ytimg.com/vi/'+image.fileCS.thumbnail+'/hqdefault.jpg'\"\r\n class=\"list__item-img\">\r\n <button mat-icon-button class=\"list__item-button mat-elevation-z2\" (click)=\"removeMedia(image)\">\r\n <mat-icon class=\"list__item-icon\">close</mat-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </lib-custom-drag-and-drop>\r\n </mat-tab>\r\n </mat-tab-group>\r\n <div class=\"multimedia-uploader__actions\">\r\n <button mat-flat-button color=\"primary\" class=\"actions__button\" (click)=\"close()\">\r\n CERRAR\r\n </button>\r\n <button mat-flat-button color=\"primary\" class=\"actions__button\" (click)=\"accept()\">\r\n ACEPTAR\r\n </button>\r\n </div>\r\n</div>\r\n",
|
|
362
|
-
styles: [":host{display:block;width:100%;height:100%}::ng-deep .multimedia-uploader-panel-class{width:50%;height:70%}::ng-deep .multimedia-uploader-panel-class mat-dialog-container{width:100%;height:100%;padding:16px;overflow:hidden;position:relative}.multimedia-uploader{width:100%;height:100%}.multimedia-uploader__actions{position:absolute;left:0;bottom:0;width:100%;background:#fff;z-index:1}.actions__button{width:50%}.actions__button:first-child{border-radius:8px 0 0}.actions__button:last-child{border-radius:0 8px 0 0}.title{font-weight:700;display:flex;align-items:center;justify-content:space-between;padding:0 16px;margin:0}.multimedia-uploader__tab-group{width:100%;height:calc(100% - 36px)}.multimedia-uploader__list{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;display:-ms-grid;display:grid;-ms-grid-columns:(
|
|
362
|
+
styles: [":host{display:block;width:100%;height:100%}::ng-deep .multimedia-uploader-panel-class{width:50%;height:70%}::ng-deep .multimedia-uploader-panel-class mat-dialog-container{width:100%;height:100%;padding:16px;overflow:hidden;position:relative}.multimedia-uploader{width:100%;height:100%}.multimedia-uploader__actions{position:absolute;left:0;bottom:0;width:100%;background:#fff;z-index:1}.actions__button{width:50%}.actions__button:first-child{border-radius:8px 0 0}.actions__button:last-child{border-radius:0 8px 0 0}.title{font-weight:700;display:flex;align-items:center;justify-content:space-between;padding:0 16px;margin:0}.multimedia-uploader__tab-group{width:100%;height:calc(100% - 36px)}.multimedia-uploader__list{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;display:-ms-grid;display:grid;-ms-grid-columns:(calc(100% / 3))[3];grid-template-columns:repeat(3,calc(100% / 3))}@media screen and (max-width:600px){::ng-deep .multimedia-uploader-panel-class{width:100%!important;max-width:100%!important;height:100%!important}.multimedia-uploader__list{-ms-grid-columns:100%;grid-template-columns:100%}}.list__item{width:200px;height:150px;border-radius:8px;margin:16px auto;position:relative}.first-photo:after{content:\"Imagen principal del anuncio\";position:absolute;top:0;padding:8px;box-sizing:border-box;font-size:12px;width:100%;color:#fff;background:rgba(0,0,0,.3)}.list__item-img{position:absolute;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover;border-radius:8px}.list__item-button{position:absolute;width:24px;height:24px;top:-12px;right:-12px;background:#000;color:#fff}.list__item-icon{width:24px;height:24px;font-size:16px;line-height:8px}.you-tube-container{display:flex;padding:8px 0;box-sizing:border-box;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:5;background:#fff}.you-tube-container__searchbox{position:relative;width:calc(100% - 120px);box-sizing:border-box;display:flex;align-items:center}.you-tube-container__close-btn{position:absolute;right:0}.you-tube-container__input{width:100%;border:1px solid #d3d3d3;padding:8px 32px 8px 8px;border-radius:8px;outline:0}"]
|
|
363
363
|
}] }
|
|
364
364
|
];
|
|
365
365
|
/** @nocollapse */
|