@vendure/admin-ui 3.4.3-master-202509250229 → 3.5.0-minor-202509261210
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/core/common/generated-types.d.ts +92 -30
- package/core/common/version.d.ts +1 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +109 -109
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +915 -1000
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +43 -43
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-dashboard.mjs +41 -41
- package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-login.mjs +10 -10
- package/fesm2022/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs +10 -10
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +133 -133
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-react.mjs +15 -15
- package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +109 -109
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs +16 -16
- package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
- package/package.json +2 -2
- package/static/theme.min.css +1 -1
|
@@ -30,10 +30,10 @@ class DashboardWidgetComponent {
|
|
|
30
30
|
this.componentRef.destroy();
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
34
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DashboardWidgetComponent, isStandalone: false, selector: "vdr-dashboard-widget", inputs: { widgetConfig: "widgetConfig" }, viewQueries: [{ propertyName: "portal", first: true, predicate: ["portal"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<vdr-card [title]=\"widgetConfig.title ?? '' | translate\">\n <ng-template vdrCardControls>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #portal></ng-template>\n</vdr-card>\n", styles: [":host{display:block}.card{margin-top:0;min-height:200px}.card-header{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "directive", type: i1.CardControlsDirective, selector: "[vdrCardControls]" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
35
35
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardWidgetComponent, decorators: [{
|
|
37
37
|
type: Component,
|
|
38
38
|
args: [{ selector: 'vdr-dashboard-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<vdr-card [title]=\"widgetConfig.title ?? '' | translate\">\n <ng-template vdrCardControls>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #portal></ng-template>\n</vdr-card>\n", styles: [":host{display:block}.card{margin-top:0;min-height:200px}.card-header{display:flex;justify-content:space-between}\n"] }]
|
|
39
39
|
}], propDecorators: { widgetConfig: [{
|
|
@@ -148,10 +148,10 @@ class DashboardComponent {
|
|
|
148
148
|
setTimeout(() => this.changedDetectorRef.markForCheck());
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
152
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.DashboardWidgetService }, { token: i1.LocalStorageService }, { token: i0.ChangeDetectorRef }, { token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DashboardComponent, isStandalone: false, selector: "vdr-dashboard", ngImport: i0, template: "<vdr-page-block>\n <div class=\"widget-header mb-1\">\n <vdr-dropdown>\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'dashboard.add-widget' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <button\n vdrDropdownItem\n *ngFor=\"let widget of availableWidgets$ | async\"\n (click)=\"addWidget(widget.id)\"\n >\n {{ (widget.config.title ?? widget.id) | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n <div cdkDropListGroup>\n <div\n class=\"clr-row dashboard-row\"\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"{ index: rowIndex }\"\n >\n <div\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\n class=\"dashboard-item\"\n [ngClass]=\"getClassForWidth(widget.width)\"\n cdkDrag\n [cdkDragData]=\"widget\"\n >\n <vdr-dashboard-widget\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\n [widgetConfig]=\"widget.config\"\n >\n <div class=\"flex\">\n <div class=\"drag-handle\" cdkDragHandle>\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\n </div>\n <vdr-dropdown>\n <button class=\"icon-button\" vdrDropdownTrigger>\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\n <button\n vdrDropdownItem\n [disabled]=\"width === widget.width\"\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\n (click)=\"setWidgetWidth(widget, width)\"\n >\n {{ 'dashboard.widget-width' | translate : { width: width } }}\n </button>\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n <button vdrDropdownItem (click)=\"removeWidget(widget)\">\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'dashboard.remove-widget' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-dashboard-widget>\n </div>\n </div>\n </div>\n</vdr-page-block>\n", styles: [".widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.drag-handle{cursor:move}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:2px dashed var(--color-component-border-200);border-radius:var(--border-radius);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i2$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: DashboardWidgetComponent, selector: "vdr-dashboard-widget", inputs: ["widgetConfig"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
153
153
|
}
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
155
155
|
type: Component,
|
|
156
156
|
args: [{ selector: 'vdr-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<vdr-page-block>\n <div class=\"widget-header mb-1\">\n <vdr-dropdown>\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'dashboard.add-widget' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <button\n vdrDropdownItem\n *ngFor=\"let widget of availableWidgets$ | async\"\n (click)=\"addWidget(widget.id)\"\n >\n {{ (widget.config.title ?? widget.id) | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n <div cdkDropListGroup>\n <div\n class=\"clr-row dashboard-row\"\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"{ index: rowIndex }\"\n >\n <div\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\n class=\"dashboard-item\"\n [ngClass]=\"getClassForWidth(widget.width)\"\n cdkDrag\n [cdkDragData]=\"widget\"\n >\n <vdr-dashboard-widget\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\n [widgetConfig]=\"widget.config\"\n >\n <div class=\"flex\">\n <div class=\"drag-handle\" cdkDragHandle>\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\n </div>\n <vdr-dropdown>\n <button class=\"icon-button\" vdrDropdownTrigger>\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\n <button\n vdrDropdownItem\n [disabled]=\"width === widget.width\"\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\n (click)=\"setWidgetWidth(widget, width)\"\n >\n {{ 'dashboard.widget-width' | translate : { width: width } }}\n </button>\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n <button vdrDropdownItem (click)=\"removeWidget(widget)\">\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'dashboard.remove-widget' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-dashboard-widget>\n </div>\n </div>\n </div>\n</vdr-page-block>\n", styles: [".widget-header{display:flex;justify-content:flex-end}.placeholder{color:var(--color-grey-300);text-align:center}.placeholder .version{font-size:3em;margin:24px;line-height:1em}.placeholder ::ng-deep .clr-i-outline{fill:var(--color-grey-200)}vdr-dashboard-widget{margin-bottom:24px}.drag-handle{cursor:move}.cdk-drag-preview{box-sizing:border-box;border-radius:4px}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.dashboard-row{padding:0;border-width:1;margin-bottom:6px;transition:padding .2s,margin .2s}.dashboard-row.cdk-drop-list-dragging,.dashboard-row.cdk-drop-list-receiving{border:2px dashed var(--color-component-border-200);border-radius:var(--border-radius);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
157
157
|
}], ctorParameters: () => [{ type: i1.DashboardWidgetService }, { type: i1.LocalStorageService }, { type: i0.ChangeDetectorRef }, { type: i1.DataService }] });
|
|
@@ -208,19 +208,19 @@ class LatestOrdersWidgetComponent {
|
|
|
208
208
|
.refetchOnChannelChange()
|
|
209
209
|
.mapStream(data => data.orders.items);
|
|
210
210
|
}
|
|
211
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
212
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
211
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: LatestOrdersWidgetComponent, isStandalone: false, selector: "vdr-latest-orders-widget", ngImport: i0, template: "<vdr-data-table-2 [items]=\"latestOrders$ | async\" id=\"latest-orders-widget-list\">\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n <ng-template let-order=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/orders/', order.id]\"\n ><span>{{ order.code }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.state' | translate\" id=\"state\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.customer' | translate\" id=\"customer\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.total' | translate\" id=\"total\">\n <ng-template let-order=\"item\">\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" id=\"placed-at\">\n <ng-template let-order=\"item\">\n {{ order.orderPlacedAt | timeAgo }}\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n", styles: ["vdr-data-table ::ng-deep table{margin-top:0}vdr-order-state-label{display:inline-block;margin-top:2px}\n"], dependencies: [{ kind: "directive", type: i2$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.CustomerLabelComponent, selector: "vdr-customer-label", inputs: ["customer"] }, { kind: "component", type: i1.OrderStateLabelComponent, selector: "vdr-order-state-label", inputs: ["state"] }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex", "trackByPath"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.TimeAgoPipe, name: "timeAgo" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
213
213
|
}
|
|
214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetComponent, decorators: [{
|
|
215
215
|
type: Component,
|
|
216
216
|
args: [{ selector: 'vdr-latest-orders-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<vdr-data-table-2 [items]=\"latestOrders$ | async\" id=\"latest-orders-widget-list\">\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n <ng-template let-order=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/orders/', order.id]\"\n ><span>{{ order.code }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.state' | translate\" id=\"state\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.customer' | translate\" id=\"customer\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.total' | translate\" id=\"total\">\n <ng-template let-order=\"item\">\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" id=\"placed-at\">\n <ng-template let-order=\"item\">\n {{ order.orderPlacedAt | timeAgo }}\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n", styles: ["vdr-data-table ::ng-deep table{margin-top:0}vdr-order-state-label{display:inline-block;margin-top:2px}\n"] }]
|
|
217
217
|
}], ctorParameters: () => [{ type: i1.DataService }] });
|
|
218
218
|
class LatestOrdersWidgetModule {
|
|
219
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
220
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
221
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
219
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
220
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetModule, declarations: [LatestOrdersWidgetComponent], imports: [CoreModule, SharedModule] }); }
|
|
221
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetModule, imports: [CoreModule, SharedModule] }); }
|
|
222
222
|
}
|
|
223
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LatestOrdersWidgetModule, decorators: [{
|
|
224
224
|
type: NgModule,
|
|
225
225
|
args: [{
|
|
226
226
|
imports: [CoreModule, SharedModule],
|
|
@@ -276,10 +276,10 @@ class OrderChartWidgetComponent {
|
|
|
276
276
|
refresh() {
|
|
277
277
|
this.refresh$.next(true);
|
|
278
278
|
}
|
|
279
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
280
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
279
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderChartWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
280
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: OrderChartWidgetComponent, isStandalone: false, selector: "vdr-order-chart-widget", ngImport: i0, template: "<vdr-chart [entries]=\"metrics$ | async\" />\n<div class=\"flex\" *ngIf=\"metricType$ | async as activeMetricType\">\n <button\n class=\"button-small\"\n (click)=\"metricType$.next(MetricType.OrderTotal)\"\n [class.active]=\"activeMetricType === MetricType.OrderTotal\"\n >\n {{ 'dashboard.metric-order-total-value' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.OrderCount)\"\n [class.active]=\"activeMetricType === MetricType.OrderCount\"\n >\n {{ 'dashboard.metric-number-of-orders' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.AverageOrderValue)\"\n [class.active]=\"activeMetricType === MetricType.AverageOrderValue\"\n >\n {{ 'dashboard.metric-average-order-value' | translate }}\n </button>\n <div class=\"flex-spacer\"></div>\n <button class=\"button-small\" (click)=\"refresh()\">\n <clr-icon shape=\"refresh\"></clr-icon>\n </button>\n</div>\n", styles: [".button-small.active{background-color:var(--color-primary-200);color:var(--color-primary-900)}\n"], dependencies: [{ kind: "directive", type: i2$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ChartComponent, selector: "vdr-chart", inputs: ["entries", "options"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
281
281
|
}
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderChartWidgetComponent, decorators: [{
|
|
283
283
|
type: Component,
|
|
284
284
|
args: [{ selector: 'vdr-order-chart-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<vdr-chart [entries]=\"metrics$ | async\" />\n<div class=\"flex\" *ngIf=\"metricType$ | async as activeMetricType\">\n <button\n class=\"button-small\"\n (click)=\"metricType$.next(MetricType.OrderTotal)\"\n [class.active]=\"activeMetricType === MetricType.OrderTotal\"\n >\n {{ 'dashboard.metric-order-total-value' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.OrderCount)\"\n [class.active]=\"activeMetricType === MetricType.OrderCount\"\n >\n {{ 'dashboard.metric-number-of-orders' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.AverageOrderValue)\"\n [class.active]=\"activeMetricType === MetricType.AverageOrderValue\"\n >\n {{ 'dashboard.metric-average-order-value' | translate }}\n </button>\n <div class=\"flex-spacer\"></div>\n <button class=\"button-small\" (click)=\"refresh()\">\n <clr-icon shape=\"refresh\"></clr-icon>\n </button>\n</div>\n", styles: [".button-small.active{background-color:var(--color-primary-200);color:var(--color-primary-900)}\n"] }]
|
|
285
285
|
}], ctorParameters: () => [{ type: i1.DataService }] });
|
|
@@ -322,19 +322,19 @@ class OrderSummaryWidgetComponent {
|
|
|
322
322
|
.refetchOnChannelChange()
|
|
323
323
|
.mapStream(data => data.activeChannel.defaultCurrencyCode || undefined);
|
|
324
324
|
}
|
|
325
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
326
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
325
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
326
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: OrderSummaryWidgetComponent, isStandalone: false, selector: "vdr-order-summary-widget", ngImport: i0, template: "<div class=\"stats\">\n <div class=\"stat\">\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-figure\">\n {{ totalOrderValue$ | async | localeCurrency: (currencyCode$ | async) || undefined }}\n </div>\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\n </div>\n</div>\n<div class=\"footer\">\n <div class=\"flex\" *ngIf=\"selection$ | async as selection\">\n <button class=\"button-small\" [class.active]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\n {{ 'dashboard.today' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\n {{ 'dashboard.yesterday' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\n {{ 'dashboard.thisWeek' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\n {{ 'dashboard.thisMonth' | translate }}\n </button>\n </div>\n\n <div class=\"date-range\" *ngIf=\"dateRange$ | async as range\">\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\n </div>\n</div>\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:calc(var(--space-unit) * 3);font-size:var(--font-size-xs)}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}.button-small.active{background-color:var(--color-primary-200);color:var(--color-primary-900)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
327
327
|
}
|
|
328
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
328
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetComponent, decorators: [{
|
|
329
329
|
type: Component,
|
|
330
330
|
args: [{ selector: 'vdr-order-summary-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"stats\">\n <div class=\"stat\">\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-figure\">\n {{ totalOrderValue$ | async | localeCurrency: (currencyCode$ | async) || undefined }}\n </div>\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\n </div>\n</div>\n<div class=\"footer\">\n <div class=\"flex\" *ngIf=\"selection$ | async as selection\">\n <button class=\"button-small\" [class.active]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\n {{ 'dashboard.today' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\n {{ 'dashboard.yesterday' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\n {{ 'dashboard.thisWeek' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\n {{ 'dashboard.thisMonth' | translate }}\n </button>\n </div>\n\n <div class=\"date-range\" *ngIf=\"dateRange$ | async as range\">\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\n </div>\n</div>\n", styles: [".stats{display:flex;justify-content:space-evenly}.stat{text-align:center}.stat-figure{font-size:2rem;line-height:3rem}.stat-label{text-transform:uppercase}.date-range{margin-top:calc(var(--space-unit) * 3);font-size:var(--font-size-xs)}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}.button-small.active{background-color:var(--color-primary-200);color:var(--color-primary-900)}\n"] }]
|
|
331
331
|
}], ctorParameters: () => [{ type: i1.DataService }] });
|
|
332
332
|
class OrderSummaryWidgetModule {
|
|
333
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
334
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
335
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
333
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
334
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetModule, declarations: [OrderSummaryWidgetComponent], imports: [CoreModule] }); }
|
|
335
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetModule, imports: [CoreModule] }); }
|
|
336
336
|
}
|
|
337
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
337
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: OrderSummaryWidgetModule, decorators: [{
|
|
338
338
|
type: NgModule,
|
|
339
339
|
args: [{
|
|
340
340
|
imports: [CoreModule],
|
|
@@ -379,11 +379,11 @@ class DashboardModule {
|
|
|
379
379
|
dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
383
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
384
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
382
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardModule, deps: [{ token: i1.DashboardWidgetService }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
383
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: DashboardModule, declarations: [DashboardComponent, DashboardWidgetComponent, OrderChartWidgetComponent], imports: [SharedModule, i3$1.RouterModule] }); }
|
|
384
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardModule, imports: [SharedModule, RouterModule.forChild(dashboardRoutes)] }); }
|
|
385
385
|
}
|
|
386
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DashboardModule, decorators: [{
|
|
387
387
|
type: NgModule,
|
|
388
388
|
args: [{
|
|
389
389
|
imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],
|
|
@@ -392,19 +392,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
392
392
|
}], ctorParameters: () => [{ type: i1.DashboardWidgetService }] });
|
|
393
393
|
|
|
394
394
|
class TestWidgetComponent {
|
|
395
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
396
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
395
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
396
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: TestWidgetComponent, isStandalone: false, selector: "vdr-test-widget", ngImport: i0, template: "<p>This is a test widget!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
397
397
|
}
|
|
398
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
398
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetComponent, decorators: [{
|
|
399
399
|
type: Component,
|
|
400
400
|
args: [{ selector: 'vdr-test-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<p>This is a test widget!</p>\n" }]
|
|
401
401
|
}] });
|
|
402
402
|
class TestWidgetModule {
|
|
403
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
404
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
405
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
403
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
404
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetModule, declarations: [TestWidgetComponent] }); }
|
|
405
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetModule }); }
|
|
406
406
|
}
|
|
407
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
407
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TestWidgetModule, decorators: [{
|
|
408
408
|
type: NgModule,
|
|
409
409
|
args: [{
|
|
410
410
|
declarations: [TestWidgetComponent],
|
|
@@ -424,19 +424,19 @@ class WelcomeWidgetComponent {
|
|
|
424
424
|
.getActiveAdministrator()
|
|
425
425
|
.mapStream(data => data.activeAdministrator || null);
|
|
426
426
|
}
|
|
427
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
428
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.
|
|
427
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
428
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: WelcomeWidgetComponent, isStandalone: false, selector: "vdr-welcome-widget", ngImport: i0, template: "<div *ngIf=\"administrator$ | async as administrator\">\n <h4 class=\"\">\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\n </h4>\n\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\n </p>\n</div>\n<div class=\"placeholder\">\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\n</div>\n", styles: [":host{display:flex;justify-content:space-between}.placeholder{color:var(--color-grey-200)}\n"], dependencies: [{ kind: "directive", type: i2$1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TimeAgoPipe, name: "timeAgo" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
429
429
|
}
|
|
430
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
430
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetComponent, decorators: [{
|
|
431
431
|
type: Component,
|
|
432
432
|
args: [{ selector: 'vdr-welcome-widget', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div *ngIf=\"administrator$ | async as administrator\">\n <h4 class=\"\">\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\n </h4>\n\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\n </p>\n</div>\n<div class=\"placeholder\">\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\n</div>\n", styles: [":host{display:flex;justify-content:space-between}.placeholder{color:var(--color-grey-200)}\n"] }]
|
|
433
433
|
}], ctorParameters: () => [{ type: i1.DataService }] });
|
|
434
434
|
class WelcomeWidgetModule {
|
|
435
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
436
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
437
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.
|
|
435
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
436
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetModule, declarations: [WelcomeWidgetComponent], imports: [CoreModule] }); }
|
|
437
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetModule, imports: [CoreModule] }); }
|
|
438
438
|
}
|
|
439
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
439
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: WelcomeWidgetModule, decorators: [{
|
|
440
440
|
type: NgModule,
|
|
441
441
|
args: [{
|
|
442
442
|
imports: [CoreModule],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vendure-admin-ui-dashboard.mjs","sources":["../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.ts","../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.html","../../src/lib/dashboard/src/components/dashboard/dashboard.component.ts","../../src/lib/dashboard/src/components/dashboard/dashboard.component.html","../../src/lib/dashboard/src/dashboard.routes.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.html","../../src/lib/dashboard/src/widgets/order-chart-widget/order-chart-widget.component.ts","../../src/lib/dashboard/src/widgets/order-chart-widget/order-chart-widget.component.html","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.ts","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.html","../../src/lib/dashboard/src/default-widgets.ts","../../src/lib/dashboard/src/dashboard.module.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.html","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.ts","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.html","../../src/lib/dashboard/src/public_api.ts","../../src/lib/dashboard/src/vendure-admin-ui-dashboard.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DashboardWidgetConfig } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-dashboard-widget',\n templateUrl: './dashboard-widget.component.html',\n styleUrls: ['./dashboard-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DashboardWidgetComponent implements AfterViewInit, OnDestroy {\n @Input() widgetConfig: DashboardWidgetConfig;\n\n @ViewChild('portal', { read: ViewContainerRef })\n private portal: ViewContainerRef;\n\n private componentRef: ComponentRef<any>;\n\n ngAfterViewInit(): void {\n this.loadWidget();\n }\n\n private async loadWidget() {\n const loadComponentResult = this.widgetConfig.loadComponent();\n const componentType =\n loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;\n this.componentRef = this.portal.createComponent(componentType);\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","<vdr-card [title]=\"widgetConfig.title ?? '' | translate\">\n <ng-template vdrCardControls>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #portal></ng-template>\n</vdr-card>\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport {\n DashboardWidgetConfig,\n DashboardWidgetService,\n DashboardWidgetWidth,\n DataService,\n LocalStorageService,\n titleSetter,\n WidgetLayout,\n WidgetLayoutDefinition,\n} from '@vendure/admin-ui/core';\nimport { assertNever } from '@vendure/common/lib/shared-utils';\nimport { Observable } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'vdr-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DashboardComponent implements OnInit {\n widgetLayout: WidgetLayout | undefined;\n availableWidgets$: Observable<Array<{ id: string; config: DashboardWidgetConfig }>>;\n private readonly deletionMarker = '__delete__';\n private setTitle = titleSetter();\n constructor(\n private dashboardWidgetService: DashboardWidgetService,\n private localStorageService: LocalStorageService,\n private changedDetectorRef: ChangeDetectorRef,\n private dataService: DataService,\n ) {}\n\n ngOnInit() {\n this.availableWidgets$ = this.dataService.client.userStatus().stream$.pipe(\n map(({ userStatus }) => userStatus.permissions),\n map(permissions => this.dashboardWidgetService.getAvailableWidgets(permissions)),\n tap(widgets => (this.widgetLayout = this.initLayout(widgets.map(w => w.id)))),\n );\n this.setTitle('breadcrumb.dashboard');\n }\n\n getClassForWidth(width: DashboardWidgetWidth): string {\n switch (width) {\n case 3:\n return `clr-col-12 clr-col-sm-6 clr-col-lg-3`;\n case 4:\n return `clr-col-12 clr-col-sm-6 clr-col-lg-4`;\n case 6:\n return `clr-col-12 clr-col-lg-6`;\n case 8:\n return `clr-col-12 clr-col-lg-8`;\n case 12:\n return `clr-col-12`;\n default:\n assertNever(width);\n }\n }\n\n getSupportedWidths(config: DashboardWidgetConfig): DashboardWidgetWidth[] {\n return config.supportedWidths || [3, 4, 6, 8, 12];\n }\n\n setWidgetWidth(widget: WidgetLayout[number][number], width: DashboardWidgetWidth) {\n widget.width = width;\n this.recalculateLayout();\n }\n\n trackRow(index: number, row: WidgetLayout[number]) {\n const id = row.map(item => `${item.id}:${item.width}`).join('|');\n return id;\n }\n\n trackRowItem(index: number, item: WidgetLayout[number][number]) {\n return item.config;\n }\n\n addWidget(id: string) {\n const config = this.dashboardWidgetService.getWidgetById(id);\n if (config) {\n const width = this.getSupportedWidths(config)[0];\n const widget: WidgetLayout[number][number] = {\n id,\n config,\n width,\n };\n let targetRow: WidgetLayout[number];\n if (this.widgetLayout && this.widgetLayout.length) {\n targetRow = this.widgetLayout[this.widgetLayout.length - 1];\n } else {\n targetRow = [];\n this.widgetLayout?.push(targetRow);\n }\n targetRow.push(widget);\n this.recalculateLayout();\n }\n }\n\n removeWidget(widget: WidgetLayout[number][number]) {\n widget.id = this.deletionMarker;\n this.recalculateLayout();\n }\n\n drop(event: CdkDragDrop<{ index: number }>) {\n const { currentIndex, previousIndex, previousContainer, container } = event;\n if (previousIndex === currentIndex && previousContainer.data.index === container.data.index) {\n // Nothing changed\n return;\n }\n if (this.widgetLayout) {\n const previousLayoutRow = this.widgetLayout[previousContainer.data.index];\n const newLayoutRow = this.widgetLayout[container.data.index];\n\n previousLayoutRow.splice(previousIndex, 1);\n newLayoutRow.splice(currentIndex, 0, event.item.data);\n this.recalculateLayout();\n }\n }\n\n private initLayout(availableIds: string[]): WidgetLayout {\n const savedLayoutDef = this.localStorageService.get('dashboardWidgetLayout');\n let layoutDef: WidgetLayoutDefinition | undefined;\n if (savedLayoutDef) {\n // validate all the IDs from the saved layout are still available\n layoutDef = savedLayoutDef.filter(item => availableIds.includes(item.id));\n }\n return this.dashboardWidgetService.getWidgetLayout(layoutDef);\n }\n\n private recalculateLayout() {\n if (this.widgetLayout) {\n const flattened = this.widgetLayout\n .reduce((flat, row) => [...flat, ...row], [])\n .filter(item => item.id !== this.deletionMarker);\n const newLayoutDef: WidgetLayoutDefinition = flattened.map(item => ({\n id: item.id,\n width: item.width,\n }));\n this.widgetLayout = this.dashboardWidgetService.getWidgetLayout(newLayoutDef);\n this.localStorageService.set('dashboardWidgetLayout', newLayoutDef);\n setTimeout(() => this.changedDetectorRef.markForCheck());\n }\n }\n}\n","<vdr-page-block>\n <div class=\"widget-header mb-1\">\n <vdr-dropdown>\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'dashboard.add-widget' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <button\n vdrDropdownItem\n *ngFor=\"let widget of availableWidgets$ | async\"\n (click)=\"addWidget(widget.id)\"\n >\n {{ (widget.config.title ?? widget.id) | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n <div cdkDropListGroup>\n <div\n class=\"clr-row dashboard-row\"\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"{ index: rowIndex }\"\n >\n <div\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\n class=\"dashboard-item\"\n [ngClass]=\"getClassForWidth(widget.width)\"\n cdkDrag\n [cdkDragData]=\"widget\"\n >\n <vdr-dashboard-widget\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\n [widgetConfig]=\"widget.config\"\n >\n <div class=\"flex\">\n <div class=\"drag-handle\" cdkDragHandle>\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\n </div>\n <vdr-dropdown>\n <button class=\"icon-button\" vdrDropdownTrigger>\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\n <button\n vdrDropdownItem\n [disabled]=\"width === widget.width\"\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\n (click)=\"setWidgetWidth(widget, width)\"\n >\n {{ 'dashboard.widget-width' | translate : { width: width } }}\n </button>\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n <button vdrDropdownItem (click)=\"removeWidget(widget)\">\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'dashboard.remove-widget' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-dashboard-widget>\n </div>\n </div>\n </div>\n</vdr-page-block>\n","import { Routes } from '@angular/router';\n\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\n\nexport const dashboardRoutes: Routes = [\n {\n path: '',\n component: DashboardComponent,\n pathMatch: 'full',\n },\n];\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport {\n CoreModule,\n DataService,\n GetLatestOrdersDocument,\n GetLatestOrdersQuery,\n GetOrderListQuery,\n ItemOf,\n SharedModule,\n SortOrder,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\n\nconst GET_LATEST_ORDERS = gql`\n query GetLatestOrders($options: OrderListOptions) {\n orders(options: $options) {\n items {\n id\n createdAt\n updatedAt\n type\n orderPlacedAt\n code\n state\n total\n totalWithTax\n currencyCode\n customer {\n id\n firstName\n lastName\n }\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-latest-orders-widget',\n templateUrl: './latest-orders-widget.component.html',\n styleUrls: ['./latest-orders-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LatestOrdersWidgetComponent implements OnInit {\n latestOrders$: Observable<Array<ItemOf<GetLatestOrdersQuery, 'orders'>>>;\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.latestOrders$ = this.dataService\n .query(GetLatestOrdersDocument, {\n options: {\n take: 10,\n filter: {\n active: { eq: false },\n state: { notIn: ['Cancelled', 'Draft'] },\n },\n sort: {\n orderPlacedAt: SortOrder.DESC,\n },\n },\n })\n .refetchOnChannelChange()\n .mapStream(data => data.orders.items);\n }\n}\n\n@NgModule({\n imports: [CoreModule, SharedModule],\n declarations: [LatestOrdersWidgetComponent],\n})\nexport class LatestOrdersWidgetModule {}\n","<vdr-data-table-2 [items]=\"latestOrders$ | async\" id=\"latest-orders-widget-list\">\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n <ng-template let-order=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/orders/', order.id]\"\n ><span>{{ order.code }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.state' | translate\" id=\"state\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.customer' | translate\" id=\"customer\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.total' | translate\" id=\"total\">\n <ng-template let-order=\"item\">\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" id=\"placed-at\">\n <ng-template let-order=\"item\">\n {{ order.orderPlacedAt | timeAgo }}\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport {\n ChartEntry,\n ChartFormatOptions,\n DataService,\n GetOrderChartDataDocument,\n MetricType,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { BehaviorSubject, combineLatest, Observable, Subject, switchMap } from 'rxjs';\nimport { distinctUntilChanged, map, startWith } from 'rxjs/operators';\n\nexport const GET_ORDER_CHART_DATA = gql`\n query GetOrderChartData($refresh: Boolean, $types: [MetricType!]!) {\n metricSummary(input: { interval: Daily, types: $types, refresh: $refresh }) {\n interval\n type\n entries {\n label\n value\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-order-chart-widget',\n templateUrl: './order-chart-widget.component.html',\n styleUrls: ['./order-chart-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class OrderChartWidgetComponent implements OnInit {\n constructor(private dataService: DataService) {}\n metrics$: Observable<ChartEntry[]>;\n refresh$ = new Subject<boolean>();\n metricType$ = new BehaviorSubject(MetricType.OrderTotal);\n MetricType = MetricType;\n\n ngOnInit() {\n const currencyCode$ = this.dataService.settings\n .getActiveChannel()\n .refetchOnChannelChange()\n .mapStream(data => data.activeChannel.defaultCurrencyCode || undefined);\n const uiState$ = this.dataService.client.uiState().mapStream(data => data.uiState);\n const metricType$ = this.metricType$.pipe(distinctUntilChanged());\n this.metrics$ = combineLatest(metricType$, currencyCode$, uiState$).pipe(\n switchMap(([metricType, currencyCode, uiState]) =>\n this.refresh$.pipe(\n startWith(false),\n switchMap(refresh =>\n this.dataService\n .query(GetOrderChartDataDocument, {\n types: [metricType],\n refresh,\n })\n .mapSingle(data => data.metricSummary)\n .pipe(\n map(metrics => {\n const formatValueAs: 'currency' | 'number' =\n metricType === MetricType.OrderCount ? 'number' : 'currency';\n const locale = `${uiState.language}-${uiState.locale}`;\n\n const formatOptions: ChartFormatOptions = {\n formatValueAs,\n currencyCode,\n locale,\n };\n return (\n metrics\n .find(m => m.type === metricType)\n ?.entries.map(entry => ({ ...entry, formatOptions })) ?? []\n );\n }),\n ),\n ),\n ),\n ),\n );\n }\n\n refresh() {\n this.refresh$.next(true);\n }\n}\n","<vdr-chart [entries]=\"metrics$ | async\" />\n<div class=\"flex\" *ngIf=\"metricType$ | async as activeMetricType\">\n <button\n class=\"button-small\"\n (click)=\"metricType$.next(MetricType.OrderTotal)\"\n [class.active]=\"activeMetricType === MetricType.OrderTotal\"\n >\n {{ 'dashboard.metric-order-total-value' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.OrderCount)\"\n [class.active]=\"activeMetricType === MetricType.OrderCount\"\n >\n {{ 'dashboard.metric-number-of-orders' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.AverageOrderValue)\"\n [class.active]=\"activeMetricType === MetricType.AverageOrderValue\"\n >\n {{ 'dashboard.metric-average-order-value' | translate }}\n </button>\n <div class=\"flex-spacer\"></div>\n <button class=\"button-small\" (click)=\"refresh()\">\n <clr-icon shape=\"refresh\"></clr-icon>\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport { CoreModule, DataService, GetOrderSummaryDocument } from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport dayjs from 'dayjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\n\nexport type Timeframe = 'day' | 'week' | 'month';\n\nexport const GET_ORDER_SUMMARY = gql`\n query GetOrderSummary($start: DateTime!, $end: DateTime!) {\n orders(options: { filter: { orderPlacedAt: { between: { start: $start, end: $end } } } }) {\n totalItems\n items {\n id\n totalWithTax\n currencyCode\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-order-summary-widget',\n templateUrl: './order-summary-widget.component.html',\n styleUrls: ['./order-summary-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class OrderSummaryWidgetComponent implements OnInit {\n today = new Date();\n yesterday = new Date(new Date().setDate(this.today.getDate() - 1));\n totalOrderCount$: Observable<number>;\n totalOrderValue$: Observable<number>;\n currencyCode$: Observable<string | undefined>;\n selection$ = new BehaviorSubject<{ timeframe: Timeframe; date?: Date }>({\n timeframe: 'day',\n date: this.today,\n });\n dateRange$: Observable<{ start: Date; end: Date }>;\n\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.dateRange$ = this.selection$.pipe(\n distinctUntilChanged(),\n map(selection => ({\n start: dayjs(selection.date).startOf(selection.timeframe).toDate(),\n end: dayjs(selection.date).endOf(selection.timeframe).toDate(),\n })),\n shareReplay(1),\n );\n const orderSummary$ = this.dateRange$.pipe(\n switchMap(({ start, end }) =>\n this.dataService\n .query(GetOrderSummaryDocument, { start: start.toISOString(), end: end.toISOString() })\n .refetchOnChannelChange()\n .mapStream(data => data.orders),\n ),\n shareReplay(1),\n );\n this.totalOrderCount$ = orderSummary$.pipe(map(res => res.totalItems));\n this.totalOrderValue$ = orderSummary$.pipe(\n map(res => res.items.reduce((total, order) => total + order.totalWithTax, 0)),\n );\n this.currencyCode$ = this.dataService.settings\n .getActiveChannel()\n .refetchOnChannelChange()\n .mapStream(data => data.activeChannel.defaultCurrencyCode || undefined);\n }\n}\n\n@NgModule({\n imports: [CoreModule],\n declarations: [OrderSummaryWidgetComponent],\n})\nexport class OrderSummaryWidgetModule {}\n","<div class=\"stats\">\n <div class=\"stat\">\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-figure\">\n {{ totalOrderValue$ | async | localeCurrency: (currencyCode$ | async) || undefined }}\n </div>\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\n </div>\n</div>\n<div class=\"footer\">\n <div class=\"flex\" *ngIf=\"selection$ | async as selection\">\n <button class=\"button-small\" [class.active]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\n {{ 'dashboard.today' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\n {{ 'dashboard.yesterday' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\n {{ 'dashboard.thisWeek' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\n {{ 'dashboard.thisMonth' | translate }}\n </button>\n </div>\n\n <div class=\"date-range\" *ngIf=\"dateRange$ | async as range\">\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\n </div>\n</div>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { DashboardWidgetConfig, Permission, WidgetLayoutDefinition } from '@vendure/admin-ui/core';\n\nimport { LatestOrdersWidgetComponent } from './widgets/latest-orders-widget/latest-orders-widget.component';\nimport { OrderChartWidgetComponent } from './widgets/order-chart-widget/order-chart-widget.component';\nimport { OrderSummaryWidgetComponent } from './widgets/order-summary-widget/order-summary-widget.component';\n\nexport const DEFAULT_DASHBOARD_WIDGET_LAYOUT: WidgetLayoutDefinition = [\n { id: 'metrics', width: 12 },\n { id: 'orderSummary', width: 6 },\n { id: 'latestOrders', width: 6 },\n];\n\nexport const DEFAULT_WIDGETS: { [id: string]: DashboardWidgetConfig } = {\n metrics: {\n title: _('dashboard.metrics'),\n supportedWidths: [6, 8, 12],\n loadComponent: () => OrderChartWidgetComponent,\n requiresPermissions: [Permission.ReadOrder],\n },\n orderSummary: {\n title: _('dashboard.orders-summary'),\n loadComponent: () => OrderSummaryWidgetComponent,\n supportedWidths: [4, 6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n latestOrders: {\n title: _('dashboard.latest-orders'),\n loadComponent: () => LatestOrdersWidgetComponent,\n supportedWidths: [6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n};\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DashboardWidgetService, SharedModule } from '@vendure/admin-ui/core';\n\nimport { DashboardWidgetComponent } from './components/dashboard-widget/dashboard-widget.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { dashboardRoutes } from './dashboard.routes';\nimport { DEFAULT_DASHBOARD_WIDGET_LAYOUT, DEFAULT_WIDGETS } from './default-widgets';\nimport { OrderChartWidgetComponent } from './widgets/order-chart-widget/order-chart-widget.component';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],\n declarations: [DashboardComponent, DashboardWidgetComponent, OrderChartWidgetComponent],\n})\nexport class DashboardModule {\n constructor(dashboardWidgetService: DashboardWidgetService) {\n Object.entries(DEFAULT_WIDGETS).map(([id, config]) => {\n if (!dashboardWidgetService.getWidgetById(id)) {\n dashboardWidgetService.registerWidget(id, config);\n }\n });\n if (dashboardWidgetService.getDefaultLayout().length === 0) {\n dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\n\n@Component({\n selector: 'vdr-test-widget',\n templateUrl: './test-widget.component.html',\n styleUrls: ['./test-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TestWidgetComponent {}\n\n@NgModule({\n declarations: [TestWidgetComponent],\n})\nexport class TestWidgetModule {}\n","<p>This is a test widget!</p>\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport {\n ADMIN_UI_VERSION,\n CoreModule,\n DataService,\n GetActiveAdministratorQuery,\n getAppConfig,\n} from '@vendure/admin-ui/core';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'vdr-welcome-widget',\n templateUrl: './welcome-widget.component.html',\n styleUrls: ['./welcome-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class WelcomeWidgetComponent implements OnInit {\n version = ADMIN_UI_VERSION;\n administrator$: Observable<GetActiveAdministratorQuery['activeAdministrator']>;\n brand = getAppConfig().brand;\n hideVendureBranding = getAppConfig().hideVendureBranding;\n hideVersion = getAppConfig().hideVersion;\n\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.administrator$ = this.dataService.administrator\n .getActiveAdministrator()\n .mapStream(data => data.activeAdministrator || null);\n }\n}\n\n@NgModule({\n imports: [CoreModule],\n declarations: [WelcomeWidgetComponent],\n})\nexport class WelcomeWidgetModule {}\n","<div *ngIf=\"administrator$ | async as administrator\">\n <h4 class=\"\">\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\n </h4>\n\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\n </p>\n</div>\n<div class=\"placeholder\">\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\n</div>\n","// This file was generated by the build-public-api.ts script\nexport * from './components/dashboard/dashboard.component';\nexport * from './components/dashboard-widget/dashboard-widget.component';\nexport * from './dashboard.module';\nexport * from './dashboard.routes';\nexport * from './default-widgets';\nexport * from './widgets/latest-orders-widget/latest-orders-widget.component';\nexport * from './widgets/order-chart-widget/order-chart-widget.component';\nexport * from './widgets/order-summary-widget/order-summary-widget.component';\nexport * from './widgets/test-widget/test-widget.component';\nexport * from './widgets/welcome-widget/welcome-widget.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i5.DashboardWidgetComponent","i6","i3","i4","i5","switchMap","_"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vendure-admin-ui-dashboard.mjs","sources":["../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.ts","../../src/lib/dashboard/src/components/dashboard-widget/dashboard-widget.component.html","../../src/lib/dashboard/src/components/dashboard/dashboard.component.ts","../../src/lib/dashboard/src/components/dashboard/dashboard.component.html","../../src/lib/dashboard/src/dashboard.routes.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.ts","../../src/lib/dashboard/src/widgets/latest-orders-widget/latest-orders-widget.component.html","../../src/lib/dashboard/src/widgets/order-chart-widget/order-chart-widget.component.ts","../../src/lib/dashboard/src/widgets/order-chart-widget/order-chart-widget.component.html","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.ts","../../src/lib/dashboard/src/widgets/order-summary-widget/order-summary-widget.component.html","../../src/lib/dashboard/src/default-widgets.ts","../../src/lib/dashboard/src/dashboard.module.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.ts","../../src/lib/dashboard/src/widgets/test-widget/test-widget.component.html","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.ts","../../src/lib/dashboard/src/widgets/welcome-widget/welcome-widget.component.html","../../src/lib/dashboard/src/public_api.ts","../../src/lib/dashboard/src/vendure-admin-ui-dashboard.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { DashboardWidgetConfig } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-dashboard-widget',\n templateUrl: './dashboard-widget.component.html',\n styleUrls: ['./dashboard-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DashboardWidgetComponent implements AfterViewInit, OnDestroy {\n @Input() widgetConfig: DashboardWidgetConfig;\n\n @ViewChild('portal', { read: ViewContainerRef })\n private portal: ViewContainerRef;\n\n private componentRef: ComponentRef<any>;\n\n ngAfterViewInit(): void {\n this.loadWidget();\n }\n\n private async loadWidget() {\n const loadComponentResult = this.widgetConfig.loadComponent();\n const componentType =\n loadComponentResult instanceof Promise ? await loadComponentResult : loadComponentResult;\n this.componentRef = this.portal.createComponent(componentType);\n this.componentRef.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy() {\n if (this.componentRef) {\n this.componentRef.destroy();\n }\n }\n}\n","<vdr-card [title]=\"widgetConfig.title ?? '' | translate\">\n <ng-template vdrCardControls>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #portal></ng-template>\n</vdr-card>\n","import { CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport {\n DashboardWidgetConfig,\n DashboardWidgetService,\n DashboardWidgetWidth,\n DataService,\n LocalStorageService,\n titleSetter,\n WidgetLayout,\n WidgetLayoutDefinition,\n} from '@vendure/admin-ui/core';\nimport { assertNever } from '@vendure/common/lib/shared-utils';\nimport { Observable } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'vdr-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class DashboardComponent implements OnInit {\n widgetLayout: WidgetLayout | undefined;\n availableWidgets$: Observable<Array<{ id: string; config: DashboardWidgetConfig }>>;\n private readonly deletionMarker = '__delete__';\n private setTitle = titleSetter();\n constructor(\n private dashboardWidgetService: DashboardWidgetService,\n private localStorageService: LocalStorageService,\n private changedDetectorRef: ChangeDetectorRef,\n private dataService: DataService,\n ) {}\n\n ngOnInit() {\n this.availableWidgets$ = this.dataService.client.userStatus().stream$.pipe(\n map(({ userStatus }) => userStatus.permissions),\n map(permissions => this.dashboardWidgetService.getAvailableWidgets(permissions)),\n tap(widgets => (this.widgetLayout = this.initLayout(widgets.map(w => w.id)))),\n );\n this.setTitle('breadcrumb.dashboard');\n }\n\n getClassForWidth(width: DashboardWidgetWidth): string {\n switch (width) {\n case 3:\n return `clr-col-12 clr-col-sm-6 clr-col-lg-3`;\n case 4:\n return `clr-col-12 clr-col-sm-6 clr-col-lg-4`;\n case 6:\n return `clr-col-12 clr-col-lg-6`;\n case 8:\n return `clr-col-12 clr-col-lg-8`;\n case 12:\n return `clr-col-12`;\n default:\n assertNever(width);\n }\n }\n\n getSupportedWidths(config: DashboardWidgetConfig): DashboardWidgetWidth[] {\n return config.supportedWidths || [3, 4, 6, 8, 12];\n }\n\n setWidgetWidth(widget: WidgetLayout[number][number], width: DashboardWidgetWidth) {\n widget.width = width;\n this.recalculateLayout();\n }\n\n trackRow(index: number, row: WidgetLayout[number]) {\n const id = row.map(item => `${item.id}:${item.width}`).join('|');\n return id;\n }\n\n trackRowItem(index: number, item: WidgetLayout[number][number]) {\n return item.config;\n }\n\n addWidget(id: string) {\n const config = this.dashboardWidgetService.getWidgetById(id);\n if (config) {\n const width = this.getSupportedWidths(config)[0];\n const widget: WidgetLayout[number][number] = {\n id,\n config,\n width,\n };\n let targetRow: WidgetLayout[number];\n if (this.widgetLayout && this.widgetLayout.length) {\n targetRow = this.widgetLayout[this.widgetLayout.length - 1];\n } else {\n targetRow = [];\n this.widgetLayout?.push(targetRow);\n }\n targetRow.push(widget);\n this.recalculateLayout();\n }\n }\n\n removeWidget(widget: WidgetLayout[number][number]) {\n widget.id = this.deletionMarker;\n this.recalculateLayout();\n }\n\n drop(event: CdkDragDrop<{ index: number }>) {\n const { currentIndex, previousIndex, previousContainer, container } = event;\n if (previousIndex === currentIndex && previousContainer.data.index === container.data.index) {\n // Nothing changed\n return;\n }\n if (this.widgetLayout) {\n const previousLayoutRow = this.widgetLayout[previousContainer.data.index];\n const newLayoutRow = this.widgetLayout[container.data.index];\n\n previousLayoutRow.splice(previousIndex, 1);\n newLayoutRow.splice(currentIndex, 0, event.item.data);\n this.recalculateLayout();\n }\n }\n\n private initLayout(availableIds: string[]): WidgetLayout {\n const savedLayoutDef = this.localStorageService.get('dashboardWidgetLayout');\n let layoutDef: WidgetLayoutDefinition | undefined;\n if (savedLayoutDef) {\n // validate all the IDs from the saved layout are still available\n layoutDef = savedLayoutDef.filter(item => availableIds.includes(item.id));\n }\n return this.dashboardWidgetService.getWidgetLayout(layoutDef);\n }\n\n private recalculateLayout() {\n if (this.widgetLayout) {\n const flattened = this.widgetLayout\n .reduce((flat, row) => [...flat, ...row], [])\n .filter(item => item.id !== this.deletionMarker);\n const newLayoutDef: WidgetLayoutDefinition = flattened.map(item => ({\n id: item.id,\n width: item.width,\n }));\n this.widgetLayout = this.dashboardWidgetService.getWidgetLayout(newLayoutDef);\n this.localStorageService.set('dashboardWidgetLayout', newLayoutDef);\n setTimeout(() => this.changedDetectorRef.markForCheck());\n }\n }\n}\n","<vdr-page-block>\n <div class=\"widget-header mb-1\">\n <vdr-dropdown>\n <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'dashboard.add-widget' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <button\n vdrDropdownItem\n *ngFor=\"let widget of availableWidgets$ | async\"\n (click)=\"addWidget(widget.id)\"\n >\n {{ (widget.config.title ?? widget.id) | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n <div cdkDropListGroup>\n <div\n class=\"clr-row dashboard-row\"\n *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"{ index: rowIndex }\"\n >\n <div\n *ngFor=\"let widget of row; trackBy: trackRowItem\"\n class=\"dashboard-item\"\n [ngClass]=\"getClassForWidth(widget.width)\"\n cdkDrag\n [cdkDragData]=\"widget\"\n >\n <vdr-dashboard-widget\n *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\n [widgetConfig]=\"widget.config\"\n >\n <div class=\"flex\">\n <div class=\"drag-handle\" cdkDragHandle>\n <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\n </div>\n <vdr-dropdown>\n <button class=\"icon-button\" vdrDropdownTrigger>\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\n <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\n <button\n vdrDropdownItem\n [disabled]=\"width === widget.width\"\n *ngFor=\"let width of getSupportedWidths(widget.config)\"\n (click)=\"setWidgetWidth(widget, width)\"\n >\n {{ 'dashboard.widget-width' | translate : { width: width } }}\n </button>\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n <button vdrDropdownItem (click)=\"removeWidget(widget)\">\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\n {{ 'dashboard.remove-widget' | translate }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </vdr-dashboard-widget>\n </div>\n </div>\n </div>\n</vdr-page-block>\n","import { Routes } from '@angular/router';\n\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\n\nexport const dashboardRoutes: Routes = [\n {\n path: '',\n component: DashboardComponent,\n pathMatch: 'full',\n },\n];\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport {\n CoreModule,\n DataService,\n GetLatestOrdersDocument,\n GetLatestOrdersQuery,\n GetOrderListQuery,\n ItemOf,\n SharedModule,\n SortOrder,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { Observable } from 'rxjs';\n\nconst GET_LATEST_ORDERS = gql`\n query GetLatestOrders($options: OrderListOptions) {\n orders(options: $options) {\n items {\n id\n createdAt\n updatedAt\n type\n orderPlacedAt\n code\n state\n total\n totalWithTax\n currencyCode\n customer {\n id\n firstName\n lastName\n }\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-latest-orders-widget',\n templateUrl: './latest-orders-widget.component.html',\n styleUrls: ['./latest-orders-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class LatestOrdersWidgetComponent implements OnInit {\n latestOrders$: Observable<Array<ItemOf<GetLatestOrdersQuery, 'orders'>>>;\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.latestOrders$ = this.dataService\n .query(GetLatestOrdersDocument, {\n options: {\n take: 10,\n filter: {\n active: { eq: false },\n state: { notIn: ['Cancelled', 'Draft'] },\n },\n sort: {\n orderPlacedAt: SortOrder.DESC,\n },\n },\n })\n .refetchOnChannelChange()\n .mapStream(data => data.orders.items);\n }\n}\n\n@NgModule({\n imports: [CoreModule, SharedModule],\n declarations: [LatestOrdersWidgetComponent],\n})\nexport class LatestOrdersWidgetModule {}\n","<vdr-data-table-2 [items]=\"latestOrders$ | async\" id=\"latest-orders-widget-list\">\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\n <ng-template let-order=\"item\">\n <a class=\"button-ghost\" [routerLink]=\"['/orders/', order.id]\"\n ><span>{{ order.code }}</span>\n <clr-icon shape=\"arrow right\"></clr-icon>\n </a>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.state' | translate\" id=\"state\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'customer.customer' | translate\" id=\"customer\" [hiddenByDefault]=\"true\">\n <ng-template let-order=\"item\">\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.total' | translate\" id=\"total\">\n <ng-template let-order=\"item\">\n {{ order.totalWithTax | localeCurrency : order.currencyCode }}\n </ng-template>\n </vdr-dt2-column>\n <vdr-dt2-column [heading]=\"'order.placed-at' | translate\" id=\"placed-at\">\n <ng-template let-order=\"item\">\n {{ order.orderPlacedAt | timeAgo }}\n </ng-template>\n </vdr-dt2-column>\n</vdr-data-table-2>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport {\n ChartEntry,\n ChartFormatOptions,\n DataService,\n GetOrderChartDataDocument,\n MetricType,\n} from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport { BehaviorSubject, combineLatest, Observable, Subject, switchMap } from 'rxjs';\nimport { distinctUntilChanged, map, startWith } from 'rxjs/operators';\n\nexport const GET_ORDER_CHART_DATA = gql`\n query GetOrderChartData($refresh: Boolean, $types: [MetricType!]!) {\n metricSummary(input: { interval: Daily, types: $types, refresh: $refresh }) {\n interval\n type\n entries {\n label\n value\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-order-chart-widget',\n templateUrl: './order-chart-widget.component.html',\n styleUrls: ['./order-chart-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class OrderChartWidgetComponent implements OnInit {\n constructor(private dataService: DataService) {}\n metrics$: Observable<ChartEntry[]>;\n refresh$ = new Subject<boolean>();\n metricType$ = new BehaviorSubject(MetricType.OrderTotal);\n MetricType = MetricType;\n\n ngOnInit() {\n const currencyCode$ = this.dataService.settings\n .getActiveChannel()\n .refetchOnChannelChange()\n .mapStream(data => data.activeChannel.defaultCurrencyCode || undefined);\n const uiState$ = this.dataService.client.uiState().mapStream(data => data.uiState);\n const metricType$ = this.metricType$.pipe(distinctUntilChanged());\n this.metrics$ = combineLatest(metricType$, currencyCode$, uiState$).pipe(\n switchMap(([metricType, currencyCode, uiState]) =>\n this.refresh$.pipe(\n startWith(false),\n switchMap(refresh =>\n this.dataService\n .query(GetOrderChartDataDocument, {\n types: [metricType],\n refresh,\n })\n .mapSingle(data => data.metricSummary)\n .pipe(\n map(metrics => {\n const formatValueAs: 'currency' | 'number' =\n metricType === MetricType.OrderCount ? 'number' : 'currency';\n const locale = `${uiState.language}-${uiState.locale}`;\n\n const formatOptions: ChartFormatOptions = {\n formatValueAs,\n currencyCode,\n locale,\n };\n return (\n metrics\n .find(m => m.type === metricType)\n ?.entries.map(entry => ({ ...entry, formatOptions })) ?? []\n );\n }),\n ),\n ),\n ),\n ),\n );\n }\n\n refresh() {\n this.refresh$.next(true);\n }\n}\n","<vdr-chart [entries]=\"metrics$ | async\" />\n<div class=\"flex\" *ngIf=\"metricType$ | async as activeMetricType\">\n <button\n class=\"button-small\"\n (click)=\"metricType$.next(MetricType.OrderTotal)\"\n [class.active]=\"activeMetricType === MetricType.OrderTotal\"\n >\n {{ 'dashboard.metric-order-total-value' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.OrderCount)\"\n [class.active]=\"activeMetricType === MetricType.OrderCount\"\n >\n {{ 'dashboard.metric-number-of-orders' | translate }}\n </button>\n <button\n class=\"ml-1 button-small\"\n (click)=\"metricType$.next(MetricType.AverageOrderValue)\"\n [class.active]=\"activeMetricType === MetricType.AverageOrderValue\"\n >\n {{ 'dashboard.metric-average-order-value' | translate }}\n </button>\n <div class=\"flex-spacer\"></div>\n <button class=\"button-small\" (click)=\"refresh()\">\n <clr-icon shape=\"refresh\"></clr-icon>\n </button>\n</div>\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport { CoreModule, DataService, GetOrderSummaryDocument } from '@vendure/admin-ui/core';\nimport { gql } from 'apollo-angular';\nimport dayjs from 'dayjs';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\n\nexport type Timeframe = 'day' | 'week' | 'month';\n\nexport const GET_ORDER_SUMMARY = gql`\n query GetOrderSummary($start: DateTime!, $end: DateTime!) {\n orders(options: { filter: { orderPlacedAt: { between: { start: $start, end: $end } } } }) {\n totalItems\n items {\n id\n totalWithTax\n currencyCode\n }\n }\n }\n`;\n\n@Component({\n selector: 'vdr-order-summary-widget',\n templateUrl: './order-summary-widget.component.html',\n styleUrls: ['./order-summary-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class OrderSummaryWidgetComponent implements OnInit {\n today = new Date();\n yesterday = new Date(new Date().setDate(this.today.getDate() - 1));\n totalOrderCount$: Observable<number>;\n totalOrderValue$: Observable<number>;\n currencyCode$: Observable<string | undefined>;\n selection$ = new BehaviorSubject<{ timeframe: Timeframe; date?: Date }>({\n timeframe: 'day',\n date: this.today,\n });\n dateRange$: Observable<{ start: Date; end: Date }>;\n\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.dateRange$ = this.selection$.pipe(\n distinctUntilChanged(),\n map(selection => ({\n start: dayjs(selection.date).startOf(selection.timeframe).toDate(),\n end: dayjs(selection.date).endOf(selection.timeframe).toDate(),\n })),\n shareReplay(1),\n );\n const orderSummary$ = this.dateRange$.pipe(\n switchMap(({ start, end }) =>\n this.dataService\n .query(GetOrderSummaryDocument, { start: start.toISOString(), end: end.toISOString() })\n .refetchOnChannelChange()\n .mapStream(data => data.orders),\n ),\n shareReplay(1),\n );\n this.totalOrderCount$ = orderSummary$.pipe(map(res => res.totalItems));\n this.totalOrderValue$ = orderSummary$.pipe(\n map(res => res.items.reduce((total, order) => total + order.totalWithTax, 0)),\n );\n this.currencyCode$ = this.dataService.settings\n .getActiveChannel()\n .refetchOnChannelChange()\n .mapStream(data => data.activeChannel.defaultCurrencyCode || undefined);\n }\n}\n\n@NgModule({\n imports: [CoreModule],\n declarations: [OrderSummaryWidgetComponent],\n})\nexport class OrderSummaryWidgetModule {}\n","<div class=\"stats\">\n <div class=\"stat\">\n <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\n <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-figure\">\n {{ totalOrderValue$ | async | localeCurrency: (currencyCode$ | async) || undefined }}\n </div>\n <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\n </div>\n</div>\n<div class=\"footer\">\n <div class=\"flex\" *ngIf=\"selection$ | async as selection\">\n <button class=\"button-small\" [class.active]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\n {{ 'dashboard.today' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\n {{ 'dashboard.yesterday' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\n {{ 'dashboard.thisWeek' | translate }}\n </button>\n <button class=\"ml-1 button-small\" [class.active]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\n {{ 'dashboard.thisMonth' | translate }}\n </button>\n </div>\n\n <div class=\"date-range\" *ngIf=\"dateRange$ | async as range\">\n {{ range.start | localeDate }} - {{ range.end | localeDate }}\n </div>\n</div>\n","import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { DashboardWidgetConfig, Permission, WidgetLayoutDefinition } from '@vendure/admin-ui/core';\n\nimport { LatestOrdersWidgetComponent } from './widgets/latest-orders-widget/latest-orders-widget.component';\nimport { OrderChartWidgetComponent } from './widgets/order-chart-widget/order-chart-widget.component';\nimport { OrderSummaryWidgetComponent } from './widgets/order-summary-widget/order-summary-widget.component';\n\nexport const DEFAULT_DASHBOARD_WIDGET_LAYOUT: WidgetLayoutDefinition = [\n { id: 'metrics', width: 12 },\n { id: 'orderSummary', width: 6 },\n { id: 'latestOrders', width: 6 },\n];\n\nexport const DEFAULT_WIDGETS: { [id: string]: DashboardWidgetConfig } = {\n metrics: {\n title: _('dashboard.metrics'),\n supportedWidths: [6, 8, 12],\n loadComponent: () => OrderChartWidgetComponent,\n requiresPermissions: [Permission.ReadOrder],\n },\n orderSummary: {\n title: _('dashboard.orders-summary'),\n loadComponent: () => OrderSummaryWidgetComponent,\n supportedWidths: [4, 6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n latestOrders: {\n title: _('dashboard.latest-orders'),\n loadComponent: () => LatestOrdersWidgetComponent,\n supportedWidths: [6, 8, 12],\n requiresPermissions: [Permission.ReadOrder],\n },\n};\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DashboardWidgetService, SharedModule } from '@vendure/admin-ui/core';\n\nimport { DashboardWidgetComponent } from './components/dashboard-widget/dashboard-widget.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { dashboardRoutes } from './dashboard.routes';\nimport { DEFAULT_DASHBOARD_WIDGET_LAYOUT, DEFAULT_WIDGETS } from './default-widgets';\nimport { OrderChartWidgetComponent } from './widgets/order-chart-widget/order-chart-widget.component';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild(dashboardRoutes)],\n declarations: [DashboardComponent, DashboardWidgetComponent, OrderChartWidgetComponent],\n})\nexport class DashboardModule {\n constructor(dashboardWidgetService: DashboardWidgetService) {\n Object.entries(DEFAULT_WIDGETS).map(([id, config]) => {\n if (!dashboardWidgetService.getWidgetById(id)) {\n dashboardWidgetService.registerWidget(id, config);\n }\n });\n if (dashboardWidgetService.getDefaultLayout().length === 0) {\n dashboardWidgetService.setDefaultLayout(DEFAULT_DASHBOARD_WIDGET_LAYOUT);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, NgModule } from '@angular/core';\n\n@Component({\n selector: 'vdr-test-widget',\n templateUrl: './test-widget.component.html',\n styleUrls: ['./test-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class TestWidgetComponent {}\n\n@NgModule({\n declarations: [TestWidgetComponent],\n})\nexport class TestWidgetModule {}\n","<p>This is a test widget!</p>\n","import { ChangeDetectionStrategy, Component, NgModule, OnInit } from '@angular/core';\nimport {\n ADMIN_UI_VERSION,\n CoreModule,\n DataService,\n GetActiveAdministratorQuery,\n getAppConfig,\n} from '@vendure/admin-ui/core';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'vdr-welcome-widget',\n templateUrl: './welcome-widget.component.html',\n styleUrls: ['./welcome-widget.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class WelcomeWidgetComponent implements OnInit {\n version = ADMIN_UI_VERSION;\n administrator$: Observable<GetActiveAdministratorQuery['activeAdministrator']>;\n brand = getAppConfig().brand;\n hideVendureBranding = getAppConfig().hideVendureBranding;\n hideVersion = getAppConfig().hideVersion;\n\n constructor(private dataService: DataService) {}\n\n ngOnInit(): void {\n this.administrator$ = this.dataService.administrator\n .getActiveAdministrator()\n .mapStream(data => data.activeAdministrator || null);\n }\n}\n\n@NgModule({\n imports: [CoreModule],\n declarations: [WelcomeWidgetComponent],\n})\nexport class WelcomeWidgetModule {}\n","<div *ngIf=\"administrator$ | async as administrator\">\n <h4 class=\"\">\n Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\n <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\n </h4>\n\n <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\n {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\n </p>\n</div>\n<div class=\"placeholder\">\n <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\n</div>\n","// This file was generated by the build-public-api.ts script\nexport * from './components/dashboard/dashboard.component';\nexport * from './components/dashboard-widget/dashboard-widget.component';\nexport * from './dashboard.module';\nexport * from './dashboard.routes';\nexport * from './default-widgets';\nexport * from './widgets/latest-orders-widget/latest-orders-widget.component';\nexport * from './widgets/order-chart-widget/order-chart-widget.component';\nexport * from './widgets/order-summary-widget/order-summary-widget.component';\nexport * from './widgets/test-widget/test-widget.component';\nexport * from './widgets/welcome-widget/welcome-widget.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i5.DashboardWidgetComponent","i6","i3","i4","i5","switchMap","_"],"mappings":";;;;;;;;;;;;;;;;;MAmBa,wBAAwB,CAAA;IAQjC,eAAe,GAAA;QACX,IAAI,CAAC,UAAU,EAAE;IACrB;AAEQ,IAAA,MAAM,UAAU,GAAA;QACpB,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AAC7D,QAAA,MAAM,aAAa,GACf,mBAAmB,YAAY,OAAO,GAAG,MAAM,mBAAmB,GAAG,mBAAmB;QAC5F,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;IACvD;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QAC/B;IACJ;+GAxBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGJ,gBAAgB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBjD,+MAMA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDaa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,+MAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA;8BAGR,YAAY,EAAA,CAAA;sBAApB;gBAGO,MAAM,EAAA,CAAA;sBADb,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;;;MECtC,kBAAkB,CAAA;AAK3B,IAAA,WAAA,CACY,sBAA8C,EAC9C,mBAAwC,EACxC,kBAAqC,EACrC,WAAwB,EAAA;QAHxB,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;QACtB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,WAAW,GAAX,WAAW;QANN,IAAA,CAAA,cAAc,GAAG,YAAY;QACtC,IAAA,CAAA,QAAQ,GAAG,WAAW,EAAE;IAM7B;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CACtE,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,UAAU,CAAC,WAAW,CAAC,EAC/C,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAChF,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAChF;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACzC;AAEA,IAAA,gBAAgB,CAAC,KAA2B,EAAA;QACxC,QAAQ,KAAK;AACT,YAAA,KAAK,CAAC;AACF,gBAAA,OAAO,sCAAsC;AACjD,YAAA,KAAK,CAAC;AACF,gBAAA,OAAO,sCAAsC;AACjD,YAAA,KAAK,CAAC;AACF,gBAAA,OAAO,yBAAyB;AACpC,YAAA,KAAK,CAAC;AACF,gBAAA,OAAO,yBAAyB;AACpC,YAAA,KAAK,EAAE;AACH,gBAAA,OAAO,YAAY;AACvB,YAAA;gBACI,WAAW,CAAC,KAAK,CAAC;;IAE9B;AAEA,IAAA,kBAAkB,CAAC,MAA6B,EAAA;AAC5C,QAAA,OAAO,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACrD;IAEA,cAAc,CAAC,MAAoC,EAAE,KAA2B,EAAA;AAC5E,QAAA,MAAM,CAAC,KAAK,GAAG,KAAK;QACpB,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEA,QAAQ,CAAC,KAAa,EAAE,GAAyB,EAAA;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChE,QAAA,OAAO,EAAE;IACb;IAEA,YAAY,CAAC,KAAa,EAAE,IAAkC,EAAA;QAC1D,OAAO,IAAI,CAAC,MAAM;IACtB;AAEA,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,MAAM,EAAE;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChD,YAAA,MAAM,MAAM,GAAiC;gBACzC,EAAE;gBACF,MAAM;gBACN,KAAK;aACR;AACD,YAAA,IAAI,SAA+B;YACnC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC/C,gBAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/D;iBAAO;gBACH,SAAS,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;YACtC;AACA,YAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;AAEA,IAAA,YAAY,CAAC,MAAoC,EAAA;AAC7C,QAAA,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc;QAC/B,IAAI,CAAC,iBAAiB,EAAE;IAC5B;AAEA,IAAA,IAAI,CAAC,KAAqC,EAAA;QACtC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,KAAK;AAC3E,QAAA,IAAI,aAAa,KAAK,YAAY,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;;YAEzF;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAE5D,YAAA,iBAAiB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAC1C,YAAA,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;AAEQ,IAAA,UAAU,CAAC,YAAsB,EAAA;QACrC,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAC5E,QAAA,IAAI,SAA6C;QACjD,IAAI,cAAc,EAAE;;AAEhB,YAAA,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7E;QACA,OAAO,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,SAAS,CAAC;IACjE;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AAClB,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE;AAC3C,iBAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC;YACpD,MAAM,YAAY,GAA2B,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK;gBAChE,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AACpB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,YAAY,CAAC;YAC7E,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,uBAAuB,EAAE,YAAY,CAAC;YACnE,UAAU,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QAC5D;IACJ;+GAzHS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,0ECvB/B,o3GAsEA,EAAA,MAAA,EAAA,CAAA,m2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FD/Ca,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,o3GAAA,EAAA,MAAA,EAAA,CAAA,m2BAAA,CAAA,EAAA;;;AEjBd,MAAM,eAAe,GAAW;AACnC,IAAA;AACI,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,SAAS,EAAE,MAAM;AACpB,KAAA;;;ACKL,MAAM,iBAAiB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;CAsB5B;MASY,2BAA2B,CAAA;AAEpC,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;IAAgB;IAE/C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aACrB,KAAK,CAAC,uBAAuB,EAAE;AAC5B,YAAA,OAAO,EAAE;AACL,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,MAAM,EAAE;AACJ,oBAAA,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;oBACrB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;AAC3C,iBAAA;AACD,gBAAA,IAAI,EAAE;oBACF,aAAa,EAAE,SAAS,CAAC,IAAI;AAChC,iBAAA;AACJ,aAAA;SACJ;AACA,aAAA,sBAAsB;aACtB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7C;+GApBS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,qFC7CxC,69CA8BA,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDea,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,69CAAA,EAAA,MAAA,EAAA,CAAA,0GAAA,CAAA,EAAA;;MA6BR,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,CA3BxB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAwB1B,UAAU,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;gHAGzB,wBAAwB,EAAA,OAAA,EAAA,CAHvB,UAAU,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGzB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;oBACnC,YAAY,EAAE,CAAC,2BAA2B,CAAC;AAC9C,iBAAA;;;AE3DM,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;;;;MAoB1B,yBAAyB,CAAA;AAClC,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;AAE/B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAW;QACjC,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;QACxD,IAAA,CAAA,UAAU,GAAG,UAAU;IAJwB;IAM/C,QAAQ,GAAA;AACJ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;AAClC,aAAA,gBAAgB;AAChB,aAAA,sBAAsB;AACtB,aAAA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,SAAS,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;QAClF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,KAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CACd,SAAS,CAAC,KAAK,CAAC,EAChB,SAAS,CAAC,OAAO,IACb,IAAI,CAAC;aACA,KAAK,CAAC,yBAAyB,EAAE;YAC9B,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,OAAO;SACV;aACA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa;AACpC,aAAA,IAAI,CACD,GAAG,CAAC,OAAO,IAAG;AACV,YAAA,MAAM,aAAa,GACf,UAAU,KAAK,UAAU,CAAC,UAAU,GAAG,QAAQ,GAAG,UAAU;YAChE,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAC,MAAM,CAAA,CAAE;AAEtD,YAAA,MAAM,aAAa,GAAuB;gBACtC,aAAa;gBACb,YAAY;gBACZ,MAAM;aACT;AACD,YAAA,QACI;iBACK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;kBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE;AAEvE,QAAA,CAAC,CAAC,CACL,CACR,CACJ,CACJ,CACJ;IACL;IAEA,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;+GAnDS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,mFChCtC,glCA4BA,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDIa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,eAAA,EAGjB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,glCAAA,EAAA,MAAA,EAAA,CAAA,kGAAA,CAAA,EAAA;;;AErBd,MAAM,iBAAiB,GAAG,GAAG,CAAA;;;;;;;;;;;;MAoBvB,2BAA2B,CAAA;AAYpC,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;AAX/B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,IAAI,EAAE;QAClB,IAAA,CAAA,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAIlE,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAwC;AACpE,YAAA,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,IAAI,CAAC,KAAK;AACnB,SAAA,CAAC;IAG6C;IAE/C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAClC,oBAAoB,EAAE,EACtB,GAAG,CAAC,SAAS,KAAK;AACd,YAAA,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AAClE,YAAA,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AACjE,SAAA,CAAC,CAAC,EACH,WAAW,CAAC,CAAC,CAAC,CACjB;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACtCE,WAAS,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KACrB,IAAI,CAAC;AACA,aAAA,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE;AACrF,aAAA,sBAAsB;AACtB,aAAA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CACtC,EACD,WAAW,CAAC,CAAC,CAAC,CACjB;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,IAAI,CACtC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAChF;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;AACjC,aAAA,gBAAgB;AAChB,aAAA,sBAAsB;AACtB,aAAA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,IAAI,SAAS,CAAC;IAC/E;+GAxCS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,qFC7BxC,snDAgCA,EAAA,MAAA,EAAA,CAAA,uaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDHa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,snDAAA,EAAA,MAAA,EAAA,CAAA,uaAAA,CAAA,EAAA;;MAiDR,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAxB,wBAAwB,EAAA,YAAA,EAAA,CA/CxB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CA4C1B,UAAU,CAAA,EAAA,CAAA,CAAA;AAGX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAHvB,UAAU,CAAA,EAAA,CAAA,CAAA;;4FAGX,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,YAAY,EAAE,CAAC,2BAA2B,CAAC;AAC9C,iBAAA;;;AEpEM,MAAM,+BAA+B,GAA2B;AACnE,IAAA,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5B,IAAA,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;AAChC,IAAA,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;;AAG7B,MAAM,eAAe,GAA4C;AACpE,IAAA,OAAO,EAAE;AACL,QAAA,KAAK,EAAEI,MAAC,CAAC,mBAAmB,CAAC;AAC7B,QAAA,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,QAAA,aAAa,EAAE,MAAM,yBAAyB;AAC9C,QAAA,mBAAmB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAC9C,KAAA;AACD,IAAA,YAAY,EAAE;AACV,QAAA,KAAK,EAAEA,MAAC,CAAC,0BAA0B,CAAC;AACpC,QAAA,aAAa,EAAE,MAAM,2BAA2B;QAChD,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,QAAA,mBAAmB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAC9C,KAAA;AACD,IAAA,YAAY,EAAE;AACV,QAAA,KAAK,EAAEA,MAAC,CAAC,yBAAyB,CAAC;AACnC,QAAA,aAAa,EAAE,MAAM,2BAA2B;AAChD,QAAA,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,QAAA,mBAAmB,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAC9C,KAAA;;;MCjBQ,eAAe,CAAA;AACxB,IAAA,WAAA,CAAY,sBAA8C,EAAA;AACtD,QAAA,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,KAAI;YACjD,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;AAC3C,gBAAA,sBAAsB,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,sBAAsB,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,YAAA,sBAAsB,CAAC,gBAAgB,CAAC,+BAA+B,CAAC;QAC5E;IACJ;+GAVS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAFT,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,aAD5E,YAAY,EAAAP,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,CAAA;gHAGb,eAAe,EAAA,OAAA,EAAA,CAHd,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA,EAAA,CAAA,CAAA;;4FAGrD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC/D,oBAAA,YAAY,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,CAAC;AAC1F,iBAAA;;;MCJY,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,4ECThC,iCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDQa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,iCAAA,EAAA;;MAOR,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBALhB,mBAAmB,CAAA,EAAA,CAAA,CAAA;gHAKnB,gBAAgB,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,YAAY,EAAE,CAAC,mBAAmB,CAAC;AACtC,iBAAA;;;MEIY,sBAAsB,CAAA;AAO/B,IAAA,WAAA,CAAoB,WAAwB,EAAA;QAAxB,IAAA,CAAA,WAAW,GAAX,WAAW;QAN/B,IAAA,CAAA,OAAO,GAAG,gBAAgB;AAE1B,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,EAAE,CAAC,KAAK;AAC5B,QAAA,IAAA,CAAA,mBAAmB,GAAG,YAAY,EAAE,CAAC,mBAAmB;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,YAAY,EAAE,CAAC,WAAW;IAEO;IAE/C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;AAClC,aAAA,sBAAsB;aACtB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC;IAC5D;+GAbS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,+ECjBnC,6iBAaA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDIa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,6iBAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA;;MAsBR,mBAAmB,CAAA;+GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAnB,mBAAmB,EAAA,YAAA,EAAA,CApBnB,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAiBrB,UAAU,CAAA,EAAA,CAAA,CAAA;AAGX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAHlB,UAAU,CAAA,EAAA,CAAA,CAAA;;4FAGX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,YAAY,EAAE,CAAC,sBAAsB,CAAC;AACzC,iBAAA;;;AEpCD;;ACAA;;AAEG;;;;"}
|