{"__symbolic":"module","version":4,"metadata":{"DashboardComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":15,"character":1},"arguments":[{"selector":"vdr-dashboard","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":19,"character":21},"member":"OnPush"},"template":"<div class=\"widget-header\">\r\n    <vdr-dropdown>\r\n        <button class=\"btn btn-secondary btn-sm\" vdrDropdownTrigger>\r\n            <clr-icon shape=\"plus\"></clr-icon>\r\n            {{ 'dashboard.add-widget' | translate }}\r\n        </button>\r\n        <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n            <button\r\n                class=\"button\"\r\n                vdrDropdownItem\r\n                *ngFor=\"let id of availableWidgetIds$ | async\"\r\n                (click)=\"addWidget(id)\"\r\n            >\r\n                {{ id }}\r\n            </button>\r\n        </vdr-dropdown-menu>\r\n    </vdr-dropdown>\r\n</div>\r\n<div cdkDropListGroup>\r\n    <div\r\n        class=\"clr-row dashboard-row\"\r\n        *ngFor=\"let row of widgetLayout; index as rowIndex; trackBy: trackRow\"\r\n        cdkDropList\r\n        (cdkDropListDropped)=\"drop($event)\"\r\n        cdkDropListOrientation=\"horizontal\"\r\n        [cdkDropListData]=\"{ index: rowIndex }\"\r\n    >\r\n        <div\r\n            *ngFor=\"let widget of row; trackBy: trackRowItem\"\r\n            class=\"dashboard-item\"\r\n            [ngClass]=\"getClassForWidth(widget.width)\"\r\n            cdkDrag\r\n            [cdkDragData]=\"widget\"\r\n        >\r\n            <vdr-dashboard-widget\r\n                *vdrIfPermissions=\"widget.config.requiresPermissions || null\"\r\n                [widgetConfig]=\"widget.config\"\r\n            >\r\n                <div class=\"flex\">\r\n                    <div class=\"drag-handle\" cdkDragHandle>\r\n                        <clr-icon shape=\"drag-handle\" size=\"24\"></clr-icon>\r\n                    </div>\r\n                    <vdr-dropdown>\r\n                        <button class=\"icon-button\" vdrDropdownTrigger>\r\n                            <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n                        </button>\r\n                        <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n                            <h4 class=\"dropdown-header\">{{ 'dashboard.widget-resize' | translate }}</h4>\r\n                            <button\r\n                                class=\"button\"\r\n                                vdrDropdownItem\r\n                                [disabled]=\"width === widget.width\"\r\n                                *ngFor=\"let width of getSupportedWidths(widget.config)\"\r\n                                (click)=\"setWidgetWidth(widget, width)\"\r\n                            >\r\n                                {{ 'dashboard.widget-width' | translate: { width: width } }}\r\n                            </button>\r\n                            <div class=\"dropdown-divider\" role=\"separator\"></div>\r\n                            <button class=\"button\" vdrDropdownItem (click)=\"removeWidget(widget)\">\r\n                                <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n                                {{ 'dashboard.remove-widget' | translate }}\r\n                            </button>\r\n                        </vdr-dropdown-menu>\r\n                    </vdr-dropdown>\r\n                </div>\r\n            </vdr-dashboard-widget>\r\n        </div>\r\n    </div>\r\n</div>\r\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}.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:1px dashed var(--color-component-border-200);padding:6px}.dashboard-row.cdk-drop-list-dragging .dashboard-item:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DashboardWidgetService","line":27,"character":40},{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"LocalStorageService","line":28,"character":37},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":29,"character":36},{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DataService","line":30,"character":29}]}],"ngOnInit":[{"__symbolic":"method"}],"getClassForWidth":[{"__symbolic":"method"}],"getSupportedWidths":[{"__symbolic":"method"}],"setWidgetWidth":[{"__symbolic":"method"}],"trackRow":[{"__symbolic":"method"}],"trackRowItem":[{"__symbolic":"method"}],"addWidget":[{"__symbolic":"method"}],"removeWidget":[{"__symbolic":"method"}],"drop":[{"__symbolic":"method"}],"initLayout":[{"__symbolic":"method"}],"recalculateLayout":[{"__symbolic":"method"}]}},"DashboardWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"vdr-dashboard-widget","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":18,"character":21},"member":"OnPush"},"template":"<div class=\"card\">\r\n    <div class=\"card-header\">\r\n        <div class=\"title\">\r\n            <ng-container *ngIf=\"widgetConfig.title as title\">{{ title | translate }}</ng-container>\r\n        </div>\r\n        <div class=\"controls\">\r\n            <ng-content></ng-content>\r\n        </div>\r\n    </div>\r\n    <div class=\"card-block\">\r\n        <ng-template #portal></ng-template>\r\n    </div>\r\n</div>\r\n","styles":[":host{display:block}.card{margin-top:0;min-height:200px}.card-header{display:flex;justify-content:space-between}"]}]}],"members":{"widgetConfig":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":5}}]}],"portal":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":23,"character":5},"arguments":["portal",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":23,"character":33}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":28,"character":50}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"loadWidget":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"DashboardModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":9,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"SharedModule","line":10,"character":14},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":10,"character":28},"member":"forChild"},"arguments":[{"__symbolic":"reference","name":"dashboardRoutes"}]}],"declarations":[{"__symbolic":"reference","name":"DashboardComponent"},{"__symbolic":"reference","name":"DashboardWidgetComponent"}]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DashboardWidgetService","line":14,"character":40}]}]}},"dashboardRoutes":[{"path":"","component":{"__symbolic":"reference","name":"DashboardComponent"},"pathMatch":"full"}],"DEFAULT_DASHBOARD_WIDGET_LAYOUT":[{"id":"welcome","width":12},{"id":"orderSummary","width":6},{"id":"latestOrders","width":6}],"DEFAULT_WIDGETS":{"__symbolic":"error","message":"Lambda not supported","line":22,"character":23,"module":"./default-widgets"},"LatestOrdersWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"vdr-latest-orders-widget","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":8,"character":21},"member":"OnPush"},"template":"<vdr-data-table [items]=\"latestOrders$ | async\">\r\n    <ng-template let-order=\"item\">\r\n        <td class=\"left align-middle\">\r\n            {{ order.code }}\r\n            <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n        </td>\r\n        <td class=\"left align-middle\">\r\n            <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n        </td>\r\n        <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n        <td class=\"left align-middle\">{{ order.orderPlacedAt | timeAgo }}</td>\r\n        <td class=\"right align-middle\">\r\n            <vdr-table-row-action\r\n                iconShape=\"shopping-cart\"\r\n                [label]=\"'common.open' | translate\"\r\n                [linkTo]=\"['/orders/', order.id]\"\r\n            ></vdr-table-row-action>\r\n        </td>\r\n    </ng-template>\r\n</vdr-data-table>\r\n","styles":["vdr-data-table ::ng-deep table{margin-top:0}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DataService","line":12,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}]}},"LatestOrdersWidgetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":30,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"CoreModule","line":31,"character":14},{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"SharedModule","line":31,"character":26}],"declarations":[{"__symbolic":"reference","name":"LatestOrdersWidgetComponent"}]}]}],"members":{}},"Timeframe":{"__symbolic":"interface"},"OrderSummaryWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"vdr-order-summary-widget","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":12,"character":21},"member":"OnPush"},"template":"<div class=\"stats\">\r\n    <div class=\"stat\">\r\n        <div class=\"stat-figure\">{{ totalOrderCount$ | async }}</div>\r\n        <div class=\"stat-label\">{{ 'dashboard.total-orders' | translate }}</div>\r\n    </div>\r\n    <div class=\"stat\">\r\n        <div class=\"stat-figure\">\r\n            {{ totalOrderValue$ | async | currency: (currencyCode$ | async) || undefined }}\r\n        </div>\r\n        <div class=\"stat-label\">{{ 'dashboard.total-order-value' | translate }}</div>\r\n    </div>\r\n</div>\r\n<div class=\"footer\">\r\n    <div class=\"btn-group btn-outline-primary btn-sm\" *ngIf=\"selection$ | async as selection\">\r\n        <button class=\"btn\" [class.btn-primary]=\"selection.date === today\" (click)=\"selection$.next({timeframe: 'day', date: today})\">\r\n            {{ 'dashboard.today' | translate }}\r\n        </button>\r\n        <button class=\"btn\" [class.btn-primary]=\"selection.date === yesterday\" (click)=\"selection$.next({timeframe: 'day', date: yesterday})\">\r\n            {{ 'dashboard.yesterday' | translate }}\r\n        </button>\r\n        <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'week'\" (click)=\"selection$.next({timeframe: 'week'})\">\r\n            {{ 'dashboard.thisWeek' | translate }}\r\n        </button>\r\n        <button class=\"btn\" [class.btn-primary]=\"selection.timeframe === 'month'\" (click)=\"selection$.next({timeframe: 'month'})\">\r\n            {{ 'dashboard.thisMonth' | translate }}\r\n        </button>\r\n    </div>\r\n\r\n    <div class=\"date-range p5\" *ngIf=\"dateRange$ | async as range\">\r\n        {{ range.start | localeDate }} - {{ range.end | localeDate }}\r\n    </div>\r\n</div>\r\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:0}.footer{margin-top:24px;display:flex;flex-direction:column;justify-content:space-between}@media screen and (min-width:768px){.footer{flex-direction:row}}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DataService","line":26,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}]}},"OrderSummaryWidgetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":59,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"CoreModule","line":60,"character":14}],"declarations":[{"__symbolic":"reference","name":"OrderSummaryWidgetComponent"}]}]}],"members":{}},"TestWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"vdr-test-widget","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":6,"character":21},"member":"OnPush"},"template":"<p>This is a test widget!</p>\r\n","styles":[""]}]}],"members":{}},"TestWidgetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"TestWidgetComponent"}]}]}],"members":{}},"WelcomeWidgetComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":11,"character":1},"arguments":[{"selector":"vdr-welcome-widget","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":15,"character":21},"member":"OnPush"},"template":"<div *ngIf=\"administrator$ | async as administrator\">\r\n    <h4 class=\"h4\">\r\n        Welcome, {{ administrator.firstName }} {{ administrator.lastName }}<br />\r\n        <small class=\"p5\">Last login: {{ administrator.user.lastLogin | timeAgo }}</small>\r\n    </h4>\r\n\r\n    <p class=\"p5\" *ngIf=\"!hideVendureBranding || !hideVersion\">\r\n        {{ hideVendureBranding ? '' : 'Vendure' }} {{ hideVersion ? '' : ('Admin UI v' + version) }}\r\n    </p>\r\n</div>\r\n<div class=\"placeholder\">\r\n    <clr-icon shape=\"line-chart\" size=\"128\"></clr-icon>\r\n</div>\r\n","styles":[":host{display:flex;justify-content:space-between}.placeholder{color:var(--color-grey-200)}"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"DataService","line":24,"character":37}]}],"ngOnInit":[{"__symbolic":"method"}]}},"WelcomeWidgetModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":33,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@ishop/admin-ui/core","name":"CoreModule","line":34,"character":14}],"declarations":[{"__symbolic":"reference","name":"WelcomeWidgetComponent"}]}]}],"members":{}}},"origins":{"DashboardComponent":"./components/dashboard/dashboard.component","DashboardWidgetComponent":"./components/dashboard-widget/dashboard-widget.component","DashboardModule":"./dashboard.module","dashboardRoutes":"./dashboard.routes","DEFAULT_DASHBOARD_WIDGET_LAYOUT":"./default-widgets","DEFAULT_WIDGETS":"./default-widgets","LatestOrdersWidgetComponent":"./widgets/latest-orders-widget/latest-orders-widget.component","LatestOrdersWidgetModule":"./widgets/latest-orders-widget/latest-orders-widget.component","Timeframe":"./widgets/order-summary-widget/order-summary-widget.component","OrderSummaryWidgetComponent":"./widgets/order-summary-widget/order-summary-widget.component","OrderSummaryWidgetModule":"./widgets/order-summary-widget/order-summary-widget.component","TestWidgetComponent":"./widgets/test-widget/test-widget.component","TestWidgetModule":"./widgets/test-widget/test-widget.component","WelcomeWidgetComponent":"./widgets/welcome-widget/welcome-widget.component","WelcomeWidgetModule":"./widgets/welcome-widget/welcome-widget.component"},"importAs":"@ishop/admin-ui/dashboard"}