@moontra/moonui-pro
Version:
Premium React components for MoonUI - Advanced UI library with 50+ pro components including performance, interactive, and gesture components
168 lines (156 loc) • 4.84 kB
text/typescript
export interface KanbanAssignee {
id: string
name: string
avatar?: string
email?: string
}
export interface KanbanLabel {
id: string
name: string
color: string
}
export interface KanbanChecklist {
id: string
title: string
items: {
id: string
text: string
completed: boolean
}[]
}
export interface KanbanActivity {
id: string
user: KanbanAssignee
action: string
timestamp: Date
details?: string
}
export interface KanbanCard {
id: string
title: string
description?: string
coverImage?: string
assignees?: KanbanAssignee[]
dueDate?: Date
startDate?: Date
priority?: 'low' | 'medium' | 'high' | 'urgent'
tags?: string[]
labels?: KanbanLabel[]
attachments?: {
id: string
name: string
type: string
url: string
size: number
}[]
comments?: number
completed?: boolean
progress?: number
checklist?: KanbanChecklist
activities?: KanbanActivity[]
customFields?: Record<string, any>
position: number
}
export interface KanbanColumn {
id: string
title: string
color?: string
cards: KanbanCard[]
limit?: number
collapsed?: boolean
locked?: boolean
template?: 'todo' | 'inProgress' | 'done' | 'custom'
}
export interface KanbanFilter {
id: string
name: string
query: string
assignees?: string[]
labels?: string[]
priority?: string[]
tags?: string[]
dueDate?: {
from?: Date
to?: Date
}
}
export interface KanbanProps {
columns: KanbanColumn[]
onCardMove?: (cardId: string, fromColumn: string, toColumn: string, newPosition: number) => void
onCardClick?: (card: KanbanCard) => void
onCardEdit?: (card: KanbanCard) => void
onCardDelete?: (card: KanbanCard) => void
onCardUpdate?: (card: KanbanCard) => void
onAddCard?: (columnId: string, card?: Partial<KanbanCard>) => void
onAddColumn?: (column?: Partial<KanbanColumn>) => void
onColumnUpdate?: (column: KanbanColumn) => void
onColumnDelete?: (columnId: string) => void
onBulkAction?: (action: string, cardIds: string[]) => void
onExport?: (format: 'json' | 'csv') => void
className?: string
showAddColumn?: boolean
showCardDetails?: boolean
showFilters?: boolean
showSearch?: boolean
enableKeyboardShortcuts?: boolean
cardTemplates?: Partial<KanbanCard>[]
columnTemplates?: Partial<KanbanColumn>[]
filters?: KanbanFilter[]
defaultFilter?: string
loading?: boolean
disabled?: boolean
labels?: KanbanLabel[]
users?: KanbanAssignee[]
// Card Render Customization
renderCard?: (card: KanbanCard, column: KanbanColumn, provided: any) => React.ReactNode
renderCardPreview?: (card: KanbanCard) => React.ReactNode
renderCardBadge?: (card: KanbanCard) => React.ReactNode
renderCardActions?: (card: KanbanCard) => React.ReactNode
cardCompactMode?: boolean
cardShowCoverImage?: boolean
cardShowAssignees?: boolean
cardShowLabels?: boolean
cardShowProgress?: boolean
cardDateFormat?: string
cardMaxAssigneesToShow?: number
// Add Card Customization
renderAddCardButton?: (columnId: string) => React.ReactNode
renderAddCardForm?: (columnId: string, onAdd: (card: Partial<KanbanCard>) => void, onCancel: () => void) => React.ReactNode
addCardButtonText?: string | ((columnId: string) => string)
addCardPosition?: 'top' | 'bottom'
allowQuickAdd?: boolean
quickAddFields?: ('title' | 'description' | 'assignee' | 'priority')[]
validateCard?: (card: Partial<KanbanCard>) => { valid: boolean; errors?: string[] }
onBeforeCardAdd?: (card: Partial<KanbanCard>) => Partial<KanbanCard> | false
// Column Customization
renderColumnHeader?: (column: KanbanColumn) => React.ReactNode
renderColumnFooter?: (column: KanbanColumn) => React.ReactNode
renderEmptyColumn?: (column: KanbanColumn) => React.ReactNode
columnMenuActions?: Array<{
label: string
icon?: React.ReactNode
action: (column: KanbanColumn) => void
visible?: (column: KanbanColumn) => boolean
}>
allowColumnReorder?: boolean
columnColorOptions?: string[]
columnDefaultColor?: string
// Drag & Drop Enhancement
dragDisabled?: boolean | ((card: KanbanCard) => boolean)
dropDisabled?: boolean | ((column: KanbanColumn) => boolean)
dragPreview?: 'card' | 'compact' | 'custom'
renderDragPreview?: (card: KanbanCard) => React.ReactNode
canDrop?: (card: KanbanCard, targetColumn: KanbanColumn, position: number) => boolean
onDragStart?: (card: KanbanCard, column: KanbanColumn) => void
onDragEnd?: (card: KanbanCard, column: KanbanColumn) => void
// UI/UX Customization
theme?: 'default' | 'compact' | 'modern' | 'minimal'
cardVariant?: 'default' | 'bordered' | 'elevated' | 'flat'
enableAnimations?: boolean
animationDuration?: number
columnWidth?: number | 'auto'
columnGap?: number
cardGap?: number
showTooltips?: boolean
tooltipDelay?: number
}