export interface FieldLayoutItem { fieldId: string; x?: number; y?: number; w?: number; h?: number; // For list layouts: field order (optional) order?: number; } export type PageLayoutType = 'detail' | 'list'; export interface PageLayoutConfig { fields: FieldLayoutItem[]; relatedLists?: string[]; } export interface PageLayout { id: string; name: string; objectId: string; layoutType: PageLayoutType; isDefault: boolean; layoutConfig: PageLayoutConfig; description?: string; createdAt?: string; updatedAt?: string; // Database column names (snake_case) - used when data comes directly from DB layout_type?: PageLayoutType; layout_config?: PageLayoutConfig; object_id?: string; is_default?: boolean; } export interface CreatePageLayoutRequest { name: string; objectId: string; layoutType?: PageLayoutType; isDefault?: boolean; layoutConfig: PageLayoutConfig; description?: string; } export interface UpdatePageLayoutRequest { name?: string; isDefault?: boolean; layoutConfig?: PageLayoutConfig; description?: string; } export interface GridStackOptions { column: number; cellHeight: number; minRow: number; float: boolean; acceptWidgets: boolean | string; removable?: boolean | string; animate: boolean; } export interface GridStackWidget { id: string; x: number; y: number; w: number; h: number; minW?: number; maxW?: number; noResize?: boolean; noMove?: boolean; locked?: boolean; content?: string; }