keevo-components 2.0.229 → 2.0.231

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,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3Yta2FuYmFuLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWthbmJhbi9rdi1rYW5iYW4tbW9kZWxzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEthbmJhbkFjdGlvbiB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGFjdGlvbkNvZGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLYW5iYW5DYXJkIHtcclxuICBpZD86IG51bWJlciB8IHN0cmluZztcclxuICB0aXR1bG86IHN0cmluZztcclxuICBzdGF0dXM6IHN0cmluZztcclxuICBzdGF0dXNDb2xvcj86IHN0cmluZztcclxuICBzdGF0dXNMYWJlbENvbG9yPzogc3RyaW5nO1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLYW5iYW5Db2x1bW5Db25maWcge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbm9tZTogc3RyaW5nO1xyXG4gIGNvbnRhZG9yOiBudW1iZXI7XHJcbiAgY29yVGl0dWxvOiBzdHJpbmc7XHJcbiAgcXVhbnRpZGFkZUNhcmRzSW5pY2lhbD86IG51bWJlcjtcclxuICBxdWFudGlkYWRlQ2FyZHNQYWdpbmFjYW8/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2FuYmFuQ29sdW1uTGlzdCB7XHJcbiAgaWRDb2x1bmE6IG51bWJlcjtcclxuICBsaXN0YWdlbTogS2FuYmFuQ2FyZFtdO1xyXG4gIHF1YW50aWRhZGVNYXhpbWFSZWdpc3Ryb3NQYWdpbmFjYW86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLYW5iYW5Db2x1bW4ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBoZWFkZXJDb2xvcjogc3RyaW5nO1xyXG4gIHRvdGFsSXRlbXM6IG51bWJlcjtcclxuICB2aXNpYmxlTGltaXQ/OiBudW1iZXI7XHJcbiAgaXRlbXM6IEthbmJhbkNhcmRbXTtcclxufSJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3Yta2FuYmFuLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWthbmJhbi9rdi1rYW5iYW4tbW9kZWxzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEthbmJhbkFjdGlvbiB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGFjdGlvbkNvZGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLYW5iYW5DYXJkIHtcclxuICBpZD86IG51bWJlciB8IHN0cmluZztcclxuICB0aXR1bG86IHN0cmluZztcclxuICBzdGF0dXM/OiBzdHJpbmc7XHJcbiAgc3RhdHVzQ29sb3I/OiBzdHJpbmc7XHJcbiAgc3RhdHVzTGFiZWxDb2xvcj86IHN0cmluZztcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2FuYmFuQ29sdW1uQ29uZmlnIHtcclxuICBpZDogbnVtYmVyO1xyXG4gIG5vbWU6IHN0cmluZztcclxuICBjb250YWRvcjogbnVtYmVyO1xyXG4gIGNvclRpdHVsbzogc3RyaW5nO1xyXG4gIHF1YW50aWRhZGVDYXJkc0luaWNpYWw/OiBudW1iZXI7XHJcbiAgcXVhbnRpZGFkZUNhcmRzUGFnaW5hY2FvPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEthbmJhbkNvbHVtbkxpc3Qge1xyXG4gIGlkQ29sdW5hOiBudW1iZXI7XHJcbiAgbGlzdGFnZW06IEthbmJhbkNhcmRbXTtcclxuICBxdWFudGlkYWRlTWF4aW1hUmVnaXN0cm9zUGFnaW5hY2FvOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2FuYmFuQ29sdW1uIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgaGVhZGVyQ29sb3I6IHN0cmluZztcclxuICB0b3RhbEl0ZW1zOiBudW1iZXI7XHJcbiAgdmlzaWJsZUxpbWl0PzogbnVtYmVyO1xyXG4gIGl0ZW1zOiBLYW5iYW5DYXJkW107XHJcbn0iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, computed, input, output } from '@angular/core';
1
+ import { Component, computed, input, output, viewChild } from '@angular/core';
2
2
  import { DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { MenuModule } from 'primeng/menu';
@@ -8,6 +8,8 @@ import * as i2 from "@angular/cdk/drag-drop";
8
8
  import * as i3 from "primeng/menu";
9
9
  export class KvKanbanComponent {
10
10
  constructor() {
11
+ this.sharedMenu = viewChild('sharedMenu');
12
+ this.currentMenuOptions = [];
11
13
  this.actions = input([]);
12
14
  this.columnConfigs = input([]);
13
15
  this.columnLists = input([]);
@@ -41,6 +43,11 @@ export class KvKanbanComponent {
41
43
  this.onActionClicked.emit({ action: actionCode, card });
42
44
  this.onSelectedCard.emit(card);
43
45
  }
46
+ openCardMenu(event, item) {
47
+ event.stopPropagation();
48
+ this.currentMenuOptions = this.getActionsForCard(item);
49
+ this.sharedMenu()?.toggle(event);
50
+ }
44
51
  onScroll(event, columnId) {
45
52
  const element = event.target;
46
53
  const threshold = 50;
@@ -63,11 +70,17 @@ export class KvKanbanComponent {
63
70
  }
64
71
  }));
65
72
  }
73
+ getColumnFlex() {
74
+ const totalColumns = this.columnConfigs().length;
75
+ if (totalColumns === 0)
76
+ return '1 1 280px';
77
+ return `1 1 calc((100% - ${(totalColumns - 1) * 16}px) / ${totalColumns})`;
78
+ }
66
79
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvKanbanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvKanbanComponent, isStandalone: true, selector: "kv-kanban", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, columnConfigs: { classPropertyName: "columnConfigs", publicName: "columnConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnLists: { classPropertyName: "columnLists", publicName: "columnLists", isSignal: true, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: true, isRequired: false, transformFunction: null }, showColumnsCounter: { classPropertyName: "showColumnsCounter", publicName: "showColumnsCounter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onCardMoved: "onCardMoved", onActionClicked: "onActionClicked", onLoadMoreCards: "onLoadMoreCards", onSelectedCard: "onSelectedCard" }, ngImport: i0, template: "<div class=\"flex w-full h-full\">\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\n \n <div class=\"board-column\" *ngFor=\"let config of columnConfigs()\">\n \n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\n @if(this.showColumnsCounter()) {\n <span class=\"column-count-badge\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\n }\n </div>\n\n <div \n class=\"column-content\"\n cdkDropList\n [id]=\"config.id.toString()\"\n [cdkDropListData]=\"getColumnList()(config.id)\"\n (cdkDropListDropped)=\"drop($event)\"\n (scroll)=\"onScroll($event, config.id)\">\n\n <div class=\"kanban-card\" *ngFor=\"let item of getColumnList()(config.id)\" cdkDrag>\n \n <div class=\"card-header\">\n <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \n [style.backgroundColor]=\"item.statusColor\"\n [style.color]=\"item.statusLabelColor\">\n {{ item.status }}\n </span>\n \n <p-menu #menu [model]=\"getActionsForCard(item)\" [popup]=\"true\"></p-menu>\n <span class=\"material-symbols-outlined border-round-lg text-xl text-black-alpha-50 hover:surface-200\" (click)=\"menu.toggle($event)\">more_vert</span>\n </div>\n\n <div class=\"card-body ml-1\">\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2\">{{ item.titulo }}</p>\n \n <ng-container *ngTemplateOutlet=\"cardTemplate(); context: { $implicit: item }\"></ng-container>\n </div>\n\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\n </div>\n\n </div>\n\n <div class=\"column-footer text-xs text-black-alpha-80\">\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\n </div>\n\n </div>\n </div>\n</div>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{flex:1 1 0%;display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600}.column-header .column-count-badge{background-color:#ffffffe6;padding:2px 8px;border-radius:12px;font-size:.85rem;font-weight:700}.column-content{flex-grow:1;overflow-y:auto;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;justify-content:space-between;margin-bottom:8px}.card-header .priority-tag{font-size:.75rem;padding:4px 8px;border-radius:4px;font-weight:600}.card-header .kebab-btn{background:none;border:none;font-size:1.2rem;cursor:pointer;color:#888;line-height:.5}.dropdown{position:relative}.dropdown:hover .dropdown-content{display:block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:120px;box-shadow:0 8px 16px #0003;z-index:1;border-radius:4px}.dropdown-content a{color:#000;padding:8px 12px;text-decoration:none;display:block;font-size:.9rem;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.card-meta{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#777;margin-top:4px}.card-meta i{font-style:normal}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}p-menu>::ng-deep div{scale:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.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: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2.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: "directive", type: i2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }] }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvKanbanComponent, isStandalone: true, selector: "kv-kanban", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, columnConfigs: { classPropertyName: "columnConfigs", publicName: "columnConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnLists: { classPropertyName: "columnLists", publicName: "columnLists", isSignal: true, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: true, isRequired: false, transformFunction: null }, showColumnsCounter: { classPropertyName: "showColumnsCounter", publicName: "showColumnsCounter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onCardMoved: "onCardMoved", onActionClicked: "onActionClicked", onLoadMoreCards: "onLoadMoreCards", onSelectedCard: "onSelectedCard" }, viewQueries: [{ propertyName: "sharedMenu", first: true, predicate: ["sharedMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex w-full h-full\">\r\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\r\n \r\n @for(config of columnConfigs(); track $index) {\r\n\r\n <div class=\"board-column\" [style.flex]=\"getColumnFlex()\">\r\n \r\n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\r\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\r\n @if(this.showColumnsCounter()) {\r\n <span class=\"column-count-badge px-2 py-1\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\r\n }\r\n </div>\r\n\r\n <div \r\n class=\"column-content\"\r\n cdkDropList\r\n [id]=\"config.id.toString()\"\r\n [cdkDropListData]=\"getColumnList()(config.id)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (scroll)=\"onScroll($event, config.id)\">\r\n\r\n\r\n @for(item of getColumnList()(config.id); track $index) {\r\n \r\n <div class=\"kanban-card\" cdkDrag>\r\n\r\n @if(actions().length > 0) {\r\n <span class=\"material-symbols-outlined card-menu-btn text-xl text-black-alpha-50 hover:surface-200 border-round-lg\" (click)=\"openCardMenu($event, item)\">\r\n more_vert\r\n </span>\r\n }\r\n \r\n\r\n @if (item.status) {\r\n <div class=\"card-header mt-1\"> <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \r\n [style.backgroundColor]=\"item.statusColor\"\r\n [style.color]=\"item.statusLabelColor\">\r\n {{ item.status }}\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"card-body ml-1\">\r\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2 pr-4\">\r\n {{ item.titulo }}\r\n </p>\r\n \r\n <ng-container [ngTemplateOutlet]=\"cardTemplate()\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </div>\r\n\r\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"column-footer text-xs text-black-alpha-80\">\r\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\r\n </div>\r\n\r\n </div>\r\n\r\n }\r\n\r\n </div>\r\n</div>\r\n\r\n<p-menu #sharedMenu [model]=\"currentMenuOptions\" [popup]=\"true\" appendTo=\"body\"></p-menu>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px;min-width:280px;overflow:visible}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600;gap:8px}.column-header span:first-child{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.column-header .column-count-badge{background-color:#ffffffe6;border-radius:12px;font-size:.85rem;font-weight:700;flex-shrink:0}.column-content{flex-grow:1;overflow-y:auto;overflow-x:visible;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s;position:relative}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;margin-bottom:8px}.card-menu-btn{position:absolute;top:12px;right:8px;cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-menu{scale:.8;z-index:1000!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.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: i2.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2.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: "directive", type: i2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }] }); }
68
81
  }
69
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvKanbanComponent, decorators: [{
70
83
  type: Component,
71
- args: [{ standalone: true, selector: 'kv-kanban', imports: [CommonModule, DragDropModule, MenuModule], template: "<div class=\"flex w-full h-full\">\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\n \n <div class=\"board-column\" *ngFor=\"let config of columnConfigs()\">\n \n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\n @if(this.showColumnsCounter()) {\n <span class=\"column-count-badge\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\n }\n </div>\n\n <div \n class=\"column-content\"\n cdkDropList\n [id]=\"config.id.toString()\"\n [cdkDropListData]=\"getColumnList()(config.id)\"\n (cdkDropListDropped)=\"drop($event)\"\n (scroll)=\"onScroll($event, config.id)\">\n\n <div class=\"kanban-card\" *ngFor=\"let item of getColumnList()(config.id)\" cdkDrag>\n \n <div class=\"card-header\">\n <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \n [style.backgroundColor]=\"item.statusColor\"\n [style.color]=\"item.statusLabelColor\">\n {{ item.status }}\n </span>\n \n <p-menu #menu [model]=\"getActionsForCard(item)\" [popup]=\"true\"></p-menu>\n <span class=\"material-symbols-outlined border-round-lg text-xl text-black-alpha-50 hover:surface-200\" (click)=\"menu.toggle($event)\">more_vert</span>\n </div>\n\n <div class=\"card-body ml-1\">\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2\">{{ item.titulo }}</p>\n \n <ng-container *ngTemplateOutlet=\"cardTemplate(); context: { $implicit: item }\"></ng-container>\n </div>\n\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\n </div>\n\n </div>\n\n <div class=\"column-footer text-xs text-black-alpha-80\">\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\n </div>\n\n </div>\n </div>\n</div>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{flex:1 1 0%;display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600}.column-header .column-count-badge{background-color:#ffffffe6;padding:2px 8px;border-radius:12px;font-size:.85rem;font-weight:700}.column-content{flex-grow:1;overflow-y:auto;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;justify-content:space-between;margin-bottom:8px}.card-header .priority-tag{font-size:.75rem;padding:4px 8px;border-radius:4px;font-weight:600}.card-header .kebab-btn{background:none;border:none;font-size:1.2rem;cursor:pointer;color:#888;line-height:.5}.dropdown{position:relative}.dropdown:hover .dropdown-content{display:block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:120px;box-shadow:0 8px 16px #0003;z-index:1;border-radius:4px}.dropdown-content a{color:#000;padding:8px 12px;text-decoration:none;display:block;font-size:.9rem;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.card-meta{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#777;margin-top:4px}.card-meta i{font-style:normal}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}p-menu>::ng-deep div{scale:.8}\n"] }]
84
+ args: [{ standalone: true, selector: 'kv-kanban', imports: [CommonModule, DragDropModule, MenuModule], template: "<div class=\"flex w-full h-full\">\r\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\r\n \r\n @for(config of columnConfigs(); track $index) {\r\n\r\n <div class=\"board-column\" [style.flex]=\"getColumnFlex()\">\r\n \r\n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\r\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\r\n @if(this.showColumnsCounter()) {\r\n <span class=\"column-count-badge px-2 py-1\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\r\n }\r\n </div>\r\n\r\n <div \r\n class=\"column-content\"\r\n cdkDropList\r\n [id]=\"config.id.toString()\"\r\n [cdkDropListData]=\"getColumnList()(config.id)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (scroll)=\"onScroll($event, config.id)\">\r\n\r\n\r\n @for(item of getColumnList()(config.id); track $index) {\r\n \r\n <div class=\"kanban-card\" cdkDrag>\r\n\r\n @if(actions().length > 0) {\r\n <span class=\"material-symbols-outlined card-menu-btn text-xl text-black-alpha-50 hover:surface-200 border-round-lg\" (click)=\"openCardMenu($event, item)\">\r\n more_vert\r\n </span>\r\n }\r\n \r\n\r\n @if (item.status) {\r\n <div class=\"card-header mt-1\"> <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \r\n [style.backgroundColor]=\"item.statusColor\"\r\n [style.color]=\"item.statusLabelColor\">\r\n {{ item.status }}\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"card-body ml-1\">\r\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2 pr-4\">\r\n {{ item.titulo }}\r\n </p>\r\n \r\n <ng-container [ngTemplateOutlet]=\"cardTemplate()\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </div>\r\n\r\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"column-footer text-xs text-black-alpha-80\">\r\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\r\n </div>\r\n\r\n </div>\r\n\r\n }\r\n\r\n </div>\r\n</div>\r\n\r\n<p-menu #sharedMenu [model]=\"currentMenuOptions\" [popup]=\"true\" appendTo=\"body\"></p-menu>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px;min-width:280px;overflow:visible}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600;gap:8px}.column-header span:first-child{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.column-header .column-count-badge{background-color:#ffffffe6;border-radius:12px;font-size:.85rem;font-weight:700;flex-shrink:0}.column-content{flex-grow:1;overflow-y:auto;overflow-x:visible;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s;position:relative}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;margin-bottom:8px}.card-menu-btn{position:absolute;top:12px;right:8px;cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-menu{scale:.8;z-index:1000!important}\n"] }]
72
85
  }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3Yta2FuYmFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWthbmJhbi9rdi1rYW5iYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3Yta2FuYmFuL2t2LWthbmJhbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBZSxjQUFjLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBVTFDLE1BQU0sT0FBTyxpQkFBaUI7SUFQOUI7UUFTRSxZQUFPLEdBQUcsS0FBSyxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsS0FBSyxDQUF1QixFQUFFLENBQUMsQ0FBQztRQUNoRCxnQkFBVyxHQUFHLEtBQUssQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFDNUMsaUJBQVksR0FBRyxLQUFLLENBQTBCLElBQUksQ0FBQyxDQUFDO1FBQ3BELHVCQUFrQixHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUMxQyxnQkFBVyxHQUFHLE1BQU0sRUFBTyxDQUFDO1FBQzVCLG9CQUFlLEdBQUcsTUFBTSxFQUF3QyxDQUFDO1FBQ2pFLG9CQUFlLEdBQUcsTUFBTSxFQUF3QixDQUFDO1FBQ2pELG1CQUFjLEdBQUcsTUFBTSxFQUFjLENBQUM7UUFFdEMsa0JBQWEs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OzhHQXRFVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix3NkJDZDlCLHdpRUFrRE0sd25FRHRDTSxZQUFZLDBYQUFFLGNBQWMsd3RDQUFFLFVBQVU7OzJGQUV2QyxpQkFBaUI7a0JBUDdCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFdBQVcsV0FHWixDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS2FuYmFuQ29sdW1uLCBLYW5iYW5DYXJkLCBLYW5iYW5BY3Rpb24sIEthbmJhbkNvbHVtbkNvbmZpZywgS2FuYmFuQ29sdW1uTGlzdCB9IGZyb20gJy4va3Yta2FuYmFuLW1vZGVscy5tb2RlbCc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGUsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNZW51TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tZW51JztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdrdi1rYW5iYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4va3Yta2FuYmFuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4va3Yta2FuYmFuLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERyYWdEcm9wTW9kdWxlLCBNZW51TW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBLdkthbmJhbkNvbXBvbmVudCB7XG5cbiAgYWN0aW9ucyA9IGlucHV0PE1lbnVJdGVtW10+KFtdKTtcbiAgY29sdW1uQ29uZmlncyA9IGlucHV0PEthbmJhbkNvbHVtbkNvbmZpZ1tdPihbXSk7XG4gIGNvbHVtbkxpc3RzID0gaW5wdXQ8S2FuYmFuQ29sdW1uTGlzdFtdPihbXSk7XG4gIGNhcmRUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcbiAgc2hvd0NvbHVtbnNDb3VudGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIG9uQ2FyZE1vdmVkID0gb3V0cHV0PGFueT4oKTtcbiAgb25BY3Rpb25DbGlja2VkID0gb3V0cHV0PHsgYWN0aW9uOiBzdHJpbmcsIGNhcmQ6IEthbmJhbkNhcmQgfT4oKTtcbiAgb25Mb2FkTW9yZUNhcmRzID0gb3V0cHV0PHsgY29sdW1uSWQ6IG51bWJlciB9PigpO1xuICBvblNlbGVjdGVkQ2FyZCA9IG91dHB1dDxLYW5iYW5DYXJkPigpO1xuXG4gIGdldENvbHVtbkxpc3QgPSBjb21wdXRlZCgoKSA9PiAoY29sdW1uSWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmNvbHVtbkxpc3RzKCkuZmluZChsID0+IGwuaWRDb2x1bmEgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gbGlzdD8ubGlzdGFnZW0gfHwgW10gYXMgS2FuYmFuQ2FyZFtdO1xuICB9KTtcblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxLYW5iYW5DYXJkW10+KSB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkQ2FyZCA9IGV2ZW50LmNvbnRhaW5lci5kYXRhW2V2ZW50LmN1cnJlbnRJbmRleF07XG4gICAgXG4gICAgdGhpcy5vbkNhcmRNb3ZlZC5lbWl0KHtcbiAgICAgIGl0ZW06IG1vdmVkQ2FyZCxcbiAgICAgIGZyb21Db2x1bW5JZDogZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQsXG4gICAgICB0b0NvbHVtbklkOiBldmVudC5jb250YWluZXIuaWRcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLm9uU2VsZWN0ZWRDYXJkLmVtaXQobW92ZWRDYXJkKTtcbiAgfVxuXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uQ29kZTogc3RyaW5nLCBjYXJkOiBLYW5iYW5DYXJkKSB7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrZWQuZW1pdCh7IGFjdGlvbjogYWN0aW9uQ29kZSwgY2FyZCB9KTtcbiAgICBcbiAgICB0aGlzLm9uU2VsZWN0ZWRDYXJkLmVtaXQoY2FyZCk7XG4gIH1cblxuICBvblNjcm9sbChldmVudDogRXZlbnQsIGNvbHVtbklkOiBudW1iZXIpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDUwO1xuICAgIGNvbnN0IGF0Qm90dG9tID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCAtIGVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgdGhyZXNob2xkO1xuICAgIFxuICAgIGlmIChhdEJvdHRvbSkge1xuICAgICAgdGhpcy5vbkxvYWRNb3JlQ2FyZHMuZW1pdCh7IGNvbHVtbklkIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtblRvdGFsSXRlbXMoY29sdW1uSWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb2x1bW5Db25maWdzKCkuZmluZChjID0+IGMuaWQgPT09IGNvbHVtbklkKTtcbiAgICByZXR1cm4gY29uZmlnPy5jb250YWRvciB8fCAwO1xuICB9XG5cbiAgZ2V0QWN0aW9uc0ZvckNhcmQoY2FyZDogS2FuYmFuQ2FyZCk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbnMoKS5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAuLi5hY3Rpb24sXG4gICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24ubGFiZWwpIHtcbiAgICAgICAgICB0aGlzLm9uQWN0aW9uQ2xpY2soYWN0aW9uLmxhYmVsLCBjYXJkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaC1mdWxsXCI+XG4gIDxkaXYgY2xhc3M9XCJib2FyZC13cmFwcGVyIGZsZXgtY29sdW1uIGxnOmZsZXgtcm93XCIgY2RrRHJvcExpc3RHcm91cD5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiYm9hcmQtY29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb2x1bW5Db25maWdzKClcIj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbmZpZy5jb3JUaXR1bG9cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZFwiPnt7IGNvbmZpZy5ub21lIH19PC9zcGFuPlxuICAgICAgICBAaWYodGhpcy5zaG93Q29sdW1uc0NvdW50ZXIoKSkge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWNvdW50LWJhZGdlXCIgW3N0eWxlLmNvbG9yXT1cImNvbmZpZy5jb3JUaXR1bG9cIj57eyBjb25maWcuY29udGFkb3IgfCBudW1iZXI6JzIuMCcgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IFxuICAgICAgICBjbGFzcz1cImNvbHVtbi1jb250ZW50XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgW2lkXT1cImNvbmZpZy5pZC50b1N0cmluZygpXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJnZXRDb2x1bW5MaXN0KCkoY29uZmlnLmlkKVwiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICAgICAgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQsIGNvbmZpZy5pZClcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWNhcmRcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRDb2x1bW5MaXN0KCkoY29uZmlnLmlkKVwiIGNka0RyYWc+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy10YWcgdGV4dC14cyBib3JkZXItcm91bmQtM3hsIHB5LTEgcHgtMlwiIFxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLnN0YXR1c0NvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJpdGVtLnN0YXR1c0xhYmVsQ29sb3JcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5zdGF0dXMgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiZ2V0QWN0aW9uc0ZvckNhcmQoaXRlbSlcIiBbcG9wdXBdPVwidHJ1ZVwiPjwvcC1tZW51PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJvcmRlci1yb3VuZC1sZyB0ZXh0LXhsIHRleHQtYmxhY2stYWxwaGEtNTAgaG92ZXI6c3VyZmFjZS0yMDBcIiAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KVwiPm1vcmVfdmVydDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbWwtMVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJwLTAgbS0wIHRleHQtc20gdGV4dC1ibGFjay1hbHBoYS03MCBmb250LXNlbWlib2xkIG1iLTJcIj57eyBpdGVtLnRpdHVsbyB9fTwvcD5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhcmRUZW1wbGF0ZSgpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpjZGtEcmFnUGxhY2Vob2xkZXIgY2xhc3M9XCJjdXN0b20tcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWZvb3RlciB0ZXh0LXhzIHRleHQtYmxhY2stYWxwaGEtODBcIj5cbiAgICAgICAgVmVyIHt7IGdldENvbHVtbkxpc3QoKShjb25maWcuaWQpLmxlbmd0aCB9fSBkZSB7eyBjb25maWcuY29udGFkb3IgfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3Yta2FuYmFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWthbmJhbi9rdi1rYW5iYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3Yta2FuYmFuL2t2LWthbmJhbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRyxPQUFPLEVBQWUsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sY0FBYyxDQUFDOzs7OztBQVVoRCxNQUFNLE9BQU8saUJBQWlCO0lBUDlCO1FBU0UsZUFBVSxHQUFHLFNBQVMsQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUUzQyx1QkFBa0IsR0FBZSxFQUFFLENBQUM7UUFFcEMsWUFBTyxHQUFHLEtBQUssQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUNoQyxrQkFBYSxHQUFHLEtBQUssQ0FBdUIsRUFBRSxDQUFDLENBQUM7UUFDaEQsZ0JBQVcsR0FBRyxLQUFLLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLGlCQUFZLEdBQUcsS0FBSyxDQUEwQixJQUFJLENBQUMsQ0FBQztRQUNwRCx1QkFBa0IsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxNQUFNLEVBQU8sQ0FBQztRQUM1QixvQkFBZSxHQUFHLE1BQU0sRUFBd0MsQ0FB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LENBQUMsSUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxHQUFHLE1BQU07WUFDVCxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNaLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU8sV0FBVyxDQUFDO1FBRTNDLE9BQU8sb0JBQW9CLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxZQUFZLEdBQUcsQ0FBQztJQUM3RSxDQUFDOzhHQXpGVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixraUNDZDlCLHluRkFvRXlGLGdzRER4RDdFLFlBQVksNlBBQUUsY0FBYyx3dENBQUUsVUFBVTs7MkZBRXZDLGlCQUFpQjtrQkFQN0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sV0FBVyxXQUdaLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgT25Jbml0LCBvdXRwdXQsIFRlbXBsYXRlUmVmLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEthbmJhbkNvbHVtbiwgS2FuYmFuQ2FyZCwgS2FuYmFuQWN0aW9uLCBLYW5iYW5Db2x1bW5Db25maWcsIEthbmJhbkNvbHVtbkxpc3QgfSBmcm9tICcuL2t2LWthbmJhbi1tb2RlbHMubW9kZWwnO1xuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIERyYWdEcm9wTW9kdWxlLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWVudU1vZHVsZSwgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAna3Yta2FuYmFuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWthbmJhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LWthbmJhbi5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEcmFnRHJvcE1vZHVsZSwgTWVudU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgS3ZLYW5iYW5Db21wb25lbnQge1xuXG4gIHNoYXJlZE1lbnUgPSB2aWV3Q2hpbGQ8TWVudT4oJ3NoYXJlZE1lbnUnKTtcblxuICBjdXJyZW50TWVudU9wdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcblxuICBhY3Rpb25zID0gaW5wdXQ8TWVudUl0ZW1bXT4oW10pO1xuICBjb2x1bW5Db25maWdzID0gaW5wdXQ8S2FuYmFuQ29sdW1uQ29uZmlnW10+KFtdKTtcbiAgY29sdW1uTGlzdHMgPSBpbnB1dDxLYW5iYW5Db2x1bW5MaXN0W10+KFtdKTtcbiAgY2FyZFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuICBzaG93Q29sdW1uc0NvdW50ZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgb25DYXJkTW92ZWQgPSBvdXRwdXQ8YW55PigpO1xuICBvbkFjdGlvbkNsaWNrZWQgPSBvdXRwdXQ8eyBhY3Rpb246IHN0cmluZywgY2FyZDogS2FuYmFuQ2FyZCB9PigpO1xuICBvbkxvYWRNb3JlQ2FyZHMgPSBvdXRwdXQ8eyBjb2x1bW5JZDogbnVtYmVyIH0+KCk7XG4gIG9uU2VsZWN0ZWRDYXJkID0gb3V0cHV0PEthbmJhbkNhcmQ+KCk7XG5cbiAgZ2V0Q29sdW1uTGlzdCA9IGNvbXB1dGVkKCgpID0+IChjb2x1bW5JZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuY29sdW1uTGlzdHMoKS5maW5kKGwgPT4gbC5pZENvbHVuYSA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBsaXN0Py5saXN0YWdlbSB8fCBbXSBhcyBLYW5iYW5DYXJkW107XG4gIH0pO1xuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEthbmJhbkNhcmRbXT4pIHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2ZlckFycmF5SXRlbShcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbW92ZWRDYXJkID0gZXZlbnQuY29udGFpbmVyLmRhdGFbZXZlbnQuY3VycmVudEluZGV4XTtcbiAgICBcbiAgICB0aGlzLm9uQ2FyZE1vdmVkLmVtaXQoe1xuICAgICAgaXRlbTogbW92ZWRDYXJkLFxuICAgICAgZnJvbUNvbHVtbklkOiBldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCxcbiAgICAgIHRvQ29sdW1uSWQ6IGV2ZW50LmNvbnRhaW5lci5pZFxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMub25TZWxlY3RlZENhcmQuZW1pdChtb3ZlZENhcmQpO1xuICB9XG5cbiAgb25BY3Rpb25DbGljayhhY3Rpb25Db2RlOiBzdHJpbmcsIGNhcmQ6IEthbmJhbkNhcmQpIHtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tlZC5lbWl0KHsgYWN0aW9uOiBhY3Rpb25Db2RlLCBjYXJkIH0pO1xuICAgIFxuICAgIHRoaXMub25TZWxlY3RlZENhcmQuZW1pdChjYXJkKTtcbiAgfVxuXG4gIG9wZW5DYXJkTWVudShldmVudDogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLmN1cnJlbnRNZW51T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aW9uc0ZvckNhcmQoaXRlbSk7XG5cbiAgICB0aGlzLnNoYXJlZE1lbnUoKT8udG9nZ2xlKGV2ZW50KTtcbiAgfVxuXG4gIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCwgY29sdW1uSWQ6IG51bWJlcikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGhyZXNob2xkID0gNTA7XG4gICAgY29uc3QgYXRCb3R0b20gPSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wIC0gZWxlbWVudC5jbGllbnRIZWlnaHQgPCB0aHJlc2hvbGQ7XG4gICAgXG4gICAgaWYgKGF0Qm90dG9tKSB7XG4gICAgICB0aGlzLm9uTG9hZE1vcmVDYXJkcy5lbWl0KHsgY29sdW1uSWQgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uVG90YWxJdGVtcyhjb2x1bW5JZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbHVtbkNvbmZpZ3MoKS5maW5kKGMgPT4gYy5pZCA9PT0gY29sdW1uSWQpO1xuICAgIHJldHVybiBjb25maWc/LmNvbnRhZG9yIHx8IDA7XG4gIH1cblxuICBnZXRBY3Rpb25zRm9yQ2FyZChjYXJkOiBLYW5iYW5DYXJkKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucygpLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgIC4uLmFjdGlvbixcbiAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgaWYgKGFjdGlvbi5sYWJlbCkge1xuICAgICAgICAgIHRoaXMub25BY3Rpb25DbGljayhhY3Rpb24ubGFiZWwsIGNhcmQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgZ2V0Q29sdW1uRmxleCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuY29sdW1uQ29uZmlncygpLmxlbmd0aDtcbiAgICBpZiAodG90YWxDb2x1bW5zID09PSAwKSByZXR1cm4gJzEgMSAyODBweCc7XG4gICAgXG4gICAgcmV0dXJuIGAxIDEgY2FsYygoMTAwJSAtICR7KHRvdGFsQ29sdW1ucyAtIDEpICogMTZ9cHgpIC8gJHt0b3RhbENvbHVtbnN9KWA7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJib2FyZC13cmFwcGVyIGZsZXgtY29sdW1uIGxnOmZsZXgtcm93XCIgY2RrRHJvcExpc3RHcm91cD5cclxuICAgIFxyXG4gICAgQGZvcihjb25maWcgb2YgY29sdW1uQ29uZmlncygpOyB0cmFjayAkaW5kZXgpIHtcclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib2FyZC1jb2x1bW5cIiBbc3R5bGUuZmxleF09XCJnZXRDb2x1bW5GbGV4KClcIj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlclwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29uZmlnLmNvclRpdHVsb1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZFwiPnt7IGNvbmZpZy5ub21lIH19PC9zcGFuPlxyXG4gICAgICAgICAgQGlmKHRoaXMuc2hvd0NvbHVtbnNDb3VudGVyKCkpIHtcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4tY291bnQtYmFkZ2UgcHgtMiBweS0xXCIgW3N0eWxlLmNvbG9yXT1cImNvbmZpZy5jb3JUaXR1bG9cIj57eyBjb25maWcuY29udGFkb3IgfCBudW1iZXI6JzIuMCcgfX08L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzcz1cImNvbHVtbi1jb250ZW50XCJcclxuICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICBbaWRdPVwiY29uZmlnLmlkLnRvU3RyaW5nKClcIlxyXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJnZXRDb2x1bW5MaXN0KCkoY29uZmlnLmlkKVwiXHJcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudCwgY29uZmlnLmlkKVwiPlxyXG5cclxuXHJcbiAgICAgICAgICBAZm9yKGl0ZW0gb2YgZ2V0Q29sdW1uTGlzdCgpKGNvbmZpZy5pZCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1jYXJkXCIgY2RrRHJhZz5cclxuXHJcbiAgICAgICAgICAgICAgQGlmKGFjdGlvbnMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY2FyZC1tZW51LWJ0biB0ZXh0LXhsIHRleHQtYmxhY2stYWxwaGEtNTAgaG92ZXI6c3VyZmFjZS0yMDAgYm9yZGVyLXJvdW5kLWxnXCIgKGNsaWNrKT1cIm9wZW5DYXJkTWVudSgkZXZlbnQsIGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgIG1vcmVfdmVydFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgQGlmIChpdGVtLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIG10LTFcIj4gPHNwYW4gY2xhc3M9XCJzdGF0dXMtdGFnIHRleHQteHMgYm9yZGVyLXJvdW5kLTN4bCBweS0xIHB4LTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLnN0YXR1c0NvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIml0ZW0uc3RhdHVzTGFiZWxDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBtbC0xXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInAtMCBtLTAgdGV4dC1zbSB0ZXh0LWJsYWNrLWFscGhhLTcwIGZvbnQtc2VtaWJvbGQgbWItMiBwci00XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0dWxvIH19XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FyZFRlbXBsYXRlKClcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpjZGtEcmFnUGxhY2Vob2xkZXIgY2xhc3M9XCJjdXN0b20tcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWZvb3RlciB0ZXh0LXhzIHRleHQtYmxhY2stYWxwaGEtODBcIj5cclxuICAgICAgICAgIFZlciB7eyBnZXRDb2x1bW5MaXN0KCkoY29uZmlnLmlkKS5sZW5ndGggfX0gZGUge3sgY29uZmlnLmNvbnRhZG9yIH19XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICB9XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxwLW1lbnUgI3NoYXJlZE1lbnUgW21vZGVsXT1cImN1cnJlbnRNZW51T3B0aW9uc1wiIFtwb3B1cF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW1lbnU+Il19
@@ -14180,6 +14180,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
14180
14180
 
14181
14181
  class KvKanbanComponent {
14182
14182
  constructor() {
14183
+ this.sharedMenu = viewChild('sharedMenu');
14184
+ this.currentMenuOptions = [];
14183
14185
  this.actions = input([]);
14184
14186
  this.columnConfigs = input([]);
14185
14187
  this.columnLists = input([]);
@@ -14213,6 +14215,11 @@ class KvKanbanComponent {
14213
14215
  this.onActionClicked.emit({ action: actionCode, card });
14214
14216
  this.onSelectedCard.emit(card);
14215
14217
  }
14218
+ openCardMenu(event, item) {
14219
+ event.stopPropagation();
14220
+ this.currentMenuOptions = this.getActionsForCard(item);
14221
+ this.sharedMenu()?.toggle(event);
14222
+ }
14216
14223
  onScroll(event, columnId) {
14217
14224
  const element = event.target;
14218
14225
  const threshold = 50;
@@ -14235,12 +14242,18 @@ class KvKanbanComponent {
14235
14242
  }
14236
14243
  }));
14237
14244
  }
14245
+ getColumnFlex() {
14246
+ const totalColumns = this.columnConfigs().length;
14247
+ if (totalColumns === 0)
14248
+ return '1 1 280px';
14249
+ return `1 1 calc((100% - ${(totalColumns - 1) * 16}px) / ${totalColumns})`;
14250
+ }
14238
14251
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvKanbanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14239
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvKanbanComponent, isStandalone: true, selector: "kv-kanban", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, columnConfigs: { classPropertyName: "columnConfigs", publicName: "columnConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnLists: { classPropertyName: "columnLists", publicName: "columnLists", isSignal: true, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: true, isRequired: false, transformFunction: null }, showColumnsCounter: { classPropertyName: "showColumnsCounter", publicName: "showColumnsCounter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onCardMoved: "onCardMoved", onActionClicked: "onActionClicked", onLoadMoreCards: "onLoadMoreCards", onSelectedCard: "onSelectedCard" }, ngImport: i0, template: "<div class=\"flex w-full h-full\">\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\n \n <div class=\"board-column\" *ngFor=\"let config of columnConfigs()\">\n \n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\n @if(this.showColumnsCounter()) {\n <span class=\"column-count-badge\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\n }\n </div>\n\n <div \n class=\"column-content\"\n cdkDropList\n [id]=\"config.id.toString()\"\n [cdkDropListData]=\"getColumnList()(config.id)\"\n (cdkDropListDropped)=\"drop($event)\"\n (scroll)=\"onScroll($event, config.id)\">\n\n <div class=\"kanban-card\" *ngFor=\"let item of getColumnList()(config.id)\" cdkDrag>\n \n <div class=\"card-header\">\n <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \n [style.backgroundColor]=\"item.statusColor\"\n [style.color]=\"item.statusLabelColor\">\n {{ item.status }}\n </span>\n \n <p-menu #menu [model]=\"getActionsForCard(item)\" [popup]=\"true\"></p-menu>\n <span class=\"material-symbols-outlined border-round-lg text-xl text-black-alpha-50 hover:surface-200\" (click)=\"menu.toggle($event)\">more_vert</span>\n </div>\n\n <div class=\"card-body ml-1\">\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2\">{{ item.titulo }}</p>\n \n <ng-container *ngTemplateOutlet=\"cardTemplate(); context: { $implicit: item }\"></ng-container>\n </div>\n\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\n </div>\n\n </div>\n\n <div class=\"column-footer text-xs text-black-alpha-80\">\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\n </div>\n\n </div>\n </div>\n</div>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{flex:1 1 0%;display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600}.column-header .column-count-badge{background-color:#ffffffe6;padding:2px 8px;border-radius:12px;font-size:.85rem;font-weight:700}.column-content{flex-grow:1;overflow-y:auto;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;justify-content:space-between;margin-bottom:8px}.card-header .priority-tag{font-size:.75rem;padding:4px 8px;border-radius:4px;font-weight:600}.card-header .kebab-btn{background:none;border:none;font-size:1.2rem;cursor:pointer;color:#888;line-height:.5}.dropdown{position:relative}.dropdown:hover .dropdown-content{display:block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:120px;box-shadow:0 8px 16px #0003;z-index:1;border-radius:4px}.dropdown-content a{color:#000;padding:8px 12px;text-decoration:none;display:block;font-size:.9rem;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.card-meta{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#777;margin-top:4px}.card-meta i{font-style:normal}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}p-menu>::ng-deep div{scale:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$3.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: i2$3.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2$3.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: "directive", type: i2$3.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i2.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }] }); }
14252
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvKanbanComponent, isStandalone: true, selector: "kv-kanban", inputs: { actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, columnConfigs: { classPropertyName: "columnConfigs", publicName: "columnConfigs", isSignal: true, isRequired: false, transformFunction: null }, columnLists: { classPropertyName: "columnLists", publicName: "columnLists", isSignal: true, isRequired: false, transformFunction: null }, cardTemplate: { classPropertyName: "cardTemplate", publicName: "cardTemplate", isSignal: true, isRequired: false, transformFunction: null }, showColumnsCounter: { classPropertyName: "showColumnsCounter", publicName: "showColumnsCounter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onCardMoved: "onCardMoved", onActionClicked: "onActionClicked", onLoadMoreCards: "onLoadMoreCards", onSelectedCard: "onSelectedCard" }, viewQueries: [{ propertyName: "sharedMenu", first: true, predicate: ["sharedMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex w-full h-full\">\r\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\r\n \r\n @for(config of columnConfigs(); track $index) {\r\n\r\n <div class=\"board-column\" [style.flex]=\"getColumnFlex()\">\r\n \r\n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\r\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\r\n @if(this.showColumnsCounter()) {\r\n <span class=\"column-count-badge px-2 py-1\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\r\n }\r\n </div>\r\n\r\n <div \r\n class=\"column-content\"\r\n cdkDropList\r\n [id]=\"config.id.toString()\"\r\n [cdkDropListData]=\"getColumnList()(config.id)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (scroll)=\"onScroll($event, config.id)\">\r\n\r\n\r\n @for(item of getColumnList()(config.id); track $index) {\r\n \r\n <div class=\"kanban-card\" cdkDrag>\r\n\r\n @if(actions().length > 0) {\r\n <span class=\"material-symbols-outlined card-menu-btn text-xl text-black-alpha-50 hover:surface-200 border-round-lg\" (click)=\"openCardMenu($event, item)\">\r\n more_vert\r\n </span>\r\n }\r\n \r\n\r\n @if (item.status) {\r\n <div class=\"card-header mt-1\"> <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \r\n [style.backgroundColor]=\"item.statusColor\"\r\n [style.color]=\"item.statusLabelColor\">\r\n {{ item.status }}\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"card-body ml-1\">\r\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2 pr-4\">\r\n {{ item.titulo }}\r\n </p>\r\n \r\n <ng-container [ngTemplateOutlet]=\"cardTemplate()\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </div>\r\n\r\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"column-footer text-xs text-black-alpha-80\">\r\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\r\n </div>\r\n\r\n </div>\r\n\r\n }\r\n\r\n </div>\r\n</div>\r\n\r\n<p-menu #sharedMenu [model]=\"currentMenuOptions\" [popup]=\"true\" appendTo=\"body\"></p-menu>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px;min-width:280px;overflow:visible}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600;gap:8px}.column-header span:first-child{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.column-header .column-count-badge{background-color:#ffffffe6;border-radius:12px;font-size:.85rem;font-weight:700;flex-shrink:0}.column-content{flex-grow:1;overflow-y:auto;overflow-x:visible;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s;position:relative}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;margin-bottom:8px}.card-menu-btn{position:absolute;top:12px;right:8px;cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-menu{scale:.8;z-index:1000!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$3.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: i2$3.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i2$3.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: "directive", type: i2$3.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i2.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }] }); }
14240
14253
  }
14241
14254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvKanbanComponent, decorators: [{
14242
14255
  type: Component,
14243
- args: [{ standalone: true, selector: 'kv-kanban', imports: [CommonModule, DragDropModule, MenuModule], template: "<div class=\"flex w-full h-full\">\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\n \n <div class=\"board-column\" *ngFor=\"let config of columnConfigs()\">\n \n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\n @if(this.showColumnsCounter()) {\n <span class=\"column-count-badge\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\n }\n </div>\n\n <div \n class=\"column-content\"\n cdkDropList\n [id]=\"config.id.toString()\"\n [cdkDropListData]=\"getColumnList()(config.id)\"\n (cdkDropListDropped)=\"drop($event)\"\n (scroll)=\"onScroll($event, config.id)\">\n\n <div class=\"kanban-card\" *ngFor=\"let item of getColumnList()(config.id)\" cdkDrag>\n \n <div class=\"card-header\">\n <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \n [style.backgroundColor]=\"item.statusColor\"\n [style.color]=\"item.statusLabelColor\">\n {{ item.status }}\n </span>\n \n <p-menu #menu [model]=\"getActionsForCard(item)\" [popup]=\"true\"></p-menu>\n <span class=\"material-symbols-outlined border-round-lg text-xl text-black-alpha-50 hover:surface-200\" (click)=\"menu.toggle($event)\">more_vert</span>\n </div>\n\n <div class=\"card-body ml-1\">\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2\">{{ item.titulo }}</p>\n \n <ng-container *ngTemplateOutlet=\"cardTemplate(); context: { $implicit: item }\"></ng-container>\n </div>\n\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\n </div>\n\n </div>\n\n <div class=\"column-footer text-xs text-black-alpha-80\">\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\n </div>\n\n </div>\n </div>\n</div>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{flex:1 1 0%;display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600}.column-header .column-count-badge{background-color:#ffffffe6;padding:2px 8px;border-radius:12px;font-size:.85rem;font-weight:700}.column-content{flex-grow:1;overflow-y:auto;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;justify-content:space-between;margin-bottom:8px}.card-header .priority-tag{font-size:.75rem;padding:4px 8px;border-radius:4px;font-weight:600}.card-header .kebab-btn{background:none;border:none;font-size:1.2rem;cursor:pointer;color:#888;line-height:.5}.dropdown{position:relative}.dropdown:hover .dropdown-content{display:block}.dropdown-content{display:none;position:absolute;right:0;background-color:#f9f9f9;min-width:120px;box-shadow:0 8px 16px #0003;z-index:1;border-radius:4px}.dropdown-content a{color:#000;padding:8px 12px;text-decoration:none;display:block;font-size:.9rem;cursor:pointer}.dropdown-content a:hover{background-color:#f1f1f1}.card-meta{display:flex;align-items:center;gap:6px;font-size:.8rem;color:#777;margin-top:4px}.card-meta i{font-style:normal}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}p-menu>::ng-deep div{scale:.8}\n"] }]
14256
+ args: [{ standalone: true, selector: 'kv-kanban', imports: [CommonModule, DragDropModule, MenuModule], template: "<div class=\"flex w-full h-full\">\r\n <div class=\"board-wrapper flex-column lg:flex-row\" cdkDropListGroup>\r\n \r\n @for(config of columnConfigs(); track $index) {\r\n\r\n <div class=\"board-column\" [style.flex]=\"getColumnFlex()\">\r\n \r\n <div class=\"column-header\" [style.backgroundColor]=\"config.corTitulo\">\r\n <span class=\"text-base font-semibold\">{{ config.nome }}</span>\r\n @if(this.showColumnsCounter()) {\r\n <span class=\"column-count-badge px-2 py-1\" [style.color]=\"config.corTitulo\">{{ config.contador | number:'2.0' }}</span>\r\n }\r\n </div>\r\n\r\n <div \r\n class=\"column-content\"\r\n cdkDropList\r\n [id]=\"config.id.toString()\"\r\n [cdkDropListData]=\"getColumnList()(config.id)\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (scroll)=\"onScroll($event, config.id)\">\r\n\r\n\r\n @for(item of getColumnList()(config.id); track $index) {\r\n \r\n <div class=\"kanban-card\" cdkDrag>\r\n\r\n @if(actions().length > 0) {\r\n <span class=\"material-symbols-outlined card-menu-btn text-xl text-black-alpha-50 hover:surface-200 border-round-lg\" (click)=\"openCardMenu($event, item)\">\r\n more_vert\r\n </span>\r\n }\r\n \r\n\r\n @if (item.status) {\r\n <div class=\"card-header mt-1\"> <span class=\"status-tag text-xs border-round-3xl py-1 px-2\" \r\n [style.backgroundColor]=\"item.statusColor\"\r\n [style.color]=\"item.statusLabelColor\">\r\n {{ item.status }}\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"card-body ml-1\">\r\n <p class=\"p-0 m-0 text-sm text-black-alpha-70 font-semibold mb-2 pr-4\">\r\n {{ item.titulo }}\r\n </p>\r\n \r\n <ng-container [ngTemplateOutlet]=\"cardTemplate()\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n </div>\r\n\r\n <div *cdkDragPlaceholder class=\"custom-placeholder\"></div>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"column-footer text-xs text-black-alpha-80\">\r\n Ver {{ getColumnList()(config.id).length }} de {{ config.contador }}\r\n </div>\r\n\r\n </div>\r\n\r\n }\r\n\r\n </div>\r\n</div>\r\n\r\n<p-menu #sharedMenu [model]=\"currentMenuOptions\" [popup]=\"true\" appendTo=\"body\"></p-menu>", styles: [".board-wrapper{display:flex;flex:1 1 0%;gap:16px;overflow-x:auto;padding:20px;height:100%}.board-column{display:flex;flex-direction:column;background-color:#f0f2f5;border-radius:18px;min-width:280px;overflow:visible}.column-header{padding:10px 20px;margin:7px;border-radius:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;font-weight:600;gap:8px}.column-header span:first-child{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.column-header .column-count-badge{background-color:#ffffffe6;border-radius:12px;font-size:.85rem;font-weight:700;flex-shrink:0}.column-content{flex-grow:1;overflow-y:auto;overflow-x:visible;padding:12px;min-height:100px}.column-content::-webkit-scrollbar{width:6px}.column-content::-webkit-scrollbar-thumb{background:#ccc;border-radius:4px}.kanban-card{background:#fff;border-radius:16px;padding:12px;margin-bottom:8px;box-shadow:0 4px 6px #0000001a;cursor:grab;transition:box-shadow .2s;position:relative}.kanban-card:active{cursor:grabbing}.kanban-card:hover{box-shadow:0 4px 8px #0000001a}.card-header{display:flex;margin-bottom:8px}.card-menu-btn{position:absolute;top:12px;right:8px;cursor:pointer;z-index:10;-webkit-user-select:none;user-select:none}.column-footer{padding:10px;text-align:center}.cdk-drag-preview{box-sizing:border-box;border-radius:8px;box-shadow:0 5px 15px #0003;background:#fff}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.column-content.cdk-drop-list-dragging .kanban-card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .p-menu{scale:.8;z-index:1000!important}\n"] }]
14244
14257
  }] });
14245
14258
 
14246
14259
  /*