barsa-kanban 0.0.2
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 +24 -0
- package/esm2020/barsa-kanban.mjs +5 -0
- package/esm2020/lib/Models/drop-info.mjs +2 -0
- package/esm2020/lib/Models/kanban-view-setting.interface.mjs +2 -0
- package/esm2020/lib/avatar-group/barsa-avatar-group.component.mjs +84 -0
- package/esm2020/lib/barsa-kanban.module.mjs +79 -0
- package/esm2020/lib/kanban-base/kanban-base.component.mjs +20 -0
- package/esm2020/lib/kanban-card/kanban-card.component.mjs +38 -0
- package/esm2020/lib/kanban-tags/kanban-tags.component.mjs +43 -0
- package/esm2020/lib/kanban-view/kanban-view.component.mjs +244 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/barsa-kanban.mjs +476 -0
- package/fesm2015/barsa-kanban.mjs.map +1 -0
- package/fesm2020/barsa-kanban.mjs +477 -0
- package/fesm2020/barsa-kanban.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/Models/drop-info.d.ts +8 -0
- package/lib/Models/kanban-view-setting.interface.d.ts +17 -0
- package/lib/avatar-group/barsa-avatar-group.component.d.ts +28 -0
- package/lib/barsa-kanban.module.d.ts +29 -0
- package/lib/kanban-base/kanban-base.component.d.ts +9 -0
- package/lib/kanban-card/kanban-card.component.d.ts +16 -0
- package/lib/kanban-tags/kanban-tags.component.d.ts +16 -0
- package/lib/kanban-view/kanban-view.component.d.ts +40 -0
- package/package.json +31 -0
- package/public-api.d.ts +6 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
3
|
+
import { ReportViewBaseComponent } from 'barsa-novin-ray-core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "barsa-novin-ray-core";
|
|
7
|
+
import * as i3 from "@fundamental-ngx/core/button";
|
|
8
|
+
import * as i4 from "@fundamental-ngx/core/card";
|
|
9
|
+
import * as i5 from "@fundamental-ngx/core/checkbox";
|
|
10
|
+
import * as i6 from "@fundamental-ngx/core/form";
|
|
11
|
+
import * as i7 from "@fundamental-ngx/core/icon";
|
|
12
|
+
import * as i8 from "@fundamental-ngx/core/layout-grid";
|
|
13
|
+
import * as i9 from "@fundamental-ngx/core/layout-panel";
|
|
14
|
+
import * as i10 from "@fundamental-ngx/core/table";
|
|
15
|
+
import * as i11 from "barsa-sap-ui";
|
|
16
|
+
import * as i12 from "@angular/forms";
|
|
17
|
+
import * as i13 from "@angular/cdk/drag-drop";
|
|
18
|
+
import * as i14 from "../kanban-card/kanban-card.component";
|
|
19
|
+
export class KanbanViewComponent extends ReportViewBaseComponent {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.groupbyProperty = 'State';
|
|
23
|
+
this.isNewColumnMode = false;
|
|
24
|
+
this.newCard = { Id: null, $Caption: null };
|
|
25
|
+
this.newColumn = { Id: null, $Caption: null };
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
super.ngOnInit();
|
|
29
|
+
const columnsReport = this.viewSetting.ColumnsReport.$Caption;
|
|
30
|
+
this._portalService.ReportExecute(columnsReport).subscribe((report) => {
|
|
31
|
+
this.kanbanColumns = report.MoDataList;
|
|
32
|
+
this._changeDetect();
|
|
33
|
+
});
|
|
34
|
+
this.formSetting.View.ControlInfo.forEach((c) => (c.InlineEditMode = true));
|
|
35
|
+
const assigneesReport = this.viewSetting.AssigneesReport.$Caption;
|
|
36
|
+
this._portalService.ReportExecute(assigneesReport).subscribe((report) => {
|
|
37
|
+
this.allAvailableAssignees = report.MoDataList;
|
|
38
|
+
this._changeDetect();
|
|
39
|
+
});
|
|
40
|
+
this.viewSetting = {
|
|
41
|
+
...this.viewSetting,
|
|
42
|
+
...this._findColumn(this.allColumns, [
|
|
43
|
+
this.viewSetting.Cover,
|
|
44
|
+
this.viewSetting.State,
|
|
45
|
+
this.viewSetting.Caption
|
|
46
|
+
])
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
onAddNewColumn() {
|
|
50
|
+
this.kanbanColumns.push(this.newColumn);
|
|
51
|
+
this._cdr.detectChanges();
|
|
52
|
+
this._resetNewColumn();
|
|
53
|
+
this._scrollInputIntoView();
|
|
54
|
+
}
|
|
55
|
+
onActiveNewColumnMode() {
|
|
56
|
+
this._changeNewColumnMode(true);
|
|
57
|
+
}
|
|
58
|
+
onCancelNewColumn() {
|
|
59
|
+
this._changeNewColumnMode(false);
|
|
60
|
+
this._resetNewColumn();
|
|
61
|
+
}
|
|
62
|
+
onInitNewCard(groupby) {
|
|
63
|
+
this._resetNewCard();
|
|
64
|
+
this.newCard[this.groupbyProperty] = groupby;
|
|
65
|
+
}
|
|
66
|
+
onAddNewCard(e) {
|
|
67
|
+
e.stopPropagation();
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
this._addNewCard();
|
|
70
|
+
}
|
|
71
|
+
onNewCardInputFocusout() {
|
|
72
|
+
if (this.newCard.$Caption) {
|
|
73
|
+
this._addNewCard();
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this._cancelNewCard();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
onCancelNewCard(e) {
|
|
80
|
+
e.stopPropagation();
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
this._cancelNewCard();
|
|
83
|
+
}
|
|
84
|
+
onDrop(event, isColumn) {
|
|
85
|
+
let previousIndex;
|
|
86
|
+
let currentIndex;
|
|
87
|
+
const array = event.container.data;
|
|
88
|
+
if (isColumn) {
|
|
89
|
+
previousIndex = event.previousIndex;
|
|
90
|
+
currentIndex = event.currentIndex;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const draggedItemId = this.dropActionTodo.draggedId;
|
|
94
|
+
if (!draggedItemId) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const draggedItem = this._getMoById(draggedItemId);
|
|
98
|
+
const targetState = this.dropActionTodo.targetState;
|
|
99
|
+
previousIndex = array.indexOf(draggedItem);
|
|
100
|
+
currentIndex = this.dropActionTodo.targetIndex;
|
|
101
|
+
draggedItem.State = targetState;
|
|
102
|
+
this._stopDragging();
|
|
103
|
+
}
|
|
104
|
+
moveItemInArray(array, previousIndex, currentIndex);
|
|
105
|
+
}
|
|
106
|
+
onDragMove(event, draggedMo, draggedIndex, targetState) {
|
|
107
|
+
const elementFromPoint = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);
|
|
108
|
+
if (targetState) {
|
|
109
|
+
}
|
|
110
|
+
if (!elementFromPoint) {
|
|
111
|
+
this._stopDragging();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const targetNodeElement = elementFromPoint.closest('[state]');
|
|
115
|
+
if (!targetNodeElement) {
|
|
116
|
+
this._stopDragging();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.dropActionTodo = {
|
|
120
|
+
draggedId: draggedMo.Id,
|
|
121
|
+
targetId: targetNodeElement.getAttribute('id'),
|
|
122
|
+
targetState: null,
|
|
123
|
+
targetIndex: Number(targetNodeElement.getAttribute('index'))
|
|
124
|
+
};
|
|
125
|
+
const targetRect = targetNodeElement.getBoundingClientRect();
|
|
126
|
+
const oneThird = targetRect.height / 3;
|
|
127
|
+
const isCardTarget = !targetNodeElement.classList.contains('column');
|
|
128
|
+
const isBefore = event.pointerPosition.y - targetRect.top < oneThird && isCardTarget;
|
|
129
|
+
const isAfter = event.pointerPosition.y - targetRect.top > 2 * oneThird && isCardTarget;
|
|
130
|
+
const isInside = !isCardTarget;
|
|
131
|
+
const targetIndex = this.dropActionTodo.targetIndex ?? -1;
|
|
132
|
+
const targetMo = this.moDataList[targetIndex];
|
|
133
|
+
if (isCardTarget) {
|
|
134
|
+
this.dropActionTodo.targetState = targetMo[this.viewSetting.State];
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
this.dropActionTodo.targetState = {
|
|
138
|
+
$Caption: targetNodeElement.getAttribute('state'),
|
|
139
|
+
Id: targetNodeElement.getAttribute('id'),
|
|
140
|
+
$TypeDefId: draggedMo[this.viewSetting.State]?.$TypeDefId
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (isBefore) {
|
|
144
|
+
this.dropActionTodo.action = 'before';
|
|
145
|
+
this.dropActionTodo.targetIndex = draggedIndex > targetIndex ? targetIndex : targetIndex - 1;
|
|
146
|
+
}
|
|
147
|
+
else if (isAfter) {
|
|
148
|
+
this.dropActionTodo.action = 'after';
|
|
149
|
+
this.dropActionTodo.targetIndex = draggedIndex < targetIndex ? targetIndex : targetIndex + 1;
|
|
150
|
+
}
|
|
151
|
+
else if (isInside) {
|
|
152
|
+
this.dropActionTodo.action = 'inside';
|
|
153
|
+
this.dropActionTodo.targetIndex = 0;
|
|
154
|
+
}
|
|
155
|
+
console.log(this.dropActionTodo.targetState);
|
|
156
|
+
this._showDragInfo();
|
|
157
|
+
}
|
|
158
|
+
_changeDetect() {
|
|
159
|
+
this._cdr.detectChanges();
|
|
160
|
+
}
|
|
161
|
+
_stopDragging() {
|
|
162
|
+
this._clearDragInfo();
|
|
163
|
+
this._resetDropActionTodo();
|
|
164
|
+
}
|
|
165
|
+
_changeNewColumnMode(mode) {
|
|
166
|
+
this.isNewColumnMode = mode;
|
|
167
|
+
}
|
|
168
|
+
_resetDropActionTodo() {
|
|
169
|
+
this.dropActionTodo = {
|
|
170
|
+
targetId: null,
|
|
171
|
+
draggedId: null,
|
|
172
|
+
targetState: null,
|
|
173
|
+
targetIndex: null,
|
|
174
|
+
action: null
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
_scrollInputIntoView() {
|
|
178
|
+
const inputEl = this.inputEl.nativeElement;
|
|
179
|
+
inputEl.focus();
|
|
180
|
+
inputEl.scrollIntoView({ inline: 'end' });
|
|
181
|
+
}
|
|
182
|
+
_resetNewColumn() {
|
|
183
|
+
this.newColumn = { Id: '', $Caption: '' };
|
|
184
|
+
}
|
|
185
|
+
_clearDragInfo(dropped = false) {
|
|
186
|
+
if (dropped) {
|
|
187
|
+
this._resetDropActionTodo();
|
|
188
|
+
}
|
|
189
|
+
const elDom = this._el.nativeElement;
|
|
190
|
+
elDom
|
|
191
|
+
.querySelectorAll('.drop-before')
|
|
192
|
+
.forEach((element) => this._renderer2.removeClass(element, 'drop-before'));
|
|
193
|
+
elDom.querySelectorAll('.drop-after').forEach((element) => this._renderer2.removeClass(element, 'drop-after'));
|
|
194
|
+
elDom
|
|
195
|
+
.querySelectorAll('.drop-inside')
|
|
196
|
+
.forEach((element) => this._renderer2.removeClass(element, 'drop-inside'));
|
|
197
|
+
}
|
|
198
|
+
_showDragInfo() {
|
|
199
|
+
this._clearDragInfo();
|
|
200
|
+
if (this.dropActionTodo.targetId) {
|
|
201
|
+
const targetNodeElement = this._el.nativeElement.querySelector('#' + this.dropActionTodo.targetId);
|
|
202
|
+
if (!targetNodeElement) {
|
|
203
|
+
this._resetDropActionTodo();
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this._renderer2.addClass(targetNodeElement, 'drop-' + this.dropActionTodo?.action);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
_addNewCard() {
|
|
210
|
+
this.moDataList.push(this.newCard);
|
|
211
|
+
const currentGroupby = this.newCard[this.groupbyProperty];
|
|
212
|
+
this.onInitNewCard(currentGroupby);
|
|
213
|
+
}
|
|
214
|
+
_resetNewCard() {
|
|
215
|
+
this.newCard = { Id: null, $Caption: null };
|
|
216
|
+
}
|
|
217
|
+
_cancelNewCard() {
|
|
218
|
+
this._resetNewCard();
|
|
219
|
+
}
|
|
220
|
+
_getMoById(id) {
|
|
221
|
+
return this.moDataList.find((c) => c.Id === id);
|
|
222
|
+
}
|
|
223
|
+
_findColumn(allColumns, columnsName) {
|
|
224
|
+
const columns = {};
|
|
225
|
+
columnsName.forEach((name) => {
|
|
226
|
+
columns[name + 'Column'] = this._findColumnByDbName.transform(this.allColumns, name);
|
|
227
|
+
});
|
|
228
|
+
return columns;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
KanbanViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
232
|
+
KanbanViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: KanbanViewComponent, selector: "bk-kanban-view", inputs: { kanbanColumns: "kanbanColumns", groupbyProperty: "groupbyProperty" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n <table fd-table *ngIf=\"isCheckList\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n >{{ 'All' | bbbTranslate }}</fd-checkbox\n >\n </th>\n </tr>\n </thead>\n </table>\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<fd-layout-grid\n *ngIf=\"moDataList?.length; else noData\"\n class=\"columns\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"kanbanColumns\"\n [id]=\"'$Root'\"\n (cdkDropListDropped)=\"onDrop($event, true)\"\n>\n <div\n *ngFor=\"let column of kanbanColumns; let columnIndex = index\"\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"6\"\n [colLg]=\"4\"\n [colXl]=\"3\"\n class=\"column\"\n [id]=\"column.Id\"\n [attr.state]=\"column.$Caption\"\n cdkDrag\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnCard;\n context: {\n column: column,\n columnIndex: columnIndex\n }\n \"\n ></ng-container>\n </div>\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"6\"\n [colLg]=\"4\"\n [colXl]=\"3\"\n class=\"newColumn\"\n (click)=\"onActiveNewColumnMode()\"\n *ngIf=\"!isNewColumnMode; else newColumnInput\"\n >\n <ng-container>\n <span>\u0633\u062A\u0648\u0646 \u062C\u062F\u06CC\u062F</span>\n </ng-container>\n </div>\n <ng-template #newColumnInput>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"6\" [colLg]=\"4\" [colXl]=\"3\">\n <input\n #inputEl\n fd-form-control\n type=\"text\"\n autofocus\n (focusout)=\"onCancelNewColumn()\"\n [(ngModel)]=\"newColumn.$Caption\"\n (keydown.enter)=\"onAddNewColumn()\"\n id=\"new-column-name\"\n placeholder=\" \u0646\u0627\u0645\"\n />\n </div>\n </ng-template>\n</fd-layout-grid>\n\n<!--noData-->\n<ng-template #noData>\n <bsu-no-data></bsu-no-data>\n</ng-template>\n\n<!--column card-->\n<ng-template #columnCard let-column=\"column\" let-columnIndex=\"columnIndex\">\n <fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" ellipsify>\n <fd-card-header>\n <span fd-card-title>{{ column.$Caption }}</span>\n </fd-card-header>\n <fd-card-content\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"moDataList\"\n >\n <ng-container *ngFor=\"let mo of moDataList; let index = index\">\n <bk-kanban-card\n [mo]=\"mo\"\n [viewSetting]=\"viewSetting\"\n [formSetting]=\"formSetting\"\n [allAvailableAssignees]=\"allAvailableAssignees\"\n [index]=\"index\"\n *ngIf=\"mo[viewSetting.State].$Caption === column.$Caption\"\n [attr.id]=\"mo.Id\"\n [inlineEditMode]=\"true\"\n [isChecked]=\"true\"\n [attr.state]=\"column.$Caption\"\n [attr.index]=\"index\"\n [class.selected]=\"mo.$IsChecked\"\n (cdkDragMoved)=\"onDragMove($event, mo, index, column)\"\n (click)=\"onRowCheck({mo, index})\"\n (dblclick)=\"onRowClick({mo, index})\"\n cdkDrag\n >\n </bk-kanban-card>\n </ng-container>\n </fd-card-content>\n <fd-card-footer class=\"column-footer\">\n <div class=\"new-card\" *ngIf=\"newCard[groupbyProperty] === column.$Caption; else addNewCard\">\n <fd-card>\n <div fd-form-item>\n <textarea\n fd-form-control\n [autofocus]=\"true\"\n [(ngModel)]=\"newCard.$Caption\"\n (keydown.enter)=\"onAddNewCard($event)\"\n (focusout)=\"onNewCardInputFocusout()\"\n [placeholder]=\"'Title' | bbbTranslate\"\n ></textarea>\n </div>\n </fd-card>\n <div class=\"new-card-actions\">\n <button\n fd-button\n (click)=\"onAddNewCard($event)\"\n fdType=\"emphasized\"\n class=\"add-card-btn\"\n [label]=\"'\u0627\u0641\u0632\u0648\u062F\u0646'\"\n ></button>\n <fd-icon (mousedown)=\"onCancelNewCard($event)\" glyph=\"decline\"></fd-icon>\n </div>\n </div>\n\n <ng-template #addNewCard>\n <div class=\"add-new-card\" (click)=\"onInitNewCard(column.$Caption)\">\n <span>\n <fd-icon glyph=\"add\"></fd-icon>\n \u06A9\u0627\u0631\u062A \u062C\u062F\u06CC\u062F\n </span>\n </div>\n </ng-template>\n </fd-card-footer>\n </fd-card>\n</ng-template>\n", styles: [":host{display:flex;column-gap:20px;row-gap:20px;flex-wrap:wrap;overflow:auto;padding-bottom:1rem;height:calc(100% - 38.5px)}::-webkit-scrollbar{height:7px;width:7px}::-webkit-scrollbar-track{box-shadow:inset 0 0 2px #d0cece;border-radius:10px}::-webkit-scrollbar-thumb{background:#c8cacb;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#adb0b2}.columns{height:inherit;width:100%;column-gap:15px;flex-wrap:nowrap!important}.column{height:100%;background-color:var(--sapList_Background, #fff)!important}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%;box-shadow:none}.column>fd-card fd-card-header{border:none;background:none;padding:1rem 2rem!important}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:0 1rem;margin:0;display:flex;flex-direction:column;row-gap:20px}.column>fd-card .column-footer{padding:1rem 1rem 1rem 1.5rem;position:sticky}.column>fd-card .column-footer .new-card{display:flex;flex-direction:column;justify-content:center;row-gap:1rem}.column>fd-card .column-footer .new-card fd-card{padding:0 1rem;background:var(--sapBackgroundColor, #f7f7f7)!important}.column>fd-card .column-footer .new-card textarea{background:var(--sapBackgroundColor, #f7f7f7)!important;border:none}.column>fd-card .column-footer .new-card span{height:auto!important}.column>fd-card .column-footer .new-card .new-card-actions{display:flex;align-items:center;column-gap:10px}.column>fd-card .column-footer .new-card .new-card-actions fd-icon{font-size:1rem}.column>fd-card .column-footer .add-new-card{padding:0 1rem}.column>fd-card .column-footer .add-new-card span{display:flex;column-gap:4px}.newColumn{background-color:var(--sapList_Background, #fff)!important;border-radius:var(--sapElement_BorderCornerRadius, .25rem);align-self:flex-start;height:100px;opacity:.5;display:flex;align-items:center;justify-content:center;border:1px dashed;position:relative;cursor:pointer}.newColumn span{position:absolute}.newColumn .new-column-popover{width:100%}.newColumn .new-column-popover fd-popover-control{width:100%;height:1px}.new-column-popover-body input{border:none}.row{display:flex;align-items:center}.drop-inside{border:1px solid #00f}.drop-inside ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-before{border-top:2px solid #00f}.drop-before ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-after{border-bottom:2px solid #00f}.drop-after ::ng-deep .fd-list__item{background-color:#dce9f6!important}.columns.cdk-drop-list-dragging .column:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\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.EllipsifyDirective, selector: "[ellipsify]", inputs: ["limitLine"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.CardComponent, selector: "fd-card", inputs: ["badge", "isLoading", "cardType", "id", "role"] }, { kind: "component", type: i4.CardHeaderComponent, selector: "fd-card-header", inputs: ["interactive", "tabindex"] }, { kind: "component", type: i4.CardContentComponent, selector: "fd-card-content" }, { kind: "directive", type: i4.CardTitleDirective, selector: "[fd-card-title]" }, { kind: "component", type: i4.CardFooterComponent, selector: "fd-card-footer" }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values"], outputs: ["focusChange"] }, { kind: "component", type: i6.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i6.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "directive", type: i6.TextareaFormControlDirective, selector: "textarea[fd-form-control]" }, { kind: "component", type: i6.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i7.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i8.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i8.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: i9.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage"] }, { kind: "component", type: i9.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i10.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i10.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "component", type: i11.NoDataComponent, selector: "bsu-no-data" }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i13.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: i13.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: "component", type: i14.KanbanCardComponent, selector: "bk-kanban-card", inputs: ["index", "mo", "viewSetting", "allAvailableAssignees"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanViewComponent, decorators: [{
|
|
234
|
+
type: Component,
|
|
235
|
+
args: [{ selector: 'bk-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n <table fd-table *ngIf=\"isCheckList\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th fd-table-cell>\n <fd-checkbox\n name=\"allCheckbox\"\n [ngModel]=\"allChecked\"\n (ngModelChange)=\"onAllCheckbox($event)\"\n >{{ 'All' | bbbTranslate }}</fd-checkbox\n >\n </th>\n </tr>\n </thead>\n </table>\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<fd-layout-grid\n *ngIf=\"moDataList?.length; else noData\"\n class=\"columns\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"kanbanColumns\"\n [id]=\"'$Root'\"\n (cdkDropListDropped)=\"onDrop($event, true)\"\n>\n <div\n *ngFor=\"let column of kanbanColumns; let columnIndex = index\"\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"6\"\n [colLg]=\"4\"\n [colXl]=\"3\"\n class=\"column\"\n [id]=\"column.Id\"\n [attr.state]=\"column.$Caption\"\n cdkDrag\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnCard;\n context: {\n column: column,\n columnIndex: columnIndex\n }\n \"\n ></ng-container>\n </div>\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"6\"\n [colLg]=\"4\"\n [colXl]=\"3\"\n class=\"newColumn\"\n (click)=\"onActiveNewColumnMode()\"\n *ngIf=\"!isNewColumnMode; else newColumnInput\"\n >\n <ng-container>\n <span>\u0633\u062A\u0648\u0646 \u062C\u062F\u06CC\u062F</span>\n </ng-container>\n </div>\n <ng-template #newColumnInput>\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"6\" [colLg]=\"4\" [colXl]=\"3\">\n <input\n #inputEl\n fd-form-control\n type=\"text\"\n autofocus\n (focusout)=\"onCancelNewColumn()\"\n [(ngModel)]=\"newColumn.$Caption\"\n (keydown.enter)=\"onAddNewColumn()\"\n id=\"new-column-name\"\n placeholder=\" \u0646\u0627\u0645\"\n />\n </div>\n </ng-template>\n</fd-layout-grid>\n\n<!--noData-->\n<ng-template #noData>\n <bsu-no-data></bsu-no-data>\n</ng-template>\n\n<!--column card-->\n<ng-template #columnCard let-column=\"column\" let-columnIndex=\"columnIndex\">\n <fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" ellipsify>\n <fd-card-header>\n <span fd-card-title>{{ column.$Caption }}</span>\n </fd-card-header>\n <fd-card-content\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"moDataList\"\n >\n <ng-container *ngFor=\"let mo of moDataList; let index = index\">\n <bk-kanban-card\n [mo]=\"mo\"\n [viewSetting]=\"viewSetting\"\n [formSetting]=\"formSetting\"\n [allAvailableAssignees]=\"allAvailableAssignees\"\n [index]=\"index\"\n *ngIf=\"mo[viewSetting.State].$Caption === column.$Caption\"\n [attr.id]=\"mo.Id\"\n [inlineEditMode]=\"true\"\n [isChecked]=\"true\"\n [attr.state]=\"column.$Caption\"\n [attr.index]=\"index\"\n [class.selected]=\"mo.$IsChecked\"\n (cdkDragMoved)=\"onDragMove($event, mo, index, column)\"\n (click)=\"onRowCheck({mo, index})\"\n (dblclick)=\"onRowClick({mo, index})\"\n cdkDrag\n >\n </bk-kanban-card>\n </ng-container>\n </fd-card-content>\n <fd-card-footer class=\"column-footer\">\n <div class=\"new-card\" *ngIf=\"newCard[groupbyProperty] === column.$Caption; else addNewCard\">\n <fd-card>\n <div fd-form-item>\n <textarea\n fd-form-control\n [autofocus]=\"true\"\n [(ngModel)]=\"newCard.$Caption\"\n (keydown.enter)=\"onAddNewCard($event)\"\n (focusout)=\"onNewCardInputFocusout()\"\n [placeholder]=\"'Title' | bbbTranslate\"\n ></textarea>\n </div>\n </fd-card>\n <div class=\"new-card-actions\">\n <button\n fd-button\n (click)=\"onAddNewCard($event)\"\n fdType=\"emphasized\"\n class=\"add-card-btn\"\n [label]=\"'\u0627\u0641\u0632\u0648\u062F\u0646'\"\n ></button>\n <fd-icon (mousedown)=\"onCancelNewCard($event)\" glyph=\"decline\"></fd-icon>\n </div>\n </div>\n\n <ng-template #addNewCard>\n <div class=\"add-new-card\" (click)=\"onInitNewCard(column.$Caption)\">\n <span>\n <fd-icon glyph=\"add\"></fd-icon>\n \u06A9\u0627\u0631\u062A \u062C\u062F\u06CC\u062F\n </span>\n </div>\n </ng-template>\n </fd-card-footer>\n </fd-card>\n</ng-template>\n", styles: [":host{display:flex;column-gap:20px;row-gap:20px;flex-wrap:wrap;overflow:auto;padding-bottom:1rem;height:calc(100% - 38.5px)}::-webkit-scrollbar{height:7px;width:7px}::-webkit-scrollbar-track{box-shadow:inset 0 0 2px #d0cece;border-radius:10px}::-webkit-scrollbar-thumb{background:#c8cacb;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#adb0b2}.columns{height:inherit;width:100%;column-gap:15px;flex-wrap:nowrap!important}.column{height:100%;background-color:var(--sapList_Background, #fff)!important}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%;box-shadow:none}.column>fd-card fd-card-header{border:none;background:none;padding:1rem 2rem!important}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:0 1rem;margin:0;display:flex;flex-direction:column;row-gap:20px}.column>fd-card .column-footer{padding:1rem 1rem 1rem 1.5rem;position:sticky}.column>fd-card .column-footer .new-card{display:flex;flex-direction:column;justify-content:center;row-gap:1rem}.column>fd-card .column-footer .new-card fd-card{padding:0 1rem;background:var(--sapBackgroundColor, #f7f7f7)!important}.column>fd-card .column-footer .new-card textarea{background:var(--sapBackgroundColor, #f7f7f7)!important;border:none}.column>fd-card .column-footer .new-card span{height:auto!important}.column>fd-card .column-footer .new-card .new-card-actions{display:flex;align-items:center;column-gap:10px}.column>fd-card .column-footer .new-card .new-card-actions fd-icon{font-size:1rem}.column>fd-card .column-footer .add-new-card{padding:0 1rem}.column>fd-card .column-footer .add-new-card span{display:flex;column-gap:4px}.newColumn{background-color:var(--sapList_Background, #fff)!important;border-radius:var(--sapElement_BorderCornerRadius, .25rem);align-self:flex-start;height:100px;opacity:.5;display:flex;align-items:center;justify-content:center;border:1px dashed;position:relative;cursor:pointer}.newColumn span{position:absolute}.newColumn .new-column-popover{width:100%}.newColumn .new-column-popover fd-popover-control{width:100%;height:1px}.new-column-popover-body input{border:none}.row{display:flex;align-items:center}.drop-inside{border:1px solid #00f}.drop-inside ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-before{border-top:2px solid #00f}.drop-before ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-after{border-bottom:2px solid #00f}.drop-after ::ng-deep .fd-list__item{background-color:#dce9f6!important}.columns.cdk-drop-list-dragging .column:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
|
|
236
|
+
}], propDecorators: { inputEl: [{
|
|
237
|
+
type: ViewChild,
|
|
238
|
+
args: ['inputEl', { read: ElementRef }]
|
|
239
|
+
}], kanbanColumns: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], groupbyProperty: [{
|
|
242
|
+
type: Input
|
|
243
|
+
}] } });
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBVXBGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSx1QkFBMEM7SUFObkY7O1FBU2Esb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFHbkMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsWUFBTyxHQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDNUMsY0FBUyxHQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7S0F3T2pEO0lBdE9HLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFB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TyxHQUFHLEVBQUUsQ0FBQztRQUNuQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOztnSEEvT1EsbUJBQW1CO29HQUFuQixtQkFBbUIscU5BQ0UsVUFBVSxvRENkNUMsa3JMQTJKQTsyRkQ5SWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUdILE9BQU87c0JBQWxELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDakMsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHsgTWV0YW9iamVjdERhdGFNb2RlbCwgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBLYW5iYW5WaWV3U2V0dGluZyB9IGZyb20gJy4uL01vZGVscy9rYW5iYW4tdmlldy1zZXR0aW5nLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcm9wSW5mbyB9IGZyb20gJy4uL01vZGVscy9kcm9wLWluZm8nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JrLWthbmJhbi12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4va2FuYmFuLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2thbmJhbi12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgS2FuYmFuVmlld0NvbXBvbmVudCBleHRlbmRzIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PEthbmJhblZpZXdTZXR0aW5nPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRFbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dEVsOiBFbGVtZW50UmVmPGFueT47XG4gICAgQElucHV0KCkga2FuYmFuQ29sdW1uczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgIEBJbnB1dCgpIGdyb3VwYnlQcm9wZXJ0eSA9ICdTdGF0ZSc7XG4gICAgZHJvcEFjdGlvblRvZG86IERyb3BJbmZvO1xuICAgIGFsbEF2YWlsYWJsZUFzc2lnbmVlczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgIGlzTmV3Q29sdW1uTW9kZSA9IGZhbHNlO1xuICAgIG5ld0NhcmQ6IGFueSA9IHsgSWQ6IG51bGwsICRDYXB0aW9uOiBudWxsIH07XG4gICAgbmV3Q29sdW1uOiBhbnkgPSB7IElkOiBudWxsLCAkQ2FwdGlvbjogbnVsbCB9O1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uc1JlcG9ydCA9IHRoaXMudmlld1NldHRpbmcuQ29sdW1uc1JlcG9ydC4kQ2FwdGlvbjtcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS5SZXBvcnRFeGVjdXRlKGNvbHVtbnNSZXBvcnQpLnN1YnNjcmliZSgocmVwb3J0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmthbmJhbkNvbHVtbnMgPSByZXBvcnQuTW9EYXRhTGlzdDtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JtU2V0dGluZy5WaWV3LkNvbnRyb2xJbmZvLmZvckVhY2goKGMpID0+IChjLklubGluZUVkaXRNb2RlID0gdHJ1ZSkpO1xuICAgICAgICBjb25zdCBhc3NpZ25lZXNSZXBvcnQgPSB0aGlzLnZpZXdTZXR0aW5nLkFzc2lnbmVlc1JlcG9ydC4kQ2FwdGlvbjtcbiAgICAgICAgdGhpcy5fcG9ydGFsU2VydmljZS5SZXBvcnRFeGVjdXRlKGFzc2lnbmVlc1JlcG9ydCkuc3Vic2NyaWJlKChyZXBvcnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsQXZhaWxhYmxlQXNzaWduZWVzID0gcmVwb3J0Lk1vRGF0YUxpc3Q7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3QoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMudmlld1NldHRpbmcsXG4gICAgICAgICAgICAuLi50aGlzLl9maW5kQ29sdW1uKHRoaXMuYWxsQ29sdW1ucywgW1xuICAgICAgICAgICAgICAgIHRoaXMudmlld1NldHRpbmcuQ292ZXIsXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3U2V0dGluZy5TdGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdTZXR0aW5nLkNhcHRpb25cbiAgICAgICAgICAgIF0pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25BZGROZXdDb2x1bW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2FuYmFuQ29sdW1ucy5wdXNoKHRoaXMubmV3Q29sdW1uKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDb2x1bW4oKTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSW5wdXRJbnRvVmlldygpO1xuICAgIH1cblxuICAgIG9uQWN0aXZlTmV3Q29sdW1uTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlTmV3Q29sdW1uTW9kZSh0cnVlKTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbE5ld0NvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlTmV3Q29sdW1uTW9kZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TmV3Q29sdW1uKCk7XG4gICAgfVxuXG4gICAgb25Jbml0TmV3Q2FyZChncm91cGJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDYXJkKCk7XG4gICAgICAgIHRoaXMubmV3Q2FyZFt0aGlzLmdyb3VwYnlQcm9wZXJ0eV0gPSBncm91cGJ5O1xuICAgIH1cblxuICAgIG9uQWRkTmV3Q2FyZChlKTogdm9pZCB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fYWRkTmV3Q2FyZCgpO1xuICAgIH1cblxuICAgIG9uTmV3Q2FyZElucHV0Rm9jdXNvdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5ld0NhcmQuJENhcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZE5ld0NhcmQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbE5ld0NhcmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsTmV3Q2FyZChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fY2FuY2VsTmV3Q2FyZCgpO1xuICAgIH1cblxuICAgIG9uRHJvcChldmVudCwgaXNDb2x1bW4/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCBwcmV2aW91c0luZGV4O1xuICAgICAgICBsZXQgY3VycmVudEluZGV4O1xuICAgICAgICBjb25zdCBhcnJheSA9IGV2ZW50LmNvbnRhaW5lci5kYXRhO1xuXG4gICAgICAgIGlmIChpc0NvbHVtbikge1xuICAgICAgICAgICAgcHJldmlvdXNJbmRleCA9IGV2ZW50LnByZXZpb3VzSW5kZXg7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSBldmVudC5jdXJyZW50SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbUlkID0gdGhpcy5kcm9wQWN0aW9uVG9kby5kcmFnZ2VkSWQ7XG4gICAgICAgICAgICBpZiAoIWRyYWdnZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHRoaXMuX2dldE1vQnlJZChkcmFnZ2VkSXRlbUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFN0YXRlID0gdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgIHByZXZpb3VzSW5kZXggPSBhcnJheS5pbmRleE9mKGRyYWdnZWRJdGVtKTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SW5kZXg7XG4gICAgICAgICAgICBkcmFnZ2VkSXRlbS5TdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgICAgdGhpcy5fc3RvcERyYWdnaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBtb3ZlSXRlbUluQXJyYXkoYXJyYXksIHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgfVxuXG4gICAgb25EcmFnTW92ZShldmVudCwgZHJhZ2dlZE1vLCBkcmFnZ2VkSW5kZXg6IG51bWJlciwgdGFyZ2V0U3RhdGU6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudEZyb21Qb2ludCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcblxuICAgICAgICBpZiAodGFyZ2V0U3RhdGUpIHtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVsZW1lbnRGcm9tUG9pbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BEcmFnZ2luZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVFbGVtZW50ID0gZWxlbWVudEZyb21Qb2ludC5jbG9zZXN0KCdbc3RhdGVdJyk7XG4gICAgICAgIGlmICghdGFyZ2V0Tm9kZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BEcmFnZ2luZygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8gPSB7XG4gICAgICAgICAgICBkcmFnZ2VkSWQ6IGRyYWdnZWRNby5JZCxcbiAgICAgICAgICAgIHRhcmdldElkOiB0YXJnZXROb2RlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyksXG4gICAgICAgICAgICB0YXJnZXRTdGF0ZTogbnVsbCxcbiAgICAgICAgICAgIHRhcmdldEluZGV4OiBOdW1iZXIodGFyZ2V0Tm9kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpbmRleCcpKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0Tm9kZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG9uZVRoaXJkID0gdGFyZ2V0UmVjdC5oZWlnaHQgLyAzO1xuXG4gICAgICAgIGNvbnN0IGlzQ2FyZFRhcmdldCA9ICF0YXJnZXROb2RlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbHVtbicpO1xuXG4gICAgICAgIGNvbnN0IGlzQmVmb3JlID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IG9uZVRoaXJkICYmIGlzQ2FyZFRhcmdldDtcblxuICAgICAgICBjb25zdCBpc0FmdGVyID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA+IDIgKiBvbmVUaGlyZCAmJiBpc0NhcmRUYXJnZXQ7XG5cbiAgICAgICAgY29uc3QgaXNJbnNpZGUgPSAhaXNDYXJkVGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleCA/PyAtMTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TW8gPSB0aGlzLm1vRGF0YUxpc3RbdGFyZ2V0SW5kZXhdO1xuXG4gICAgICAgIGlmIChpc0NhcmRUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0U3RhdGUgPSB0YXJnZXRNb1t0aGlzLnZpZXdTZXR0aW5nLlN0YXRlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgJENhcHRpb246IHRhcmdldE5vZGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc3RhdGUnKSEsXG4gICAgICAgICAgICAgICAgSWQ6IHRhcmdldE5vZGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSEsXG4gICAgICAgICAgICAgICAgJFR5cGVEZWZJZDogZHJhZ2dlZE1vW3RoaXMudmlld1NldHRpbmcuU3RhdGVdPy4kVHlwZURlZklkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0JlZm9yZSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby5hY3Rpb24gPSAnYmVmb3JlJztcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SW5kZXggPSBkcmFnZ2VkSW5kZXggPiB0YXJnZXRJbmRleCA/IHRhcmdldEluZGV4IDogdGFyZ2V0SW5kZXggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQWZ0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8uYWN0aW9uID0gJ2FmdGVyJztcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SW5kZXggPSBkcmFnZ2VkSW5kZXggPCB0YXJnZXRJbmRleCA/IHRhcmdldEluZGV4IDogdGFyZ2V0SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSW5zaWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLmFjdGlvbiA9ICdpbnNpZGUnO1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2codGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRTdGF0ZSk7XG4gICAgICAgIHRoaXMuX3Nob3dEcmFnSW5mbygpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RvcERyYWdnaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGVhckRyYWdJbmZvKCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0RHJvcEFjdGlvblRvZG8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGFuZ2VOZXdDb2x1bW5Nb2RlKG1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc05ld0NvbHVtbk1vZGUgPSBtb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc2V0RHJvcEFjdGlvblRvZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8gPSB7XG4gICAgICAgICAgICB0YXJnZXRJZDogbnVsbCxcbiAgICAgICAgICAgIGRyYWdnZWRJZDogbnVsbCxcbiAgICAgICAgICAgIHRhcmdldFN0YXRlOiBudWxsLFxuICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IG51bGwsXG4gICAgICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zY3JvbGxJbnB1dEludG9WaWV3KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgaW5wdXRFbC5zY3JvbGxJbnRvVmlldyh7IGlubGluZTogJ2VuZCcgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXROZXdDb2x1bW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV3Q29sdW1uID0geyBJZDogJycsICRDYXB0aW9uOiAnJyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFyRHJhZ0luZm8oZHJvcHBlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChkcm9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldERyb3BBY3Rpb25Ub2RvKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBlbERvbVxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLWJlZm9yZScpXG4gICAgICAgICAgICAuZm9yRWFjaCgoZWxlbWVudCkgPT4gdGhpcy5fcmVuZGVyZXIyLnJlbW92ZUNsYXNzKGVsZW1lbnQsICdkcm9wLWJlZm9yZScpKTtcbiAgICAgICAgZWxEb20ucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtYWZ0ZXInKS5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLl9yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2Ryb3AtYWZ0ZXInKSk7XG4gICAgICAgIGVsRG9tXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtaW5zaWRlJylcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLl9yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2Ryb3AtaW5zaWRlJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dEcmFnSW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2xlYXJEcmFnSW5mbygpO1xuICAgICAgICBpZiAodGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJZCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUVsZW1lbnQgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJZCk7XG4gICAgICAgICAgICBpZiAoIXRhcmdldE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzZXREcm9wQWN0aW9uVG9kbygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyh0YXJnZXROb2RlRWxlbWVudCwgJ2Ryb3AtJyArIHRoaXMuZHJvcEFjdGlvblRvZG8/LmFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGROZXdDYXJkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vRGF0YUxpc3QucHVzaCh0aGlzLm5ld0NhcmQpO1xuICAgICAgICBjb25zdCBjdXJyZW50R3JvdXBieSA9IHRoaXMubmV3Q2FyZFt0aGlzLmdyb3VwYnlQcm9wZXJ0eV07XG4gICAgICAgIHRoaXMub25Jbml0TmV3Q2FyZChjdXJyZW50R3JvdXBieSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXROZXdDYXJkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5ld0NhcmQgPSB7IElkOiBudWxsLCAkQ2FwdGlvbjogbnVsbCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbmNlbE5ld0NhcmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0TmV3Q2FyZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldE1vQnlJZChpZDogc3RyaW5nKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbmRDb2x1bW4oYWxsQ29sdW1ucywgY29sdW1uc05hbWU6IHN0cmluZ1tdKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHt9O1xuICAgICAgICBjb2x1bW5zTmFtZS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW5zW25hbWUgKyAnQ29sdW1uJ10gPSB0aGlzLl9maW5kQ29sdW1uQnlEYk5hbWUudHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgbmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG59XG4iLCI8ZmQtbGF5b3V0LXBhbmVsPlxuICAgIDxmZC1sYXlvdXQtcGFuZWwtYm9keSBbYmxlZWRdPVwidHJ1ZVwiPlxuICAgICAgICA8dGFibGUgZmQtdGFibGUgKm5nSWY9XCJpc0NoZWNrTGlzdFwiPlxuICAgICAgICAgICAgPHRoZWFkIGZkLXRhYmxlLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93PlxuICAgICAgICAgICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbGxDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYWxsQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25BbGxDaGVja2JveCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ0FsbCcgfCBiYmJUcmFuc2xhdGUgfX08L2ZkLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9mZC1sYXlvdXQtcGFuZWwtYm9keT5cbjwvZmQtbGF5b3V0LXBhbmVsPlxuXG48ZmQtbGF5b3V0LWdyaWRcbiAgICAqbmdJZj1cIm1vRGF0YUxpc3Q/Lmxlbmd0aDsgZWxzZSBub0RhdGFcIlxuICAgIGNsYXNzPVwiY29sdW1uc1wiXG4gICAgY2RrRHJvcExpc3RcbiAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJrYW5iYW5Db2x1bW5zXCJcbiAgICBbaWRdPVwiJyRSb290J1wiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50LCB0cnVlKVwiXG4+XG4gICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGthbmJhbkNvbHVtbnM7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4XCJcbiAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgIFtjb2xNZF09XCI2XCJcbiAgICAgICAgW2NvbExnXT1cIjRcIlxuICAgICAgICBbY29sWGxdPVwiM1wiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgW2lkXT1cImNvbHVtbi5JZFwiXG4gICAgICAgIFthdHRyLnN0YXRlXT1cImNvbHVtbi4kQ2FwdGlvblwiXG4gICAgICAgIGNka0RyYWdcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uQ2FyZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICBbZmRMYXlvdXRHcmlkQ29sXT1cIjEyXCJcbiAgICAgICAgW2NvbE1kXT1cIjZcIlxuICAgICAgICBbY29sTGddPVwiNFwiXG4gICAgICAgIFtjb2xYbF09XCIzXCJcbiAgICAgICAgY2xhc3M9XCJuZXdDb2x1bW5cIlxuICAgICAgICAoY2xpY2spPVwib25BY3RpdmVOZXdDb2x1bW5Nb2RlKClcIlxuICAgICAgICAqbmdJZj1cIiFpc05ld0NvbHVtbk1vZGU7IGVsc2UgbmV3Q29sdW1uSW5wdXRcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzcGFuPtiz2KrZiNmGINis2K/bjNivPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25ld0NvbHVtbklucHV0PlxuICAgICAgICA8ZGl2IFtmZExheW91dEdyaWRDb2xdPVwiMTJcIiBbY29sTWRdPVwiNlwiIFtjb2xMZ109XCI0XCIgW2NvbFhsXT1cIjNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dEVsXG4gICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJvbkNhbmNlbE5ld0NvbHVtbigpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld0NvbHVtbi4kQ2FwdGlvblwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BZGROZXdDb2x1bW4oKVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJuZXctY29sdW1uLW5hbWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiINmG2KfZhVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9mZC1sYXlvdXQtZ3JpZD5cblxuPCEtLW5vRGF0YS0tPlxuPG5nLXRlbXBsYXRlICNub0RhdGE+XG4gICAgPGJzdS1uby1kYXRhPjwvYnN1LW5vLWRhdGE+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tY29sdW1uIGNhcmQtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uQ2FyZCBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cbiAgICA8ZmQtY2FyZCBjYXJkVHlwZT1cInF1aWNrVmlld1wiIGNsYXNzPVwiZG9jcy1mbGV4LWl0ZW0tbWFyZ2luXCIgZWxsaXBzaWZ5PlxuICAgICAgICA8ZmQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8c3BhbiBmZC1jYXJkLXRpdGxlPnt7IGNvbHVtbi4kQ2FwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9mZC1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGZkLWNhcmQtY29udGVudFxuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbW8gb2YgbW9EYXRhTGlzdDsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8Ymsta2FuYmFuLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXdTZXR0aW5nXT1cInZpZXdTZXR0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbEF2YWlsYWJsZUFzc2lnbmVlc109XCJhbGxBdmFpbGFibGVBc3NpZ25lZXNcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vW3ZpZXdTZXR0aW5nLlN0YXRlXS4kQ2FwdGlvbiA9PT0gY29sdW1uLiRDYXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwibW8uSWRcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnN0YXRlXT1cImNvbHVtbi4kQ2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmluZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIm1vLiRJc0NoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIm9uRHJhZ01vdmUoJGV2ZW50LCBtbywgaW5kZXgsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjayh7bW8sIGluZGV4fSlcIlxuICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25Sb3dDbGljayh7bW8sIGluZGV4fSlcIlxuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvYmsta2FuYmFuLWNhcmQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxmZC1jYXJkLWZvb3RlciBjbGFzcz1cImNvbHVtbi1mb290ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXctY2FyZFwiICpuZ0lmPVwibmV3Q2FyZFtncm91cGJ5UHJvcGVydHldID09PSBjb2x1bW4uJENhcHRpb247IGVsc2UgYWRkTmV3Q2FyZFwiPlxuICAgICAgICAgICAgICAgIDxmZC1jYXJkPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWZvcm0tY29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdDYXJkLiRDYXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkFkZE5ld0NhcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uTmV3Q2FyZElucHV0Rm9jdXNvdXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUaXRsZScgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZmQtY2FyZD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3LWNhcmQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZE5ld0NhcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRkLWNhcmQtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIn2KfZgdiy2YjYr9mGJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gKG1vdXNlZG93bik9XCJvbkNhbmNlbE5ld0NhcmQoJGV2ZW50KVwiIGdseXBoPVwiZGVjbGluZVwiPjwvZmQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkZE5ld0NhcmQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1uZXctY2FyZFwiIChjbGljayk9XCJvbkluaXROZXdDYXJkKGNvbHVtbi4kQ2FwdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImFkZFwiPjwvZmQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgINqp2KfYsdiqINis2K/bjNivXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtY2FyZC1mb290ZXI+XG4gICAgPC9mZC1jYXJkPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/kanban-base/kanban-base.component';
|
|
2
|
+
export * from './lib/kanban-tags/kanban-tags.component';
|
|
3
|
+
export * from './lib/kanban-card/kanban-card.component';
|
|
4
|
+
export * from './lib/avatar-group/barsa-avatar-group.component';
|
|
5
|
+
export * from './lib/kanban-view/kanban-view.component';
|
|
6
|
+
export * from './lib/barsa-kanban.module';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWthbmJhbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2thbmJhbi1iYXNlL2thbmJhbi1iYXNlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9rYW5iYW4tdGFncy9rYW5iYW4tdGFncy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2FuYmFuLWNhcmQva2FuYmFuLWNhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1ncm91cC9iYXJzYS1hdmF0YXItZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2thbmJhbi12aWV3L2thbmJhbi12aWV3LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXJzYS1rYW5iYW4ubW9kdWxlJztcbiJdfQ==
|