import type { CSSProperties, HTMLAttributes, ReactNode } from 'react'; export type TicketPinBoardSort = 'newest' | 'oldest' | 'source'; export type TicketPinBoardTicket = { id: string; source: string; href?: string; createdAt: string; title: string; body: string; group: string; groupLabel?: string; status?: string; }; export type TicketPinBoardOpenDetails = { ticket: TicketPinBoardTicket; relatedTickets: TicketPinBoardTicket[]; }; export type TicketPinBoardProps = Omit, 'title'> & { tickets?: TicketPinBoardTicket[]; title?: string; eyebrow?: string; subtitle?: string; classifiedLabel?: string; footerSuffix?: string; initialSort?: TicketPinBoardSort; initialFiledTicketIds?: string[]; onTicketOpen?: (details: TicketPinBoardOpenDetails) => void; onTicketFileChange?: (ticket: TicketPinBoardTicket, filed: boolean) => void; onTicketRemove?: (ticket: TicketPinBoardTicket) => void; renderTicketActions?: (ticket: TicketPinBoardTicket) => ReactNode; }; export type TicketPosition = { x: number; y: number; }; export type TicketLine = { key: string; x1: number; y1: number; x2: number; y2: number; }; export type DragState = { card: HTMLElement; id: string; position: TicketPosition; offsetX: number; offsetY: number; pointerId: number; moved: boolean; }; export type PinBoardStyle = CSSProperties & { '--ticket-pin-board-height'?: string; }; export type TicketCardStyle = CSSProperties & { '--ticket-pin-board-x'?: string; '--ticket-pin-board-y'?: string; '--ticket-pin-board-rotation'?: string; '--ticket-pin-board-delay'?: string; };