import type { MarkerShape, MarkerTone } from '../annotation-marker'; /** Muscle figure variant. `child` is the adult-male map scaled down. */ export type FigureVariant = 'adult-male' | 'adult-female' | 'child'; export type MuscleViewId = string; export type MuscleSchemeMode = 'interactive' | 'display'; export type RegionSide = 'left' | 'right' | 'midline'; /** * Generic, specialty-agnostic finding type. Each maps to a distinct * AnnotationMarker SHAPE so the chart never relies on colour alone; the tone is * decorative reinforcement. Consumers label these per specialty (a "lesion" is * a derm lesion, an ortho strain, a trigger point, …). */ export type FindingType = 'observation' | 'lesion' | 'pain' | 'treatment' | 'note'; export declare const FINDING_TYPES: FindingType[]; export declare const FINDING_MARKER: Record; export interface MuscleFinding { type: FindingType; /** Optional free-text clinical note. PHI — never bundle real notes in stories. */ note?: string; } /** Findings keyed by region id. */ export type MuscleChart = Record; export type RegionShape = { kind: 'ellipse'; cx: number; cy: number; rx: number; ry: number; } | { kind: 'rect'; x: number; y: number; w: number; h: number; r?: number; } | { kind: 'polygon'; points: Array<[number, number]>; } | { kind: 'path'; d: string; fillRule?: 'evenodd'; }; export interface MuscleRegion { /** Stable id, unique within a view — the finding key + `data-region`. */ id: string; /** i18n key suffix under `muscleScheme.region.*`. */ labelKey: string; shape: RegionShape; /** Bilateral side, where meaningful (drives "left/right" in the label). */ side?: RegionSide; /** Optional grouping (e.g. 'upper-limb'). */ group?: string; /** Marker anchor; defaults to the shape centroid. */ marker?: { x: number; y: number; }; } export interface MuscleView { id: MuscleViewId; /** i18n key suffix under `muscleScheme.view.*`. */ labelKey: string; /** Which muscle figure this view is drawn on. */ figure: FigureVariant; viewBox: string; /** Decorative head silhouette drawn behind the regions (`aria-hidden`). */ silhouette?: string; /** Optional SVG transform applied to the regions group (and the silhouette, * unless `silhouetteTransform` overrides it). */ transform?: string; /** Optional separate transform for the silhouette (head) group — lets the * child figure carry a proportionally larger head than its scaled-down body. */ silhouetteTransform?: string; /** Stroke-only body contour drawn in the regions (body) group so it scales * with the body `transform`, not the `silhouetteTransform` — this is what lets * the child carry an enlarged head while its body stays scaled down. */ bodyDetail?: string; /** When true, the view's regions render as transparent click hotspots (tinting * only on hover / focus / finding) rather than filled shapes — implied when a * realistic illustration is loaded over the figure. */ hotspotZones?: boolean; regions: MuscleRegion[]; } export declare function regionCentroid(region: MuscleRegion): { x: number; y: number; }; export declare const MUSCLE_VIEWS: Record; export declare function getView(id: MuscleViewId): MuscleView | undefined; /** All views for a figure, in front-then-back order. */ export declare function viewsForFigure(figure: FigureVariant): MuscleView[]; export declare function getRegion(viewId: MuscleViewId, regionId: string): MuscleRegion | undefined; /** Default view shown when no explicit `views` are given. */ export declare const DEFAULT_MUSCLE_VIEW: MuscleViewId; /** * Pick a muscle figure from patient demographics — mirrors the platform's * `getDefaultFigureVariant(gender, age)`. Pure heuristic; the host can override * with the explicit `figure` prop. Patients under 12 resolve to the (scaled-down) * `child` figure regardless of sex; otherwise the figure follows sex. */ export declare function figureFromPatient(sex: 'm' | 'f' | 'x' | undefined, ageYears: number | undefined): FigureVariant; export declare function emptyChart(): MuscleChart; //# sourceMappingURL=muscle-scheme-data.d.ts.map