import { Immutable } from "immer"; import Ratio from "./math/Ratio"; export type Cell = Immutable<{ value?: string; widthRatio: Ratio; }>; export interface Row { cells: Cell[]; } export interface Part { title?: string; rows: Row[]; } export interface Grid { id: string; baseCellSize: number; baseCellWidthRatio: Ratio; parts: Part[]; } export interface Doc { grids: Grid[]; } export interface RowRef { partIndex: number; rowIndex: number; } export interface CellRef { partIndex: number; rowIndex: number; cellIndex: number; } export function cellRefEquals(a: CellRef, b: CellRef): boolean { return ( a.partIndex === b.partIndex && a.rowIndex === b.rowIndex && a.cellIndex === b.cellIndex ); } export function renderedRowIndexToRef( grid: Grid, renderedRowIndex: number, ): RowRef { const partIndex = renderedRowIndex % grid.parts.length; const rowIndex = Math.floor(renderedRowIndex / grid.parts.length); return { partIndex, rowIndex }; }