barsa-kanban 1.0.455 → 2.0.1

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.
Files changed (32) hide show
  1. package/{esm2020 → esm2022}/barsa-kanban.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/Models/drop-info.mjs +1 -1
  3. package/{esm2020 → esm2022}/lib/Models/kanban-view-setting.interface.mjs +1 -1
  4. package/esm2022/lib/avatar-group/barsa-avatar-group.component.mjs +82 -0
  5. package/esm2022/lib/barsa-kanban.module.mjs +79 -0
  6. package/{esm2020 → esm2022}/lib/kanban-base/kanban-base.component.mjs +20 -20
  7. package/esm2022/lib/kanban-card/kanban-card.component.mjs +35 -0
  8. package/esm2022/lib/kanban-tags/kanban-tags.component.mjs +43 -0
  9. package/esm2022/lib/kanban-view/kanban-view.component.mjs +244 -0
  10. package/{esm2020 → esm2022}/public-api.mjs +6 -6
  11. package/fesm2022/barsa-kanban.mjs +473 -0
  12. package/fesm2022/barsa-kanban.mjs.map +1 -0
  13. package/index.d.ts +5 -5
  14. package/lib/Models/drop-info.d.ts +8 -8
  15. package/lib/Models/kanban-view-setting.interface.d.ts +17 -17
  16. package/lib/avatar-group/barsa-avatar-group.component.d.ts +28 -28
  17. package/lib/barsa-kanban.module.d.ts +29 -29
  18. package/lib/kanban-base/kanban-base.component.d.ts +9 -9
  19. package/lib/kanban-card/kanban-card.component.d.ts +16 -16
  20. package/lib/kanban-tags/kanban-tags.component.d.ts +16 -16
  21. package/lib/kanban-view/kanban-view.component.d.ts +40 -40
  22. package/package.json +7 -13
  23. package/public-api.d.ts +6 -6
  24. package/esm2020/lib/avatar-group/barsa-avatar-group.component.mjs +0 -84
  25. package/esm2020/lib/barsa-kanban.module.mjs +0 -82
  26. package/esm2020/lib/kanban-card/kanban-card.component.mjs +0 -36
  27. package/esm2020/lib/kanban-tags/kanban-tags.component.mjs +0 -43
  28. package/esm2020/lib/kanban-view/kanban-view.component.mjs +0 -244
  29. package/fesm2015/barsa-kanban.mjs +0 -477
  30. package/fesm2015/barsa-kanban.mjs.map +0 -1
  31. package/fesm2020/barsa-kanban.mjs +0 -478
  32. package/fesm2020/barsa-kanban.mjs.map +0 -1
@@ -1,478 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Component, ChangeDetectionStrategy, Input, ViewChild, ElementRef, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
- import * as i2 from 'barsa-novin-ray-core';
4
- import { BaseComponent, BaseViewItemPropsComponent, FormPanelService, ReportViewBaseComponent, BaseModule, BarsaNovinRayCoreModule } from 'barsa-novin-ray-core';
5
- import * as i1 from '@angular/common';
6
- import { CommonModule } from '@angular/common';
7
- import * as i5 from '@fundamental-ngx/core/button';
8
- import * as i6 from '@fundamental-ngx/core/form';
9
- import * as i4 from '@fundamental-ngx/core/info-label';
10
- import * as i7 from '@fundamental-ngx/core/popover';
11
- import * as i6$1 from '@angular/forms';
12
- import { FormsModule } from '@angular/forms';
13
- import * as i4$1 from '@fundamental-ngx/core/card';
14
- import * as i4$2 from '@fundamental-ngx/core/icon';
15
- import * as i5$1 from '@fundamental-ngx/platform';
16
- import { PlatformActionButtonGroupModule, PlatformMenuModule } from '@fundamental-ngx/platform';
17
- import * as i6$2 from '@fundamental-ngx/platform/shared';
18
- import * as i7$1 from 'barsa-sap-ui';
19
- import { BarsaSapUiModule } from 'barsa-sap-ui';
20
- import { ESCAPE, TAB, SPACE, ENTER } from '@angular/cdk/keycodes';
21
- import { KeyUtil } from '@fundamental-ngx/core/utils';
22
- import { AvatarGroupComponent, FundamentalNgxCoreModule } from '@fundamental-ngx/core';
23
- import * as i2$1 from '@fundamental-ngx/core/avatar';
24
- import * as i3 from '@fundamental-ngx/core/avatar-group';
25
- import * as i4$3 from '@fundamental-ngx/core/bar';
26
- import * as i6$3 from '@fundamental-ngx/core/list';
27
- import * as i13 from '@angular/cdk/drag-drop';
28
- import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
29
- import * as i5$2 from '@fundamental-ngx/core/checkbox';
30
- import * as i8 from '@fundamental-ngx/core/layout-grid';
31
- import * as i9 from '@fundamental-ngx/core/layout-panel';
32
- import * as i10 from '@fundamental-ngx/core/table';
33
- import { BarsaEchartsModule } from 'barsa-echarts';
34
- import { HttpClientModule } from '@angular/common/http';
35
-
36
- class KanbanBaseComponent extends BaseComponent {
37
- openPopover(e, popover) {
38
- e.stopPropagation();
39
- e.preventDefault();
40
- popover.toggle();
41
- }
42
- closePopover(popover) {
43
- popover.close();
44
- }
45
- }
46
- KanbanBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
47
- KanbanBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: KanbanBaseComponent, selector: "bk-kanban-base", usesInheritance: true, ngImport: i0, template: "<p>kanban-base works!</p>\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanBaseComponent, decorators: [{
49
- type: Component,
50
- args: [{ selector: 'bk-kanban-base', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>kanban-base works!</p>\r\n" }]
51
- }] });
52
-
53
- class KanbanTagsComponent extends KanbanBaseComponent {
54
- constructor() {
55
- super(...arguments);
56
- this.colorList = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
57
- this.currentTagLabel = '';
58
- this.selectedColor = '';
59
- }
60
- colorClick(color) {
61
- this.selectedColor = color;
62
- }
63
- addTag() {
64
- const newTag = { Id: '', $Caption: '' };
65
- newTag[this.viewSetting.TagColor] = this.selectedColor;
66
- newTag[this.viewSetting.TagName] = this.currentTagLabel;
67
- this.tags.push(newTag);
68
- this.currentTagLabel = '';
69
- this.selectedColor = '';
70
- }
71
- deleteTag(index) {
72
- this.tags.splice(index, 1);
73
- }
74
- }
75
- KanbanTagsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanTagsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
76
- KanbanTagsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: KanbanTagsComponent, selector: "bk-kanban-tags", inputs: { tags: "tags", viewSetting: "viewSetting" }, usesInheritance: true, ngImport: i0, template: "<div class=\"row tags-container\">\r\n <ng-container *ngFor=\"let tag of tags; let i = index\">\r\n <fd-popover placement=\"bottom\" [closeOnOutsideClick]=\"true\">\r\n <fd-popover-control>\r\n <div class=\"tag\">\r\n <fd-info-label\r\n [label]=\"tag[viewSetting.TagName]\"\r\n [color]=\"tag[viewSetting.TagColor]\"\r\n [title]=\"tag[viewSetting.TagName]\"\r\n ></fd-info-label>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"tag-delete\">\r\n <button fd-button (click)=\"deleteTag(i)\" [label]=\"'Delete' | bbbTranslate\" glyph=\"decline\"></button>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </ng-container>\r\n\r\n <fd-popover\r\n #tagPopover\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"false\"\r\n [closeOnOutsideClick]=\"true\"\r\n [noArrow]=\"false\"\r\n placement=\"bottom\"\r\n [focusAutoCapture]=\"true\"\r\n >\r\n <fd-popover-control>\r\n <div>\r\n <button\r\n fd-button\r\n (click)=\"openPopover($event, tagPopover)\"\r\n fdType=\"transparent\"\r\n glyph=\"sys-add\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"new-tag\" (keydown.enter)=\"addTag()\">\r\n <div fd-form-item class=\"row\">\r\n <input fd-form-control type=\"text\" [(ngModel)]=\"currentTagLabel\" id=\"input-1\" placeholder=\" \u0646\u0627\u0645\" />\r\n </div>\r\n <div class=\"colors-colection row\">\r\n <div\r\n *ngFor=\"let color of colorList\"\r\n (click)=\"colorClick(color)\"\r\n [ngClass]=\"'fd-info-label--accent-color-' + color\"\r\n [class.selected-color]=\"selectedColor === color\"\r\n class=\"color\"\r\n ></div>\r\n </div>\r\n <div class=\"ok-cancel-btns row\">\r\n <button fd-button [label]=\"'Ok' | bbbTranslate\" [fdType]=\"'emphasized'\" (click)=\"addTag()\"></button>\r\n <button\r\n fd-button\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"closePopover(tagPopover)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n</div>\r\n", styles: [":host ::ng-deep .fd-info-label__text{height:auto!important}.row,.new-tag .colors-colection{display:flex;align-items:center}.tags-container{column-gap:10px;flex-wrap:wrap}.new-tag{padding:15px;max-width:200px;row-gap:15px;display:flex;flex-direction:column;justify-content:center;align-items:center}.new-tag .row,.new-tag .colors-colection{column-gap:15px;width:100%}.new-tag .colors-colection{flex-wrap:wrap;row-gap:10px}.new-tag .colors-colection .color{width:40px;height:24px;border-radius:10px;border:1px solid var(--sapBackgroundColor, #f7f7f7)}.new-tag .colors-colection .selected-color{border-color:var(--sapList_SelectionBorderColor, #0854a0)}.ok-cancel-btns{justify-content:flex-end}.tag-delete{display:flex;align-items:center;justify-content:center;width:100px;height:80px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i6.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "component", type: i6.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i4.InfoLabelComponent, selector: "fd-info-label", inputs: ["class", "type", "glyph", "font", "color", "label", "title", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i6$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanTagsComponent, decorators: [{
78
- type: Component,
79
- args: [{ selector: 'bk-kanban-tags', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"row tags-container\">\r\n <ng-container *ngFor=\"let tag of tags; let i = index\">\r\n <fd-popover placement=\"bottom\" [closeOnOutsideClick]=\"true\">\r\n <fd-popover-control>\r\n <div class=\"tag\">\r\n <fd-info-label\r\n [label]=\"tag[viewSetting.TagName]\"\r\n [color]=\"tag[viewSetting.TagColor]\"\r\n [title]=\"tag[viewSetting.TagName]\"\r\n ></fd-info-label>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"tag-delete\">\r\n <button fd-button (click)=\"deleteTag(i)\" [label]=\"'Delete' | bbbTranslate\" glyph=\"decline\"></button>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </ng-container>\r\n\r\n <fd-popover\r\n #tagPopover\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"false\"\r\n [closeOnOutsideClick]=\"true\"\r\n [noArrow]=\"false\"\r\n placement=\"bottom\"\r\n [focusAutoCapture]=\"true\"\r\n >\r\n <fd-popover-control>\r\n <div>\r\n <button\r\n fd-button\r\n (click)=\"openPopover($event, tagPopover)\"\r\n fdType=\"transparent\"\r\n glyph=\"sys-add\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"new-tag\" (keydown.enter)=\"addTag()\">\r\n <div fd-form-item class=\"row\">\r\n <input fd-form-control type=\"text\" [(ngModel)]=\"currentTagLabel\" id=\"input-1\" placeholder=\" \u0646\u0627\u0645\" />\r\n </div>\r\n <div class=\"colors-colection row\">\r\n <div\r\n *ngFor=\"let color of colorList\"\r\n (click)=\"colorClick(color)\"\r\n [ngClass]=\"'fd-info-label--accent-color-' + color\"\r\n [class.selected-color]=\"selectedColor === color\"\r\n class=\"color\"\r\n ></div>\r\n </div>\r\n <div class=\"ok-cancel-btns row\">\r\n <button fd-button [label]=\"'Ok' | bbbTranslate\" [fdType]=\"'emphasized'\" (click)=\"addTag()\"></button>\r\n <button\r\n fd-button\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n [fdType]=\"'transparent'\"\r\n (click)=\"closePopover(tagPopover)\"\r\n ></button>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n</div>\r\n", styles: [":host ::ng-deep .fd-info-label__text{height:auto!important}.row,.new-tag .colors-colection{display:flex;align-items:center}.tags-container{column-gap:10px;flex-wrap:wrap}.new-tag{padding:15px;max-width:200px;row-gap:15px;display:flex;flex-direction:column;justify-content:center;align-items:center}.new-tag .row,.new-tag .colors-colection{column-gap:15px;width:100%}.new-tag .colors-colection{flex-wrap:wrap;row-gap:10px}.new-tag .colors-colection .color{width:40px;height:24px;border-radius:10px;border:1px solid var(--sapBackgroundColor, #f7f7f7)}.new-tag .colors-colection .selected-color{border-color:var(--sapList_SelectionBorderColor, #0854a0)}.ok-cancel-btns{justify-content:flex-end}.tag-delete{display:flex;align-items:center;justify-content:center;width:100px;height:80px}\n"] }]
80
- }], propDecorators: { tags: [{
81
- type: Input
82
- }], viewSetting: [{
83
- type: Input
84
- }] } });
85
-
86
- class KanbanCardComponent extends BaseViewItemPropsComponent {
87
- constructor() {
88
- super(...arguments);
89
- this.moTasksCount = 4;
90
- this.moFinishedTasksCount = 2;
91
- }
92
- ngOnInit() {
93
- super.ngOnInit();
94
- this.moTaskPercentage = Math.floor((this.moFinishedTasksCount / this.moTasksCount) * 100);
95
- }
96
- }
97
- KanbanCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
98
- KanbanCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: KanbanCardComponent, selector: "bk-kanban-card", inputs: { index: "index", mo: "mo", viewSetting: "viewSetting", allAvailableAssignees: "allAvailableAssignees" }, providers: [FormPanelService], usesInheritance: true, ngImport: i0, template: "<fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" style=\"background: transparent\" ellipsify>\r\n <div class=\"row task-cover\">\r\n <img\r\n [src]=\"\r\n viewSetting.Cover\r\n ? (mo[viewSetting.Cover]?.FileId\r\n | picFieldSrc: 'ID':viewSetting[viewSetting.Cover + 'Column']?.FieldDefId)\r\n : ''\r\n \"\r\n />\r\n </div>\r\n <fdp-action-button-group class=\"card-menu\">\r\n <fdp-button\r\n contentDensity=\"compact\"\r\n glyph=\"overflow\"\r\n buttonType=\"transparent\"\r\n [fdpMenuTriggerFor]=\"basicMenu\"\r\n ></fdp-button>\r\n <fdp-menu #basicMenu id=\"basic-menu\" [xPosition]=\"'before'\">\r\n <fdp-menu-item>{{ 'Edit' | bbbTranslate }}</fdp-menu-item>\r\n <fdp-menu-item>{{ 'Delete' | bbbTranslate }}</fdp-menu-item>\r\n </fdp-menu>\r\n </fdp-action-button-group>\r\n <fd-card-content>\r\n <bsu-ly-layout-container-of-root\r\n *ngIf=\"layout$ | async as layout94\"\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n </fd-card-content>\r\n <fd-card-footer>\r\n <div class=\"kanban-footer row\">\r\n <div class=\"comment row\">\r\n <fd-icon glyph=\"post\"></fd-icon>\r\n {{ mo[viewSetting.CommentsCount] }}\r\n </div>\r\n <div class=\"attachment row\">\r\n <fd-icon glyph=\"attachment\"></fd-icon>\r\n {{ mo[viewSetting.AttachesCount] }}\r\n </div>\r\n\r\n <div class=\"task row\">\r\n {{ mo[viewSetting.ProgressLabel] }}\r\n <div class=\"circle-icon\">\r\n <fd-icon glyph=\"accept\"></fd-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </fd-card-footer>\r\n</fd-card>\r\n", styles: [":host{position:relative}:host.selected{background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}:host.selected fd-card{border-color:var(--sapList_SelectionBorderColor, #0854a0)}:host.selected fd-card,:host.selected fd-card-header,:host.selected .fd-bar--footer,:host.selected fd-quick-view-subheader .fd-bar{background-color:inherit!important}.row{display:flex;align-items:center}.fd-card{background:var(--sapBackgroundColor, #f7f7f7)!important;box-shadow:none}.fd-card:hover .card-menu fdp-button{display:block}.fd-card .card-menu{position:absolute;right:1rem;top:1rem;background-color:#fff}.fd-card .card-menu fdp-button{display:none}.fd-card .card-menu [aria-controls=fdp-menu-basic-menu]{display:block}.fd-card .task-cover{width:100%;height:150px;justify-content:center}.fd-card .task-cover img{object-fit:cover;width:100%;height:100%}.fd-card fd-card-content{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;row-gap:20px;padding:1rem}.fd-card fd-card-content .progress-indicator{flex:1}.fd-card fd-card-content .progress-indicator ::ng-deep .fd-progress-indicator__remaining{display:flex;align-items:center}.fd-card ::ng-deep fd-info-label .fd-info-label__text{display:inline-flex!important}.kanban-footer{padding:1rem;column-gap:10px}.kanban-footer .comment,.kanban-footer .attachment,.kanban-footer .task{column-gap:2px}.kanban-footer .task{margin-right:auto}.kanban-footer .task .circle-icon{width:calc(var(--sapFontSize, .875rem) + 6px);height:calc(var(--sapFontSize, .875rem) + 6px);border-radius:calc(var(--sapFontSize, .875rem) + 6px);border:1px solid var(--sapButton_BorderColor, #0854a0);display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.EllipsifyDirective, selector: "[ellipsify]", inputs: ["limitLine"] }, { kind: "component", type: i4$1.CardComponent, selector: "fd-card", inputs: ["badge", "isLoading", "cardType", "id", "role"] }, { kind: "component", type: i4$1.CardContentComponent, selector: "fd-card-content" }, { kind: "component", type: i4$1.CardFooterComponent, selector: "fd-card-footer" }, { kind: "component", type: i4$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i5$1.ActionButtonGroupComponent, selector: "fdp-action-button-group" }, { kind: "component", type: i5$1.MenuComponent, selector: "fdp-menu", inputs: ["id", "openByArrowKeys", "xPosition"], outputs: ["close"] }, { kind: "component", type: i5$1.MenuItemComponent, selector: "fdp-menu-item", inputs: ["disabled", "cascadeDirection"], outputs: ["itemSelect"] }, { kind: "directive", type: i5$1.MenuTriggerDirective, selector: "[fdpMenuTriggerFor]", inputs: ["fdpMenuTriggerFor"] }, { kind: "directive", type: i6$2.PlatformContentDensityDeprecationDirective, selector: " fdp-action-bar[contentDensity], fdp-button[contentDensity], fdp-object-list-item[contentDensity], fdp-standard-list-item[contentDensity], fdp-menu[contentDensity], fdp-menu-button[contentDensity], fdp-panel[contentDensity], fdp-search-field[contentDensity], fdp-split-menu-button[contentDensity], fdp-file-uploader[contentDensity], fdp-upload-collection[contentDensity], fdp-table[contentDensity], fdp-multi-input[contentDensity], fdp-list[contentDensity], fdp-slider[contentDensity], fdp-time-picker[contentDensity], fdp-textarea[contentDensity], fdp-switch[contentDensity], fdp-number-step-input[contentDensity], fdp-select[contentDensity], fdp-date-picker[contentDensity], fdp-checkbox[contentDensity], fdp-checkbox-group[contentDensity], fdp-combobox[contentDensity], fdp-datetime-picker[contentDensity], fdp-input[contentDensity], fdp-radio-group[contentDensity], fdp-radio-button[contentDensity], fdp-multi-combobox[contentDensity], fdp-input-group-addon-body[contentDensity], fdp-input-group[contentDensity], fdp-value-help-dialog[contentDensity], fdp-filter-single-select[contentDensity], fdp-filter-multi-select[contentDensity], fdp-filter-custom[contentDensity] " }, { kind: "component", type: i7$1.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanCardComponent, decorators: [{
100
- type: Component,
101
- args: [{ selector: 'bk-kanban-card', providers: [FormPanelService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-card cardType=\"quickView\" class=\"docs-flex-item-margin\" style=\"background: transparent\" ellipsify>\r\n <div class=\"row task-cover\">\r\n <img\r\n [src]=\"\r\n viewSetting.Cover\r\n ? (mo[viewSetting.Cover]?.FileId\r\n | picFieldSrc: 'ID':viewSetting[viewSetting.Cover + 'Column']?.FieldDefId)\r\n : ''\r\n \"\r\n />\r\n </div>\r\n <fdp-action-button-group class=\"card-menu\">\r\n <fdp-button\r\n contentDensity=\"compact\"\r\n glyph=\"overflow\"\r\n buttonType=\"transparent\"\r\n [fdpMenuTriggerFor]=\"basicMenu\"\r\n ></fdp-button>\r\n <fdp-menu #basicMenu id=\"basic-menu\" [xPosition]=\"'before'\">\r\n <fdp-menu-item>{{ 'Edit' | bbbTranslate }}</fdp-menu-item>\r\n <fdp-menu-item>{{ 'Delete' | bbbTranslate }}</fdp-menu-item>\r\n </fdp-menu>\r\n </fdp-action-button-group>\r\n <fd-card-content>\r\n <bsu-ly-layout-container-of-root\r\n *ngIf=\"layout$ | async as layout94\"\r\n [config]=\"layout94\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n </fd-card-content>\r\n <fd-card-footer>\r\n <div class=\"kanban-footer row\">\r\n <div class=\"comment row\">\r\n <fd-icon glyph=\"post\"></fd-icon>\r\n {{ mo[viewSetting.CommentsCount] }}\r\n </div>\r\n <div class=\"attachment row\">\r\n <fd-icon glyph=\"attachment\"></fd-icon>\r\n {{ mo[viewSetting.AttachesCount] }}\r\n </div>\r\n\r\n <div class=\"task row\">\r\n {{ mo[viewSetting.ProgressLabel] }}\r\n <div class=\"circle-icon\">\r\n <fd-icon glyph=\"accept\"></fd-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </fd-card-footer>\r\n</fd-card>\r\n", styles: [":host{position:relative}:host.selected{background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}:host.selected fd-card{border-color:var(--sapList_SelectionBorderColor, #0854a0)}:host.selected fd-card,:host.selected fd-card-header,:host.selected .fd-bar--footer,:host.selected fd-quick-view-subheader .fd-bar{background-color:inherit!important}.row{display:flex;align-items:center}.fd-card{background:var(--sapBackgroundColor, #f7f7f7)!important;box-shadow:none}.fd-card:hover .card-menu fdp-button{display:block}.fd-card .card-menu{position:absolute;right:1rem;top:1rem;background-color:#fff}.fd-card .card-menu fdp-button{display:none}.fd-card .card-menu [aria-controls=fdp-menu-basic-menu]{display:block}.fd-card .task-cover{width:100%;height:150px;justify-content:center}.fd-card .task-cover img{object-fit:cover;width:100%;height:100%}.fd-card fd-card-content{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;row-gap:20px;padding:1rem}.fd-card fd-card-content .progress-indicator{flex:1}.fd-card fd-card-content .progress-indicator ::ng-deep .fd-progress-indicator__remaining{display:flex;align-items:center}.fd-card ::ng-deep fd-info-label .fd-info-label__text{display:inline-flex!important}.kanban-footer{padding:1rem;column-gap:10px}.kanban-footer .comment,.kanban-footer .attachment,.kanban-footer .task{column-gap:2px}.kanban-footer .task{margin-right:auto}.kanban-footer .task .circle-icon{width:calc(var(--sapFontSize, .875rem) + 6px);height:calc(var(--sapFontSize, .875rem) + 6px);border-radius:calc(var(--sapFontSize, .875rem) + 6px);border:1px solid var(--sapButton_BorderColor, #0854a0);display:flex;align-items:center;justify-content:center}\n"] }]
102
- }], propDecorators: { index: [{
103
- type: Input
104
- }], mo: [{
105
- type: Input
106
- }], viewSetting: [{
107
- type: Input
108
- }], allAvailableAssignees: [{
109
- type: Input
110
- }] } });
111
-
112
- class BarsaAvatarGroupComponent extends KanbanBaseComponent {
113
- constructor() {
114
- super(...arguments);
115
- this.visibleFields = [];
116
- this.size = 'l';
117
- this.personDetails = null;
118
- this.overflowPopoverStage = 'main';
119
- }
120
- get isDetailStage() {
121
- return this.overflowPopoverStage === 'detail';
122
- }
123
- isOpenChanged(isOpened) {
124
- if (isOpened) {
125
- this.openOverflowMain();
126
- }
127
- }
128
- newItem(newItem) {
129
- const exist = this.existedItems.find((item) => item.Id === newItem.Id);
130
- if (!exist) {
131
- this.existedItems.push(newItem);
132
- }
133
- }
134
- deleteAvatar(idx) {
135
- this.existedItems.splice(idx, 1);
136
- }
137
- openOverflowMain() {
138
- this.personDetails = null;
139
- this.overflowPopoverStage = 'main';
140
- setTimeout(() => this.popoverBodyComponent?._focusFirstTabbableElement(), 0);
141
- }
142
- handleControlClick(event, popover) {
143
- popover.open();
144
- }
145
- handleControlKeydown(event, popover) {
146
- if (!KeyUtil.isKeyCode(event, [ESCAPE, TAB, SPACE, ENTER])) {
147
- return;
148
- }
149
- if (KeyUtil.isKeyCode(event, [ESCAPE, TAB])) {
150
- popover.close();
151
- }
152
- if (KeyUtil.isKeyCode(event, [SPACE, ENTER])) {
153
- popover.open();
154
- }
155
- }
156
- }
157
- BarsaAvatarGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaAvatarGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
158
- BarsaAvatarGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: BarsaAvatarGroupComponent, selector: "bk-avatar-group", inputs: { existedItems: "existedItems", availableItems: "availableItems", viewSetting: "viewSetting", visibleFields: "visibleFields", addItem: "addItem", size: "size" }, viewQueries: [{ propertyName: "popoverBodyComponent", first: true, predicate: ["overflowPopoverBody"], descendants: true }, { propertyName: "avatarGroupCom", first: true, predicate: AvatarGroupComponent, descendants: true, read: AvatarGroupComponent, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-avatar-group #avatarGroupCom type=\"group\" [size]=\"size\">\r\n <fd-popover\r\n [noArrow]=\"false\"\r\n [focusTrapped]=\"true\"\r\n [focusAutoCapture]=\"true\"\r\n [triggers]=\"[]\"\r\n [closeOnOutsideClick]=\"true\"\r\n [closeOnEscapeKey]=\"true\"\r\n (isOpenChange)=\"isOpenChanged($event)\"\r\n placement=\"bottom\"\r\n [maxWidth]=\"312\"\r\n #overflowPopover\r\n >\r\n <fd-popover-control\r\n fd-avatar-group-popover-control\r\n [attr.aria-label]=\"\r\n 'Has popup type dialog Conjoined avatars, ' +\r\n ' avatars displayed, ' +\r\n avatarGroupCom?.overflowItemsCount +\r\n ' avatars hidden, activate for complete list'\r\n \"\r\n (click)=\"handleControlClick($event, overflowPopover)\"\r\n (keydown)=\"handleControlKeydown($event, overflowPopover)\"\r\n >\r\n <div *ngFor=\"let person of existedItems\" fd-avatar-group-item>\r\n <fd-avatar\r\n *ngIf=\"!person[viewSetting.AssigneeImage]\"\r\n [label]=\"person[viewSetting.AssigneeName]\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n role=\"img\"\r\n [circle]=\"true\"\r\n [border]=\"true\"\r\n [size]=\"size\"\r\n ></fd-avatar>\r\n\r\n <fd-avatar\r\n *ngIf=\"person[viewSetting.AssigneeImage] as avatar\"\r\n role=\"img\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n [circle]=\"true\"\r\n [border]=\"true\"\r\n [size]=\"size\"\r\n [image]=\"(avatar.FileId | picFieldSrc: 'ID':person.Id) || ''\"\r\n >\r\n </fd-avatar>\r\n </div>\r\n <button\r\n *ngIf=\"avatarGroupCom.overflowItemsCount && avatarGroupCom.overflowItemsCount > 0\"\r\n fd-button\r\n fd-avatar-group-overflow-button\r\n tabindex=\"-1\"\r\n [compact]=\"false\"\r\n [size]=\"size\"\r\n >\r\n <bdi fd-avatar-group-overflow-button-text> +{{ avatarGroupCom.overflowItemsCount }} </bdi>\r\n </button>\r\n </fd-popover-control>\r\n <fd-popover-body #overflowPopoverBody aria-labelledby=\"avatar-group-1-popover-header\" role=\"tooltip\">\r\n <div class=\"fd-popover__wrapper\">\r\n <div fd-popover-body-header>\r\n <div fd-bar barDesign=\"header\">\r\n <div fd-bar-left>\r\n <fd-button-bar\r\n *ngIf=\"isDetailStage\"\r\n (click)=\"openOverflowMain()\"\r\n glyph=\"navigation-left-arrow\"\r\n fdType=\"transparent\"\r\n aria-label=\"Back\"\r\n title=\"Back\"\r\n ></fd-button-bar>\r\n <fd-bar-element id=\"avatar-group-1-popover-header\">\r\n {{ isDetailStage ? 'Business Card' : 'Team Members (' + existedItems?.length + ')' }}\r\n </fd-bar-element>\r\n <fd-bar-element *ngIf=\"isDetailStage\">&nbsp;</fd-bar-element>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n fd-avatar-group-overflow-body\r\n [noPadding]=\"isDetailStage\"\r\n [noHorizontalScroll]=\"isDetailStage\"\r\n [noVerticalScroll]=\"false\"\r\n >\r\n <ng-container *ngIf=\"overflowPopoverStage === 'main'\">\r\n <ng-container *ngFor=\"let person of existedItems; let idx = index\">\r\n <div fd-avatar-group-overflow-item>\r\n <fd-popover [triggers]=\"['click']\">\r\n <fd-popover-control>\r\n <fd-avatar\r\n *ngIf=\"!person[viewSetting.AssigneeImage]\"\r\n fd-avatar-group-focusable-avatar\r\n [circle]=\"true\"\r\n size=\"s\"\r\n [label]=\"person[viewSetting.AssigneeName]\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n role=\"img\"\r\n ></fd-avatar>\r\n <fd-avatar\r\n *ngIf=\"person[viewSetting.AssigneeImage] as avatar\"\r\n fd-avatar-group-focusable-avatar\r\n role=\"img\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n [circle]=\"true\"\r\n size=\"s\"\r\n [image]=\"(avatar.FileId | picFieldSrc: 'ID':person.Id) || ''\"\r\n ></fd-avatar>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"avatar-actions\">\r\n <button\r\n fd-button\r\n (click)=\"deleteAvatar(idx)\"\r\n [label]=\"'Delete' | bbbTranslate\"\r\n glyph=\"decline\"\r\n ></button>\r\n <button\r\n fd-button\r\n [label]=\"'Show' | bbbTranslate\"\r\n glyph=\"detail-view\"\r\n ></button>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-avatar-group>\r\n\r\n<fd-popover\r\n #peoplePopover\r\n *ngIf=\"addItem\"\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"false\"\r\n [closeOnOutsideClick]=\"true\"\r\n [noArrow]=\"false\"\r\n placement=\"bottom\"\r\n [focusAutoCapture]=\"true\"\r\n>\r\n <fd-popover-control>\r\n <div>\r\n <button\r\n fd-button\r\n (click)=\"openPopover($event, peoplePopover)\"\r\n fdType=\"transparent\"\r\n glyph=\"sys-add\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <ul fd-list>\r\n <li fd-list-item *ngFor=\"let item of availableItems\" (click)=\"newItem(item)\">\r\n <ng-container *ngIf=\"visibleFields.length > 0; else default\">\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n {{ item[field] }}\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n {{ item }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </fd-popover-body>\r\n</fd-popover>\r\n", styles: [":host{display:flex;align-items:center;column-gap:2px;width:130px}.avatar-actions{display:flex;padding:10px;flex-direction:column;justify-content:center;row-gap:15px;width:100px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "backgroundImage", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i3.AvatarGroupComponent, selector: "fd-avatar-group", inputs: ["id", "class", "size", "type", "ariaLabel"] }, { kind: "directive", type: i3.AvatarGroupItemDirective, selector: "[fd-avatar-group-item]" }, { kind: "directive", type: i3.AvatarGroupFocusableAvatarDirective, selector: "[fd-avatar-group-focusable-avatar]", inputs: ["tabindex"] }, { kind: "directive", type: i3.AvatarGroupPopoverControlDirective, selector: "[fd-avatar-group-popover-control]", inputs: ["tabindex", "role"] }, { kind: "directive", type: i3.AvatarGroupOverflowBodyDirective, selector: "[fd-avatar-group-overflow-body]", inputs: ["noPadding", "noHorizontalScroll", "noVerticalScroll"] }, { kind: "directive", type: i3.AvatarGroupOverflowItemDirective, selector: "[fd-avatar-group-overflow-item]" }, { kind: "directive", type: i3.AvatarGroupOverflowButtonDirective, selector: "[fd-avatar-group-overflow-button]", inputs: ["class", "size", "color"] }, { kind: "directive", type: i3.AvatarGroupOverflowButtonTextDirective, selector: "[fd-avatar-group-overflow-button-text]" }, { kind: "component", type: i4$3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i4$3.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4$3.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i4$3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i5.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i6$3.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6$3.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "directive", type: i7.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaAvatarGroupComponent, decorators: [{
160
- type: Component,
161
- args: [{ selector: 'bk-avatar-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-avatar-group #avatarGroupCom type=\"group\" [size]=\"size\">\r\n <fd-popover\r\n [noArrow]=\"false\"\r\n [focusTrapped]=\"true\"\r\n [focusAutoCapture]=\"true\"\r\n [triggers]=\"[]\"\r\n [closeOnOutsideClick]=\"true\"\r\n [closeOnEscapeKey]=\"true\"\r\n (isOpenChange)=\"isOpenChanged($event)\"\r\n placement=\"bottom\"\r\n [maxWidth]=\"312\"\r\n #overflowPopover\r\n >\r\n <fd-popover-control\r\n fd-avatar-group-popover-control\r\n [attr.aria-label]=\"\r\n 'Has popup type dialog Conjoined avatars, ' +\r\n ' avatars displayed, ' +\r\n avatarGroupCom?.overflowItemsCount +\r\n ' avatars hidden, activate for complete list'\r\n \"\r\n (click)=\"handleControlClick($event, overflowPopover)\"\r\n (keydown)=\"handleControlKeydown($event, overflowPopover)\"\r\n >\r\n <div *ngFor=\"let person of existedItems\" fd-avatar-group-item>\r\n <fd-avatar\r\n *ngIf=\"!person[viewSetting.AssigneeImage]\"\r\n [label]=\"person[viewSetting.AssigneeName]\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n role=\"img\"\r\n [circle]=\"true\"\r\n [border]=\"true\"\r\n [size]=\"size\"\r\n ></fd-avatar>\r\n\r\n <fd-avatar\r\n *ngIf=\"person[viewSetting.AssigneeImage] as avatar\"\r\n role=\"img\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n [circle]=\"true\"\r\n [border]=\"true\"\r\n [size]=\"size\"\r\n [image]=\"(avatar.FileId | picFieldSrc: 'ID':person.Id) || ''\"\r\n >\r\n </fd-avatar>\r\n </div>\r\n <button\r\n *ngIf=\"avatarGroupCom.overflowItemsCount && avatarGroupCom.overflowItemsCount > 0\"\r\n fd-button\r\n fd-avatar-group-overflow-button\r\n tabindex=\"-1\"\r\n [compact]=\"false\"\r\n [size]=\"size\"\r\n >\r\n <bdi fd-avatar-group-overflow-button-text> +{{ avatarGroupCom.overflowItemsCount }} </bdi>\r\n </button>\r\n </fd-popover-control>\r\n <fd-popover-body #overflowPopoverBody aria-labelledby=\"avatar-group-1-popover-header\" role=\"tooltip\">\r\n <div class=\"fd-popover__wrapper\">\r\n <div fd-popover-body-header>\r\n <div fd-bar barDesign=\"header\">\r\n <div fd-bar-left>\r\n <fd-button-bar\r\n *ngIf=\"isDetailStage\"\r\n (click)=\"openOverflowMain()\"\r\n glyph=\"navigation-left-arrow\"\r\n fdType=\"transparent\"\r\n aria-label=\"Back\"\r\n title=\"Back\"\r\n ></fd-button-bar>\r\n <fd-bar-element id=\"avatar-group-1-popover-header\">\r\n {{ isDetailStage ? 'Business Card' : 'Team Members (' + existedItems?.length + ')' }}\r\n </fd-bar-element>\r\n <fd-bar-element *ngIf=\"isDetailStage\">&nbsp;</fd-bar-element>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n fd-avatar-group-overflow-body\r\n [noPadding]=\"isDetailStage\"\r\n [noHorizontalScroll]=\"isDetailStage\"\r\n [noVerticalScroll]=\"false\"\r\n >\r\n <ng-container *ngIf=\"overflowPopoverStage === 'main'\">\r\n <ng-container *ngFor=\"let person of existedItems; let idx = index\">\r\n <div fd-avatar-group-overflow-item>\r\n <fd-popover [triggers]=\"['click']\">\r\n <fd-popover-control>\r\n <fd-avatar\r\n *ngIf=\"!person[viewSetting.AssigneeImage]\"\r\n fd-avatar-group-focusable-avatar\r\n [circle]=\"true\"\r\n size=\"s\"\r\n [label]=\"person[viewSetting.AssigneeName]\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n role=\"img\"\r\n ></fd-avatar>\r\n <fd-avatar\r\n *ngIf=\"person[viewSetting.AssigneeImage] as avatar\"\r\n fd-avatar-group-focusable-avatar\r\n role=\"img\"\r\n [title]=\"person[viewSetting.AssigneeName]\"\r\n [ariaLabel]=\"person[viewSetting.AssigneeName] + ' avatar'\"\r\n [circle]=\"true\"\r\n size=\"s\"\r\n [image]=\"(avatar.FileId | picFieldSrc: 'ID':person.Id) || ''\"\r\n ></fd-avatar>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <div class=\"avatar-actions\">\r\n <button\r\n fd-button\r\n (click)=\"deleteAvatar(idx)\"\r\n [label]=\"'Delete' | bbbTranslate\"\r\n glyph=\"decline\"\r\n ></button>\r\n <button\r\n fd-button\r\n [label]=\"'Show' | bbbTranslate\"\r\n glyph=\"detail-view\"\r\n ></button>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </fd-popover-body>\r\n </fd-popover>\r\n</fd-avatar-group>\r\n\r\n<fd-popover\r\n #peoplePopover\r\n *ngIf=\"addItem\"\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"false\"\r\n [closeOnOutsideClick]=\"true\"\r\n [noArrow]=\"false\"\r\n placement=\"bottom\"\r\n [focusAutoCapture]=\"true\"\r\n>\r\n <fd-popover-control>\r\n <div>\r\n <button\r\n fd-button\r\n (click)=\"openPopover($event, peoplePopover)\"\r\n fdType=\"transparent\"\r\n glyph=\"sys-add\"\r\n ></button>\r\n </div>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <ul fd-list>\r\n <li fd-list-item *ngFor=\"let item of availableItems\" (click)=\"newItem(item)\">\r\n <ng-container *ngIf=\"visibleFields.length > 0; else default\">\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n {{ item[field] }}\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n {{ item }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </fd-popover-body>\r\n</fd-popover>\r\n", styles: [":host{display:flex;align-items:center;column-gap:2px;width:130px}.avatar-actions{display:flex;padding:10px;flex-direction:column;justify-content:center;row-gap:15px;width:100px}\n"] }]
162
- }], propDecorators: { popoverBodyComponent: [{
163
- type: ViewChild,
164
- args: ['overflowPopoverBody']
165
- }], avatarGroupCom: [{
166
- type: ViewChild,
167
- args: [AvatarGroupComponent, { static: true, read: AvatarGroupComponent }]
168
- }], existedItems: [{
169
- type: Input
170
- }], availableItems: [{
171
- type: Input
172
- }], viewSetting: [{
173
- type: Input
174
- }], visibleFields: [{
175
- type: Input
176
- }], addItem: [{
177
- type: Input
178
- }], size: [{
179
- type: Input
180
- }] } });
181
-
182
- class KanbanViewComponent extends ReportViewBaseComponent {
183
- constructor() {
184
- super(...arguments);
185
- this.groupbyProperty = 'State';
186
- this.isNewColumnMode = false;
187
- this.newCard = { Id: null, $Caption: null };
188
- this.newColumn = { Id: null, $Caption: null };
189
- }
190
- ngOnInit() {
191
- super.ngOnInit();
192
- const columnsReport = this.viewSetting.ColumnsReport.$Caption;
193
- this._portalService.ReportExecute(columnsReport).subscribe((report) => {
194
- this.kanbanColumns = report.MoDataList;
195
- this._changeDetect();
196
- });
197
- this.formSetting.View.ControlInfo.forEach((c) => (c.InlineEditMode = true));
198
- const assigneesReport = this.viewSetting.AssigneesReport.$Caption;
199
- this._portalService.ReportExecute(assigneesReport).subscribe((report) => {
200
- this.allAvailableAssignees = report.MoDataList;
201
- this._changeDetect();
202
- });
203
- this.viewSetting = {
204
- ...this.viewSetting,
205
- ...this._findColumn(this.allColumns, [
206
- this.viewSetting.Cover,
207
- this.viewSetting.State,
208
- this.viewSetting.Caption
209
- ])
210
- };
211
- }
212
- onAddNewColumn() {
213
- this.kanbanColumns.push(this.newColumn);
214
- this._cdr.detectChanges();
215
- this._resetNewColumn();
216
- this._scrollInputIntoView();
217
- }
218
- onActiveNewColumnMode() {
219
- this._changeNewColumnMode(true);
220
- }
221
- onCancelNewColumn() {
222
- this._changeNewColumnMode(false);
223
- this._resetNewColumn();
224
- }
225
- onInitNewCard(groupby) {
226
- this._resetNewCard();
227
- this.newCard[this.groupbyProperty] = groupby;
228
- }
229
- onAddNewCard(e) {
230
- e.stopPropagation();
231
- e.preventDefault();
232
- this._addNewCard();
233
- }
234
- onNewCardInputFocusout() {
235
- if (this.newCard.$Caption) {
236
- this._addNewCard();
237
- }
238
- else {
239
- this._cancelNewCard();
240
- }
241
- }
242
- onCancelNewCard(e) {
243
- e.stopPropagation();
244
- e.preventDefault();
245
- this._cancelNewCard();
246
- }
247
- onDrop(event, isColumn) {
248
- let previousIndex;
249
- let currentIndex;
250
- const array = event.container.data;
251
- if (isColumn) {
252
- previousIndex = event.previousIndex;
253
- currentIndex = event.currentIndex;
254
- }
255
- else {
256
- const draggedItemId = this.dropActionTodo.draggedId;
257
- if (!draggedItemId) {
258
- return;
259
- }
260
- const draggedItem = this._getMoById(draggedItemId);
261
- const targetState = this.dropActionTodo.targetState;
262
- previousIndex = array.indexOf(draggedItem);
263
- currentIndex = this.dropActionTodo.targetIndex;
264
- draggedItem.State = targetState;
265
- this._stopDragging();
266
- }
267
- moveItemInArray(array, previousIndex, currentIndex);
268
- }
269
- onDragMove(event, draggedMo, draggedIndex, targetState) {
270
- const elementFromPoint = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);
271
- if (targetState) {
272
- }
273
- if (!elementFromPoint) {
274
- this._stopDragging();
275
- return;
276
- }
277
- const targetNodeElement = elementFromPoint.closest('[state]');
278
- if (!targetNodeElement) {
279
- this._stopDragging();
280
- return;
281
- }
282
- this.dropActionTodo = {
283
- draggedId: draggedMo.Id,
284
- targetId: targetNodeElement.getAttribute('id'),
285
- targetState: null,
286
- targetIndex: Number(targetNodeElement.getAttribute('index'))
287
- };
288
- const targetRect = targetNodeElement.getBoundingClientRect();
289
- const oneThird = targetRect.height / 3;
290
- const isCardTarget = !targetNodeElement.classList.contains('column');
291
- const isBefore = event.pointerPosition.y - targetRect.top < oneThird && isCardTarget;
292
- const isAfter = event.pointerPosition.y - targetRect.top > 2 * oneThird && isCardTarget;
293
- const isInside = !isCardTarget;
294
- const targetIndex = this.dropActionTodo.targetIndex ?? -1;
295
- const targetMo = this.moDataList[targetIndex];
296
- if (isCardTarget) {
297
- this.dropActionTodo.targetState = targetMo[this.viewSetting.State];
298
- }
299
- else {
300
- this.dropActionTodo.targetState = {
301
- $Caption: targetNodeElement.getAttribute('state'),
302
- Id: targetNodeElement.getAttribute('id'),
303
- $TypeDefId: draggedMo[this.viewSetting.State]?.$TypeDefId
304
- };
305
- }
306
- if (isBefore) {
307
- this.dropActionTodo.action = 'before';
308
- this.dropActionTodo.targetIndex = draggedIndex > targetIndex ? targetIndex : targetIndex - 1;
309
- }
310
- else if (isAfter) {
311
- this.dropActionTodo.action = 'after';
312
- this.dropActionTodo.targetIndex = draggedIndex < targetIndex ? targetIndex : targetIndex + 1;
313
- }
314
- else if (isInside) {
315
- this.dropActionTodo.action = 'inside';
316
- this.dropActionTodo.targetIndex = 0;
317
- }
318
- // console.log(this.dropActionTodo.targetState);
319
- this._showDragInfo();
320
- }
321
- _changeDetect() {
322
- this._cdr.detectChanges();
323
- }
324
- _stopDragging() {
325
- this._clearDragInfo();
326
- this._resetDropActionTodo();
327
- }
328
- _changeNewColumnMode(mode) {
329
- this.isNewColumnMode = mode;
330
- }
331
- _resetDropActionTodo() {
332
- this.dropActionTodo = {
333
- targetId: null,
334
- draggedId: null,
335
- targetState: null,
336
- targetIndex: null,
337
- action: null
338
- };
339
- }
340
- _scrollInputIntoView() {
341
- const inputEl = this.inputEl.nativeElement;
342
- inputEl.focus();
343
- inputEl.scrollIntoView({ inline: 'end' });
344
- }
345
- _resetNewColumn() {
346
- this.newColumn = { Id: '', $Caption: '' };
347
- }
348
- _clearDragInfo(dropped = false) {
349
- if (dropped) {
350
- this._resetDropActionTodo();
351
- }
352
- const elDom = this._el.nativeElement;
353
- elDom
354
- .querySelectorAll('.drop-before')
355
- .forEach((element) => this._renderer2.removeClass(element, 'drop-before'));
356
- elDom.querySelectorAll('.drop-after').forEach((element) => this._renderer2.removeClass(element, 'drop-after'));
357
- elDom
358
- .querySelectorAll('.drop-inside')
359
- .forEach((element) => this._renderer2.removeClass(element, 'drop-inside'));
360
- }
361
- _showDragInfo() {
362
- this._clearDragInfo();
363
- if (this.dropActionTodo.targetId) {
364
- const targetNodeElement = this._el.nativeElement.querySelector('#' + this.dropActionTodo.targetId);
365
- if (!targetNodeElement) {
366
- this._resetDropActionTodo();
367
- return;
368
- }
369
- this._renderer2.addClass(targetNodeElement, 'drop-' + this.dropActionTodo?.action);
370
- }
371
- }
372
- _addNewCard() {
373
- this.moDataList.push(this.newCard);
374
- const currentGroupby = this.newCard[this.groupbyProperty];
375
- this.onInitNewCard(currentGroupby);
376
- }
377
- _resetNewCard() {
378
- this.newCard = { Id: null, $Caption: null };
379
- }
380
- _cancelNewCard() {
381
- this._resetNewCard();
382
- }
383
- _getMoById(id) {
384
- return this.moDataList.find((c) => c.Id === id);
385
- }
386
- _findColumn(allColumns, columnsName) {
387
- const columns = {};
388
- columnsName.forEach((name) => {
389
- columns[name + 'Column'] = this._findColumnByDbName.transform(this.allColumns, name);
390
- });
391
- return columns;
392
- }
393
- }
394
- KanbanViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
395
- KanbanViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: KanbanViewComponent, selector: "bk-kanban-view", inputs: { kanbanColumns: "kanbanColumns", groupbyProperty: "groupbyProperty" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<fd-layout-panel>\r\n <fd-layout-panel-body [bleed]=\"true\">\r\n <table fd-table *ngIf=\"isCheckList\">\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 </fd-layout-panel-body>\r\n</fd-layout-panel>\r\n\r\n<fd-layout-grid\r\n *ngIf=\"moDataList?.length; else noData\"\r\n class=\"columns\"\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 <div\r\n *ngFor=\"let column of kanbanColumns; let columnIndex = index\"\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"6\"\r\n [colLg]=\"4\"\r\n [colXl]=\"3\"\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 <div\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"6\"\r\n [colLg]=\"4\"\r\n [colXl]=\"3\"\r\n class=\"newColumn\"\r\n (click)=\"onActiveNewColumnMode()\"\r\n *ngIf=\"!isNewColumnMode; else newColumnInput\"\r\n >\r\n <ng-container>\r\n <span>\u0633\u062A\u0648\u0646 \u062C\u062F\u06CC\u062F</span>\r\n </ng-container>\r\n </div>\r\n <ng-template #newColumnInput>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"6\" [colLg]=\"4\" [colXl]=\"3\">\r\n <input\r\n #inputEl\r\n fd-form-control\r\n type=\"text\"\r\n autofocus\r\n (focusout)=\"onCancelNewColumn()\"\r\n [(ngModel)]=\"newColumn.$Caption\"\r\n (keydown.enter)=\"onAddNewColumn()\"\r\n id=\"new-column-name\"\r\n placeholder=\" \u0646\u0627\u0645\"\r\n />\r\n </div>\r\n </ng-template>\r\n</fd-layout-grid>\r\n\r\n<!--noData-->\r\n<ng-template #noData>\r\n <bsu-no-data></bsu-no-data>\r\n</ng-template>\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 <span fd-card-title>{{ column.$Caption }}</span>\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 *ngFor=\"let mo of moDataList; let index = index\">\r\n <bk-kanban-card\r\n [mo]=\"mo\"\r\n [viewSetting]=\"viewSetting\"\r\n [formSetting]=\"formSetting\"\r\n [allAvailableAssignees]=\"allAvailableAssignees\"\r\n [index]=\"index\"\r\n *ngIf=\"mo[viewSetting.State].$Caption === column.$Caption\"\r\n [attr.id]=\"mo.Id\"\r\n [inlineEditMode]=\"true\"\r\n [isChecked]=\"true\"\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 </ng-container>\r\n </fd-card-content>\r\n <fd-card-footer class=\"column-footer\">\r\n <div class=\"new-card\" *ngIf=\"newCard[groupbyProperty] === column.$Caption; else addNewCard\">\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\r\n <ng-template #addNewCard>\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 </ng-template>\r\n </fd-card-footer>\r\n </fd-card>\r\n</ng-template>\r\n", styles: [":host{display:flex;column-gap:20px;row-gap:20px;flex-wrap:wrap;overflow:auto;padding-bottom:1rem;height:calc(100% - 38.5px)}::-webkit-scrollbar{height:7px;width:7px}::-webkit-scrollbar-track{box-shadow:inset 0 0 2px #d0cece;border-radius:10px}::-webkit-scrollbar-thumb{background:#c8cacb;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#adb0b2}.columns{height:inherit;width:100%;column-gap:15px;flex-wrap:nowrap!important}.column{height:100%;background-color:var(--sapList_Background, #fff)!important}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%;box-shadow:none}.column>fd-card fd-card-header{border:none;background:none;padding:1rem 2rem!important}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:0 1rem;margin:0;display:flex;flex-direction:column;row-gap:20px}.column>fd-card .column-footer{padding:1rem 1rem 1rem 1.5rem;position:sticky}.column>fd-card .column-footer .new-card{display:flex;flex-direction:column;justify-content:center;row-gap:1rem}.column>fd-card .column-footer .new-card fd-card{padding:0 1rem;background:var(--sapBackgroundColor, #f7f7f7)!important}.column>fd-card .column-footer .new-card textarea{background:var(--sapBackgroundColor, #f7f7f7)!important;border:none}.column>fd-card .column-footer .new-card span{height:auto!important}.column>fd-card .column-footer .new-card .new-card-actions{display:flex;align-items:center;column-gap:10px}.column>fd-card .column-footer .new-card .new-card-actions fd-icon{font-size:1rem}.column>fd-card .column-footer .add-new-card{padding:0 1rem}.column>fd-card .column-footer .add-new-card span{display:flex;column-gap:4px}.newColumn{background-color:var(--sapList_Background, #fff)!important;border-radius:var(--sapElement_BorderCornerRadius, .25rem);align-self:flex-start;height:100px;opacity:.5;display:flex;align-items:center;justify-content:center;border:1px dashed;position:relative;cursor:pointer}.newColumn span{position:absolute}.newColumn .new-column-popover{width:100%}.newColumn .new-column-popover fd-popover-control{width:100%;height:1px}.new-column-popover-body input{border:none}.row{display:flex;align-items:center}.drop-inside{border:1px solid #00f}.drop-inside ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-before{border-top:2px solid #00f}.drop-before ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-after{border-bottom:2px solid #00f}.drop-after ::ng-deep .fd-list__item{background-color:#dce9f6!important}.columns.cdk-drop-list-dragging .column:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.EllipsifyDirective, selector: "[ellipsify]", inputs: ["limitLine"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4$1.CardComponent, selector: "fd-card", inputs: ["badge", "isLoading", "cardType", "id", "role"] }, { kind: "component", type: i4$1.CardHeaderComponent, selector: "fd-card-header", inputs: ["interactive", "tabindex"] }, { kind: "component", type: i4$1.CardContentComponent, selector: "fd-card-content" }, { kind: "directive", type: i4$1.CardTitleDirective, selector: "[fd-card-title]" }, { kind: "component", type: i4$1.CardFooterComponent, selector: "fd-card-footer" }, { kind: "component", type: i5$2.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values"], outputs: ["focusChange"] }, { kind: "component", type: i6.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class"] }, { kind: "directive", type: i6.InputFormControlDirective, selector: "input[fd-form-control]" }, { kind: "directive", type: i6.TextareaFormControlDirective, selector: "textarea[fd-form-control]" }, { kind: "component", type: i6.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i4$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i8.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i8.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "component", type: i9.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage"] }, { kind: "component", type: i9.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i10.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i10.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "component", type: i7$1.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "directive", type: i6$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: KanbanCardComponent, selector: "bk-kanban-card", inputs: ["index", "mo", "viewSetting", "allAvailableAssignees"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: KanbanViewComponent, decorators: [{
397
- type: Component,
398
- args: [{ selector: 'bk-kanban-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel>\r\n <fd-layout-panel-body [bleed]=\"true\">\r\n <table fd-table *ngIf=\"isCheckList\">\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 </fd-layout-panel-body>\r\n</fd-layout-panel>\r\n\r\n<fd-layout-grid\r\n *ngIf=\"moDataList?.length; else noData\"\r\n class=\"columns\"\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 <div\r\n *ngFor=\"let column of kanbanColumns; let columnIndex = index\"\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"6\"\r\n [colLg]=\"4\"\r\n [colXl]=\"3\"\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 <div\r\n [fdLayoutGridCol]=\"12\"\r\n [colMd]=\"6\"\r\n [colLg]=\"4\"\r\n [colXl]=\"3\"\r\n class=\"newColumn\"\r\n (click)=\"onActiveNewColumnMode()\"\r\n *ngIf=\"!isNewColumnMode; else newColumnInput\"\r\n >\r\n <ng-container>\r\n <span>\u0633\u062A\u0648\u0646 \u062C\u062F\u06CC\u062F</span>\r\n </ng-container>\r\n </div>\r\n <ng-template #newColumnInput>\r\n <div [fdLayoutGridCol]=\"12\" [colMd]=\"6\" [colLg]=\"4\" [colXl]=\"3\">\r\n <input\r\n #inputEl\r\n fd-form-control\r\n type=\"text\"\r\n autofocus\r\n (focusout)=\"onCancelNewColumn()\"\r\n [(ngModel)]=\"newColumn.$Caption\"\r\n (keydown.enter)=\"onAddNewColumn()\"\r\n id=\"new-column-name\"\r\n placeholder=\" \u0646\u0627\u0645\"\r\n />\r\n </div>\r\n </ng-template>\r\n</fd-layout-grid>\r\n\r\n<!--noData-->\r\n<ng-template #noData>\r\n <bsu-no-data></bsu-no-data>\r\n</ng-template>\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 <span fd-card-title>{{ column.$Caption }}</span>\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 *ngFor=\"let mo of moDataList; let index = index\">\r\n <bk-kanban-card\r\n [mo]=\"mo\"\r\n [viewSetting]=\"viewSetting\"\r\n [formSetting]=\"formSetting\"\r\n [allAvailableAssignees]=\"allAvailableAssignees\"\r\n [index]=\"index\"\r\n *ngIf=\"mo[viewSetting.State].$Caption === column.$Caption\"\r\n [attr.id]=\"mo.Id\"\r\n [inlineEditMode]=\"true\"\r\n [isChecked]=\"true\"\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 </ng-container>\r\n </fd-card-content>\r\n <fd-card-footer class=\"column-footer\">\r\n <div class=\"new-card\" *ngIf=\"newCard[groupbyProperty] === column.$Caption; else addNewCard\">\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\r\n <ng-template #addNewCard>\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 </ng-template>\r\n </fd-card-footer>\r\n </fd-card>\r\n</ng-template>\r\n", styles: [":host{display:flex;column-gap:20px;row-gap:20px;flex-wrap:wrap;overflow:auto;padding-bottom:1rem;height:calc(100% - 38.5px)}::-webkit-scrollbar{height:7px;width:7px}::-webkit-scrollbar-track{box-shadow:inset 0 0 2px #d0cece;border-radius:10px}::-webkit-scrollbar-thumb{background:#c8cacb;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#adb0b2}.columns{height:inherit;width:100%;column-gap:15px;flex-wrap:nowrap!important}.column{height:100%;background-color:var(--sapList_Background, #fff)!important}.column.cdk-drag-placeholder{opacity:0}.column>fd-card{overflow-y:hidden;height:100%;box-shadow:none}.column>fd-card fd-card-header{border:none;background:none;padding:1rem 2rem!important}.column>fd-card fd-card-content{flex:1;overflow-y:auto;padding:0 1rem;margin:0;display:flex;flex-direction:column;row-gap:20px}.column>fd-card .column-footer{padding:1rem 1rem 1rem 1.5rem;position:sticky}.column>fd-card .column-footer .new-card{display:flex;flex-direction:column;justify-content:center;row-gap:1rem}.column>fd-card .column-footer .new-card fd-card{padding:0 1rem;background:var(--sapBackgroundColor, #f7f7f7)!important}.column>fd-card .column-footer .new-card textarea{background:var(--sapBackgroundColor, #f7f7f7)!important;border:none}.column>fd-card .column-footer .new-card span{height:auto!important}.column>fd-card .column-footer .new-card .new-card-actions{display:flex;align-items:center;column-gap:10px}.column>fd-card .column-footer .new-card .new-card-actions fd-icon{font-size:1rem}.column>fd-card .column-footer .add-new-card{padding:0 1rem}.column>fd-card .column-footer .add-new-card span{display:flex;column-gap:4px}.newColumn{background-color:var(--sapList_Background, #fff)!important;border-radius:var(--sapElement_BorderCornerRadius, .25rem);align-self:flex-start;height:100px;opacity:.5;display:flex;align-items:center;justify-content:center;border:1px dashed;position:relative;cursor:pointer}.newColumn span{position:absolute}.newColumn .new-column-popover{width:100%}.newColumn .new-column-popover fd-popover-control{width:100%;height:1px}.new-column-popover-body input{border:none}.row{display:flex;align-items:center}.drop-inside{border:1px solid #00f}.drop-inside ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-before{border-top:2px solid #00f}.drop-before ::ng-deep .fd-list__item{background-color:#dce9f6!important}.drop-after{border-bottom:2px solid #00f}.drop-after ::ng-deep .fd-list__item{background-color:#dce9f6!important}.columns.cdk-drop-list-dragging .column:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
399
- }], propDecorators: { inputEl: [{
400
- type: ViewChild,
401
- args: ['inputEl', { read: ElementRef }]
402
- }], kanbanColumns: [{
403
- type: Input
404
- }], groupbyProperty: [{
405
- type: Input
406
- }] } });
407
-
408
- const components = [
409
- KanbanViewComponent,
410
- BarsaAvatarGroupComponent,
411
- KanbanCardComponent,
412
- KanbanTagsComponent,
413
- KanbanBaseComponent
414
- ];
415
- class BarsaKanbanModule extends BaseModule {
416
- constructor(dcm, componentFactoryResolver) {
417
- super(dcm, componentFactoryResolver, 'BarsaKanbanModule');
418
- this.dcm = dcm;
419
- this.componentFactoryResolver = componentFactoryResolver;
420
- this.dynamicComponents = [...components];
421
- }
422
- }
423
- BarsaKanbanModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaKanbanModule, deps: [{ token: i2.DynamicComponentService }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.NgModule });
424
- BarsaKanbanModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: BarsaKanbanModule, declarations: [KanbanViewComponent,
425
- BarsaAvatarGroupComponent,
426
- KanbanCardComponent,
427
- KanbanTagsComponent,
428
- KanbanBaseComponent], imports: [CommonModule,
429
- BarsaNovinRayCoreModule,
430
- FundamentalNgxCoreModule,
431
- PlatformActionButtonGroupModule,
432
- PlatformMenuModule,
433
- BarsaEchartsModule,
434
- BarsaSapUiModule,
435
- FormsModule,
436
- DragDropModule,
437
- HttpClientModule], exports: [KanbanViewComponent,
438
- BarsaAvatarGroupComponent,
439
- KanbanCardComponent,
440
- KanbanTagsComponent,
441
- KanbanBaseComponent] });
442
- BarsaKanbanModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaKanbanModule, imports: [CommonModule,
443
- BarsaNovinRayCoreModule,
444
- FundamentalNgxCoreModule,
445
- PlatformActionButtonGroupModule,
446
- PlatformMenuModule,
447
- BarsaEchartsModule,
448
- BarsaSapUiModule,
449
- FormsModule,
450
- DragDropModule,
451
- HttpClientModule] });
452
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaKanbanModule, decorators: [{
453
- type: NgModule,
454
- args: [{
455
- declarations: [...components],
456
- schemas: [NO_ERRORS_SCHEMA],
457
- imports: [
458
- CommonModule,
459
- BarsaNovinRayCoreModule,
460
- FundamentalNgxCoreModule,
461
- PlatformActionButtonGroupModule,
462
- PlatformMenuModule,
463
- BarsaEchartsModule,
464
- BarsaSapUiModule,
465
- FormsModule,
466
- DragDropModule,
467
- HttpClientModule
468
- ],
469
- exports: [...components]
470
- }]
471
- }], ctorParameters: function () { return [{ type: i2.DynamicComponentService }, { type: i0.ComponentFactoryResolver }]; } });
472
-
473
- /**
474
- * Generated bundle index. Do not edit.
475
- */
476
-
477
- export { BarsaAvatarGroupComponent, BarsaKanbanModule, KanbanBaseComponent, KanbanCardComponent, KanbanTagsComponent, KanbanViewComponent };
478
- //# sourceMappingURL=barsa-kanban.mjs.map