UNPKG

angular-kanban

Version:

A lightweight and customizable Kanban board library for Angular application

1 lines 17.4 kB
{"version":3,"file":"angular-kanban.mjs","sources":["../../../projects/ng-kanban/src/lib/ng-kanban.service.ts","../../../projects/ng-kanban/src/lib/ng-kanban.component.ts","../../../projects/ng-kanban/src/lib/kanban-card/kanban-card.component.ts","../../../projects/ng-kanban/src/lib/kanban-card/kanban-card.component.html","../../../projects/ng-kanban/src/lib/kanban-column/kanban-column.component.ts","../../../projects/ng-kanban/src/lib/kanban-column/kanban-column.component.html","../../../projects/ng-kanban/src/lib/kanban-board/kanban-board.component.ts","../../../projects/ng-kanban/src/lib/kanban-board/kanban-board.component.html","../../../projects/ng-kanban/src/lib/kanban-state.service.ts","../../../projects/ng-kanban/src/public-api.ts","../../../projects/ng-kanban/src/angular-kanban.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgKanbanService {\n\n constructor() { }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ng-kanban',\n imports: [],\n template: `\n <p>\n ng-kanban works!\n </p>\n `,\n styles: ``\n})\nexport class NgKanbanComponent {\n\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { KanbanCard } from '../models/kanban.modal';\n\n@Component({\n selector: 'lib-kanban-card',\n imports: [],\n templateUrl: './kanban-card.component.html',\n styleUrl: './kanban-card.component.css'\n})\nexport class KanbanCardComponent {\n /** The card data */\n @Input() card!: KanbanCard;\n\n /** Whether the card is draggable (default: true) */\n @Input() draggable?: boolean = true;\n\n /** Whether to show the default title (default: true) */\n @Input() showTitle?: boolean = true;\n\n /** Whether to show the default description (default: true) */\n @Input() showDescription?: boolean = true;\n\n /** Custom CSS class for the card */\n @Input() customClass: string = '';\n\n /** Event emitter for card click */\n @Output() cardClick = new EventEmitter<KanbanCard>();\n\n /** Track if custom header/content is provided */\n hasCustomHeader = false;\n hasCustomBody = false;\n\n onDragStart(event: DragEvent) {\n if (this.draggable && event.dataTransfer && this.card) {\n // Store the card ID in the drag data\n event.dataTransfer.setData('cardId', this.card.id);\n event.dataTransfer.effectAllowed = 'move';\n }\n }\n}","<!-- Card Id is Set to the card, \n on drag start emit the event which emit which card is dragging and there source and target source\n Click event emit which card is clicked and emit that card details -->\n\n <div\n class=\"kanban-card\"\n [attr.data-id]=\"card.id\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event)\"\n (click)=\"cardClick.emit(card)\"\n>\n <!-- Projected content for the card header -->\n <ng-content select=\"[card-header]\"></ng-content>\n\n <!-- Default card title (if no custom header is provided) -->\n @if (!hasCustomHeader) {\n <div class=\"card-title\">{{ card.title }}</div>\n }\n\n <!-- Projected content for the card body -->\n <ng-content select=\"[card-body]\"></ng-content>\n\n <!-- Default card description (if no custom body is provided) -->\n @if (!hasCustomBody && card.description) {\n <div class=\"card-description\">\n {{ card.description }}\n </div>\n }\n\n <!-- Projected content for the card footer -->\n <ng-content select=\"[card-footer]\"></ng-content>\n</div>","import { Component, EventEmitter, Input, Output} from '@angular/core';\nimport { KanbanCard, KanbanColumn } from '../models/kanban.modal';\nimport { KanbanCardComponent } from '../kanban-card/kanban-card.component';\n@Component({\n selector: 'lib-kanban-column',\n imports: [KanbanCardComponent],\n templateUrl: './kanban-column.component.html',\n styleUrl: './kanban-column.component.css'\n})\nexport class KanbanColumnComponent {\n\n /** Column data: {\n id: string;\n title: string;\n cards: KanbanCard[];\n } */\n @Input() column!: KanbanColumn;\n\n /** Emit event when a card is clicked */\n @Output() cardClick = new EventEmitter<KanbanCard>();\n\n /** Emit event when a card is moved */\n @Output() cardMoved = new EventEmitter<{cardId: string, sourceColumnId: string, targetColumnId: string}>();\n \n /** Fires continuously while a card is being dragged over the column. */\n onDragOver(event: DragEvent) {\n\n /**\n * Prevents the default behavior (which blocks dropping).\n * Sets the dropEffect to 'move' to indicate that the card will be moved.\n **/\n event.preventDefault();\n\n if (event.dataTransfer) {\n // drop effect alwayse set to none by default we explicitly set it to move\n event.dataTransfer.dropEffect = 'move';\n }\n }\n \n /**\n * @param event Fires when a dragged card enters the column.\n * Adds a CSS class (drag-over) to the column's content area to provide visual feedback (e.g., highlighting the column).\n */\n onDragEnter(event: DragEvent) {\n \n if (event.target instanceof Element) {\n \n // Check for the class column-content exist in classList or not if exist add drag-over class\n if (event.target.classList.contains('column-content')) {\n event.target.classList.add('drag-over');\n }\n }\n }\n \n\n /**\n * @param event Fires when a dragged card leaves the column.\n * Removes the drag-over CSS class to reset the visual feedback.\n */\n onDragLeave(event: DragEvent) {\n\n if (event.target instanceof Element) {\n if (event.target.classList.contains('column-content')) {\n // Remove drag-over class\n event.target.classList.remove('drag-over');\n }\n }\n }\n\n /**\n * \n * @param event Fires when a card is dropped on the column.\n * Prevents the default behavior.\n * Removes the drag-over styling.\n * Gets the cardId from the dataTransfer object.\n * Finds the sourceColumnId (the column the card is coming from).\n * Emits a cardMoved event to notify the parent component that the card has been moved.\n * @returns \n */\n \n onDrop(event: DragEvent) {\n \n event.preventDefault();\n \n // Remove the drag-over styling\n if (event.target instanceof Element) {\n const columnContent = event.target.closest('.column-content');\n if (columnContent) {\n columnContent.classList.remove('drag-over');\n }\n }\n \n if (event.dataTransfer) {\n // Get the cardId\n const cardId = event.dataTransfer.getData('cardId');\n \n if (!cardId) return;\n \n // Find the source column (the column the card is coming from)\n let sourceColumnId = '';\n \n // Get All the columns\n const columnElements = document.querySelectorAll('.kanban-column');\n \n // Get all the cards\n columnElements.forEach(colEl => {\n const cards = colEl.querySelectorAll('.kanban-card');\n cards.forEach(card => {\n \n // Check if the cardId matches\n if (card.getAttribute('data-id') === cardId) {\n\n // If Card Id matches set the sourceColumnId\n // Get source column Id ( eg: in progress )\n sourceColumnId = colEl.getAttribute('data-id') || '';\n }\n });\n });\n \n if (sourceColumnId && sourceColumnId !== this.column.id) {\n // Emit an event to move the card\n this.cardMoved.emit({\n cardId,\n sourceColumnId,\n targetColumnId: this.column.id\n });\n }\n }\n }\n}\n\n","<div class=\"kanban-column\" [attr.data-id]=\"column.id\">\n <div class=\"column-header\">\n <h3>{{ column.title }}</h3>\n </div>\n <div\n class=\"column-content\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event)\"\n (dragenter)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n >\n @for (card of column.cards; track card.id) {\n <lib-kanban-card [card]=\"card\" (cardClick)=\"cardClick.emit($event)\">\n </lib-kanban-card>\n }\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { KanbanBoard, KanbanCard } from '../models/kanban.modal';\nimport { KanbanColumnComponent } from '../kanban-column/kanban-column.component';\n\n@Component({\n selector: 'lib-kanban-board',\n imports: [KanbanColumnComponent],\n templateUrl: './kanban-board.component.html',\n styleUrl: './kanban-board.component.css'\n})\nexport class KanbanBoardComponent {\n @Input() board!: KanbanBoard;\n @Output() cardClick = new EventEmitter<KanbanCard>();\n @Output() cardMoved = new EventEmitter<{cardId: string, sourceColumnId: string, targetColumnId: string}>();\n \n onCardMoved(event: {cardId: string, sourceColumnId: string, targetColumnId: string}) {\n this.cardMoved.emit(event);\n }\n}\n","<div class=\"kanban-board\">\n @for (column of board.columns; track column.id) {\n <lib-kanban-column\n [column]=\"column\"\n (cardClick)=\"cardClick.emit($event)\"\n (cardMoved)=\"onCardMoved($event)\">\n </lib-kanban-column>\n }\n</div>","import { Injectable } from '@angular/core';\nimport { KanbanBoard, KanbanCard, KanbanColumn } from './models/kanban.modal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class KanbanStateService {\n // Move a card from one column to another\n moveCard(board: KanbanBoard, cardId: string, sourceColumnId: string, targetColumnId: string): KanbanBoard {\n // Create a deep copy of the board to prevent direct mutation\n const updatedBoard = JSON.parse(JSON.stringify(board)) as KanbanBoard;\n \n // Find source and target columns\n const sourceColumn = updatedBoard.columns.find(col => col.id === sourceColumnId);\n const targetColumn = updatedBoard.columns.find(col => col.id === targetColumnId);\n \n if (!sourceColumn || !targetColumn) {\n return board; // Return original if columns not found\n }\n \n // Find and remove card from source column\n const cardIndex = sourceColumn.cards.findIndex(card => card.id === cardId);\n if (cardIndex === -1) {\n return board; // Return original if card not found\n }\n \n // Remove the card from source column and get a reference to it\n const [card] = sourceColumn.cards.splice(cardIndex, 1);\n \n // Add card to target column\n targetColumn.cards.push(card);\n \n return updatedBoard;\n }\n\n log(board: any) {\n console.log(board);\n }\n \n}\n","/*\n * Public API Surface of ng-kanban\n */\n\nexport * from './lib/ng-kanban.service';\nexport * from './lib/ng-kanban.component';\n\nexport * from './lib/kanban-board/kanban-board.component';\nexport * from './lib/kanban-column/kanban-column.component';\nexport * from './lib/kanban-card/kanban-card.component';\nexport * from './lib/kanban-state.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}