@eurosat/buttons 12.0.0 → 14.0.1

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.
Files changed (33) hide show
  1. package/esm2020/eurosat-buttons.mjs +5 -0
  2. package/esm2020/lib/components/dialog-confirm/dialog-confirm.component.mjs +56 -0
  3. package/esm2020/lib/components/dialog-form/dialog-form.component.mjs +36 -0
  4. package/esm2020/lib/es-buttons.component.mjs +200 -0
  5. package/esm2020/lib/es-buttons.module.mjs +59 -0
  6. package/fesm2015/eurosat-buttons.mjs +342 -0
  7. package/fesm2015/eurosat-buttons.mjs.map +1 -0
  8. package/fesm2020/eurosat-buttons.mjs +342 -0
  9. package/fesm2020/eurosat-buttons.mjs.map +1 -0
  10. package/index.d.ts +5 -0
  11. package/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -0
  12. package/lib/components/dialog-form/dialog-form.component.d.ts +3 -0
  13. package/lib/es-buttons.component.d.ts +3 -0
  14. package/lib/es-buttons.module.d.ts +16 -0
  15. package/package.json +25 -13
  16. package/bundles/eurosat-buttons.umd.js +0 -351
  17. package/bundles/eurosat-buttons.umd.js.map +0 -1
  18. package/bundles/eurosat-buttons.umd.min.js +0 -2
  19. package/bundles/eurosat-buttons.umd.min.js.map +0 -1
  20. package/esm2015/eurosat-buttons.js +0 -7
  21. package/esm2015/lib/components/dialog-confirm/dialog-confirm.component.js +0 -56
  22. package/esm2015/lib/components/dialog-form/dialog-form.component.js +0 -38
  23. package/esm2015/lib/es-buttons.component.js +0 -198
  24. package/esm2015/lib/es-buttons.module.js +0 -41
  25. package/eurosat-buttons.d.ts +0 -6
  26. package/eurosat-buttons.metadata.json +0 -1
  27. package/fesm2015/eurosat-buttons.js +0 -338
  28. package/fesm2015/eurosat-buttons.js.map +0 -1
  29. /package/{esm2015/lib/components/dialog-result.js → esm2020/lib/components/dialog-result.mjs} +0 -0
  30. /package/{esm2015/lib/model/es-button-action.js → esm2020/lib/model/es-button-action.mjs} +0 -0
  31. /package/{esm2015/lib/model/es-button-server-response.js → esm2020/lib/model/es-button-server-response.mjs} +0 -0
  32. /package/{esm2015/lib/model/es-button.interface.js → esm2020/lib/model/es-button.interface.mjs} +0 -0
  33. /package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
@@ -1,338 +0,0 @@
1
- import { EventEmitter, Component, Output, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';
2
- import { Router } from '@angular/router';
3
- import { MatSnackBarConfig, MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
4
- import { EsSnackBarPanelClass } from '@eurosat/snackbar';
5
- import { HttpService } from '@eurosat/http';
6
- import { EsIcon, EsIconModule } from '@eurosat/icon';
7
- import { MatDialogRef } from '@angular/material/dialog';
8
- import { EsDialogService, EsDialogModule } from '@eurosat/dialog';
9
- import { EsFormResponseMessageType, EsFormModule } from '@eurosat/form';
10
- import { take } from 'rxjs/internal/operators';
11
- import { CommonModule } from '@angular/common';
12
- import { MatButtonModule } from '@angular/material/button';
13
- import { MatMenuModule } from '@angular/material/menu';
14
- import { MatTooltipModule } from '@angular/material/tooltip';
15
- import { TranslateModule } from '@ngx-translate/core';
16
-
17
- class EsButtonAction {
18
- }
19
- EsButtonAction.ACTION_DIALOG_CONFIRM = 'dialog-confirm';
20
- EsButtonAction.ACTION_DIALOG_DELETE = 'dialog-delete';
21
- EsButtonAction.ACTION_DIALOG_FORM = 'dialog-form';
22
- EsButtonAction.ACTION_CARD_CONTENT_FORM = 'card-content-form';
23
- EsButtonAction.ACTION_CARD_CONTENT_WIZARD = 'card-content-wizard'; // todo asi zrusit
24
- EsButtonAction.ACTION_CHANGE_CARD_CONTENT = 'change-card-content'; // mozna zrusit ? je kuli neemitu clicku na button
25
- EsButtonAction.ACTION_DOWNLOAD = 'download';
26
- EsButtonAction.ACTION_REQUEST = 'request';
27
- EsButtonAction.ACTION_ROUTER_NAVIGATE = 'router-navigate';
28
- EsButtonAction.ACTION_WINDOW_LOCATION = 'open-link';
29
-
30
- class DialogConfirmComponent {
31
- constructor(dialogRef, snackBar, ds) {
32
- this.dialogRef = dialogRef;
33
- this.snackBar = snackBar;
34
- this.ds = ds;
35
- this.submit = new EventEmitter();
36
- this.activeRequest = false;
37
- const data = this.ds.getData();
38
- this.message = data.message;
39
- this.url = data.url;
40
- }
41
- confirm() {
42
- this.activeRequest = true;
43
- this.ds.httpPost(this.url, null).subscribe((response) => {
44
- this.activeRequest = false;
45
- const config = new MatSnackBarConfig();
46
- config.duration = 2000;
47
- if (response.type === EsFormResponseMessageType.TYPE_OK) {
48
- config.panelClass = EsSnackBarPanelClass.SUCCESS;
49
- this.submit.emit();
50
- }
51
- else {
52
- config.panelClass = EsSnackBarPanelClass.DANGER;
53
- }
54
- this.snackBar.open(response.message, null, config);
55
- const result = {
56
- clickedYes: true,
57
- serverResponse: response
58
- };
59
- this.dialogRef.close(result);
60
- });
61
- }
62
- }
63
- DialogConfirmComponent.decorators = [
64
- { type: Component, args: [{
65
- selector: 'dialog-confirm',
66
- template: "<p>{{message}}</p>\n<div class=\"button-container\">\n <mat-spinner *ngIf=\"activeRequest\" [diameter]=\"36\"></mat-spinner>\n <ng-container *ngIf=\"!activeRequest\">\n <button type=\"button\"\n color=\"accent\"\n mat-raised-button\n (click)=\"confirm()\"> {{'an.common.ano' | translate}}\n </button>\n <button type=\"button\"\n color=\"accent\"\n mat-raised-button\n (click)=\"dialogRef.close({clickedYes: false})\">{{'an.common.ne' | translate}}\n </button>\n </ng-container>\n</div>\n",
67
- styles: ["button:not(:last-child){margin-right:20px}.button-container{min-height:36px;min-width:196px;position:relative;text-align:center}.button-container mat-spinner{position:absolute!important;left:calc(50% - 18px);top:calc(50% - 18px)}"]
68
- },] }
69
- ];
70
- /** @nocollapse */
71
- DialogConfirmComponent.ctorParameters = () => [
72
- { type: MatDialogRef },
73
- { type: MatSnackBar },
74
- { type: EsDialogService }
75
- ];
76
- DialogConfirmComponent.propDecorators = {
77
- submit: [{ type: Output }]
78
- };
79
-
80
- class DialogFormComponent {
81
- constructor(dialogRef, ds) {
82
- this.dialogRef = dialogRef;
83
- this.cols = 1;
84
- this.maxFormHeight = window.innerHeight - 60;
85
- const data = ds.getData();
86
- this.formUrl = data.url;
87
- }
88
- submit(value) {
89
- // sem se to dostane jen pri success ulozeni formu
90
- const result = {
91
- clickedYes: true
92
- };
93
- this.dialogRef.close(result);
94
- // pokud bysme chteli form.value
95
- // this.dialogRef.close(value);
96
- // console.log('form value v parent', value);
97
- }
98
- getWindowHeight() {
99
- this.maxFormHeight = window.innerHeight - 60;
100
- }
101
- }
102
- DialogFormComponent.decorators = [
103
- { type: Component, args: [{
104
- selector: 'dialog-form',
105
- template: "<div class=\"es-form-container\" [style.max-height]=\"(maxFormHeight - 106) + 'px'\">\n <es-form [formUrl]=\"formUrl\"\n [dynamicForm]=\"esForm\"\n [cols]=\"cols\"\n (submit)=\"submit($event)\">\n </es-form>\n</div>\n",
106
- styles: [".es-form-container{overflow:auto;margin-top:24px;position:relative}"]
107
- },] }
108
- ];
109
- /** @nocollapse */
110
- DialogFormComponent.ctorParameters = () => [
111
- { type: MatDialogRef },
112
- { type: EsDialogService }
113
- ];
114
-
115
- // todo translates
116
- class EsButtonsComponent {
117
- constructor(router, dialog, snackBar, http) {
118
- this.router = router;
119
- this.dialog = dialog;
120
- this.snackBar = snackBar;
121
- this.http = http;
122
- this.parentWidth = 40; // default 40 = 1 button
123
- this.buttons = []; // normal input
124
- this.forceMenu = false; // pokud chci zobrazit ... menu i pro jeden buttonek, na realtimu pouzito
125
- this.buttonClick = new EventEmitter();
126
- this.reload = new EventEmitter();
127
- this.dialogCreated = new EventEmitter();
128
- this.serverResponse = new EventEmitter();
129
- this.menuVisible = false;
130
- this.buttonWidth = 40; // todo ViewChild, sirka buttonu ?
131
- this.visibleButtons = [];
132
- this.hiddenButtons = [];
133
- this.esIcon = EsIcon;
134
- this._width = 0;
135
- }
136
- showMenu() {
137
- return this.getHiddenButtons() && this.getHiddenButtons().length > 0 && this.getHiddenButtons().length !== 1;
138
- }
139
- countVisible() {
140
- return Math.floor((this._width) / this.buttonWidth) - 1;
141
- }
142
- getVisibleButtons() {
143
- if (this.buttons && this.buttons.length > 0) {
144
- return this.buttons.filter(button => {
145
- if (this.buttons.indexOf(button) < this.countVisible()
146
- || (this.getHiddenButtons().length === 1 && !this.forceMenu)) {
147
- return true;
148
- }
149
- });
150
- }
151
- }
152
- getHiddenButtons() {
153
- if (this.buttons && this.buttons.length > 0) {
154
- return this.buttons.filter(button => {
155
- if (this.buttons.indexOf(button) >= this.countVisible()) {
156
- return true;
157
- }
158
- });
159
- }
160
- }
161
- ngOnChanges(simpleChange) {
162
- if (simpleChange['parentWidth']) {
163
- if (this.parentWidth > 0) {
164
- this._width = this.parentWidth;
165
- this.recalculateButtons();
166
- }
167
- }
168
- if (simpleChange['buttons']) {
169
- if (typeof this.buttons === 'string') {
170
- this.buttons = JSON.parse(this.buttons);
171
- }
172
- this.recalculateButtons();
173
- }
174
- }
175
- recalculateButtons() {
176
- this.menuVisible = this.showMenu();
177
- this.visibleButtons = this.getVisibleButtons();
178
- this.hiddenButtons = this.getHiddenButtons();
179
- }
180
- handleAction(button) {
181
- if (button.action === EsButtonAction.ACTION_DIALOG_CONFIRM) {
182
- this.openConfirm(button);
183
- }
184
- if (button.action === EsButtonAction.ACTION_DIALOG_DELETE) {
185
- this.openDelete(button);
186
- }
187
- if (button.action === EsButtonAction.ACTION_DIALOG_FORM) {
188
- this.openForm(button);
189
- }
190
- if (button.action === EsButtonAction.ACTION_DOWNLOAD) {
191
- this.http.get(button.url, { responseType: 'blob', observe: 'response' }).subscribe(response => {
192
- const filename = response.headers.get('Content-Disposition').split('filename=')[1];
193
- if (window.navigator && window.navigator.msSaveOrOpenBlob) {
194
- window.navigator.msSaveBlob(response.body, filename);
195
- }
196
- else {
197
- const link = document.createElement('a');
198
- link.setAttribute('href', window.URL.createObjectURL(response.body));
199
- link.setAttribute('download', filename);
200
- link.style.visibility = 'hidden';
201
- document.body.appendChild(link);
202
- link.click();
203
- document.body.removeChild(link);
204
- }
205
- });
206
- }
207
- if (button.action === EsButtonAction.ACTION_REQUEST) {
208
- this.http.get(button.url).subscribe((response) => {
209
- const config = new MatSnackBarConfig();
210
- config.duration = 2000;
211
- if (response.type === EsFormResponseMessageType.TYPE_OK) {
212
- config.panelClass = EsSnackBarPanelClass.SUCCESS;
213
- }
214
- else {
215
- config.panelClass = EsSnackBarPanelClass.DANGER;
216
- }
217
- this.snackBar.open(response.message, null, config);
218
- this.reload.emit(true);
219
- this.serverResponse.emit({ button: button, response: response });
220
- });
221
- }
222
- if (button.action === EsButtonAction.ACTION_ROUTER_NAVIGATE) {
223
- this.router.navigateByUrl(button.url);
224
- }
225
- if (button.action === EsButtonAction.ACTION_WINDOW_LOCATION) {
226
- window.location.href = button.url;
227
- }
228
- this.buttonClick.emit(button);
229
- }
230
- // handleSubMenuAction(button: EsButton) {
231
- // // todo asi predelat na md2 menu
232
- // // todo nevim jestli se zpropaguje click kdyz je to zanoreny pres es-card-header
233
- // this.buttonClick.emit(button);
234
- // }
235
- openForm(button) {
236
- const config = {
237
- title: button.title,
238
- data: {
239
- url: button.url
240
- }
241
- };
242
- const dialogRef = this.dialog.open(DialogFormComponent, config);
243
- this.dialogCreated.emit(dialogRef);
244
- dialogRef.afterClosed().pipe(take(1)).subscribe((res) => {
245
- if (res && res.clickedYes) {
246
- this.reload.emit(true);
247
- if (res.serverResponse) {
248
- this.serverResponse.emit({ button: button, response: res.serverResponse });
249
- }
250
- }
251
- });
252
- }
253
- openDelete(button) {
254
- this.openConfirm(button);
255
- }
256
- openConfirm(button) {
257
- const config = {
258
- title: button.title,
259
- data: {
260
- message: button.message,
261
- url: button.url
262
- }
263
- };
264
- const dialogRef = this.dialog.open(DialogConfirmComponent, config);
265
- this.dialogCreated.emit(dialogRef);
266
- dialogRef.afterClosed().pipe(take(1)).subscribe((res) => {
267
- if (res && res.clickedYes) {
268
- this.reload.emit(true);
269
- if (res.serverResponse) {
270
- this.serverResponse.emit({ button: button, response: res.serverResponse });
271
- }
272
- }
273
- });
274
- }
275
- }
276
- EsButtonsComponent.decorators = [
277
- { type: Component, args: [{
278
- selector: 'es-buttons',
279
- template: "<ng-container *ngIf=\"visibleButtons && visibleButtons.length > 0\">\n <button *ngIf=\"visibleButtons.length > 0\"\n mat-icon-button\n [disabled]=\"visibleButtons[0].disabled === true\"\n [matTooltip]=\"visibleButtons[0].tooltip? visibleButtons[0].tooltip : visibleButtons[0].title\"\n (click)=\"handleAction(visibleButtons[0])\">\n <es-icon [color]=\"visibleButtons[0].color\"\n [themeColor]=\"visibleButtons[0].themeColor\"\n [icon]=\"visibleButtons[0].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 1\"\n mat-icon-button\n [disabled]=\"visibleButtons[1].disabled === true\"\n [matTooltip]=\"visibleButtons[1].tooltip? visibleButtons[1].tooltip : visibleButtons[1].title\"\n (click)=\"handleAction(visibleButtons[1])\">\n <es-icon [color]=\"visibleButtons[1].color\"\n [themeColor]=\"visibleButtons[1].themeColor\"\n [icon]=\"visibleButtons[1].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 2\"\n mat-icon-button\n [disabled]=\"visibleButtons[2].disabled === true\"\n [matTooltip]=\"visibleButtons[2].tooltip? visibleButtons[2].tooltip : visibleButtons[2].title\"\n (click)=\"handleAction(visibleButtons[2])\">\n <es-icon [color]=\"visibleButtons[2].color\"\n [themeColor]=\"visibleButtons[2].themeColor\"\n [icon]=\"visibleButtons[2].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 3\"\n mat-icon-button\n [disabled]=\"visibleButtons[3].disabled === true\"\n [matTooltip]=\"visibleButtons[3].tooltip? visibleButtons[3].tooltip : visibleButtons[3].title\"\n (click)=\"handleAction(visibleButtons[3])\">\n <es-icon [color]=\"visibleButtons[3].color\"\n [themeColor]=\"visibleButtons[3].themeColor\"\n [icon]=\"visibleButtons[3].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 4\"\n mat-icon-button\n [disabled]=\"visibleButtons[4].disabled === true\"\n [matTooltip]=\"visibleButtons[4].tooltip? visibleButtons[4].tooltip : visibleButtons[4].title\"\n (click)=\"handleAction(visibleButtons[4])\">\n <es-icon [color]=\"visibleButtons[4].color\"\n [themeColor]=\"visibleButtons[4].themeColor\"\n [icon]=\"visibleButtons[4].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 5\"\n mat-icon-button\n [disabled]=\"visibleButtons[5].disabled === true\"\n [matTooltip]=\"visibleButtons[5].tooltip? visibleButtons[5].tooltip : visibleButtons[5].title\"\n (click)=\"handleAction(visibleButtons[5])\">\n <es-icon [color]=\"visibleButtons[5].color\"\n [themeColor]=\"visibleButtons[5].themeColor\"\n [icon]=\"visibleButtons[5].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 6\"\n mat-icon-button\n [disabled]=\"visibleButtons[6].disabled === true\"\n [matTooltip]=\"visibleButtons[6].tooltip? visibleButtons[6].tooltip : visibleButtons[6].title\"\n (click)=\"handleAction(visibleButtons[6])\">\n <es-icon [color]=\"visibleButtons[6].color\"\n [themeColor]=\"visibleButtons[6].themeColor\"\n [icon]=\"visibleButtons[6].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 7\"\n mat-icon-button\n [disabled]=\"visibleButtons[7].disabled === true\"\n [matTooltip]=\"visibleButtons[7].tooltip? visibleButtons[7].tooltip : visibleButtons[7].title\"\n (click)=\"handleAction(visibleButtons[7])\">\n <es-icon [color]=\"visibleButtons[7].color\"\n [themeColor]=\"visibleButtons[7].themeColor\"\n [icon]=\"visibleButtons[7].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 8\"\n mat-icon-button\n [disabled]=\"visibleButtons[8].disabled === true\"\n [matTooltip]=\"visibleButtons[8].tooltip? visibleButtons[8].tooltip : visibleButtons[8].title\"\n (click)=\"handleAction(visibleButtons[8])\">\n <es-icon [color]=\"visibleButtons[8].color\"\n [themeColor]=\"visibleButtons[8].themeColor\"\n [icon]=\"visibleButtons[8].icon\"></es-icon>\n </button>\n <button *ngIf=\"visibleButtons.length > 9\"\n mat-icon-button\n [disabled]=\"visibleButtons[9].disabled === true\"\n [matTooltip]=\"visibleButtons[9].tooltip? visibleButtons[9].tooltip : visibleButtons[9].title\"\n (click)=\"handleAction(visibleButtons[9])\">\n <es-icon [color]=\"visibleButtons[9].color\"\n [themeColor]=\"visibleButtons[9].themeColor\"\n [icon]=\"visibleButtons[9].icon\"></es-icon>\n </button>\n</ng-container>\n\n\n<button *ngIf=\"menuVisible || forceMenu\"\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [matTooltip]=\"'an.more' | translate\">\n <es-icon [icon]=\"esIcon.MORE_VERT\"></es-icon>\n</button>\n\n\n<mat-menu #menu=\"matMenu\"\n [overlapTrigger]=\"false\"\n yPosition=\"below\"\n xPosition=\"before\">\n <ng-container *ngIf=\"hiddenButtons && hiddenButtons.length > 0\">\n <button *ngIf=\"hiddenButtons.length > 0\"\n mat-menu-item\n [disabled]=\"hiddenButtons[0].disabled === true\"\n (click)=\"handleAction(hiddenButtons[0])\">\n <es-icon [color]=\"hiddenButtons[0].color\"\n [themeColor]=\"hiddenButtons[0].themeColor\"\n [icon]=\"hiddenButtons[0].icon\"></es-icon>\n <span>{{hiddenButtons[0].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 1\"\n mat-menu-item\n [disabled]=\"hiddenButtons[1].disabled === true\"\n (click)=\"handleAction(hiddenButtons[1])\">\n <es-icon [color]=\"hiddenButtons[1].color\"\n [themeColor]=\"hiddenButtons[1].themeColor\"\n [icon]=\"hiddenButtons[1].icon\"></es-icon>\n <span>{{hiddenButtons[1].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 2\"\n mat-menu-item\n [disabled]=\"hiddenButtons[2].disabled === true\"\n (click)=\"handleAction(hiddenButtons[2])\">\n <es-icon [color]=\"hiddenButtons[2].color\"\n [themeColor]=\"hiddenButtons[2].themeColor\"\n [icon]=\"hiddenButtons[2].icon\"></es-icon>\n <span>{{hiddenButtons[2].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 3\"\n mat-menu-item\n [disabled]=\"hiddenButtons[3].disabled === true\"\n (click)=\"handleAction(hiddenButtons[3])\">\n <es-icon [color]=\"hiddenButtons[3].color\"\n [themeColor]=\"hiddenButtons[3].themeColor\"\n [icon]=\"hiddenButtons[3].icon\"></es-icon>\n <span>{{hiddenButtons[3].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 4\"\n mat-menu-item\n [disabled]=\"hiddenButtons[4].disabled === true\"\n (click)=\"handleAction(hiddenButtons[4])\">\n <es-icon [color]=\"hiddenButtons[4].color\"\n [themeColor]=\"hiddenButtons[4].themeColor\"\n [icon]=\"hiddenButtons[4].icon\"></es-icon>\n <span>{{hiddenButtons[4].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 5\"\n mat-menu-item\n [disabled]=\"hiddenButtons[5].disabled === true\"\n (click)=\"handleAction(hiddenButtons[5])\">\n <es-icon [color]=\"hiddenButtons[5].color\"\n [themeColor]=\"hiddenButtons[5].themeColor\"\n [icon]=\"hiddenButtons[5].icon\"></es-icon>\n <span>{{hiddenButtons[5].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 6\"\n mat-menu-item\n [disabled]=\"hiddenButtons[6].disabled === true\"\n (click)=\"handleAction(hiddenButtons[6])\">\n <es-icon [color]=\"hiddenButtons[6].color\"\n [themeColor]=\"hiddenButtons[6].themeColor\"\n [icon]=\"hiddenButtons[6].icon\"></es-icon>\n <span>{{hiddenButtons[6].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 7\"\n mat-menu-item\n [disabled]=\"hiddenButtons[7].disabled === true\"\n (click)=\"handleAction(hiddenButtons[7])\">\n <es-icon [color]=\"hiddenButtons[7].color\"\n [themeColor]=\"hiddenButtons[7].themeColor\"\n [icon]=\"hiddenButtons[7].icon\"></es-icon>\n <span>{{hiddenButtons[7].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 8\"\n mat-menu-item\n [disabled]=\"hiddenButtons[8].disabled === true\"\n (click)=\"handleAction(hiddenButtons[8])\">\n <es-icon [color]=\"hiddenButtons[8].color\"\n [themeColor]=\"hiddenButtons[8].themeColor\"\n [icon]=\"hiddenButtons[8].icon\"></es-icon>\n <span>{{hiddenButtons[8].title}}</span>\n </button>\n <button *ngIf=\"hiddenButtons.length > 9\"\n mat-menu-item\n [disabled]=\"hiddenButtons[9].disabled === true\"\n (click)=\"handleAction(hiddenButtons[9])\">\n <es-icon [color]=\"hiddenButtons[9].color\"\n [themeColor]=\"hiddenButtons[9].themeColor\"\n [icon]=\"hiddenButtons[9].icon\"></es-icon>\n <span>{{hiddenButtons[9].title}}</span>\n </button>\n </ng-container>\n</mat-menu>\n",
280
- changeDetection: ChangeDetectionStrategy.OnPush,
281
- styles: [":host{float:right}"]
282
- },] }
283
- ];
284
- /** @nocollapse */
285
- EsButtonsComponent.ctorParameters = () => [
286
- { type: Router },
287
- { type: EsDialogService },
288
- { type: MatSnackBar },
289
- { type: HttpService }
290
- ];
291
- EsButtonsComponent.propDecorators = {
292
- parentWidth: [{ type: Input }],
293
- buttons: [{ type: Input }],
294
- forceMenu: [{ type: Input }],
295
- buttonClick: [{ type: Output }],
296
- reload: [{ type: Output }],
297
- dialogCreated: [{ type: Output }],
298
- serverResponse: [{ type: Output }]
299
- };
300
-
301
- class EsButtonsModule {
302
- }
303
- EsButtonsModule.decorators = [
304
- { type: NgModule, args: [{
305
- imports: [
306
- CommonModule,
307
- MatButtonModule,
308
- MatTooltipModule,
309
- MatMenuModule,
310
- MatSnackBarModule,
311
- TranslateModule.forChild(),
312
- EsIconModule,
313
- EsDialogModule,
314
- EsFormModule,
315
- ],
316
- declarations: [
317
- EsButtonsComponent,
318
- DialogConfirmComponent,
319
- DialogFormComponent,
320
- ],
321
- exports: [EsButtonsComponent],
322
- entryComponents: [
323
- DialogConfirmComponent,
324
- DialogFormComponent,
325
- ],
326
- },] }
327
- ];
328
-
329
- /*
330
- * Public API Surface of es-buttons
331
- */
332
-
333
- /**
334
- * Generated bundle index. Do not edit.
335
- */
336
-
337
- export { EsButtonAction, EsButtonsComponent, EsButtonsModule, DialogConfirmComponent as ɵa, DialogFormComponent as ɵb };
338
- //# sourceMappingURL=eurosat-buttons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eurosat-buttons.js","sources":["../../../projects/buttons/src/lib/model/es-button-action.ts","../../../projects/buttons/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../projects/buttons/src/lib/components/dialog-form/dialog-form.component.ts","../../../projects/buttons/src/lib/es-buttons.component.ts","../../../projects/buttons/src/lib/es-buttons.module.ts","../../../projects/buttons/src/public_api.ts","../../../projects/buttons/src/eurosat-buttons.ts"],"sourcesContent":["export class EsButtonAction {\n\n public static ACTION_DIALOG_CONFIRM = 'dialog-confirm';\n public static ACTION_DIALOG_DELETE = 'dialog-delete';\n public static ACTION_DIALOG_FORM = 'dialog-form';\n public static ACTION_CARD_CONTENT_FORM = 'card-content-form';\n public static ACTION_CARD_CONTENT_WIZARD = 'card-content-wizard'; // todo asi zrusit\n public static ACTION_CHANGE_CARD_CONTENT = 'change-card-content'; // mozna zrusit ? je kuli neemitu clicku na button\n public static ACTION_DOWNLOAD = 'download';\n public static ACTION_REQUEST = 'request';\n public static ACTION_ROUTER_NAVIGATE = 'router-navigate';\n public static ACTION_WINDOW_LOCATION = 'open-link';\n}\n","import {Component, EventEmitter, Output} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarConfig} from '@angular/material/snack-bar';\nimport {EsSnackBarPanelClass} from '@eurosat/snackbar';\nimport {EsDialogService} from '@eurosat/dialog';\nimport { DialogResult } from '../dialog-result';\nimport { EsFormResponseMessage, EsFormResponseMessageType } from '@eurosat/form';\n\n\n@Component({\n selector: 'dialog-confirm',\n templateUrl: './dialog-confirm.component.html',\n styleUrls: ['./dialog-confirm.component.scss']\n})\nexport class DialogConfirmComponent {\n\n @Output() submit: EventEmitter<any> = new EventEmitter<any>();\n public message: string;\n public url: string;\n activeRequest = false;\n\n constructor(\n public dialogRef: MatDialogRef<DialogConfirmComponent>,\n private snackBar: MatSnackBar,\n private ds: EsDialogService\n ) {\n const data = this.ds.getData();\n this.message = data.message;\n this.url = data.url;\n }\n\n confirm() {\n this.activeRequest = true;\n this.ds.httpPost(this.url, null).subscribe((response: EsFormResponseMessage) => {\n this.activeRequest = false;\n const config = new MatSnackBarConfig();\n config.duration = 2000;\n if (response.type === EsFormResponseMessageType.TYPE_OK) {\n config.panelClass = EsSnackBarPanelClass.SUCCESS;\n this.submit.emit();\n } else {\n config.panelClass = EsSnackBarPanelClass.DANGER;\n }\n this.snackBar.open(response.message, null, config);\n\n const result: DialogResult = {\n clickedYes: true,\n serverResponse: response\n };\n this.dialogRef.close(result);\n });\n }\n\n}\n","import {Component} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {EsForm} from '@eurosat/form';\nimport {EsDialogService} from '@eurosat/dialog';\nimport { DialogResult } from '../dialog-result';\n\n@Component({\n selector: 'dialog-form',\n templateUrl: './dialog-form.component.html',\n styleUrls: ['./dialog-form.component.scss']\n})\nexport class DialogFormComponent {\n\n public formUrl: string;\n public cols = 1;\n public esForm: EsForm;\n public maxFormHeight: number = window.innerHeight - 60;\n\n constructor(\n public dialogRef: MatDialogRef<DialogFormComponent>,\n ds: EsDialogService,\n ) {\n const data = ds.getData();\n this.formUrl = data.url;\n }\n\n submit(value: {[name: string]: any}) {\n\n // sem se to dostane jen pri success ulozeni formu\n const result: DialogResult = {\n clickedYes: true\n };\n this.dialogRef.close(result);\n\n\n\n // pokud bysme chteli form.value\n // this.dialogRef.close(value);\n // console.log('form value v parent', value);\n\n\n }\n\n getWindowHeight() {\n this.maxFormHeight = window.innerHeight - 60;\n }\n\n\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport {Router} from '@angular/router';\nimport {EsButton} from './model/es-button.interface';\nimport {EsButtonAction} from './model/es-button-action';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {MatSnackBar, MatSnackBarConfig} from '@angular/material/snack-bar';\nimport {EsSnackBarPanelClass} from '@eurosat/snackbar';\nimport {HttpService} from '@eurosat/http';\nimport {EsIcon} from '@eurosat/icon';\nimport {DialogConfirmComponent} from './components/dialog-confirm/dialog-confirm.component';\nimport {take} from 'rxjs/internal/operators';\nimport {DialogFormComponent} from './components/dialog-form/dialog-form.component';\nimport {EsDialogService} from '@eurosat/dialog';\nimport {EsDialogConfig} from '@eurosat/dialog';\nimport { DialogResult } from './components/dialog-result';\nimport { EsButtonServerResponse } from './model/es-button-server-response';\nimport { EsFormResponseMessage, EsFormResponseMessageType } from '@eurosat/form';\n\n// todo translates\n\n@Component({\n selector: 'es-buttons',\n templateUrl: './es-buttons.component.html',\n styleUrls: ['./es-buttons.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EsButtonsComponent implements OnChanges {\n\n @Input() parentWidth = 40; // default 40 = 1 button\n @Input() buttons: EsButton[] = []; // normal input\n @Input() forceMenu = false; // pokud chci zobrazit ... menu i pro jeden buttonek, na realtimu pouzito\n\n @Output() buttonClick = new EventEmitter<EsButton>();\n @Output() reload = new EventEmitter<boolean>();\n @Output() dialogCreated = new EventEmitter<MatDialogRef<any>>();\n @Output() serverResponse = new EventEmitter<EsButtonServerResponse>();\n\n menuVisible = false;\n buttonWidth = 40; // todo ViewChild, sirka buttonu ?\n visibleButtons: EsButton[] = [];\n hiddenButtons: EsButton[] = [];\n esIcon = EsIcon;\n _width = 0;\n\n constructor(\n private router: Router,\n private dialog: EsDialogService,\n private snackBar: MatSnackBar,\n private http: HttpService,\n ) { }\n\n showMenu() {\n return this.getHiddenButtons() && this.getHiddenButtons().length > 0 && this.getHiddenButtons().length !== 1;\n }\n\n countVisible() {\n return Math.floor((this._width) / this.buttonWidth) - 1;\n }\n\n getVisibleButtons() {\n if (this.buttons && this.buttons.length > 0) {\n return this.buttons.filter(button => {\n if (this.buttons.indexOf(button) < this.countVisible()\n || (this.getHiddenButtons().length === 1 && !this.forceMenu)) {\n return true;\n }\n });\n }\n }\n\n getHiddenButtons() {\n if (this.buttons && this.buttons.length > 0) {\n return this.buttons.filter(button => {\n if (this.buttons.indexOf(button) >= this.countVisible()) {\n return true;\n }\n });\n }\n }\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange['parentWidth']) {\n if (this.parentWidth > 0) {\n this._width = this.parentWidth;\n this.recalculateButtons();\n }\n }\n\n if (simpleChange['buttons']) {\n if (typeof this.buttons === 'string') {\n this.buttons = JSON.parse(this.buttons);\n }\n this.recalculateButtons();\n }\n }\n\n recalculateButtons() {\n this.menuVisible = this.showMenu();\n this.visibleButtons = this.getVisibleButtons();\n this.hiddenButtons = this.getHiddenButtons();\n }\n\n handleAction(button: EsButton) {\n if (button.action === EsButtonAction.ACTION_DIALOG_CONFIRM) {\n this.openConfirm(button);\n }\n if (button.action === EsButtonAction.ACTION_DIALOG_DELETE) {\n this.openDelete(button);\n }\n if (button.action === EsButtonAction.ACTION_DIALOG_FORM) {\n this.openForm(button);\n }\n if (button.action === EsButtonAction.ACTION_DOWNLOAD) {\n this.http.get(button.url, {responseType: 'blob', observe: 'response'}).subscribe(response => {\n const filename = response.headers.get('Content-Disposition').split('filename=')[1];\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveBlob(response.body, filename);\n } else {\n const link = document.createElement('a');\n link.setAttribute('href', window.URL.createObjectURL(response.body));\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n });\n }\n if (button.action === EsButtonAction.ACTION_REQUEST) {\n this.http.get(button.url).subscribe((response: EsFormResponseMessage) => {\n const config = new MatSnackBarConfig();\n config.duration = 2000;\n if (response.type === EsFormResponseMessageType.TYPE_OK) {\n config.panelClass = EsSnackBarPanelClass.SUCCESS;\n } else {\n config.panelClass = EsSnackBarPanelClass.DANGER;\n }\n this.snackBar.open(response.message, null, config);\n this.reload.emit(true);\n this.serverResponse.emit({button: button, response: response});\n });\n }\n if (button.action === EsButtonAction.ACTION_ROUTER_NAVIGATE) {\n this.router.navigateByUrl(button.url);\n }\n if (button.action === EsButtonAction.ACTION_WINDOW_LOCATION) {\n window.location.href = button.url;\n }\n this.buttonClick.emit(button);\n }\n\n // handleSubMenuAction(button: EsButton) {\n // // todo asi predelat na md2 menu\n // // todo nevim jestli se zpropaguje click kdyz je to zanoreny pres es-card-header\n // this.buttonClick.emit(button);\n // }\n\n openForm(button: EsButton) {\n const config: EsDialogConfig = {\n title: button.title,\n data: {\n url: button.url\n }\n };\n const dialogRef: MatDialogRef<DialogFormComponent> = this.dialog.open(DialogFormComponent, config);\n this.dialogCreated.emit(dialogRef);\n dialogRef.afterClosed().pipe(take(1)).subscribe( (res: DialogResult) => {\n if (res && res.clickedYes) {\n this.reload.emit(true);\n\n if (res.serverResponse) {\n this.serverResponse.emit({button: button, response: res.serverResponse});\n }\n }\n });\n }\n\n openDelete(button: EsButton) {\n this.openConfirm(button);\n }\n\n openConfirm(button: EsButton) {\n const config: EsDialogConfig = {\n title: button.title,\n data: {\n message: button.message,\n url: button.url\n }\n };\n const dialogRef: MatDialogRef<DialogConfirmComponent> = this.dialog.open(DialogConfirmComponent, config);\n this.dialogCreated.emit(dialogRef);\n dialogRef.afterClosed().pipe(take(1)).subscribe( (res: DialogResult) => {\n if (res && res.clickedYes) {\n this.reload.emit(true);\n\n if (res.serverResponse) {\n this.serverResponse.emit({button: button, response: res.serverResponse});\n }\n }\n });\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {EsButtonsComponent} from './es-buttons.component';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatSnackBarModule} from '@angular/material/snack-bar';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {EsIconModule} from '@eurosat/icon';\nimport {EsDialogModule} from '@eurosat/dialog';\nimport {EsFormModule} from '@eurosat/form';\nimport {DialogConfirmComponent} from './components/dialog-confirm/dialog-confirm.component';\nimport {DialogFormComponent} from './components/dialog-form/dialog-form.component';\n\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatTooltipModule,\n MatMenuModule,\n MatSnackBarModule,\n TranslateModule.forChild(),\n EsIconModule,\n EsDialogModule,\n EsFormModule,\n ],\n declarations: [\n EsButtonsComponent,\n DialogConfirmComponent,\n DialogFormComponent,\n ],\n exports: [EsButtonsComponent],\n entryComponents: [\n DialogConfirmComponent,\n DialogFormComponent,\n ],\n})\nexport class EsButtonsModule { }\n","/*\n * Public API Surface of es-buttons\n */\n\nexport * from './lib/es-buttons.component';\nexport * from './lib/es-buttons.module';\nexport * from './lib/model/es-button.interface';\nexport * from './lib/model/es-button-action';\nexport * from './lib/model/es-button-server-response';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {DialogConfirmComponent as ɵa} from './lib/components/dialog-confirm/dialog-confirm.component';\nexport {DialogFormComponent as ɵb} from './lib/components/dialog-form/dialog-form.component';"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAAa,cAAc;;AAET,oCAAqB,GAAG,gBAAgB,CAAC;AACzC,mCAAoB,GAAG,eAAe,CAAC;AACvC,iCAAkB,GAAG,aAAa,CAAC;AACnC,uCAAwB,GAAG,mBAAmB,CAAC;AAC/C,yCAA0B,GAAG,qBAAqB,CAAC;AACnD,yCAA0B,GAAG,qBAAqB,CAAC;AACnD,8BAAe,GAAG,UAAU,CAAC;AAC7B,6BAAc,GAAG,SAAS,CAAC;AAC3B,qCAAsB,GAAG,iBAAiB,CAAC;AAC3C,qCAAsB,GAAG,WAAW;;MCGzC,sBAAsB;IAO/B,YACW,SAA+C,EAC9C,QAAqB,EACrB,EAAmB;QAFpB,cAAS,GAAT,SAAS,CAAsC;QAC9C,aAAQ,GAAR,QAAQ,CAAa;QACrB,OAAE,GAAF,EAAE,CAAiB;QARrB,WAAM,GAAsB,IAAI,YAAY,EAAO,CAAC;QAG9D,kBAAa,GAAG,KAAK,CAAC;QAOlB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;KACvB;IAED,OAAO;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,QAA+B;YACvE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,IAAI,QAAQ,CAAC,IAAI,KAAK,yBAAyB,CAAC,OAAO,EAAE;gBACrD,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aACtB;iBAAM;gBACH,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC;aACnD;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAiB;gBACzB,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,QAAQ;aAC3B,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAChC,CAAC,CAAC;KACN;;;YA1CJ,SAAS,SAAC;gBACP,QAAQ,EAAE,gBAAgB;gBAC1B,knBAA8C;;aAEjD;;;;YAZO,YAAY;YACZ,WAAW;YAEX,eAAe;;;qBAYlB,MAAM;;;MCLE,mBAAmB;IAO5B,YACW,SAA4C,EACnD,EAAmB;QADZ,cAAS,GAAT,SAAS,CAAmC;QALhD,SAAI,GAAG,CAAC,CAAC;QAET,kBAAa,GAAW,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QAMnD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;KAC3B;IAED,MAAM,CAAC,KAA4B;;QAG/B,MAAM,MAAM,GAAiB;YACzB,UAAU,EAAE,IAAI;SACnB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;;KAShC;IAED,eAAe;QACX,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;KAChD;;;YAvCJ,SAAS,SAAC;gBACP,QAAQ,EAAE,aAAa;gBACvB,+QAA2C;;aAE9C;;;;YATO,YAAY;YAEZ,eAAe;;;ACevB;MAQa,kBAAkB;IAkB3B,YACY,MAAc,EACd,MAAuB,EACvB,QAAqB,EACrB,IAAiB;QAHjB,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAiB;QACvB,aAAQ,GAAR,QAAQ,CAAa;QACrB,SAAI,GAAJ,IAAI,CAAa;QApBpB,gBAAW,GAAG,EAAE,CAAC;QACjB,YAAO,GAAe,EAAE,CAAC;QACzB,cAAS,GAAG,KAAK,CAAC;QAEjB,gBAAW,GAAG,IAAI,YAAY,EAAY,CAAC;QAC3C,WAAM,GAAG,IAAI,YAAY,EAAW,CAAC;QACrC,kBAAa,GAAG,IAAI,YAAY,EAAqB,CAAC;QACtD,mBAAc,GAAG,IAAI,YAAY,EAA0B,CAAC;QAEtE,gBAAW,GAAG,KAAK,CAAC;QACpB,gBAAW,GAAG,EAAE,CAAC;QACjB,mBAAc,GAAe,EAAE,CAAC;QAChC,kBAAa,GAAe,EAAE,CAAC;QAC/B,WAAM,GAAG,MAAM,CAAC;QAChB,WAAM,GAAG,CAAC,CAAC;KAON;IAEL,QAAQ;QACJ,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;KAChH;IAED,YAAY;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC3D;IAED,iBAAiB;QACb,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;gBAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;wBAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBAC9D,OAAO,IAAI,CAAC;iBACf;aACJ,CAAC,CAAC;SACN;KACJ;IAED,gBAAgB;QACZ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;gBAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBACrD,OAAO,IAAI,CAAC;iBACf;aACJ,CAAC,CAAC;SACN;KACJ;IAED,WAAW,CAAC,YAA2B;QACnC,IAAI,YAAY,CAAC,aAAa,CAAC,EAAE;YAC7B,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC7B;SACJ;QAED,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE;YACzB,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAChD;IAED,YAAY,CAAC,MAAgB;QACzB,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,qBAAqB,EAAE;YACxD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAC5B;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,oBAAoB,EAAE;YACvD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,kBAAkB,EAAE;YACrD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACzB;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,eAAe,EAAE;YAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC,SAAS,CAAC,QAAQ;gBACrF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE;oBACvD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;iBACxD;qBAAM;oBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBACxC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBACnC;aACJ,CAAC,CAAC;SACN;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,cAAc,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,QAA+B;gBAChE,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;gBACvC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,IAAI,QAAQ,CAAC,IAAI,KAAK,yBAAyB,CAAC,OAAO,EAAE;oBACrD,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC;iBACpD;qBAAM;oBACH,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC;iBACnD;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC,CAAC;aAClE,CAAC,CAAC;SACN;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,sBAAsB,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACzC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,CAAC,sBAAsB,EAAE;YACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;SACrC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACjC;;;;;;IAQD,QAAQ,CAAC,MAAgB;QACrB,MAAM,MAAM,GAAmB;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE;gBACF,GAAG,EAAE,MAAM,CAAC,GAAG;aAClB;SACJ,CAAC;QACF,MAAM,SAAS,GAAsC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACnG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAE,CAAC,GAAiB;YAC/D,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEvB,IAAI,GAAG,CAAC,cAAc,EAAE;oBACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAC,CAAC,CAAC;iBAC5E;aACJ;SACJ,CAAC,CAAC;KACN;IAED,UAAU,CAAC,MAAgB;QACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;IAED,WAAW,CAAC,MAAgB;QACxB,MAAM,MAAM,GAAmB;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE;gBACF,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,EAAE,MAAM,CAAC,GAAG;aAClB;SACJ,CAAC;QACF,MAAM,SAAS,GAAyC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;QACzG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAE,CAAC,GAAiB;YAC/D,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEvB,IAAI,GAAG,CAAC,cAAc,EAAE;oBACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,cAAc,EAAC,CAAC,CAAC;iBAC5E;aACJ;SACJ,CAAC,CAAC;KACN;;;YApLJ,SAAS,SAAC;gBACP,QAAQ,EAAE,YAAY;gBACtB,wmUAA0C;gBAE1C,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAClD;;;;YAxBO,MAAM;YAWN,eAAe;YAPf,WAAW;YAEX,WAAW;;;0BAqBd,KAAK;sBACL,KAAK;wBACL,KAAK;0BAEL,MAAM;qBACN,MAAM;4BACN,MAAM;6BACN,MAAM;;;MCGE,eAAe;;;YAvB3B,QAAQ,SAAC;gBACN,OAAO,EAAE;oBACL,YAAY;oBACZ,eAAe;oBACf,gBAAgB;oBAChB,aAAa;oBACb,iBAAiB;oBACjB,eAAe,CAAC,QAAQ,EAAE;oBAC1B,YAAY;oBACZ,cAAc;oBACd,YAAY;iBACf;gBACD,YAAY,EAAE;oBACV,kBAAkB;oBAClB,sBAAsB;oBACtB,mBAAmB;iBACtB;gBACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAC7B,eAAe,EAAE;oBACb,sBAAsB;oBACtB,mBAAmB;iBACtB;aACJ;;;ACrCD;;;;ACAA;;;;;;"}