barsa-kanban 2.0.135 → 2.1.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/fesm2022/barsa-kanban.mjs +37 -37
- package/fesm2022/barsa-kanban.mjs.map +1 -1
- package/lib/barsa-kanban.module.d.ts +1 -2
- package/package.json +3 -5
- package/esm2022/barsa-kanban.mjs +0 -5
- package/esm2022/lib/Models/drop-info.mjs +0 -2
- package/esm2022/lib/Models/kanban-view-setting.interface.mjs +0 -2
- package/esm2022/lib/avatar-group/barsa-avatar-group.component.mjs +0 -82
- package/esm2022/lib/barsa-kanban.module.mjs +0 -79
- package/esm2022/lib/kanban-base/kanban-base.component.mjs +0 -20
- package/esm2022/lib/kanban-card/kanban-card.component.mjs +0 -33
- package/esm2022/lib/kanban-tags/kanban-tags.component.mjs +0 -43
- package/esm2022/lib/kanban-view/kanban-view.component.mjs +0 -273
- package/esm2022/public-api.mjs +0 -7
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, inject, Input, ViewChild, signal } from '@angular/core';
|
|
2
|
-
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
3
|
-
import { MultipleGroupByPipe, ReportViewBaseComponent, SortDirection } 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/card";
|
|
8
|
-
import * as i4 from "@fundamental-ngx/core/checkbox";
|
|
9
|
-
import * as i5 from "@fundamental-ngx/core/layout-grid";
|
|
10
|
-
import * as i6 from "@fundamental-ngx/core/layout-panel";
|
|
11
|
-
import * as i7 from "@fundamental-ngx/core/title";
|
|
12
|
-
import * as i8 from "@fundamental-ngx/core/table";
|
|
13
|
-
import * as i9 from "@angular/forms";
|
|
14
|
-
import * as i10 from "@angular/cdk/drag-drop";
|
|
15
|
-
import * as i11 from "../kanban-card/kanban-card.component";
|
|
16
|
-
export class KanbanViewComponent extends ReportViewBaseComponent {
|
|
17
|
-
constructor() {
|
|
18
|
-
super(...arguments);
|
|
19
|
-
this.groupbyProperty = 'State';
|
|
20
|
-
this.isNewColumnMode = false;
|
|
21
|
-
this.newCard = { Id: null, $Caption: null };
|
|
22
|
-
this.newColumn = { Id: null, $Caption: null };
|
|
23
|
-
this._multipleGroup = inject(MultipleGroupByPipe);
|
|
24
|
-
this.groupedMoList = signal({});
|
|
25
|
-
this.sceneConfig = {
|
|
26
|
-
scene: { url: 'assets/images/sapIllus-Scene-NoMail.svg', id: 'sapIllus-Scene-NoMail-1' },
|
|
27
|
-
dialog: { url: 'assets/images/sapIllus-Dialog-NoMail.svg', id: 'sapIllus-Dialog-NoMail' }
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
ngOnInit() {
|
|
31
|
-
super.ngOnInit();
|
|
32
|
-
const columnsReport = this.viewSetting.ColumnsReport.$Caption;
|
|
33
|
-
this._portalService.ReportExecute(columnsReport).subscribe((report) => {
|
|
34
|
-
this.kanbanColumns = report.MoDataList;
|
|
35
|
-
this._changeDetect();
|
|
36
|
-
});
|
|
37
|
-
// this.formSetting.View.ControlInfo.forEach((c) => (c.InlineEditMode = true));
|
|
38
|
-
const assigneesReport = this.viewSetting.AssigneesReport.$Caption;
|
|
39
|
-
this._portalService.ReportExecute(assigneesReport).subscribe((report) => {
|
|
40
|
-
this.allAvailableAssignees = report.MoDataList;
|
|
41
|
-
this._changeDetect();
|
|
42
|
-
});
|
|
43
|
-
this.viewSetting = {
|
|
44
|
-
...this.viewSetting,
|
|
45
|
-
...this._findColumn(this.allColumns, [
|
|
46
|
-
this.viewSetting.Cover,
|
|
47
|
-
this.viewSetting.State,
|
|
48
|
-
this.viewSetting.Caption
|
|
49
|
-
])
|
|
50
|
-
};
|
|
51
|
-
this._prepareGroupMoList(this.moDataList);
|
|
52
|
-
}
|
|
53
|
-
ngOnChanges(changes) {
|
|
54
|
-
super.ngOnChanges(changes);
|
|
55
|
-
const { moDataList } = changes;
|
|
56
|
-
if (moDataList && !moDataList.firstChange) {
|
|
57
|
-
this._prepareGroupMoList(moDataList.currentValue);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
_prepareGroupMoList(molist) {
|
|
61
|
-
const column = this._findColumnByDbName.transform(this.allColumns, this.viewSetting.State);
|
|
62
|
-
const name = column?.Name || this.viewSetting.State;
|
|
63
|
-
const dict = {};
|
|
64
|
-
const s = this._multipleGroup.transform(molist, [
|
|
65
|
-
{
|
|
66
|
-
IsGrouped: true,
|
|
67
|
-
Name: name,
|
|
68
|
-
SortDirection: SortDirection.ASC
|
|
69
|
-
}
|
|
70
|
-
]);
|
|
71
|
-
s.forEach((c) => {
|
|
72
|
-
if (c.$Group) {
|
|
73
|
-
dict[c.$Group] = c.$Children;
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
this.groupedMoList.set(dict);
|
|
77
|
-
}
|
|
78
|
-
onAddNewColumn() {
|
|
79
|
-
this.kanbanColumns.push(this.newColumn);
|
|
80
|
-
this._cdr.detectChanges();
|
|
81
|
-
this._resetNewColumn();
|
|
82
|
-
this._scrollInputIntoView();
|
|
83
|
-
}
|
|
84
|
-
onActiveNewColumnMode() {
|
|
85
|
-
this._changeNewColumnMode(true);
|
|
86
|
-
}
|
|
87
|
-
onCancelNewColumn() {
|
|
88
|
-
this._changeNewColumnMode(false);
|
|
89
|
-
this._resetNewColumn();
|
|
90
|
-
}
|
|
91
|
-
onInitNewCard(groupby) {
|
|
92
|
-
this._resetNewCard();
|
|
93
|
-
this.newCard[this.groupbyProperty] = groupby;
|
|
94
|
-
}
|
|
95
|
-
onAddNewCard(e) {
|
|
96
|
-
e.stopPropagation();
|
|
97
|
-
e.preventDefault();
|
|
98
|
-
this._addNewCard();
|
|
99
|
-
}
|
|
100
|
-
onNewCardInputFocusout() {
|
|
101
|
-
if (this.newCard.$Caption) {
|
|
102
|
-
this._addNewCard();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this._cancelNewCard();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
onCancelNewCard(e) {
|
|
109
|
-
e.stopPropagation();
|
|
110
|
-
e.preventDefault();
|
|
111
|
-
this._cancelNewCard();
|
|
112
|
-
}
|
|
113
|
-
onDrop(event, isColumn) {
|
|
114
|
-
let previousIndex;
|
|
115
|
-
let currentIndex;
|
|
116
|
-
const array = event.container.data;
|
|
117
|
-
if (isColumn) {
|
|
118
|
-
previousIndex = event.previousIndex;
|
|
119
|
-
currentIndex = event.currentIndex;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
const draggedItemId = this.dropActionTodo.draggedId;
|
|
123
|
-
if (!draggedItemId) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const draggedItem = this._getMoById(draggedItemId);
|
|
127
|
-
const targetState = this.dropActionTodo.targetState;
|
|
128
|
-
previousIndex = array.indexOf(draggedItem);
|
|
129
|
-
currentIndex = this.dropActionTodo.targetIndex;
|
|
130
|
-
draggedItem.State = targetState;
|
|
131
|
-
this._stopDragging();
|
|
132
|
-
}
|
|
133
|
-
moveItemInArray(array, previousIndex, currentIndex);
|
|
134
|
-
}
|
|
135
|
-
onDragMove(event, draggedMo, draggedIndex, targetState) {
|
|
136
|
-
const elementFromPoint = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);
|
|
137
|
-
if (targetState) {
|
|
138
|
-
}
|
|
139
|
-
if (!elementFromPoint) {
|
|
140
|
-
this._stopDragging();
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
const targetNodeElement = elementFromPoint.closest('[state]');
|
|
144
|
-
if (!targetNodeElement) {
|
|
145
|
-
this._stopDragging();
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
this.dropActionTodo = {
|
|
149
|
-
draggedId: draggedMo.Id,
|
|
150
|
-
targetId: targetNodeElement.getAttribute('id'),
|
|
151
|
-
targetState: null,
|
|
152
|
-
targetIndex: Number(targetNodeElement.getAttribute('index'))
|
|
153
|
-
};
|
|
154
|
-
const targetRect = targetNodeElement.getBoundingClientRect();
|
|
155
|
-
const oneThird = targetRect.height / 3;
|
|
156
|
-
const isCardTarget = !targetNodeElement.classList.contains('column');
|
|
157
|
-
const isBefore = event.pointerPosition.y - targetRect.top < oneThird && isCardTarget;
|
|
158
|
-
const isAfter = event.pointerPosition.y - targetRect.top > 2 * oneThird && isCardTarget;
|
|
159
|
-
const isInside = !isCardTarget;
|
|
160
|
-
const targetIndex = this.dropActionTodo.targetIndex ?? -1;
|
|
161
|
-
const targetMo = this.moDataList[targetIndex];
|
|
162
|
-
if (isCardTarget) {
|
|
163
|
-
this.dropActionTodo.targetState = targetMo[this.viewSetting.State];
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
this.dropActionTodo.targetState = {
|
|
167
|
-
$Caption: targetNodeElement.getAttribute('state'),
|
|
168
|
-
Id: targetNodeElement.getAttribute('id'),
|
|
169
|
-
$TypeDefId: draggedMo[this.viewSetting.State]?.$TypeDefId
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
if (isBefore) {
|
|
173
|
-
this.dropActionTodo.action = 'before';
|
|
174
|
-
this.dropActionTodo.targetIndex = draggedIndex > targetIndex ? targetIndex : targetIndex - 1;
|
|
175
|
-
}
|
|
176
|
-
else if (isAfter) {
|
|
177
|
-
this.dropActionTodo.action = 'after';
|
|
178
|
-
this.dropActionTodo.targetIndex = draggedIndex < targetIndex ? targetIndex : targetIndex + 1;
|
|
179
|
-
}
|
|
180
|
-
else if (isInside) {
|
|
181
|
-
this.dropActionTodo.action = 'inside';
|
|
182
|
-
this.dropActionTodo.targetIndex = 0;
|
|
183
|
-
}
|
|
184
|
-
// console.log(this.dropActionTodo.targetState);
|
|
185
|
-
this._showDragInfo();
|
|
186
|
-
}
|
|
187
|
-
_changeDetect() {
|
|
188
|
-
this._cdr.detectChanges();
|
|
189
|
-
}
|
|
190
|
-
_stopDragging() {
|
|
191
|
-
this._clearDragInfo();
|
|
192
|
-
this._resetDropActionTodo();
|
|
193
|
-
}
|
|
194
|
-
_changeNewColumnMode(mode) {
|
|
195
|
-
this.isNewColumnMode = mode;
|
|
196
|
-
}
|
|
197
|
-
_resetDropActionTodo() {
|
|
198
|
-
this.dropActionTodo = {
|
|
199
|
-
targetId: null,
|
|
200
|
-
draggedId: null,
|
|
201
|
-
targetState: null,
|
|
202
|
-
targetIndex: null,
|
|
203
|
-
action: null
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
_scrollInputIntoView() {
|
|
207
|
-
const inputEl = this.inputEl.nativeElement;
|
|
208
|
-
inputEl.focus();
|
|
209
|
-
inputEl.scrollIntoView({ inline: 'end' });
|
|
210
|
-
}
|
|
211
|
-
_resetNewColumn() {
|
|
212
|
-
this.newColumn = { Id: '', $Caption: '' };
|
|
213
|
-
}
|
|
214
|
-
_clearDragInfo(dropped = false) {
|
|
215
|
-
if (dropped) {
|
|
216
|
-
this._resetDropActionTodo();
|
|
217
|
-
}
|
|
218
|
-
const elDom = this._el.nativeElement;
|
|
219
|
-
elDom
|
|
220
|
-
.querySelectorAll('.drop-before')
|
|
221
|
-
.forEach((element) => this._renderer2.removeClass(element, 'drop-before'));
|
|
222
|
-
elDom.querySelectorAll('.drop-after').forEach((element) => this._renderer2.removeClass(element, 'drop-after'));
|
|
223
|
-
elDom
|
|
224
|
-
.querySelectorAll('.drop-inside')
|
|
225
|
-
.forEach((element) => this._renderer2.removeClass(element, 'drop-inside'));
|
|
226
|
-
}
|
|
227
|
-
_showDragInfo() {
|
|
228
|
-
this._clearDragInfo();
|
|
229
|
-
if (this.dropActionTodo.targetId) {
|
|
230
|
-
const targetNodeElement = this._el.nativeElement.querySelector('#' + this.dropActionTodo.targetId);
|
|
231
|
-
if (!targetNodeElement) {
|
|
232
|
-
this._resetDropActionTodo();
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
this._renderer2.addClass(targetNodeElement, 'drop-' + this.dropActionTodo?.action);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
_addNewCard() {
|
|
239
|
-
this.moDataList.push(this.newCard);
|
|
240
|
-
const currentGroupby = this.newCard[this.groupbyProperty];
|
|
241
|
-
this.onInitNewCard(currentGroupby);
|
|
242
|
-
}
|
|
243
|
-
_resetNewCard() {
|
|
244
|
-
this.newCard = { Id: null, $Caption: null };
|
|
245
|
-
}
|
|
246
|
-
_cancelNewCard() {
|
|
247
|
-
this._resetNewCard();
|
|
248
|
-
}
|
|
249
|
-
_getMoById(id) {
|
|
250
|
-
return this.moDataList.find((c) => c.Id === id);
|
|
251
|
-
}
|
|
252
|
-
_findColumn(allColumns, columnsName) {
|
|
253
|
-
const columns = {};
|
|
254
|
-
columnsName.forEach((name) => {
|
|
255
|
-
columns[name + 'Column'] = this._findColumnByDbName.transform(this.allColumns, name);
|
|
256
|
-
});
|
|
257
|
-
return columns;
|
|
258
|
-
}
|
|
259
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: KanbanViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
260
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: KanbanViewComponent, selector: "bk-kanban-view", inputs: { kanbanColumns: "kanbanColumns", groupbyProperty: "groupbyProperty" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n @if (isCheckList) {\n <table fd-table>\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 }\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<fd-layout-grid\n class=\"columns\"\n fillEmptySpace\n [setMinHeight]=\"true\"\n [disable]=\"true\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"kanbanColumns\"\n [id]=\"'$Root'\"\n (cdkDropListDropped)=\"onDrop($event, true)\"\n>\n @for (column of kanbanColumns; track column; let columnIndex = $index) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"4\"\n [colLg]=\"3\"\n [colXl]=\"2\"\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 }\n</fd-layout-grid>\n\n<!--noData-->\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 <fd-card-main-header [style.background]=\"column.Color\" [class.hasColumnColor]=\"column.Color\">\n <h2 fd-card-title>{{ column.$Caption }}</h2>\n </fd-card-main-header>\n </fd-card-header>\n <fd-card-content\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"moDataList\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnMoList;\n context: { $implicit: groupedMoList()[column.$Caption], column: column }\n \"\n >\n </ng-container>\n </fd-card-content>\n <!-- <fd-card-footer class=\"column-footer\">\n @if (newCard[groupbyProperty] === column.$Caption) {\n <div class=\"new-card\">\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 } @else {\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 }\n </fd-card-footer> -->\n </fd-card>\n</ng-template>\n\n<ng-template #columnMoList let-moList let-column=\"column\">\n @if(moList && moList.length>0){ @for (mo of moList; track mo; let index = $index) {\n <bk-kanban-card\n [mo]=\"mo\"\n [allColumns]=\"columns\"\n [viewSetting]=\"viewSetting\"\n [formSetting]=\"formSetting\"\n [styleIndex]=\"mo.$StyleIndex\"\n [conditionalFormats]=\"conditionalFormats\"\n [allAvailableAssignees]=\"allAvailableAssignees\"\n [index]=\"index\"\n [attr.id]=\"mo.Id\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"mo.$IsChecked\"\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 } }@else{\n\n <h3 fd-title>{{ 'NoData' | bbbTranslate }}</h3>\n }\n</ng-template>\n", styles: ["fd-card-main-header.hasColumnColor{display:block}fd-card-main-header.hasColumnColor ::ng-deep .fd-card__header-main{background-color:transparent}figure{padding:0!important}figure ::ng-deep svg{margin:0}::-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%}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:1rem .5rem;margin:0;display:flex;flex-direction:column;row-gap:1rem}.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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.EllipsifyDirective, selector: "[ellipsify]", inputs: ["limitLine"] }, { kind: "directive", type: i2.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight"], exportAs: ["fillEmptySpace"] }, { kind: "component", type: i3.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }, { kind: "component", type: i3.CardHeaderComponent, selector: "fd-card-header", inputs: ["ariaRoleDescription"] }, { kind: "component", type: i3.CardMainHeaderComponent, selector: "fd-card-main-header", inputs: ["interactive", "title"] }, { kind: "component", type: i3.CardContentComponent, selector: "fd-card-content" }, { kind: "directive", type: i3.CardTitleDirective, selector: "[fd-card-title]", inputs: ["id"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i5.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i5.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: i6.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage", "id", "transparent"] }, { kind: "component", type: i6.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i7.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i8.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i8.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY", "nonInteractive"] }, { kind: "directive", type: i8.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i8.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.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: i10.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: i11.KanbanCardComponent, selector: "bk-kanban-card", inputs: ["index", "mo", "viewSetting", "allAvailableAssignees"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
261
|
-
}
|
|
262
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: KanbanViewComponent, decorators: [{
|
|
263
|
-
type: Component,
|
|
264
|
-
args: [{ selector: 'bk-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel>\n <fd-layout-panel-body [bleed]=\"true\">\n @if (isCheckList) {\n <table fd-table>\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 }\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<fd-layout-grid\n class=\"columns\"\n fillEmptySpace\n [setMinHeight]=\"true\"\n [disable]=\"true\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"kanbanColumns\"\n [id]=\"'$Root'\"\n (cdkDropListDropped)=\"onDrop($event, true)\"\n>\n @for (column of kanbanColumns; track column; let columnIndex = $index) {\n <div\n [fdLayoutGridCol]=\"12\"\n [colMd]=\"4\"\n [colLg]=\"3\"\n [colXl]=\"2\"\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 }\n</fd-layout-grid>\n\n<!--noData-->\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 <fd-card-main-header [style.background]=\"column.Color\" [class.hasColumnColor]=\"column.Color\">\n <h2 fd-card-title>{{ column.$Caption }}</h2>\n </fd-card-main-header>\n </fd-card-header>\n <fd-card-content\n cdkDropList\n (cdkDropListDropped)=\"onDrop($event)\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"moDataList\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnMoList;\n context: { $implicit: groupedMoList()[column.$Caption], column: column }\n \"\n >\n </ng-container>\n </fd-card-content>\n <!-- <fd-card-footer class=\"column-footer\">\n @if (newCard[groupbyProperty] === column.$Caption) {\n <div class=\"new-card\">\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 } @else {\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 }\n </fd-card-footer> -->\n </fd-card>\n</ng-template>\n\n<ng-template #columnMoList let-moList let-column=\"column\">\n @if(moList && moList.length>0){ @for (mo of moList; track mo; let index = $index) {\n <bk-kanban-card\n [mo]=\"mo\"\n [allColumns]=\"columns\"\n [viewSetting]=\"viewSetting\"\n [formSetting]=\"formSetting\"\n [styleIndex]=\"mo.$StyleIndex\"\n [conditionalFormats]=\"conditionalFormats\"\n [allAvailableAssignees]=\"allAvailableAssignees\"\n [index]=\"index\"\n [attr.id]=\"mo.Id\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"mo.$IsChecked\"\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 } }@else{\n\n <h3 fd-title>{{ 'NoData' | bbbTranslate }}</h3>\n }\n</ng-template>\n", styles: ["fd-card-main-header.hasColumnColor{display:block}fd-card-main-header.hasColumnColor ::ng-deep .fd-card__header-main{background-color:transparent}figure{padding:0!important}figure ::ng-deep svg{margin:0}::-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%}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:1rem .5rem;margin:0;display:flex;flex-direction:column;row-gap:1rem}.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"] }]
|
|
265
|
-
}], propDecorators: { inputEl: [{
|
|
266
|
-
type: ViewChild,
|
|
267
|
-
args: ['inputEl', { read: ElementRef }]
|
|
268
|
-
}], kanbanColumns: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], groupbyProperty: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}] } });
|
|
273
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUF1QixtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVV4SCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQTBDO0lBTm5GOztRQVNhLG9CQUFlLEdBQUcsT0FBTyxDQUFDO1FBR25DLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFlBQU8sR0FBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzVDLGNBQVMsR0FBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBRztZQUNWLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSx5Q0FBeUMsRUFBRSxFQUFFLEVBQUUseUJBQXlCLEVBQUU7WUFDeEYsTUFBTSxF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QUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sVUFBVSxDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFxQjtRQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs4R0EvUVEsbUJBQW1CO2tHQUFuQixtQkFBbUIscU5BQ0UsVUFBVSx5RUN4QjVDLHFrS0FrSkE7OzJGRDNIYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07OEJBR0gsT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNqQyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbmltcG9ydCB7IE1ldGFvYmplY3REYXRhTW9kZWwsIE11bHRpcGxlR3JvdXBCeVBpcGUsIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgS2FuYmFuVmlld1NldHRpbmcgfSBmcm9tICcuLi9Nb2RlbHMva2FuYmFuLXZpZXctc2V0dGluZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJvcEluZm8gfSBmcm9tICcuLi9Nb2RlbHMvZHJvcC1pbmZvJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiay1rYW5iYW4tdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2thbmJhbi12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9rYW5iYW4tdmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEthbmJhblZpZXdDb21wb25lbnQgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxLYW5iYW5WaWV3U2V0dGluZz4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXRFbDogRWxlbWVudFJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGthbmJhbkNvbHVtbnM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICBASW5wdXQoKSBncm91cGJ5UHJvcGVydHkgPSAnU3RhdGUnO1xuICAgIGRyb3BBY3Rpb25Ub2RvOiBEcm9wSW5mbztcbiAgICBhbGxBdmFpbGFibGVBc3NpZ25lZXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcbiAgICBpc05ld0NvbHVtbk1vZGUgPSBmYWxzZTtcbiAgICBuZXdDYXJkOiBhbnkgPSB7IElkOiBudWxsLCAkQ2FwdGlvbjogbnVsbCB9O1xuICAgIG5ld0NvbHVtbjogYW55ID0geyBJZDogbnVsbCwgJENhcHRpb246IG51bGwgfTtcbiAgICBfbXVsdGlwbGVHcm91cCA9IGluamVjdChNdWx0aXBsZUdyb3VwQnlQaXBlKTtcbiAgICBncm91cGVkTW9MaXN0ID0gc2lnbmFsKHt9KTtcbiAgICBzY2VuZUNvbmZpZyA9IHtcbiAgICAgICAgc2NlbmU6IHsgdXJsOiAnYXNzZXRzL2ltYWdlcy9zYXBJbGx1cy1TY2VuZS1Ob01haWwuc3ZnJywgaWQ6ICdzYXBJbGx1cy1TY2VuZS1Ob01haWwtMScgfSxcbiAgICAgICAgZGlhbG9nOiB7IHVybDogJ2Fzc2V0cy9pbWFnZXMvc2FwSWxsdXMtRGlhbG9nLU5vTWFpbC5zdmcnLCBpZDogJ3NhcElsbHVzLURpYWxvZy1Ob01haWwnIH1cbiAgICB9O1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnNSZXBvcnQgPSB0aGlzLnZpZXdTZXR0aW5nLkNvbHVtbnNSZXBvcnQuJENhcHRpb247XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2UuUmVwb3J0RXhlY3V0ZShjb2x1bW5zUmVwb3J0KS5zdWJzY3JpYmUoKHJlcG9ydCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rYW5iYW5Db2x1bW5zID0gcmVwb3J0Lk1vRGF0YUxpc3Q7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRoaXMuZm9ybVNldHRpbmcuVmlldy5Db250cm9sSW5mby5mb3JFYWNoKChjKSA9PiAoYy5JbmxpbmVFZGl0TW9kZSA9IHRydWUpKTtcbiAgICAgICAgY29uc3QgYXNzaWduZWVzUmVwb3J0ID0gdGhpcy52aWV3U2V0dGluZy5Bc3NpZ25lZXNSZXBvcnQuJENhcHRpb247XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2UuUmVwb3J0RXhlY3V0ZShhc3NpZ25lZXNSZXBvcnQpLnN1YnNjcmliZSgocmVwb3J0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbEF2YWlsYWJsZUFzc2lnbmVlcyA9IHJlcG9ydC5Nb0RhdGFMaXN0O1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlld1NldHRpbmcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnZpZXdTZXR0aW5nLFxuICAgICAgICAgICAgLi4udGhpcy5fZmluZENvbHVtbih0aGlzLmFsbENvbHVtbnMsIFtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdTZXR0aW5nLkNvdmVyLFxuICAgICAgICAgICAgICAgIHRoaXMudmlld1NldHRpbmcuU3RhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3U2V0dGluZy5DYXB0aW9uXG4gICAgICAgICAgICBdKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9wcmVwYXJlR3JvdXBNb0xpc3QodGhpcy5tb0RhdGFMaXN0KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB7IG1vRGF0YUxpc3QgfSA9IGNoYW5nZXM7XG4gICAgICAgIGlmIChtb0RhdGFMaXN0ICYmICFtb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlR3JvdXBNb0xpc3QobW9EYXRhTGlzdC5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9wcmVwYXJlR3JvdXBNb0xpc3QobW9saXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fZmluZENvbHVtbkJ5RGJOYW1lLnRyYW5zZm9ybSh0aGlzLmFsbENvbHVtbnMsIHRoaXMudmlld1NldHRpbmcuU3RhdGUpO1xuICAgICAgICBjb25zdCBuYW1lID0gY29sdW1uPy5OYW1lIHx8IHRoaXMudmlld1NldHRpbmcuU3RhdGU7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICAgICAgY29uc3QgczogYW55W10gPSB0aGlzLl9tdWx0aXBsZUdyb3VwLnRyYW5zZm9ybShtb2xpc3QsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBJc0dyb3VwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uLkFTQ1xuICAgICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICAgICAgcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYy4kR3JvdXApIHtcbiAgICAgICAgICAgICAgICBkaWN0W2MuJEdyb3VwXSA9IGMuJENoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cGVkTW9MaXN0LnNldChkaWN0KTtcbiAgICB9XG5cbiAgICBvbkFkZE5ld0NvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rYW5iYW5Db2x1bW5zLnB1c2godGhpcy5uZXdDb2x1bW4pO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9yZXNldE5ld0NvbHVtbigpO1xuICAgICAgICB0aGlzLl9zY3JvbGxJbnB1dEludG9WaWV3KCk7XG4gICAgfVxuXG4gICAgb25BY3RpdmVOZXdDb2x1bW5Nb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VOZXdDb2x1bW5Nb2RlKHRydWUpO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsTmV3Q29sdW1uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VOZXdDb2x1bW5Nb2RlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDb2x1bW4oKTtcbiAgICB9XG5cbiAgICBvbkluaXROZXdDYXJkKGdyb3VwYnk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldE5ld0NhcmQoKTtcbiAgICAgICAgdGhpcy5uZXdDYXJkW3RoaXMuZ3JvdXBieVByb3BlcnR5XSA9IGdyb3VwYnk7XG4gICAgfVxuXG4gICAgb25BZGROZXdDYXJkKGUpOiB2b2lkIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9hZGROZXdDYXJkKCk7XG4gICAgfVxuXG4gICAgb25OZXdDYXJkSW5wdXRGb2N1c291dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmV3Q2FyZC4kQ2FwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fYWRkTmV3Q2FyZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2FuY2VsTmV3Q2FyZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DYW5jZWxOZXdDYXJkKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9jYW5jZWxOZXdDYXJkKCk7XG4gICAgfVxuXG4gICAgb25Ecm9wKGV2ZW50LCBpc0NvbHVtbj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHByZXZpb3VzSW5kZXg7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gZXZlbnQuY29udGFpbmVyLmRhdGE7XG5cbiAgICAgICAgaWYgKGlzQ29sdW1uKSB7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gZXZlbnQucHJldmlvdXNJbmRleDtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGV2ZW50LmN1cnJlbnRJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtSWQgPSB0aGlzLmRyb3BBY3Rpb25Ub2RvLmRyYWdnZWRJZDtcbiAgICAgICAgICAgIGlmICghZHJhZ2dlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtID0gdGhpcy5fZ2V0TW9CeUlkKGRyYWdnZWRJdGVtSWQpO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldFN0YXRlO1xuICAgICAgICAgICAgcHJldmlvdXNJbmRleCA9IGFycmF5LmluZGV4T2YoZHJhZ2dlZEl0ZW0pO1xuICAgICAgICAgICAgY3VycmVudEluZGV4ID0gdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleDtcbiAgICAgICAgICAgIGRyYWdnZWRJdGVtLlN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgICB0aGlzLl9zdG9wRHJhZ2dpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShhcnJheSwgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlKGV2ZW50LCBkcmFnZ2VkTW8sIGRyYWdnZWRJbmRleDogbnVtYmVyLCB0YXJnZXRTdGF0ZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50RnJvbVBvaW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5wb2ludGVyUG9zaXRpb24ueCwgZXZlbnQucG9pbnRlclBvc2l0aW9uLnkpO1xuXG4gICAgICAgIGlmICh0YXJnZXRTdGF0ZSkge1xuICAgICAgICB9XG4gICAgICAgIGlmICghZWxlbWVudEZyb21Qb2ludCkge1xuICAgICAgICAgICAgdGhpcy5fc3RvcERyYWdnaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUVsZW1lbnQgPSBlbGVtZW50RnJvbVBvaW50LmNsb3Nlc3QoJ1tzdGF0ZV0nKTtcbiAgICAgICAgaWYgKCF0YXJnZXROb2RlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fc3RvcERyYWdnaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kbyA9IHtcbiAgICAgICAgICAgIGRyYWdnZWRJZDogZHJhZ2dlZE1vLklkLFxuICAgICAgICAgICAgdGFyZ2V0SWQ6IHRhcmdldE5vZGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSxcbiAgICAgICAgICAgIHRhcmdldFN0YXRlOiBudWxsLFxuICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IE51bWJlcih0YXJnZXROb2RlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2luZGV4JykpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXROb2RlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgb25lVGhpcmQgPSB0YXJnZXRSZWN0LmhlaWdodCAvIDM7XG5cbiAgICAgICAgY29uc3QgaXNDYXJkVGFyZ2V0ID0gIXRhcmdldE5vZGVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnY29sdW1uJyk7XG5cbiAgICAgICAgY29uc3QgaXNCZWZvcmUgPSBldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wIDwgb25lVGhpcmQgJiYgaXNDYXJkVGFyZ2V0O1xuXG4gICAgICAgIGNvbnN0IGlzQWZ0ZXIgPSBldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wID4gMiAqIG9uZVRoaXJkICYmIGlzQ2FyZFRhcmdldDtcblxuICAgICAgICBjb25zdCBpc0luc2lkZSA9ICFpc0NhcmRUYXJnZXQ7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldEluZGV4ID8/IC0xO1xuICAgICAgICBjb25zdCB0YXJnZXRNbyA9IHRoaXMubW9EYXRhTGlzdFt0YXJnZXRJbmRleF07XG5cbiAgICAgICAgaWYgKGlzQ2FyZFRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRTdGF0ZSA9IHRhcmdldE1vW3RoaXMudmlld1NldHRpbmcuU3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogdGFyZ2V0Tm9kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdGF0ZScpISxcbiAgICAgICAgICAgICAgICBJZDogdGFyZ2V0Tm9kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpISxcbiAgICAgICAgICAgICAgICAkVHlwZURlZklkOiBkcmFnZ2VkTW9bdGhpcy52aWV3U2V0dGluZy5TdGF0ZV0/LiRUeXBlRGVmSWRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQmVmb3JlKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLmFjdGlvbiA9ICdiZWZvcmUnO1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleCA9IGRyYWdnZWRJbmRleCA+IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggOiB0YXJnZXRJbmRleCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBZnRlcikge1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby5hY3Rpb24gPSAnYWZ0ZXInO1xuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleCA9IGRyYWdnZWRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggOiB0YXJnZXRJbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJbnNpZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8uYWN0aW9uID0gJ2luc2lkZSc7XG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldFN0YXRlKTtcbiAgICAgICAgdGhpcy5fc2hvd0RyYWdJbmZvKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdG9wRHJhZ2dpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NsZWFyRHJhZ0luZm8oKTtcbiAgICAgICAgdGhpcy5fcmVzZXREcm9wQWN0aW9uVG9kbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoYW5nZU5ld0NvbHVtbk1vZGUobW9kZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTmV3Q29sdW1uTW9kZSA9IG1vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXREcm9wQWN0aW9uVG9kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kbyA9IHtcbiAgICAgICAgICAgIHRhcmdldElkOiBudWxsLFxuICAgICAgICAgICAgZHJhZ2dlZElkOiBudWxsLFxuICAgICAgICAgICAgdGFyZ2V0U3RhdGU6IG51bGwsXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogbnVsbCxcbiAgICAgICAgICAgIGFjdGlvbjogbnVsbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Njcm9sbElucHV0SW50b1ZpZXcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaW5wdXRFbC5mb2N1cygpO1xuICAgICAgICBpbnB1dEVsLnNjcm9sbEludG9WaWV3KHsgaW5saW5lOiAnZW5kJyB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNldE5ld0NvbHVtbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZXdDb2x1bW4gPSB7IElkOiAnJywgJENhcHRpb246ICcnIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYXJEcmFnSW5mbyhkcm9wcGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRyb3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0RHJvcEFjdGlvblRvZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbERvbSA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGVsRG9tXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtYmVmb3JlJylcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLl9yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2Ryb3AtYmVmb3JlJykpO1xuICAgICAgICBlbERvbS5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1hZnRlcicpLmZvckVhY2goKGVsZW1lbnQpID0+IHRoaXMuX3JlbmRlcmVyMi5yZW1vdmVDbGFzcyhlbGVtZW50LCAnZHJvcC1hZnRlcicpKTtcbiAgICAgICAgZWxEb21cbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1pbnNpZGUnKVxuICAgICAgICAgICAgLmZvckVhY2goKGVsZW1lbnQpID0+IHRoaXMuX3JlbmRlcmVyMi5yZW1vdmVDbGFzcyhlbGVtZW50LCAnZHJvcC1pbnNpZGUnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0RyYWdJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGVhckRyYWdJbmZvKCk7XG4gICAgICAgIGlmICh0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldElkKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXROb2RlRWxlbWVudCA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldElkKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0Tm9kZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldERyb3BBY3Rpb25Ub2RvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKHRhcmdldE5vZGVFbGVtZW50LCAnZHJvcC0nICsgdGhpcy5kcm9wQWN0aW9uVG9kbz8uYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkZE5ld0NhcmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5wdXNoKHRoaXMubmV3Q2FyZCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cGJ5ID0gdGhpcy5uZXdDYXJkW3RoaXMuZ3JvdXBieVByb3BlcnR5XTtcbiAgICAgICAgdGhpcy5vbkluaXROZXdDYXJkKGN1cnJlbnRHcm91cGJ5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNldE5ld0NhcmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV3Q2FyZCA9IHsgSWQ6IG51bGwsICRDYXB0aW9uOiBudWxsIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FuY2VsTmV3Q2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDYXJkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0TW9CeUlkKGlkOiBzdHJpbmcpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLklkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZENvbHVtbihhbGxDb2x1bW5zLCBjb2x1bW5zTmFtZTogc3RyaW5nW10pOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XG4gICAgICAgIGNvbHVtbnNOYW1lLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbHVtbnNbbmFtZSArICdDb2x1bW4nXSA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0odGhpcy5hbGxDb2x1bW5zLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cbn1cbiIsIjxmZC1sYXlvdXQtcGFuZWw+XG4gICAgPGZkLWxheW91dC1wYW5lbC1ib2R5IFtibGVlZF09XCJ0cnVlXCI+XG4gICAgICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICAgICAgPHRhYmxlIGZkLXRhYmxlPlxuICAgICAgICAgICAgPHRoZWFkIGZkLXRhYmxlLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93PlxuICAgICAgICAgICAgICAgICAgICA8dGggZmQtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbGxDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYWxsQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25BbGxDaGVja2JveCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ0FsbCcgfCBiYmJUcmFuc2xhdGUgfX08L2ZkLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICAgIH1cbiAgICA8L2ZkLWxheW91dC1wYW5lbC1ib2R5PlxuPC9mZC1sYXlvdXQtcGFuZWw+XG5cbjxmZC1sYXlvdXQtZ3JpZFxuICAgIGNsYXNzPVwiY29sdW1uc1wiXG4gICAgZmlsbEVtcHR5U3BhY2VcbiAgICBbc2V0TWluSGVpZ2h0XT1cInRydWVcIlxuICAgIFtkaXNhYmxlXT1cInRydWVcIlxuICAgIGNka0Ryb3BMaXN0XG4gICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgIFtjZGtEcm9wTGlzdERhdGFdPVwia2FuYmFuQ29sdW1uc1wiXG4gICAgW2lkXT1cIickUm9vdCdcIlxuICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudCwgdHJ1ZSlcIlxuPlxuICAgIEBmb3IgKGNvbHVtbiBvZiBrYW5iYW5Db2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgIDxkaXZcbiAgICAgICAgW2ZkTGF5b3V0R3JpZENvbF09XCIxMlwiXG4gICAgICAgIFtjb2xNZF09XCI0XCJcbiAgICAgICAgW2NvbExnXT1cIjNcIlxuICAgICAgICBbY29sWGxdPVwiMlwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgW2lkXT1cImNvbHVtbi5JZFwiXG4gICAgICAgIFthdHRyLnN0YXRlXT1cImNvbHVtbi4kQ2FwdGlvblwiXG4gICAgICAgIGNka0RyYWdcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uQ2FyZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgfVxuPC9mZC1sYXlvdXQtZ3JpZD5cblxuPCEtLW5vRGF0YS0tPlxuXG48IS0tY29sdW1uIGNhcmQtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uQ2FyZCBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cbiAgICA8ZmQtY2FyZCBjYXJkVHlwZT1cInF1aWNrVmlld1wiIGNsYXNzPVwiZG9jcy1mbGV4LWl0ZW0tbWFyZ2luXCIgZWxsaXBzaWZ5PlxuICAgICAgICA8ZmQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8ZmQtY2FyZC1tYWluLWhlYWRlciBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2x1bW4uQ29sb3JcIiBbY2xhc3MuaGFzQ29sdW1uQ29sb3JdPVwiY29sdW1uLkNvbG9yXCI+XG4gICAgICAgICAgICAgICAgPGgyIGZkLWNhcmQtdGl0bGU+e3sgY29sdW1uLiRDYXB0aW9uIH19PC9oMj5cbiAgICAgICAgICAgIDwvZmQtY2FyZC1tYWluLWhlYWRlcj5cbiAgICAgICAgPC9mZC1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGZkLWNhcmQtY29udGVudFxuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJtb0RhdGFMaXN0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk1vTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGdyb3VwZWRNb0xpc3QoKVtjb2x1bW4uJENhcHRpb25dLCBjb2x1bW46IGNvbHVtbiB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLWNhcmQtY29udGVudD5cbiAgICAgICAgPCEtLSA8ZmQtY2FyZC1mb290ZXIgY2xhc3M9XCJjb2x1bW4tZm9vdGVyXCI+XG4gICAgICAgICAgICBAaWYgKG5ld0NhcmRbZ3JvdXBieVByb3BlcnR5XSA9PT0gY29sdW1uLiRDYXB0aW9uKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3LWNhcmRcIj5cbiAgICAgICAgICAgICAgICA8ZmQtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3Q2FyZC4kQ2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BZGROZXdDYXJkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJvbk5ld0NhcmRJbnB1dEZvY3Vzb3V0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGl0bGUnIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZkLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jYXJkLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROZXdDYXJkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZC1jYXJkLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ9in2YHYstmI2K/ZhidcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIChtb3VzZWRvd24pPVwib25DYW5jZWxOZXdDYXJkKCRldmVudClcIiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1uZXctY2FyZFwiIChjbGljayk9XCJvbkluaXROZXdDYXJkKGNvbHVtbi4kQ2FwdGlvbilcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJhZGRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgINqp2KfYsdiqINis2K/bjNivXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtY2FyZC1mb290ZXI+IC0tPlxuICAgIDwvZmQtY2FyZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uTW9MaXN0IGxldC1tb0xpc3QgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgIEBpZihtb0xpc3QgJiYgbW9MaXN0Lmxlbmd0aD4wKXsgQGZvciAobW8gb2YgbW9MaXN0OyB0cmFjayBtbzsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgPGJrLWthbmJhbi1jYXJkXG4gICAgICAgIFttb109XCJtb1wiXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICBbdmlld1NldHRpbmddPVwidmlld1NldHRpbmdcIlxuICAgICAgICBbZm9ybVNldHRpbmddPVwiZm9ybVNldHRpbmdcIlxuICAgICAgICBbc3R5bGVJbmRleF09XCJtby4kU3R5bGVJbmRleFwiXG4gICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2FsbEF2YWlsYWJsZUFzc2lnbmVlc109XCJhbGxBdmFpbGFibGVBc3NpZ25lZXNcIlxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICBbYXR0ci5pZF09XCJtby5JZFwiXG4gICAgICAgIFtpbmxpbmVFZGl0TW9kZV09XCJpbmxpbmVFZGl0TW9kZVwiXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXG4gICAgICAgIFthdHRyLnN0YXRlXT1cImNvbHVtbi4kQ2FwdGlvblwiXG4gICAgICAgIFthdHRyLmluZGV4XT1cImluZGV4XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIm1vLiRJc0NoZWNrZWRcIlxuICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIm9uRHJhZ01vdmUoJGV2ZW50LCBtbywgaW5kZXgsIGNvbHVtbilcIlxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjayh7bW8sIGluZGV4fSlcIlxuICAgICAgICAoZGJsY2xpY2spPVwib25Sb3dDbGljayh7bW8sIGluZGV4fSlcIlxuICAgICAgICBjZGtEcmFnXG4gICAgPlxuICAgIDwvYmsta2FuYmFuLWNhcmQ+XG4gICAgfSB9QGVsc2V7XG5cbiAgICA8aDMgZmQtdGl0bGU+e3sgJ05vRGF0YScgfCBiYmJUcmFuc2xhdGUgfX08L2gzPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWthbmJhbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2thbmJhbi1iYXNlL2thbmJhbi1iYXNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2thbmJhbi10YWdzL2thbmJhbi10YWdzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2thbmJhbi1jYXJkL2thbmJhbi1jYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1ncm91cC9iYXJzYS1hdmF0YXItZ3JvdXAuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFyc2Eta2FuYmFuLm1vZHVsZSc7XHJcbiJdfQ==
|