Компонент Kanban-доски для Angular | ng-hub-ui-board

Компонент Kanban-доски для Angular с drag and drop, пользовательскими шаблонами карточек, потоками по столбцам и CSS-переменными для бизнес-дашбордов.

Справочник API

Вот полный контракт board: всё, что можно привязать, прослушать, спроецировать и тематизировать, собрано в одном месте. Подключите то, что нужно, и оформите так, как хотите — это standalone и дружит с сигналами.

Входные свойства

Настройте board с помощью 5 входных свойств. Привязывайте их, как любой @Input в Angular.

ИмяТипПо умолчаниюОписание
boardBoardundefinedПолное определение доски для отрисовки: объект, массив columns которого содержит данные колонок и карточек, отображаемые компонентом.
boardLabelstring'Board'Доступное имя контейнера списков доски.
variant'primary' | 'success' | 'danger' | 'warning' | 'info' | stringundefinedСемантический акцент плейсхолдера перетаскивания. Принимает встроенные акценты дизайн-системы, имя любого зарегистрированного пользовательского акцента или буквальный цвет (#hex, rgb(), oklch(), именованный цвет CSS); если не задан, используется акцент primary.
columnSortingDisabledbooleanfalseЕсли true, изменение порядка колонок перетаскиванием отключено для всей доски.
dragBehavior'ghost' | 'hide' | 'collapse''collapse'Управляет тем, как выглядит перетаскиваемый элемент во время перетаскивания: 'ghost' оставляет его видимым с половинной непрозрачностью, 'hide' делает его невидимым, но сохраняет занимаемое место, а 'collapse' полностью убирает и элемент, и его место.

События

Реагируйте на то, что делает board, — 4 событий, к которым можно подключить вашу логику.

ИмяТипОписание
onCardClickOutputEmitterRef<BoardCard>Испускает нажатую карточку при каждом клике по карточке внутри доски.
onCardMovedOutputEmitterRef<CardDragDropEvent>Вызывается, когда карточка перемещается — внутри своей колонки или в другую колонку — перетаскиванием указателем или с клавиатуры; предоставляет предыдущий и текущий индексы, а также исходную и целевую колонки.
onColumnMovedOutputEmitterRef<ColumnDragDropEvent>Вызывается при изменении порядка колонок перетаскиванием; предоставляет предыдущий и текущий индексы колонки.
reachedEndOutputEmitterRef<ReachedEndEvent>Вызывается, когда тело колонки прокручено до самого низа; предоставляет индекс и данные колонки — позволяет реализовать бесконечную подгрузку при прокрутке.

Шаблоны

Сделайте его своим — 7 слотов шаблона позволяют проецировать собственную разметку.

ИмяОписаниеПример
cardTptЗаменяет содержимое карточки по умолчанию. Контекст шаблона предоставляет item (карточку) и column (её колонку), поэтому привязка выглядит как let-card="item".<hub-board [board]="board()"> <ng-template cardTpt let-card="item" let-column="column"> <strong>{{ card.title }}</strong> <small>{{ column.title }}</small> </ng-template> </hub-board>
columnHeaderTptЗаменяет заголовок колонки по умолчанию. Контекст шаблона предоставляет column.<ng-template columnHeaderTpt let-column="column"> <h5>{{ column.title }}</h5> <span>{{ column.cards.length }} cards</span> </ng-template>
columnFooterTptДобавляет подвал под содержимым колонки. Контекст шаблона предоставляет column; без шаблона подвал не отрисовывается.<ng-template columnFooterTpt let-column="column"> <button type="button" (click)="addCard(column)">Add card</button> </ng-template>
cardPlaceholderПользовательская зона сброса, отображаемая при перетаскивании карточки. Контекст предоставляет card (перетаскиваемую карточку) и column (целевую колонку).<ng-template cardPlaceholder let-card="card" let-column="column"> <div class="drop-zone">Drop "{{ card?.title }}" in {{ column.title }}</div> </ng-template>
columnPlaceholderПользовательская зона сброса, отображаемая при перетаскивании колонки. Контекст предоставляет column (перетаскиваемую колонку).<ng-template columnPlaceholder let-column="column"> <div class="drop-zone">Drop column here</div> </ng-template>
cardDragPreviewПользовательский элемент, следующий за курсором при перетаскивании карточки. Контекст предоставляет card и column (исходную колонку).<ng-template cardDragPreview let-card="card" let-column="column"> <div class="preview">{{ card.title }} — {{ column.title }}</div> </ng-template>
columnDragPreviewПользовательский элемент, следующий за курсором при перетаскивании колонки. Контекст предоставляет column.<ng-template columnDragPreview let-column="column"> <div class="preview">{{ column.title }}</div> </ng-template>