import { type EntityRecord, type Vector3Value } from "@skenora/contracts"; import { type DimensionGeometryOptions, type SceneLengthFormat } from "@skenora/geometry"; export interface SceneAnnotationOptions { id?: string; parentId?: string | null; color?: string; priority?: number; occlusion?: "none" | "hide"; occlusionTolerance?: number; minDistance?: number; maxDistance?: number; payload?: Record; } export interface SceneDimensionOptions extends SceneAnnotationOptions, DimensionGeometryOptions, SceneLengthFormat { /** Explicit text replaces formatting; measured distance remains available separately. */ text?: string; } export interface SceneAnnotationComposition { id: string; rootEntityId: string; entities: readonly EntityRecord[]; annotationIds: readonly string[]; measurements: readonly { annotationId: string; distance: number; meters: number; text: string; }[]; } /** Group + open dimension lines + one native text anchor. Coordinates are parent-local. */ export declare function createSceneDimension(start: Vector3Value, end: Vector3Value, options?: SceneDimensionOptions): SceneAnnotationComposition; export interface SceneCalloutOptions extends SceneAnnotationOptions { /** In the same parent-local coordinate space as the anchor. */ labelPosition?: Vector3Value; /** Optional explicit elbow, in that same space. */ elbow?: Vector3Value; markerRadius?: number; } /** Native hotspot marker, leader and text; no click action or host UI is embedded. */ export declare function createSceneCallout(anchor: Vector3Value, text: string, options?: SceneCalloutOptions): SceneAnnotationComposition; export interface SceneBoundsDimensionOptions extends SceneAnnotationOptions, SceneLengthFormat { axes?: readonly ("x" | "y" | "z")[]; /** Positive offset in the supplied bounds coordinate space; defaults to 15% of maximum extent. */ offset?: number; } /** World-axis dimensions when supplied world AABBs; no oriented or semantic dimensions are inferred. */ export declare function createSceneBoundsDimensions(bounds: { min: Vector3Value; max: Vector3Value; }, options?: SceneBoundsDimensionOptions): SceneAnnotationComposition; export declare function describeSceneAnnotations(): { readonly APIs: readonly ["createSceneDimension", "createSceneBoundsDimensions", "createSceneCallout", "formatSceneLength", "layoutSceneAnnotations"]; readonly units: readonly ["mm", "cm", "m", "in", "ft"]; readonly limits: { readonly layoutLabels: 256; readonly reservedRectangles: 32; readonly textCharacters: 512; }; readonly semantics: readonly ["Ordinary group/shape/primitive/annotation records; no new persistent schema", "Explicit endpoints are parent-local; observed dimensions are fixed world-axis AABB snapshots", "Labels use explicit scene scale and deterministic decimal formatting", "Hosts measure text and present layout rectangles in CSS pixels; projections arrive in render pixels", "Layout priority packing hides crowded labels; it does not infer font metrics or route leader crossings", "Occlusion is opt-in native ray picking, not geometric visibility or a depth-buffer proof"]; }; //# sourceMappingURL=annotations.d.ts.map