@libs-ui/components-drag-drop 0.2.304 → 0.2.306-10
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 +51 -45
- package/drag-drop.directive.d.ts +5 -4
- package/drag-drop.service.d.ts +3 -3
- package/drag-item-in-container-virtual-scroll.directive.d.ts +5 -5
- package/drag-item.directive.d.ts +3 -3
- package/drag-scroll.directive.d.ts +5 -5
- package/esm2022/defines/css.define.mjs +18 -16
- package/esm2022/demo/demo.component.mjs +184 -157
- package/esm2022/drag-drop.directive.mjs +65 -47
- package/esm2022/drag-drop.service.mjs +9 -5
- package/esm2022/drag-item-in-container-virtual-scroll.directive.mjs +21 -20
- package/esm2022/drag-item.directive.mjs +27 -22
- package/esm2022/drag-scroll.directive.mjs +21 -15
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/event.interface.mjs +1 -1
- package/fesm2022/libs-ui-components-drag-drop.mjs +319 -256
- package/fesm2022/libs-ui-components-drag-drop.mjs.map +1 -1
- package/interfaces/event.interface.d.ts +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -20,20 +20,25 @@ import { LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective } from
|
|
|
20
20
|
@Component({
|
|
21
21
|
selector: 'app-drag-drop-demo',
|
|
22
22
|
template: `
|
|
23
|
-
<div
|
|
24
|
-
|
|
23
|
+
<div
|
|
24
|
+
LibsUiComponentsDragContainerDirective
|
|
25
|
+
[items]="items">
|
|
26
|
+
<div
|
|
27
|
+
*ngFor="let item of items"
|
|
28
|
+
LibsUiDragItemDirective
|
|
29
|
+
[item]="item">
|
|
25
30
|
{{ item.name }}
|
|
26
31
|
</div>
|
|
27
32
|
</div>
|
|
28
33
|
`,
|
|
29
34
|
standalone: true,
|
|
30
|
-
imports: [LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective]
|
|
35
|
+
imports: [LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective],
|
|
31
36
|
})
|
|
32
37
|
export class DragDropDemoComponent {
|
|
33
38
|
items = [
|
|
34
39
|
{ id: 1, name: 'Item 1' },
|
|
35
40
|
{ id: 2, name: 'Item 2' },
|
|
36
|
-
{ id: 3, name: 'Item 3' }
|
|
41
|
+
{ id: 3, name: 'Item 3' },
|
|
37
42
|
];
|
|
38
43
|
}
|
|
39
44
|
```
|
|
@@ -47,12 +52,12 @@ export class DragDropDemoComponent {
|
|
|
47
52
|
template: `
|
|
48
53
|
<div class="container">
|
|
49
54
|
<h3>Source</h3>
|
|
50
|
-
<div LibsUiComponentsDragContainerDirective
|
|
51
|
-
[items]="sourceItems"
|
|
55
|
+
<div LibsUiComponentsDragContainerDirective
|
|
56
|
+
[items]="sourceItems"
|
|
52
57
|
[groupName]="'source'"
|
|
53
58
|
[dropToGroupName]="['target']">
|
|
54
|
-
<div *ngFor="let item of sourceItems"
|
|
55
|
-
LibsUiDragItemDirective
|
|
59
|
+
<div *ngFor="let item of sourceItems"
|
|
60
|
+
LibsUiDragItemDirective
|
|
56
61
|
[item]="item">
|
|
57
62
|
{{ item.name }}
|
|
58
63
|
</div>
|
|
@@ -61,12 +66,12 @@ export class DragDropDemoComponent {
|
|
|
61
66
|
|
|
62
67
|
<div class="container">
|
|
63
68
|
<h3>Target</h3>
|
|
64
|
-
<div LibsUiComponentsDragContainerDirective
|
|
65
|
-
[items]="targetItems"
|
|
69
|
+
<div LibsUiComponentsDragContainerDirective
|
|
70
|
+
[items]="targetItems"
|
|
66
71
|
[groupName]="'target'"
|
|
67
72
|
[dropToGroupName]="['source']">
|
|
68
|
-
<div *ngFor="let item of targetItems"
|
|
69
|
-
LibsUiDragItemDirective
|
|
73
|
+
<div *ngFor="let item of targetItems"
|
|
74
|
+
LibsUiDragItemDirective
|
|
70
75
|
[item]="item">
|
|
71
76
|
{{ item.name }}
|
|
72
77
|
</div>
|
|
@@ -91,8 +96,8 @@ export class DragDropDemoComponent {
|
|
|
91
96
|
template: `
|
|
92
97
|
<virtual-scroller [items]="items">
|
|
93
98
|
<div LibsUiComponentsDragContainerDirective [items]="items">
|
|
94
|
-
<div *ngFor="let item of items"
|
|
95
|
-
LibsUiDragItemDirective
|
|
99
|
+
<div *ngFor="let item of items"
|
|
100
|
+
LibsUiDragItemDirective
|
|
96
101
|
[item]="item"
|
|
97
102
|
[itemInContainerVirtualScroll]="true"
|
|
98
103
|
[fieldId]="'id'">
|
|
@@ -110,11 +115,11 @@ export class DragDropDemoComponent {
|
|
|
110
115
|
@Component({
|
|
111
116
|
template: `
|
|
112
117
|
<div class="boundary-container">
|
|
113
|
-
<div LibsUiComponentsDragContainerDirective
|
|
118
|
+
<div LibsUiComponentsDragContainerDirective
|
|
114
119
|
[items]="items"
|
|
115
120
|
[dragBoundary]="true">
|
|
116
|
-
<div *ngFor="let item of items"
|
|
117
|
-
LibsUiDragItemDirective
|
|
121
|
+
<div *ngFor="let item of items"
|
|
122
|
+
LibsUiDragItemDirective
|
|
118
123
|
[item]="item"
|
|
119
124
|
[dragBoundary]="true">
|
|
120
125
|
{{ item.name }}
|
|
@@ -137,24 +142,24 @@ export class DragDropDemoComponent {
|
|
|
137
142
|
|
|
138
143
|
### Container Directive
|
|
139
144
|
|
|
140
|
-
| Property
|
|
141
|
-
|
|
142
|
-
| `mode`
|
|
143
|
-
| `directionDrag`
|
|
144
|
-
| `groupName`
|
|
145
|
-
| `dropToGroupName`
|
|
146
|
-
| `disableDragContainer` | boolean
|
|
147
|
-
| `placeholder`
|
|
145
|
+
| Property | Type | Default | Description |
|
|
146
|
+
| ---------------------- | ------------------------------ | ------------------------- | ---------------------------- |
|
|
147
|
+
| `mode` | 'move' \| 'copy' \| 'deepCopy' | 'move' | Drag operation mode |
|
|
148
|
+
| `directionDrag` | 'horizontal' \| 'vertical' | undefined | Drag direction |
|
|
149
|
+
| `groupName` | string | 'groupDragAndDropDefault' | Group identifier |
|
|
150
|
+
| `dropToGroupName` | string[] | null | Allowed drop targets |
|
|
151
|
+
| `disableDragContainer` | boolean | false | Disable drag functionality |
|
|
152
|
+
| `placeholder` | boolean | true | Show placeholder during drag |
|
|
148
153
|
|
|
149
154
|
### Item Directive
|
|
150
155
|
|
|
151
|
-
| Property
|
|
152
|
-
|
|
153
|
-
| `fieldId`
|
|
154
|
-
| `item`
|
|
155
|
-
| `itemInContainerVirtualScroll` | boolean | false
|
|
156
|
-
| `dragBoundary`
|
|
157
|
-
| `zIndex`
|
|
156
|
+
| Property | Type | Default | Description |
|
|
157
|
+
| ------------------------------ | ------- | --------- | ------------------------------------- |
|
|
158
|
+
| `fieldId` | string | '' | Item identifier field |
|
|
159
|
+
| `item` | any | undefined | Item data |
|
|
160
|
+
| `itemInContainerVirtualScroll` | boolean | false | Enable virtual scroll support |
|
|
161
|
+
| `dragBoundary` | boolean | false | Restrict drag to container boundaries |
|
|
162
|
+
| `zIndex` | number | 1300 | Drag element z-index |
|
|
158
163
|
|
|
159
164
|
## Events
|
|
160
165
|
|
|
@@ -287,7 +292,7 @@ interface IDragDropFunctionControlEvent {
|
|
|
287
292
|
/* Dragging */
|
|
288
293
|
.libs-ui-drag-drop-item-dragging {
|
|
289
294
|
opacity: 0.8;
|
|
290
|
-
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
|
295
|
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
|
291
296
|
}
|
|
292
297
|
|
|
293
298
|
/* Placeholder */
|
|
@@ -302,11 +307,12 @@ interface IDragDropFunctionControlEvent {
|
|
|
302
307
|
```typescript
|
|
303
308
|
@Component({
|
|
304
309
|
template: `
|
|
305
|
-
<div
|
|
306
|
-
|
|
310
|
+
<div
|
|
311
|
+
LibsUiComponentsDragContainerDirective
|
|
312
|
+
[stylesOverride]="customStyles">
|
|
307
313
|
<!-- Items -->
|
|
308
314
|
</div>
|
|
309
|
-
|
|
315
|
+
`,
|
|
310
316
|
})
|
|
311
317
|
export class CustomStyledComponent {
|
|
312
318
|
customStyles = [
|
|
@@ -318,8 +324,8 @@ export class CustomStyledComponent {
|
|
|
318
324
|
border-radius: 8px;
|
|
319
325
|
padding: 15px;
|
|
320
326
|
}
|
|
321
|
-
|
|
322
|
-
}
|
|
327
|
+
`,
|
|
328
|
+
},
|
|
323
329
|
];
|
|
324
330
|
}
|
|
325
331
|
```
|
|
@@ -369,9 +375,9 @@ export class CustomStyledComponent {
|
|
|
369
375
|
template: `
|
|
370
376
|
<div class="list-container">
|
|
371
377
|
<div LibsUiComponentsDragContainerDirective [items]="items">
|
|
372
|
-
<div *ngFor="let item of items"
|
|
378
|
+
<div *ngFor="let item of items"
|
|
373
379
|
class="list-item"
|
|
374
|
-
LibsUiDragItemDirective
|
|
380
|
+
LibsUiDragItemDirective
|
|
375
381
|
[item]="item">
|
|
376
382
|
<span class="item-icon">📋</span>
|
|
377
383
|
<span class="item-text">{{ item.name }}</span>
|
|
@@ -406,15 +412,15 @@ export class CustomStyledComponent {
|
|
|
406
412
|
@Component({
|
|
407
413
|
template: `
|
|
408
414
|
<div class="kanban-board">
|
|
409
|
-
<div *ngFor="let column of columns"
|
|
415
|
+
<div *ngFor="let column of columns"
|
|
410
416
|
class="kanban-column"
|
|
411
|
-
LibsUiComponentsDragContainerDirective
|
|
417
|
+
LibsUiComponentsDragContainerDirective
|
|
412
418
|
[items]="column.items"
|
|
413
419
|
[groupName]="column.id">
|
|
414
420
|
<h3>{{ column.title }}</h3>
|
|
415
|
-
<div *ngFor="let item of column.items"
|
|
421
|
+
<div *ngFor="let item of column.items"
|
|
416
422
|
class="kanban-item"
|
|
417
|
-
LibsUiDragItemDirective
|
|
423
|
+
LibsUiDragItemDirective
|
|
418
424
|
[item]="item">
|
|
419
425
|
{{ item.title }}
|
|
420
426
|
</div>
|
|
@@ -442,4 +448,4 @@ export class CustomStyledComponent {
|
|
|
442
448
|
}
|
|
443
449
|
`]
|
|
444
450
|
})
|
|
445
|
-
```
|
|
451
|
+
```
|
package/drag-drop.directive.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AfterViewInit, OnDestroy } from
|
|
2
|
-
import { LibsUiComponentsDragScrollDirective } from
|
|
3
|
-
import { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { LibsUiComponentsDragScrollDirective } from './drag-scroll.directive';
|
|
3
|
+
import { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from './interfaces/event.interface';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {
|
|
6
6
|
private groupID;
|
|
@@ -9,7 +9,7 @@ export declare class LibsUiComponentsDragContainerDirective extends LibsUiCompon
|
|
|
9
9
|
readonly disableDragContainer: import("@angular/core").InputSignal<boolean | undefined>;
|
|
10
10
|
readonly mode: import("@angular/core").InputSignalWithTransform<string, "move" | "copy">;
|
|
11
11
|
readonly directionDrag: import("@angular/core").InputSignal<"horizontal" | "vertical" | undefined>;
|
|
12
|
-
readonly viewEncapsulation: import("@angular/core").InputSignalWithTransform<"
|
|
12
|
+
readonly viewEncapsulation: import("@angular/core").InputSignalWithTransform<"none" | "emulated", "none" | "emulated" | undefined>;
|
|
13
13
|
readonly acceptDragSameGroup: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
|
|
14
14
|
readonly placeholder: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
|
|
15
15
|
readonly groupName: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
|
|
@@ -28,6 +28,7 @@ export declare class LibsUiComponentsDragContainerDirective extends LibsUiCompon
|
|
|
28
28
|
readonly outFunctionControl: import("@angular/core").OutputEmitterRef<IDragDropFunctionControlEvent>;
|
|
29
29
|
constructor();
|
|
30
30
|
ngAfterViewInit(): void;
|
|
31
|
+
get FunctionsControl(): IDragDropFunctionControlEvent;
|
|
31
32
|
private setAttributeElementAndItemDrag;
|
|
32
33
|
private initStyleAndAttribute;
|
|
33
34
|
private setAnimationElementDragOver;
|
package/drag-drop.service.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WritableSignal } from
|
|
2
|
-
import { Subject } from
|
|
3
|
-
import { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from
|
|
1
|
+
import { WritableSignal } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from './interfaces/event.interface';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class MoLibsSharedDragDropService {
|
|
6
6
|
private itemsClick;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AfterViewInit, OnDestroy } from
|
|
2
|
-
import { IBoundingClientRect } from
|
|
3
|
-
import { Subject } from
|
|
4
|
-
import { MoLibsSharedDragDropService } from
|
|
5
|
-
import { IDragEnd } from
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { IBoundingClientRect } from '@libs-ui/interfaces-types';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { MoLibsSharedDragDropService } from './drag-drop.service';
|
|
5
|
+
import { IDragEnd } from './interfaces/event.interface';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {
|
|
8
8
|
protected onDestroy: Subject<void>;
|
package/drag-item.directive.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AfterViewInit, OnDestroy } from
|
|
2
|
-
import { LibsUiDragItemInContainerVirtualScrollDirective } from
|
|
3
|
-
import { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { LibsUiDragItemInContainerVirtualScrollDirective } from './drag-item-in-container-virtual-scroll.directive';
|
|
3
|
+
import { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from './interfaces/event.interface';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {
|
|
6
6
|
private isDragOver;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AfterViewInit, ElementRef, OnDestroy } from
|
|
2
|
-
import { VirtualScrollerComponent } from
|
|
3
|
-
import { Subject } from
|
|
4
|
-
import { MoLibsSharedDragDropService } from
|
|
5
|
-
import { IDragging } from
|
|
1
|
+
import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
|
|
2
|
+
import { VirtualScrollerComponent } from '@iharbeck/ngx-virtual-scroller';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { MoLibsSharedDragDropService } from './drag-drop.service';
|
|
5
|
+
import { IDragging } from './interfaces/event.interface';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {
|
|
8
8
|
private stopScroll;
|
|
@@ -1,51 +1,53 @@
|
|
|
1
1
|
export const styleContainer = (config, viewEncapsulation, groupID) => {
|
|
2
|
-
const defaultConfig = [
|
|
2
|
+
const defaultConfig = [
|
|
3
|
+
{
|
|
3
4
|
className: 'libs-ui-drag-drop-container',
|
|
4
|
-
styles: `display:block
|
|
5
|
+
styles: `display:block;`,
|
|
5
6
|
},
|
|
6
7
|
{
|
|
7
8
|
className: 'libs-ui-drag-drop-item',
|
|
8
9
|
styles: `
|
|
9
|
-
cursor:move
|
|
10
|
+
cursor:move;`,
|
|
10
11
|
},
|
|
11
12
|
{
|
|
12
13
|
className: 'libs-ui-drag-drop-item-placeholder',
|
|
13
|
-
styles: `visibility: hidden
|
|
14
|
+
styles: `visibility: hidden;`,
|
|
14
15
|
},
|
|
15
16
|
{
|
|
16
17
|
className: 'libs-ui-drag-drop-item-origin-placeholder',
|
|
17
|
-
styles: `visibility: hidden
|
|
18
|
+
styles: `visibility: hidden;`,
|
|
18
19
|
},
|
|
19
20
|
{
|
|
20
21
|
className: 'libs-ui-drag-drop-item-drop-placeholder',
|
|
21
|
-
styles: `visibility: hidden
|
|
22
|
+
styles: `visibility: hidden;`,
|
|
22
23
|
},
|
|
23
24
|
{
|
|
24
25
|
className: 'libs-ui-drag-drop-item-dragging',
|
|
25
|
-
styles: `cursor:move; user-select: none;
|
|
26
|
+
styles: `cursor:move; user-select: none; `,
|
|
26
27
|
},
|
|
27
28
|
{
|
|
28
29
|
className: 'libs-ui-drag-drop-item-disable',
|
|
29
|
-
styles: ` cursor:not-allowed
|
|
30
|
+
styles: ` cursor:not-allowed;`,
|
|
30
31
|
},
|
|
31
32
|
{
|
|
32
33
|
className: 'libs-ui-drag-drop-item-translate-bottom',
|
|
33
|
-
styles: `position:relative;animation: translateBottom 0.35s 1 ease
|
|
34
|
+
styles: `position:relative;animation: translateBottom 0.35s 1 ease;`,
|
|
34
35
|
},
|
|
35
36
|
{
|
|
36
37
|
className: 'libs-ui-drag-drop-item-translate-top',
|
|
37
|
-
styles: `position:relative;animation: translateTop 0.35s 1 ease
|
|
38
|
+
styles: `position:relative;animation: translateTop 0.35s 1 ease;`,
|
|
38
39
|
},
|
|
39
40
|
{
|
|
40
41
|
className: 'libs-ui-drag-drop-item-translate-left',
|
|
41
|
-
styles: `position:relative;animation: translateLeft 0.35s 1 ease
|
|
42
|
+
styles: `position:relative;animation: translateLeft 0.35s 1 ease;`,
|
|
42
43
|
},
|
|
43
44
|
{
|
|
44
45
|
className: 'libs-ui-drag-drop-item-translate-right',
|
|
45
|
-
styles: `position:relative;animation: translateRight 0.35s 1 ease
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
styles: `position:relative;animation: translateRight 0.35s 1 ease;`,
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
config.forEach((item) => {
|
|
50
|
+
const itemExits = defaultConfig.find((defaultItem) => defaultItem.className === item.className);
|
|
49
51
|
if (itemExits) {
|
|
50
52
|
itemExits.styles = item.styles;
|
|
51
53
|
return;
|
|
@@ -99,4 +101,4 @@ export const styleContainer = (config, viewEncapsulation, groupID) => {
|
|
|
99
101
|
${styles}`.replace(/\n+/g, '');
|
|
100
102
|
return styles;
|
|
101
103
|
};
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RlZmluZXMvY3NzLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFvRCxFQUFFLGlCQUFzQyxFQUFFLE9BQWUsRUFBVSxFQUFFO0lBQ3RKLE1BQU0sYUFBYSxHQUFHO1FBQ3BCO1lBQ0UsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxNQUFNLEVBQUUsZ0JBQWdCO1NBQ3pCO1FBQ0Q7WUFDRSxTQUFTLEVBQUUsd0JBQXdCO1lBQ25DLE1BQU0sRUFBRTtpQkFDRztTQUNaO1FBQ0Q7WUFDRSxTQUFTLEVBQUUsb0NBQW9DO1lBQy9DLE1BQU0sRUFBRSxxQkFBcUI7U0FDOUI7UUFDRDtZQUNFLFNBQVMsRUFBRSwyQ0FBMkM7WUFDdEQsTUFBTSxFQUFFLHFCQUFxQjtTQUM5QjtRQUNEO1lBQ0UsU0FBUyxFQUFFLHlDQUF5QztZQUNwRCxNQUFNLEVBQUUscUJBQXFCO1NBQzlCO1FBQ0Q7WUFDRSxTQUFTLEVBQUUsaUNBQWlDO1lBQzVDLE1BQU0sRUFBRSxtQ0FBbUM7U0FDNUM7UUFDRDtZQUNFLFNBQVMsRUFBRSxnQ0FBZ0M7WUFDM0MsTUFBTSxFQUFFLHNCQUFzQjtTQUMvQjtRQUNEO1lBQ0UsU0FBUyxFQUFFLHlDQUF5QztZQUNwRCxNQUFNLEVBQUUsNERBQTREO1NBQ3JFO1FBQ0Q7WUFDRSxTQUFTLEVBQUUsc0NBQXNDO1lBQ2pELE1BQU0sRUFBRSx5REFBeUQ7U0FDbEU7UUFDRDtZQUNFLFNBQVMsRUFBRSx1Q0FBdUM7WUFDbEQsTUFBTSxFQUFFLDBEQUEwRDtTQUNuRTtRQUNEO1lBQ0UsU0FBUyxFQUFFLHdDQUF3QztZQUNuRCxNQUFNLEVBQUUsMkRBQTJEO1NBQ3BFO0tBQ0YsQ0FBQztJQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN0QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBRS9CLE9BQU87UUFDVCxDQUFDO1FBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxjQUFjLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWhCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUUvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NQLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFL0IsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHN0eWxlQ29udGFpbmVyID0gKGNvbmZpZzogQXJyYXk8eyBjbGFzc05hbWU6IHN0cmluZzsgc3R5bGVzOiBzdHJpbmcgfT4sIHZpZXdFbmNhcHN1bGF0aW9uOiAnZW11bGF0ZWQnIHwgJ25vbmUnLCBncm91cElEOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkZWZhdWx0Q29uZmlnID0gW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWNvbnRhaW5lcicsXG4gICAgICBzdHlsZXM6IGBkaXNwbGF5OmJsb2NrO2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgIHN0eWxlczogYFxuICAgIGN1cnNvcjptb3ZlO2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyxcbiAgICAgIHN0eWxlczogYHZpc2liaWxpdHk6IGhpZGRlbjtgLFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1vcmlnaW4tcGxhY2Vob2xkZXInLFxuICAgICAgc3R5bGVzOiBgdmlzaWJpbGl0eTogaGlkZGVuO2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyb3AtcGxhY2Vob2xkZXInLFxuICAgICAgc3R5bGVzOiBgdmlzaWJpbGl0eTogaGlkZGVuO2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyxcbiAgICAgIHN0eWxlczogYGN1cnNvcjptb3ZlOyAgdXNlci1zZWxlY3Q6IG5vbmU7IGAsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRpc2FibGUnLFxuICAgICAgc3R5bGVzOiBgIGN1cnNvcjpub3QtYWxsb3dlZDtgLFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtYm90dG9tJyxcbiAgICAgIHN0eWxlczogYHBvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjogdHJhbnNsYXRlQm90dG9tIDAuMzVzIDEgZWFzZTtgLFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtdG9wJyxcbiAgICAgIHN0eWxlczogYHBvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjogdHJhbnNsYXRlVG9wIDAuMzVzIDEgZWFzZTtgLFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtbGVmdCcsXG4gICAgICBzdHlsZXM6IGBwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246IHRyYW5zbGF0ZUxlZnQgMC4zNXMgMSBlYXNlO2AsXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXRyYW5zbGF0ZS1yaWdodCcsXG4gICAgICBzdHlsZXM6IGBwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246IHRyYW5zbGF0ZVJpZ2h0IDAuMzVzIDEgZWFzZTtgLFxuICAgIH0sXG4gIF07XG5cbiAgY29uZmlnLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBjb25zdCBpdGVtRXhpdHMgPSBkZWZhdWx0Q29uZmlnLmZpbmQoKGRlZmF1bHRJdGVtKSA9PiBkZWZhdWx0SXRlbS5jbGFzc05hbWUgPT09IGl0ZW0uY2xhc3NOYW1lKTtcblxuICAgIGlmIChpdGVtRXhpdHMpIHtcbiAgICAgIGl0ZW1FeGl0cy5zdHlsZXMgPSBpdGVtLnN0eWxlcztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWZhdWx0Q29uZmlnLnB1c2goaXRlbSk7XG4gIH0pO1xuICBjb25zdCBncm91cEF0dHIgPSB2aWV3RW5jYXBzdWxhdGlvbiA/IGBbZ3JvdXBJRH49XCIke2dyb3VwSUR9XCJdYCA6ICcnO1xuICBsZXQgc3R5bGVzID0gJyc7XG5cbiAgZGVmYXVsdENvbmZpZy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgY29uc3Qgc3R5bGUgPSBgJHtncm91cEF0dHJ9LiR7aXRlbS5jbGFzc05hbWV9eyR7aXRlbS5zdHlsZXN9fWA7XG5cbiAgICBzdHlsZXMgPSBgJHtzdHlsZXN9JHtzdHlsZX1cXG5gO1xuICB9KTtcblxuICBzdHlsZXMgPSBgIEBrZXlmcmFtZXMgdHJhbnNsYXRlVG9wIHtcbiAgICAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzBweCk7XG4gICAgfVxuICBcbiAgICAxMDAlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB9XG4gIH1cbiAgXG4gIEBrZXlmcmFtZXMgdHJhbnNsYXRlQm90dG9tIHtcbiAgICAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTMwcHgpO1xuICAgIH1cbiAgXG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTtcbiAgICB9XG4gIH1cbiAgQGtleWZyYW1lcyB0cmFuc2xhdGVMZWZ0IHtcbiAgICAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzBweCk7XG4gICAgfVxuICBcbiAgICAxMDAlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB9XG4gIH1cbiAgXG4gIEBrZXlmcmFtZXMgdHJhbnNsYXRlUmlnaHQge1xuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzBweCk7XG4gICAgfVxuICBcbiAgICAxMDAlIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwcHgpO1xuICAgIH1cbiAgfVxuICAke3N0eWxlc31gLnJlcGxhY2UoL1xcbisvZywgJycpO1xuXG4gIHJldHVybiBzdHlsZXM7XG59O1xuIl19
|