import type { UniComponent } from '@blocksuite/affine-shared/types'; import type { ReadonlySignal } from '@preact/signals-core'; import type { Cell } from '../view-manager/cell.js'; export interface CellRenderProps< Data extends NonNullable = NonNullable, RawValue = unknown, JsonValue = unknown, > { cell: Cell; isEditing$: ReadonlySignal; selectCurrentCell: (editing: boolean) => void; } export interface DataViewCellLifeCycle { beforeEnterEditMode(): boolean; beforeExitEditingMode(): void; afterEnterEditingMode(): void; focusCell(): boolean; blurCell(): boolean; forceUpdate(): void; } export type DataViewCellComponent< Data extends NonNullable = NonNullable, RawValue = unknown, JsonValue = unknown, > = UniComponent< CellRenderProps, DataViewCellLifeCycle >; export type CellRenderer< Data extends NonNullable = NonNullable, RawValue = unknown, JsonValue = unknown, > = { view: DataViewCellComponent; };