{"version":3,"file":"verben-ng-ui-src-lib-components-data-columns.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/data-columns/data-columns.component.ts","../../../projects/verben-ng-ui/src/lib/components/data-columns/data-columns.component.html","../../../projects/verben-ng-ui/src/lib/components/data-columns/data-columns.module.ts","../../../projects/verben-ng-ui/src/lib/components/data-columns/data-columns.service.ts","../../../projects/verben-ng-ui/src/lib/components/data-columns/verben-ng-ui-src-lib-components-data-columns.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ColumnDefinition } from 'verben-ng-ui/src/lib/components/data-table';\n\n@Component({\n  selector: 'lib-data-columns',\n  templateUrl: './data-columns.component.html',\n  styleUrl: './data-columns.component.css',\n})\nexport class DataColumnsComponent<T> implements OnInit {\n  @Input() columns!: ColumnDefinition<T>[];\n  @Input() enableDragAndDrop: boolean = true;\n  @Input() maxVisibleItems: number = 5;\n  @Output() columnsUpdated = new EventEmitter<ColumnDefinition<T>[]>();\n\n  visibleColumns: ColumnDefinition<T>[] = [];\n  showAllColumns = false;\n  draggedIndex: number | null = null;\n  selectAll: boolean = false;\n  columnVisibility: Map<string, boolean> = new Map();\n\n  ngOnInit() {\n    this.initializeColumns();\n  }\n\n  private initializeColumns() {\n    this.visibleColumns = [...this.columns];\n    // Initialize visibility map with current column states\n    this.visibleColumns.forEach((column) => {\n      this.columnVisibility.set(column.id, true);\n    });\n    this.updateSelectAllStatus();\n  }\n\n  get columnsToShow() {\n    return this.showAllColumns\n      ? this.visibleColumns\n      : this.visibleColumns.slice(0, this.maxVisibleItems);\n  }\n\n  // Drag and Drop functionality\n  onDragStart(index: number, event: DragEvent) {\n    if (!this.enableDragAndDrop) return;\n    this.draggedIndex = index;\n    event.dataTransfer?.setData('text/plain', String(index));\n  }\n\n  onDragOver(event: DragEvent) {\n    if (!this.enableDragAndDrop) return;\n    event.preventDefault();\n  }\n\n  onDrop(index: number, event: DragEvent) {\n    if (!this.enableDragAndDrop) return;\n    event.preventDefault();\n    if (this.draggedIndex !== null && this.draggedIndex !== index) {\n      this.swapColumns(this.draggedIndex, index);\n    }\n    this.draggedIndex = null;\n  }\n\n  private swapColumns(fromIndex: number, toIndex: number) {\n    const temp = this.visibleColumns[fromIndex];\n    this.visibleColumns[fromIndex] = this.visibleColumns[toIndex];\n    this.visibleColumns[toIndex] = temp;\n    this.emitUpdatedColumns();\n  }\n\n  // Column Selection functionality\n  toggleSelectAll() {\n    this.selectAll = !this.selectAll;\n    const newValue = this.selectAll;\n    this.visibleColumns.forEach((column) => {\n      this.columnVisibility.set(column.id, newValue);\n    });\n    this.emitUpdatedColumns();\n  }\n\n  toggleColumnVisibility(columnId: string) {\n    const currentValue = this.columnVisibility.get(columnId);\n    this.columnVisibility.set(columnId, !currentValue);\n    this.updateSelectAllStatus();\n    this.emitUpdatedColumns();\n  }\n\n  isColumnVisible(columnId: string): boolean {\n    return this.columnVisibility.get(columnId) ?? false;\n  }\n\n  private updateSelectAllStatus() {\n    this.selectAll = Array.from(this.columnVisibility.values()).every(\n      (value) => value\n    );\n  }\n\n  getColumnHeader(column: ColumnDefinition<T>): string {\n    return typeof column.header === 'function'\n      ? column.header({})\n      : column.header;\n  }\n\n  resetColumns() {\n    this.initializeColumns();\n    this.emitUpdatedColumns();\n  }\n\n  emitUpdatedColumns() {\n    const updatedColumns = this.visibleColumns.filter((column) =>\n      this.columnVisibility.get(column.id)\n    );\n    this.columnsUpdated.emit(updatedColumns);\n  }\n\n  get activeColumnCount(): number {\n    return Array.from(this.columnVisibility.values()).filter((value) => value)\n      .length;\n  }\n}\n","<verben-card width=\"24rem\" borderRadius=\"1rem\" [border]=\"'1px solid #D4A007'\" bgColor=\"#FFFFFF\">\n    <div card-header class=\"card-header\">\n      <h4 class=\"header-title\">Column <sup>({{ activeColumnCount }})</sup></h4>\n      <button class=\"reset-button\" (click)=\"resetColumns()\">Reset</button>\n    </div>\n  \n    <div card-body class=\"card-body\">\n      <!-- Column Options -->\n      <section class=\"section\">\n        <div class=\"section-header\">\n          <h3 class=\"section-title\">Properties</h3>\n          <verben-svg icon=\"info\" [width]=\"15\" [height]=\"15\" fill=\"grey\"></verben-svg>\n        </div>\n  \n        <!-- Select All -->\n        <div class=\"select-all-wrapper\">\n          <label class=\"select-all\">\n            <input \n              type=\"checkbox\" \n              [checked]=\"selectAll\"\n              (change)=\"toggleSelectAll()\"\n            />\n            <span>Select All</span>\n          </label>\n        </div>\n  \n        @for (column of columnsToShow; track column.id) {\n          <div \n            class=\"column-option\"\n            [attr.draggable]=\"enableDragAndDrop\"\n            (dragstart)=\"onDragStart($index, $event)\"\n            (dragover)=\"onDragOver($event)\"\n            (drop)=\"onDrop($index, $event)\"\n          >\n            <div class=\"column-option-content\">\n              @if (enableDragAndDrop) {\n                <verben-svg\n                  icon=\"square-dot\"\n                  [width]=\"15\"\n                  [height]=\"15\"\n                  fill=\"black\"\n                  class=\"drag-handle\"\n                ></verben-svg>\n              }\n              <input \n                type=\"checkbox\" \n                [checked]=\"isColumnVisible(column.id)\"\n                (change)=\"toggleColumnVisibility(column.id)\"\n              />\n              <span>{{ getColumnHeader(column) }}</span>\n            </div>\n          </div>\n        }\n  \n        @if (visibleColumns.length > maxVisibleItems) {\n          <button\n          (click)=\"showAllColumns = !showAllColumns\"\n          class=\"show-more\"\n        >\n          <span>{{ showAllColumns ? \"Show Less\" : \"Show More\" }}</span>\n          <verben-svg\n            icon=\"chevron\"\n            [width]=\"8\"\n            [height]=\"6\"\n            fill=\"black\"\n            stroke=\"black\"\n          ></verben-svg>\n        </button>\n        }\n      </section>\n    </div>\n  \n    <div card-footer class=\"card-footer\">\n      <button class=\"save-button\" (click)=\"emitUpdatedColumns()\">Save</button>\n    </div>\n  </verben-card>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataColumnsComponent } from './data-columns.component';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { CardModule } from 'verben-ng-ui/src/lib/components/card';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\n\n@NgModule({\n  declarations: [DataColumnsComponent],\n  imports: [CommonModule, SvgModule, CardModule, DropDownModule, TooltipModule],\n  exports: [DataColumnsComponent],\n})\nexport class DataColumnsModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataColumnsService {\n\n  constructor() { }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}