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;
};