barsa-kanban 2.2.73 → 2.2.74

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.
@@ -1,275 +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
- if (assigneesReport) {
40
- this._portalService.ReportExecute(assigneesReport).subscribe((report) => {
41
- this.allAvailableAssignees = report.MoDataList;
42
- this._changeDetect();
43
- });
44
- }
45
- this.viewSetting = {
46
- ...this.viewSetting,
47
- ...this._findColumn(this.allColumns, [
48
- this.viewSetting.Cover,
49
- this.viewSetting.State,
50
- this.viewSetting.Caption
51
- ])
52
- };
53
- this._prepareGroupMoList(this.moDataList);
54
- }
55
- ngOnChanges(changes) {
56
- super.ngOnChanges(changes);
57
- const { moDataList } = changes;
58
- if (moDataList && !moDataList.firstChange) {
59
- this._prepareGroupMoList(moDataList.currentValue);
60
- }
61
- }
62
- _prepareGroupMoList(molist) {
63
- const column = this._findColumnByDbName.transform(this.allColumns, this.viewSetting.State);
64
- const name = column?.Name || this.viewSetting.State;
65
- const dict = {};
66
- const s = this._multipleGroup.transform(molist, [
67
- {
68
- IsGrouped: true,
69
- Name: name,
70
- SortDirection: SortDirection.ASC
71
- }
72
- ]);
73
- s.forEach((c) => {
74
- if (c.$Group) {
75
- dict[c.$Group] = c.$Children;
76
- }
77
- });
78
- this.groupedMoList.set(dict);
79
- }
80
- onAddNewColumn() {
81
- this.kanbanColumns.push(this.newColumn);
82
- this._cdr.detectChanges();
83
- this._resetNewColumn();
84
- this._scrollInputIntoView();
85
- }
86
- onActiveNewColumnMode() {
87
- this._changeNewColumnMode(true);
88
- }
89
- onCancelNewColumn() {
90
- this._changeNewColumnMode(false);
91
- this._resetNewColumn();
92
- }
93
- onInitNewCard(groupby) {
94
- this._resetNewCard();
95
- this.newCard[this.groupbyProperty] = groupby;
96
- }
97
- onAddNewCard(e) {
98
- e.stopPropagation();
99
- e.preventDefault();
100
- this._addNewCard();
101
- }
102
- onNewCardInputFocusout() {
103
- if (this.newCard.$Caption) {
104
- this._addNewCard();
105
- }
106
- else {
107
- this._cancelNewCard();
108
- }
109
- }
110
- onCancelNewCard(e) {
111
- e.stopPropagation();
112
- e.preventDefault();
113
- this._cancelNewCard();
114
- }
115
- onDrop(event, isColumn) {
116
- let previousIndex;
117
- let currentIndex;
118
- const array = event.container.data;
119
- if (isColumn) {
120
- previousIndex = event.previousIndex;
121
- currentIndex = event.currentIndex;
122
- }
123
- else {
124
- const draggedItemId = this.dropActionTodo.draggedId;
125
- if (!draggedItemId) {
126
- return;
127
- }
128
- const draggedItem = this._getMoById(draggedItemId);
129
- const targetState = this.dropActionTodo.targetState;
130
- previousIndex = array.indexOf(draggedItem);
131
- currentIndex = this.dropActionTodo.targetIndex;
132
- draggedItem.State = targetState;
133
- this._stopDragging();
134
- }
135
- moveItemInArray(array, previousIndex, currentIndex);
136
- }
137
- onDragMove(event, draggedMo, draggedIndex, targetState) {
138
- const elementFromPoint = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);
139
- if (targetState) {
140
- }
141
- if (!elementFromPoint) {
142
- this._stopDragging();
143
- return;
144
- }
145
- const targetNodeElement = elementFromPoint.closest('[state]');
146
- if (!targetNodeElement) {
147
- this._stopDragging();
148
- return;
149
- }
150
- this.dropActionTodo = {
151
- draggedId: draggedMo.Id,
152
- targetId: targetNodeElement.getAttribute('id'),
153
- targetState: null,
154
- targetIndex: Number(targetNodeElement.getAttribute('index'))
155
- };
156
- const targetRect = targetNodeElement.getBoundingClientRect();
157
- const oneThird = targetRect.height / 3;
158
- const isCardTarget = !targetNodeElement.classList.contains('column');
159
- const isBefore = event.pointerPosition.y - targetRect.top < oneThird && isCardTarget;
160
- const isAfter = event.pointerPosition.y - targetRect.top > 2 * oneThird && isCardTarget;
161
- const isInside = !isCardTarget;
162
- const targetIndex = this.dropActionTodo.targetIndex ?? -1;
163
- const targetMo = this.moDataList[targetIndex];
164
- if (isCardTarget) {
165
- this.dropActionTodo.targetState = targetMo[this.viewSetting.State];
166
- }
167
- else {
168
- this.dropActionTodo.targetState = {
169
- $Caption: targetNodeElement.getAttribute('state'),
170
- Id: targetNodeElement.getAttribute('id'),
171
- $TypeDefId: draggedMo[this.viewSetting.State]?.$TypeDefId
172
- };
173
- }
174
- if (isBefore) {
175
- this.dropActionTodo.action = 'before';
176
- this.dropActionTodo.targetIndex = draggedIndex > targetIndex ? targetIndex : targetIndex - 1;
177
- }
178
- else if (isAfter) {
179
- this.dropActionTodo.action = 'after';
180
- this.dropActionTodo.targetIndex = draggedIndex < targetIndex ? targetIndex : targetIndex + 1;
181
- }
182
- else if (isInside) {
183
- this.dropActionTodo.action = 'inside';
184
- this.dropActionTodo.targetIndex = 0;
185
- }
186
- // console.log(this.dropActionTodo.targetState);
187
- this._showDragInfo();
188
- }
189
- _changeDetect() {
190
- this._cdr.detectChanges();
191
- }
192
- _stopDragging() {
193
- this._clearDragInfo();
194
- this._resetDropActionTodo();
195
- }
196
- _changeNewColumnMode(mode) {
197
- this.isNewColumnMode = mode;
198
- }
199
- _resetDropActionTodo() {
200
- this.dropActionTodo = {
201
- targetId: null,
202
- draggedId: null,
203
- targetState: null,
204
- targetIndex: null,
205
- action: null
206
- };
207
- }
208
- _scrollInputIntoView() {
209
- const inputEl = this.inputEl.nativeElement;
210
- inputEl.focus();
211
- inputEl.scrollIntoView({ inline: 'end' });
212
- }
213
- _resetNewColumn() {
214
- this.newColumn = { Id: '', $Caption: '' };
215
- }
216
- _clearDragInfo(dropped = false) {
217
- if (dropped) {
218
- this._resetDropActionTodo();
219
- }
220
- const elDom = this._el.nativeElement;
221
- elDom
222
- .querySelectorAll('.drop-before')
223
- .forEach((element) => this._renderer2.removeClass(element, 'drop-before'));
224
- elDom.querySelectorAll('.drop-after').forEach((element) => this._renderer2.removeClass(element, 'drop-after'));
225
- elDom
226
- .querySelectorAll('.drop-inside')
227
- .forEach((element) => this._renderer2.removeClass(element, 'drop-inside'));
228
- }
229
- _showDragInfo() {
230
- this._clearDragInfo();
231
- if (this.dropActionTodo.targetId) {
232
- const targetNodeElement = this._el.nativeElement.querySelector('#' + this.dropActionTodo.targetId);
233
- if (!targetNodeElement) {
234
- this._resetDropActionTodo();
235
- return;
236
- }
237
- this._renderer2.addClass(targetNodeElement, 'drop-' + this.dropActionTodo?.action);
238
- }
239
- }
240
- _addNewCard() {
241
- this.moDataList.push(this.newCard);
242
- const currentGroupby = this.newCard[this.groupbyProperty];
243
- this.onInitNewCard(currentGroupby);
244
- }
245
- _resetNewCard() {
246
- this.newCard = { Id: null, $Caption: null };
247
- }
248
- _cancelNewCard() {
249
- this._resetNewCard();
250
- }
251
- _getMoById(id) {
252
- return this.moDataList.find((c) => c.Id === id);
253
- }
254
- _findColumn(allColumns, columnsName) {
255
- const columns = {};
256
- columnsName.forEach((name) => {
257
- columns[name + 'Column'] = this._findColumnByDbName.transform(this.allColumns, name);
258
- });
259
- return columns;
260
- }
261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KanbanViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", 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>\r\n <fd-layout-panel-body [bleed]=\"true\">\r\n @if (isCheckList) {\r\n <table fd-table>\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th fd-table-cell>\r\n <fd-checkbox\r\n name=\"allCheckbox\"\r\n [ngModel]=\"allChecked\"\r\n (ngModelChange)=\"onAllCheckbox($event)\"\r\n >{{ 'All' | bbbTranslate }}</fd-checkbox\r\n >\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n }\r\n </fd-layout-panel-body>\r\n</fd-layout-panel>\r\n\r\n<fd-layout-grid\r\n class=\"columns\"\r\n fillEmptySpace\r\n [setMinHeight]=\"true\"\r\n [disable]=\"true\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"kanbanColumns\"\r\n [id]=\"'$Root'\"\r\n (cdkDropListDropped)=\"onDrop($event, true)\"\r\n>\r\n @for (column of kanbanColumns; track column; let columnIndex = $index) {\r\n <div\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"4\"\r\n [colLg]=\"3\"\r\n [colXl]=\"2\"\r\n class=\"column\"\r\n [id]=\"column.Id\"\r\n [attr.state]=\"column.$Caption\"\r\n cdkDrag\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnCard;\r\n context: {\r\n column: column,\r\n columnIndex: columnIndex\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n</fd-layout-grid>\r\n\r\n<!--noData-->\r\n\r\n<!--column card-->\r\n<ng-template #columnCard let-column=\"column\" let-columnIndex=\"columnIndex\">\r\n <fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" ellipsify>\r\n <fd-card-header>\r\n <fd-card-main-header [style.background]=\"column.Color\" [class.hasColumnColor]=\"column.Color\">\r\n <h2 fd-card-title>{{ column.$Caption }}</h2>\r\n </fd-card-main-header>\r\n </fd-card-header>\r\n <fd-card-content\r\n cdkDropList\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortingDisabled]=\"true\"\r\n [cdkDropListData]=\"moDataList\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnMoList;\r\n context: { $implicit: groupedMoList()[column.$Caption], column: column }\r\n \"\r\n >\r\n </ng-container>\r\n </fd-card-content>\r\n <!-- <fd-card-footer class=\"column-footer\">\r\n @if (newCard[groupbyProperty] === column.$Caption) {\r\n <div class=\"new-card\">\r\n <fd-card>\r\n <div fd-form-item>\r\n <textarea\r\n fd-form-control\r\n [autofocus]=\"true\"\r\n [(ngModel)]=\"newCard.$Caption\"\r\n (keydown.enter)=\"onAddNewCard($event)\"\r\n (focusout)=\"onNewCardInputFocusout()\"\r\n [placeholder]=\"'Title' | bbbTranslate\"\r\n ></textarea>\r\n </div>\r\n </fd-card>\r\n <div class=\"new-card-actions\">\r\n <button\r\n fd-button\r\n (click)=\"onAddNewCard($event)\"\r\n fdType=\"emphasized\"\r\n class=\"add-card-btn\"\r\n [label]=\"'\u0627\u0641\u0632\u0648\u062F\u0646'\"\r\n ></button>\r\n <fd-icon (mousedown)=\"onCancelNewCard($event)\" glyph=\"decline\"></fd-icon>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"add-new-card\" (click)=\"onInitNewCard(column.$Caption)\">\r\n <span>\r\n <fd-icon glyph=\"add\"></fd-icon>\r\n \u06A9\u0627\u0631\u062A \u062C\u062F\u06CC\u062F\r\n </span>\r\n </div>\r\n }\r\n </fd-card-footer> -->\r\n </fd-card>\r\n</ng-template>\r\n\r\n<ng-template #columnMoList let-moList let-column=\"column\">\r\n @if(moList && moList.length>0){ @for (mo of moList; track mo; let index = $index) {\r\n <bk-kanban-card\r\n [mo]=\"mo\"\r\n [allColumns]=\"columns\"\r\n [viewSetting]=\"viewSetting\"\r\n [formSetting]=\"formSetting\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [allAvailableAssignees]=\"allAvailableAssignees\"\r\n [index]=\"index\"\r\n [attr.id]=\"mo.Id\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [attr.state]=\"column.$Caption\"\r\n [attr.index]=\"index\"\r\n [class.selected]=\"mo.$IsChecked\"\r\n (cdkDragMoved)=\"onDragMove($event, mo, index, column)\"\r\n (click)=\"onRowCheck({mo, index})\"\r\n (dblclick)=\"onRowClick({mo, index})\"\r\n cdkDrag\r\n >\r\n </bk-kanban-card>\r\n } }@else{\r\n\r\n <h3 fd-title>{{ 'NoData' | bbbTranslate }}</h3>\r\n }\r\n</ng-template>\r\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"], outputs: ["heightChanged"], 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", "readonly", "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", "nonInteractive", "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", "cdkDropListElementContainer"], 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", "cdkDragScale"], 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 }); }
263
- }
264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KanbanViewComponent, decorators: [{
265
- type: Component,
266
- args: [{ selector: 'bk-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-layout-panel>\r\n <fd-layout-panel-body [bleed]=\"true\">\r\n @if (isCheckList) {\r\n <table fd-table>\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th fd-table-cell>\r\n <fd-checkbox\r\n name=\"allCheckbox\"\r\n [ngModel]=\"allChecked\"\r\n (ngModelChange)=\"onAllCheckbox($event)\"\r\n >{{ 'All' | bbbTranslate }}</fd-checkbox\r\n >\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n }\r\n </fd-layout-panel-body>\r\n</fd-layout-panel>\r\n\r\n<fd-layout-grid\r\n class=\"columns\"\r\n fillEmptySpace\r\n [setMinHeight]=\"true\"\r\n [disable]=\"true\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"kanbanColumns\"\r\n [id]=\"'$Root'\"\r\n (cdkDropListDropped)=\"onDrop($event, true)\"\r\n>\r\n @for (column of kanbanColumns; track column; let columnIndex = $index) {\r\n <div\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"4\"\r\n [colLg]=\"3\"\r\n [colXl]=\"2\"\r\n class=\"column\"\r\n [id]=\"column.Id\"\r\n [attr.state]=\"column.$Caption\"\r\n cdkDrag\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnCard;\r\n context: {\r\n column: column,\r\n columnIndex: columnIndex\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n }\r\n</fd-layout-grid>\r\n\r\n<!--noData-->\r\n\r\n<!--column card-->\r\n<ng-template #columnCard let-column=\"column\" let-columnIndex=\"columnIndex\">\r\n <fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" ellipsify>\r\n <fd-card-header>\r\n <fd-card-main-header [style.background]=\"column.Color\" [class.hasColumnColor]=\"column.Color\">\r\n <h2 fd-card-title>{{ column.$Caption }}</h2>\r\n </fd-card-main-header>\r\n </fd-card-header>\r\n <fd-card-content\r\n cdkDropList\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n [cdkDropListSortingDisabled]=\"true\"\r\n [cdkDropListData]=\"moDataList\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n columnMoList;\r\n context: { $implicit: groupedMoList()[column.$Caption], column: column }\r\n \"\r\n >\r\n </ng-container>\r\n </fd-card-content>\r\n <!-- <fd-card-footer class=\"column-footer\">\r\n @if (newCard[groupbyProperty] === column.$Caption) {\r\n <div class=\"new-card\">\r\n <fd-card>\r\n <div fd-form-item>\r\n <textarea\r\n fd-form-control\r\n [autofocus]=\"true\"\r\n [(ngModel)]=\"newCard.$Caption\"\r\n (keydown.enter)=\"onAddNewCard($event)\"\r\n (focusout)=\"onNewCardInputFocusout()\"\r\n [placeholder]=\"'Title' | bbbTranslate\"\r\n ></textarea>\r\n </div>\r\n </fd-card>\r\n <div class=\"new-card-actions\">\r\n <button\r\n fd-button\r\n (click)=\"onAddNewCard($event)\"\r\n fdType=\"emphasized\"\r\n class=\"add-card-btn\"\r\n [label]=\"'\u0627\u0641\u0632\u0648\u062F\u0646'\"\r\n ></button>\r\n <fd-icon (mousedown)=\"onCancelNewCard($event)\" glyph=\"decline\"></fd-icon>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"add-new-card\" (click)=\"onInitNewCard(column.$Caption)\">\r\n <span>\r\n <fd-icon glyph=\"add\"></fd-icon>\r\n \u06A9\u0627\u0631\u062A \u062C\u062F\u06CC\u062F\r\n </span>\r\n </div>\r\n }\r\n </fd-card-footer> -->\r\n </fd-card>\r\n</ng-template>\r\n\r\n<ng-template #columnMoList let-moList let-column=\"column\">\r\n @if(moList && moList.length>0){ @for (mo of moList; track mo; let index = $index) {\r\n <bk-kanban-card\r\n [mo]=\"mo\"\r\n [allColumns]=\"columns\"\r\n [viewSetting]=\"viewSetting\"\r\n [formSetting]=\"formSetting\"\r\n [styleIndex]=\"mo.$StyleIndex\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [allAvailableAssignees]=\"allAvailableAssignees\"\r\n [index]=\"index\"\r\n [attr.id]=\"mo.Id\"\r\n [inlineEditMode]=\"inlineEditMode\"\r\n [isChecked]=\"mo.$IsChecked\"\r\n [attr.state]=\"column.$Caption\"\r\n [attr.index]=\"index\"\r\n [class.selected]=\"mo.$IsChecked\"\r\n (cdkDragMoved)=\"onDragMove($event, mo, index, column)\"\r\n (click)=\"onRowCheck({mo, index})\"\r\n (dblclick)=\"onRowClick({mo, index})\"\r\n cdkDrag\r\n >\r\n </bk-kanban-card>\r\n } }@else{\r\n\r\n <h3 fd-title>{{ 'NoData' | bbbTranslate }}</h3>\r\n }\r\n</ng-template>\r\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"] }]
267
- }], propDecorators: { inputEl: [{
268
- type: ViewChild,
269
- args: ['inputEl', { read: ElementRef }]
270
- }], kanbanColumns: [{
271
- type: Input
272
- }], groupbyProperty: [{
273
- type: Input
274
- }] } });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Eta2FuYmFuL3NyYy9saWIva2FuYmFuLXZpZXcva2FuYmFuLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQsT0FBTyxFQUF1QixtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVd4SCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQTBDO0lBUG5GOztRQVVhLG9CQUFlLEdBQUcsT0FBTyxDQUFDO1FBR25DLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLFlBQU8sR0FBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzVDLGNBQVMsR0FBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBRztZQUNWLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSx5Q0FBeUMsRUFBRSxFQUFFLEVBQUUseUJBQXlCLEVBQUU7WUFDeEYsTUFBTSxF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O0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxVQUFVLENBQUMsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQXFCO1FBQ2pELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOytHQWhSUSxtQkFBbUI7bUdBQW5CLG1CQUFtQixxTkFDRSxVQUFVLHlFQ3pCNUMseTJLQWtKQTs7NEZEMUhhLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDSSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLOzhCQUcyQixPQUFPO3NCQUFsRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2pDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBpbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBzaWduYWxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5pbXBvcnQgeyBNZXRhb2JqZWN0RGF0YU1vZGVsLCBNdWx0aXBsZUdyb3VwQnlQaXBlLCBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgS2FuYmFuVmlld1NldHRpbmcgfSBmcm9tICcuLi9Nb2RlbHMva2FuYmFuLXZpZXctc2V0dGluZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBEcm9wSW5mbyB9IGZyb20gJy4uL01vZGVscy9kcm9wLWluZm8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JrLWthbmJhbi12aWV3JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9rYW5iYW4tdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9rYW5iYW4tdmlldy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS2FuYmFuVmlld0NvbXBvbmVudCBleHRlbmRzIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PEthbmJhblZpZXdTZXR0aW5nPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dEVsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIGthbmJhbkNvbHVtbnM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIEBJbnB1dCgpIGdyb3VwYnlQcm9wZXJ0eSA9ICdTdGF0ZSc7XHJcbiAgICBkcm9wQWN0aW9uVG9kbzogRHJvcEluZm87XHJcbiAgICBhbGxBdmFpbGFibGVBc3NpZ25lZXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIGlzTmV3Q29sdW1uTW9kZSA9IGZhbHNlO1xyXG4gICAgbmV3Q2FyZDogYW55ID0geyBJZDogbnVsbCwgJENhcHRpb246IG51bGwgfTtcclxuICAgIG5ld0NvbHVtbjogYW55ID0geyBJZDogbnVsbCwgJENhcHRpb246IG51bGwgfTtcclxuICAgIF9tdWx0aXBsZUdyb3VwID0gaW5qZWN0KE11bHRpcGxlR3JvdXBCeVBpcGUpO1xyXG4gICAgZ3JvdXBlZE1vTGlzdCA9IHNpZ25hbCh7fSk7XHJcbiAgICBzY2VuZUNvbmZpZyA9IHtcclxuICAgICAgICBzY2VuZTogeyB1cmw6ICdhc3NldHMvaW1hZ2VzL3NhcElsbHVzLVNjZW5lLU5vTWFpbC5zdmcnLCBpZDogJ3NhcElsbHVzLVNjZW5lLU5vTWFpbC0xJyB9LFxyXG4gICAgICAgIGRpYWxvZzogeyB1cmw6ICdhc3NldHMvaW1hZ2VzL3NhcElsbHVzLURpYWxvZy1Ob01haWwuc3ZnJywgaWQ6ICdzYXBJbGx1cy1EaWFsb2ctTm9NYWlsJyB9XHJcbiAgICB9O1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29sdW1uc1JlcG9ydCA9IHRoaXMudmlld1NldHRpbmcuQ29sdW1uc1JlcG9ydC4kQ2FwdGlvbjtcclxuICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLlJlcG9ydEV4ZWN1dGUoY29sdW1uc1JlcG9ydCkuc3Vic2NyaWJlKChyZXBvcnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5rYW5iYW5Db2x1bW5zID0gcmVwb3J0Lk1vRGF0YUxpc3Q7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuZm9ybVNldHRpbmcuVmlldy5Db250cm9sSW5mby5mb3JFYWNoKChjKSA9PiAoYy5JbmxpbmVFZGl0TW9kZSA9IHRydWUpKTtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZXNSZXBvcnQgPSB0aGlzLnZpZXdTZXR0aW5nLkFzc2lnbmVlc1JlcG9ydD8uJENhcHRpb247XHJcbiAgICAgICAgaWYgKGFzc2lnbmVlc1JlcG9ydCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3J0YWxTZXJ2aWNlLlJlcG9ydEV4ZWN1dGUoYXNzaWduZWVzUmVwb3J0KS5zdWJzY3JpYmUoKHJlcG9ydCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxBdmFpbGFibGVBc3NpZ25lZXMgPSByZXBvcnQuTW9EYXRhTGlzdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy52aWV3U2V0dGluZyxcclxuICAgICAgICAgICAgLi4udGhpcy5fZmluZENvbHVtbih0aGlzLmFsbENvbHVtbnMsIFtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld1NldHRpbmcuQ292ZXIsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdTZXR0aW5nLlN0YXRlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3U2V0dGluZy5DYXB0aW9uXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlR3JvdXBNb0xpc3QodGhpcy5tb0RhdGFMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgY29uc3QgeyBtb0RhdGFMaXN0IH0gPSBjaGFuZ2VzO1xyXG4gICAgICAgIGlmIChtb0RhdGFMaXN0ICYmICFtb0RhdGFMaXN0LmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVHcm91cE1vTGlzdChtb0RhdGFMaXN0LmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX3ByZXBhcmVHcm91cE1vTGlzdChtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2ZpbmRDb2x1bW5CeURiTmFtZS50cmFuc2Zvcm0odGhpcy5hbGxDb2x1bW5zLCB0aGlzLnZpZXdTZXR0aW5nLlN0YXRlKTtcclxuICAgICAgICBjb25zdCBuYW1lID0gY29sdW1uPy5OYW1lIHx8IHRoaXMudmlld1NldHRpbmcuU3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGljdCA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHM6IGFueVtdID0gdGhpcy5fbXVsdGlwbGVHcm91cC50cmFuc2Zvcm0obW9saXN0LCBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIElzR3JvdXBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIE5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICBTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uLkFTQ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjLiRHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgZGljdFtjLiRHcm91cF0gPSBjLiRDaGlsZHJlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBlZE1vTGlzdC5zZXQoZGljdCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGROZXdDb2x1bW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5rYW5iYW5Db2x1bW5zLnB1c2godGhpcy5uZXdDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDb2x1bW4oKTtcclxuICAgICAgICB0aGlzLl9zY3JvbGxJbnB1dEludG9WaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3RpdmVOZXdDb2x1bW5Nb2RlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZU5ld0NvbHVtbk1vZGUodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWxOZXdDb2x1bW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlTmV3Q29sdW1uTW9kZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXROZXdDb2x1bW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkluaXROZXdDYXJkKGdyb3VwYnk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0TmV3Q2FyZCgpO1xyXG4gICAgICAgIHRoaXMubmV3Q2FyZFt0aGlzLmdyb3VwYnlQcm9wZXJ0eV0gPSBncm91cGJ5O1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkTmV3Q2FyZChlKTogdm9pZCB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5fYWRkTmV3Q2FyZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTmV3Q2FyZElucHV0Rm9jdXNvdXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3Q2FyZC4kQ2FwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9hZGROZXdDYXJkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FuY2VsTmV3Q2FyZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbE5ld0NhcmQoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuX2NhbmNlbE5ld0NhcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRyb3AoZXZlbnQsIGlzQ29sdW1uPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGxldCBwcmV2aW91c0luZGV4O1xyXG4gICAgICAgIGxldCBjdXJyZW50SW5kZXg7XHJcbiAgICAgICAgY29uc3QgYXJyYXkgPSBldmVudC5jb250YWluZXIuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKGlzQ29sdW1uKSB7XHJcbiAgICAgICAgICAgIHByZXZpb3VzSW5kZXggPSBldmVudC5wcmV2aW91c0luZGV4O1xyXG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSBldmVudC5jdXJyZW50SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW1JZCA9IHRoaXMuZHJvcEFjdGlvblRvZG8uZHJhZ2dlZElkO1xyXG4gICAgICAgICAgICBpZiAoIWRyYWdnZWRJdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbSA9IHRoaXMuX2dldE1vQnlJZChkcmFnZ2VkSXRlbUlkKTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldFN0YXRlO1xyXG4gICAgICAgICAgICBwcmV2aW91c0luZGV4ID0gYXJyYXkuaW5kZXhPZihkcmFnZ2VkSXRlbSk7XHJcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SW5kZXg7XHJcbiAgICAgICAgICAgIGRyYWdnZWRJdGVtLlN0YXRlID0gdGFyZ2V0U3RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3BEcmFnZ2luZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGFycmF5LCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJhZ01vdmUoZXZlbnQsIGRyYWdnZWRNbywgZHJhZ2dlZEluZGV4OiBudW1iZXIsIHRhcmdldFN0YXRlOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEZyb21Qb2ludCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldFN0YXRlKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxlbWVudEZyb21Qb2ludCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9wRHJhZ2dpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YXJnZXROb2RlRWxlbWVudCA9IGVsZW1lbnRGcm9tUG9pbnQuY2xvc2VzdCgnW3N0YXRlXScpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0Tm9kZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcERyYWdnaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kbyA9IHtcclxuICAgICAgICAgICAgZHJhZ2dlZElkOiBkcmFnZ2VkTW8uSWQsXHJcbiAgICAgICAgICAgIHRhcmdldElkOiB0YXJnZXROb2RlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyksXHJcbiAgICAgICAgICAgIHRhcmdldFN0YXRlOiBudWxsLFxyXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogTnVtYmVyKHRhcmdldE5vZGVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaW5kZXgnKSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXROb2RlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBvbmVUaGlyZCA9IHRhcmdldFJlY3QuaGVpZ2h0IC8gMztcclxuXHJcbiAgICAgICAgY29uc3QgaXNDYXJkVGFyZ2V0ID0gIXRhcmdldE5vZGVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnY29sdW1uJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzQmVmb3JlID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLnkgLSB0YXJnZXRSZWN0LnRvcCA8IG9uZVRoaXJkICYmIGlzQ2FyZFRhcmdldDtcclxuXHJcbiAgICAgICAgY29uc3QgaXNBZnRlciA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55IC0gdGFyZ2V0UmVjdC50b3AgPiAyICogb25lVGhpcmQgJiYgaXNDYXJkVGFyZ2V0O1xyXG5cclxuICAgICAgICBjb25zdCBpc0luc2lkZSA9ICFpc0NhcmRUYXJnZXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJbmRleCA/PyAtMTtcclxuICAgICAgICBjb25zdCB0YXJnZXRNbyA9IHRoaXMubW9EYXRhTGlzdFt0YXJnZXRJbmRleF07XHJcblxyXG4gICAgICAgIGlmIChpc0NhcmRUYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRTdGF0ZSA9IHRhcmdldE1vW3RoaXMudmlld1NldHRpbmcuU3RhdGVdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0U3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogdGFyZ2V0Tm9kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdGF0ZScpISxcclxuICAgICAgICAgICAgICAgIElkOiB0YXJnZXROb2RlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykhLFxyXG4gICAgICAgICAgICAgICAgJFR5cGVEZWZJZDogZHJhZ2dlZE1vW3RoaXMudmlld1NldHRpbmcuU3RhdGVdPy4kVHlwZURlZklkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0JlZm9yZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLmFjdGlvbiA9ICdiZWZvcmUnO1xyXG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldEluZGV4ID0gZHJhZ2dlZEluZGV4ID4gdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4IC0gMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzQWZ0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wQWN0aW9uVG9kby5hY3Rpb24gPSAnYWZ0ZXInO1xyXG4gICAgICAgICAgICB0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldEluZGV4ID0gZHJhZ2dlZEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4ICsgMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzSW5zaWRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8uYWN0aW9uID0gJ2luc2lkZSc7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRyb3BBY3Rpb25Ub2RvLnRhcmdldFN0YXRlKTtcclxuICAgICAgICB0aGlzLl9zaG93RHJhZ0luZm8oKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N0b3BEcmFnZ2luZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jbGVhckRyYWdJbmZvKCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXREcm9wQWN0aW9uVG9kbygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NoYW5nZU5ld0NvbHVtbk1vZGUobW9kZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNOZXdDb2x1bW5Nb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9yZXNldERyb3BBY3Rpb25Ub2RvKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZHJvcEFjdGlvblRvZG8gPSB7XHJcbiAgICAgICAgICAgIHRhcmdldElkOiBudWxsLFxyXG4gICAgICAgICAgICBkcmFnZ2VkSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHRhcmdldFN0YXRlOiBudWxsLFxyXG4gICAgICAgICAgICB0YXJnZXRJbmRleDogbnVsbCxcclxuICAgICAgICAgICAgYWN0aW9uOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zY3JvbGxJbnB1dEludG9WaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBpbnB1dEVsLmZvY3VzKCk7XHJcbiAgICAgICAgaW5wdXRFbC5zY3JvbGxJbnRvVmlldyh7IGlubGluZTogJ2VuZCcgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVzZXROZXdDb2x1bW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uZXdDb2x1bW4gPSB7IElkOiAnJywgJENhcHRpb246ICcnIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2xlYXJEcmFnSW5mbyhkcm9wcGVkID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZHJvcHBlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldERyb3BBY3Rpb25Ub2RvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVsRG9tID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBlbERvbVxyXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtYmVmb3JlJylcclxuICAgICAgICAgICAgLmZvckVhY2goKGVsZW1lbnQpID0+IHRoaXMuX3JlbmRlcmVyMi5yZW1vdmVDbGFzcyhlbGVtZW50LCAnZHJvcC1iZWZvcmUnKSk7XHJcbiAgICAgICAgZWxEb20ucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtYWZ0ZXInKS5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLl9yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2Ryb3AtYWZ0ZXInKSk7XHJcbiAgICAgICAgZWxEb21cclxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kcm9wLWluc2lkZScpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLl9yZW5kZXJlcjIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2Ryb3AtaW5zaWRlJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Nob3dEcmFnSW5mbygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jbGVhckRyYWdJbmZvKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcEFjdGlvblRvZG8udGFyZ2V0SWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUVsZW1lbnQgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgdGhpcy5kcm9wQWN0aW9uVG9kby50YXJnZXRJZCk7XHJcbiAgICAgICAgICAgIGlmICghdGFyZ2V0Tm9kZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0RHJvcEFjdGlvblRvZG8oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYWRkQ2xhc3ModGFyZ2V0Tm9kZUVsZW1lbnQsICdkcm9wLScgKyB0aGlzLmRyb3BBY3Rpb25Ub2RvPy5hY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9hZGROZXdDYXJkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5wdXNoKHRoaXMubmV3Q2FyZCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEdyb3VwYnkgPSB0aGlzLm5ld0NhcmRbdGhpcy5ncm91cGJ5UHJvcGVydHldO1xyXG4gICAgICAgIHRoaXMub25Jbml0TmV3Q2FyZChjdXJyZW50R3JvdXBieSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVzZXROZXdDYXJkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmV3Q2FyZCA9IHsgSWQ6IG51bGwsICRDYXB0aW9uOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2FuY2VsTmV3Q2FyZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZXNldE5ld0NhcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRNb0J5SWQoaWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2ZpbmRDb2x1bW4oYWxsQ29sdW1ucywgY29sdW1uc05hbWU6IHN0cmluZ1tdKTogb2JqZWN0IHtcclxuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XHJcbiAgICAgICAgY29sdW1uc05hbWUuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW5zW25hbWUgKyAnQ29sdW1uJ10gPSB0aGlzLl9maW5kQ29sdW1uQnlEYk5hbWUudHJhbnNmb3JtKHRoaXMuYWxsQ29sdW1ucywgbmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWxheW91dC1wYW5lbD5cclxuICAgIDxmZC1sYXlvdXQtcGFuZWwtYm9keSBbYmxlZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcclxuICAgICAgICA8dGFibGUgZmQtdGFibGU+XHJcbiAgICAgICAgICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBmZC10YWJsZS1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbGxDaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbGxDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQWxsQ2hlY2tib3goJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ0FsbCcgfCBiYmJUcmFuc2xhdGUgfX08L2ZkLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIH1cclxuICAgIDwvZmQtbGF5b3V0LXBhbmVsLWJvZHk+XHJcbjwvZmQtbGF5b3V0LXBhbmVsPlxyXG5cclxuPGZkLWxheW91dC1ncmlkXHJcbiAgICBjbGFzcz1cImNvbHVtbnNcIlxyXG4gICAgZmlsbEVtcHR5U3BhY2VcclxuICAgIFtzZXRNaW5IZWlnaHRdPVwidHJ1ZVwiXHJcbiAgICBbZGlzYWJsZV09XCJ0cnVlXCJcclxuICAgIGNka0Ryb3BMaXN0XHJcbiAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXHJcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImthbmJhbkNvbHVtbnNcIlxyXG4gICAgW2lkXT1cIickUm9vdCdcIlxyXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50LCB0cnVlKVwiXHJcbj5cclxuICAgIEBmb3IgKGNvbHVtbiBvZiBrYW5iYW5Db2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xyXG4gICAgPGRpdlxyXG4gICAgICAgIFtmZExheW91dEdyaWRDb2xdPVwiMTJcIlxyXG4gICAgICAgIFtjb2xNZF09XCI0XCJcclxuICAgICAgICBbY29sTGddPVwiM1wiXHJcbiAgICAgICAgW2NvbFhsXT1cIjJcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcclxuICAgICAgICBbaWRdPVwiY29sdW1uLklkXCJcclxuICAgICAgICBbYXR0ci5zdGF0ZV09XCJjb2x1bW4uJENhcHRpb25cIlxyXG4gICAgICAgIGNka0RyYWdcclxuICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5DYXJkO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L2ZkLWxheW91dC1ncmlkPlxyXG5cclxuPCEtLW5vRGF0YS0tPlxyXG5cclxuPCEtLWNvbHVtbiBjYXJkLS0+XHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uQ2FyZCBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cclxuICAgIDxmZC1jYXJkIGNhcmRUeXBlPVwicXVpY2tWaWV3XCIgY2xhc3M9XCJkb2NzLWZsZXgtaXRlbS1tYXJnaW5cIiBlbGxpcHNpZnk+XHJcbiAgICAgICAgPGZkLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8ZmQtY2FyZC1tYWluLWhlYWRlciBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2x1bW4uQ29sb3JcIiBbY2xhc3MuaGFzQ29sdW1uQ29sb3JdPVwiY29sdW1uLkNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgZmQtY2FyZC10aXRsZT57eyBjb2x1bW4uJENhcHRpb24gfX08L2gyPlxyXG4gICAgICAgICAgICA8L2ZkLWNhcmQtbWFpbi1oZWFkZXI+XHJcbiAgICAgICAgPC9mZC1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8ZmQtY2FyZC1jb250ZW50XHJcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibW9EYXRhTGlzdFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk1vTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogZ3JvdXBlZE1vTGlzdCgpW2NvbHVtbi4kQ2FwdGlvbl0sIGNvbHVtbjogY29sdW1uIH1cclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPCEtLSA8ZmQtY2FyZC1mb290ZXIgY2xhc3M9XCJjb2x1bW4tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAobmV3Q2FyZFtncm91cGJ5UHJvcGVydHldID09PSBjb2x1bW4uJENhcHRpb24pIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZmQtY2FyZD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWZvcm0taXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld0NhcmQuJENhcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BZGROZXdDYXJkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uTmV3Q2FyZElucHV0Rm9jdXNvdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RpdGxlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mZC1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1jYXJkLWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROZXdDYXJkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGQtY2FyZC1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ9in2YHYstmI2K/ZhidcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiAobW91c2Vkb3duKT1cIm9uQ2FuY2VsTmV3Q2FyZCgkZXZlbnQpXCIgZ2x5cGg9XCJkZWNsaW5lXCI+PC9mZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1uZXctY2FyZFwiIChjbGljayk9XCJvbkluaXROZXdDYXJkKGNvbHVtbi4kQ2FwdGlvbilcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiYWRkXCI+PC9mZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgINqp2KfYsdiqINis2K/bjNivXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9mZC1jYXJkLWZvb3Rlcj4gLS0+XHJcbiAgICA8L2ZkLWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbk1vTGlzdCBsZXQtbW9MaXN0IGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgIEBpZihtb0xpc3QgJiYgbW9MaXN0Lmxlbmd0aD4wKXsgQGZvciAobW8gb2YgbW9MaXN0OyB0cmFjayBtbzsgbGV0IGluZGV4ID0gJGluZGV4KSB7XHJcbiAgICA8Ymsta2FuYmFuLWNhcmRcclxuICAgICAgICBbbW9dPVwibW9cIlxyXG4gICAgICAgIFthbGxDb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgIFt2aWV3U2V0dGluZ109XCJ2aWV3U2V0dGluZ1wiXHJcbiAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcclxuICAgICAgICBbc3R5bGVJbmRleF09XCJtby4kU3R5bGVJbmRleFwiXHJcbiAgICAgICAgW2NvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxyXG4gICAgICAgIFthbGxBdmFpbGFibGVBc3NpZ25lZXNdPVwiYWxsQXZhaWxhYmxlQXNzaWduZWVzXCJcclxuICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxyXG4gICAgICAgIFthdHRyLmlkXT1cIm1vLklkXCJcclxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxyXG4gICAgICAgIFtpc0NoZWNrZWRdPVwibW8uJElzQ2hlY2tlZFwiXHJcbiAgICAgICAgW2F0dHIuc3RhdGVdPVwiY29sdW1uLiRDYXB0aW9uXCJcclxuICAgICAgICBbYXR0ci5pbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIm1vLiRJc0NoZWNrZWRcIlxyXG4gICAgICAgIChjZGtEcmFnTW92ZWQpPVwib25EcmFnTW92ZSgkZXZlbnQsIG1vLCBpbmRleCwgY29sdW1uKVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2hlY2soe21vLCBpbmRleH0pXCJcclxuICAgICAgICAoZGJsY2xpY2spPVwib25Sb3dDbGljayh7bW8sIGluZGV4fSlcIlxyXG4gICAgICAgIGNka0RyYWdcclxuICAgID5cclxuICAgIDwvYmsta2FuYmFuLWNhcmQ+XHJcbiAgICB9IH1AZWxzZXtcclxuXHJcbiAgICA8aDMgZmQtdGl0bGU+e3sgJ05vRGF0YScgfCBiYmJUcmFuc2xhdGUgfX08L2gzPlxyXG4gICAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -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==