@ogidor/dashboard 1.0.3 → 1.0.4
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/README.md +283 -48
- package/app/app.module.d.ts +20 -0
- package/app/custom-grid.component.d.ts +93 -0
- package/app/dashboard-state.service.d.ts +70 -0
- package/app/dashboard.component.d.ts +48 -0
- package/app/models.d.ts +53 -0
- package/app/widget-renderer.component.d.ts +13 -0
- package/esm2020/app/app.module.mjs +57 -0
- package/esm2020/app/custom-grid.component.mjs +509 -0
- package/esm2020/app/dashboard-state.service.mjs +288 -0
- package/esm2020/app/dashboard.component.mjs +299 -0
- package/esm2020/app/models.mjs +2 -0
- package/esm2020/app/widget-renderer.component.mjs +83 -0
- package/esm2020/public-api.mjs +10 -0
- package/fesm2015/ogidor-dashboard.mjs +1233 -0
- package/fesm2015/ogidor-dashboard.mjs.map +1 -0
- package/fesm2020/ogidor-dashboard.mjs +1229 -0
- package/fesm2020/ogidor-dashboard.mjs.map +1 -0
- package/package.json +29 -43
- package/{dist-lib/public-api.d.ts → public-api.d.ts} +3 -2
- package/dist-lib/README.md +0 -103
- package/dist-lib/app/app.module.d.ts +0 -22
- package/dist-lib/app/dashboard-state.service.d.ts +0 -49
- package/dist-lib/app/dashboard.component.d.ts +0 -80
- package/dist-lib/app/models.d.ts +0 -73
- package/dist-lib/app/widget-renderer.component.d.ts +0 -40
- package/dist-lib/esm2020/app/app.module.mjs +0 -65
- package/dist-lib/esm2020/app/dashboard-state.service.mjs +0 -218
- package/dist-lib/esm2020/app/dashboard.component.mjs +0 -703
- package/dist-lib/esm2020/app/models.mjs +0 -2
- package/dist-lib/esm2020/app/widget-renderer.component.mjs +0 -163
- package/dist-lib/esm2020/public-api.mjs +0 -9
- package/dist-lib/fesm2015/ogidor-dashboard.mjs +0 -1154
- package/dist-lib/fesm2015/ogidor-dashboard.mjs.map +0 -1
- package/dist-lib/fesm2020/ogidor-dashboard.mjs +0 -1145
- package/dist-lib/fesm2020/ogidor-dashboard.mjs.map +0 -1
- package/dist-lib/package.json +0 -51
- /package/{dist-lib/esm2020 → esm2020}/ogidor-dashboard.mjs +0 -0
- /package/{dist-lib/index.d.ts → index.d.ts} +0 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ContentChild, TemplateRef } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { GridCellDirective } from './custom-grid.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./dashboard-state.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "./widget-renderer.component";
|
|
8
|
+
import * as i4 from "./custom-grid.component";
|
|
9
|
+
const DEFAULT_THEME = {
|
|
10
|
+
backgroundColor: '#000000',
|
|
11
|
+
panelColor: '#1c1c1e',
|
|
12
|
+
widgetCardColor: '#2c2c2e',
|
|
13
|
+
foreColor: '#8e8e93',
|
|
14
|
+
accentColor: '#0a84ff',
|
|
15
|
+
dangerColor: '#ff453a',
|
|
16
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
|
|
17
|
+
};
|
|
18
|
+
export class DashboardComponent {
|
|
19
|
+
constructor(stateService) {
|
|
20
|
+
this.stateService = stateService;
|
|
21
|
+
/**
|
|
22
|
+
* Emits when the user clicks "Add Widget".
|
|
23
|
+
* The consumer should open their own dialog and call `stateService.addWidget(...)`.
|
|
24
|
+
*/
|
|
25
|
+
this.addWidgetRequested = new EventEmitter();
|
|
26
|
+
/**
|
|
27
|
+
* Emits the Widget when the user clicks the edit (pen) icon on a card.
|
|
28
|
+
* The consumer should open their own edit UI and call `stateService.updateWidget(...)`.
|
|
29
|
+
*/
|
|
30
|
+
this.editWidgetRequested = new EventEmitter();
|
|
31
|
+
this.resolvedTheme = { ...DEFAULT_THEME };
|
|
32
|
+
this.wrapperStyles = {};
|
|
33
|
+
this.pages = [];
|
|
34
|
+
this.activePageId = '';
|
|
35
|
+
this.isPoppedOut = false;
|
|
36
|
+
this.subs = new Subscription();
|
|
37
|
+
}
|
|
38
|
+
ngOnChanges(changes) {
|
|
39
|
+
if (changes['theme'] || changes['initialLayout'])
|
|
40
|
+
this.applyTheme();
|
|
41
|
+
}
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
this.applyTheme();
|
|
44
|
+
if (this.initialLayout) {
|
|
45
|
+
try {
|
|
46
|
+
this.stateService.loadLayout(JSON.parse(this.initialLayout));
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.error('[Dashboard] Failed to parse initialLayout', e);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const hash = window.location.hash?.replace('#', '').trim();
|
|
53
|
+
if (hash)
|
|
54
|
+
this.isPoppedOut = true;
|
|
55
|
+
this.subs.add(this.stateService.pages$.subscribe(pages => {
|
|
56
|
+
this.pages = pages;
|
|
57
|
+
if (this.isPoppedOut && hash) {
|
|
58
|
+
const target = pages.find(p => p.id === hash);
|
|
59
|
+
if (target)
|
|
60
|
+
this.stateService.setActivePage(hash);
|
|
61
|
+
}
|
|
62
|
+
this.updateActivePage();
|
|
63
|
+
}));
|
|
64
|
+
this.subs.add(this.stateService.activePageId$.subscribe(id => {
|
|
65
|
+
this.activePageId = id;
|
|
66
|
+
this.updateActivePage();
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
ngOnDestroy() { this.subs.unsubscribe(); }
|
|
70
|
+
onItemChanged(widget) {
|
|
71
|
+
this.stateService.updateWidgetPosition(this.activePageId, widget.id, widget.x, widget.y, widget.cols, widget.rows);
|
|
72
|
+
}
|
|
73
|
+
onRemoveWidget(widgetId) { this.stateService.removeWidget(widgetId); }
|
|
74
|
+
onSelectPage(id) { this.stateService.setActivePage(id); }
|
|
75
|
+
onAddPage() {
|
|
76
|
+
const name = prompt('Workspace name:', `Workspace ${this.pages.length + 1}`);
|
|
77
|
+
if (name)
|
|
78
|
+
this.stateService.addPage(name);
|
|
79
|
+
}
|
|
80
|
+
onRemovePage(event, id) {
|
|
81
|
+
event.stopPropagation();
|
|
82
|
+
if (confirm('Remove this workspace?'))
|
|
83
|
+
this.stateService.removePage(id);
|
|
84
|
+
}
|
|
85
|
+
onPopOut(event, pageId) {
|
|
86
|
+
event.stopPropagation();
|
|
87
|
+
this.stateService.popOutPage(pageId);
|
|
88
|
+
}
|
|
89
|
+
serializeLayout() { return this.stateService.serializeLayout(); }
|
|
90
|
+
applyTheme() {
|
|
91
|
+
this.resolvedTheme = { ...DEFAULT_THEME, ...(this.theme ?? {}) };
|
|
92
|
+
this.wrapperStyles = {
|
|
93
|
+
'--dash-bg': this.resolvedTheme.backgroundColor,
|
|
94
|
+
'--dash-panel-bg': this.resolvedTheme.panelColor,
|
|
95
|
+
'--dash-card-bg': this.resolvedTheme.widgetCardColor,
|
|
96
|
+
'--dash-fore-color': this.resolvedTheme.foreColor,
|
|
97
|
+
'--dash-accent-color': this.resolvedTheme.accentColor,
|
|
98
|
+
'--dash-danger-color': this.resolvedTheme.dangerColor,
|
|
99
|
+
'--dash-font-family': this.resolvedTheme.fontFamily,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
updateActivePage() {
|
|
103
|
+
this.activePage = this.pages.find(p => p.id === this.activePageId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.DashboardStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
+
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardComponent, selector: "app-dashboard", inputs: { initialLayout: "initialLayout", theme: "theme" }, outputs: { addWidgetRequested: "addWidgetRequested", editWidgetRequested: "editWidgetRequested" }, queries: [{ propertyName: "cellTemplate", first: true, predicate: GridCellDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: `
|
|
108
|
+
<!-- ══════════════════════════════════════════════════════════
|
|
109
|
+
POPPED-OUT MODE
|
|
110
|
+
══════════════════════════════════════════════════════════ -->
|
|
111
|
+
<ng-container *ngIf="isPoppedOut; else normalMode">
|
|
112
|
+
<div class="popout-wrapper" [ngStyle]="wrapperStyles">
|
|
113
|
+
<header class="popout-header">
|
|
114
|
+
<span class="popout-title">{{ activePage?.name }}</span>
|
|
115
|
+
</header>
|
|
116
|
+
<div class="grid-container">
|
|
117
|
+
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
118
|
+
<ng-template gridCell let-widget="widget">
|
|
119
|
+
<app-widget-renderer
|
|
120
|
+
[widget]="widget"
|
|
121
|
+
[theme]="resolvedTheme"
|
|
122
|
+
(editRequested)="editWidgetRequested.emit($event)"
|
|
123
|
+
(removeRequested)="onRemoveWidget($event)"
|
|
124
|
+
>
|
|
125
|
+
<ng-container
|
|
126
|
+
*ngIf="cellTemplate"
|
|
127
|
+
[ngTemplateOutlet]="cellTemplate"
|
|
128
|
+
[ngTemplateOutletContext]="{ widget: widget }">
|
|
129
|
+
</ng-container>
|
|
130
|
+
</app-widget-renderer>
|
|
131
|
+
</ng-template>
|
|
132
|
+
</app-grid>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</ng-container>
|
|
136
|
+
|
|
137
|
+
<!-- ══════════════════════════════════════════════════════════
|
|
138
|
+
NORMAL MODE
|
|
139
|
+
══════════════════════════════════════════════════════════ -->
|
|
140
|
+
<ng-template #normalMode>
|
|
141
|
+
<div class="dashboard-wrapper" [ngStyle]="wrapperStyles">
|
|
142
|
+
<main class="main-content">
|
|
143
|
+
|
|
144
|
+
<header class="dashboard-header">
|
|
145
|
+
<div class="tabs-container">
|
|
146
|
+
<div
|
|
147
|
+
*ngFor="let page of pages"
|
|
148
|
+
class="tab"
|
|
149
|
+
[class.active]="page.id === activePageId"
|
|
150
|
+
(click)="onSelectPage(page.id)"
|
|
151
|
+
>
|
|
152
|
+
<span class="tab-name">{{ page.name }}</span>
|
|
153
|
+
<button class="tab-action tab-popout" (click)="onPopOut($event, page.id)" title="Open in new window">
|
|
154
|
+
<i class="la la-external-link-alt"></i>
|
|
155
|
+
</button>
|
|
156
|
+
<button class="tab-action tab-close" *ngIf="pages.length > 1" (click)="onRemovePage($event, page.id)" title="Close">
|
|
157
|
+
<i class="la la-times"></i>
|
|
158
|
+
</button>
|
|
159
|
+
</div>
|
|
160
|
+
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
161
|
+
<i class="la la-plus"></i>
|
|
162
|
+
</button>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<!-- Add Widget button — consumer decides what happens -->
|
|
166
|
+
<button class="btn-add-widget" (click)="addWidgetRequested.emit()" title="Add widget">
|
|
167
|
+
<i class="la la-plus"></i>
|
|
168
|
+
<span>Add Widget</span>
|
|
169
|
+
</button>
|
|
170
|
+
</header>
|
|
171
|
+
|
|
172
|
+
<div class="grid-container">
|
|
173
|
+
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
174
|
+
<ng-template gridCell let-widget="widget">
|
|
175
|
+
<app-widget-renderer
|
|
176
|
+
[widget]="widget"
|
|
177
|
+
[theme]="resolvedTheme"
|
|
178
|
+
(editRequested)="editWidgetRequested.emit($event)"
|
|
179
|
+
(removeRequested)="onRemoveWidget($event)"
|
|
180
|
+
>
|
|
181
|
+
<!-- Stamp consumer's cell template (if provided) inside the card body -->
|
|
182
|
+
<ng-container
|
|
183
|
+
*ngIf="cellTemplate"
|
|
184
|
+
[ngTemplateOutlet]="cellTemplate"
|
|
185
|
+
[ngTemplateOutletContext]="{ widget: widget }">
|
|
186
|
+
</ng-container>
|
|
187
|
+
</app-widget-renderer>
|
|
188
|
+
</ng-template>
|
|
189
|
+
</app-grid>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
</main>
|
|
193
|
+
</div>
|
|
194
|
+
</ng-template>
|
|
195
|
+
`, isInline: true, styles: [":host{--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color:#8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif}.dashboard-wrapper{display:flex;height:100vh;width:100vw;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);box-shadow:0 10px 30px #00000080;border:1px solid rgba(255,255,255,.05)}.popout-wrapper{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:#fff}.popout-wrapper .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0;background:var(--dash-panel-bg);padding:16px;border:1px solid rgba(255,255,255,.05)}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px}.tabs-container{display:flex;align-items:center;gap:8px;background:rgba(44,44,46,.6);backdrop-filter:blur(10px);border-radius:25px;padding:6px}.tab{display:flex;align-items:center;gap:4px;padding:8px 14px 8px 18px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;color:var(--dash-fore-color);transition:all .3s cubic-bezier(.25,.8,.25,1)}.tab.active{background:#3a3a3c;color:#fff;box-shadow:0 2px 10px #0003}.tab:hover:not(.active){color:#e5e5ea;background:rgba(255,255,255,.05)}.tab-name{flex:1;white-space:nowrap}.tab-action{background:transparent;border:none;color:var(--dash-fore-color);padding:2px;font-size:11px;cursor:pointer;opacity:0;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.tab:hover .tab-action{opacity:1}.tab-popout:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.18)}.tab-close:hover{color:var(--dash-danger-color);background:rgba(255,69,58,.2)}.btn-add-page{background:transparent;border:none;color:var(--dash-fore-color);padding:8px 16px;cursor:pointer;border-radius:20px;transition:all .2s}.btn-add-page:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.1)}.btn-add-widget{display:flex;align-items:center;gap:6px;background:var(--dash-accent-color);border:none;color:#fff;font-size:14px;font-weight:600;padding:10px 20px;border-radius:22px;cursor:pointer;white-space:nowrap;transition:opacity .2s,transform .15s;box-shadow:0 4px 14px #0a84ff66}.btn-add-widget:hover{opacity:.9;transform:translateY(-1px)}.btn-add-widget:active{transform:translateY(0)}.main-content .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0}app-grid{background:transparent;display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.WidgetRendererComponent, selector: "app-widget-renderer", inputs: ["widget", "theme"], outputs: ["editRequested", "removeRequested"] }, { kind: "component", type: i4.CustomGridComponent, selector: "app-grid", inputs: ["widgets", "columns", "gap", "rowHeight", "minItemCols", "minItemRows"], outputs: ["itemChanged", "layoutChanged"] }, { kind: "directive", type: i4.GridCellDirective, selector: "[gridCell]" }] });
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
197
|
+
type: Component,
|
|
198
|
+
args: [{ selector: 'app-dashboard', template: `
|
|
199
|
+
<!-- ══════════════════════════════════════════════════════════
|
|
200
|
+
POPPED-OUT MODE
|
|
201
|
+
══════════════════════════════════════════════════════════ -->
|
|
202
|
+
<ng-container *ngIf="isPoppedOut; else normalMode">
|
|
203
|
+
<div class="popout-wrapper" [ngStyle]="wrapperStyles">
|
|
204
|
+
<header class="popout-header">
|
|
205
|
+
<span class="popout-title">{{ activePage?.name }}</span>
|
|
206
|
+
</header>
|
|
207
|
+
<div class="grid-container">
|
|
208
|
+
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
209
|
+
<ng-template gridCell let-widget="widget">
|
|
210
|
+
<app-widget-renderer
|
|
211
|
+
[widget]="widget"
|
|
212
|
+
[theme]="resolvedTheme"
|
|
213
|
+
(editRequested)="editWidgetRequested.emit($event)"
|
|
214
|
+
(removeRequested)="onRemoveWidget($event)"
|
|
215
|
+
>
|
|
216
|
+
<ng-container
|
|
217
|
+
*ngIf="cellTemplate"
|
|
218
|
+
[ngTemplateOutlet]="cellTemplate"
|
|
219
|
+
[ngTemplateOutletContext]="{ widget: widget }">
|
|
220
|
+
</ng-container>
|
|
221
|
+
</app-widget-renderer>
|
|
222
|
+
</ng-template>
|
|
223
|
+
</app-grid>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</ng-container>
|
|
227
|
+
|
|
228
|
+
<!-- ══════════════════════════════════════════════════════════
|
|
229
|
+
NORMAL MODE
|
|
230
|
+
══════════════════════════════════════════════════════════ -->
|
|
231
|
+
<ng-template #normalMode>
|
|
232
|
+
<div class="dashboard-wrapper" [ngStyle]="wrapperStyles">
|
|
233
|
+
<main class="main-content">
|
|
234
|
+
|
|
235
|
+
<header class="dashboard-header">
|
|
236
|
+
<div class="tabs-container">
|
|
237
|
+
<div
|
|
238
|
+
*ngFor="let page of pages"
|
|
239
|
+
class="tab"
|
|
240
|
+
[class.active]="page.id === activePageId"
|
|
241
|
+
(click)="onSelectPage(page.id)"
|
|
242
|
+
>
|
|
243
|
+
<span class="tab-name">{{ page.name }}</span>
|
|
244
|
+
<button class="tab-action tab-popout" (click)="onPopOut($event, page.id)" title="Open in new window">
|
|
245
|
+
<i class="la la-external-link-alt"></i>
|
|
246
|
+
</button>
|
|
247
|
+
<button class="tab-action tab-close" *ngIf="pages.length > 1" (click)="onRemovePage($event, page.id)" title="Close">
|
|
248
|
+
<i class="la la-times"></i>
|
|
249
|
+
</button>
|
|
250
|
+
</div>
|
|
251
|
+
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
252
|
+
<i class="la la-plus"></i>
|
|
253
|
+
</button>
|
|
254
|
+
</div>
|
|
255
|
+
|
|
256
|
+
<!-- Add Widget button — consumer decides what happens -->
|
|
257
|
+
<button class="btn-add-widget" (click)="addWidgetRequested.emit()" title="Add widget">
|
|
258
|
+
<i class="la la-plus"></i>
|
|
259
|
+
<span>Add Widget</span>
|
|
260
|
+
</button>
|
|
261
|
+
</header>
|
|
262
|
+
|
|
263
|
+
<div class="grid-container">
|
|
264
|
+
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
265
|
+
<ng-template gridCell let-widget="widget">
|
|
266
|
+
<app-widget-renderer
|
|
267
|
+
[widget]="widget"
|
|
268
|
+
[theme]="resolvedTheme"
|
|
269
|
+
(editRequested)="editWidgetRequested.emit($event)"
|
|
270
|
+
(removeRequested)="onRemoveWidget($event)"
|
|
271
|
+
>
|
|
272
|
+
<!-- Stamp consumer's cell template (if provided) inside the card body -->
|
|
273
|
+
<ng-container
|
|
274
|
+
*ngIf="cellTemplate"
|
|
275
|
+
[ngTemplateOutlet]="cellTemplate"
|
|
276
|
+
[ngTemplateOutletContext]="{ widget: widget }">
|
|
277
|
+
</ng-container>
|
|
278
|
+
</app-widget-renderer>
|
|
279
|
+
</ng-template>
|
|
280
|
+
</app-grid>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
</main>
|
|
284
|
+
</div>
|
|
285
|
+
</ng-template>
|
|
286
|
+
`, styles: [":host{--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color:#8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif}.dashboard-wrapper{display:flex;height:100vh;width:100vw;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);box-shadow:0 10px 30px #00000080;border:1px solid rgba(255,255,255,.05)}.popout-wrapper{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:#fff}.popout-wrapper .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0;background:var(--dash-panel-bg);padding:16px;border:1px solid rgba(255,255,255,.05)}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px}.tabs-container{display:flex;align-items:center;gap:8px;background:rgba(44,44,46,.6);backdrop-filter:blur(10px);border-radius:25px;padding:6px}.tab{display:flex;align-items:center;gap:4px;padding:8px 14px 8px 18px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;color:var(--dash-fore-color);transition:all .3s cubic-bezier(.25,.8,.25,1)}.tab.active{background:#3a3a3c;color:#fff;box-shadow:0 2px 10px #0003}.tab:hover:not(.active){color:#e5e5ea;background:rgba(255,255,255,.05)}.tab-name{flex:1;white-space:nowrap}.tab-action{background:transparent;border:none;color:var(--dash-fore-color);padding:2px;font-size:11px;cursor:pointer;opacity:0;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.tab:hover .tab-action{opacity:1}.tab-popout:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.18)}.tab-close:hover{color:var(--dash-danger-color);background:rgba(255,69,58,.2)}.btn-add-page{background:transparent;border:none;color:var(--dash-fore-color);padding:8px 16px;cursor:pointer;border-radius:20px;transition:all .2s}.btn-add-page:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.1)}.btn-add-widget{display:flex;align-items:center;gap:6px;background:var(--dash-accent-color);border:none;color:#fff;font-size:14px;font-weight:600;padding:10px 20px;border-radius:22px;cursor:pointer;white-space:nowrap;transition:opacity .2s,transform .15s;box-shadow:0 4px 14px #0a84ff66}.btn-add-widget:hover{opacity:.9;transform:translateY(-1px)}.btn-add-widget:active{transform:translateY(0)}.main-content .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0}app-grid{background:transparent;display:block;height:100%;width:100%}\n"] }]
|
|
287
|
+
}], ctorParameters: function () { return [{ type: i1.DashboardStateService }]; }, propDecorators: { initialLayout: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], theme: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], addWidgetRequested: [{
|
|
292
|
+
type: Output
|
|
293
|
+
}], editWidgetRequested: [{
|
|
294
|
+
type: Output
|
|
295
|
+
}], cellTemplate: [{
|
|
296
|
+
type: ContentChild,
|
|
297
|
+
args: [GridCellDirective, { read: TemplateRef }]
|
|
298
|
+
}] } });
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxFQUM1QixZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDdkQsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBRTVELE1BQU0sYUFBYSxHQUE2QjtJQUM5QyxlQUFlLEVBQUUsU0FBUztJQUMxQixVQUFVLEVBQU8sU0FBUztJQUMxQixlQUFlLEVBQUUsU0FBUztJQUMxQixTQUFTLEVBQVEsU0FBUztJQUMxQixXQUFXLEVBQU0sU0FBUztJQUMxQixXQUFXLEVBQU0sU0FBUztJQUMxQixVQUFVLEVBQU8scUZBQXFGO0NBQ3ZHLENBQUM7QUErTEYsTUFBTSxPQUFPLGtCQUFrQjtJQWlDN0IsWUFBbUIsWUFBbUM7UUFBbkMsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBN0J0RDs7O1dBR0c7UUFDTyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhEOzs7V0FHRztRQUNPLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFTM0Qsa0JBQWEsR0FBNkIsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9ELGtCQUFhLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRVosU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFdUIsQ0FBQztJQUUxRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3RlQ7NEZBbUdVLGtCQUFrQjtrQkE3TDlCLFNBQVM7K0JBQ0UsZUFBZSxZQUNmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0ZUOzRHQW9HUSxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFNSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBTUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQU9QLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgT3V0cHV0LCBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgQ29udGVudENoaWxkLCBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhc2hib2FyZFN0YXRlU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnZSwgV2lkZ2V0LCBEYXNoYm9hcmRUaGVtZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JpZENlbGxEaXJlY3RpdmUgfSBmcm9tICcuL2N1c3RvbS1ncmlkLmNvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfVEhFTUU6IFJlcXVpcmVkPERhc2hib2FyZFRoZW1lPiA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMCcsXG4gIHBhbmVsQ29sb3I6ICAgICAgJyMxYzFjMWUnLFxuICB3aWRnZXRDYXJkQ29sb3I6ICcjMmMyYzJlJyxcbiAgZm9yZUNvbG9yOiAgICAgICAnIzhlOGU5MycsXG4gIGFjY2VudENvbG9yOiAgICAgJyMwYTg0ZmYnLFxuICBkYW5nZXJDb2xvcjogICAgICcjZmY0NTNhJyxcbiAgZm9udEZhbWlseTogICAgICAnLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZicsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgICAgICAgUE9QUEVELU9VVCBNT0RFXG4gICAgICAgICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUG9wcGVkT3V0OyBlbHNlIG5vcm1hbE1vZGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdXQtd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZXNcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cInBvcG91dC1oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvcG91dC10aXRsZVwiPnt7IGFjdGl2ZVBhZ2U/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cbiAgICAgICAgICA8YXBwLWdyaWQgW3dpZGdldHNdPVwiYWN0aXZlUGFnZT8ud2lkZ2V0cyB8fCBbXVwiIChpdGVtQ2hhbmdlZCk9XCJvbkl0ZW1DaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBncmlkQ2VsbCBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG4gICAgICAgICAgICAgIDxhcHAtd2lkZ2V0LXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICAgICAgICAgICAgICAgIFt0aGVtZV09XCJyZXNvbHZlZFRoZW1lXCJcbiAgICAgICAgICAgICAgICAoZWRpdFJlcXVlc3RlZCk9XCJlZGl0V2lkZ2V0UmVxdWVzdGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHJlbW92ZVJlcXVlc3RlZCk9XCJvblJlbW92ZVdpZGdldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB3aWRnZXQ6IHdpZGdldCB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvYXBwLXdpZGdldC1yZW5kZXJlcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9hcHAtZ3JpZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICAgICAgICBOT1JNQUwgTU9ERVxuICAgICAgICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsTW9kZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZXNcIj5cbiAgICAgICAgPG1haW4gY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cblxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkYXNoYm9hcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFicy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIHBhZ2VzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRhYlwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJwYWdlLmlkID09PSBhY3RpdmVQYWdlSWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdFBhZ2UocGFnZS5pZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItbmFtZVwiPnt7IHBhZ2UubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWFjdGlvbiB0YWItcG9wb3V0XCIgKGNsaWNrKT1cIm9uUG9wT3V0KCRldmVudCwgcGFnZS5pZClcIiB0aXRsZT1cIk9wZW4gaW4gbmV3IHdpbmRvd1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS1leHRlcm5hbC1saW5rLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWFjdGlvbiB0YWItY2xvc2VcIiAqbmdJZj1cInBhZ2VzLmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib25SZW1vdmVQYWdlKCRldmVudCwgcGFnZS5pZClcIiB0aXRsZT1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hZGQtcGFnZVwiIChjbGljayk9XCJvbkFkZFBhZ2UoKVwiIHRpdGxlPVwiTmV3IHdvcmtzcGFjZVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBZGQgV2lkZ2V0IGJ1dHRvbiDigJQgY29uc3VtZXIgZGVjaWRlcyB3aGF0IGhhcHBlbnMgLS0+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFkZC13aWRnZXRcIiAoY2xpY2spPVwiYWRkV2lkZ2V0UmVxdWVzdGVkLmVtaXQoKVwiIHRpdGxlPVwiQWRkIHdpZGdldFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgIDxzcGFuPkFkZCBXaWRnZXQ8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGFwcC1ncmlkIFt3aWRnZXRzXT1cImFjdGl2ZVBhZ2U/LndpZGdldHMgfHwgW11cIiAoaXRlbUNoYW5nZWQpPVwib25JdGVtQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBncmlkQ2VsbCBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG4gICAgICAgICAgICAgICAgPGFwcC13aWRnZXQtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgIFt3aWRnZXRdPVwid2lkZ2V0XCJcbiAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJyZXNvbHZlZFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgIChlZGl0UmVxdWVzdGVkKT1cImVkaXRXaWRnZXRSZXF1ZXN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmVSZXF1ZXN0ZWQpPVwib25SZW1vdmVXaWRnZXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBTdGFtcCBjb25zdW1lcidzIGNlbGwgdGVtcGxhdGUgKGlmIHByb3ZpZGVkKSBpbnNpZGUgdGhlIGNhcmQgYm9keSAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB3aWRnZXQ6IHdpZGdldCB9XCI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2FwcC13aWRnZXQtcmVuZGVyZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2FwcC1ncmlkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbWFpbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICAtLWRhc2gtYmc6ICAgICAgICAjMDAwMDAwO1xuICAgICAgLS1kYXNoLXBhbmVsLWJnOiAgIzFjMWMxZTtcbiAgICAgIC0tZGFzaC1jYXJkLWJnOiAgICMyYzJjMmU7XG4gICAgICAtLWRhc2gtZm9yZS1jb2xvcjojOGU4ZTkzO1xuICAgICAgLS1kYXNoLWFjY2VudC1jb2xvcjogIzBhODRmZjtcbiAgICAgIC0tZGFzaC1kYW5nZXItY29sb3I6ICNmZjQ1M2E7XG4gICAgICAtLWRhc2gtZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIE5vcm1hbCBsYXlvdXQg4pSA4pSAICovXG4gICAgLmRhc2hib2FyZC13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGhlaWdodDogMTAwdmg7IHdpZHRoOiAxMDB2dzsgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBhZGRpbmc6IDE2cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYXNoLWJnKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWRhc2gtZm9udC1mYW1pbHkpO1xuICAgIH1cbiAgICAubWFpbi1jb250ZW50IHtcbiAgICAgIGZsZXg6IDE7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiA0MHB4OyBwYWRkaW5nOiAyMHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1wYW5lbC1iZyk7XG4gICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuNSk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpO1xuICAgIH1cblxuICAgIC8qIOKUgOKUgCBQb3Atb3V0IGxheW91dCDilIDilIAgKi9cbiAgICAucG9wb3V0LXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgaGVpZ2h0OiAxMDB2aDsgd2lkdGg6IDEwMHZ3O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgcGFkZGluZzogMTZweDsgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtYmcpO1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtZm9yZS1jb2xvcik7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZGFzaC1mb250LWZhbWlseSk7XG4gICAgfVxuICAgIC5wb3BvdXQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7IHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGFuZWwtYmcpOyBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KTsgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5wb3BvdXQtdGl0bGUgeyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjZmZmOyB9XG4gICAgLnBvcG91dC13cmFwcGVyIC5ncmlkLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgYm9yZGVyLXJhZGl1czogMjRweDsgbWluLWhlaWdodDogMDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGFuZWwtYmcpOyBwYWRkaW5nOiAxNnB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTtcbiAgICB9XG5cbiAgICAvKiDilIDilIAgSGVhZGVyIOKUgOKUgCAqL1xuICAgIC5kYXNoYm9hcmQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7IGdhcDogMTJweDtcbiAgICB9XG4gICAgLnRhYnMtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSg0NCw0NCw0NiwwLjYpOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4OyBwYWRkaW5nOiA2cHg7XG4gICAgfVxuICAgIC50YWIge1xuICAgICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweCA4cHggMThweDsgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtZm9yZS1jb2xvcik7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwwLjgsMC4yNSwxKTtcbiAgICB9XG4gICAgLnRhYi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjM2EzYTNjOyBjb2xvcjogI2ZmZjsgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsMCwwLDAuMik7IH1cbiAgICAudGFiOmhvdmVyOm5vdCguYWN0aXZlKSB7IGNvbG9yOiAjZTVlNWVhOyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyB9XG4gICAgLnRhYi1uYW1lIHsgZmxleDogMTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfVxuICAgIC50YWItYWN0aW9uIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgcGFkZGluZzogMnB4OyBmb250LXNpemU6IDExcHg7IGN1cnNvcjogcG9pbnRlcjsgb3BhY2l0eTogMDsgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgd2lkdGg6IDIwcHg7IGhlaWdodDogMjBweDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50YWI6aG92ZXIgLnRhYi1hY3Rpb24geyBvcGFjaXR5OiAxOyB9XG4gICAgLnRhYi1wb3BvdXQ6aG92ZXIgeyBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEzMiwyNTUsMC4xOCk7IH1cbiAgICAudGFiLWNsb3NlOmhvdmVyICB7IGNvbG9yOiB2YXIoLS1kYXNoLWRhbmdlci1jb2xvcik7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDY5LDU4LDAuMik7IH1cbiAgICAuYnRuLWFkZC1wYWdlIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgcGFkZGluZzogOHB4IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLXJhZGl1czogMjBweDsgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgfVxuICAgIC5idG4tYWRkLXBhZ2U6aG92ZXIgeyBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEzMiwyNTUsMC4xKTsgfVxuICAgIC5idG4tYWRkLXdpZGdldCB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgYm9yZGVyOiBub25lOyBjb2xvcjogI2ZmZjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDsgcGFkZGluZzogMTBweCAyMHB4OyBib3JkZXItcmFkaXVzOiAyMnB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyOyB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4xNXM7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCAxNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjQpO1xuICAgIH1cbiAgICAuYnRuLWFkZC13aWRnZXQ6aG92ZXIgIHsgb3BhY2l0eTogMC45OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH1cbiAgICAuYnRuLWFkZC13aWRnZXQ6YWN0aXZlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG5cbiAgICAvKiDilIDilIAgR3JpZCDilIDilIAgKi9cbiAgICAubWFpbi1jb250ZW50IC5ncmlkLWNvbnRhaW5lciB7IGZsZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBib3JkZXItcmFkaXVzOiAyNHB4OyBtaW4taGVpZ2h0OiAwOyB9XG4gICAgYXBwLWdyaWQgeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRoZW1lPzogRGFzaGJvYXJkVGhlbWU7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiQWRkIFdpZGdldFwiLlxuICAgKiBUaGUgY29uc3VtZXIgc2hvdWxkIG9wZW4gdGhlaXIgb3duIGRpYWxvZyBhbmQgY2FsbCBgc3RhdGVTZXJ2aWNlLmFkZFdpZGdldCguLi4pYC5cbiAgICovXG4gIEBPdXRwdXQoKSBhZGRXaWRnZXRSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBXaWRnZXQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGVkaXQgKHBlbikgaWNvbiBvbiBhIGNhcmQuXG4gICAqIFRoZSBjb25zdW1lciBzaG91bGQgb3BlbiB0aGVpciBvd24gZWRpdCBVSSBhbmQgY2FsbCBgc3RhdGVTZXJ2aWNlLnVwZGF0ZVdpZGdldCguLi4pYC5cbiAgICovXG4gIEBPdXRwdXQoKSBlZGl0V2lkZ2V0UmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxXaWRnZXQ+KCk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBjb25zdW1lciBjYW4gcHJvdmlkZSBhbiBgPG5nLXRlbXBsYXRlIHdpZGdldENlbGwgbGV0LXdpZGdldD1cIndpZGdldFwiPmAgY2hpbGRcbiAgICogdG8gcmVuZGVyIGN1c3RvbSBjb250ZW50IGluc2lkZSBldmVyeSBjYXJkIGJvZHkuXG4gICAqL1xuICBAQ29udGVudENoaWxkKEdyaWRDZWxsRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGNlbGxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgd2lkZ2V0OiBXaWRnZXQgfT47XG5cbiAgcmVzb2x2ZWRUaGVtZTogUmVxdWlyZWQ8RGFzaGJvYXJkVGhlbWU+ID0geyAuLi5ERUZBVUxUX1RIRU1FIH07XG4gIHdyYXBwZXJTdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBwYWdlczogUGFnZVtdID0gW107XG4gIGFjdGl2ZVBhZ2VJZCA9ICcnO1xuICBhY3RpdmVQYWdlPzogUGFnZTtcbiAgaXNQb3BwZWRPdXQgPSBmYWxzZTtcblxuICBwcml2YXRlIHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHN0YXRlU2VydmljZTogRGFzaGJvYXJkU3RhdGVTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1sndGhlbWUnXSB8fCBjaGFuZ2VzWydpbml0aWFsTGF5b3V0J10pIHRoaXMuYXBwbHlUaGVtZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hcHBseVRoZW1lKCk7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsTGF5b3V0KSB7XG4gICAgICB0cnkgeyB0aGlzLnN0YXRlU2VydmljZS5sb2FkTGF5b3V0KEpTT04ucGFyc2UodGhpcy5pbml0aWFsTGF5b3V0KSk7IH1cbiAgICAgIGNhdGNoIChlKSB7IGNvbnNvbGUuZXJyb3IoJ1tEYXNoYm9hcmRdIEZhaWxlZCB0byBwYXJzZSBpbml0aWFsTGF5b3V0JywgZSk7IH1cbiAgICB9XG5cbiAgICBjb25zdCBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g/LnJlcGxhY2UoJyMnLCAnJykudHJpbSgpO1xuICAgIGlmIChoYXNoKSB0aGlzLmlzUG9wcGVkT3V0ID0gdHJ1ZTtcblxuICAgIHRoaXMuc3Vicy5hZGQodGhpcy5zdGF0ZVNlcnZpY2UucGFnZXMkLnN1YnNjcmliZShwYWdlcyA9PiB7XG4gICAgICB0aGlzLnBhZ2VzID0gcGFnZXM7XG4gICAgICBpZiAodGhpcy5pc1BvcHBlZE91dCAmJiBoYXNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBoYXNoKTtcbiAgICAgICAgaWYgKHRhcmdldCkgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0QWN0aXZlUGFnZShoYXNoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlUGFnZSgpO1xuICAgIH0pKTtcbiAgICB0aGlzLnN1YnMuYWRkKHRoaXMuc3RhdGVTZXJ2aWNlLmFjdGl2ZVBhZ2VJZCQuc3Vic2NyaWJlKGlkID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlUGFnZUlkID0gaWQ7XG4gICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVBhZ2UoKTtcbiAgICB9KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHsgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7IH1cblxuICBvbkl0ZW1DaGFuZ2VkKHdpZGdldDogV2lkZ2V0KSB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlV2lkZ2V0UG9zaXRpb24oXG4gICAgICB0aGlzLmFjdGl2ZVBhZ2VJZCwgd2lkZ2V0LmlkLCB3aWRnZXQueCwgd2lkZ2V0LnksIHdpZGdldC5jb2xzLCB3aWRnZXQucm93c1xuICAgICk7XG4gIH1cblxuICBvblJlbW92ZVdpZGdldCh3aWRnZXRJZDogc3RyaW5nKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLnJlbW92ZVdpZGdldCh3aWRnZXRJZCk7IH1cblxuICBvblNlbGVjdFBhZ2UoaWQ6IHN0cmluZykgeyB0aGlzLnN0YXRlU2VydmljZS5zZXRBY3RpdmVQYWdlKGlkKTsgfVxuXG4gIG9uQWRkUGFnZSgpIHtcbiAgICBjb25zdCBuYW1lID0gcHJvbXB0KCdXb3Jrc3BhY2UgbmFtZTonLCBgV29ya3NwYWNlICR7dGhpcy5wYWdlcy5sZW5ndGggKyAxfWApO1xuICAgIGlmIChuYW1lKSB0aGlzLnN0YXRlU2VydmljZS5hZGRQYWdlKG5hbWUpO1xuICB9XG5cbiAgb25SZW1vdmVQYWdlKGV2ZW50OiBFdmVudCwgaWQ6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb25maXJtKCdSZW1vdmUgdGhpcyB3b3Jrc3BhY2U/JykpIHRoaXMuc3RhdGVTZXJ2aWNlLnJlbW92ZVBhZ2UoaWQpO1xuICB9XG5cbiAgb25Qb3BPdXQoZXZlbnQ6IEV2ZW50LCBwYWdlSWQ6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnBvcE91dFBhZ2UocGFnZUlkKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZUxheW91dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc2VyaWFsaXplTGF5b3V0KCk7IH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgdGhpcy5yZXNvbHZlZFRoZW1lID0geyAuLi5ERUZBVUxUX1RIRU1FLCAuLi4odGhpcy50aGVtZSA/PyB7fSkgfTtcbiAgICB0aGlzLndyYXBwZXJTdHlsZXMgPSB7XG4gICAgICAnLS1kYXNoLWJnJzogICAgICAgICAgIHRoaXMucmVzb2x2ZWRUaGVtZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAnLS1kYXNoLXBhbmVsLWJnJzogICAgIHRoaXMucmVzb2x2ZWRUaGVtZS5wYW5lbENvbG9yLFxuICAgICAgJy0tZGFzaC1jYXJkLWJnJzogICAgICB0aGlzLnJlc29sdmVkVGhlbWUud2lkZ2V0Q2FyZENvbG9yLFxuICAgICAgJy0tZGFzaC1mb3JlLWNvbG9yJzogICB0aGlzLnJlc29sdmVkVGhlbWUuZm9yZUNvbG9yLFxuICAgICAgJy0tZGFzaC1hY2NlbnQtY29sb3InOiB0aGlzLnJlc29sdmVkVGhlbWUuYWNjZW50Q29sb3IsXG4gICAgICAnLS1kYXNoLWRhbmdlci1jb2xvcic6IHRoaXMucmVzb2x2ZWRUaGVtZS5kYW5nZXJDb2xvcixcbiAgICAgICctLWRhc2gtZm9udC1mYW1pbHknOiAgdGhpcy5yZXNvbHZlZFRoZW1lLmZvbnRGYW1pbHksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWN0aXZlUGFnZSgpIHtcbiAgICB0aGlzLmFjdGl2ZVBhZ2UgPSB0aGlzLnBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSB0aGlzLmFjdGl2ZVBhZ2VJZCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUgd2lkZ2V0IG9uIHRoZSBncmlkLlxuICogVGhlIGxpYiBpcyBjb250ZW50LWFnbm9zdGljIOKAlCBgZGF0YWAgY2FuIGhvbGQgYW55dGhpbmcgdGhlIGNvbnN1bWVyIG5lZWRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpZGdldCB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBHcmlkIGNvbHVtbiAoMC1iYXNlZCkgKi9cbiAgeDogbnVtYmVyO1xuICAvKiogR3JpZCByb3cgKDAtYmFzZWQpICovXG4gIHk6IG51bWJlcjtcbiAgLyoqIE51bWJlciBvZiBjb2x1bW5zIHRoaXMgd2lkZ2V0IHNwYW5zICovXG4gIGNvbHM6IG51bWJlcjtcbiAgLyoqIE51bWJlciBvZiByb3dzIHRoaXMgd2lkZ2V0IHNwYW5zICovXG4gIHJvd3M6IG51bWJlcjtcbiAgLyoqIERpc3BsYXkgdGl0bGUgc2hvd24gaW4gdGhlIGNhcmQgaGVhZGVyICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBwZXItd2lkZ2V0IGNhcmQgYmFja2dyb3VuZCBjb2xvci4gT3ZlcnJpZGVzIHRoZSBnbG9iYWwgdGhlbWUgd2lkZ2V0Q2FyZENvbG9yLiAqL1xuICBjYXJkQ29sb3I/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBcmJpdHJhcnkgY29uc3VtZXIgZGF0YS5cbiAgICogVGhlIGxpYiBzdG9yZXMgYW5kIHN5bmNzIHRoaXMgYnV0IG5ldmVyIGluc3BlY3RzIGl0LlxuICAgKi9cbiAgZGF0YT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB3aWRnZXRzOiBXaWRnZXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRDb25maWcge1xuICBwYWdlczogUGFnZVtdO1xuICBhY3RpdmVQYWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGVtZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGFzaGJvYXJkLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIOKAlCBhbnkgdmFsdWVzIG5vdCBwcm92aWRlZCB3aWxsIGZhbGwgYmFjayB0byBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRUaGVtZSB7XG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBvdmVyYWxsIGRhc2hib2FyZCB3cmFwcGVyLiBEZWZhdWx0OiBgIzAwMDAwMGAgKi9cbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAvKiogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgbWFpbiBjb250ZW50IHBhbmVsLiBEZWZhdWx0OiBgIzFjMWMxZWAgKi9cbiAgcGFuZWxDb2xvcj86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgY29sb3Igb2YgaW5kaXZpZHVhbCB3aWRnZXQgY2FyZHMuIERlZmF1bHQ6IGAjMmMyYzJlYCAqL1xuICB3aWRnZXRDYXJkQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBQcmltYXJ5IGZvcmVncm91bmQvdGV4dCBjb2xvci4gRGVmYXVsdDogYCM4ZThlOTNgICovXG4gIGZvcmVDb2xvcj86IHN0cmluZztcbiAgLyoqIFByaW1hcnkgYWNjZW50IGNvbG9yIChhY3RpdmUgdGFicywgYnV0dG9ucywgZXRjLikuIERlZmF1bHQ6IGAjMGE4NGZmYCAqL1xuICBhY2NlbnRDb2xvcj86IHN0cmluZztcbiAgLyoqIERhbmdlciBjb2xvciB1c2VkIG9uIHJlbW92ZS13aWRnZXQgYnV0dG9uIGhvdmVyLiBEZWZhdWx0OiBgI2ZmNDUzYWAgKi9cbiAgZGFuZ2VyQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBGb250IGZhbWlseSBhcHBsaWVkIHRvIHRoZSB3aG9sZSBkYXNoYm9hcmQuIERlZmF1bHQ6IHN5c3RlbS11aSBzdGFjayAqL1xuICBmb250RmFtaWx5Pzogc3RyaW5nO1xufVxuIl19
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class WidgetRendererComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.editRequested = new EventEmitter();
|
|
6
|
+
this.removeRequested = new EventEmitter();
|
|
7
|
+
this.cardBg = 'var(--dash-card-bg, #2c2c2e)';
|
|
8
|
+
}
|
|
9
|
+
ngOnChanges(changes) {
|
|
10
|
+
if (changes['widget'] || changes['theme']) {
|
|
11
|
+
this.cardBg = this.widget?.cardColor ?? 'var(--dash-card-bg, #2c2c2e)';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
WidgetRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
WidgetRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetRendererComponent, selector: "app-widget-renderer", inputs: { widget: "widget", theme: "theme" }, outputs: { editRequested: "editRequested", removeRequested: "removeRequested" }, usesOnChanges: true, ngImport: i0, template: `
|
|
17
|
+
<div class="widget-card" [style.background]="cardBg">
|
|
18
|
+
<!-- Header: drag handle + title + actions -->
|
|
19
|
+
<div class="widget-header">
|
|
20
|
+
<div class="drag-handle" title="Drag to move">
|
|
21
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
|
|
22
|
+
<circle cx="4" cy="3" r="1.2"/><circle cx="10" cy="3" r="1.2"/>
|
|
23
|
+
<circle cx="4" cy="7" r="1.2"/><circle cx="10" cy="7" r="1.2"/>
|
|
24
|
+
<circle cx="4" cy="11" r="1.2"/><circle cx="10" cy="11" r="1.2"/>
|
|
25
|
+
</svg>
|
|
26
|
+
</div>
|
|
27
|
+
<span class="widget-title">{{ widget.title }}</span>
|
|
28
|
+
<div class="header-actions">
|
|
29
|
+
<button class="btn-icon btn-edit" (click)="editRequested.emit(widget)" title="Edit">
|
|
30
|
+
<i class="la la-pen"></i>
|
|
31
|
+
</button>
|
|
32
|
+
<button class="btn-icon btn-remove" (click)="removeRequested.emit(widget.id)" title="Remove">
|
|
33
|
+
<i class="la la-times"></i>
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Consumer content slot -->
|
|
39
|
+
<div class="widget-body">
|
|
40
|
+
<ng-content></ng-content>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0;width:100%}.widget-card{flex:1;min-height:0;width:100%;display:flex;flex-direction:column;border-radius:24px;overflow:hidden;box-shadow:0 8px 24px #00000040;border:1px solid rgba(255,255,255,.07);transition:box-shadow .2s ease;box-sizing:border-box;background:var(--dash-card-bg, #2c2c2e)}.widget-card:hover{box-shadow:0 12px 32px #00000059}.widget-header{display:flex;align-items:center;gap:8px;padding:12px 14px 8px;flex-shrink:0}.drag-handle{color:#fff3;cursor:grab;display:flex;align-items:center;flex-shrink:0;transition:color .2s}.drag-handle:hover{color:#ffffff80}.widget-title{flex:1;color:#fff;font-size:14px;font-weight:600;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-actions{display:flex;gap:4px;align-items:center;opacity:0;transition:opacity .2s}.widget-card:hover .header-actions{opacity:1}.btn-icon{background:rgba(255,255,255,.07);border:none;color:#ffffff80;cursor:pointer;font-size:11px;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.btn-edit:hover{background:rgba(10,132,255,.22);color:var(--dash-accent-color, #0a84ff)}.btn-remove:hover{background:rgba(255,69,58,.22);color:var(--dash-danger-color, #ff453a)}.widget-body{flex:1;min-height:0;display:flex;flex-direction:column;padding:0 14px 14px;overflow:hidden}\n"] });
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetRendererComponent, decorators: [{
|
|
45
|
+
type: Component,
|
|
46
|
+
args: [{ selector: 'app-widget-renderer', template: `
|
|
47
|
+
<div class="widget-card" [style.background]="cardBg">
|
|
48
|
+
<!-- Header: drag handle + title + actions -->
|
|
49
|
+
<div class="widget-header">
|
|
50
|
+
<div class="drag-handle" title="Drag to move">
|
|
51
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
|
|
52
|
+
<circle cx="4" cy="3" r="1.2"/><circle cx="10" cy="3" r="1.2"/>
|
|
53
|
+
<circle cx="4" cy="7" r="1.2"/><circle cx="10" cy="7" r="1.2"/>
|
|
54
|
+
<circle cx="4" cy="11" r="1.2"/><circle cx="10" cy="11" r="1.2"/>
|
|
55
|
+
</svg>
|
|
56
|
+
</div>
|
|
57
|
+
<span class="widget-title">{{ widget.title }}</span>
|
|
58
|
+
<div class="header-actions">
|
|
59
|
+
<button class="btn-icon btn-edit" (click)="editRequested.emit(widget)" title="Edit">
|
|
60
|
+
<i class="la la-pen"></i>
|
|
61
|
+
</button>
|
|
62
|
+
<button class="btn-icon btn-remove" (click)="removeRequested.emit(widget.id)" title="Remove">
|
|
63
|
+
<i class="la la-times"></i>
|
|
64
|
+
</button>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- Consumer content slot -->
|
|
69
|
+
<div class="widget-body">
|
|
70
|
+
<ng-content></ng-content>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
`, styles: [":host{display:flex;flex-direction:column;flex:1;min-height:0;width:100%}.widget-card{flex:1;min-height:0;width:100%;display:flex;flex-direction:column;border-radius:24px;overflow:hidden;box-shadow:0 8px 24px #00000040;border:1px solid rgba(255,255,255,.07);transition:box-shadow .2s ease;box-sizing:border-box;background:var(--dash-card-bg, #2c2c2e)}.widget-card:hover{box-shadow:0 12px 32px #00000059}.widget-header{display:flex;align-items:center;gap:8px;padding:12px 14px 8px;flex-shrink:0}.drag-handle{color:#fff3;cursor:grab;display:flex;align-items:center;flex-shrink:0;transition:color .2s}.drag-handle:hover{color:#ffffff80}.widget-title{flex:1;color:#fff;font-size:14px;font-weight:600;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-actions{display:flex;gap:4px;align-items:center;opacity:0;transition:opacity .2s}.widget-card:hover .header-actions{opacity:1}.btn-icon{background:rgba(255,255,255,.07);border:none;color:#ffffff80;cursor:pointer;font-size:11px;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.btn-edit:hover{background:rgba(10,132,255,.22);color:var(--dash-accent-color, #0a84ff)}.btn-remove:hover{background:rgba(255,69,58,.22);color:var(--dash-danger-color, #ff453a)}.widget-body{flex:1;min-height:0;display:flex;flex-direction:column;padding:0 14px 14px;overflow:hidden}\n"] }]
|
|
74
|
+
}], propDecorators: { widget: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}], theme: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], editRequested: [{
|
|
79
|
+
type: Output
|
|
80
|
+
}], removeRequested: [{
|
|
81
|
+
type: Output
|
|
82
|
+
}] } });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvd2lkZ2V0LXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUN2QyxNQUFNLGVBQWUsQ0FBQzs7QUEwSHZCLE1BQU0sT0FBTyx1QkFBdUI7SUF2SHBDO1FBMkhZLGtCQUFhLEdBQUssSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM3QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFdkQsV0FBTSxHQUFHLDhCQUE4QixDQUFDO0tBT3pDO0lBTEMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLDhCQUE4QixDQUFDO1NBQ3hFO0lBQ0gsQ0FBQzs7cUhBYlUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsK01Bckh4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUOzRGQTBGVSx1QkFBdUI7a0JBdkhuQyxTQUFTOytCQUNFLHFCQUFxQixZQUNyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUOzhCQTJGUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaWRnZXQsIERhc2hib2FyZFRoZW1lIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd2lkZ2V0LXJlbmRlcmVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0LWNhcmRcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjYXJkQmdcIj5cbiAgICAgIDwhLS0gSGVhZGVyOiBkcmFnIGhhbmRsZSArIHRpdGxlICsgYWN0aW9ucyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhhbmRsZVwiIHRpdGxlPVwiRHJhZyB0byBtb3ZlXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjRcIiBjeT1cIjNcIiAgcj1cIjEuMlwiLz48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjNcIiAgcj1cIjEuMlwiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI0XCIgY3k9XCI3XCIgIHI9XCIxLjJcIi8+PGNpcmNsZSBjeD1cIjEwXCIgY3k9XCI3XCIgIHI9XCIxLjJcIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNFwiIGN5PVwiMTFcIiByPVwiMS4yXCIvPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTFcIiByPVwiMS4yXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ3aWRnZXQtdGl0bGVcIj57eyB3aWRnZXQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4taWNvbiBidG4tZWRpdFwiICAgKGNsaWNrKT1cImVkaXRSZXF1ZXN0ZWQuZW1pdCh3aWRnZXQpXCIgIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS1wZW5cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1pY29uIGJ0bi1yZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlUmVxdWVzdGVkLmVtaXQod2lkZ2V0LmlkKVwiIHRpdGxlPVwiUmVtb3ZlXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnN1bWVyIGNvbnRlbnQgc2xvdCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtYm9keVwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAud2lkZ2V0LWNhcmQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC4yNSk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDcpO1xuICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1jYXJkLWJnLCAjMmMyYzJlKTtcbiAgICB9XG4gICAgLndpZGdldC1jYXJkOmhvdmVyIHtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTJweCAzMnB4IHJnYmEoMCwwLDAsMC4zNSk7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIEhlYWRlciDilIDilIAgKi9cbiAgICAud2lkZ2V0LWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgcGFkZGluZzogMTJweCAxNHB4IDhweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAuZHJhZy1oYW5kbGUge1xuICAgICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcbiAgICAgIGN1cnNvcjogZ3JhYjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzO1xuICAgIH1cbiAgICAuZHJhZy1oYW5kbGU6aG92ZXIgeyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjUpOyB9XG4gICAgLndpZGdldC10aXRsZSB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB9XG4gICAgLmhlYWRlci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xuICAgIH1cbiAgICAud2lkZ2V0LWNhcmQ6aG92ZXIgLmhlYWRlci1hY3Rpb25zIHsgb3BhY2l0eTogMTsgfVxuXG4gICAgLmJ0bi1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjUpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLmJ0bi1lZGl0OmhvdmVyICAgeyBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEzMiwyNTUsMC4yMik7ICBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IsICMwYTg0ZmYpOyB9XG4gICAgLmJ0bi1yZW1vdmU6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSw2OSw1OCwwLjIyKTsgICBjb2xvcjogdmFyKC0tZGFzaC1kYW5nZXItY29sb3IsICNmZjQ1M2EpOyB9XG5cbiAgICAvKiDilIDilIAgQm9keSDilIDilIAgKi9cbiAgICAud2lkZ2V0LWJvZHkge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBhZGRpbmc6IDAgMTRweCAxNHB4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldFJlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgd2lkZ2V0ITogV2lkZ2V0O1xuICBASW5wdXQoKSB0aGVtZT86IFJlcXVpcmVkPERhc2hib2FyZFRoZW1lPjtcblxuICBAT3V0cHV0KCkgZWRpdFJlcXVlc3RlZCAgID0gbmV3IEV2ZW50RW1pdHRlcjxXaWRnZXQ+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjYXJkQmcgPSAndmFyKC0tZGFzaC1jYXJkLWJnLCAjMmMyYzJlKSc7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWyd3aWRnZXQnXSB8fCBjaGFuZ2VzWyd0aGVtZSddKSB7XG4gICAgICB0aGlzLmNhcmRCZyA9IHRoaXMud2lkZ2V0Py5jYXJkQ29sb3IgPz8gJ3ZhcigtLWRhc2gtY2FyZC1iZywgIzJjMmMyZSknO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of @ogidor/dashboard
|
|
3
|
+
*/
|
|
4
|
+
export * from './app/app.module';
|
|
5
|
+
export * from './app/dashboard.component';
|
|
6
|
+
export * from './app/widget-renderer.component';
|
|
7
|
+
export * from './app/custom-grid.component';
|
|
8
|
+
export * from './app/dashboard-state.service';
|
|
9
|
+
export * from './app/models';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAb2dpZG9yL2Rhc2hib2FyZFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYXBwL2FwcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAvZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC93aWRnZXQtcmVuZGVyZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXBwL2N1c3RvbS1ncmlkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9kYXNoYm9hcmQtc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC9tb2RlbHMnO1xuIl19
|