@veloceapps/sdk 8.0.0-98 → 8.0.0-99
Sign up to get free protection for your applications and to get access to all the features.
- package/cms/cms.actions.d.ts +4 -0
- package/cms/types/integration.types.d.ts +1 -0
- package/cms/vendor-map.d.ts +4 -2
- package/esm2020/cms/cms.actions.mjs +11 -1
- package/esm2020/cms/modules/runtime/services/compilation.service.mjs +5 -1
- package/esm2020/cms/types/integration.types.mjs +1 -1
- package/esm2020/cms/vendor-map.mjs +5 -3
- package/esm2020/src/components/doc-gen/doc-gen.component.mjs +25 -21
- package/esm2020/src/components/flow-header/flow-header.component.mjs +119 -0
- package/esm2020/src/components/flow-header/flow-header.module.mjs +19 -0
- package/esm2020/src/components/flow-header/index.mjs +2 -0
- package/esm2020/src/components/guided-selling/guided-selling.component.mjs +24 -21
- package/esm2020/src/configure-primeng.mjs +33 -0
- package/esm2020/src/flow.component.mjs +4 -4
- package/esm2020/src/flow.module.mjs +7 -5
- package/esm2020/src/services/flow-dialog.service.mjs +5 -1
- package/esm2020/src/services/flow-router.service.mjs +15 -1
- package/esm2020/src/services/flow.service.mjs +18 -5
- package/esm2020/src/services/index.mjs +3 -1
- package/esm2020/src/types/flow-customization.types.mjs +1 -1
- package/fesm2015/veloceapps-sdk-cms.mjs +18 -3
- package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2015/veloceapps-sdk.mjs +455 -1059
- package/fesm2015/veloceapps-sdk.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-cms.mjs +18 -3
- package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk.mjs +455 -1059
- package/fesm2020/veloceapps-sdk.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/flow-header/flow-header.component.d.ts +28 -0
- package/src/components/flow-header/flow-header.module.d.ts +9 -0
- package/src/components/flow-header/index.d.ts +1 -0
- package/src/configure-primeng.d.ts +1 -0
- package/src/flow.module.d.ts +2 -2
- package/src/services/flow-dialog.service.d.ts +1 -0
- package/src/services/flow-router.service.d.ts +1 -0
- package/src/services/flow.service.d.ts +3 -1
- package/src/services/index.d.ts +2 -0
- package/src/types/flow-customization.types.d.ts +1 -1
- package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +0 -119
- package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +0 -47
- package/esm2020/src/components/header/header.component.mjs +0 -355
- package/esm2020/src/components/header/header.module.mjs +0 -52
- package/esm2020/src/components/header/header.types.mjs +0 -2
- package/esm2020/src/components/header/metrics/index.mjs +0 -2
- package/esm2020/src/components/header/metrics/metrics.component.mjs +0 -255
- package/esm2020/src/components/header/metrics/metrics.definitions.mjs +0 -2
- package/esm2020/src/components/header/metrics/metrics.module.mjs +0 -69
- package/src/components/header/cart-overlay/cart-preview.component.d.ts +0 -36
- package/src/components/header/cart-overlay/cart-preview.module.d.ts +0 -14
- package/src/components/header/header.component.d.ts +0 -70
- package/src/components/header/header.module.d.ts +0 -16
- package/src/components/header/header.types.d.ts +0 -20
- package/src/components/header/metrics/index.d.ts +0 -1
- package/src/components/header/metrics/metrics.component.d.ts +0 -67
- package/src/components/header/metrics/metrics.definitions.d.ts +0 -1
- package/src/components/header/metrics/metrics.module.d.ts +0 -18
@@ -1,255 +0,0 @@
|
|
1
|
-
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild } from '@angular/core';
|
3
|
-
import { FormControl, Validators } from '@angular/forms';
|
4
|
-
import { ShoppingCartSettingsApiService } from '@veloceapps/api';
|
5
|
-
import { invalidCharactersValidator, requiredValidator, reservedIdentifierValidator, standardCharSetWithSpaceRegExp, } from '@veloceapps/core/forms';
|
6
|
-
import { ContextService, FlowConfigurationService, MetricsCalculationService, QuoteDraftService, RuntimeSettingsService, } from '@veloceapps/sdk/core';
|
7
|
-
import { cloneDeep, uniq } from 'lodash';
|
8
|
-
import { OverlayPanel } from 'primeng/overlaypanel';
|
9
|
-
import { Subject, startWith } from 'rxjs';
|
10
|
-
import { takeUntil, tap, withLatestFrom } from 'rxjs/operators';
|
11
|
-
import { METRICS_STORAGE_KEY } from './metrics.definitions';
|
12
|
-
import * as i0 from "@angular/core";
|
13
|
-
import * as i1 from "@veloceapps/sdk/core";
|
14
|
-
import * as i2 from "@veloceapps/api";
|
15
|
-
import * as i3 from "@angular/common";
|
16
|
-
import * as i4 from "@angular/forms";
|
17
|
-
import * as i5 from "@angular/cdk/drag-drop";
|
18
|
-
import * as i6 from "primeng/button";
|
19
|
-
import * as i7 from "primeng/overlaypanel";
|
20
|
-
import * as i8 from "primeng/api";
|
21
|
-
import * as i9 from "primeng/sidebar";
|
22
|
-
import * as i10 from "primeng/inputtext";
|
23
|
-
import * as i11 from "primeng/checkbox";
|
24
|
-
import * as i12 from "@veloceapps/components";
|
25
|
-
export class MetricsComponent {
|
26
|
-
constructor(contextService, quoteDraftService, cdr, metricsCalculationService, flowConfiguration, shoppingCartSettingsApiService, runtimeSettings) {
|
27
|
-
this.contextService = contextService;
|
28
|
-
this.quoteDraftService = quoteDraftService;
|
29
|
-
this.cdr = cdr;
|
30
|
-
this.metricsCalculationService = metricsCalculationService;
|
31
|
-
this.flowConfiguration = flowConfiguration;
|
32
|
-
this.shoppingCartSettingsApiService = shoppingCartSettingsApiService;
|
33
|
-
this.runtimeSettings = runtimeSettings;
|
34
|
-
this.emptyStateMetrics = [
|
35
|
-
{ name: 'MRR', value: 0 },
|
36
|
-
{ name: 'E.MRR', value: 0 },
|
37
|
-
{ name: 'NRR', value: 0 },
|
38
|
-
{ name: 'E.NRR', value: 0 },
|
39
|
-
];
|
40
|
-
this.visibleSelectedMetrics = [];
|
41
|
-
this.restSelectedMetrics = [];
|
42
|
-
this.metrics = [];
|
43
|
-
this.filteredMetrics = [];
|
44
|
-
this.sidebarVisible = false;
|
45
|
-
this.searchControl = new FormControl('');
|
46
|
-
this.isFocused = false;
|
47
|
-
this.nameControl = new FormControl('', [
|
48
|
-
requiredValidator,
|
49
|
-
invalidCharactersValidator(standardCharSetWithSpaceRegExp),
|
50
|
-
reservedIdentifierValidator,
|
51
|
-
Validators.maxLength(80),
|
52
|
-
]);
|
53
|
-
this.activeMetricRules = [];
|
54
|
-
this.activeMetricRuleNames = [];
|
55
|
-
this.defaultMetricRuleNames = [];
|
56
|
-
this.metricKeys = [];
|
57
|
-
this.lastSavedMetrics = [];
|
58
|
-
this.destroyed$ = new Subject();
|
59
|
-
this.currencySymbol = this.runtimeSettings.getCurrencySettings().symbol;
|
60
|
-
}
|
61
|
-
ngOnInit() {
|
62
|
-
this.activeMetricRules = this.flowConfiguration.activeMetricsSnapshot.filter(metricRule => metricRule.metrics.some(metric => !!metric.totalName));
|
63
|
-
const activeMetricRuleNames = this.activeMetricRules.map(metricRule => metricRule.title);
|
64
|
-
this.shoppingCartSettingsApiService
|
65
|
-
.getSettingsMap()
|
66
|
-
.pipe(withLatestFrom(this.quoteDraftService.currentState$), tap(([settings, lineItems]) => {
|
67
|
-
this.defaultMetricRuleNames = (settings?.DEFAULT_HEADER_METRICS || []).filter(ruleName => activeMetricRuleNames.includes(ruleName));
|
68
|
-
this.metricKeys = this.collectMetricKeys(lineItems);
|
69
|
-
this.activeMetricRuleNames = this.getActiveMetricRuleNames();
|
70
|
-
}), takeUntil(this.destroyed$))
|
71
|
-
.subscribe(() => {
|
72
|
-
this.collectAvailableMetrics();
|
73
|
-
});
|
74
|
-
this.searchControl.valueChanges.pipe(takeUntil(this.destroyed$), startWith('')).subscribe(query => {
|
75
|
-
this.filteredMetrics = this.metrics.filter(({ name }) => {
|
76
|
-
return (name || '').toLowerCase().includes(query?.toLowerCase());
|
77
|
-
});
|
78
|
-
});
|
79
|
-
this.metricsCalculationService.onMetricsUpdate$
|
80
|
-
.pipe(takeUntil(this.destroyed$))
|
81
|
-
.subscribe(() => this.cdr.detectChanges());
|
82
|
-
}
|
83
|
-
ngOnDestroy() {
|
84
|
-
this.destroyed$.next();
|
85
|
-
this.destroyed$.complete();
|
86
|
-
}
|
87
|
-
toggleOverlay(event, overlay, target) {
|
88
|
-
event.stopPropagation();
|
89
|
-
if (this.restSelectedMetrics.length) {
|
90
|
-
if (!overlay.overlayVisible) {
|
91
|
-
document.dispatchEvent(new Event('click'));
|
92
|
-
}
|
93
|
-
overlay.toggle(event, target);
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
this.openSidebar();
|
97
|
-
}
|
98
|
-
}
|
99
|
-
openSidebar() {
|
100
|
-
this.overlayPanel.hide();
|
101
|
-
this.sidebarVisible = true;
|
102
|
-
}
|
103
|
-
closeSidebar() {
|
104
|
-
this.sidebarVisible = false;
|
105
|
-
this.metrics = cloneDeep(this.lastSavedMetrics);
|
106
|
-
this.editingMetric = undefined;
|
107
|
-
this.searchControl.setValue('');
|
108
|
-
}
|
109
|
-
getMetricValue(key) {
|
110
|
-
const context = this.contextService.resolve();
|
111
|
-
if (key.startsWith('Effective_')) {
|
112
|
-
const correctKey = key.replace('Effective_', '');
|
113
|
-
return this.toNumber(context.properties[correctKey]) - this.toNumber(context.properties[`Previous${correctKey}`]);
|
114
|
-
}
|
115
|
-
else {
|
116
|
-
return this.metricsCalculationService.getMetricValue(key);
|
117
|
-
}
|
118
|
-
}
|
119
|
-
save() {
|
120
|
-
localStorage.setItem(METRICS_STORAGE_KEY, JSON.stringify(this.metrics));
|
121
|
-
this.setMetrics();
|
122
|
-
this.lastSavedMetrics = cloneDeep(this.metrics);
|
123
|
-
this.closeSidebar();
|
124
|
-
}
|
125
|
-
changeMetricOrder(event) {
|
126
|
-
moveItemInArray(this.metrics, event.previousIndex, event.currentIndex);
|
127
|
-
this.filteredMetrics = this.metrics;
|
128
|
-
}
|
129
|
-
editMetric(metric) {
|
130
|
-
if (this.editingMetric && this.nameControl.invalid) {
|
131
|
-
return;
|
132
|
-
}
|
133
|
-
this.editingMetric = metric;
|
134
|
-
this.nameControl.setValue(metric.name);
|
135
|
-
}
|
136
|
-
saveMetric() {
|
137
|
-
if (this.nameControl.invalid) {
|
138
|
-
return;
|
139
|
-
}
|
140
|
-
if (this.editingMetric) {
|
141
|
-
this.editingMetric.name = this.nameControl.value?.trim();
|
142
|
-
}
|
143
|
-
this.editingMetric = undefined;
|
144
|
-
}
|
145
|
-
cancelMetric() {
|
146
|
-
this.editingMetric = undefined;
|
147
|
-
}
|
148
|
-
resetToDefault() {
|
149
|
-
this.collectAvailableMetrics(true);
|
150
|
-
}
|
151
|
-
onFocus() {
|
152
|
-
this.isFocused = true;
|
153
|
-
}
|
154
|
-
onBlur() {
|
155
|
-
this.isFocused = false;
|
156
|
-
}
|
157
|
-
clearSearch(event) {
|
158
|
-
event.stopPropagation();
|
159
|
-
this.searchControl.setValue('');
|
160
|
-
}
|
161
|
-
collectMetricKeys(lineItems) {
|
162
|
-
const keys = [];
|
163
|
-
lineItems.forEach(lineItem => {
|
164
|
-
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
165
|
-
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
166
|
-
});
|
167
|
-
return uniq(keys);
|
168
|
-
}
|
169
|
-
setMetrics() {
|
170
|
-
const metrics = cloneDeep(this.metrics.filter(({ visible }) => visible));
|
171
|
-
this.visibleSelectedMetrics = metrics.slice(0, 4);
|
172
|
-
this.restSelectedMetrics = metrics.slice(4);
|
173
|
-
}
|
174
|
-
collectAvailableMetrics(resetToDefault = false) {
|
175
|
-
const storedMetrics = JSON.parse(localStorage.getItem(METRICS_STORAGE_KEY) || '[]');
|
176
|
-
const metricKeys = this.metricKeys.slice();
|
177
|
-
const isDefaultConfiguration = !storedMetrics.length || resetToDefault;
|
178
|
-
this.metrics = (isDefaultConfiguration ? this.activeMetricRuleNames : storedMetrics).reduce((result, metric) => {
|
179
|
-
const metricKeyIndex = metricKeys.findIndex(key => key === metric.key);
|
180
|
-
if (metricKeyIndex >= 0) {
|
181
|
-
metricKeys.splice(metricKeyIndex, 1);
|
182
|
-
}
|
183
|
-
if (isDefaultConfiguration && this.defaultMetricRuleNames.includes(metric.name)) {
|
184
|
-
metric.visible = true;
|
185
|
-
}
|
186
|
-
return [...result, metric];
|
187
|
-
}, []);
|
188
|
-
this.metrics = [
|
189
|
-
...this.metrics,
|
190
|
-
...metricKeys.map(metricKey => {
|
191
|
-
return { key: metricKey, name: this.getMetricName(metricKey), visible: false };
|
192
|
-
}),
|
193
|
-
];
|
194
|
-
// sort the metrics by the order of default metric rule names from the shopping cart settings
|
195
|
-
this.metrics = this.sortMetrics();
|
196
|
-
this.metrics = cloneDeep(this.metrics);
|
197
|
-
this.searchControl.setValue('');
|
198
|
-
if (!resetToDefault) {
|
199
|
-
this.lastSavedMetrics = cloneDeep(this.metrics);
|
200
|
-
this.setMetrics();
|
201
|
-
}
|
202
|
-
this.cdr.markForCheck();
|
203
|
-
}
|
204
|
-
getMetricName(key) {
|
205
|
-
return (this.activeMetricRules.find(metricRule => metricRule.metrics.find(metric => metric.totalName === key))?.title ||
|
206
|
-
key);
|
207
|
-
}
|
208
|
-
toNumber(value) {
|
209
|
-
return +(value || 0);
|
210
|
-
}
|
211
|
-
getActiveMetricRuleNames() {
|
212
|
-
return this.activeMetricRules.reduce((result, metricRule) => {
|
213
|
-
const name = metricRule.title;
|
214
|
-
const visible = this.defaultMetricRuleNames.includes(name);
|
215
|
-
metricRule.metrics.forEach(metric => {
|
216
|
-
result.push({
|
217
|
-
key: metric.totalName || metric.name,
|
218
|
-
name,
|
219
|
-
visible,
|
220
|
-
});
|
221
|
-
});
|
222
|
-
return result;
|
223
|
-
}, []);
|
224
|
-
}
|
225
|
-
/**
|
226
|
-
* Sorts the Metrics array by the order of the default metric rule names from the shopping cart settings.
|
227
|
-
* If a metric is included in the list of default metrics, it raises the metric to the top of the metrics array.
|
228
|
-
*/
|
229
|
-
sortMetrics() {
|
230
|
-
return this.metrics.slice().sort((a, b) => {
|
231
|
-
const indexA = this.defaultMetricRuleNames.indexOf(a.name);
|
232
|
-
const indexB = this.defaultMetricRuleNames.indexOf(b.name);
|
233
|
-
if (indexA === -1 && indexB === -1) {
|
234
|
-
return 0;
|
235
|
-
}
|
236
|
-
if (indexA === -1) {
|
237
|
-
return 1;
|
238
|
-
}
|
239
|
-
if (indexB === -1) {
|
240
|
-
return -1;
|
241
|
-
}
|
242
|
-
return indexA - indexB;
|
243
|
-
});
|
244
|
-
}
|
245
|
-
}
|
246
|
-
MetricsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i0.ChangeDetectorRef }, { token: i1.MetricsCalculationService }, { token: i1.FlowConfigurationService }, { token: i2.ShoppingCartSettingsApiService }, { token: i1.RuntimeSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
247
|
-
MetricsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MetricsComponent, selector: "vl-metrics", viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], ngImport: i0, template: "<div class=\"header-metrics\" (click)=\"toggleOverlay($event, overlayPanel, metricsTarget)\">\n <div class=\"metrics\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n </div>\n\n <div #metricsTarget class=\"metrics-overlay-target\" [class.expanded]=\"overlayPanel?.overlayVisible\">\n <i class=\"vl-icon vl-arrow-down\"></i>\n </div>\n</div>\n\n<p-overlayPanel\n styleClass=\"catalog-overlay metrics-overlay-container right no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-arrow-right\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '300px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-cross\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <label class=\"search-container\" [class.active]=\"searchControl.value || isFocused\">\n <i class=\"vl-icon vl-search\"></i>\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full search-input\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n <i *ngIf=\"searchControl.value\" class=\"vl-icon vl-cross\" (click)=\"clearSearch($event)\"></i>\n </label>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-drag\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to Default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-check\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div class=\"actions\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-edit\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"cancelMetric()\" class=\"action cancel\">\n <i class=\"vl-icon vl-cross\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-check\"></i>\n </div>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{display:flex;gap:8px;cursor:pointer}:host .header-metrics *{font-family:var(--cg-font-family)}:host .header-metrics .metrics{min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 8px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{color:#ffffffb3;max-width:30px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{overflow:hidden;text-overflow:ellipsis;max-width:7rem}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host .metrics-overlay-target{display:flex;align-items:center;width:16px;border-radius:4px;background:rgba(255,255,255,.1)}:host .metrics-overlay-target .vl-icon{color:var(--cg-white)}:host .metrics-overlay-target.expanded .vl-icon:before{transform:rotate(180deg)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0;height:100%}::ng-deep .p-overlaypanel.metrics-overlay-container{width:280px}::ng-deep .p-overlaypanel.metrics-overlay-container *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.metrics-overlay-container .p-overlaypanel-content{padding:0;margin-top:0}::ng-deep .p-overlaypanel.metrics-overlay-container .overlay-metrics{padding:16px;max-height:112px;overflow:auto}::ng-deep .p-overlaypanel.metrics-overlay-container .metric{display:flex;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .name{color:var(--cg-text-color-secondary);max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .value{overflow:hidden;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .filler:before{background-image:radial-gradient(circle at 1px 1px,var(--cg-text-color-secondary) 1px,transparent 0)}::ng-deep .p-overlaypanel.metrics-overlay-container .config{height:48px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 8px 8px 16px;cursor:pointer;background:var(--cg-white);outline:none;border:none;border-top:1px solid var(--cg-border-color);width:100%;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .p-overlaypanel.metrics-overlay-container .config .vl-icon-chevron-down{color:var(--cg-primary-color)}.filler{flex:1;margin:0 4px 7px;min-width:7px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.7) 1px,transparent 0);background-size:5px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{box-sizing:content-box;padding:24px 24px 0;margin-bottom:16px;height:32px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-family:var(--vl-font-family);font-size:20px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer}.container .search-container{cursor:pointer;display:flex;height:32px;margin:0 24px 8px;padding:8px;background:var(--cg-bg-color);border:1px solid transparent;border-radius:32px}.container .search-container:hover,.container .search-container.active{background:var(--cg-white);border-color:var(--cg-primary-color)}.container .search-container .vl-icon{flex:0 0 auto}.container .search-container .search-input{width:100%;height:16px;padding:0 8px;border:none;font-size:12px;line-height:16px;letter-spacing:.3px;color:var(--cg-black-color);background:none}.container .search-container .search-input::placeholder{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.3px;color:var(--cg-text-color-secondary)}.container .content{padding:0 24px;display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-top:1px solid var(--cg-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{border-radius:24px;width:100%;font-size:12px;font-family:var(--cg-font-family);font-weight:300;line-height:16px;letter-spacing:.3px;white-space:nowrap}.container .footer p-button ::ng-deep .p-button-outlined{background-color:var(--cg-white);color:var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-outlined:hover{background-color:var(--cg-primary-color);color:var(--cg-white)}.container .footer p-button ::ng-deep .p-button-filled{background-color:var(--cg-primary-color);color:var(--cg-white);border:1px solid var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-filled:hover{background-color:var(--cg-primary-color-hover);border-color:var(--cg-primary-color-hover)}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;align-items:center;justify-content:center;padding:16px;color:var(--cg-text-color-secondary);font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;border-bottom:1px solid var(--cg-border-color)}.sidebar-metric.edit{border-bottom-color:var(--cg-primary-color)}.sidebar-metric.edit .drag-icon{display:none}.sidebar-metric:hover:not(.edit){background:var(--cg-bg-color)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:var(--cg-text-color-disabled)}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--cg-black)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{padding-left:48px;border:none;background:transparent;width:100%}.sidebar-metric .actions{display:flex;gap:4px}.sidebar-metric .action{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:4px}.sidebar-metric .action:hover{background:var(--cg-primary-color);color:var(--cg-white)}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .save{border-color:var(--cg-primary-color);border-radius:4px}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px;border-width:1px;border-color:var(--cg-border-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box:hover{border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{background:var(--cg-primary-color);border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{flex:0 0 auto;width:12px;height:12px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--cg-primary-color-hover)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]" }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "component", type: i12.ErrorTooltipComponent, selector: "vl-error-tooltip", inputs: ["tooltip", "visible", "top"] }, { kind: "directive", type: i12.AppHiddenTextTooltipDirective, selector: "[vlHiddenTextTooltip]", inputs: ["vlHiddenTextTooltip"] }, { kind: "pipe", type: i12.ErrorPipe, name: "error" }, { kind: "pipe", type: i1.PricePipe, name: "vlPrice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
248
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsComponent, decorators: [{
|
249
|
-
type: Component,
|
250
|
-
args: [{ selector: 'vl-metrics', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"header-metrics\" (click)=\"toggleOverlay($event, overlayPanel, metricsTarget)\">\n <div class=\"metrics\">\n <div *ngFor=\"let metric of visibleSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n\n <ng-container *ngIf=\"!visibleSelectedMetrics.length\">\n <div *ngFor=\"let metric of emptyStateMetrics\" class=\"metric empty-state-metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ metric.value | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.value | vlPrice }}\n </span>\n </div>\n </ng-container>\n </div>\n\n <div #metricsTarget class=\"metrics-overlay-target\" [class.expanded]=\"overlayPanel?.overlayVisible\">\n <i class=\"vl-icon vl-arrow-down\"></i>\n </div>\n</div>\n\n<p-overlayPanel\n styleClass=\"catalog-overlay metrics-overlay-container right no-padding\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"overlay-metrics\">\n <div *ngFor=\"let metric of restSelectedMetrics\" class=\"metric\">\n <span\n class=\"name\"\n [vlHiddenTextTooltip]=\"metric.name\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ metric.name }}\n </span>\n <span class=\"filler\"></span>\n <span\n class=\"value\"\n vlHiddenTextTooltip=\"{{ getMetricValue(metric.key) | vlPrice }}\"\n tooltipStyleClass=\"metric-tooltip\"\n tooltipPosition=\"bottom\"\n >\n {{ getMetricValue(metric.key) | vlPrice }}\n </span>\n </div>\n </div>\n <button class=\"config\" (click)=\"openSidebar()\">\n Metrics Config\n <i class=\"vl-icon vl-arrow-right\"></i>\n </button>\n </ng-template>\n</p-overlayPanel>\n\n<p-sidebar\n [visible]=\"sidebarVisible\"\n (visibleChange)=\"closeSidebar()\"\n position=\"right\"\n [baseZIndex]=\"1000\"\n [style]=\"{ width: '300px' }\"\n>\n <div class=\"container\">\n <div class=\"header\">\n Quote Metrics Config\n <i class=\"vl-icon vl-cross\" (click)=\"closeSidebar()\"></i>\n </div>\n\n <label class=\"search-container\" [class.active]=\"searchControl.value || isFocused\">\n <i class=\"vl-icon vl-search\"></i>\n <input\n data-test-id=\"search\"\n [formControl]=\"searchControl\"\n pInputText\n placeholder=\"Search for metric\u2026\"\n class=\"w-full search-input\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n <i *ngIf=\"searchControl.value\" class=\"vl-icon vl-cross\" (click)=\"clearSearch($event)\"></i>\n </label>\n\n <div class=\"content\">\n <div class=\"sidebar-metrics\" cdkDropList (cdkDropListDropped)=\"changeMetricOrder($event)\">\n <div\n *ngFor=\"let metric of filteredMetrics\"\n class=\"sidebar-metric\"\n [class.edit]=\"metric.key === editingMetric?.key\"\n cdkDrag\n [cdkDragDisabled]=\"!!searchControl.value\"\n >\n <div class=\"drag-icon\">\n <i class=\"vl-icon vl-drag\" cdkDragHandle></i>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"metricTemplate\"\n [ngTemplateOutletContext]=\"{ metric: metric }\"\n ></ng-container>\n </div>\n </div>\n\n <div class=\"empty-state\" *ngIf=\"!filteredMetrics.length\">There are no items matching your search criteria</div>\n </div>\n <div class=\"footer\">\n <p-button\n label=\"Reset to Default\"\n styleClass=\"p-button-outlined p-button-sm\"\n (onClick)=\"resetToDefault()\"\n ></p-button>\n <p-button label=\"Save\" styleClass=\"p-button p-button-filled p-button-sm\" (onClick)=\"save()\"></p-button>\n </div>\n </div>\n</p-sidebar>\n\n<ng-template #metricTemplate let-metric=\"metric\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" class=\"preview-state\">\n <p-checkbox\n [ngModel]=\"metric.visible\"\n (ngModelChange)=\"metric.visible = !metric.visible\"\n [binary]=\"true\"\n checkboxIcon=\"vl-icon vl-check\"\n ></p-checkbox>\n <div class=\"title\">{{ metric.name }}</div>\n </div>\n\n <div *ngIf=\"editingMetric?.key === metric.key\" class=\"edit-state\">\n <input data-test-id=\"name\" [formControl]=\"nameControl\" pInputText placeholder=\"Metric name\" class=\"w-full\" />\n <vl-error-tooltip [tooltip]=\"nameControl | error : 'name'\" [visible]=\"!!nameControl.errors\"></vl-error-tooltip>\n </div>\n <div class=\"actions\">\n <div *ngIf=\"editingMetric?.key !== metric.key\" (click)=\"editMetric(metric)\" class=\"action edit\">\n <i class=\"vl-icon vl-edit\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"cancelMetric()\" class=\"action cancel\">\n <i class=\"vl-icon vl-cross\"></i>\n </div>\n <div *ngIf=\"editingMetric?.key === metric.key\" (click)=\"saveMetric()\" class=\"action save\">\n <i class=\"vl-icon vl-check\"></i>\n </div>\n </div>\n</ng-template>\n", styles: [":host .header-metrics{display:flex;gap:8px;cursor:pointer}:host .header-metrics *{font-family:var(--cg-font-family)}:host .header-metrics .metrics{min-width:130px;max-width:260px;display:flex;flex-wrap:wrap;justify-content:flex-start;gap:0 8px;height:32px;align-items:flex-start}:host .header-metrics .metric{flex:1;flex-basis:114px;max-width:122px;display:flex;justify-content:space-between;align-items:flex-end;font-size:12px;line-height:16px;letter-spacing:.3px}:host .header-metrics .metric .name{color:#ffffffb3;max-width:30px;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .header-metrics .metric .value{overflow:hidden;text-overflow:ellipsis;max-width:7rem}:host .header-metrics .metric.empty-state-metric{filter:blur(1.5px)}:host .metrics-overlay-target{display:flex;align-items:center;width:16px;border-radius:4px;background:rgba(255,255,255,.1)}:host .metrics-overlay-target .vl-icon{color:var(--cg-white)}:host .metrics-overlay-target.expanded .vl-icon:before{transform:rotate(180deg)}:host ::ng-deep .p-sidebar-header{display:none}:host ::ng-deep .p-sidebar-content{padding:0;height:100%}::ng-deep .p-overlaypanel.metrics-overlay-container{width:280px}::ng-deep .p-overlaypanel.metrics-overlay-container *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.metrics-overlay-container .p-overlaypanel-content{padding:0;margin-top:0}::ng-deep .p-overlaypanel.metrics-overlay-container .overlay-metrics{padding:16px;max-height:112px;overflow:auto}::ng-deep .p-overlaypanel.metrics-overlay-container .metric{display:flex;font-size:12px;line-height:16px;letter-spacing:.3px;align-items:flex-end}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .name{color:var(--cg-text-color-secondary);max-width:50%;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .value{overflow:hidden;text-overflow:ellipsis}::ng-deep .p-overlaypanel.metrics-overlay-container .metric .filler:before{background-image:radial-gradient(circle at 1px 1px,var(--cg-text-color-secondary) 1px,transparent 0)}::ng-deep .p-overlaypanel.metrics-overlay-container .config{height:48px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 8px 8px 16px;cursor:pointer;background:var(--cg-white);outline:none;border:none;border-top:1px solid var(--cg-border-color);width:100%;font-size:12px;line-height:16px;letter-spacing:.3px}::ng-deep .p-overlaypanel.metrics-overlay-container .config .vl-icon-chevron-down{color:var(--cg-primary-color)}.filler{flex:1;margin:0 4px 7px;min-width:7px}.filler:before{display:block;width:100%;height:2px;content:\"\";background-image:radial-gradient(circle at 1px 1px,rgba(255,255,255,.7) 1px,transparent 0);background-size:5px 2px}.container{display:flex;flex-direction:column;height:100%}.container .header{box-sizing:content-box;padding:24px 24px 0;margin-bottom:16px;height:32px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;font-family:var(--vl-font-family);font-size:20px;font-style:normal;font-weight:500;line-height:24px;letter-spacing:-.6px;color:var(--vl-accent-color)}.container .header i{cursor:pointer}.container .search-container{cursor:pointer;display:flex;height:32px;margin:0 24px 8px;padding:8px;background:var(--cg-bg-color);border:1px solid transparent;border-radius:32px}.container .search-container:hover,.container .search-container.active{background:var(--cg-white);border-color:var(--cg-primary-color)}.container .search-container .vl-icon{flex:0 0 auto}.container .search-container .search-input{width:100%;height:16px;padding:0 8px;border:none;font-size:12px;line-height:16px;letter-spacing:.3px;color:var(--cg-black-color);background:none}.container .search-container .search-input::placeholder{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.3px;color:var(--cg-text-color-secondary)}.container .content{padding:0 24px;display:flex;flex-direction:column;flex:1;overflow:hidden}.container .footer{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 24px;border-top:1px solid var(--cg-border-color)}.container .footer p-button{flex:1}.container .footer p-button ::ng-deep button{border-radius:24px;width:100%;font-size:12px;font-family:var(--cg-font-family);font-weight:300;line-height:16px;letter-spacing:.3px;white-space:nowrap}.container .footer p-button ::ng-deep .p-button-outlined{background-color:var(--cg-white);color:var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-outlined:hover{background-color:var(--cg-primary-color);color:var(--cg-white)}.container .footer p-button ::ng-deep .p-button-filled{background-color:var(--cg-primary-color);color:var(--cg-white);border:1px solid var(--cg-primary-color)}.container .footer p-button ::ng-deep .p-button-filled:hover{background-color:var(--cg-primary-color-hover);border-color:var(--cg-primary-color-hover)}.container app-empty-state::ng-deep{margin-bottom:12px}.container app-empty-state::ng-deep .container{width:100%;padding-bottom:0}.sidebar-metrics{width:100%;overflow:auto;padding:1px 0}.empty-state{display:flex;align-items:center;justify-content:center;padding:16px;color:var(--cg-text-color-secondary);font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}.sidebar-metric{display:flex;align-items:center;height:32px;position:relative;border-bottom:1px solid var(--cg-border-color)}.sidebar-metric.edit{border-bottom-color:var(--cg-primary-color)}.sidebar-metric.edit .drag-icon{display:none}.sidebar-metric:hover:not(.edit){background:var(--cg-bg-color)}.sidebar-metric:hover:not(.edit) .edit{visibility:visible}.sidebar-metric p-checkbox{margin-right:8px}.sidebar-metric .drag-icon{width:16px;height:16px;margin-right:8px}.sidebar-metric .drag-icon i{cursor:pointer;color:var(--cg-text-color-disabled)}.sidebar-metric.cdk-drag-disabled .drag-icon i{cursor:default}.sidebar-metric .title{font-weight:400;font-size:12px;line-height:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:text;user-select:text;cursor:text;color:var(--cg-black)}.sidebar-metric .preview-state,.sidebar-metric .edit-state{position:relative;margin-right:8px;min-width:0;display:flex;align-items:center;flex:1}.sidebar-metric .preview-state input,.sidebar-metric .edit-state input{padding-left:48px;border:none;background:transparent;width:100%}.sidebar-metric .actions{display:flex;gap:4px}.sidebar-metric .action{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid transparent;border-radius:4px}.sidebar-metric .action:hover{background:var(--cg-primary-color);color:var(--cg-white)}.sidebar-metric .edit{visibility:hidden}.sidebar-metric .save{border-color:var(--cg-primary-color);border-radius:4px}.sidebar-metric ::ng-deep .p-checkbox{width:16px;height:16px}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box{width:16px;height:16px;border-width:1px;border-color:var(--cg-border-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box:hover{border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{background:var(--cg-primary-color);border-color:var(--cg-primary-color)}.sidebar-metric ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{flex:0 0 auto;width:12px;height:12px}.cdk-drag-preview{z-index:10001!important;box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .metric-tooltip .p-tooltip-text{font-size:11px;line-height:14px;letter-spacing:.3px;background:var(--cg-primary-color-hover)}\n"] }]
|
251
|
-
}], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i0.ChangeDetectorRef }, { type: i1.MetricsCalculationService }, { type: i1.FlowConfigurationService }, { type: i2.ShoppingCartSettingsApiService }, { type: i1.RuntimeSettingsService }]; }, propDecorators: { overlayPanel: [{
|
252
|
-
type: ViewChild,
|
253
|
-
args: [OverlayPanel]
|
254
|
-
}] } });
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUMzQiw4QkFBOEIsR0FDL0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUs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QUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzZHQXRSVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixnR0FDaEIsWUFBWSxnRENoQ3pCLCsyTEEwS0E7MkZEM0lhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU07c1VBSXhDLFlBQVk7c0JBRGxCLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBMaW5lSXRlbSwgTWV0cmljUnVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHtcbiAgaW52YWxpZENoYXJhY3RlcnNWYWxpZGF0b3IsXG4gIHJlcXVpcmVkVmFsaWRhdG9yLFxuICByZXNlcnZlZElkZW50aWZpZXJWYWxpZGF0b3IsXG4gIHN0YW5kYXJkQ2hhclNldFdpdGhTcGFjZVJlZ0V4cCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZS9mb3Jtcyc7XG5pbXBvcnQge1xuICBDb250ZXh0U2VydmljZSxcbiAgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICBRdW90ZURyYWZ0U2VydmljZSxcbiAgUnVudGltZVNldHRpbmdzU2VydmljZSxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IFN1YmplY3QsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0cmljIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTUVUUklDU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbWV0cmljcy5kZWZpbml0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLW1ldHJpY3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21ldHJpY3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1ldHJpY3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoT3ZlcmxheVBhbmVsKVxuICBwdWJsaWMgb3ZlcmxheVBhbmVsITogT3ZlcmxheVBhbmVsO1xuXG4gIHB1YmxpYyBlbXB0eVN0YXRlTWV0cmljcyA9IFtcbiAgICB7IG5hbWU6ICdNUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ0UuTVJSJywgdmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6ICdOUlInLCB2YWx1ZTogMCB9LFxuICAgIHsgbmFtZTogJ0UuTlJSJywgdmFsdWU6IDAgfSxcbiAgXTtcbiAgcHVibGljIHZpc2libGVTZWxlY3RlZE1ldHJpY3M6IE1ldHJpY1tdID0gW107XG4gIHB1YmxpYyByZXN0U2VsZWN0ZWRNZXRyaWNzOiBNZXRyaWNbXSA9IFtdO1xuICBwdWJsaWMgbWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIGZpbHRlcmVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHVibGljIGVkaXRpbmdNZXRyaWM6IE1ldHJpYyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGN1cnJlbmN5U3ltYm9sOiBzdHJpbmc7XG4gIHB1YmxpYyBzaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICBwdWJsaWMgc2VhcmNoQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XG4gIHB1YmxpYyBuYW1lQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcixcbiAgICBpbnZhbGlkQ2hhcmFjdGVyc1ZhbGlkYXRvcihzdGFuZGFyZENoYXJTZXRXaXRoU3BhY2VSZWdFeHApLFxuICAgIHJlc2VydmVkSWRlbnRpZmllclZhbGlkYXRvcixcbiAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg4MCksXG4gIF0pO1xuXG4gIHByaXZhdGUgYWN0aXZlTWV0cmljUnVsZXM6IE1ldHJpY1J1bGVbXSA9IFtdO1xuICBwcml2YXRlIGFjdGl2ZU1ldHJpY1J1bGVOYW1lczogTWV0cmljW10gPSBbXTtcbiAgcHJpdmF0ZSBkZWZhdWx0TWV0cmljUnVsZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIG1ldHJpY0tleXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGFzdFNhdmVkTWV0cmljczogTWV0cmljW10gPSBbXTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIHF1b3RlRHJhZnRTZXJ2aWNlOiBRdW90ZURyYWZ0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBtZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlOiBNZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb246IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZTogU2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNldHRpbmdzOiBSdW50aW1lU2V0dGluZ3NTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmN1cnJlbmN5U3ltYm9sID0gdGhpcy5ydW50aW1lU2V0dGluZ3MuZ2V0Q3VycmVuY3lTZXR0aW5ncygpLnN5bWJvbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZU1ldHJpY1J1bGVzID0gdGhpcy5mbG93Q29uZmlndXJhdGlvbi5hY3RpdmVNZXRyaWNzU25hcHNob3QuZmlsdGVyKG1ldHJpY1J1bGUgPT5cbiAgICAgIG1ldHJpY1J1bGUubWV0cmljcy5zb21lKG1ldHJpYyA9PiAhIW1ldHJpYy50b3RhbE5hbWUpLFxuICAgICk7XG4gICAgY29uc3QgYWN0aXZlTWV0cmljUnVsZU5hbWVzID0gdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5tYXAobWV0cmljUnVsZSA9PiBtZXRyaWNSdWxlLnRpdGxlKTtcblxuICAgIHRoaXMuc2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlXG4gICAgICAuZ2V0U2V0dGluZ3NNYXAoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuY3VycmVudFN0YXRlJCksXG4gICAgICAgIHRhcCgoW3NldHRpbmdzLCBsaW5lSXRlbXNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzID0gKHNldHRpbmdzPy5ERUZBVUxUX0hFQURFUl9NRVRSSUNTIHx8IFtdKS5maWx0ZXIocnVsZU5hbWUgPT5cbiAgICAgICAgICAgIGFjdGl2ZU1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm1ldHJpY0tleXMgPSB0aGlzLmNvbGxlY3RNZXRyaWNLZXlzKGxpbmVJdGVtcyk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlTmFtZXMgPSB0aGlzLmdldEFjdGl2ZU1ldHJpY1J1bGVOYW1lcygpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0QXZhaWxhYmxlTWV0cmljcygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksIHN0YXJ0V2l0aCgnJykpLnN1YnNjcmliZShxdWVyeSA9PiB7XG4gICAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubWV0cmljc0NhbGN1bGF0aW9uU2VydmljZS5vbk1ldHJpY3NVcGRhdGUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZU92ZXJsYXkoZXZlbnQ6IE1vdXNlRXZlbnQsIG92ZXJsYXk6IE92ZXJsYXlQYW5lbCwgdGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMucmVzdFNlbGVjdGVkTWV0cmljcy5sZW5ndGgpIHtcbiAgICAgIGlmICghb3ZlcmxheS5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2xpY2snKSk7XG4gICAgICB9XG5cbiAgICAgIG92ZXJsYXkudG9nZ2xlKGV2ZW50LCB0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5TaWRlYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5TaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgICB0aGlzLnNpZGViYXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZVNpZGViYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlYmFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMubWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLmxhc3RTYXZlZE1ldHJpY3MpO1xuICAgIHRoaXMuZWRpdGluZ01ldHJpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgcHVibGljIGdldE1ldHJpY1ZhbHVlKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCk7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKCdFZmZlY3RpdmVfJykpIHtcbiAgICAgIGNvbnN0IGNvcnJlY3RLZXkgPSBrZXkucmVwbGFjZSgnRWZmZWN0aXZlXycsICcnKTtcbiAgICAgIHJldHVybiB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tjb3JyZWN0S2V5XSkgLSB0aGlzLnRvTnVtYmVyKGNvbnRleHQucHJvcGVydGllc1tgUHJldmlvdXMke2NvcnJlY3RLZXl9YF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRyaWNzQ2FsY3VsYXRpb25TZXJ2aWNlLmdldE1ldHJpY1ZhbHVlKGtleSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5tZXRyaWNzKSk7XG4gICAgdGhpcy5zZXRNZXRyaWNzKCk7XG4gICAgdGhpcy5sYXN0U2F2ZWRNZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcyk7XG4gICAgdGhpcy5jbG9zZVNpZGViYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VNZXRyaWNPcmRlcihldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KTogdm9pZCB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMubWV0cmljcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmZpbHRlcmVkTWV0cmljcyA9IHRoaXMubWV0cmljcztcbiAgfVxuXG4gIHB1YmxpYyBlZGl0TWV0cmljKG1ldHJpYzogTWV0cmljKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ01ldHJpYyAmJiB0aGlzLm5hbWVDb250cm9sLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gbWV0cmljO1xuICAgIHRoaXMubmFtZUNvbnRyb2wuc2V0VmFsdWUobWV0cmljLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIHNhdmVNZXRyaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmFtZUNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGl0aW5nTWV0cmljKSB7XG4gICAgICB0aGlzLmVkaXRpbmdNZXRyaWMubmFtZSA9IHRoaXMubmFtZUNvbnRyb2wudmFsdWU/LnRyaW0oKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nTWV0cmljID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbE1ldHJpYygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmdNZXRyaWMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRUb0RlZmF1bHQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2xsZWN0QXZhaWxhYmxlTWV0cmljcyh0cnVlKTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWFyY2goZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsaW5lSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICBrZXlzLnB1c2goLi4uT2JqZWN0LmtleXMobGluZUl0ZW0udG90YWxNZXRyaWNzIHx8IHt9KSk7XG4gICAgICBrZXlzLnB1c2goLi4udGhpcy5jb2xsZWN0TWV0cmljS2V5cyhsaW5lSXRlbS5saW5lSXRlbXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5pcShrZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWV0cmljcygpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzID0gY2xvbmVEZWVwKHRoaXMubWV0cmljcy5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKSk7XG5cbiAgICB0aGlzLnZpc2libGVTZWxlY3RlZE1ldHJpY3MgPSBtZXRyaWNzLnNsaWNlKDAsIDQpO1xuICAgIHRoaXMucmVzdFNlbGVjdGVkTWV0cmljcyA9IG1ldHJpY3Muc2xpY2UoNCk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RBdmFpbGFibGVNZXRyaWNzKHJlc2V0VG9EZWZhdWx0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZWRNZXRyaWNzOiBNZXRyaWNbXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTUVUUklDU19TVE9SQUdFX0tFWSkgfHwgJ1tdJyk7XG4gICAgY29uc3QgbWV0cmljS2V5cyA9IHRoaXMubWV0cmljS2V5cy5zbGljZSgpO1xuICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSAhc3RvcmVkTWV0cmljcy5sZW5ndGggfHwgcmVzZXRUb0RlZmF1bHQ7XG5cbiAgICB0aGlzLm1ldHJpY3MgPSAoaXNEZWZhdWx0Q29uZmlndXJhdGlvbiA/IHRoaXMuYWN0aXZlTWV0cmljUnVsZU5hbWVzIDogc3RvcmVkTWV0cmljcykucmVkdWNlKChyZXN1bHQsIG1ldHJpYykgPT4ge1xuICAgICAgY29uc3QgbWV0cmljS2V5SW5kZXggPSBtZXRyaWNLZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBtZXRyaWMua2V5KTtcblxuICAgICAgaWYgKG1ldHJpY0tleUluZGV4ID49IDApIHtcbiAgICAgICAgbWV0cmljS2V5cy5zcGxpY2UobWV0cmljS2V5SW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNEZWZhdWx0Q29uZmlndXJhdGlvbiAmJiB0aGlzLmRlZmF1bHRNZXRyaWNSdWxlTmFtZXMuaW5jbHVkZXMobWV0cmljLm5hbWUpKSB7XG4gICAgICAgIG1ldHJpYy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFsuLi5yZXN1bHQsIG1ldHJpY107XG4gICAgfSwgW10gYXMgTWV0cmljW10pO1xuXG4gICAgdGhpcy5tZXRyaWNzID0gW1xuICAgICAgLi4udGhpcy5tZXRyaWNzLFxuICAgICAgLi4ubWV0cmljS2V5cy5tYXAobWV0cmljS2V5ID0+IHtcbiAgICAgICAgcmV0dXJuIHsga2V5OiBtZXRyaWNLZXksIG5hbWU6IHRoaXMuZ2V0TWV0cmljTmFtZShtZXRyaWNLZXkpLCB2aXNpYmxlOiBmYWxzZSB9O1xuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8vIHNvcnQgdGhlIG1ldHJpY3MgYnkgdGhlIG9yZGVyIG9mIGRlZmF1bHQgbWV0cmljIHJ1bGUgbmFtZXMgZnJvbSB0aGUgc2hvcHBpbmcgY2FydCBzZXR0aW5nc1xuICAgIHRoaXMubWV0cmljcyA9IHRoaXMuc29ydE1ldHJpY3MoKTtcblxuICAgIHRoaXMubWV0cmljcyA9IGNsb25lRGVlcCh0aGlzLm1ldHJpY3MpO1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICBpZiAoIXJlc2V0VG9EZWZhdWx0KSB7XG4gICAgICB0aGlzLmxhc3RTYXZlZE1ldHJpY3MgPSBjbG9uZURlZXAodGhpcy5tZXRyaWNzKTtcbiAgICAgIHRoaXMuc2V0TWV0cmljcygpO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRyaWNOYW1lKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVNZXRyaWNSdWxlcy5maW5kKG1ldHJpY1J1bGUgPT4gbWV0cmljUnVsZS5tZXRyaWNzLmZpbmQobWV0cmljID0+IG1ldHJpYy50b3RhbE5hbWUgPT09IGtleSkpPy50aXRsZSB8fFxuICAgICAga2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgcmV0dXJuICsodmFsdWUgfHwgMCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1ldHJpY1J1bGVOYW1lcygpOiBNZXRyaWNbXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlTWV0cmljUnVsZXMucmVkdWNlKChyZXN1bHQsIG1ldHJpY1J1bGUpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBtZXRyaWNSdWxlLnRpdGxlO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmNsdWRlcyhuYW1lKTtcblxuICAgICAgbWV0cmljUnVsZS5tZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIGtleTogbWV0cmljLnRvdGFsTmFtZSB8fCBtZXRyaWMubmFtZSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10gYXMgTWV0cmljW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBNZXRyaWNzIGFycmF5IGJ5IHRoZSBvcmRlciBvZiB0aGUgZGVmYXVsdCBtZXRyaWMgcnVsZSBuYW1lcyBmcm9tIHRoZSBzaG9wcGluZyBjYXJ0IHNldHRpbmdzLlxuICAgKiBJZiBhIG1ldHJpYyBpcyBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZiBkZWZhdWx0IG1ldHJpY3MsIGl0IHJhaXNlcyB0aGUgbWV0cmljIHRvIHRoZSB0b3Agb2YgdGhlIG1ldHJpY3MgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIHNvcnRNZXRyaWNzKCk6IE1ldHJpY1tdIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgaW5kZXhBID0gdGhpcy5kZWZhdWx0TWV0cmljUnVsZU5hbWVzLmluZGV4T2YoYS5uYW1lKTtcbiAgICAgIGNvbnN0IGluZGV4QiA9IHRoaXMuZGVmYXVsdE1ldHJpY1J1bGVOYW1lcy5pbmRleE9mKGIubmFtZSk7XG5cbiAgICAgIGlmIChpbmRleEEgPT09IC0xICYmIGluZGV4QiA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleEEgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhCID09PSAtMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleEEgLSBpbmRleEI7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXItbWV0cmljc1wiIChjbGljayk9XCJ0b2dnbGVPdmVybGF5KCRldmVudCwgb3ZlcmxheVBhbmVsLCBtZXRyaWNzVGFyZ2V0KVwiPlxuICA8ZGl2IGNsYXNzPVwibWV0cmljc1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiB2aXNpYmxlU2VsZWN0ZWRNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWNcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibmFtZVwiXG4gICAgICAgIFt2bEhpZGRlblRleHRUb29sdGlwXT1cIm1ldHJpYy5uYW1lXCJcbiAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICA+XG4gICAgICAgIHt7IG1ldHJpYy5uYW1lIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICB2bEhpZGRlblRleHRUb29sdGlwPVwie3sgZ2V0TWV0cmljVmFsdWUobWV0cmljLmtleSkgfCB2bFByaWNlIH19XCJcbiAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICA+XG4gICAgICAgIHt7IGdldE1ldHJpY1ZhbHVlKG1ldHJpYy5rZXkpIHwgdmxQcmljZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2aXNpYmxlU2VsZWN0ZWRNZXRyaWNzLmxlbmd0aFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGVtcHR5U3RhdGVNZXRyaWNzXCIgY2xhc3M9XCJtZXRyaWMgZW1wdHktc3RhdGUtbWV0cmljXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJuYW1lXCJcbiAgICAgICAgICBbdmxIaWRkZW5UZXh0VG9vbHRpcF09XCJtZXRyaWMubmFtZVwiXG4gICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJtZXRyaWMtdG9vbHRpcFwiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1ldHJpYy5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgdmxIaWRkZW5UZXh0VG9vbHRpcD1cInt7IG1ldHJpYy52YWx1ZSB8IHZsUHJpY2UgfX1cIlxuICAgICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZXRyaWMudmFsdWUgfCB2bFByaWNlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2ICNtZXRyaWNzVGFyZ2V0IGNsYXNzPVwibWV0cmljcy1vdmVybGF5LXRhcmdldFwiIFtjbGFzcy5leHBhbmRlZF09XCJvdmVybGF5UGFuZWw/Lm92ZXJsYXlWaXNpYmxlXCI+XG4gICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LWRvd25cIj48L2k+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxwLW92ZXJsYXlQYW5lbFxuICBzdHlsZUNsYXNzPVwiY2F0YWxvZy1vdmVybGF5IG1ldHJpY3Mtb3ZlcmxheS1jb250YWluZXIgcmlnaHQgbm8tcGFkZGluZ1wiXG4gIHNob3dUcmFuc2l0aW9uT3B0aW9ucz1cIjBtc1wiXG4gIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBtc1wiXG4+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbWV0cmljc1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIHJlc3RTZWxlY3RlZE1ldHJpY3NcIiBjbGFzcz1cIm1ldHJpY1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwibmFtZVwiXG4gICAgICAgICAgW3ZsSGlkZGVuVGV4dFRvb2x0aXBdPVwibWV0cmljLm5hbWVcIlxuICAgICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBtZXRyaWMubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsbGVyXCI+PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgIHZsSGlkZGVuVGV4dFRvb2x0aXA9XCJ7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cIlxuICAgICAgICAgIHRvb2x0aXBTdHlsZUNsYXNzPVwibWV0cmljLXRvb2x0aXBcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRNZXRyaWNWYWx1ZShtZXRyaWMua2V5KSB8IHZsUHJpY2UgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZpZ1wiIChjbGljayk9XCJvcGVuU2lkZWJhcigpXCI+XG4gICAgICBNZXRyaWNzIENvbmZpZ1xuICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LXJpZ2h0XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLW92ZXJsYXlQYW5lbD5cblxuPHAtc2lkZWJhclxuICBbdmlzaWJsZV09XCJzaWRlYmFyVmlzaWJsZVwiXG4gICh2aXNpYmxlQ2hhbmdlKT1cImNsb3NlU2lkZWJhcigpXCJcbiAgcG9zaXRpb249XCJyaWdodFwiXG4gIFtiYXNlWkluZGV4XT1cIjEwMDBcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogJzMwMHB4JyB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgIFF1b3RlIE1ldHJpY3MgQ29uZmlnXG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtY3Jvc3NcIiAoY2xpY2spPVwiY2xvc2VTaWRlYmFyKClcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8bGFiZWwgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWFyY2hDb250cm9sLnZhbHVlIHx8IGlzRm9jdXNlZFwiPlxuICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLXNlYXJjaFwiPjwvaT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3QtaWQ9XCJzZWFyY2hcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiXG4gICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIG1ldHJpY+KAplwiXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIHNlYXJjaC1pbnB1dFwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAvPlxuICAgICAgPGkgKm5nSWY9XCJzZWFyY2hDb250cm9sLnZhbHVlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWNyb3NzXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudClcIj48L2k+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1tZXRyaWNzXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJjaGFuZ2VNZXRyaWNPcmRlcigkZXZlbnQpXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbWV0cmljIG9mIGZpbHRlcmVkTWV0cmljc1wiXG4gICAgICAgICAgY2xhc3M9XCJzaWRlYmFyLW1ldHJpY1wiXG4gICAgICAgICAgW2NsYXNzLmVkaXRdPVwibWV0cmljLmtleSA9PT0gZWRpdGluZ01ldHJpYz8ua2V5XCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhIXNlYXJjaENvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctaWNvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJ2bC1pY29uIHZsLWRyYWdcIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXRyaWNUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBtZXRyaWM6IG1ldHJpYyB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiICpuZ0lmPVwiIWZpbHRlcmVkTWV0cmljcy5sZW5ndGhcIj5UaGVyZSBhcmUgbm8gaXRlbXMgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWE8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgbGFiZWw9XCJSZXNldCB0byBEZWZhdWx0XCJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLXNtXCJcbiAgICAgICAgKG9uQ2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiBsYWJlbD1cIlNhdmVcIiBzdHlsZUNsYXNzPVwicC1idXR0b24gcC1idXR0b24tZmlsbGVkIHAtYnV0dG9uLXNtXCIgKG9uQ2xpY2spPVwic2F2ZSgpXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3Atc2lkZWJhcj5cblxuPG5nLXRlbXBsYXRlICNtZXRyaWNUZW1wbGF0ZSBsZXQtbWV0cmljPVwibWV0cmljXCI+XG4gIDxkaXYgKm5nSWY9XCJlZGl0aW5nTWV0cmljPy5rZXkgIT09IG1ldHJpYy5rZXlcIiBjbGFzcz1cInByZXZpZXctc3RhdGVcIj5cbiAgICA8cC1jaGVja2JveFxuICAgICAgW25nTW9kZWxdPVwibWV0cmljLnZpc2libGVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibWV0cmljLnZpc2libGUgPSAhbWV0cmljLnZpc2libGVcIlxuICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgIGNoZWNrYm94SWNvbj1cInZsLWljb24gdmwtY2hlY2tcIlxuICAgID48L3AtY2hlY2tib3g+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgbWV0cmljLm5hbWUgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSA9PT0gbWV0cmljLmtleVwiIGNsYXNzPVwiZWRpdC1zdGF0ZVwiPlxuICAgIDxpbnB1dCBkYXRhLXRlc3QtaWQ9XCJuYW1lXCIgW2Zvcm1Db250cm9sXT1cIm5hbWVDb250cm9sXCIgcElucHV0VGV4dCBwbGFjZWhvbGRlcj1cIk1ldHJpYyBuYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIiAvPlxuICAgIDx2bC1lcnJvci10b29sdGlwIFt0b29sdGlwXT1cIm5hbWVDb250cm9sIHwgZXJyb3IgOiAnbmFtZSdcIiBbdmlzaWJsZV09XCIhIW5hbWVDb250cm9sLmVycm9yc1wiPjwvdmwtZXJyb3ItdG9vbHRpcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSAhPT0gbWV0cmljLmtleVwiIChjbGljayk9XCJlZGl0TWV0cmljKG1ldHJpYylcIiBjbGFzcz1cImFjdGlvbiBlZGl0XCI+XG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtZWRpdFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ01ldHJpYz8ua2V5ID09PSBtZXRyaWMua2V5XCIgKGNsaWNrKT1cImNhbmNlbE1ldHJpYygpXCIgY2xhc3M9XCJhY3Rpb24gY2FuY2VsXCI+XG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtY3Jvc3NcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImVkaXRpbmdNZXRyaWM/LmtleSA9PT0gbWV0cmljLmtleVwiIChjbGljayk9XCJzYXZlTWV0cmljKClcIiBjbGFzcz1cImFjdGlvbiBzYXZlXCI+XG4gICAgICA8aSBjbGFzcz1cInZsLWljb24gdmwtY2hlY2tcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
@@ -1,2 +0,0 @@
|
|
1
|
-
export const METRICS_STORAGE_KEY = 'vl-metrics';
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kZWZpbml0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9tZXRyaWNzL21ldHJpY3MuZGVmaW5pdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE1FVFJJQ1NfU1RPUkFHRV9LRVkgPSAndmwtbWV0cmljcyc7XG4iXX0=
|
@@ -1,69 +0,0 @@
|
|
1
|
-
import { DragDropModule } from '@angular/cdk/drag-drop';
|
2
|
-
import { CommonModule } from '@angular/common';
|
3
|
-
import { NgModule } from '@angular/core';
|
4
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
5
|
-
import { ErrorTooltipModule, HiddenTextTooltipModule, LetDirectiveModule } from '@veloceapps/components';
|
6
|
-
import { SdkPipesModule } from '@veloceapps/sdk/core';
|
7
|
-
import { ButtonModule } from 'primeng/button';
|
8
|
-
import { CheckboxModule } from 'primeng/checkbox';
|
9
|
-
import { InputTextModule } from 'primeng/inputtext';
|
10
|
-
import { OverlayPanelModule } from 'primeng/overlaypanel';
|
11
|
-
import { SidebarModule } from 'primeng/sidebar';
|
12
|
-
import { VirtualScrollerModule } from 'primeng/virtualscroller';
|
13
|
-
import { MetricsComponent } from './metrics.component';
|
14
|
-
import * as i0 from "@angular/core";
|
15
|
-
export class MetricsModule {
|
16
|
-
}
|
17
|
-
MetricsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
18
|
-
MetricsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: MetricsModule, declarations: [MetricsComponent], imports: [CommonModule,
|
19
|
-
FormsModule,
|
20
|
-
ReactiveFormsModule,
|
21
|
-
DragDropModule,
|
22
|
-
ButtonModule,
|
23
|
-
OverlayPanelModule,
|
24
|
-
SidebarModule,
|
25
|
-
InputTextModule,
|
26
|
-
CheckboxModule,
|
27
|
-
LetDirectiveModule,
|
28
|
-
VirtualScrollerModule,
|
29
|
-
ErrorTooltipModule,
|
30
|
-
HiddenTextTooltipModule,
|
31
|
-
SdkPipesModule], exports: [MetricsComponent] });
|
32
|
-
MetricsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsModule, imports: [CommonModule,
|
33
|
-
FormsModule,
|
34
|
-
ReactiveFormsModule,
|
35
|
-
DragDropModule,
|
36
|
-
ButtonModule,
|
37
|
-
OverlayPanelModule,
|
38
|
-
SidebarModule,
|
39
|
-
InputTextModule,
|
40
|
-
CheckboxModule,
|
41
|
-
LetDirectiveModule,
|
42
|
-
VirtualScrollerModule,
|
43
|
-
ErrorTooltipModule,
|
44
|
-
HiddenTextTooltipModule,
|
45
|
-
SdkPipesModule] });
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MetricsModule, decorators: [{
|
47
|
-
type: NgModule,
|
48
|
-
args: [{
|
49
|
-
declarations: [MetricsComponent],
|
50
|
-
imports: [
|
51
|
-
CommonModule,
|
52
|
-
FormsModule,
|
53
|
-
ReactiveFormsModule,
|
54
|
-
DragDropModule,
|
55
|
-
ButtonModule,
|
56
|
-
OverlayPanelModule,
|
57
|
-
SidebarModule,
|
58
|
-
InputTextModule,
|
59
|
-
CheckboxModule,
|
60
|
-
LetDirectiveModule,
|
61
|
-
VirtualScrollerModule,
|
62
|
-
ErrorTooltipModule,
|
63
|
-
HiddenTextTooltipModule,
|
64
|
-
SdkPipesModule,
|
65
|
-
],
|
66
|
-
exports: [MetricsComponent],
|
67
|
-
}]
|
68
|
-
}] });
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvY29tcG9uZW50cy9oZWFkZXIvbWV0cmljcy9tZXRyaWNzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBc0J2RCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLGlCQW5CVCxnQkFBZ0IsYUFFN0IsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGVBQWU7UUFDZixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLGNBQWMsYUFFTixnQkFBZ0I7MkdBRWYsYUFBYSxZQWpCdEIsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLGVBQWU7UUFDZixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLGNBQWM7MkZBSUwsYUFBYTtrQkFwQnpCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFcnJvclRvb2x0aXBNb2R1bGUsIEhpZGRlblRleHRUb29sdGlwTW9kdWxlLCBMZXREaXJlY3RpdmVNb2R1bGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7IFNka1BpcGVzTW9kdWxlIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IFNpZGViYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NpZGViYXInO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy92aXJ0dWFsc2Nyb2xsZXInO1xuaW1wb3J0IHsgTWV0cmljc0NvbXBvbmVudCB9IGZyb20gJy4vbWV0cmljcy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtNZXRyaWNzQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBPdmVybGF5UGFuZWxNb2R1bGUsXG4gICAgU2lkZWJhck1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgTGV0RGlyZWN0aXZlTW9kdWxlLFxuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSxcbiAgICBFcnJvclRvb2x0aXBNb2R1bGUsXG4gICAgSGlkZGVuVGV4dFRvb2x0aXBNb2R1bGUsXG4gICAgU2RrUGlwZXNNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtNZXRyaWNzQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTWV0cmljc01vZHVsZSB7fVxuIl19
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import { AfterViewInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
2
|
-
import { FormGroup } from '@angular/forms';
|
3
|
-
import { FlowConfigurationService, ProductImagesService, QuoteDraftService } from '@veloceapps/sdk/core';
|
4
|
-
import { OverlayPanel } from 'primeng/overlaypanel';
|
5
|
-
import { Observable } from 'rxjs';
|
6
|
-
import { FlowRouterService } from '../../../services/flow-router.service';
|
7
|
-
import { HeaderProduct } from '../header.types';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
export declare class CartPreviewComponent implements OnChanges, AfterViewInit, OnDestroy {
|
10
|
-
private flowConfiguration;
|
11
|
-
private routerService;
|
12
|
-
private productImagesService;
|
13
|
-
private quoteDraftService;
|
14
|
-
overlayPanel: OverlayPanel;
|
15
|
-
products: HeaderProduct[];
|
16
|
-
readonly productRowHeight = 65;
|
17
|
-
form: FormGroup<{}>;
|
18
|
-
lockedProductId$: Observable<string | null>;
|
19
|
-
isEditMode$: Observable<boolean>;
|
20
|
-
hasTermInProducts: boolean;
|
21
|
-
scrollHeight: number;
|
22
|
-
private shouldUpdate$;
|
23
|
-
private destroyed$;
|
24
|
-
constructor(flowConfiguration: FlowConfigurationService, routerService: FlowRouterService, productImagesService: ProductImagesService, quoteDraftService: QuoteDraftService);
|
25
|
-
ngOnChanges(changes: SimpleChanges): void;
|
26
|
-
ngAfterViewInit(): void;
|
27
|
-
ngOnDestroy(): void;
|
28
|
-
getImageUrl(productId: string): Observable<string | null>;
|
29
|
-
navigateToProductConfiguration(productId: string, lineItemId: string): void;
|
30
|
-
controlBlurHandler(product: HeaderProduct): void;
|
31
|
-
deleteHandler(product: HeaderProduct): void;
|
32
|
-
deleteAllHandler(): void;
|
33
|
-
private updateControls;
|
34
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CartPreviewComponent, never>;
|
35
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CartPreviewComponent, "vl-cart-preview", never, { "products": "products"; }, {}, never, never, false, never>;
|
36
|
-
}
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import * as i0 from "@angular/core";
|
2
|
-
import * as i1 from "./cart-preview.component";
|
3
|
-
import * as i2 from "@angular/common";
|
4
|
-
import * as i3 from "@angular/forms";
|
5
|
-
import * as i4 from "primeng/button";
|
6
|
-
import * as i5 from "primeng/overlaypanel";
|
7
|
-
import * as i6 from "@veloceapps/components";
|
8
|
-
import * as i7 from "primeng/inputnumber";
|
9
|
-
import * as i8 from "primeng/virtualscroller";
|
10
|
-
export declare class CartPreviewModule {
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<CartPreviewModule, never>;
|
12
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<CartPreviewModule, [typeof i1.CartPreviewComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.ButtonModule, typeof i5.OverlayPanelModule, typeof i6.LetDirectiveModule, typeof i7.InputNumberModule, typeof i8.VirtualScrollerModule, typeof i6.QuantityControlModule], [typeof i1.CartPreviewComponent]>;
|
13
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<CartPreviewModule>;
|
14
|
-
}
|
@@ -1,70 +0,0 @@
|
|
1
|
-
import { OnDestroy, OnInit } from '@angular/core';
|
2
|
-
import { QuoteApiService, SalesforceApiService } from '@veloceapps/api';
|
3
|
-
import { ContextProperties, LineItem, PriceList } from '@veloceapps/core';
|
4
|
-
import { IntegrationState } from '@veloceapps/sdk/cms';
|
5
|
-
import { ContextService, FlowConfigurationService, QuoteDraftService } from '@veloceapps/sdk/core';
|
6
|
-
import { MenuItem } from 'primeng/api';
|
7
|
-
import { BehaviorSubject, Observable } from 'rxjs';
|
8
|
-
import { FlowDialogService } from '../../services/flow-dialog.service';
|
9
|
-
import { FlowRouterService } from '../../services/flow-router.service';
|
10
|
-
import { CartPreviewComponent } from './cart-overlay/cart-preview.component';
|
11
|
-
import { HeaderObjectDetails, HeaderProduct } from './header.types';
|
12
|
-
import * as i0 from "@angular/core";
|
13
|
-
export declare class FlowHeaderComponent implements OnInit, OnDestroy {
|
14
|
-
private contextService;
|
15
|
-
private quoteDraftService;
|
16
|
-
private quoteApiService;
|
17
|
-
private sfApiService;
|
18
|
-
private flowConfiguration;
|
19
|
-
private routerService;
|
20
|
-
private dialogService;
|
21
|
-
private integrationState;
|
22
|
-
objectName$: Observable<string>;
|
23
|
-
contextProperties$: Observable<ContextProperties>;
|
24
|
-
activePriceList$: Observable<PriceList | null>;
|
25
|
-
isReadonlyMode$: Observable<boolean>;
|
26
|
-
status$: Observable<string>;
|
27
|
-
objectDetails$: Observable<HeaderObjectDetails>;
|
28
|
-
assetsCount$: Observable<number>;
|
29
|
-
products$: Observable<HeaderProduct[]>;
|
30
|
-
isConfigurationRoute$: Observable<boolean>;
|
31
|
-
isCartRoute$: Observable<boolean>;
|
32
|
-
isCatalogRoute$: Observable<boolean>;
|
33
|
-
isAssetsRoute$: Observable<boolean>;
|
34
|
-
isEditMode$: Observable<boolean>;
|
35
|
-
isSaveInProgress$: BehaviorSubject<boolean>;
|
36
|
-
isSubmitInProgress$: BehaviorSubject<boolean>;
|
37
|
-
dateFormat: string;
|
38
|
-
assetPriceLists$: BehaviorSubject<PriceList[]>;
|
39
|
-
private mode$;
|
40
|
-
private destroyed$;
|
41
|
-
constructor(contextService: ContextService, quoteDraftService: QuoteDraftService, quoteApiService: QuoteApiService, sfApiService: SalesforceApiService, flowConfiguration: FlowConfigurationService, routerService: FlowRouterService, dialogService: FlowDialogService, integrationState: IntegrationState);
|
42
|
-
ngOnInit(): void;
|
43
|
-
ngOnDestroy(): void;
|
44
|
-
get isAccountMode(): boolean;
|
45
|
-
get isQuoteMode(): boolean;
|
46
|
-
get isAccountMode$(): Observable<boolean>;
|
47
|
-
get isQuoteMode$(): Observable<boolean>;
|
48
|
-
getSplitButtonActions(isCartRoute: boolean): MenuItem[];
|
49
|
-
back(objectId?: string): void;
|
50
|
-
getSalesforceObjectLink(objectId?: string): string;
|
51
|
-
navigateToShoppingCart(): void;
|
52
|
-
navigateToCatalog(): void;
|
53
|
-
navigateToAssets(): void;
|
54
|
-
docGenButtonClickHandler(isCartRoute: boolean): void;
|
55
|
-
saveButtonClickHandler(isCartRoute: boolean, stayOnPage?: boolean): void;
|
56
|
-
submitButtonClickHandler(isCartRoute: boolean): void;
|
57
|
-
selectPriceList(priceListId: string): void;
|
58
|
-
toggleCartOverlay(cart: CartPreviewComponent, event: Event): void;
|
59
|
-
private saveQuote$;
|
60
|
-
private queryName$;
|
61
|
-
private getObjectDetails$;
|
62
|
-
private formatMetric;
|
63
|
-
getDraftItems$(): Observable<LineItem[]>;
|
64
|
-
getAssets$(): Observable<LineItem[]>;
|
65
|
-
private generateProducts;
|
66
|
-
private isReadonlyMode;
|
67
|
-
private isUpsellQuoteWithoutChanges;
|
68
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FlowHeaderComponent, never>;
|
69
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FlowHeaderComponent, "vl-flow-header", never, {}, {}, never, never, false, never>;
|
70
|
-
}
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import * as i0 from "@angular/core";
|
2
|
-
import * as i1 from "./header.component";
|
3
|
-
import * as i2 from "@angular/common";
|
4
|
-
import * as i3 from "primeng/overlaypanel";
|
5
|
-
import * as i4 from "@veloceapps/components";
|
6
|
-
import * as i5 from "primeng/tooltip";
|
7
|
-
import * as i6 from "primeng/button";
|
8
|
-
import * as i7 from "./cart-overlay/cart-preview.module";
|
9
|
-
import * as i8 from "primeng/splitbutton";
|
10
|
-
import * as i9 from "./metrics/metrics.module";
|
11
|
-
import * as i10 from "@veloceapps/sdk/core";
|
12
|
-
export declare class FlowHeaderModule {
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FlowHeaderModule, never>;
|
14
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<FlowHeaderModule, [typeof i1.FlowHeaderComponent], [typeof i2.CommonModule, typeof i3.OverlayPanelModule, typeof i4.LetDirectiveModule, typeof i5.TooltipModule, typeof i6.ButtonModule, typeof i7.CartPreviewModule, typeof i8.SplitButtonModule, typeof i9.MetricsModule, typeof i10.SdkPipesModule], [typeof i1.FlowHeaderComponent]>;
|
15
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<FlowHeaderModule>;
|
16
|
-
}
|