// Типы элементов интерфейса export type ElementType = | 'text' | 'select' | 'radio' | 'checkbox' | 'number' | 'textarea' | 'date' | 'standards' | 'calibration-conditions' | 'button-group' export interface ElementOption { value: string label: string } // Расширенный тип для ячейки с указанием листа export interface CellTarget { sheet: string // название листа, например "L" или "R" cell: string // адрес ячейки, например "A2" или "B4" displayName?: string // отображаемое имя для пользователя } // Позиция и размеры элемента в визуальном редакторе export interface ElementLayout { x: number // позиция по X в пикселях y: number // позиция по Y в пикселях width: number // ширина в пикселях height: number // высота в пикселях zIndex?: number // Z-index для наложения элементов } // Настройки отображения элементов в форме export interface FormLayoutSettings { gridSize: number // размер сетки для привязки (в пикселях) showGrid: boolean // показывать сетку } export interface TemplateElement { id: string type: ElementType name: string label: string targetCells: CellTarget[] // множественные ячейки вместо одной targetCell options?: ElementOption[] // для select и radio required?: boolean defaultValue?: string placeholder?: string order?: number // порядок отображения в форме layout?: ElementLayout // позиция и размеры в визуальном редакторе } // Информация об объединенных ячейках export interface MergedCell { from: string // начальная ячейка (например, "A1") to: string // конечная ячейка (например, "C3") value: any // значение объединенной ячейки // Координаты диапазона (0-based), необходимые для рендера startRow: number startCol: number endRow: number endCol: number } // Типы шаблонов export interface Template { id: string name: string description?: string excelFile?: File excelData?: Record // данные из Excel mergedCells?: MergedCell[] // информация об объединенных ячейках elements: TemplateElement[] layoutSettings?: FormLayoutSettings // настройки отображения формы createdAt: Date updatedAt: Date } // Типы для работы с данными export interface TemplateData { templateId: string values: Record // elementId -> value calculatedCells?: Record // cellName -> value }