ng-hub-ui-board 19.2.0 → 19.2.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.
package/README.md CHANGED
@@ -20,14 +20,16 @@ A flexible and powerful board component for Angular applications, perfect for im
20
20
 
21
21
  ## Features
22
22
 
23
- - 🎯 Standalone component
24
- - 🔄 Drag and drop support for both cards and columns
25
- - 📱 Responsive design
26
- - 🎨 Highly customizable with templates
27
- - 🔧 Bootstrap compatible
28
- - ⚡ Virtual scrolling support with end-detection
29
- - 🎭 Custom styling support for boards, columns, and cards
30
- - 🔒 Disable/enable functionality for cards and columns
23
+ - 🎯 **Standalone component** - Modern Angular approach with minimal setup
24
+ - 🔄 **Drag and drop support** - Full drag-and-drop for both cards and columns using Angular CDK
25
+ - 📱 **Responsive design** - Works seamlessly across desktop, tablet, and mobile devices
26
+ - 🎨 **Highly customizable** - Custom templates for cards, headers, and footers
27
+ - 🔧 **Bootstrap compatible** - Integrates perfectly with Bootstrap 5 design system
28
+ - ⚡ **Virtual scrolling** - Supports infinite scroll with end-detection for performance
29
+ - 🎭 **Custom styling** - CSS custom properties for easy theming and customization
30
+ - 🔒 **Granular control** - Enable/disable functionality at board, column, or card level
31
+ - 🏷️ **TypeScript support** - Full type safety with generic interfaces
32
+ - ♿ **Accessibility ready** - Follows WAI-ARIA best practices for drag-and-drop
31
33
 
32
34
  ## Installation
33
35
 
@@ -114,7 +116,7 @@ export class BoardDemoComponent {
114
116
  </hub-board>
115
117
  ```
116
118
 
117
- Este bloque de código ofrece un ejemplo mínimo y funcional tanto para principiantes como para usuarios intermedios.
119
+ This code block provides a minimal and functional example for both beginners and intermediate users.
118
120
 
119
121
  ## Usage
120
122
 
@@ -261,7 +263,7 @@ handleCardMoved(event: CdkDragDrop<BoardColumn, BoardColumn, BoardCard>) {
261
263
  Emitted when a column is reordered via drag and drop.
262
264
 
263
265
  ```html
264
- <hub-board [board]="board" (reachedEnd)="handleReachedEnd($event)"> </hub-board>
266
+ <hub-board [board]="board" (onColumnMoved)="handleColumnMoved($event)"> </hub-board>
265
267
  ```
266
268
 
267
269
  **Type:** `EventEmitter<CdkDragDrop<BoardColumn[]>>`
@@ -471,23 +473,42 @@ Each case benefits from customizable columns, card templates, and event outputs
471
473
  Here are some common issues and how to resolve them:
472
474
 
473
475
  ### 🔄 Drag and drop not working
474
- Make sure you have imported `@angular/cdk` and the necessary `DragDropModule`. Also check that your board and column data is reactive (e.g. using `signal()` or `RxJS`).
476
+ - **Check dependencies**: Ensure `@angular/cdk` is installed and imported
477
+ - **Reactive data**: Verify your board data is reactive (using `signal()`, `Observable`, or proper change detection)
478
+ - **Browser compatibility**: Ensure your target browsers support the HTML5 Drag and Drop API
475
479
 
476
480
  ### 📏 Scroll detection not triggering `reachedEnd`
477
- Ensure the `<hub-board>` element or one of its parents has a `max-height` or fixed height defined and `overflow: auto` to enable scrolling.
481
+ - **Height constraints**: The `<hub-board>` element or its parent must have a `max-height` or fixed height
482
+ - **Overflow setting**: Ensure `overflow: auto` or `overflow-y: scroll` is applied to enable scrolling
483
+ - **Content length**: Make sure there's enough content to actually trigger scrolling
478
484
 
479
485
  ### 🎨 Styles not applying
480
- Confirm you've imported the SCSS base styles in your global `styles.scss`:
481
-
482
- ```scss
483
- @use '../dist/board/src/lib/styles/base.scss' as boardBase;
484
- ```
486
+ - **Import path**: Confirm you've imported the SCSS base styles in your global `styles.scss`:
487
+ ```scss
488
+ @use '../dist/board/src/lib/styles/base.scss' as boardBase;
489
+ ```
490
+ - **CSS custom properties**: Check that your custom CSS variables follow the `--hub-*` naming convention
491
+ - **Style specificity**: Ensure your custom styles have sufficient specificity to override defaults
485
492
 
486
493
  ### 🧩 Templates not rendering
487
- If you’re using `cardTpt`, `columnHeaderTpt`, or `columnFooterTpt`, ensure you've also imported the corresponding directives into your component.
488
-
489
- ### 🛠️ Error: "Cannot read property 'cards' of undefined"
490
- Make sure your `board` signal is initialized and its `columns` array is not `undefined`.
494
+ - **Import directives**: When using standalone components, import the template directives:
495
+ ```typescript
496
+ imports: [HubBoardComponent, CardTemplateDirective, BoardColumnHeaderDirective]
497
+ ```
498
+ - **Template syntax**: Verify you're using the correct template selectors (`cardTpt`, `columnHeaderTpt`, `columnFooterTpt`)
499
+
500
+ ### 🛠️ Runtime errors
501
+ - **"Cannot read property 'cards' of undefined"**: Initialize your board signal properly:
502
+ ```typescript
503
+ board = signal<Board>({ title: 'My Board', columns: [] });
504
+ ```
505
+ - **Type errors**: Ensure your data matches the `Board`, `BoardColumn`, and `BoardCard` interfaces
506
+ - **Signal updates**: Use `.set()` or `.update()` methods to modify signal values
507
+
508
+ ### 🎯 Performance issues
509
+ - **Large datasets**: Consider implementing virtual scrolling for columns with many cards
510
+ - **Memory leaks**: Ensure proper cleanup of event listeners and subscriptions
511
+ - **Change detection**: Use `OnPush` change detection strategy when possible
491
512
 
492
513
  If problems persist, open an issue at: https://github.com/carlos-morcillo/ng-hub-ui-board/issues
493
514
 
@@ -4,7 +4,32 @@ import * as i1 from '@angular/cdk/drag-drop';
4
4
  import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
5
5
  import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
6
6
 
7
+ /**
8
+ * Directive that allows customization of column footer templates within board columns.
9
+ *
10
+ * This directive enables developers to define custom templates for column footers,
11
+ * perfect for displaying summary information, quick actions, statistics,
12
+ * or any column-specific controls at the bottom of each column.
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <ng-template columnFooterTpt let-column="column">
17
+ * <div class="custom-footer">
18
+ * <div class="column-summary">
19
+ * <span>Total: {{ column.cards.length }}</span>
20
+ * <span>Priority Items: {{ getPriorityItems(column) }}</span>
21
+ * </div>
22
+ * <button (click)="quickAddCard(column)">Quick Add</button>
23
+ * </div>
24
+ * </ng-template>
25
+ * ```
26
+ */
7
27
  class BoardColumnFooterDirective {
28
+ /**
29
+ * Creates a new BoardColumnFooterDirective instance.
30
+ *
31
+ * @param templateRef - The template reference that contains the custom column footer layout
32
+ */
8
33
  constructor(templateRef) {
9
34
  this.templateRef = templateRef;
10
35
  }
@@ -19,7 +44,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
19
44
  }]
20
45
  }], ctorParameters: () => [{ type: i0.TemplateRef }] });
21
46
 
47
+ /**
48
+ * Directive that allows customization of column header templates within board columns.
49
+ *
50
+ * This directive provides the ability to define custom templates for rendering column headers,
51
+ * giving developers full control over the appearance and functionality of column headers
52
+ * including titles, descriptions, actions, and metadata display.
53
+ *
54
+ * @example
55
+ * ```html
56
+ * <ng-template columnHeaderTpt let-column="column">
57
+ * <div class="custom-header">
58
+ * <h2>{{ column.title }}</h2>
59
+ * <span class="card-count">{{ column.cards.length }} items</span>
60
+ * <button (click)="addCard(column)">Add Card</button>
61
+ * </div>
62
+ * </ng-template>
63
+ * ```
64
+ */
22
65
  class BoardColumnHeaderDirective {
66
+ /**
67
+ * Creates a new BoardColumnHeaderDirective instance.
68
+ *
69
+ * @param templateRef - The template reference that contains the custom column header layout
70
+ */
23
71
  constructor(templateRef) {
24
72
  this.templateRef = templateRef;
25
73
  }
@@ -34,7 +82,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
34
82
  }]
35
83
  }], ctorParameters: () => [{ type: i0.TemplateRef }] });
36
84
 
85
+ /**
86
+ * Directive that allows customization of card templates within board columns.
87
+ *
88
+ * This directive is used to define custom templates for rendering board cards.
89
+ * It provides access to the template reference that can be used by the board component
90
+ * to render cards with custom layouts and styling.
91
+ *
92
+ * @example
93
+ * ```html
94
+ * <ng-template cardTpt let-card="item" let-column="column">
95
+ * <div class="custom-card">
96
+ * <h3>{{ card.title }}</h3>
97
+ * <p>{{ card.description }}</p>
98
+ * </div>
99
+ * </ng-template>
100
+ * ```
101
+ */
37
102
  class CardTemplateDirective {
103
+ /**
104
+ * Creates a new CardTemplateDirective instance.
105
+ *
106
+ * @param templateRef - The template reference that contains the custom card layout
107
+ */
38
108
  constructor(templateRef) {
39
109
  this.templateRef = templateRef;
40
110
  }
@@ -77,53 +147,63 @@ class HubBoardComponent {
77
147
  this.onColumnMoved = new EventEmitter();
78
148
  // emit an event when the user has scrolled to the end of a specific column in the board.
79
149
  this.reachedEnd = new EventEmitter();
80
- /* Defines a default enter predicate function for the drag and drop operation. */
150
+ /**
151
+ * Default predicate function that allows all drag and drop operations.
152
+ * This function is used when no custom predicate is provided for a column.
153
+ *
154
+ * @returns Always returns true, allowing any card to be dropped in any column
155
+ */
81
156
  this.defaultEnterPredicateFn = () => true;
82
157
  }
83
158
  /**
84
- * Emits an event with the clicked item as a parameter.
159
+ * Handles card click events and emits the clicked card data.
160
+ * This method is triggered when a user clicks on a card within the board.
85
161
  *
86
- * @param {any} item - Represents the item that was clicked on the card.
162
+ * @param item - The card data object that was clicked
87
163
  */
88
164
  cardClick(item) {
89
165
  this.onCardClick.next(item);
90
166
  }
91
167
  /**
92
- * Used to handle the event when a column is dropped in a drag and drop operation, and it moves the column in the array and
93
- * emits an event.
168
+ * Handles column reordering when a column is dropped after being dragged.
169
+ * This method updates the column positions in the array and emits a column moved event.
94
170
  *
95
- * @param event - represents the drag and drop event that occurred.
171
+ * @param event - The drag and drop event containing information about the moved column
96
172
  */
97
173
  dropColumn(event) {
98
174
  moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
99
175
  this.onColumnMoved.emit(event);
100
176
  }
101
177
  /**
102
- * Used to handle the dropping of a card in a drag and drop operation, either moving the card within the same container or
103
- * transferring it to a different container.
178
+ * Handles card drag and drop operations, supporting both reordering within the same column
179
+ * and transferring cards between different columns.
104
180
  *
105
- * @param event - a generic type that takes three arguments:
181
+ * @param event - The drag and drop event containing source/target containers and card data
106
182
  */
107
183
  dropCard(event) {
184
+ // Check if the card was moved within the same column
108
185
  if (event.previousContainer === event.container) {
186
+ // Reorder the card within the same column
109
187
  moveItemInArray(event.container.data.cards, event.previousIndex, event.currentIndex);
110
188
  }
111
189
  else {
190
+ // Transfer the card from one column to another
112
191
  transferArrayItem(event.previousContainer.data.cards, event.container.data.cards, event.previousIndex, event.currentIndex);
113
192
  }
114
193
  this.onCardMoved.emit(event);
115
194
  }
116
195
  /**
117
- * Checks if the user has scrolled to the end of a specific element and emits an event if so.
196
+ * Detects when a column has been scrolled to the bottom and emits a reachedEnd event.
197
+ * This is useful for implementing lazy loading or infinite scroll functionality.
118
198
  *
119
- * @param {number} index - The index parameter is a number that represents the index of the column being scrolled.
120
- * @param {Event} event - The event parameter is an object that represents the scroll event. It contains information about the
121
- * scroll event, such as the source element that triggered the event, the amount of scrolling that has occurred, and the dimensions
122
- * of the scrollable area.
199
+ * @param index - The index of the column that was scrolled
200
+ * @param event - The scroll event containing target element and scroll position information
123
201
  */
124
202
  onScroll(index, event) {
125
203
  const el = event.target;
204
+ // Check if the element exists and if we've scrolled to the bottom
126
205
  if (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {
206
+ // Emit event with column index and data for lazy loading purposes
127
207
  this.reachedEnd.emit({
128
208
  index,
129
209
  data: this.board()?.columns?.[index] ?? []
@@ -146,6 +226,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
146
226
  type: Output
147
227
  }] } });
148
228
 
229
+ /**
230
+ * Angular module that provides board functionality with drag-and-drop support.
231
+ *
232
+ * This module includes all the necessary components and directives for creating
233
+ * Kanban-style boards with customizable columns, cards, and templates.
234
+ *
235
+ * @deprecated Use standalone components instead. Import individual components and directives directly.
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * // Legacy module approach (not recommended)
240
+ * import { BoardModule } from 'ng-hub-ui-board';
241
+ *
242
+ * @NgModule({
243
+ * imports: [BoardModule]
244
+ * })
245
+ * export class AppModule {}
246
+ *
247
+ * // Recommended standalone approach
248
+ * import { HubBoardComponent, CardTemplateDirective } from 'ng-hub-ui-board';
249
+ *
250
+ * @Component({
251
+ * standalone: true,
252
+ * imports: [HubBoardComponent, CardTemplateDirective]
253
+ * })
254
+ * export class MyComponent {}
255
+ * ```
256
+ */
149
257
  class BoardModule {
150
258
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BoardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
151
259
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.8", ngImport: i0, type: BoardModule, imports: [HubBoardComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-board.mjs","sources":["../../../projects/board/src/lib/directives/board-column-footer.directive.ts","../../../projects/board/src/lib/directives/board-column-header.directive.ts","../../../projects/board/src/lib/directives/card-template.directive.ts","../../../projects/board/src/lib/components/board/board.component.ts","../../../projects/board/src/lib/components/board/board.component.html","../../../projects/board/src/lib/board.module.ts","../../../projects/board/src/lib/pipes/invert-color.pipe.ts","../../../projects/board/src/public-api.ts","../../../projects/board/src/ng-hub-ui-board.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[columnFooterTpt]',\n\tstandalone: true\n})\nexport class BoardColumnFooterDirective {\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[columnHeaderTpt]',\n\tstandalone: true\n})\nexport class BoardColumnHeaderDirective {\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, ElementRef, TemplateRef } from '@angular/core';\n\n@Directive({\n\tselector: '[cardTpt]',\n\tstandalone: true\n})\nexport class CardTemplateDirective {\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import {\n\tCdkDragDrop,\n\tDragDropModule,\n\tmoveItemInArray,\n\ttransferArrayItem\n} from '@angular/cdk/drag-drop';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tEventEmitter,\n\tOutput,\n\tSignal,\n\tTemplateRef,\n\tcomputed,\n\tcontentChild,\n\tinput\n} from '@angular/core';\nimport { BoardColumnFooterDirective } from '../../directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from '../../directives/board-column-header.directive';\nimport { CardTemplateDirective } from '../../directives/card-template.directive';\nimport { Board } from '../../models/board';\nimport { BoardCard } from '../../models/board-card';\nimport { BoardColumn } from '../../models/board-column';\nimport { ReachedEndEvent } from '../../models/reached-end-event';\n\n@Component({\n\tselector: 'hub-board, hub-ui-board',\n\ttemplateUrl: './board.component.html',\n\tstyleUrls: ['./board.component.scss'],\n\tstandalone: true,\n\timports: [NgClass, NgStyle, NgTemplateOutlet, DragDropModule]\n})\nexport class HubBoardComponent {\n\treadonly board = input<Board>();\n\n\tcolumns: Signal<Array<BoardColumn>> = computed(() => {\n\t\treturn this.board()?.columns ?? [];\n\t});\n\n\t// Used to disable the sorting of columns in the board\n\treadonly columnSortingDisabled = input<boolean>(false);\n\n\t// A template reference for the card template\n\treadonly cardTpt = contentChild(CardTemplateDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// A template reference for the column header template\n\treadonly columnHeaderTpt = contentChild(BoardColumnHeaderDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// A template reference for the column footer template\n\treadonly columnFooterTpt = contentChild(BoardColumnFooterDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// triggered when a card is clicked\n\t@Output() onCardClick = new EventEmitter<BoardCard>();\n\n\t// triggered when a card is moved\n\t@Output() onCardMoved = new EventEmitter<\n\t\tCdkDragDrop<BoardColumn, BoardColumn, BoardCard<any>>\n\t>();\n\n\t// triggered when a column is moved\n\t@Output() onColumnMoved = new EventEmitter<CdkDragDrop<BoardColumn[]>>();\n\n\t// emit an event when the user has scrolled to the end of a specific column in the board.\n\t@Output() reachedEnd = new EventEmitter<ReachedEndEvent>();\n\n\t/* Defines a default enter predicate function for the drag and drop operation. */\n\tdefaultEnterPredicateFn = () => true;\n\n\t/**\n\t * Emits an event with the clicked item as a parameter.\n\t *\n\t * @param {any} item - Represents the item that was clicked on the card.\n\t */\n\tcardClick(item: any) {\n\t\tthis.onCardClick.next(item);\n\t}\n\n\t/**\n\t * Used to handle the event when a column is dropped in a drag and drop operation, and it moves the column in the array and\n\t * emits an event.\n\t *\n\t * @param event - represents the drag and drop event that occurred.\n\t */\n\tdropColumn(event: CdkDragDrop<any>) {\n\t\tmoveItemInArray(\n\t\t\tevent.container.data,\n\t\t\tevent.previousIndex,\n\t\t\tevent.currentIndex\n\t\t);\n\t\tthis.onColumnMoved.emit(event);\n\t}\n\n\t/**\n\t * Used to handle the dropping of a card in a drag and drop operation, either moving the card within the same container or\n\t * transferring it to a different container.\n\t *\n\t * @param event - a generic type that takes three arguments:\n\t */\n\tdropCard(event: CdkDragDrop<BoardColumn, BoardColumn, BoardCard<any>>) {\n\t\tif (event.previousContainer === event.container) {\n\t\t\tmoveItemInArray(\n\t\t\t\tevent.container.data.cards,\n\t\t\t\tevent.previousIndex,\n\t\t\t\tevent.currentIndex\n\t\t\t);\n\t\t} else {\n\t\t\ttransferArrayItem(\n\t\t\t\tevent.previousContainer.data.cards,\n\t\t\t\tevent.container.data.cards,\n\t\t\t\tevent.previousIndex,\n\t\t\t\tevent.currentIndex\n\t\t\t);\n\t\t}\n\t\tthis.onCardMoved.emit(event);\n\t}\n\n\t/**\n\t * Checks if the user has scrolled to the end of a specific element and emits an event if so.\n\t *\n\t * @param {number} index - The index parameter is a number that represents the index of the column being scrolled.\n\t * @param {Event} event - The event parameter is an object that represents the scroll event. It contains information about the\n\t * scroll event, such as the source element that triggered the event, the amount of scrolling that has occurred, and the dimensions\n\t * of the scrollable area.\n\t */\n\tonScroll(index: number, event: Event) {\n\t\tconst el = event.target as HTMLElement;\n\t\tif (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n\t\t\tthis.reachedEnd.emit({\n\t\t\t\tindex,\n\t\t\t\tdata: this.board()?.columns?.[index] ?? []\n\t\t\t});\n\t\t}\n\t}\n}\n","@if (columns().length) {\n\t<div\n\t\tclass=\"hub-board\"\n\t\tcdkDropList\n\t\tcdkDropListOrientation=\"horizontal\"\n\t\t[cdkDropListData]=\"columns()\"\n\t\t(cdkDropListDropped)=\"dropColumn($event)\"\n\t\t[cdkDropListSortingDisabled]=\"columnSortingDisabled()\"\n\t>\n\t\t<div cdkDropListGroup class=\"hub-board__columns\">\n\t\t\t@for (column of columns(); let index = $index; track column) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-board__column-container\"\n\t\t\t\t\tcdkDrag\n\t\t\t\t\t[cdkDragData]=\"column\"\n\t\t\t\t\t[cdkDragDisabled]=\"column.disabled\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-board__column\"\n\t\t\t\t\t\t[ngClass]=\"column.classlist\"\n\t\t\t\t\t\t[ngStyle]=\"column.style\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"hub-board__column-header\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\tcolumnHeaderTpt() || defaultColumnHeaderTpt\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ column: column }\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-board__column-body\"\n\t\t\t\t\t\t\tcdkDropList\n\t\t\t\t\t\t\t[cdkDropListData]=\"column\"\n\t\t\t\t\t\t\t(cdkDropListDropped)=\"dropCard($event)\"\n\t\t\t\t\t\t\t(scroll)=\"onScroll(index, $event)\"\n\t\t\t\t\t\t\t[cdkDropListEnterPredicate]=\"\n\t\t\t\t\t\t\t\tcolumn.predicate ?? defaultEnterPredicateFn\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t[cdkDropListSortingDisabled]=\"\n\t\t\t\t\t\t\t\tcolumn.cardSortingDisabled\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (\n\t\t\t\t\t\t\t\tcard of column.cards;\n\t\t\t\t\t\t\t\tlet index = $index;\n\t\t\t\t\t\t\t\ttrack card\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"hub-board__card\"\n\t\t\t\t\t\t\t\t\t[class.hub-board__card--disabled]=\"\n\t\t\t\t\t\t\t\t\t\tcard.disabled\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\tcdkDrag\n\t\t\t\t\t\t\t\t\t[cdkDragData]=\"card\"\n\t\t\t\t\t\t\t\t\t[cdkDragDisabled]=\"card.disabled\"\n\t\t\t\t\t\t\t\t\t(click)=\"cardClick(card)\"\n\t\t\t\t\t\t\t\t\t(mousedown)=\"\n\t\t\t\t\t\t\t\t\t\tcard.disabled &&\n\t\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"card.classlist\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"card.style\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div class=\"hub-board__card-body\">\n\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\t\t\t\tcardTpt() || defaultCardTpt\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\t\titem: card,\n\t\t\t\t\t\t\t\t\t\t\t\tcolumn\n\t\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t@if (columnFooterTpt()) {\n\t\t\t\t\t\t\t<div class=\"hub-board__column-footer\">\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\t\tcolumnFooterTpt() ?? null\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\tcolumn: column\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n}\n\n<ng-template #defaultCardTpt let-item=\"item\">\n\t<h6>{{ item.title }}</h6>\n\t<p class=\"card-text\">{{ item.description }}</p>\n</ng-template>\n\n<ng-template #defaultColumnHeaderTpt let-column=\"column\">\n\t<div class=\"d-flex flex-column\">\n\t\t<h5 class=\"hub-board__column-header-title\">\n\t\t\t{{ column.title }}\n\t\t</h5>\n\t\t<h6 class=\"hub-board__column-header-subtitle\">\n\t\t\t{{ column.description }}\n\t\t</h6>\n\t</div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { HubBoardComponent } from './components/board/board.component';\nimport { BoardColumnFooterDirective } from './directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from './directives/board-column-header.directive';\nimport { CardTemplateDirective } from './directives/card-template.directive';\n\n@NgModule({\n\tdeclarations: [],\n\timports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective\n\t],\n\texports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective\n\t]\n})\nexport class BoardModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'invertColor',\n\tstandalone: true\n})\nexport class InvertColorPipe implements PipeTransform {\n\ttransform(hex: string, bw: boolean): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\t\t// invert color components\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\t\t// pad each with zeros and return\n\t\treturn '#' + r.padStart(2, 0) + g.padStart(2, 0) + b.padStart(2, 0);\n\t}\n}\n","/*\n * Public API Surface of board\n */\n\n// module\nexport * from './lib/board.module';\n\n// directives\nexport * from './lib/directives/board-column-footer.directive';\nexport * from './lib/directives/board-column-header.directive';\nexport * from './lib/directives/card-template.directive';\n\n// components\nexport * from './lib/components/board/board.component';\n\n// pipes\nexport * from './lib/pipes/invert-color.pipe';\n\n// models\nexport * from './lib/models/board';\nexport * from './lib/models/board-card';\nexport * from './lib/models/board-column';\nexport * from './lib/models/reached-end-event';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-hub-ui-board.mjs","sources":["../../../projects/board/src/lib/directives/board-column-footer.directive.ts","../../../projects/board/src/lib/directives/board-column-header.directive.ts","../../../projects/board/src/lib/directives/card-template.directive.ts","../../../projects/board/src/lib/components/board/board.component.ts","../../../projects/board/src/lib/components/board/board.component.html","../../../projects/board/src/lib/board.module.ts","../../../projects/board/src/lib/pipes/invert-color.pipe.ts","../../../projects/board/src/public-api.ts","../../../projects/board/src/ng-hub-ui-board.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of column footer templates within board columns.\n * \n * This directive enables developers to define custom templates for column footers,\n * perfect for displaying summary information, quick actions, statistics,\n * or any column-specific controls at the bottom of each column.\n * \n * @example\n * ```html\n * <ng-template columnFooterTpt let-column=\"column\">\n * <div class=\"custom-footer\">\n * <div class=\"column-summary\">\n * <span>Total: {{ column.cards.length }}</span>\n * <span>Priority Items: {{ getPriorityItems(column) }}</span>\n * </div>\n * <button (click)=\"quickAddCard(column)\">Quick Add</button>\n * </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[columnFooterTpt]',\n\tstandalone: true\n})\nexport class BoardColumnFooterDirective {\n\t/**\n\t * Creates a new BoardColumnFooterDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom column footer layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of column header templates within board columns.\n * \n * This directive provides the ability to define custom templates for rendering column headers,\n * giving developers full control over the appearance and functionality of column headers\n * including titles, descriptions, actions, and metadata display.\n * \n * @example\n * ```html\n * <ng-template columnHeaderTpt let-column=\"column\">\n * <div class=\"custom-header\">\n * <h2>{{ column.title }}</h2>\n * <span class=\"card-count\">{{ column.cards.length }} items</span>\n * <button (click)=\"addCard(column)\">Add Card</button>\n * </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[columnHeaderTpt]',\n\tstandalone: true\n})\nexport class BoardColumnHeaderDirective {\n\t/**\n\t * Creates a new BoardColumnHeaderDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom column header layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Directive that allows customization of card templates within board columns.\n * \n * This directive is used to define custom templates for rendering board cards.\n * It provides access to the template reference that can be used by the board component\n * to render cards with custom layouts and styling.\n * \n * @example\n * ```html\n * <ng-template cardTpt let-card=\"item\" let-column=\"column\">\n * <div class=\"custom-card\">\n * <h3>{{ card.title }}</h3>\n * <p>{{ card.description }}</p>\n * </div>\n * </ng-template>\n * ```\n */\n@Directive({\n\tselector: '[cardTpt]',\n\tstandalone: true\n})\nexport class CardTemplateDirective {\n\t/**\n\t * Creates a new CardTemplateDirective instance.\n\t * \n\t * @param templateRef - The template reference that contains the custom card layout\n\t */\n\tconstructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import {\n\tCdkDragDrop,\n\tDragDropModule,\n\tmoveItemInArray,\n\ttransferArrayItem\n} from '@angular/cdk/drag-drop';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n\tComponent,\n\tEventEmitter,\n\tOutput,\n\tSignal,\n\tTemplateRef,\n\tcomputed,\n\tcontentChild,\n\tinput\n} from '@angular/core';\nimport { BoardColumnFooterDirective } from '../../directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from '../../directives/board-column-header.directive';\nimport { CardTemplateDirective } from '../../directives/card-template.directive';\nimport { Board } from '../../models/board';\nimport { BoardCard } from '../../models/board-card';\nimport { BoardColumn } from '../../models/board-column';\nimport { ReachedEndEvent } from '../../models/reached-end-event';\n\n@Component({\n\tselector: 'hub-board, hub-ui-board',\n\ttemplateUrl: './board.component.html',\n\tstyleUrls: ['./board.component.scss'],\n\tstandalone: true,\n\timports: [NgClass, NgStyle, NgTemplateOutlet, DragDropModule]\n})\nexport class HubBoardComponent {\n\treadonly board = input<Board>();\n\n\tcolumns: Signal<Array<BoardColumn>> = computed(() => {\n\t\treturn this.board()?.columns ?? [];\n\t});\n\n\t// Used to disable the sorting of columns in the board\n\treadonly columnSortingDisabled = input<boolean>(false);\n\n\t// A template reference for the card template\n\treadonly cardTpt = contentChild(CardTemplateDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// A template reference for the column header template\n\treadonly columnHeaderTpt = contentChild(BoardColumnHeaderDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// A template reference for the column footer template\n\treadonly columnFooterTpt = contentChild(BoardColumnFooterDirective, {\n\t\tread: TemplateRef<unknown>\n\t});\n\n\t// triggered when a card is clicked\n\t@Output() onCardClick = new EventEmitter<BoardCard>();\n\n\t// triggered when a card is moved\n\t@Output() onCardMoved = new EventEmitter<\n\t\tCdkDragDrop<BoardColumn, BoardColumn, BoardCard<any>>\n\t>();\n\n\t// triggered when a column is moved\n\t@Output() onColumnMoved = new EventEmitter<CdkDragDrop<BoardColumn[]>>();\n\n\t// emit an event when the user has scrolled to the end of a specific column in the board.\n\t@Output() reachedEnd = new EventEmitter<ReachedEndEvent>();\n\n\t/**\n\t * Default predicate function that allows all drag and drop operations.\n\t * This function is used when no custom predicate is provided for a column.\n\t * \n\t * @returns Always returns true, allowing any card to be dropped in any column\n\t */\n\tdefaultEnterPredicateFn = () => true;\n\n\t/**\n\t * Handles card click events and emits the clicked card data.\n\t * This method is triggered when a user clicks on a card within the board.\n\t *\n\t * @param item - The card data object that was clicked\n\t */\n\tcardClick(item: BoardCard) {\n\t\tthis.onCardClick.next(item);\n\t}\n\n\t/**\n\t * Handles column reordering when a column is dropped after being dragged.\n\t * This method updates the column positions in the array and emits a column moved event.\n\t *\n\t * @param event - The drag and drop event containing information about the moved column\n\t */\n\tdropColumn(event: CdkDragDrop<BoardColumn[]>) {\n\t\tmoveItemInArray(\n\t\t\tevent.container.data,\n\t\t\tevent.previousIndex,\n\t\t\tevent.currentIndex\n\t\t);\n\t\tthis.onColumnMoved.emit(event);\n\t}\n\n\t/**\n\t * Handles card drag and drop operations, supporting both reordering within the same column\n\t * and transferring cards between different columns.\n\t *\n\t * @param event - The drag and drop event containing source/target containers and card data\n\t */\n\tdropCard(event: CdkDragDrop<BoardColumn, BoardColumn, BoardCard<any>>) {\n\t\t// Check if the card was moved within the same column\n\t\tif (event.previousContainer === event.container) {\n\t\t\t// Reorder the card within the same column\n\t\t\tmoveItemInArray(\n\t\t\t\tevent.container.data.cards,\n\t\t\t\tevent.previousIndex,\n\t\t\t\tevent.currentIndex\n\t\t\t);\n\t\t} else {\n\t\t\t// Transfer the card from one column to another\n\t\t\ttransferArrayItem(\n\t\t\t\tevent.previousContainer.data.cards,\n\t\t\t\tevent.container.data.cards,\n\t\t\t\tevent.previousIndex,\n\t\t\t\tevent.currentIndex\n\t\t\t);\n\t\t}\n\t\tthis.onCardMoved.emit(event);\n\t}\n\n\t/**\n\t * Detects when a column has been scrolled to the bottom and emits a reachedEnd event.\n\t * This is useful for implementing lazy loading or infinite scroll functionality.\n\t *\n\t * @param index - The index of the column that was scrolled\n\t * @param event - The scroll event containing target element and scroll position information\n\t */\n\tonScroll(index: number, event: Event) {\n\t\tconst el = event.target as HTMLElement;\n\t\t\n\t\t// Check if the element exists and if we've scrolled to the bottom\n\t\tif (el && el.scrollTop + el.clientHeight >= el.scrollHeight) {\n\t\t\t// Emit event with column index and data for lazy loading purposes\n\t\t\tthis.reachedEnd.emit({\n\t\t\t\tindex,\n\t\t\t\tdata: this.board()?.columns?.[index] ?? []\n\t\t\t});\n\t\t}\n\t}\n}\n","@if (columns().length) {\n\t<div\n\t\tclass=\"hub-board\"\n\t\tcdkDropList\n\t\tcdkDropListOrientation=\"horizontal\"\n\t\t[cdkDropListData]=\"columns()\"\n\t\t(cdkDropListDropped)=\"dropColumn($event)\"\n\t\t[cdkDropListSortingDisabled]=\"columnSortingDisabled()\"\n\t>\n\t\t<div cdkDropListGroup class=\"hub-board__columns\">\n\t\t\t@for (column of columns(); let index = $index; track column) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-board__column-container\"\n\t\t\t\t\tcdkDrag\n\t\t\t\t\t[cdkDragData]=\"column\"\n\t\t\t\t\t[cdkDragDisabled]=\"column.disabled\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hub-board__column\"\n\t\t\t\t\t\t[ngClass]=\"column.classlist\"\n\t\t\t\t\t\t[ngStyle]=\"column.style\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"hub-board__column-header\">\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\tcolumnHeaderTpt() || defaultColumnHeaderTpt\n\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ column: column }\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"hub-board__column-body\"\n\t\t\t\t\t\t\tcdkDropList\n\t\t\t\t\t\t\t[cdkDropListData]=\"column\"\n\t\t\t\t\t\t\t(cdkDropListDropped)=\"dropCard($event)\"\n\t\t\t\t\t\t\t(scroll)=\"onScroll(index, $event)\"\n\t\t\t\t\t\t\t[cdkDropListEnterPredicate]=\"\n\t\t\t\t\t\t\t\tcolumn.predicate ?? defaultEnterPredicateFn\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t[cdkDropListSortingDisabled]=\"\n\t\t\t\t\t\t\t\tcolumn.cardSortingDisabled\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t@for (\n\t\t\t\t\t\t\t\tcard of column.cards;\n\t\t\t\t\t\t\t\tlet index = $index;\n\t\t\t\t\t\t\t\ttrack card\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"hub-board__card\"\n\t\t\t\t\t\t\t\t\t[class.hub-board__card--disabled]=\"\n\t\t\t\t\t\t\t\t\t\tcard.disabled\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\tcdkDrag\n\t\t\t\t\t\t\t\t\t[cdkDragData]=\"card\"\n\t\t\t\t\t\t\t\t\t[cdkDragDisabled]=\"card.disabled\"\n\t\t\t\t\t\t\t\t\t(click)=\"cardClick(card)\"\n\t\t\t\t\t\t\t\t\t(mousedown)=\"\n\t\t\t\t\t\t\t\t\t\tcard.disabled &&\n\t\t\t\t\t\t\t\t\t\t\t$event.stopPropagation()\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[ngClass]=\"card.classlist\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"card.style\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div class=\"hub-board__card-body\">\n\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\t\t\t\tcardTpt() || defaultCardTpt\n\t\t\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\t\t\titem: card,\n\t\t\t\t\t\t\t\t\t\t\t\tcolumn\n\t\t\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t@if (columnFooterTpt()) {\n\t\t\t\t\t\t\t<div class=\"hub-board__column-footer\">\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"\n\t\t\t\t\t\t\t\t\t\tcolumnFooterTpt() ?? null\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{\n\t\t\t\t\t\t\t\t\t\tcolumn: column\n\t\t\t\t\t\t\t\t\t}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t</div>\n}\n\n<ng-template #defaultCardTpt let-item=\"item\">\n\t<h6>{{ item.title }}</h6>\n\t<p class=\"card-text\">{{ item.description }}</p>\n</ng-template>\n\n<ng-template #defaultColumnHeaderTpt let-column=\"column\">\n\t<div class=\"d-flex flex-column\">\n\t\t<h5 class=\"hub-board__column-header-title\">\n\t\t\t{{ column.title }}\n\t\t</h5>\n\t\t<h6 class=\"hub-board__column-header-subtitle\">\n\t\t\t{{ column.description }}\n\t\t</h6>\n\t</div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { HubBoardComponent } from './components/board/board.component';\nimport { BoardColumnFooterDirective } from './directives/board-column-footer.directive';\nimport { BoardColumnHeaderDirective } from './directives/board-column-header.directive';\nimport { CardTemplateDirective } from './directives/card-template.directive';\n\n/**\n * Angular module that provides board functionality with drag-and-drop support.\n * \n * This module includes all the necessary components and directives for creating\n * Kanban-style boards with customizable columns, cards, and templates.\n * \n * @deprecated Use standalone components instead. Import individual components and directives directly.\n * \n * @example\n * ```typescript\n * // Legacy module approach (not recommended)\n * import { BoardModule } from 'ng-hub-ui-board';\n * \n * @NgModule({\n * imports: [BoardModule]\n * })\n * export class AppModule {}\n * \n * // Recommended standalone approach\n * import { HubBoardComponent, CardTemplateDirective } from 'ng-hub-ui-board';\n * \n * @Component({\n * standalone: true,\n * imports: [HubBoardComponent, CardTemplateDirective]\n * })\n * export class MyComponent {}\n * ```\n */\n@NgModule({\n\tdeclarations: [],\n\timports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective\n\t],\n\texports: [\n\t\tHubBoardComponent,\n\t\tCardTemplateDirective,\n\t\tBoardColumnHeaderDirective,\n\t\tBoardColumnFooterDirective\n\t]\n})\nexport class BoardModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'invertColor',\n\tstandalone: true\n})\nexport class InvertColorPipe implements PipeTransform {\n\ttransform(hex: string, bw: boolean): unknown {\n\t\tif (!hex) {\n\t\t\treturn '#000000';\n\t\t}\n\n\t\tif (hex.indexOf('#') === 0) {\n\t\t\thex = hex.slice(1);\n\t\t}\n\n\t\t// convert 3-digit hex to 6-digits.\n\t\tif (hex.length === 3) {\n\t\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t\t}\n\t\tif (hex.length !== 6) {\n\t\t\tthrow new Error('Invalid HEX color.');\n\t\t}\n\t\tlet r: any = parseInt(hex.slice(0, 2), 16);\n\t\tlet g: any = parseInt(hex.slice(2, 4), 16);\n\t\tlet b: any = parseInt(hex.slice(4, 6), 16);\n\t\tif (bw) {\n\t\t\t// http://stackoverflow.com/a/3943023/112731\n\t\t\treturn r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n\t\t}\n\t\t// invert color components\n\t\tr = (255 - r).toString(16);\n\t\tg = (255 - g).toString(16);\n\t\tb = (255 - b).toString(16);\n\t\t// pad each with zeros and return\n\t\treturn '#' + r.padStart(2, 0) + g.padStart(2, 0) + b.padStart(2, 0);\n\t}\n}\n","/*\n * Public API Surface of board\n */\n\n// module\nexport * from './lib/board.module';\n\n// directives\nexport * from './lib/directives/board-column-footer.directive';\nexport * from './lib/directives/board-column-header.directive';\nexport * from './lib/directives/card-template.directive';\n\n// components\nexport * from './lib/components/board/board.component';\n\n// pipes\nexport * from './lib/pipes/invert-color.pipe';\n\n// models\nexport * from './lib/models/board';\nexport * from './lib/models/board-card';\nexport * from './lib/models/board-column';\nexport * from './lib/models/reached-end-event';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -3,6 +3,34 @@ import * as i1 from "./components/board/board.component";
3
3
  import * as i2 from "./directives/card-template.directive";
4
4
  import * as i3 from "./directives/board-column-header.directive";
5
5
  import * as i4 from "./directives/board-column-footer.directive";
6
+ /**
7
+ * Angular module that provides board functionality with drag-and-drop support.
8
+ *
9
+ * This module includes all the necessary components and directives for creating
10
+ * Kanban-style boards with customizable columns, cards, and templates.
11
+ *
12
+ * @deprecated Use standalone components instead. Import individual components and directives directly.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Legacy module approach (not recommended)
17
+ * import { BoardModule } from 'ng-hub-ui-board';
18
+ *
19
+ * @NgModule({
20
+ * imports: [BoardModule]
21
+ * })
22
+ * export class AppModule {}
23
+ *
24
+ * // Recommended standalone approach
25
+ * import { HubBoardComponent, CardTemplateDirective } from 'ng-hub-ui-board';
26
+ *
27
+ * @Component({
28
+ * standalone: true,
29
+ * imports: [HubBoardComponent, CardTemplateDirective]
30
+ * })
31
+ * export class MyComponent {}
32
+ * ```
33
+ */
6
34
  export declare class BoardModule {
7
35
  static ɵfac: i0.ɵɵFactoryDeclaration<BoardModule, never>;
8
36
  static ɵmod: i0.ɵɵNgModuleDeclaration<BoardModule, never, [typeof i1.HubBoardComponent, typeof i2.CardTemplateDirective, typeof i3.BoardColumnHeaderDirective, typeof i4.BoardColumnFooterDirective], [typeof i1.HubBoardComponent, typeof i2.CardTemplateDirective, typeof i3.BoardColumnHeaderDirective, typeof i4.BoardColumnFooterDirective]>;
@@ -16,34 +16,40 @@ export declare class HubBoardComponent {
16
16
  onCardMoved: EventEmitter<CdkDragDrop<BoardColumn<any>, BoardColumn<any>, BoardCard<any>>>;
17
17
  onColumnMoved: EventEmitter<CdkDragDrop<BoardColumn<any>[], BoardColumn<any>[], any>>;
18
18
  reachedEnd: EventEmitter<ReachedEndEvent<any>>;
19
+ /**
20
+ * Default predicate function that allows all drag and drop operations.
21
+ * This function is used when no custom predicate is provided for a column.
22
+ *
23
+ * @returns Always returns true, allowing any card to be dropped in any column
24
+ */
19
25
  defaultEnterPredicateFn: () => boolean;
20
26
  /**
21
- * Emits an event with the clicked item as a parameter.
27
+ * Handles card click events and emits the clicked card data.
28
+ * This method is triggered when a user clicks on a card within the board.
22
29
  *
23
- * @param {any} item - Represents the item that was clicked on the card.
30
+ * @param item - The card data object that was clicked
24
31
  */
25
- cardClick(item: any): void;
32
+ cardClick(item: BoardCard): void;
26
33
  /**
27
- * Used to handle the event when a column is dropped in a drag and drop operation, and it moves the column in the array and
28
- * emits an event.
34
+ * Handles column reordering when a column is dropped after being dragged.
35
+ * This method updates the column positions in the array and emits a column moved event.
29
36
  *
30
- * @param event - represents the drag and drop event that occurred.
37
+ * @param event - The drag and drop event containing information about the moved column
31
38
  */
32
- dropColumn(event: CdkDragDrop<any>): void;
39
+ dropColumn(event: CdkDragDrop<BoardColumn[]>): void;
33
40
  /**
34
- * Used to handle the dropping of a card in a drag and drop operation, either moving the card within the same container or
35
- * transferring it to a different container.
41
+ * Handles card drag and drop operations, supporting both reordering within the same column
42
+ * and transferring cards between different columns.
36
43
  *
37
- * @param event - a generic type that takes three arguments:
44
+ * @param event - The drag and drop event containing source/target containers and card data
38
45
  */
39
46
  dropCard(event: CdkDragDrop<BoardColumn, BoardColumn, BoardCard<any>>): void;
40
47
  /**
41
- * Checks if the user has scrolled to the end of a specific element and emits an event if so.
48
+ * Detects when a column has been scrolled to the bottom and emits a reachedEnd event.
49
+ * This is useful for implementing lazy loading or infinite scroll functionality.
42
50
  *
43
- * @param {number} index - The index parameter is a number that represents the index of the column being scrolled.
44
- * @param {Event} event - The event parameter is an object that represents the scroll event. It contains information about the
45
- * scroll event, such as the source element that triggered the event, the amount of scrolling that has occurred, and the dimensions
46
- * of the scrollable area.
51
+ * @param index - The index of the column that was scrolled
52
+ * @param event - The scroll event containing target element and scroll position information
47
53
  */
48
54
  onScroll(index: number, event: Event): void;
49
55
  static ɵfac: i0.ɵɵFactoryDeclaration<HubBoardComponent, never>;
@@ -1,7 +1,32 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * Directive that allows customization of column footer templates within board columns.
5
+ *
6
+ * This directive enables developers to define custom templates for column footers,
7
+ * perfect for displaying summary information, quick actions, statistics,
8
+ * or any column-specific controls at the bottom of each column.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * <ng-template columnFooterTpt let-column="column">
13
+ * <div class="custom-footer">
14
+ * <div class="column-summary">
15
+ * <span>Total: {{ column.cards.length }}</span>
16
+ * <span>Priority Items: {{ getPriorityItems(column) }}</span>
17
+ * </div>
18
+ * <button (click)="quickAddCard(column)">Quick Add</button>
19
+ * </div>
20
+ * </ng-template>
21
+ * ```
22
+ */
3
23
  export declare class BoardColumnFooterDirective {
4
24
  templateRef: TemplateRef<unknown>;
25
+ /**
26
+ * Creates a new BoardColumnFooterDirective instance.
27
+ *
28
+ * @param templateRef - The template reference that contains the custom column footer layout
29
+ */
5
30
  constructor(templateRef: TemplateRef<unknown>);
6
31
  static ɵfac: i0.ɵɵFactoryDeclaration<BoardColumnFooterDirective, never>;
7
32
  static ɵdir: i0.ɵɵDirectiveDeclaration<BoardColumnFooterDirective, "[columnFooterTpt]", never, {}, {}, never, never, true, never>;
@@ -1,7 +1,30 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * Directive that allows customization of column header templates within board columns.
5
+ *
6
+ * This directive provides the ability to define custom templates for rendering column headers,
7
+ * giving developers full control over the appearance and functionality of column headers
8
+ * including titles, descriptions, actions, and metadata display.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * <ng-template columnHeaderTpt let-column="column">
13
+ * <div class="custom-header">
14
+ * <h2>{{ column.title }}</h2>
15
+ * <span class="card-count">{{ column.cards.length }} items</span>
16
+ * <button (click)="addCard(column)">Add Card</button>
17
+ * </div>
18
+ * </ng-template>
19
+ * ```
20
+ */
3
21
  export declare class BoardColumnHeaderDirective {
4
22
  templateRef: TemplateRef<unknown>;
23
+ /**
24
+ * Creates a new BoardColumnHeaderDirective instance.
25
+ *
26
+ * @param templateRef - The template reference that contains the custom column header layout
27
+ */
5
28
  constructor(templateRef: TemplateRef<unknown>);
6
29
  static ɵfac: i0.ɵɵFactoryDeclaration<BoardColumnHeaderDirective, never>;
7
30
  static ɵdir: i0.ɵɵDirectiveDeclaration<BoardColumnHeaderDirective, "[columnHeaderTpt]", never, {}, {}, never, never, true, never>;
@@ -1,7 +1,29 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * Directive that allows customization of card templates within board columns.
5
+ *
6
+ * This directive is used to define custom templates for rendering board cards.
7
+ * It provides access to the template reference that can be used by the board component
8
+ * to render cards with custom layouts and styling.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * <ng-template cardTpt let-card="item" let-column="column">
13
+ * <div class="custom-card">
14
+ * <h3>{{ card.title }}</h3>
15
+ * <p>{{ card.description }}</p>
16
+ * </div>
17
+ * </ng-template>
18
+ * ```
19
+ */
3
20
  export declare class CardTemplateDirective {
4
21
  templateRef: TemplateRef<unknown>;
22
+ /**
23
+ * Creates a new CardTemplateDirective instance.
24
+ *
25
+ * @param templateRef - The template reference that contains the custom card layout
26
+ */
5
27
  constructor(templateRef: TemplateRef<unknown>);
6
28
  static ɵfac: i0.ɵɵFactoryDeclaration<CardTemplateDirective, never>;
7
29
  static ɵdir: i0.ɵɵDirectiveDeclaration<CardTemplateDirective, "[cardTpt]", never, {}, {}, never, never, true, never>;
@@ -1,12 +1,42 @@
1
+ /**
2
+ * Represents a card within a board column, containing the core data and behavior.
3
+ *
4
+ * @template T The type of custom data attached to the card (defaults to `any`).
5
+ */
1
6
  export interface BoardCard<T = any> {
7
+ /**
8
+ * Unique identifier for the card.
9
+ */
2
10
  id?: number;
11
+ /**
12
+ * The identifier of the column this card belongs to.
13
+ */
3
14
  columnId?: number;
15
+ /**
16
+ * The main title displayed on the card.
17
+ */
4
18
  title: string;
19
+ /**
20
+ * Optional description providing additional details about the card.
21
+ */
5
22
  description?: string;
23
+ /**
24
+ * Custom data that can be attached to this card, such as metadata,
25
+ * priority levels, due dates, or any application-specific information.
26
+ */
6
27
  data?: T;
28
+ /**
29
+ * Optional list of CSS classes to apply to the card for custom styling.
30
+ */
7
31
  classlist?: string[];
32
+ /**
33
+ * Custom inline styles for the card, represented as a key-value mapping.
34
+ */
8
35
  style?: {
9
36
  [key: string]: any;
10
37
  };
38
+ /**
39
+ * If true, the card is disabled and cannot be interacted with (e.g., dragged or clicked).
40
+ */
11
41
  disabled?: boolean;
12
42
  }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-hub-ui-board",
3
- "version": "19.2.0",
3
+ "version": "19.2.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
Binary file