/**
 * boardEntity — tiny coercion helpers for reading `EntityRow` data inside game
 * boards.
 *
 * The single entity type is `@almadar/core`'s `EntityRow`
 * (`{ id?: string } & Record<string, FieldValue | undefined>`). Boards read
 * deeply-nested, weakly-typed fields off it; these helpers narrow scalars,
 * arrays, and small positional objects without reintroducing private entity
 * interfaces. None of these are entity types — they are pure value coercers.
 *
 * @packageDocumentation
 */
import type { EntityRow } from '@almadar/core';
/** A 2D grid position read off an entity row. */
export interface Vec2 {
    x: number;
    y: number;
}
/** Lightweight trait-display shape carried on unit-like rows (UI value DTO). */
export interface TeamUnitTraits {
    name: string;
    currentState: string;
    states: string[];
    cooldown?: number;
}
/** Resolve the single board-state entity row from a prop that may be a row,
 *  an array of rows, or undefined. Boards operate on one board state. */
export declare function boardEntity(entity: EntityRow | readonly EntityRow[] | undefined): EntityRow | undefined;
/** Coerce a field value to a string (empty string when absent). */
export declare function str(v: unknown): string;
/** Coerce a field value to a number (0 when absent / non-numeric). */
export declare function num(v: unknown, fallback?: number): number;
/** Coerce a field value to a boolean. */
export declare function bool(v: unknown): boolean;
/** Coerce a nested array field to a readonly array of entity rows. */
export declare function rows(v: unknown): readonly EntityRow[];
/** Read an `{ x, y }` position off an entity row's named field. */
export declare function vec2(v: unknown): Vec2;
/** Read a unit row's `position` as a `Vec2`. */
export declare function unitPosition(u: EntityRow): Vec2;
/** Read a unit row's `team` ('player' | 'enemy' | string). */
export declare function unitTeam(u: EntityRow): string;
/** Read a unit row's `health`. */
export declare function unitHealth(u: EntityRow): number;
