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 +42 -21
- package/fesm2022/ng-hub-ui-board.mjs +122 -14
- package/fesm2022/ng-hub-ui-board.mjs.map +1 -1
- package/lib/board.module.d.ts +28 -0
- package/lib/components/board/board.component.d.ts +21 -15
- package/lib/directives/board-column-footer.directive.d.ts +25 -0
- package/lib/directives/board-column-header.directive.d.ts +23 -0
- package/lib/directives/card-template.directive.d.ts +22 -0
- package/lib/models/board-card.d.ts +30 -0
- package/ng-hub-ui-board-19.2.1.tgz +0 -0
- package/package.json +1 -1
- package/ng-hub-ui-board-19.2.0.tgz +0 -0
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
|
|
27
|
-
- 🔧 Bootstrap compatible
|
|
28
|
-
- ⚡ Virtual scrolling
|
|
29
|
-
- 🎭 Custom styling
|
|
30
|
-
- 🔒
|
|
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
|
-
|
|
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" (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
483
|
-
|
|
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
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
-
*
|
|
93
|
-
* emits
|
|
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 -
|
|
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
|
-
*
|
|
103
|
-
* transferring
|
|
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 -
|
|
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
|
-
*
|
|
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
|
|
120
|
-
* @param
|
|
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":";;;;;;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;MAKU,0BAA0B,CAAA;AACtC;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAW,CAAA,WAAA,GAAX,WAAW;;8GANlB,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACvBD;;;;;;;;;;;;;;;;;AAiBG;MAKU,0BAA0B,CAAA;AACtC;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAW,CAAA,WAAA,GAAX,WAAW;;8GANlB,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACrBD;;;;;;;;;;;;;;;;AAgBG;MAKU,qBAAqB,CAAA;AACjC;;;;AAIG;AACH,IAAA,WAAA,CAAmB,WAAiC,EAAA;QAAjC,IAAW,CAAA,WAAA,GAAX,WAAW;;8GANlB,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;MCUY,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QAQU,IAAK,CAAA,KAAA,GAAG,KAAK,EAAS;AAE/B,QAAA,IAAA,CAAA,OAAO,GAA+B,QAAQ,CAAC,MAAK;YACnD,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,IAAI,EAAE;AACnC,SAAC,CAAC;;AAGO,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAU,KAAK,CAAC;;AAG7C,QAAA,IAAA,CAAA,OAAO,GAAG,YAAY,CAAC,qBAAqB,EAAE;YACtD,IAAI,GAAE,WAAoB;AAC1B,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,0BAA0B,EAAE;YACnE,IAAI,GAAE,WAAoB;AAC1B,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,eAAe,GAAG,YAAY,CAAC,0BAA0B,EAAE;YACnE,IAAI,GAAE,WAAoB;AAC1B,SAAA,CAAC;;AAGQ,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAa;;AAG3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAErC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA8B;;AAG9D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAmB;AAE1D;;;;;AAKG;AACH,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,IAAI;AAyEpC;AAvEA;;;;;AAKG;AACH,IAAA,SAAS,CAAC,IAAe,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG5B;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAiC,EAAA;AAC3C,QAAA,eAAe,CACd,KAAK,CAAC,SAAS,CAAC,IAAI,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAClB;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG/B;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,KAA4D,EAAA;;QAEpE,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS,EAAE;;AAEhD,YAAA,eAAe,CACd,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAC1B,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAClB;;aACK;;YAEN,iBAAiB,CAChB,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAClC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAC1B,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CAClB;;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG7B;;;;;;AAMG;IACH,QAAQ,CAAC,KAAa,EAAE,KAAY,EAAA;AACnC,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,MAAqB;;AAGtC,QAAA,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,EAAE;;AAE5D,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACpB,KAAK;AACL,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI;AACxC,aAAA,CAAC;;;8GAnHQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAWG,qBAAqB,EAC9C,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAW,+EAIsB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAC3D,WAAW,EAIsB,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,0BAA0B,2BAC3D,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtDnB,+sHAoHA,EDtFW,MAAA,EAAA,CAAA,ucAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,oFAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEhD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACC,yBAAyB,EAAA,UAAA,EAGvB,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,+sHAAA,EAAA,MAAA,EAAA,CAAA,ucAAA,CAAA,EAAA;8BA4BnD,WAAW,EAAA,CAAA;sBAApB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAKS,aAAa,EAAA,CAAA;sBAAtB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;;;AE/DF;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAgBU,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAZtB,iBAAiB;YACjB,qBAAqB;YACrB,0BAA0B;AAC1B,YAAA,0BAA0B,aAG1B,iBAAiB;YACjB,qBAAqB;YACrB,0BAA0B;YAC1B,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAGf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,YAZtB,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAYN,WAAW,EAAA,UAAA,EAAA,CAAA;kBAfvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACR,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B;AACA,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACR,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B;AACA;AACD,iBAAA;;;MC1CY,eAAe,CAAA;IAC3B,SAAS,CAAC,GAAW,EAAE,EAAW,EAAA;QACjC,IAAI,CAAC,GAAG,EAAE;AACT,YAAA,OAAO,SAAS;;QAGjB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAInB,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;;AAE1D,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;;AAEtC,QAAA,IAAI,CAAC,GAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAQ,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,EAAE,EAAE;;YAEP,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,SAAS,GAAG,SAAS;;;QAGvE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1B,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1B,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;;AAE1B,QAAA,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;8GA7BxD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE;AACZ,iBAAA;;;ACLD;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|
package/lib/board.module.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
|
30
|
+
* @param item - The card data object that was clicked
|
|
24
31
|
*/
|
|
25
|
-
cardClick(item:
|
|
32
|
+
cardClick(item: BoardCard): void;
|
|
26
33
|
/**
|
|
27
|
-
*
|
|
28
|
-
* emits
|
|
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 -
|
|
37
|
+
* @param event - The drag and drop event containing information about the moved column
|
|
31
38
|
*/
|
|
32
|
-
dropColumn(event: CdkDragDrop<
|
|
39
|
+
dropColumn(event: CdkDragDrop<BoardColumn[]>): void;
|
|
33
40
|
/**
|
|
34
|
-
*
|
|
35
|
-
* transferring
|
|
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 -
|
|
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
|
-
*
|
|
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
|
|
44
|
-
* @param
|
|
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
|
Binary file
|