tango-app-ui-store-builder 1.0.46 → 1.0.48
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/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/components/dynamic-filter/dynamic-filter.component.mjs +183 -0
- package/esm2022/lib/components/collection-update-ai/components/store-dropdown/store-dropdown.component.mjs +211 -0
- package/esm2022/lib/components/collection-update-ai/components/store-fixture/store-fixture.component.mjs +422 -0
- package/esm2022/lib/components/collection-update-ai/components/store-select/store-select.component.mjs +148 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/cancel-confirmation-modal/cancel-confirmation-modal.component.mjs +20 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/find-replace-layout.component.mjs +359 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/batch-confirmation-modal/batch-confirmation-modal.component.mjs +23 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +2524 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/approve-complete-modal/approve-complete-modal.component.mjs +66 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/fixture-before-after/fixture-before-after.component.mjs +85 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +2039 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.mjs +433 -0
- package/esm2022/lib/components/collection-update-ai/find-replace-table/reschedule-modal/reschedule-modal.component.mjs +76 -0
- package/esm2022/lib/components/collection-update-ai/models/find-replace.model.mjs +2 -0
- package/esm2022/lib/components/collection-update-ai/services/data.service.mjs +291 -0
- package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +33 -4
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
- package/esm2022/lib/components/manage-plano/rollout-table/rollout-table.component.mjs +25 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/fixture-products/fixture-products.component.mjs +75 -31
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +7 -8
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +234 -0
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +1110 -0
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +52 -0
- package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +36 -10
- package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
- package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +92 -0
- package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +645 -0
- package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1276 -0
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +33 -15
- package/esm2022/lib/components/planogram/plano-overview/fixture-overview/fixture-overview.component.mjs +41 -35
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +19 -12
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
- package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +49 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +23 -1
- package/esm2022/lib/tango-store-builder.module.mjs +42 -5
- package/fesm2022/tango-app-ui-store-builder.mjs +12677 -2064
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/collection-update-ai/components/dynamic-filter/dynamic-filter.component.d.ts +51 -0
- package/lib/components/collection-update-ai/components/store-dropdown/store-dropdown.component.d.ts +36 -0
- package/lib/components/collection-update-ai/components/store-fixture/store-fixture.component.d.ts +50 -0
- package/lib/components/collection-update-ai/components/store-select/store-select.component.d.ts +33 -0
- package/lib/components/collection-update-ai/find-replace-layout/cancel-confirmation-modal/cancel-confirmation-modal.component.d.ts +9 -0
- package/lib/components/collection-update-ai/find-replace-layout/find-replace-layout.component.d.ts +58 -0
- package/lib/components/collection-update-ai/find-replace-layout/prepare-template/batch-confirmation-modal/batch-confirmation-modal.component.d.ts +10 -0
- package/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.d.ts +141 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/approve-complete-modal/approve-complete-modal.component.d.ts +18 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/fixture-before-after/fixture-before-after.component.d.ts +19 -0
- package/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.d.ts +116 -0
- package/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.d.ts +63 -0
- package/lib/components/collection-update-ai/find-replace-table/reschedule-modal/reschedule-modal.component.d.ts +19 -0
- package/lib/components/collection-update-ai/models/find-replace.model.d.ts +55 -0
- package/lib/components/collection-update-ai/services/data.service.d.ts +70 -0
- package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
- package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +2 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
- package/lib/components/planogram/merch-compliance/fixture-products/fixture-products.component.d.ts +8 -2
- package/lib/components/planogram/merch-compliance/merch-compliance.component.d.ts +1 -3
- package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +47 -0
- package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +70 -0
- package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +16 -0
- package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +13 -3
- package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
- package/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.d.ts +24 -0
- package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +93 -0
- package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +97 -0
- package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +8 -3
- package/lib/components/planogram/plano-overview/fixture-overview/fixture-overview.component.d.ts +2 -4
- package/lib/interfaces/fixture-library.interface.d.ts +1 -1
- package/lib/services/store-builder.service.d.ts +25 -0
- package/lib/tango-store-builder.module.d.ts +31 -21
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Component, inject, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
export class ApproveCompleteModalComponent {
|
|
9
|
+
activeModal = inject(NgbActiveModal);
|
|
10
|
+
dateInput;
|
|
11
|
+
initialSchedule = false;
|
|
12
|
+
initialScheduleDate = null;
|
|
13
|
+
schedule = false;
|
|
14
|
+
scheduleDate = '';
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
// Pre-fill the schedule value
|
|
17
|
+
this.schedule = this.initialSchedule;
|
|
18
|
+
// Pre-fill the schedule date if it exists
|
|
19
|
+
if (this.initialScheduleDate) {
|
|
20
|
+
// Convert the date to YYYY-MM-DD format if needed
|
|
21
|
+
const date = new Date(this.initialScheduleDate);
|
|
22
|
+
if (!isNaN(date.getTime())) {
|
|
23
|
+
this.scheduleDate = date.toISOString().split('T')[0];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
get minDate() {
|
|
28
|
+
const today = new Date();
|
|
29
|
+
return today.toISOString().split('T')[0];
|
|
30
|
+
}
|
|
31
|
+
openDatePicker(event) {
|
|
32
|
+
const input = event.target;
|
|
33
|
+
if (input && 'showPicker' in input && typeof input.showPicker === 'function') {
|
|
34
|
+
// Modern browsers support showPicker()
|
|
35
|
+
input.showPicker();
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Fallback: focus the input which should trigger the picker
|
|
39
|
+
input.focus();
|
|
40
|
+
input.click();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
onCancel() {
|
|
44
|
+
this.activeModal.dismiss();
|
|
45
|
+
}
|
|
46
|
+
onApproveAndComplete() {
|
|
47
|
+
this.activeModal.close({
|
|
48
|
+
schedule: this.schedule,
|
|
49
|
+
scheduleDate: this.schedule ? this.scheduleDate : null
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApproveCompleteModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ApproveCompleteModalComponent, isStandalone: true, selector: "lib-approve-complete-modal", inputs: { initialSchedule: "initialSchedule", initialScheduleDate: "initialScheduleDate" }, viewQueries: [{ propertyName: "dateInput", first: true, predicate: ["dateInput"], descendants: true }], ngImport: i0, template: "<div class=\"modal-content-custom\">\r\n <!-- Modal Header -->\r\n <div class=\"modal-header-custom\">\r\n <h5 class=\"modal-title\">Approve and complete</h5>\r\n </div>\r\n \r\n <!-- Modal Body -->\r\n <div class=\"modal-body-custom\">\r\n <p class=\"description-text\">The selected stores will be approved, and a rollout task will be sent to them.</p>\r\n <p class=\"description-text\">Choose if you want to schedule the task for later.</p>\r\n \r\n <!-- Schedule Checkbox -->\r\n <div class=\"custom-checkbox\">\r\n <input \r\n class=\"form-check-input\" \r\n type=\"checkbox\" \r\n id=\"schedule\" \r\n [(ngModel)]=\"schedule\">\r\n <label for=\"schedule\" class=\"checkbox-label\">\r\n <div class=\"checkbox-label-text\">Schedule</div>\r\n </label>\r\n </div>\r\n \r\n <!-- Date Picker (shown when schedule is true) -->\r\n <div class=\"date-picker-container\" *ngIf=\"schedule\">\r\n <input \r\n type=\"date\" \r\n class=\"date-input\" \r\n [(ngModel)]=\"scheduleDate\"\r\n [min]=\"minDate\"\r\n (click)=\"openDatePicker($event)\"\r\n #dateInput>\r\n </div>\r\n </div>\r\n \r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer-custom\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary-custom\" (click)=\"onApproveAndComplete()\">Approve & Complete</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-content-custom{background:#fff;border-radius:12px;padding:0;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;border:none;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.modal-header-custom{padding:24px 16px 0;border-bottom:none}.modal-title{color:#1d2939;font-size:18px;font-weight:600;line-height:28px;margin:0}.modal-body-custom{padding:24px 16px}.description-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px}.note-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:16px}.custom-checkbox{display:flex;align-items:flex-start;gap:12px;width:fit-content}.form-check-input{width:16px;height:16px;border:1px solid #d0d5dd;border-radius:4px;cursor:pointer;margin-top:0;flex-shrink:0}.form-check-input:checked{background-color:#00a3ff;border-color:#00a3ff}.form-check-input:focus{box-shadow:0 0 0 .2rem #00a3ff40}.checkbox-label{flex:1;cursor:pointer}.checkbox-label-text{color:#344054;font-size:16px;font-weight:500;line-height:24px;margin-bottom:2px}.checkbox-supporting-text{color:#667085;font-size:16px;font-weight:400;line-height:24px;margin:0}.date-picker-container{margin-top:16px;margin-left:28px}.date-input{width:auto;max-width:200px;padding:8px 12px;border:1px solid #d0d5dd;border-radius:8px;font-size:14px;font-weight:400;line-height:20px;color:#1d2939;background:#fff;cursor:pointer;transition:all .2s}.date-input:focus{outline:none;border-color:#00a3ff;box-shadow:0 0 0 .2rem #00a3ff40}.date-input:hover{border-color:#98a2b3}.modal-footer-custom{border-top:none;padding:0 16px 24px;display:flex;justify-content:flex-end;gap:12px}.btn-cancel{background:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-cancel:hover{background-color:#f9fafb;border-color:#d0d5dd;color:#344054}.btn-primary-custom{background:#00a3ff;color:#fff;border:1px solid #00a3ff;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-primary-custom:hover{background:#0090e0;border-color:#0090e0;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApproveCompleteModalComponent, decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{ selector: 'lib-approve-complete-modal', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"modal-content-custom\">\r\n <!-- Modal Header -->\r\n <div class=\"modal-header-custom\">\r\n <h5 class=\"modal-title\">Approve and complete</h5>\r\n </div>\r\n \r\n <!-- Modal Body -->\r\n <div class=\"modal-body-custom\">\r\n <p class=\"description-text\">The selected stores will be approved, and a rollout task will be sent to them.</p>\r\n <p class=\"description-text\">Choose if you want to schedule the task for later.</p>\r\n \r\n <!-- Schedule Checkbox -->\r\n <div class=\"custom-checkbox\">\r\n <input \r\n class=\"form-check-input\" \r\n type=\"checkbox\" \r\n id=\"schedule\" \r\n [(ngModel)]=\"schedule\">\r\n <label for=\"schedule\" class=\"checkbox-label\">\r\n <div class=\"checkbox-label-text\">Schedule</div>\r\n </label>\r\n </div>\r\n \r\n <!-- Date Picker (shown when schedule is true) -->\r\n <div class=\"date-picker-container\" *ngIf=\"schedule\">\r\n <input \r\n type=\"date\" \r\n class=\"date-input\" \r\n [(ngModel)]=\"scheduleDate\"\r\n [min]=\"minDate\"\r\n (click)=\"openDatePicker($event)\"\r\n #dateInput>\r\n </div>\r\n </div>\r\n \r\n <!-- Modal Footer -->\r\n <div class=\"modal-footer-custom\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onCancel()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary-custom\" (click)=\"onApproveAndComplete()\">Approve & Complete</button>\r\n </div>\r\n</div>\r\n", styles: [".modal-content-custom{background:#fff;border-radius:12px;padding:0;box-shadow:0 20px 24px -4px #10182814,0 8px 8px -4px #10182808;border:none;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif}.modal-header-custom{padding:24px 16px 0;border-bottom:none}.modal-title{color:#1d2939;font-size:18px;font-weight:600;line-height:28px;margin:0}.modal-body-custom{padding:24px 16px}.description-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:12px}.note-text{color:#1d2939;font-size:16px;font-weight:500;line-height:24px;margin-bottom:16px}.custom-checkbox{display:flex;align-items:flex-start;gap:12px;width:fit-content}.form-check-input{width:16px;height:16px;border:1px solid #d0d5dd;border-radius:4px;cursor:pointer;margin-top:0;flex-shrink:0}.form-check-input:checked{background-color:#00a3ff;border-color:#00a3ff}.form-check-input:focus{box-shadow:0 0 0 .2rem #00a3ff40}.checkbox-label{flex:1;cursor:pointer}.checkbox-label-text{color:#344054;font-size:16px;font-weight:500;line-height:24px;margin-bottom:2px}.checkbox-supporting-text{color:#667085;font-size:16px;font-weight:400;line-height:24px;margin:0}.date-picker-container{margin-top:16px;margin-left:28px}.date-input{width:auto;max-width:200px;padding:8px 12px;border:1px solid #d0d5dd;border-radius:8px;font-size:14px;font-weight:400;line-height:20px;color:#1d2939;background:#fff;cursor:pointer;transition:all .2s}.date-input:focus{outline:none;border-color:#00a3ff;box-shadow:0 0 0 .2rem #00a3ff40}.date-input:hover{border-color:#98a2b3}.modal-footer-custom{border-top:none;padding:0 16px 24px;display:flex;justify-content:flex-end;gap:12px}.btn-cancel{background:#fff;color:#344054;border:1px solid #d0d5dd;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-cancel:hover{background-color:#f9fafb;border-color:#d0d5dd;color:#344054}.btn-primary-custom{background:#00a3ff;color:#fff;border:1px solid #00a3ff;border-radius:8px;padding:10px 18px;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize;box-shadow:0 1px 2px #1018280d;cursor:pointer;transition:all .2s}.btn-primary-custom:hover{background:#0090e0;border-color:#0090e0;color:#fff}\n"] }]
|
|
58
|
+
}], propDecorators: { dateInput: [{
|
|
59
|
+
type: ViewChild,
|
|
60
|
+
args: ['dateInput']
|
|
61
|
+
}], initialSchedule: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], initialScheduleDate: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}] } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1jb21wbGV0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3Jldmlldy1yZXBsYWNlL2FwcHJvdmUtY29tcGxldGUtbW9kYWwvYXBwcm92ZS1jb21wbGV0ZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3Jldmlldy1yZXBsYWNlL2FwcHJvdmUtY29tcGxldGUtbW9kYWwvYXBwcm92ZS1jb21wbGV0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBUzdDLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUViLFNBQVMsQ0FBZ0M7SUFFeEQsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxtQkFBbUIsR0FBa0IsSUFBSSxDQUFDO0lBRW5ELFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUUxQixRQUFRO1FBQ04sOEJBQThCO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUVyQywwQ0FBMEM7UUFDMUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsa0RBQWtEO1lBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBWTtRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLE9BQVEsS0FBYSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7WUFDckYsdUNBQXVDO1lBQ3RDLEtBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM3QjthQUFNO1lBQ0wsNERBQTREO1lBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3ZELENBQUMsQ0FBQztJQUNMLENBQUM7d0dBbkRVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLDBSQ1oxQywwckRBeUNBLG8xRURqQ1ksWUFBWSxrSUFBRSxXQUFXOzs0RkFJeEIsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLDRCQUE0QixjQUMxQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDOzhCQU9aLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXBwcm92ZS1jb21wbGV0ZS1tb2RhbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcHJvdmUtY29tcGxldGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hcHByb3ZlLWNvbXBsZXRlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwcm92ZUNvbXBsZXRlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFjdGl2ZU1vZGFsID0gaW5qZWN0KE5nYkFjdGl2ZU1vZGFsKTtcclxuICBcclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIFxyXG4gIEBJbnB1dCgpIGluaXRpYWxTY2hlZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGluaXRpYWxTY2hlZHVsZURhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gIHNjaGVkdWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2NoZWR1bGVEYXRlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBQcmUtZmlsbCB0aGUgc2NoZWR1bGUgdmFsdWVcclxuICAgIHRoaXMuc2NoZWR1bGUgPSB0aGlzLmluaXRpYWxTY2hlZHVsZTtcclxuICAgIFxyXG4gICAgLy8gUHJlLWZpbGwgdGhlIHNjaGVkdWxlIGRhdGUgaWYgaXQgZXhpc3RzXHJcbiAgICBpZiAodGhpcy5pbml0aWFsU2NoZWR1bGVEYXRlKSB7XHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIGRhdGUgdG8gWVlZWS1NTS1ERCBmb3JtYXQgaWYgbmVlZGVkXHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmluaXRpYWxTY2hlZHVsZURhdGUpO1xyXG4gICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVEYXRlID0gZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBtaW5EYXRlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gdG9kYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRhdGVQaWNrZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0ICYmICdzaG93UGlja2VyJyBpbiBpbnB1dCAmJiB0eXBlb2YgKGlucHV0IGFzIGFueSkuc2hvd1BpY2tlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAvLyBNb2Rlcm4gYnJvd3NlcnMgc3VwcG9ydCBzaG93UGlja2VyKClcclxuICAgICAgKGlucHV0IGFzIGFueSkuc2hvd1BpY2tlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRmFsbGJhY2s6IGZvY3VzIHRoZSBpbnB1dCB3aGljaCBzaG91bGQgdHJpZ2dlciB0aGUgcGlja2VyXHJcbiAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgb25BcHByb3ZlQW5kQ29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHsgXHJcbiAgICAgIHNjaGVkdWxlOiB0aGlzLnNjaGVkdWxlLCBcclxuICAgICAgc2NoZWR1bGVEYXRlOiB0aGlzLnNjaGVkdWxlID8gdGhpcy5zY2hlZHVsZURhdGUgOiBudWxsIFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50LWN1c3RvbVwiPlxyXG4gICAgPCEtLSBNb2RhbCBIZWFkZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyLWN1c3RvbVwiPlxyXG4gICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QXBwcm92ZSBhbmQgY29tcGxldGU8L2g1PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0gTW9kYWwgQm9keSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5LWN1c3RvbVwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb24tdGV4dFwiPlRoZSBzZWxlY3RlZCBzdG9yZXMgd2lsbCBiZSBhcHByb3ZlZCwgYW5kIGEgcm9sbG91dCB0YXNrIHdpbGwgYmUgc2VudCB0byB0aGVtLjwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHRcIj5DaG9vc2UgaWYgeW91IHdhbnQgdG8gc2NoZWR1bGUgdGhlIHRhc2sgZm9yIGxhdGVyLjwvcD5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFNjaGVkdWxlIENoZWNrYm94IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgIGlkPVwic2NoZWR1bGVcIiBcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2NoZWR1bGVcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInNjaGVkdWxlXCIgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWxhYmVsLXRleHRcIj5TY2hlZHVsZTwvZGl2PlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gRGF0ZSBQaWNrZXIgKHNob3duIHdoZW4gc2NoZWR1bGUgaXMgdHJ1ZSkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNvbnRhaW5lclwiICpuZ0lmPVwic2NoZWR1bGVcIj5cclxuICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIiBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1pbnB1dFwiIFxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzY2hlZHVsZURhdGVcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICNkYXRlSW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPCEtLSBNb2RhbCBGb290ZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyLWN1c3RvbVwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeS1jdXN0b21cIiAoY2xpY2spPVwib25BcHByb3ZlQW5kQ29tcGxldGUoKVwiPkFwcHJvdmUgJiBDb21wbGV0ZTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Component, inject, Input } from '@angular/core';
|
|
2
|
+
import { NgbActiveOffcanvas } from '@ng-bootstrap/ng-bootstrap';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { StoreFixtureComponent } from '../../../components/store-fixture/store-fixture.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
export class FixtureBeforeAfterComponent {
|
|
8
|
+
activeOffcanvas = inject(NgbActiveOffcanvas);
|
|
9
|
+
selectedFixtureData = null;
|
|
10
|
+
originalFixtureData = null;
|
|
11
|
+
ngOnInit() {
|
|
12
|
+
// Ensure data is properly initialized
|
|
13
|
+
this.ensureFixtureDataStructure(this.selectedFixtureData);
|
|
14
|
+
this.ensureFixtureDataStructure(this.originalFixtureData);
|
|
15
|
+
}
|
|
16
|
+
ngOnChanges(changes) {
|
|
17
|
+
if (changes['selectedFixtureData']?.currentValue) {
|
|
18
|
+
this.ensureFixtureDataStructure(changes['selectedFixtureData'].currentValue);
|
|
19
|
+
}
|
|
20
|
+
if (changes['originalFixtureData']?.currentValue) {
|
|
21
|
+
this.ensureFixtureDataStructure(changes['originalFixtureData'].currentValue);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ensureFixtureDataStructure(fixture) {
|
|
25
|
+
if (!fixture)
|
|
26
|
+
return;
|
|
27
|
+
// Ensure vmConfig is an array
|
|
28
|
+
if (!Array.isArray(fixture.vmConfig)) {
|
|
29
|
+
fixture.vmConfig = [];
|
|
30
|
+
}
|
|
31
|
+
// Ensure shelfConfig is an array
|
|
32
|
+
if (!Array.isArray(fixture.shelfConfig)) {
|
|
33
|
+
fixture.shelfConfig = [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
getCurrentFixtureData() {
|
|
37
|
+
return this.selectedFixtureData || this.originalFixtureData;
|
|
38
|
+
}
|
|
39
|
+
getFixtureLabel() {
|
|
40
|
+
const fixture = this.getCurrentFixtureData();
|
|
41
|
+
return fixture?.header?.label || '';
|
|
42
|
+
}
|
|
43
|
+
getFixtureCategory() {
|
|
44
|
+
const fixture = this.getCurrentFixtureData();
|
|
45
|
+
return fixture?.fixtureCategory || '';
|
|
46
|
+
}
|
|
47
|
+
getFixtureWidth() {
|
|
48
|
+
const fixture = this.getCurrentFixtureData();
|
|
49
|
+
if (!fixture?.fixtureWidth)
|
|
50
|
+
return '';
|
|
51
|
+
const width = fixture.fixtureWidth.value;
|
|
52
|
+
const unit = fixture.fixtureWidth.unit || 'mm';
|
|
53
|
+
let dimensionStr = `${width}${unit}`;
|
|
54
|
+
// Convert to feet if needed (1200mm = 4ft)
|
|
55
|
+
if (unit === 'mm' && width === 1200) {
|
|
56
|
+
dimensionStr = `${width}${unit}/4ft`;
|
|
57
|
+
}
|
|
58
|
+
else if (unit === 'mm' && width > 0) {
|
|
59
|
+
const feet = Math.round(width / 300);
|
|
60
|
+
if (feet > 0) {
|
|
61
|
+
dimensionStr = `${width}${unit}/${feet}ft`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return dimensionStr;
|
|
65
|
+
}
|
|
66
|
+
getShelfCount() {
|
|
67
|
+
const fixture = this.getCurrentFixtureData();
|
|
68
|
+
return fixture?.shelfConfig?.length || 0;
|
|
69
|
+
}
|
|
70
|
+
getFixtureCapacity() {
|
|
71
|
+
const fixture = this.getCurrentFixtureData();
|
|
72
|
+
return fixture?.fixtureCapacity || 0;
|
|
73
|
+
}
|
|
74
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureBeforeAfterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FixtureBeforeAfterComponent, isStandalone: true, selector: "lib-fixture-before-after", inputs: { selectedFixtureData: "selectedFixtureData", originalFixtureData: "originalFixtureData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"offcanvas-header d-flex w-100 justify-content-between p-3 align-items-center\">\r\n <div class=\"fixture-preview-header\">\r\n <div class=\"header-card\">\r\n <div class=\"card-content\">\r\n <!-- <div class=\"product-image-container\">\r\n <img \r\n alt=\"Product\" \r\n class=\"product-image\"\r\n />\r\n </div> -->\r\n <div class=\"name\">{{ getFixtureLabel() }}</div>\r\n <div class=\"specs-container\" *ngIf=\"getFixtureCategory() || getFixtureWidth() || getShelfCount() > 0 || getFixtureCapacity() > 0\">\r\n <span class=\"spec-text\" *ngIf=\"getFixtureCategory()\">{{ getFixtureCategory() }}</span>\r\n <div class=\"dot\" *ngIf=\"getFixtureCategory() && (getFixtureWidth() || getShelfCount() > 0 || getFixtureCapacity() > 0)\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getFixtureWidth()\">{{ getFixtureWidth() }}</span>\r\n <div class=\"dot\" *ngIf=\"getFixtureWidth() && (getShelfCount() > 0 || getFixtureCapacity() > 0)\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getShelfCount() > 0\">{{ getShelfCount() }} {{ getShelfCount() === 1 ? 'Shelf' : 'Shelves' }}</span>\r\n <div class=\"dot\" *ngIf=\"getShelfCount() > 0 && getFixtureCapacity() > 0\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getFixtureCapacity() > 0\">{{ getFixtureCapacity() }} Capacity</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"activeOffcanvas.dismiss()\" aria-label=\"Close\"></button>\r\n</div>\r\n\r\n<div class=\"offcanvas-body p-3\">\r\n <div class=\"fixture-preview-content\">\r\n <!-- Show Before/After when replace data exists -->\r\n <div *ngIf=\"originalFixtureData\" class=\"before-after-container\">\r\n <div class=\"before-section\">\r\n <div class=\"section-header\">\r\n <h6 class=\"section-label mb-0\">Before</h6>\r\n </div>\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"originalFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n <div class=\"after-section\">\r\n <div class=\"section-header\">\r\n <h6 class=\"section-label mb-0\">After</h6>\r\n </div>\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"selectedFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Show single fixture when no replace data -->\r\n <div *ngIf=\"!originalFixtureData && selectedFixtureData\" class=\"single-fixture-container\">\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"selectedFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offcanvas-header{border-bottom:1px solid #e5e7eb;flex-shrink:0;align-items:center}.offcanvas-body{overflow-y:auto;overflow-x:hidden;height:calc(100vh - 60px);-ms-overflow-style:none;scrollbar-width:none}.offcanvas-body::-webkit-scrollbar{display:none}.fixture-preview-header{flex:1}.fixture-preview-header .header-card{background:#f9fafb;border-radius:6.536px;padding:9.804px 6.536px;display:flex;flex-direction:column;align-items:center}.fixture-preview-header .header-card .card-content{display:flex;flex-direction:column;gap:6.536px;align-items:center}.fixture-preview-header .header-card .card-content .product-image-container{width:25.651px;height:25.651px;position:relative;overflow:hidden}.fixture-preview-header .header-card .card-content .product-image-container .product-image{position:absolute;width:300.85%;height:160.87%;left:-100.43%;top:-30.43%;max-width:none;object-fit:cover}.fixture-preview-header .header-card .card-content .name{font-family:Inter,sans-serif;font-weight:600;font-size:16px;line-height:19.608px;color:#101828;text-align:center}.fixture-preview-header .header-card .card-content .specs-container{display:flex;gap:4.664px;align-items:center;flex-wrap:wrap;justify-content:center}.fixture-preview-header .header-card .card-content .specs-container .spec-text{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:16.34px;color:#475467}.fixture-preview-header .header-card .card-content .specs-container .dot{width:2.332px;height:2.332px;background:#98a2b3;border-radius:50%;flex-shrink:0}.fixture-preview-content{width:100%;padding:16px}.fixture-preview-content .before-after-container{display:flex;flex-direction:row;gap:16px;align-items:flex-start}.fixture-preview-content .before-after-container .before-section,.fixture-preview-content .before-after-container .after-section{display:flex;flex-direction:column;flex:1;min-width:0;background:#f9fafb;border-radius:8px;padding:12px}.fixture-preview-content .before-after-container .before-section .section-header,.fixture-preview-content .before-after-container .after-section .section-header{display:flex;align-items:center;justify-content:center;margin-bottom:12px;gap:8px}.fixture-preview-content .before-after-container .before-section .section-header .section-label,.fixture-preview-content .before-after-container .after-section .section-header .section-label{font-size:14px;font-weight:600;color:#1d2939;letter-spacing:.5px;margin:0}.fixture-preview-content .before-after-container .before-section .fixture-wrapper,.fixture-preview-content .before-after-container .after-section .fixture-wrapper,.fixture-preview-content .single-fixture-container .fixture-wrapper{background:#fff;border-radius:4px;padding:8px;box-shadow:0 1px 2px #0000000d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StoreFixtureComponent, selector: "lib-store-fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs"] }] });
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureBeforeAfterComponent, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{ selector: 'lib-fixture-before-after', standalone: true, imports: [CommonModule, StoreFixtureComponent], template: "<div class=\"offcanvas-header d-flex w-100 justify-content-between p-3 align-items-center\">\r\n <div class=\"fixture-preview-header\">\r\n <div class=\"header-card\">\r\n <div class=\"card-content\">\r\n <!-- <div class=\"product-image-container\">\r\n <img \r\n alt=\"Product\" \r\n class=\"product-image\"\r\n />\r\n </div> -->\r\n <div class=\"name\">{{ getFixtureLabel() }}</div>\r\n <div class=\"specs-container\" *ngIf=\"getFixtureCategory() || getFixtureWidth() || getShelfCount() > 0 || getFixtureCapacity() > 0\">\r\n <span class=\"spec-text\" *ngIf=\"getFixtureCategory()\">{{ getFixtureCategory() }}</span>\r\n <div class=\"dot\" *ngIf=\"getFixtureCategory() && (getFixtureWidth() || getShelfCount() > 0 || getFixtureCapacity() > 0)\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getFixtureWidth()\">{{ getFixtureWidth() }}</span>\r\n <div class=\"dot\" *ngIf=\"getFixtureWidth() && (getShelfCount() > 0 || getFixtureCapacity() > 0)\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getShelfCount() > 0\">{{ getShelfCount() }} {{ getShelfCount() === 1 ? 'Shelf' : 'Shelves' }}</span>\r\n <div class=\"dot\" *ngIf=\"getShelfCount() > 0 && getFixtureCapacity() > 0\"></div>\r\n <span class=\"spec-text\" *ngIf=\"getFixtureCapacity() > 0\">{{ getFixtureCapacity() }} Capacity</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"activeOffcanvas.dismiss()\" aria-label=\"Close\"></button>\r\n</div>\r\n\r\n<div class=\"offcanvas-body p-3\">\r\n <div class=\"fixture-preview-content\">\r\n <!-- Show Before/After when replace data exists -->\r\n <div *ngIf=\"originalFixtureData\" class=\"before-after-container\">\r\n <div class=\"before-section\">\r\n <div class=\"section-header\">\r\n <h6 class=\"section-label mb-0\">Before</h6>\r\n </div>\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"originalFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n <div class=\"after-section\">\r\n <div class=\"section-header\">\r\n <h6 class=\"section-label mb-0\">After</h6>\r\n </div>\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"selectedFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <!-- Show single fixture when no replace data -->\r\n <div *ngIf=\"!originalFixtureData && selectedFixtureData\" class=\"single-fixture-container\">\r\n <div class=\"fixture-wrapper\">\r\n <lib-store-fixture \r\n [fixture]=\"selectedFixtureData\" \r\n [showColors]=\"true\"\r\n [showVMs]=\"true\"\r\n [showBCs]=\"true\">\r\n </lib-store-fixture>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".offcanvas-header{border-bottom:1px solid #e5e7eb;flex-shrink:0;align-items:center}.offcanvas-body{overflow-y:auto;overflow-x:hidden;height:calc(100vh - 60px);-ms-overflow-style:none;scrollbar-width:none}.offcanvas-body::-webkit-scrollbar{display:none}.fixture-preview-header{flex:1}.fixture-preview-header .header-card{background:#f9fafb;border-radius:6.536px;padding:9.804px 6.536px;display:flex;flex-direction:column;align-items:center}.fixture-preview-header .header-card .card-content{display:flex;flex-direction:column;gap:6.536px;align-items:center}.fixture-preview-header .header-card .card-content .product-image-container{width:25.651px;height:25.651px;position:relative;overflow:hidden}.fixture-preview-header .header-card .card-content .product-image-container .product-image{position:absolute;width:300.85%;height:160.87%;left:-100.43%;top:-30.43%;max-width:none;object-fit:cover}.fixture-preview-header .header-card .card-content .name{font-family:Inter,sans-serif;font-weight:600;font-size:16px;line-height:19.608px;color:#101828;text-align:center}.fixture-preview-header .header-card .card-content .specs-container{display:flex;gap:4.664px;align-items:center;flex-wrap:wrap;justify-content:center}.fixture-preview-header .header-card .card-content .specs-container .spec-text{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:16.34px;color:#475467}.fixture-preview-header .header-card .card-content .specs-container .dot{width:2.332px;height:2.332px;background:#98a2b3;border-radius:50%;flex-shrink:0}.fixture-preview-content{width:100%;padding:16px}.fixture-preview-content .before-after-container{display:flex;flex-direction:row;gap:16px;align-items:flex-start}.fixture-preview-content .before-after-container .before-section,.fixture-preview-content .before-after-container .after-section{display:flex;flex-direction:column;flex:1;min-width:0;background:#f9fafb;border-radius:8px;padding:12px}.fixture-preview-content .before-after-container .before-section .section-header,.fixture-preview-content .before-after-container .after-section .section-header{display:flex;align-items:center;justify-content:center;margin-bottom:12px;gap:8px}.fixture-preview-content .before-after-container .before-section .section-header .section-label,.fixture-preview-content .before-after-container .after-section .section-header .section-label{font-size:14px;font-weight:600;color:#1d2939;letter-spacing:.5px;margin:0}.fixture-preview-content .before-after-container .before-section .fixture-wrapper,.fixture-preview-content .before-after-container .after-section .fixture-wrapper,.fixture-preview-content .single-fixture-container .fixture-wrapper{background:#fff;border-radius:4px;padding:8px;box-shadow:0 1px 2px #0000000d}\n"] }]
|
|
80
|
+
}], propDecorators: { selectedFixtureData: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], originalFixtureData: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}] } });
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1iZWZvcmUtYWZ0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY29sbGVjdGlvbi11cGRhdGUtYWkvZmluZC1yZXBsYWNlLWxheW91dC9yZXZpZXctcmVwbGFjZS9maXh0dXJlLWJlZm9yZS1hZnRlci9maXh0dXJlLWJlZm9yZS1hZnRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3Jldmlldy1yZXBsYWNlL2ZpeHR1cmUtYmVmb3JlLWFmdGVyL2ZpeHR1cmUtYmVmb3JlLWFmdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7QUFTbEcsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxlQUFlLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFcEMsbUJBQW1CLEdBQVEsSUFBSSxDQUFDO0lBQ2hDLG1CQUFtQixHQUFRLElBQUksQ0FBQztJQUV6QyxRQUFRO1FBQ04sc0NBQXNDO1FBQ3RDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsMEJB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QUEyQjs0RkFBM0IsMkJBQTJCLDZNQ1p4Qyx1ckhBdUVBLHl2RkQvRFksWUFBWSxtSUFBRSxxQkFBcUI7OzRGQUlsQywyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs4QkFPckMsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlT2ZmY2FudmFzIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTdG9yZUZpeHR1cmVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3N0b3JlLWZpeHR1cmUvc3RvcmUtZml4dHVyZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZml4dHVyZS1iZWZvcmUtYWZ0ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU3RvcmVGaXh0dXJlQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZml4dHVyZS1iZWZvcmUtYWZ0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9maXh0dXJlLWJlZm9yZS1hZnRlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpeHR1cmVCZWZvcmVBZnRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBhY3RpdmVPZmZjYW52YXMgPSBpbmplY3QoTmdiQWN0aXZlT2ZmY2FudmFzKTtcclxuICBcclxuICBASW5wdXQoKSBzZWxlY3RlZEZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIG9yaWdpbmFsRml4dHVyZURhdGE6IGFueSA9IG51bGw7IFxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEVuc3VyZSBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkXHJcbiAgICB0aGlzLmVuc3VyZUZpeHR1cmVEYXRhU3RydWN0dXJlKHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSk7XHJcbiAgICB0aGlzLmVuc3VyZUZpeHR1cmVEYXRhU3RydWN0dXJlKHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRGaXh0dXJlRGF0YSddPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5lbnN1cmVGaXh0dXJlRGF0YVN0cnVjdHVyZShjaGFuZ2VzWydzZWxlY3RlZEZpeHR1cmVEYXRhJ10uY3VycmVudFZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydvcmlnaW5hbEZpeHR1cmVEYXRhJ10/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLmVuc3VyZUZpeHR1cmVEYXRhU3RydWN0dXJlKGNoYW5nZXNbJ29yaWdpbmFsRml4dHVyZURhdGEnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbnN1cmVGaXh0dXJlRGF0YVN0cnVjdHVyZShmaXh0dXJlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghZml4dHVyZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAvLyBFbnN1cmUgdm1Db25maWcgaXMgYW4gYXJyYXlcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaXh0dXJlLnZtQ29uZmlnKSkge1xyXG4gICAgICBmaXh0dXJlLnZtQ29uZmlnID0gW107XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSBzaGVsZkNvbmZpZyBpcyBhbiBhcnJheVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpeHR1cmUuc2hlbGZDb25maWcpKSB7XHJcbiAgICAgIGZpeHR1cmUuc2hlbGZDb25maWcgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRGaXh0dXJlRGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSB8fCB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlQ2F0ZWdvcnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LmZpeHR1cmVDYXRlZ29yeSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVXaWR0aCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICBpZiAoIWZpeHR1cmU/LmZpeHR1cmVXaWR0aCkgcmV0dXJuICcnO1xyXG4gICAgY29uc3Qgd2lkdGggPSBmaXh0dXJlLmZpeHR1cmVXaWR0aC52YWx1ZTtcclxuICAgIGNvbnN0IHVuaXQgPSBmaXh0dXJlLmZpeHR1cmVXaWR0aC51bml0IHx8ICdtbSc7XHJcbiAgICBsZXQgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fWA7XHJcbiAgICAvLyBDb252ZXJ0IHRvIGZlZXQgaWYgbmVlZGVkICgxMjAwbW0gPSA0ZnQpXHJcbiAgICBpZiAodW5pdCA9PT0gJ21tJyAmJiB3aWR0aCA9PT0gMTIwMCkge1xyXG4gICAgICBkaW1lbnNpb25TdHIgPSBgJHt3aWR0aH0ke3VuaXR9LzRmdGA7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtbScgJiYgd2lkdGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZlZXQgPSBNYXRoLnJvdW5kKHdpZHRoIC8gMzAwKTtcclxuICAgICAgaWYgKGZlZXQgPiAwKSB7XHJcbiAgICAgICAgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fS8ke2ZlZXR9ZnRgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltZW5zaW9uU3RyO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2hlbGZDb3VudCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICByZXR1cm4gZml4dHVyZT8uc2hlbGZDb25maWc/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUNhcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5maXh0dXJlQ2FwYWNpdHkgfHwgMDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm9mZmNhbnZhcy1oZWFkZXIgZC1mbGV4IHctMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXByZXZpZXctaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInByb2R1Y3QtaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUHJvZHVjdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3QtaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7IGdldEZpeHR1cmVMYWJlbCgpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BlY3MtY29udGFpbmVyXCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2F0ZWdvcnkoKSB8fCBnZXRGaXh0dXJlV2lkdGgoKSB8fCBnZXRTaGVsZkNvdW50KCkgPiAwIHx8IGdldEZpeHR1cmVDYXBhY2l0eSgpID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2F0ZWdvcnkoKVwiPnt7IGdldEZpeHR1cmVDYXRlZ29yeSgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RcIiAqbmdJZj1cImdldEZpeHR1cmVDYXRlZ29yeSgpICYmIChnZXRGaXh0dXJlV2lkdGgoKSB8fCBnZXRTaGVsZkNvdW50KCkgPiAwIHx8IGdldEZpeHR1cmVDYXBhY2l0eSgpID4gMClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0Rml4dHVyZVdpZHRoKClcIj57eyBnZXRGaXh0dXJlV2lkdGgoKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90XCIgKm5nSWY9XCJnZXRGaXh0dXJlV2lkdGgoKSAmJiAoZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDApXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGVjLXRleHRcIiAqbmdJZj1cImdldFNoZWxmQ291bnQoKSA+IDBcIj57eyBnZXRTaGVsZkNvdW50KCkgfX0ge3sgZ2V0U2hlbGZDb3VudCgpID09PSAxID8gJ1NoZWxmJyA6ICdTaGVsdmVzJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90XCIgKm5nSWY9XCJnZXRTaGVsZkNvdW50KCkgPiAwICYmIGdldEZpeHR1cmVDYXBhY2l0eSgpID4gMFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj57eyBnZXRGaXh0dXJlQ2FwYWNpdHkoKSB9fSBDYXBhY2l0eTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwiYWN0aXZlT2ZmY2FudmFzLmRpc21pc3MoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJvZmZjYW52YXMtYm9keSBwLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXByZXZpZXctY29udGVudFwiPlxyXG4gICAgICAgIDwhLS0gU2hvdyBCZWZvcmUvQWZ0ZXIgd2hlbiByZXBsYWNlIGRhdGEgZXhpc3RzIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcmlnaW5hbEZpeHR1cmVEYXRhXCIgY2xhc3M9XCJiZWZvcmUtYWZ0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZWZvcmUtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic2VjdGlvbi1sYWJlbCBtYi0wXCI+QmVmb3JlPC9oNj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmUtZml4dHVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwib3JpZ2luYWxGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbG9yc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1maXh0dXJlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWZ0ZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic2VjdGlvbi1sYWJlbCBtYi0wXCI+QWZ0ZXI8L2g2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZml4dHVyZV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dCQ3NdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBTaG93IHNpbmdsZSBmaXh0dXJlIHdoZW4gbm8gcmVwbGFjZSBkYXRhIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhb3JpZ2luYWxGaXh0dXJlRGF0YSAmJiBzZWxlY3RlZEZpeHR1cmVEYXRhXCIgY2xhc3M9XCJzaW5nbGUtZml4dHVyZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgIFtmaXh0dXJlXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbG9yc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0JDc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1maXh0dXJlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|