barsa-kanban 2.1.1 → 2.1.3

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,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: "18.2.13", ngImport: i0, type: KanbanViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
260
- 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>\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", "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 }); }
261
- }
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", 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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QUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sVUFBVSxDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFxQjtRQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzsrR0EvUVEsbUJBQW1CO21HQUFuQixtQkFBbUIscU5BQ0UsVUFBVSx5RUN4QjVDLHFrS0FrSkE7OzRGRDNIYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU07OEJBR0gsT0FBTztzQkFBbEQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNqQyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbmltcG9ydCB7IE1ldGFvYmplY3REYXRhTW9kZWwsIE11bHRpcGxlR3JvdXBCeVBpcGUsIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgS2FuYmFuVmlld1NldHRpbmcgfSBmcm9tICcuLi9Nb2RlbHMva2FuYmFuLXZpZXctc2V0dGluZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJvcEluZm8gfSBmcm9tICcuLi9Nb2RlbHMvZHJvcC1pbmZvJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiay1rYW5iYW4tdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2thbmJhbi12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9rYW5iYW4tdmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEthbmJhblZpZXdDb21wb25lbnQgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxLYW5iYW5WaWV3U2V0dGluZz4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0RWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXRFbDogRWxlbWVudFJlZjxhbnk+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=
@@ -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==