import { EventEmitter, OnInit, TemplateRef, ElementRef, AfterViewInit, OnDestroy, NgZone, ChangeDetectorRef } from '@angular/core';
import { CdkDragDrop, CdkDragMove } from '@angular/cdk/drag-drop';
import * as i0 from "@angular/core";
export interface KanbanColumn {
    id: string;
    title: string;
    color?: string;
    icon?: string;
    items: KanbanItem[];
    maxItems?: number;
    allowDrop?: boolean;
    metadata?: any;
}
export interface KanbanItem {
    id: string;
    title: string;
    description?: string;
    tags?: KanbanTag[];
    metadata?: any;
}
export interface KanbanTag {
    label: string;
    severity?: 'success' | 'info' | 'warn' | 'danger' | 'secondary' | 'contrast';
}
export interface KanbanDropEvent {
    item: KanbanItem;
    previousColumn: KanbanColumn;
    currentColumn: KanbanColumn;
    previousIndex: number;
    currentIndex: number;
}
export declare class KanbanBoardComponent implements OnInit, AfterViewInit, OnDestroy {
    private ngZone;
    private elRef;
    private cdr;
    columns: KanbanColumn[];
    allowReorder: boolean;
    allowDrag: boolean;
    showAddButton: boolean;
    showEditButton: boolean;
    showDeleteButton: boolean;
    canDeleteColumn?: (column: KanbanColumn) => boolean;
    emptyMessage: string;
    minColumnWidth: string;
    maxColumnWidth: string;
    /** Show scroll hint arrows when columns overflow horizontally. */
    showScrollHints: boolean;
    /** Enable item selection mode. Adds selected state management and CSS class on cards. */
    selectable: boolean;
    itemMoved: EventEmitter<KanbanDropEvent>;
    itemClicked: EventEmitter<KanbanItem>;
    addItem: EventEmitter<KanbanColumn>;
    editColumn: EventEmitter<KanbanColumn>;
    deleteColumn: EventEmitter<KanbanColumn>;
    /** Emitted when selection changes. Payload is the full array of selected KanbanItems. */
    selectionChange: EventEmitter<KanbanItem[]>;
    /** Custom template for the column header. Context: { $implicit: KanbanColumn } */
    columnHeaderTemplate?: TemplateRef<any>;
    /**
     * Custom template for each item card.
     * Context: { $implicit: KanbanItem, column: KanbanColumn, selected: boolean, toggle: () => void }
     */
    itemTemplate?: TemplateRef<any>;
    scrollContainer?: ElementRef<HTMLElement>;
    columnIds: string[];
    hasHorizontalScroll: boolean;
    scrollPosition: 'start' | 'middle' | 'end';
    /** Dynamic top offset (in px) for scroll hint buttons so they follow vertical scroll. */
    scrollHintTopOffset: number | null;
    private selectedIds;
    private autoScrollActive;
    private autoScrollSpeed;
    private autoScrollRaf;
    private resizeObserver?;
    constructor(ngZone: NgZone, elRef: ElementRef<HTMLElement>, cdr: ChangeDetectorRef);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    onWindowScroll(): void;
    onWindowResize(): void;
    /**
     * Calculates the top offset for the scroll hint buttons so they stay visible
     * as the user scrolls vertically. Uses the board's bounding rect relative to
     * the viewport to determine the ideal vertical center within the visible area.
     */
    private updateScrollHintPosition;
    ngOnChanges(): void;
    private updateColumnIds;
    isSelected(item: KanbanItem): boolean;
    toggleSelection(item: KanbanItem): void;
    /** Clear all selections. Can be called externally via ViewChild. */
    clearSelection(): void;
    /** Get current selected items. */
    getSelectedItems(): KanbanItem[];
    private emitSelectionChange;
    /** Returns the template context for an item (used in the template). */
    getItemContext(item: KanbanItem, column: KanbanColumn): any;
    onScroll(): void;
    private checkScroll;
    scrollLeft(): void;
    scrollRight(): void;
    onDragMoved(event: CdkDragMove): void;
    onDragEnded(): void;
    private startAutoScroll;
    private stopAutoScroll;
    private runAutoScroll;
    onDrop(event: CdkDragDrop<KanbanItem[]>, column: KanbanColumn): void;
    onItemClick(item: KanbanItem): void;
    onAddItem(column: KanbanColumn): void;
    onEditColumn(column: KanbanColumn): void;
    onDeleteColumn(column: KanbanColumn): void;
    canShowDeleteButton(column: KanbanColumn): boolean;
    getColumnStyle(column: KanbanColumn): any;
    static ɵfac: i0.ɵɵFactoryDeclaration<KanbanBoardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<KanbanBoardComponent, "sia-kanban-board", never, { "columns": { "alias": "columns"; "required": false; }; "allowReorder": { "alias": "allowReorder"; "required": false; }; "allowDrag": { "alias": "allowDrag"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "showEditButton": { "alias": "showEditButton"; "required": false; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; }; "canDeleteColumn": { "alias": "canDeleteColumn"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "minColumnWidth": { "alias": "minColumnWidth"; "required": false; }; "maxColumnWidth": { "alias": "maxColumnWidth"; "required": false; }; "showScrollHints": { "alias": "showScrollHints"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; }, { "itemMoved": "itemMoved"; "itemClicked": "itemClicked"; "addItem": "addItem"; "editColumn": "editColumn"; "deleteColumn": "deleteColumn"; "selectionChange": "selectionChange"; }, ["columnHeaderTemplate", "itemTemplate"], never, true, never>;
}
