@sebgroup/green-angular 3.5.2 → 3.6.0
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/esm2020/index.mjs +2 -1
- package/esm2020/lib/green-angular.module.mjs +7 -3
- package/esm2020/lib/sortable-list/index.mjs +3 -0
- package/esm2020/lib/sortable-list/sortable-list.component.mjs +181 -0
- package/esm2020/lib/sortable-list/sortable-list.module.mjs +20 -0
- package/fesm2015/sebgroup-green-angular.mjs +198 -3
- package/fesm2015/sebgroup-green-angular.mjs.map +1 -1
- package/fesm2020/sebgroup-green-angular.mjs +198 -3
- package/fesm2020/sebgroup-green-angular.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/green-angular.module.d.ts +2 -1
- package/lib/sortable-list/index.d.ts +2 -0
- package/lib/sortable-list/sortable-list.component.d.ts +91 -0
- package/lib/sortable-list/sortable-list.module.d.ts +10 -0
- package/package.json +2 -2
package/esm2020/index.mjs
CHANGED
|
@@ -12,6 +12,7 @@ export * from './lib/shared';
|
|
|
12
12
|
export * from './lib/slider';
|
|
13
13
|
export * from './lib/in-page-wizard';
|
|
14
14
|
export * from './lib/context-menu';
|
|
15
|
+
export * from './lib/sortable-list';
|
|
15
16
|
export * from './lib/cell-table';
|
|
16
17
|
export * from './lib/shared/core-element';
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxrQkFBa0IsQ0FBQTtBQUNoQyxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQTtBQUNwQyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQTtBQUVoQyxjQUFjLDJCQUEyQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JlZW4tYW5ndWxhci5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2NvcmRpb24nXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYWRnZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbidcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVwaWNrZXInXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bidcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGFnaW5hdGlvbidcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb2dyZXNzLWNpcmNsZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlZ21lbnRlZC1jb250cm9sJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2xpZGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW4tcGFnZS13aXphcmQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250ZXh0LW1lbnUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zb3J0YWJsZS1saXN0J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2VsbC10YWJsZSdcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvcmUtZWxlbWVudCdcbiJdfQ==
|
|
@@ -12,6 +12,7 @@ import { NggProgressCircleModule } from './progress-circle/progress-circle.modul
|
|
|
12
12
|
import { NggSegmentedControlModule } from './segmented-control/segmented-control.module';
|
|
13
13
|
import { NggSharedModule } from './shared/shared.module';
|
|
14
14
|
import { NggSliderModule } from './slider/slider.module';
|
|
15
|
+
import { NggSortableListModule } from './sortable-list/sortable-list.module';
|
|
15
16
|
import { NggCellTableModule } from './cell-table';
|
|
16
17
|
import * as i0 from "@angular/core";
|
|
17
18
|
export class NggModule {
|
|
@@ -29,7 +30,8 @@ NggModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
|
|
|
29
30
|
NggContextMenuModule,
|
|
30
31
|
NggInPageWizardModule,
|
|
31
32
|
NggCellTableModule,
|
|
32
|
-
NggSharedModule
|
|
33
|
+
NggSharedModule,
|
|
34
|
+
NggSortableListModule] });
|
|
33
35
|
NggModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModule, imports: [CommonModule, NggAccordionModule,
|
|
34
36
|
NggBadgeModule,
|
|
35
37
|
NggButtonModule,
|
|
@@ -42,7 +44,8 @@ NggModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.
|
|
|
42
44
|
NggContextMenuModule,
|
|
43
45
|
NggInPageWizardModule,
|
|
44
46
|
NggCellTableModule,
|
|
45
|
-
NggSharedModule
|
|
47
|
+
NggSharedModule,
|
|
48
|
+
NggSortableListModule] });
|
|
46
49
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModule, decorators: [{
|
|
47
50
|
type: NgModule,
|
|
48
51
|
args: [{
|
|
@@ -62,7 +65,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
62
65
|
NggInPageWizardModule,
|
|
63
66
|
NggCellTableModule,
|
|
64
67
|
NggSharedModule,
|
|
68
|
+
NggSortableListModule,
|
|
65
69
|
],
|
|
66
70
|
}]
|
|
67
71
|
}] });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlZW4tYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9ncmVlbi1hbmd1bGFyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFBO0FBQ2xGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFBOztBQXNCakQsTUFBTSxPQUFPLFNBQVM7O3NHQUFULFNBQVM7dUdBQVQsU0FBUyxZQWxCVixZQUFZLGFBRXBCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixxQkFBcUI7dUdBR1osU0FBUyxZQWxCVixZQUFZLEVBRXBCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixxQkFBcUI7MkZBR1osU0FBUztrQkFwQnJCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YscUJBQXFCO3FCQUN0QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nZ0FjY29yZGlvbk1vZHVsZSB9IGZyb20gJy4vYWNjb3JkaW9uJ1xuaW1wb3J0IHsgTmdnQmFkZ2VNb2R1bGUgfSBmcm9tICcuL2JhZGdlL2JhZGdlLm1vZHVsZSdcbmltcG9ydCB7IE5nZ0J1dHRvbk1vZHVsZSB9IGZyb20gJy4vYnV0dG9uL2J1dHRvbi5tb2R1bGUnXG5pbXBvcnQgeyBOZ2dDb250ZXh0TWVudU1vZHVsZSB9IGZyb20gJy4vY29udGV4dC1tZW51J1xuaW1wb3J0IHsgTmdnRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJy4vZGF0ZXBpY2tlci9kYXRlcGlja2VyLm1vZHVsZSdcbmltcG9ydCB7IE5nZ0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnLi9kcm9wZG93bi9kcm9wZG93bi5tb2R1bGUnXG5pbXBvcnQgeyBOZ2dJblBhZ2VXaXphcmRNb2R1bGUgfSBmcm9tICcuL2luLXBhZ2Utd2l6YXJkJ1xuaW1wb3J0IHsgTmdnTW9kYWxNb2R1bGUgfSBmcm9tICcuL21vZGFsJ1xuaW1wb3J0IHsgTmdnUHJvZ3Jlc3NDaXJjbGVNb2R1bGUgfSBmcm9tICcuL3Byb2dyZXNzLWNpcmNsZS9wcm9ncmVzcy1jaXJjbGUubW9kdWxlJ1xuaW1wb3J0IHsgTmdnU2VnbWVudGVkQ29udHJvbE1vZHVsZSB9IGZyb20gJy4vc2VnbWVudGVkLWNvbnRyb2wvc2VnbWVudGVkLWNvbnRyb2wubW9kdWxlJ1xuaW1wb3J0IHsgTmdnU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSdcbmltcG9ydCB7IE5nZ1NsaWRlck1vZHVsZSB9IGZyb20gJy4vc2xpZGVyL3NsaWRlci5tb2R1bGUnXG5pbXBvcnQgeyBOZ2dTb3J0YWJsZUxpc3RNb2R1bGUgfSBmcm9tICcuL3NvcnRhYmxlLWxpc3Qvc29ydGFibGUtbGlzdC5tb2R1bGUnXG5pbXBvcnQgeyBOZ2dDZWxsVGFibGVNb2R1bGUgfSBmcm9tICcuL2NlbGwtdGFibGUnXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbXG4gICAgTmdnQWNjb3JkaW9uTW9kdWxlLFxuICAgIE5nZ0JhZGdlTW9kdWxlLFxuICAgIE5nZ0J1dHRvbk1vZHVsZSxcbiAgICBOZ2dEYXRlcGlja2VyTW9kdWxlLFxuICAgIE5nZ0Ryb3Bkb3duTW9kdWxlLFxuICAgIE5nZ01vZGFsTW9kdWxlLFxuICAgIE5nZ1Byb2dyZXNzQ2lyY2xlTW9kdWxlLFxuICAgIE5nZ1NlZ21lbnRlZENvbnRyb2xNb2R1bGUsXG4gICAgTmdnU2xpZGVyTW9kdWxlLFxuICAgIE5nZ0NvbnRleHRNZW51TW9kdWxlLFxuICAgIE5nZ0luUGFnZVdpemFyZE1vZHVsZSxcbiAgICBOZ2dDZWxsVGFibGVNb2R1bGUsXG4gICAgTmdnU2hhcmVkTW9kdWxlLFxuICAgIE5nZ1NvcnRhYmxlTGlzdE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './sortable-list.component';
|
|
2
|
+
export * from './sortable-list.module';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9zb3J0YWJsZS1saXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx3QkFBd0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc29ydGFibGUtbGlzdC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL3NvcnRhYmxlLWxpc3QubW9kdWxlJ1xuIl19
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { moveItemInArray, transferArrayItem, } from '@angular/cdk/drag-drop';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/cdk/drag-drop";
|
|
6
|
+
export class NggSortableListComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.groups = [];
|
|
9
|
+
this.shouldDisplayCheckboxes = false;
|
|
10
|
+
this.isReadOnly = false;
|
|
11
|
+
this.isDraggable = true;
|
|
12
|
+
this.description = '';
|
|
13
|
+
this.suffixTemplate = null;
|
|
14
|
+
this.itemSelectionChanged = new EventEmitter();
|
|
15
|
+
this.itemOrderChanged = new EventEmitter();
|
|
16
|
+
this.focusedIndex = { 0: 0 };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Toggles the selection of a checklist item and updates its position in the list.
|
|
20
|
+
*
|
|
21
|
+
* @param item - The checklist item to update.
|
|
22
|
+
*/
|
|
23
|
+
toggleSelection(item) {
|
|
24
|
+
item.selected = !item.selected;
|
|
25
|
+
this.emitCheckListItem(item);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Handles the onDragDrop event.
|
|
29
|
+
*
|
|
30
|
+
* @param event - The drag and drop event.
|
|
31
|
+
*/
|
|
32
|
+
onDragDrop(event) {
|
|
33
|
+
if (event.previousContainer === event.container) {
|
|
34
|
+
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
|
|
38
|
+
}
|
|
39
|
+
this.emitItemOrderChanged([Number(event.previousContainer.id), event.previousIndex], [Number(event.container.id), event.currentIndex]);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Handles moving items up or down using the alt + arrow up or alt + arrow down keys.
|
|
43
|
+
*
|
|
44
|
+
* @param groupIndex - The index of the group.
|
|
45
|
+
* @param currentItemIndex - The current index of the item.
|
|
46
|
+
* @param newItemIndex - The new index of the item.
|
|
47
|
+
*/
|
|
48
|
+
onAltArrowKeydown(groupIndex, currentItemIndex, newItemIndex, event) {
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
let newIndex = newItemIndex;
|
|
51
|
+
let newGroupIndex = groupIndex;
|
|
52
|
+
let transfer = false;
|
|
53
|
+
if (newIndex > this.groups[groupIndex].items.length - 1) {
|
|
54
|
+
newIndex = 0;
|
|
55
|
+
newGroupIndex = groupIndex + 1;
|
|
56
|
+
transfer = true;
|
|
57
|
+
this.focusedIndex[groupIndex] = this.groups[groupIndex].items.length - 2;
|
|
58
|
+
}
|
|
59
|
+
else if (newIndex < 0) {
|
|
60
|
+
newGroupIndex = groupIndex - 1;
|
|
61
|
+
newIndex = this.groups[newGroupIndex].items.length;
|
|
62
|
+
transfer = true;
|
|
63
|
+
this.focusedIndex[groupIndex] = 0;
|
|
64
|
+
}
|
|
65
|
+
if (transfer) {
|
|
66
|
+
transferArrayItem(this.groups[groupIndex].items, this.groups[newGroupIndex].items, currentItemIndex, newIndex);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
moveItemInArray(this.groups[groupIndex].items, currentItemIndex, newIndex);
|
|
70
|
+
}
|
|
71
|
+
this.emitItemOrderChanged([groupIndex, currentItemIndex], [newGroupIndex, newIndex]);
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
this.focusItem(newGroupIndex, newIndex);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Handles focus by arrow keydown event.
|
|
78
|
+
*
|
|
79
|
+
* @param groupIndex - The index of the group.
|
|
80
|
+
* @param itemIndex - The index of the item.
|
|
81
|
+
* @param event - The keyboard event.
|
|
82
|
+
*/
|
|
83
|
+
onArrowKeydown(groupIndex, itemIndex, event) {
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
let gi = groupIndex;
|
|
87
|
+
if (itemIndex > this.groups[groupIndex].items.length - 1) {
|
|
88
|
+
gi = groupIndex + 1;
|
|
89
|
+
itemIndex = 0;
|
|
90
|
+
}
|
|
91
|
+
if (itemIndex < 0) {
|
|
92
|
+
gi = groupIndex - 1;
|
|
93
|
+
if (gi < 0) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
itemIndex = this.groups[gi].items.length - 1;
|
|
97
|
+
}
|
|
98
|
+
this.focusItem(gi, itemIndex);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Emits the item order changed event.
|
|
103
|
+
*
|
|
104
|
+
* @param previousIndex - The previous index of the item.
|
|
105
|
+
* @param currentIndex - The current index of the item.
|
|
106
|
+
*/
|
|
107
|
+
emitItemOrderChanged(previousIndex, currentIndex) {
|
|
108
|
+
this.itemOrderChanged.emit({
|
|
109
|
+
previousIndex,
|
|
110
|
+
currentIndex,
|
|
111
|
+
groups: [...this.groups],
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Emits the selected checklist item through an event.
|
|
116
|
+
*
|
|
117
|
+
* @param item - The checklist item to emit.
|
|
118
|
+
*/
|
|
119
|
+
emitCheckListItem(item) {
|
|
120
|
+
this.itemSelectionChanged.emit({ changedItem: item, groups: this.groups });
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Focuses on a specific item in the sortable list.
|
|
124
|
+
*
|
|
125
|
+
* @param groupIndex - The index of the group.
|
|
126
|
+
* @param itemIndex - The index of the item.
|
|
127
|
+
*/
|
|
128
|
+
focusItem(groupIndex, itemIndex) {
|
|
129
|
+
const groupElements = this.sortableListGroups.nativeElement.querySelectorAll('.item-list-group');
|
|
130
|
+
if (groupElements && groupElements.length > groupIndex) {
|
|
131
|
+
const itemElements = groupElements[groupIndex].querySelectorAll('.item');
|
|
132
|
+
if (itemElements && itemElements.length > itemIndex) {
|
|
133
|
+
if (this.shouldDisplayCheckboxes) {
|
|
134
|
+
itemElements[itemIndex].querySelector('input').focus();
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
itemElements[itemIndex].focus();
|
|
138
|
+
}
|
|
139
|
+
this.focusedIndex[groupIndex] = itemIndex;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Checks if an item has focus.
|
|
145
|
+
*
|
|
146
|
+
* @param groupIndex - The index of the group.
|
|
147
|
+
* @param itemIndex - The index of the item.
|
|
148
|
+
*/
|
|
149
|
+
itemHasFocus(groupIndex, itemIndex) {
|
|
150
|
+
if (!this.focusedIndex[groupIndex]) {
|
|
151
|
+
this.focusedIndex[groupIndex] = 0;
|
|
152
|
+
}
|
|
153
|
+
return this.focusedIndex[groupIndex] === itemIndex;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
NggSortableListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
+
NggSortableListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggSortableListComponent, selector: "ngg-sortable-list", inputs: { groups: "groups", shouldDisplayCheckboxes: "shouldDisplayCheckboxes", isReadOnly: "isReadOnly", isDraggable: "isDraggable", description: "description", suffixTemplate: "suffixTemplate" }, outputs: { itemSelectionChanged: "itemSelectionChanged", itemOrderChanged: "itemOrderChanged" }, viewQueries: [{ propertyName: "sortableListGroups", first: true, predicate: ["sortableListGroups"], descendants: true }], ngImport: i0, template: "<div class=\"item-list\">\n <ng-container>\n <p class=\"item-list-header\">\n <span class=\"item-list-header-title\">{{ description }}</span>\n </p>\n <div #sortableListGroups cdkDropListGroup>\n <div\n *ngFor=\"let group of groups; let g_i = index\"\n class=\"item-list-group\"\n [class.drag-enabled]=\"isDraggable && !isReadOnly\"\n role=\"list\"\n cdkDropList\n [cdkDropListData]=\"group.items\"\n [id]=\"g_i.toString()\"\n (cdkDropListDropped)=\"onDragDrop($event)\"\n >\n <p\n *ngIf=\"group.title && group.title.length > 0\"\n class=\"item-list-header\"\n >\n <span class=\"item-list-header-title\">{{ group.title }}</span>\n </p>\n <p\n *ngIf=\"group.description && group.description.length > 0\"\n class=\"item-list-header-description\"\n >\n {{ group.description }}\n </p>\n <div\n *ngFor=\"let checklistItem of group.items; let i = index\"\n [cdkDragDisabled]=\"!isDraggable || isReadOnly\"\n [cdkDragData]=\"checklistItem\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n class=\"item-box\"\n role=\"listitem\"\n >\n <div *cdkDragPlaceholder class=\"item-custom-placeholder\"></div>\n <label\n (keydown.alt.arrowDown)=\"onAltArrowKeydown(g_i, i, i + 1, $event)\"\n (keydown.alt.arrowUp)=\"onAltArrowKeydown(g_i, i, i - 1, $event)\"\n (keydown.arrowDown)=\"onArrowKeydown(g_i, i + 1, $event)\"\n (keydown.arrowUp)=\"onArrowKeydown(g_i, i - 1, $event)\"\n class=\"form-control item-control align-items-center item\"\n [tabindex]=\"shouldDisplayCheckboxes ? '-1' : '0'\"\n >\n <div class=\"form-control\">\n <input\n (change)=\"toggleSelection(checklistItem)\"\n [checked]=\"checklistItem.selected\"\n [disabled]=\"isReadOnly\"\n [type]=\"shouldDisplayCheckboxes ? 'checkbox' : 'hidden'\"\n />\n <div class=\"item-box-title\">\n <span name=\"agendaItemName\"\n >{{ checklistItem.name }}\n <span\n *ngIf=\"checklistItem.hasCustomSuffix\"\n class=\"item-list-suffix\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n suffixTemplate;\n context: { $implicit: checklistItem }\n \"\n class=\"user-icon\"\n >\n </ng-container>\n </span>\n </span>\n <br />\n <span *ngIf=\"!!checklistItem.description\">\n <span class=\"item-list-suffix\" name=\"agendaItemToolTip\">\n {{ checklistItem.description }}\n </span>\n <br />\n </span>\n </div>\n <i></i>\n </div>\n <div *ngIf=\"isDraggable && !isReadOnly\" class=\"item-grip-icon\">\n <i class=\"sg-icon sg-icon-grip-vertical text-primary\"></i>\n </div>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".item-list{width:100%;display:block}label.item{padding:0!important}.item-box{background-color:var(--sg-card-background);color:var(--text-primary-color);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;font-size:14px;margin:5px 0;border:1px solid var(--border-color);border-radius:4px}.form-control{line-height:20px;font-size:16px;font-weight:500}.item-list-header{display:flex;flex-direction:row;justify-content:space-between;margin-bottom:1rem}.item-list-header-title{font-weight:600;font-size:1rem;line-height:1.25rem;font-style:normal}.item-list-header-subtitle{font-size:.75rem;color:var(--text-primary-color);display:flex;justify-content:center;align-content:center}.item-list-suffix{font-weight:400;font-size:.85rem}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.item-grip-icon{font-weight:400;padding:.75rem 1rem .75rem 0rem}.cdk-drop-list.cdk-drop-list-dragging{cursor:grabbing!important;pointer-events:all!important}.item-custom-placeholder.cdk-drag-placeholder{pointer-events:all!important}.cdk-drop-list.drag-enabled:not(.cdk-drag-placeholder) label{cursor:grab}.cdk-drop-list label:focus-visible{outline-color:#333;outline-offset:4px}.item-list.cdk-drop-list-dragging .item-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);pointer-events:all!important}.item-custom-placeholder{border:dotted 1px #999;min-height:44px;transition:transform .25s cubic-bezier(0,0,.2,1);border-radius:4px;margin:5px 0;padding:12px 12px 12px 16px}.user-icon{margin-right:.5rem}.item-control{width:100%;display:flex;flex-direction:row;justify-content:space-between}.form-control.item-layout{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }] });
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListComponent, decorators: [{
|
|
159
|
+
type: Component,
|
|
160
|
+
args: [{ selector: 'ngg-sortable-list', template: "<div class=\"item-list\">\n <ng-container>\n <p class=\"item-list-header\">\n <span class=\"item-list-header-title\">{{ description }}</span>\n </p>\n <div #sortableListGroups cdkDropListGroup>\n <div\n *ngFor=\"let group of groups; let g_i = index\"\n class=\"item-list-group\"\n [class.drag-enabled]=\"isDraggable && !isReadOnly\"\n role=\"list\"\n cdkDropList\n [cdkDropListData]=\"group.items\"\n [id]=\"g_i.toString()\"\n (cdkDropListDropped)=\"onDragDrop($event)\"\n >\n <p\n *ngIf=\"group.title && group.title.length > 0\"\n class=\"item-list-header\"\n >\n <span class=\"item-list-header-title\">{{ group.title }}</span>\n </p>\n <p\n *ngIf=\"group.description && group.description.length > 0\"\n class=\"item-list-header-description\"\n >\n {{ group.description }}\n </p>\n <div\n *ngFor=\"let checklistItem of group.items; let i = index\"\n [cdkDragDisabled]=\"!isDraggable || isReadOnly\"\n [cdkDragData]=\"checklistItem\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n class=\"item-box\"\n role=\"listitem\"\n >\n <div *cdkDragPlaceholder class=\"item-custom-placeholder\"></div>\n <label\n (keydown.alt.arrowDown)=\"onAltArrowKeydown(g_i, i, i + 1, $event)\"\n (keydown.alt.arrowUp)=\"onAltArrowKeydown(g_i, i, i - 1, $event)\"\n (keydown.arrowDown)=\"onArrowKeydown(g_i, i + 1, $event)\"\n (keydown.arrowUp)=\"onArrowKeydown(g_i, i - 1, $event)\"\n class=\"form-control item-control align-items-center item\"\n [tabindex]=\"shouldDisplayCheckboxes ? '-1' : '0'\"\n >\n <div class=\"form-control\">\n <input\n (change)=\"toggleSelection(checklistItem)\"\n [checked]=\"checklistItem.selected\"\n [disabled]=\"isReadOnly\"\n [type]=\"shouldDisplayCheckboxes ? 'checkbox' : 'hidden'\"\n />\n <div class=\"item-box-title\">\n <span name=\"agendaItemName\"\n >{{ checklistItem.name }}\n <span\n *ngIf=\"checklistItem.hasCustomSuffix\"\n class=\"item-list-suffix\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n suffixTemplate;\n context: { $implicit: checklistItem }\n \"\n class=\"user-icon\"\n >\n </ng-container>\n </span>\n </span>\n <br />\n <span *ngIf=\"!!checklistItem.description\">\n <span class=\"item-list-suffix\" name=\"agendaItemToolTip\">\n {{ checklistItem.description }}\n </span>\n <br />\n </span>\n </div>\n <i></i>\n </div>\n <div *ngIf=\"isDraggable && !isReadOnly\" class=\"item-grip-icon\">\n <i class=\"sg-icon sg-icon-grip-vertical text-primary\"></i>\n </div>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".item-list{width:100%;display:block}label.item{padding:0!important}.item-box{background-color:var(--sg-card-background);color:var(--text-primary-color);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;font-size:14px;margin:5px 0;border:1px solid var(--border-color);border-radius:4px}.form-control{line-height:20px;font-size:16px;font-weight:500}.item-list-header{display:flex;flex-direction:row;justify-content:space-between;margin-bottom:1rem}.item-list-header-title{font-weight:600;font-size:1rem;line-height:1.25rem;font-style:normal}.item-list-header-subtitle{font-size:.75rem;color:var(--text-primary-color);display:flex;justify-content:center;align-content:center}.item-list-suffix{font-weight:400;font-size:.85rem}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.item-grip-icon{font-weight:400;padding:.75rem 1rem .75rem 0rem}.cdk-drop-list.cdk-drop-list-dragging{cursor:grabbing!important;pointer-events:all!important}.item-custom-placeholder.cdk-drag-placeholder{pointer-events:all!important}.cdk-drop-list.drag-enabled:not(.cdk-drag-placeholder) label{cursor:grab}.cdk-drop-list label:focus-visible{outline-color:#333;outline-offset:4px}.item-list.cdk-drop-list-dragging .item-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);pointer-events:all!important}.item-custom-placeholder{border:dotted 1px #999;min-height:44px;transition:transform .25s cubic-bezier(0,0,.2,1);border-radius:4px;margin:5px 0;padding:12px 12px 12px 16px}.user-icon{margin-right:.5rem}.item-control{width:100%;display:flex;flex-direction:row;justify-content:space-between}.form-control.item-layout{display:flex;justify-content:space-between}\n"] }]
|
|
161
|
+
}], propDecorators: { groups: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], shouldDisplayCheckboxes: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], isReadOnly: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], isDraggable: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], description: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], suffixTemplate: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], itemSelectionChanged: [{
|
|
174
|
+
type: Output
|
|
175
|
+
}], itemOrderChanged: [{
|
|
176
|
+
type: Output
|
|
177
|
+
}], sortableListGroups: [{
|
|
178
|
+
type: ViewChild,
|
|
179
|
+
args: ['sortableListGroups']
|
|
180
|
+
}] } });
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9zb3J0YWJsZS1saXN0L3NvcnRhYmxlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvc29ydGFibGUtbGlzdC9zb3J0YWJsZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBRUwsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLHdCQUF3QixDQUFBOzs7O0FBcUIvQixNQUFNLE9BQU8sd0JBQXdCO0lBTHJDO1FBTVcsV0FBTSxHQUF3QixFQUFFLENBQUE7UUFDaEMsNEJBQXVCLEdBQUcsS0FBSyxDQUFBO1FBQy9CLGVBQVUsR0FBRyxLQUFLLENBQUE7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUE7UUFDbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUE7UUFDaEIsbUJBQWMsR0FBNEIsSUFBSSxDQUFBO1FBRTdDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUc3QyxDQUFBO1FBQ00scUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBSXpDLENBQUE7UUFJSixpQkFBWSxHQUEyQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtLQXFMaEQ7SUFuTEM7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxJQUFzQjtRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFV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QUFnQjtzQkFBekIsTUFBTTtnQkFNMEIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2RrRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnXG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydGFibGVMaXN0SXRlbSB7XG4gIGlkOiBhbnlcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIHNlbGVjdGVkPzogYm9vbGVhblxuICBoYXNDdXN0b21TdWZmaXg/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydGFibGVMaXN0R3JvdXAge1xuICBpdGVtczogU29ydGFibGVMaXN0SXRlbVtdXG4gIHRpdGxlOiBzdHJpbmdcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLXNvcnRhYmxlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc29ydGFibGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NvcnRhYmxlLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdnU29ydGFibGVMaXN0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgZ3JvdXBzOiBTb3J0YWJsZUxpc3RHcm91cFtdID0gW11cbiAgQElucHV0KCkgc2hvdWxkRGlzcGxheUNoZWNrYm94ZXMgPSBmYWxzZVxuICBASW5wdXQoKSBpc1JlYWRPbmx5ID0gZmFsc2VcbiAgQElucHV0KCkgaXNEcmFnZ2FibGUgPSB0cnVlXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uID0gJydcbiAgQElucHV0KCkgc3VmZml4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbFxuXG4gIEBPdXRwdXQoKSBpdGVtU2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGNoYW5nZWRJdGVtOiBTb3J0YWJsZUxpc3RJdGVtXG4gICAgZ3JvdXBzOiBTb3J0YWJsZUxpc3RHcm91cFtdXG4gIH0+KClcbiAgQE91dHB1dCgpIGl0ZW1PcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBwcmV2aW91c0luZGV4OiBbbnVtYmVyLCBudW1iZXJdXG4gICAgY3VycmVudEluZGV4OiBbbnVtYmVyLCBudW1iZXJdXG4gICAgZ3JvdXBzOiBTb3J0YWJsZUxpc3RHcm91cFtdXG4gIH0+KClcblxuICBAVmlld0NoaWxkKCdzb3J0YWJsZUxpc3RHcm91cHMnKSBzb3J0YWJsZUxpc3RHcm91cHMhOiBFbGVtZW50UmVmXG5cbiAgZm9jdXNlZEluZGV4OiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+ID0geyAwOiAwIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc2VsZWN0aW9uIG9mIGEgY2hlY2tsaXN0IGl0ZW0gYW5kIHVwZGF0ZXMgaXRzIHBvc2l0aW9uIGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBjaGVja2xpc3QgaXRlbSB0byB1cGRhdGUuXG4gICAqL1xuICB0b2dnbGVTZWxlY3Rpb24oaXRlbTogU29ydGFibGVMaXN0SXRlbSkge1xuICAgIGl0ZW0uc2VsZWN0ZWQgPSAhaXRlbS5zZWxlY3RlZFxuICAgIHRoaXMuZW1pdENoZWNrTGlzdEl0ZW0oaXRlbSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBvbkRyYWdEcm9wIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZHJhZyBhbmQgZHJvcCBldmVudC5cbiAgICovXG4gIG9uRHJhZ0Ryb3AoZXZlbnQ6IENka0RyYWdEcm9wPFNvcnRhYmxlTGlzdEl0ZW1bXT4pIHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5lbWl0SXRlbU9yZGVyQ2hhbmdlZChcbiAgICAgIFtOdW1iZXIoZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQpLCBldmVudC5wcmV2aW91c0luZGV4XSxcbiAgICAgIFtOdW1iZXIoZXZlbnQuY29udGFpbmVyLmlkKSwgZXZlbnQuY3VycmVudEluZGV4XVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG1vdmluZyBpdGVtcyB1cCBvciBkb3duIHVzaW5nIHRoZSBhbHQgKyBhcnJvdyB1cCBvciBhbHQgKyBhcnJvdyBkb3duIGtleXMuXG4gICAqXG4gICAqIEBwYXJhbSBncm91cEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBncm91cC5cbiAgICogQHBhcmFtIGN1cnJlbnRJdGVtSW5kZXggLSBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG5ld0l0ZW1JbmRleCAtIFRoZSBuZXcgaW5kZXggb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBvbkFsdEFycm93S2V5ZG93bihcbiAgICBncm91cEluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEl0ZW1JbmRleDogbnVtYmVyLFxuICAgIG5ld0l0ZW1JbmRleDogbnVtYmVyLFxuICAgIGV2ZW50OiBhbnlcbiAgKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgbGV0IG5ld0luZGV4ID0gbmV3SXRlbUluZGV4XG4gICAgbGV0IG5ld0dyb3VwSW5kZXggPSBncm91cEluZGV4XG4gICAgbGV0IHRyYW5zZmVyID0gZmFsc2VcblxuICAgIGlmIChuZXdJbmRleCA+IHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLml0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgIG5ld0luZGV4ID0gMFxuICAgICAgbmV3R3JvdXBJbmRleCA9IGdyb3VwSW5kZXggKyAxXG4gICAgICB0cmFuc2ZlciA9IHRydWVcbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4W2dyb3VwSW5kZXhdID0gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uaXRlbXMubGVuZ3RoIC0gMlxuICAgIH0gZWxzZSBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdHcm91cEluZGV4ID0gZ3JvdXBJbmRleCAtIDFcbiAgICAgIG5ld0luZGV4ID0gdGhpcy5ncm91cHNbbmV3R3JvdXBJbmRleF0uaXRlbXMubGVuZ3RoXG4gICAgICB0cmFuc2ZlciA9IHRydWVcbiAgICAgIHRoaXMuZm9jdXNlZEluZGV4W2dyb3VwSW5kZXhdID0gMFxuICAgIH1cblxuICAgIGlmICh0cmFuc2Zlcikge1xuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgIHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLml0ZW1zLFxuICAgICAgICB0aGlzLmdyb3Vwc1tuZXdHcm91cEluZGV4XS5pdGVtcyxcbiAgICAgICAgY3VycmVudEl0ZW1JbmRleCxcbiAgICAgICAgbmV3SW5kZXhcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLml0ZW1zLCBjdXJyZW50SXRlbUluZGV4LCBuZXdJbmRleClcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJdGVtT3JkZXJDaGFuZ2VkKFxuICAgICAgW2dyb3VwSW5kZXgsIGN1cnJlbnRJdGVtSW5kZXhdLFxuICAgICAgW25ld0dyb3VwSW5kZXgsIG5ld0luZGV4XVxuICAgIClcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV3R3JvdXBJbmRleCwgbmV3SW5kZXgpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGZvY3VzIGJ5IGFycm93IGtleWRvd24gZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBncm91cEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBncm91cC5cbiAgICogQHBhcmFtIGl0ZW1JbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50LlxuICAgKi9cbiAgb25BcnJvd0tleWRvd24oZ3JvdXBJbmRleDogbnVtYmVyLCBpdGVtSW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IGdpID0gZ3JvdXBJbmRleFxuXG4gICAgICBpZiAoaXRlbUluZGV4ID4gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBnaSA9IGdyb3VwSW5kZXggKyAxXG4gICAgICAgIGl0ZW1JbmRleCA9IDBcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgZ2kgPSBncm91cEluZGV4IC0gMVxuICAgICAgICBpZiAoZ2kgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaXRlbUluZGV4ID0gdGhpcy5ncm91cHNbZ2ldLml0ZW1zLmxlbmd0aCAtIDFcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb2N1c0l0ZW0oZ2ksIGl0ZW1JbmRleClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBpdGVtIG9yZGVyIGNoYW5nZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwcmV2aW91c0luZGV4IC0gVGhlIHByZXZpb3VzIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gY3VycmVudEluZGV4IC0gVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIGVtaXRJdGVtT3JkZXJDaGFuZ2VkKFxuICAgIHByZXZpb3VzSW5kZXg6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgY3VycmVudEluZGV4OiBbbnVtYmVyLCBudW1iZXJdXG4gICkge1xuICAgIHRoaXMuaXRlbU9yZGVyQ2hhbmdlZC5lbWl0KHtcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBncm91cHM6IFsuLi50aGlzLmdyb3Vwc10sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgY2hlY2tsaXN0IGl0ZW0gdGhyb3VnaCBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBUaGUgY2hlY2tsaXN0IGl0ZW0gdG8gZW1pdC5cbiAgICovXG4gIHByaXZhdGUgZW1pdENoZWNrTGlzdEl0ZW0oaXRlbTogU29ydGFibGVMaXN0SXRlbSkge1xuICAgIHRoaXMuaXRlbVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7IGNoYW5nZWRJdGVtOiBpdGVtLCBncm91cHM6IHRoaXMuZ3JvdXBzIH0pXG4gIH1cblxuICAvKipcbiAgICogRm9jdXNlcyBvbiBhIHNwZWNpZmljIGl0ZW0gaW4gdGhlIHNvcnRhYmxlIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBncm91cEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBncm91cC5cbiAgICogQHBhcmFtIGl0ZW1JbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgZm9jdXNJdGVtKGdyb3VwSW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBncm91cEVsZW1lbnRzID1cbiAgICAgIHRoaXMuc29ydGFibGVMaXN0R3JvdXBzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0tbGlzdC1ncm91cCcpXG5cbiAgICBpZiAoZ3JvdXBFbGVtZW50cyAmJiBncm91cEVsZW1lbnRzLmxlbmd0aCA+IGdyb3VwSW5kZXgpIHtcbiAgICAgIGNvbnN0IGl0ZW1FbGVtZW50cyA9IGdyb3VwRWxlbWVudHNbZ3JvdXBJbmRleF0ucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0nKVxuICAgICAgaWYgKGl0ZW1FbGVtZW50cyAmJiBpdGVtRWxlbWVudHMubGVuZ3RoID4gaXRlbUluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZERpc3BsYXlDaGVja2JveGVzKSB7XG4gICAgICAgICAgaXRlbUVsZW1lbnRzW2l0ZW1JbmRleF0ucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbUVsZW1lbnRzW2l0ZW1JbmRleF0uZm9jdXMoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNlZEluZGV4W2dyb3VwSW5kZXhdID0gaXRlbUluZGV4XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBpdGVtIGhhcyBmb2N1cy5cbiAgICpcbiAgICogQHBhcmFtIGdyb3VwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGdyb3VwLlxuICAgKiBAcGFyYW0gaXRlbUluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKi9cbiAgaXRlbUhhc0ZvY3VzKGdyb3VwSW5kZXg6IG51bWJlciwgaXRlbUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNlZEluZGV4W2dyb3VwSW5kZXhdKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJbmRleFtncm91cEluZGV4XSA9IDBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZEluZGV4W2dyb3VwSW5kZXhdID09PSBpdGVtSW5kZXhcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIml0ZW0tbGlzdFwiPlxuICA8bmctY29udGFpbmVyPlxuICAgIDxwIGNsYXNzPVwiaXRlbS1saXN0LWhlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWxpc3QtaGVhZGVyLXRpdGxlXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgPC9wPlxuICAgIDxkaXYgI3NvcnRhYmxlTGlzdEdyb3VwcyBjZGtEcm9wTGlzdEdyb3VwPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzOyBsZXQgZ19pID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC1ncm91cFwiXG4gICAgICAgIFtjbGFzcy5kcmFnLWVuYWJsZWRdPVwiaXNEcmFnZ2FibGUgJiYgIWlzUmVhZE9ubHlcIlxuICAgICAgICByb2xlPVwibGlzdFwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiZ3JvdXAuaXRlbXNcIlxuICAgICAgICBbaWRdPVwiZ19pLnRvU3RyaW5nKClcIlxuICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJhZ0Ryb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwXG4gICAgICAgICAgKm5nSWY9XCJncm91cC50aXRsZSAmJiBncm91cC50aXRsZS5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC1oZWFkZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWxpc3QtaGVhZGVyLXRpdGxlXCI+e3sgZ3JvdXAudGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cImdyb3VwLmRlc2NyaXB0aW9uICYmIGdyb3VwLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiaXRlbS1saXN0LWhlYWRlci1kZXNjcmlwdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBncm91cC5kZXNjcmlwdGlvbiB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hlY2tsaXN0SXRlbSBvZiBncm91cC5pdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhaXNEcmFnZ2FibGUgfHwgaXNSZWFkT25seVwiXG4gICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNoZWNrbGlzdEl0ZW1cIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ5XCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW0tYm94XCJcbiAgICAgICAgICByb2xlPVwibGlzdGl0ZW1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiaXRlbS1jdXN0b20tcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIChrZXlkb3duLmFsdC5hcnJvd0Rvd24pPVwib25BbHRBcnJvd0tleWRvd24oZ19pLCBpLCBpICsgMSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5hbHQuYXJyb3dVcCk9XCJvbkFsdEFycm93S2V5ZG93bihnX2ksIGksIGkgLSAxLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmFycm93RG93bik9XCJvbkFycm93S2V5ZG93bihnX2ksIGkgKyAxLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmFycm93VXApPVwib25BcnJvd0tleWRvd24oZ19pLCBpIC0gMSwgJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBpdGVtLWNvbnRyb2wgYWxpZ24taXRlbXMtY2VudGVyIGl0ZW1cIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cInNob3VsZERpc3BsYXlDaGVja2JveGVzID8gJy0xJyA6ICcwJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbihjaGVja2xpc3RJdGVtKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tsaXN0SXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInNob3VsZERpc3BsYXlDaGVja2JveGVzID8gJ2NoZWNrYm94JyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYm94LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbmFtZT1cImFnZW5kYUl0ZW1OYW1lXCJcbiAgICAgICAgICAgICAgICAgID57eyBjaGVja2xpc3RJdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tsaXN0SXRlbS5oYXNDdXN0b21TdWZmaXhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC1zdWZmaXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoZWNrbGlzdEl0ZW0gfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEhY2hlY2tsaXN0SXRlbS5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWxpc3Qtc3VmZml4XCIgbmFtZT1cImFnZW5kYUl0ZW1Ub29sVGlwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNoZWNrbGlzdEl0ZW0uZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRHJhZ2dhYmxlICYmICFpc1JlYWRPbmx5XCIgY2xhc3M9XCJpdGVtLWdyaXAtaWNvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInNnLWljb24gc2ctaWNvbi1ncmlwLXZlcnRpY2FsIHRleHQtcHJpbWFyeVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { NggSortableListComponent } from './sortable-list.component';
|
|
5
|
+
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class NggSortableListModule {
|
|
8
|
+
}
|
|
9
|
+
NggSortableListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
NggSortableListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, declarations: [NggSortableListComponent], imports: [CommonModule, FormsModule, DragDropModule], exports: [NggSortableListComponent] });
|
|
11
|
+
NggSortableListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, imports: [CommonModule, FormsModule, DragDropModule] });
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
imports: [CommonModule, FormsModule, DragDropModule],
|
|
16
|
+
exports: [NggSortableListComponent],
|
|
17
|
+
declarations: [NggSortableListComponent],
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydGFibGUtbGlzdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9zb3J0YWJsZS1saXN0L3NvcnRhYmxlLWxpc3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7O0FBT3ZELE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQixpQkFGakIsd0JBQXdCLGFBRjdCLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxhQUN6Qyx3QkFBd0I7bUhBR3ZCLHFCQUFxQixZQUp0QixZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWM7MkZBSXhDLHFCQUFxQjtrQkFMakMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQztvQkFDcEQsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ25DLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBOZ2dTb3J0YWJsZUxpc3RDb21wb25lbnQgfSBmcm9tICcuL3NvcnRhYmxlLWxpc3QuY29tcG9uZW50J1xuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJ1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHJhZ0Ryb3BNb2R1bGVdLFxuICBleHBvcnRzOiBbTmdnU29ydGFibGVMaXN0Q29tcG9uZW50XSxcbiAgZGVjbGFyYXRpb25zOiBbTmdnU29ydGFibGVMaXN0Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmdnU29ydGFibGVMaXN0TW9kdWxlIHt9XG4iXX0=
|
|
@@ -15,6 +15,8 @@ import * as i1$2 from '@angular/router';
|
|
|
15
15
|
import { RouterModule } from '@angular/router';
|
|
16
16
|
import { Subject, fromEvent, interval } from 'rxjs';
|
|
17
17
|
import { takeUntil, throttle } from 'rxjs/operators';
|
|
18
|
+
import * as i2$1 from '@angular/cdk/drag-drop';
|
|
19
|
+
import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
|
|
18
20
|
import * as i1$3 from '@angular/platform-browser';
|
|
19
21
|
|
|
20
22
|
class NggAccordionListItemComponent {
|
|
@@ -1449,6 +1451,196 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1449
1451
|
}]
|
|
1450
1452
|
}] });
|
|
1451
1453
|
|
|
1454
|
+
class NggSortableListComponent {
|
|
1455
|
+
constructor() {
|
|
1456
|
+
this.groups = [];
|
|
1457
|
+
this.shouldDisplayCheckboxes = false;
|
|
1458
|
+
this.isReadOnly = false;
|
|
1459
|
+
this.isDraggable = true;
|
|
1460
|
+
this.description = '';
|
|
1461
|
+
this.suffixTemplate = null;
|
|
1462
|
+
this.itemSelectionChanged = new EventEmitter();
|
|
1463
|
+
this.itemOrderChanged = new EventEmitter();
|
|
1464
|
+
this.focusedIndex = { 0: 0 };
|
|
1465
|
+
}
|
|
1466
|
+
/**
|
|
1467
|
+
* Toggles the selection of a checklist item and updates its position in the list.
|
|
1468
|
+
*
|
|
1469
|
+
* @param item - The checklist item to update.
|
|
1470
|
+
*/
|
|
1471
|
+
toggleSelection(item) {
|
|
1472
|
+
item.selected = !item.selected;
|
|
1473
|
+
this.emitCheckListItem(item);
|
|
1474
|
+
}
|
|
1475
|
+
/**
|
|
1476
|
+
* Handles the onDragDrop event.
|
|
1477
|
+
*
|
|
1478
|
+
* @param event - The drag and drop event.
|
|
1479
|
+
*/
|
|
1480
|
+
onDragDrop(event) {
|
|
1481
|
+
if (event.previousContainer === event.container) {
|
|
1482
|
+
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
|
|
1483
|
+
}
|
|
1484
|
+
else {
|
|
1485
|
+
transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
|
|
1486
|
+
}
|
|
1487
|
+
this.emitItemOrderChanged([Number(event.previousContainer.id), event.previousIndex], [Number(event.container.id), event.currentIndex]);
|
|
1488
|
+
}
|
|
1489
|
+
/**
|
|
1490
|
+
* Handles moving items up or down using the alt + arrow up or alt + arrow down keys.
|
|
1491
|
+
*
|
|
1492
|
+
* @param groupIndex - The index of the group.
|
|
1493
|
+
* @param currentItemIndex - The current index of the item.
|
|
1494
|
+
* @param newItemIndex - The new index of the item.
|
|
1495
|
+
*/
|
|
1496
|
+
onAltArrowKeydown(groupIndex, currentItemIndex, newItemIndex, event) {
|
|
1497
|
+
event.preventDefault();
|
|
1498
|
+
let newIndex = newItemIndex;
|
|
1499
|
+
let newGroupIndex = groupIndex;
|
|
1500
|
+
let transfer = false;
|
|
1501
|
+
if (newIndex > this.groups[groupIndex].items.length - 1) {
|
|
1502
|
+
newIndex = 0;
|
|
1503
|
+
newGroupIndex = groupIndex + 1;
|
|
1504
|
+
transfer = true;
|
|
1505
|
+
this.focusedIndex[groupIndex] = this.groups[groupIndex].items.length - 2;
|
|
1506
|
+
}
|
|
1507
|
+
else if (newIndex < 0) {
|
|
1508
|
+
newGroupIndex = groupIndex - 1;
|
|
1509
|
+
newIndex = this.groups[newGroupIndex].items.length;
|
|
1510
|
+
transfer = true;
|
|
1511
|
+
this.focusedIndex[groupIndex] = 0;
|
|
1512
|
+
}
|
|
1513
|
+
if (transfer) {
|
|
1514
|
+
transferArrayItem(this.groups[groupIndex].items, this.groups[newGroupIndex].items, currentItemIndex, newIndex);
|
|
1515
|
+
}
|
|
1516
|
+
else {
|
|
1517
|
+
moveItemInArray(this.groups[groupIndex].items, currentItemIndex, newIndex);
|
|
1518
|
+
}
|
|
1519
|
+
this.emitItemOrderChanged([groupIndex, currentItemIndex], [newGroupIndex, newIndex]);
|
|
1520
|
+
setTimeout(() => {
|
|
1521
|
+
this.focusItem(newGroupIndex, newIndex);
|
|
1522
|
+
});
|
|
1523
|
+
}
|
|
1524
|
+
/**
|
|
1525
|
+
* Handles focus by arrow keydown event.
|
|
1526
|
+
*
|
|
1527
|
+
* @param groupIndex - The index of the group.
|
|
1528
|
+
* @param itemIndex - The index of the item.
|
|
1529
|
+
* @param event - The keyboard event.
|
|
1530
|
+
*/
|
|
1531
|
+
onArrowKeydown(groupIndex, itemIndex, event) {
|
|
1532
|
+
event.preventDefault();
|
|
1533
|
+
setTimeout(() => {
|
|
1534
|
+
let gi = groupIndex;
|
|
1535
|
+
if (itemIndex > this.groups[groupIndex].items.length - 1) {
|
|
1536
|
+
gi = groupIndex + 1;
|
|
1537
|
+
itemIndex = 0;
|
|
1538
|
+
}
|
|
1539
|
+
if (itemIndex < 0) {
|
|
1540
|
+
gi = groupIndex - 1;
|
|
1541
|
+
if (gi < 0) {
|
|
1542
|
+
return;
|
|
1543
|
+
}
|
|
1544
|
+
itemIndex = this.groups[gi].items.length - 1;
|
|
1545
|
+
}
|
|
1546
|
+
this.focusItem(gi, itemIndex);
|
|
1547
|
+
});
|
|
1548
|
+
}
|
|
1549
|
+
/**
|
|
1550
|
+
* Emits the item order changed event.
|
|
1551
|
+
*
|
|
1552
|
+
* @param previousIndex - The previous index of the item.
|
|
1553
|
+
* @param currentIndex - The current index of the item.
|
|
1554
|
+
*/
|
|
1555
|
+
emitItemOrderChanged(previousIndex, currentIndex) {
|
|
1556
|
+
this.itemOrderChanged.emit({
|
|
1557
|
+
previousIndex,
|
|
1558
|
+
currentIndex,
|
|
1559
|
+
groups: [...this.groups],
|
|
1560
|
+
});
|
|
1561
|
+
}
|
|
1562
|
+
/**
|
|
1563
|
+
* Emits the selected checklist item through an event.
|
|
1564
|
+
*
|
|
1565
|
+
* @param item - The checklist item to emit.
|
|
1566
|
+
*/
|
|
1567
|
+
emitCheckListItem(item) {
|
|
1568
|
+
this.itemSelectionChanged.emit({ changedItem: item, groups: this.groups });
|
|
1569
|
+
}
|
|
1570
|
+
/**
|
|
1571
|
+
* Focuses on a specific item in the sortable list.
|
|
1572
|
+
*
|
|
1573
|
+
* @param groupIndex - The index of the group.
|
|
1574
|
+
* @param itemIndex - The index of the item.
|
|
1575
|
+
*/
|
|
1576
|
+
focusItem(groupIndex, itemIndex) {
|
|
1577
|
+
const groupElements = this.sortableListGroups.nativeElement.querySelectorAll('.item-list-group');
|
|
1578
|
+
if (groupElements && groupElements.length > groupIndex) {
|
|
1579
|
+
const itemElements = groupElements[groupIndex].querySelectorAll('.item');
|
|
1580
|
+
if (itemElements && itemElements.length > itemIndex) {
|
|
1581
|
+
if (this.shouldDisplayCheckboxes) {
|
|
1582
|
+
itemElements[itemIndex].querySelector('input').focus();
|
|
1583
|
+
}
|
|
1584
|
+
else {
|
|
1585
|
+
itemElements[itemIndex].focus();
|
|
1586
|
+
}
|
|
1587
|
+
this.focusedIndex[groupIndex] = itemIndex;
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
/**
|
|
1592
|
+
* Checks if an item has focus.
|
|
1593
|
+
*
|
|
1594
|
+
* @param groupIndex - The index of the group.
|
|
1595
|
+
* @param itemIndex - The index of the item.
|
|
1596
|
+
*/
|
|
1597
|
+
itemHasFocus(groupIndex, itemIndex) {
|
|
1598
|
+
if (!this.focusedIndex[groupIndex]) {
|
|
1599
|
+
this.focusedIndex[groupIndex] = 0;
|
|
1600
|
+
}
|
|
1601
|
+
return this.focusedIndex[groupIndex] === itemIndex;
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
NggSortableListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1605
|
+
NggSortableListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NggSortableListComponent, selector: "ngg-sortable-list", inputs: { groups: "groups", shouldDisplayCheckboxes: "shouldDisplayCheckboxes", isReadOnly: "isReadOnly", isDraggable: "isDraggable", description: "description", suffixTemplate: "suffixTemplate" }, outputs: { itemSelectionChanged: "itemSelectionChanged", itemOrderChanged: "itemOrderChanged" }, viewQueries: [{ propertyName: "sortableListGroups", first: true, predicate: ["sortableListGroups"], descendants: true }], ngImport: i0, template: "<div class=\"item-list\">\n <ng-container>\n <p class=\"item-list-header\">\n <span class=\"item-list-header-title\">{{ description }}</span>\n </p>\n <div #sortableListGroups cdkDropListGroup>\n <div\n *ngFor=\"let group of groups; let g_i = index\"\n class=\"item-list-group\"\n [class.drag-enabled]=\"isDraggable && !isReadOnly\"\n role=\"list\"\n cdkDropList\n [cdkDropListData]=\"group.items\"\n [id]=\"g_i.toString()\"\n (cdkDropListDropped)=\"onDragDrop($event)\"\n >\n <p\n *ngIf=\"group.title && group.title.length > 0\"\n class=\"item-list-header\"\n >\n <span class=\"item-list-header-title\">{{ group.title }}</span>\n </p>\n <p\n *ngIf=\"group.description && group.description.length > 0\"\n class=\"item-list-header-description\"\n >\n {{ group.description }}\n </p>\n <div\n *ngFor=\"let checklistItem of group.items; let i = index\"\n [cdkDragDisabled]=\"!isDraggable || isReadOnly\"\n [cdkDragData]=\"checklistItem\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n class=\"item-box\"\n role=\"listitem\"\n >\n <div *cdkDragPlaceholder class=\"item-custom-placeholder\"></div>\n <label\n (keydown.alt.arrowDown)=\"onAltArrowKeydown(g_i, i, i + 1, $event)\"\n (keydown.alt.arrowUp)=\"onAltArrowKeydown(g_i, i, i - 1, $event)\"\n (keydown.arrowDown)=\"onArrowKeydown(g_i, i + 1, $event)\"\n (keydown.arrowUp)=\"onArrowKeydown(g_i, i - 1, $event)\"\n class=\"form-control item-control align-items-center item\"\n [tabindex]=\"shouldDisplayCheckboxes ? '-1' : '0'\"\n >\n <div class=\"form-control\">\n <input\n (change)=\"toggleSelection(checklistItem)\"\n [checked]=\"checklistItem.selected\"\n [disabled]=\"isReadOnly\"\n [type]=\"shouldDisplayCheckboxes ? 'checkbox' : 'hidden'\"\n />\n <div class=\"item-box-title\">\n <span name=\"agendaItemName\"\n >{{ checklistItem.name }}\n <span\n *ngIf=\"checklistItem.hasCustomSuffix\"\n class=\"item-list-suffix\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n suffixTemplate;\n context: { $implicit: checklistItem }\n \"\n class=\"user-icon\"\n >\n </ng-container>\n </span>\n </span>\n <br />\n <span *ngIf=\"!!checklistItem.description\">\n <span class=\"item-list-suffix\" name=\"agendaItemToolTip\">\n {{ checklistItem.description }}\n </span>\n <br />\n </span>\n </div>\n <i></i>\n </div>\n <div *ngIf=\"isDraggable && !isReadOnly\" class=\"item-grip-icon\">\n <i class=\"sg-icon sg-icon-grip-vertical text-primary\"></i>\n </div>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".item-list{width:100%;display:block}label.item{padding:0!important}.item-box{background-color:var(--sg-card-background);color:var(--text-primary-color);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;font-size:14px;margin:5px 0;border:1px solid var(--border-color);border-radius:4px}.form-control{line-height:20px;font-size:16px;font-weight:500}.item-list-header{display:flex;flex-direction:row;justify-content:space-between;margin-bottom:1rem}.item-list-header-title{font-weight:600;font-size:1rem;line-height:1.25rem;font-style:normal}.item-list-header-subtitle{font-size:.75rem;color:var(--text-primary-color);display:flex;justify-content:center;align-content:center}.item-list-suffix{font-weight:400;font-size:.85rem}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.item-grip-icon{font-weight:400;padding:.75rem 1rem .75rem 0rem}.cdk-drop-list.cdk-drop-list-dragging{cursor:grabbing!important;pointer-events:all!important}.item-custom-placeholder.cdk-drag-placeholder{pointer-events:all!important}.cdk-drop-list.drag-enabled:not(.cdk-drag-placeholder) label{cursor:grab}.cdk-drop-list label:focus-visible{outline-color:#333;outline-offset:4px}.item-list.cdk-drop-list-dragging .item-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);pointer-events:all!important}.item-custom-placeholder{border:dotted 1px #999;min-height:44px;transition:transform .25s cubic-bezier(0,0,.2,1);border-radius:4px;margin:5px 0;padding:12px 12px 12px 16px}.user-icon{margin-right:.5rem}.item-control{width:100%;display:flex;flex-direction:row;justify-content:space-between}.form-control.item-layout{display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$1.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }] });
|
|
1606
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListComponent, decorators: [{
|
|
1607
|
+
type: Component,
|
|
1608
|
+
args: [{ selector: 'ngg-sortable-list', template: "<div class=\"item-list\">\n <ng-container>\n <p class=\"item-list-header\">\n <span class=\"item-list-header-title\">{{ description }}</span>\n </p>\n <div #sortableListGroups cdkDropListGroup>\n <div\n *ngFor=\"let group of groups; let g_i = index\"\n class=\"item-list-group\"\n [class.drag-enabled]=\"isDraggable && !isReadOnly\"\n role=\"list\"\n cdkDropList\n [cdkDropListData]=\"group.items\"\n [id]=\"g_i.toString()\"\n (cdkDropListDropped)=\"onDragDrop($event)\"\n >\n <p\n *ngIf=\"group.title && group.title.length > 0\"\n class=\"item-list-header\"\n >\n <span class=\"item-list-header-title\">{{ group.title }}</span>\n </p>\n <p\n *ngIf=\"group.description && group.description.length > 0\"\n class=\"item-list-header-description\"\n >\n {{ group.description }}\n </p>\n <div\n *ngFor=\"let checklistItem of group.items; let i = index\"\n [cdkDragDisabled]=\"!isDraggable || isReadOnly\"\n [cdkDragData]=\"checklistItem\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n class=\"item-box\"\n role=\"listitem\"\n >\n <div *cdkDragPlaceholder class=\"item-custom-placeholder\"></div>\n <label\n (keydown.alt.arrowDown)=\"onAltArrowKeydown(g_i, i, i + 1, $event)\"\n (keydown.alt.arrowUp)=\"onAltArrowKeydown(g_i, i, i - 1, $event)\"\n (keydown.arrowDown)=\"onArrowKeydown(g_i, i + 1, $event)\"\n (keydown.arrowUp)=\"onArrowKeydown(g_i, i - 1, $event)\"\n class=\"form-control item-control align-items-center item\"\n [tabindex]=\"shouldDisplayCheckboxes ? '-1' : '0'\"\n >\n <div class=\"form-control\">\n <input\n (change)=\"toggleSelection(checklistItem)\"\n [checked]=\"checklistItem.selected\"\n [disabled]=\"isReadOnly\"\n [type]=\"shouldDisplayCheckboxes ? 'checkbox' : 'hidden'\"\n />\n <div class=\"item-box-title\">\n <span name=\"agendaItemName\"\n >{{ checklistItem.name }}\n <span\n *ngIf=\"checklistItem.hasCustomSuffix\"\n class=\"item-list-suffix\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n suffixTemplate;\n context: { $implicit: checklistItem }\n \"\n class=\"user-icon\"\n >\n </ng-container>\n </span>\n </span>\n <br />\n <span *ngIf=\"!!checklistItem.description\">\n <span class=\"item-list-suffix\" name=\"agendaItemToolTip\">\n {{ checklistItem.description }}\n </span>\n <br />\n </span>\n </div>\n <i></i>\n </div>\n <div *ngIf=\"isDraggable && !isReadOnly\" class=\"item-grip-icon\">\n <i class=\"sg-icon sg-icon-grip-vertical text-primary\"></i>\n </div>\n </label>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".item-list{width:100%;display:block}label.item{padding:0!important}.item-box{background-color:var(--sg-card-background);color:var(--text-primary-color);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;font-size:14px;margin:5px 0;border:1px solid var(--border-color);border-radius:4px}.form-control{line-height:20px;font-size:16px;font-weight:500}.item-list-header{display:flex;flex-direction:row;justify-content:space-between;margin-bottom:1rem}.item-list-header-title{font-weight:600;font-size:1rem;line-height:1.25rem;font-style:normal}.item-list-header-subtitle{font-size:.75rem;color:var(--text-primary-color);display:flex;justify-content:center;align-content:center}.item-list-suffix{font-weight:400;font-size:.85rem}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.item-grip-icon{font-weight:400;padding:.75rem 1rem .75rem 0rem}.cdk-drop-list.cdk-drop-list-dragging{cursor:grabbing!important;pointer-events:all!important}.item-custom-placeholder.cdk-drag-placeholder{pointer-events:all!important}.cdk-drop-list.drag-enabled:not(.cdk-drag-placeholder) label{cursor:grab}.cdk-drop-list label:focus-visible{outline-color:#333;outline-offset:4px}.item-list.cdk-drop-list-dragging .item-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);pointer-events:all!important}.item-custom-placeholder{border:dotted 1px #999;min-height:44px;transition:transform .25s cubic-bezier(0,0,.2,1);border-radius:4px;margin:5px 0;padding:12px 12px 12px 16px}.user-icon{margin-right:.5rem}.item-control{width:100%;display:flex;flex-direction:row;justify-content:space-between}.form-control.item-layout{display:flex;justify-content:space-between}\n"] }]
|
|
1609
|
+
}], propDecorators: { groups: [{
|
|
1610
|
+
type: Input
|
|
1611
|
+
}], shouldDisplayCheckboxes: [{
|
|
1612
|
+
type: Input
|
|
1613
|
+
}], isReadOnly: [{
|
|
1614
|
+
type: Input
|
|
1615
|
+
}], isDraggable: [{
|
|
1616
|
+
type: Input
|
|
1617
|
+
}], description: [{
|
|
1618
|
+
type: Input
|
|
1619
|
+
}], suffixTemplate: [{
|
|
1620
|
+
type: Input
|
|
1621
|
+
}], itemSelectionChanged: [{
|
|
1622
|
+
type: Output
|
|
1623
|
+
}], itemOrderChanged: [{
|
|
1624
|
+
type: Output
|
|
1625
|
+
}], sortableListGroups: [{
|
|
1626
|
+
type: ViewChild,
|
|
1627
|
+
args: ['sortableListGroups']
|
|
1628
|
+
}] } });
|
|
1629
|
+
|
|
1630
|
+
class NggSortableListModule {
|
|
1631
|
+
}
|
|
1632
|
+
NggSortableListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
1633
|
+
NggSortableListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, declarations: [NggSortableListComponent], imports: [CommonModule, FormsModule, DragDropModule], exports: [NggSortableListComponent] });
|
|
1634
|
+
NggSortableListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, imports: [CommonModule, FormsModule, DragDropModule] });
|
|
1635
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggSortableListModule, decorators: [{
|
|
1636
|
+
type: NgModule,
|
|
1637
|
+
args: [{
|
|
1638
|
+
imports: [CommonModule, FormsModule, DragDropModule],
|
|
1639
|
+
exports: [NggSortableListComponent],
|
|
1640
|
+
declarations: [NggSortableListComponent],
|
|
1641
|
+
}]
|
|
1642
|
+
}] });
|
|
1643
|
+
|
|
1452
1644
|
class SlidingUnderlineDirective {
|
|
1453
1645
|
constructor(element) {
|
|
1454
1646
|
this.element = element;
|
|
@@ -1724,7 +1916,8 @@ NggModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
|
|
|
1724
1916
|
NggContextMenuModule,
|
|
1725
1917
|
NggInPageWizardModule,
|
|
1726
1918
|
NggCellTableModule,
|
|
1727
|
-
NggSharedModule
|
|
1919
|
+
NggSharedModule,
|
|
1920
|
+
NggSortableListModule] });
|
|
1728
1921
|
NggModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModule, imports: [CommonModule, NggAccordionModule,
|
|
1729
1922
|
NggBadgeModule,
|
|
1730
1923
|
NggButtonModule,
|
|
@@ -1737,7 +1930,8 @@ NggModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.
|
|
|
1737
1930
|
NggContextMenuModule,
|
|
1738
1931
|
NggInPageWizardModule,
|
|
1739
1932
|
NggCellTableModule,
|
|
1740
|
-
NggSharedModule
|
|
1933
|
+
NggSharedModule,
|
|
1934
|
+
NggSortableListModule] });
|
|
1741
1935
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NggModule, decorators: [{
|
|
1742
1936
|
type: NgModule,
|
|
1743
1937
|
args: [{
|
|
@@ -1757,6 +1951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1757
1951
|
NggInPageWizardModule,
|
|
1758
1952
|
NggCellTableModule,
|
|
1759
1953
|
NggSharedModule,
|
|
1954
|
+
NggSortableListModule,
|
|
1760
1955
|
],
|
|
1761
1956
|
}]
|
|
1762
1957
|
}] });
|
|
@@ -1950,5 +2145,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1950
2145
|
* Generated bundle index. Do not edit.
|
|
1951
2146
|
*/
|
|
1952
2147
|
|
|
1953
|
-
export { NggAccordionComponent, NggAccordionListItemComponent, NggAccordionModule, NggBadgeComponent, NggBadgeModule, NggButtonComponent, NggButtonModule, NggCellTableComponent, NggCellTableModule, NggContextMenuComponent, NggContextMenuModule, NggCoreElementDirective, NggCoreWrapperModule, NggDatepickerComponent, NggDatepickerModule, NggDropdownButtonDirective, NggDropdownComponent, NggDropdownModule, NggDropdownOptionDirective, NggInPageWizardModule, NggInPageWizardStepCardComponent, NggModalBodyComponent, NggModalComponent, NggModalFooterComponent, NggModalFooterDirective, NggModalHeaderComponent, NggModalHeaderDirective, NggModalModule, NggModule, NggOnScrollDirective, NggPaginationComponent, NggPaginationModule, NggProgressCircleComponent, NggProgressCircleModule, NggSegmentedControlComponent, NggSegmentedControlModule, NggSharedModule, NggSliderComponent, NggSliderModule, ON_SCROLL_TOKEN, dateValidator };
|
|
2148
|
+
export { NggAccordionComponent, NggAccordionListItemComponent, NggAccordionModule, NggBadgeComponent, NggBadgeModule, NggButtonComponent, NggButtonModule, NggCellTableComponent, NggCellTableModule, NggContextMenuComponent, NggContextMenuModule, NggCoreElementDirective, NggCoreWrapperModule, NggDatepickerComponent, NggDatepickerModule, NggDropdownButtonDirective, NggDropdownComponent, NggDropdownModule, NggDropdownOptionDirective, NggInPageWizardModule, NggInPageWizardStepCardComponent, NggModalBodyComponent, NggModalComponent, NggModalFooterComponent, NggModalFooterDirective, NggModalHeaderComponent, NggModalHeaderDirective, NggModalModule, NggModule, NggOnScrollDirective, NggPaginationComponent, NggPaginationModule, NggProgressCircleComponent, NggProgressCircleModule, NggSegmentedControlComponent, NggSegmentedControlModule, NggSharedModule, NggSliderComponent, NggSliderModule, NggSortableListComponent, NggSortableListModule, ON_SCROLL_TOKEN, dateValidator };
|
|
1954
2149
|
//# sourceMappingURL=sebgroup-green-angular.mjs.map
|