{
  "version": 3,
  "sources": ["../src/errors.ts", "../src/default-module.ts", "../src/version.ts", "../src/sketch-kernel.ts", "../src/sketch-smart-dimensions.ts", "../src/sketch-toolkit.browser.ts"],
  "sourcesContent": ["/**\r\n * Structured error types for occt-kernel-wasm.\r\n */\r\n\r\nexport type KernelErrorCode =\r\n    | 'INVALID_HANDLE'\r\n    | 'SESSION_MISMATCH'\r\n    | 'INVALID_PARAMS'\r\n    | 'INVALID_CHECKPOINT'\r\n    | 'OPERATION_FAILED'\r\n    | 'IMPORT_FAILED'\r\n    | 'EXPORT_FAILED'\r\n    | 'NOT_INITIALIZED'\r\n    | 'UNKNOWN';\r\n\r\n/** Structured error returned by all kernel operations. */\r\nexport class KernelError extends Error {\r\n    public readonly code: KernelErrorCode;\r\n    public readonly detail: string;\r\n\r\n    constructor(code: KernelErrorCode, detail: string) {\r\n        super(`[${code}] ${detail}`);\r\n        this.name = 'KernelError';\r\n        this.code = code;\r\n        this.detail = detail;\r\n    }\r\n}\r\n\r\n/** @internal Parse a JSON error descriptor returned by the C++ kernel. */\r\nexport function parseNativeError(raw: unknown): KernelError {\r\n    if (typeof raw === 'string') {\r\n        try {\r\n            const parsed = JSON.parse(raw) as { code?: string; detail?: string };\r\n            const code = (parsed.code ?? 'UNKNOWN') as KernelErrorCode;\r\n            const detail = parsed.detail ?? raw;\r\n            return new KernelError(code, detail);\r\n        } catch {\r\n            return new KernelError('UNKNOWN', raw);\r\n        }\r\n    }\r\n    if (raw instanceof KernelError) return raw;\r\n    if (raw instanceof Error) return new KernelError('UNKNOWN', raw.message);\r\n    return new KernelError('UNKNOWN', String(raw));\r\n}\r\n", "import type { WasmModule } from './kernel';\r\n\r\nexport type WasmModuleFactory = (opts?: Record<string, unknown>) => Promise<WasmModule>;\r\n\r\nexport function unwrapFactory(candidate: unknown): WasmModuleFactory | undefined {\r\n    if (typeof candidate === 'function') {\r\n        return candidate as WasmModuleFactory;\r\n    }\r\n\r\n    if (typeof candidate === 'object' && candidate !== null) {\r\n        const maybeDefault = (candidate as { default?: unknown }).default;\r\n        if (typeof maybeDefault === 'function') {\r\n            return maybeDefault as WasmModuleFactory;\r\n        }\r\n    }\r\n\r\n    return undefined;\r\n}", "export const LIBRARY_VERSION = '1.2.0';\r\nexport const API_VERSION = 1;\r\nexport const CHECKPOINT_SCHEMA_VERSION = 1;\r\nexport const OPERATION_SCHEMA_VERSION = 1;\r\nexport const SUPPORTED_RUNTIMES = ['browser', 'worker', 'node'] as const;", "import { KernelError, parseNativeError } from './errors';\r\nimport { API_VERSION, LIBRARY_VERSION } from './version';\r\nimport type {\r\n    Arc2DEntitySpec,\r\n    Circle2DEntitySpec,\r\n    ConstraintId,\r\n    ConstraintSpec,\r\n    DofSummary,\r\n    DiagnosticItem,\r\n    DiagnosticReport,\r\n    DrivenDimensionValue,\r\n    DrivingState,\r\n    EntityId,\r\n    EntitySpec,\r\n    Point2DEntitySpec,\r\n    ScalarSource,\r\n    SketchCreateParams,\r\n    SketchHandle,\r\n    SketchPlaneFrame,\r\n    SketchSnapshot,\r\n    SketchSolveOptions,\r\n    SketchSolveResult,\r\n    SketchStatus,\r\n    SketchToolkitVersionInfo,\r\n    SolveAlgorithm,\r\n    StoredConstraint,\r\n    StoredEntity,\r\n} from './sketch-types';\r\n\r\nexport interface NativeSketchToolkit {\r\n    getSessionId?: () => string;\r\n    getLastError?: () => string;\r\n    clearLastError?: () => void;\r\n    createSketch(createParamsJson: string): number;\r\n    disposeSketch?: (sketchId: number) => void;\r\n    addEntity(sketchId: number, entitySpecJson: string): number;\r\n    removeEntity?: (sketchId: number, entityId: number) => void;\r\n    addConstraint(sketchId: number, constraintSpecJson: string): number;\r\n    removeConstraint?: (sketchId: number, constraintId: number) => void;\r\n    setParameter?: (sketchId: number, name: string, valueJson: string) => void;\r\n    solveSketch?: (sketchId: number, optionsJson: string) => string;\r\n    getSketchSnapshot(sketchId: number): string;\r\n}\r\n\r\nexport interface SketchToolkitWasmModule {\r\n    SketchToolkitNative: new () => NativeSketchToolkit;\r\n}\r\n\r\ninterface NativeSketchSnapshot {\r\n    readonly sessionId?: string;\r\n    readonly id: number;\r\n    readonly createParams?: SketchCreateParams;\r\n    readonly entities: ReadonlyArray<{ readonly id: number; readonly spec: EntitySpec }>;\r\n    readonly constraints: ReadonlyArray<{ readonly id: number; readonly spec: ConstraintSpec }>;\r\n    readonly parameters?: Readonly<Record<string, ScalarSource>>;\r\n}\r\n\r\ninterface NativeSketchSolvePayload {\r\n    readonly converged?: boolean;\r\n    readonly status?: SketchStatus;\r\n    readonly algorithm?: SolveAlgorithm;\r\n    readonly iterations?: number;\r\n    readonly maxScaledResidual?: number;\r\n    readonly diagnostics?: DiagnosticReport;\r\n}\r\n\r\nlet sketchToolkitSessionCounter = 0;\r\n\r\nfunction createSessionId(): string {\r\n    sketchToolkitSessionCounter += 1;\r\n    return `sketch_toolkit_${Date.now().toString(36)}_${sketchToolkitSessionCounter.toString(36)}`;\r\n}\r\n\r\nfunction wrapNativeCall<T>(native: NativeSketchToolkit, action: () => T): T {\r\n    native.clearLastError?.();\r\n    try {\r\n        return action();\r\n    } catch (error) {\r\n        const reported = native.getLastError?.();\r\n        if (reported) {\r\n            throw parseNativeError(reported);\r\n        }\r\n        throw parseNativeError(error);\r\n    }\r\n}\r\n\r\nfunction normalizeEntitySpec(spec: EntitySpec): EntitySpec {\r\n    if (spec.kind === 'arc') {\r\n        const startRadians = spec.startRadians ?? (typeof spec.startDegrees === 'number' ? (spec.startDegrees * Math.PI) / 180 : 0);\r\n        const sweepRadians = spec.sweepRadians ?? (typeof spec.sweepDegrees === 'number' ? (spec.sweepDegrees * Math.PI) / 180 : 0);\r\n        return { ...spec, startRadians, sweepRadians };\r\n    }\r\n\r\n    if (spec.kind === 'ellipse' || spec.kind === 'elliptical-arc') {\r\n        const angleRadians = spec.angleRadians ?? (typeof spec.angleDegrees === 'number' ? (spec.angleDegrees * Math.PI) / 180 : 0);\r\n        return { ...spec, angleRadians };\r\n    }\r\n\r\n    if (spec.kind === 'infinite-line' || spec.kind === 'coordinate-system') {\r\n        const angleRadians = spec.angleRadians ?? (typeof spec.angleDegrees === 'number' ? (spec.angleDegrees * Math.PI) / 180 : 0);\r\n        return { ...spec, angleRadians };\r\n    }\r\n\r\n    return spec;\r\n}\r\n\r\nfunction toStoredEntity(entry: { readonly id: number; readonly spec: EntitySpec }): StoredEntity {\r\n    return { id: entry.id, ...normalizeEntitySpec(entry.spec) };\r\n}\r\n\r\nfunction toStoredConstraint(entry: { readonly id: number; readonly spec: ConstraintSpec }): StoredConstraint {\r\n    return { id: entry.id, ...entry.spec };\r\n}\r\n\r\nfunction getScalarValue(value: unknown): ScalarSource | undefined {\r\n    return typeof value === 'number' || typeof value === 'string' ? value : undefined;\r\n}\r\n\r\nfunction structuralDofForEntity(entity: StoredEntity): number {\r\n    switch (entity.kind) {\r\n        case 'point':\r\n            return entity.fixed ? 0 : 2;\r\n        case 'line-segment':\r\n            return 0;\r\n        case 'infinite-line':\r\n            return 3;\r\n        case 'circle':\r\n            return 1;\r\n        case 'arc':\r\n            return typeof entity.startPoint === 'number' && typeof entity.endPoint === 'number' ? 1 : 3;\r\n        case 'ellipse':\r\n            return 3;\r\n        case 'elliptical-arc':\r\n            return 5;\r\n        case 'bspline':\r\n            return entity.controlPoints.length * 2 + (entity.weights?.length ?? 0);\r\n        case 'polyline':\r\n            return 0;\r\n        case 'coordinate-system':\r\n            return 3;\r\n        case 'external-reference':\r\n            return 0;\r\n    }\r\n}\r\n\r\nfunction isDrivenConstraint(constraint: StoredConstraint): boolean {\r\n    return constraint.drivingState === 'driven';\r\n}\r\n\r\nfunction structuralRankForConstraint(constraint: StoredConstraint): number {\r\n    switch (constraint.kind) {\r\n        case 'fix':\r\n        case 'coincident':\r\n            return 2;\r\n        default:\r\n            return 1;\r\n    }\r\n}\r\n\r\nfunction implicitStructuralRankForEntity(entity: StoredEntity): number {\r\n    if (entity.kind !== 'arc') {\r\n        return 0;\r\n    }\r\n\r\n    let rank = 0;\r\n    if (typeof entity.startPoint === 'number') {\r\n        rank += 1;\r\n    }\r\n    if (typeof entity.endPoint === 'number') {\r\n        rank += 1;\r\n    }\r\n    return rank;\r\n}\r\n\r\nfunction summarizeDof(entities: readonly StoredEntity[], constraints: readonly StoredConstraint[]): DofSummary {\r\n    let structuralDof = 0;\r\n    let drivingConstraintCount = 0;\r\n    for (const entity of entities) {\r\n        structuralDof += structuralDofForEntity(entity);\r\n        drivingConstraintCount += implicitStructuralRankForEntity(entity);\r\n    }\r\n\r\n    let drivenConstraintCount = 0;\r\n    for (const constraint of constraints) {\r\n        if (isDrivenConstraint(constraint)) {\r\n            drivenConstraintCount += structuralRankForConstraint(constraint);\r\n        } else if (constraint.drivingState !== 'suppressed') {\r\n            drivingConstraintCount += structuralRankForConstraint(constraint);\r\n        }\r\n    }\r\n\r\n    return {\r\n        structuralDof,\r\n        drivingConstraintCount,\r\n        drivenConstraintCount,\r\n    };\r\n}\r\n\r\nfunction deriveStatus(dof: DofSummary): SketchStatus {\r\n    if (dof.drivingConstraintCount === 0) {\r\n        return 'underdefined';\r\n    }\r\n    if (dof.structuralDof > dof.drivingConstraintCount) {\r\n        return 'underdefined';\r\n    }\r\n    if (dof.structuralDof === dof.drivingConstraintCount) {\r\n        return 'fully-defined';\r\n    }\r\n    return 'overdefined';\r\n}\r\n\r\nfunction buildDiagnostics(status: SketchStatus, dof: DofSummary): DiagnosticReport {\r\n    const items: DiagnosticItem[] = [\r\n        {\r\n            code: 'PHASE1_SCAFFOLD',\r\n            severity: 'info',\r\n            message: 'Phase 1 sketch-toolkit scaffold only: native storage and structural analysis are available, but nonlinear solving is not implemented yet.',\r\n            suggestedAction: 'Next step: compile entities and constraints into residual and Jacobian blocks in the sketch-toolkit WASM target.',\r\n        },\r\n    ];\r\n\r\n    if (status === 'underdefined') {\r\n        items.push({\r\n            code: 'STRUCTURAL_UNDERDEFINED',\r\n            severity: 'warning',\r\n            message: 'Structural analysis indicates the sketch still has free degrees of freedom.',\r\n            suggestedAction: 'Add driving dimensions, locks, or geometric constraints before expecting deterministic solves.',\r\n        });\r\n    } else if (status === 'overdefined') {\r\n        items.push({\r\n            code: 'STRUCTURAL_OVERDEFINED',\r\n            severity: 'warning',\r\n            message: 'Structural analysis indicates there are more driving constraints than estimated scalar degrees of freedom.',\r\n            suggestedAction: 'Demote some constraints to driven or remove redundant driving dimensions before the full nonlinear solver lands.',\r\n        });\r\n    }\r\n\r\n    return {\r\n        state: status,\r\n        dof,\r\n        items,\r\n        freeDirections: status === 'underdefined'\r\n            ? [{ label: 'structural-free-motion', entityIds: [] }]\r\n            : [],\r\n    };\r\n}\r\n\r\nfunction isDrivingConstraint(constraint: StoredConstraint): boolean {\r\n    return constraint.drivingState !== 'suppressed' && !isDrivenConstraint(constraint);\r\n}\r\n\r\nfunction buildDrivingDimensionConversionDiagnostic(snapshot: SketchSnapshot, status: SketchStatus): DiagnosticItem | undefined {\r\n    if (status !== 'overdefined') {\r\n        return undefined;\r\n    }\r\n\r\n    const candidates: StoredConstraint[] = [];\r\n    const seenNames = new Set<string>();\r\n\r\n    for (const constraint of snapshot.constraints) {\r\n        if (!isDrivingConstraint(constraint)) {\r\n            continue;\r\n        }\r\n\r\n        const name = typeof constraint.name === 'string' ? constraint.name.trim() : '';\r\n        if (!name.startsWith('dimension:') || seenNames.has(name)) {\r\n            continue;\r\n        }\r\n\r\n        seenNames.add(name);\r\n        candidates.push(constraint);\r\n    }\r\n\r\n    if (candidates.length === 0) {\r\n        return undefined;\r\n    }\r\n\r\n    const labels = candidates.map((constraint) => constraint.name as string);\r\n    const listed = labels.slice(0, 3).join(', ');\r\n    const truncated = labels.length > 3 ? ', ...' : '';\r\n\r\n    return {\r\n        code: 'DRIVING_DIMENSION_CONVERSION_CANDIDATES',\r\n        severity: 'warning',\r\n        message: `Driving dimensions are likely redundancy candidates in the current overdefined sketch: ${listed}${truncated}.`,\r\n        constraintIds: candidates.map((constraint) => constraint.id),\r\n        suggestedAction: 'Convert one of the listed dimensions to driven or remove another redundant driver before expecting a stable fully-defined solve.',\r\n    };\r\n}\r\n\r\nfunction appendDerivedDiagnostics(diagnostics: DiagnosticReport, snapshot: SketchSnapshot, status: SketchStatus): DiagnosticReport {\r\n    const drivingDimensionDiagnostic = buildDrivingDimensionConversionDiagnostic(snapshot, status);\r\n    if (!drivingDimensionDiagnostic || diagnostics.items.some((item) => item.code === drivingDimensionDiagnostic.code)) {\r\n        return diagnostics;\r\n    }\r\n\r\n    return {\r\n        ...diagnostics,\r\n        state: status,\r\n        items: [...diagnostics.items, drivingDimensionDiagnostic],\r\n    };\r\n}\r\n\r\nfunction findEntityById(entities: readonly StoredEntity[], entityId: EntityId): StoredEntity | undefined {\r\n    return entities.find((entity) => entity.id === entityId);\r\n}\r\n\r\nfunction findPointById(entities: readonly StoredEntity[], pointId: EntityId): Extract<StoredEntity, { kind: 'point' }> | undefined {\r\n    const entity = findEntityById(entities, pointId);\r\n    return entity?.kind === 'point' ? entity : undefined;\r\n}\r\n\r\nfunction findLineSegmentById(entities: readonly StoredEntity[], lineId: EntityId): Extract<StoredEntity, { kind: 'line-segment' }> | undefined {\r\n    const entity = findEntityById(entities, lineId);\r\n    return entity?.kind === 'line-segment' ? entity : undefined;\r\n}\r\n\r\nfunction findCurveById(entities: readonly StoredEntity[], curveId: EntityId): Extract<StoredEntity, { kind: 'circle' | 'arc' }> | undefined {\r\n    const entity = findEntityById(entities, curveId);\r\n    return entity?.kind === 'circle' || entity?.kind === 'arc' ? entity : undefined;\r\n}\r\n\r\nfunction pointDistance(pointA: Extract<StoredEntity, { kind: 'point' }>, pointB: Extract<StoredEntity, { kind: 'point' }>): number {\r\n    return Math.hypot(pointB.x - pointA.x, pointB.y - pointA.y);\r\n}\r\n\r\nfunction pointLineDistance(\r\n    point: Extract<StoredEntity, { kind: 'point' }>,\r\n    line: Extract<StoredEntity, { kind: 'line-segment' }>,\r\n    entities: readonly StoredEntity[],\r\n): number | undefined {\r\n    const start = findPointById(entities, line.start);\r\n    const end = findPointById(entities, line.end);\r\n    if (!start || !end) {\r\n        return undefined;\r\n    }\r\n    const dx = end.x - start.x;\r\n    const dy = end.y - start.y;\r\n    const len = Math.hypot(dx, dy);\r\n    if (len <= 1.0e-12) {\r\n        return undefined;\r\n    }\r\n    return Math.abs(dx * (start.y - point.y) - dy * (start.x - point.x)) / len;\r\n}\r\n\r\nfunction lineLineDistance(\r\n    lineA: Extract<StoredEntity, { kind: 'line-segment' }>,\r\n    lineB: Extract<StoredEntity, { kind: 'line-segment' }>,\r\n    entities: readonly StoredEntity[],\r\n): number | undefined {\r\n    const anchor = findPointById(entities, lineA.start);\r\n    if (!anchor) {\r\n        return undefined;\r\n    }\r\n    return pointLineDistance(anchor, lineB, entities);\r\n}\r\n\r\nfunction lineAngle(\r\n    lineA: Extract<StoredEntity, { kind: 'line-segment' }>,\r\n    lineB: Extract<StoredEntity, { kind: 'line-segment' }>,\r\n    entities: readonly StoredEntity[],\r\n): number | undefined {\r\n    const a0 = findPointById(entities, lineA.start);\r\n    const a1 = findPointById(entities, lineA.end);\r\n    const b0 = findPointById(entities, lineB.start);\r\n    const b1 = findPointById(entities, lineB.end);\r\n    if (!a0 || !a1 || !b0 || !b1) {\r\n        return undefined;\r\n    }\r\n    const angleA = Math.atan2(a1.y - a0.y, a1.x - a0.x);\r\n    const angleB = Math.atan2(b1.y - b0.y, b1.x - b0.x);\r\n    let diff = angleB - angleA;\r\n    while (diff > Math.PI) {\r\n        diff -= 2 * Math.PI;\r\n    }\r\n    while (diff < -Math.PI) {\r\n        diff += 2 * Math.PI;\r\n    }\r\n    return diff;\r\n}\r\n\r\nfunction withMeasuredDrivenValue(constraint: StoredConstraint, value: ScalarSource | undefined): DrivenDimensionValue {\r\n    return {\r\n        constraintId: constraint.id,\r\n        ...(typeof value !== 'undefined' ? { value } : {}),\r\n        ...(typeof constraint.kind === 'string' ? { kind: constraint.kind } : {}),\r\n        ...(typeof constraint.name === 'string' ? { name: constraint.name } : {}),\r\n        ...(typeof constraint.drivingState === 'string' ? { drivingState: constraint.drivingState as DrivingState } : {}),\r\n    };\r\n}\r\n\r\nfunction measureDrivenConstraint(constraint: StoredConstraint, entities: readonly StoredEntity[]): ScalarSource | undefined {\r\n    switch (constraint.kind) {\r\n        case 'distance-point-point': {\r\n            const pointA = findPointById(entities, constraint.pointA);\r\n            const pointB = findPointById(entities, constraint.pointB);\r\n            if (!pointA || !pointB) {\r\n                return undefined;\r\n            }\r\n            return pointDistance(pointA, pointB);\r\n        }\r\n        case 'distance-point-line': {\r\n            const point = findPointById(entities, constraint.point);\r\n            const line = findLineSegmentById(entities, constraint.line);\r\n            if (!point || !line) {\r\n                return undefined;\r\n            }\r\n            return pointLineDistance(point, line, entities);\r\n        }\r\n        case 'distance-line-line': {\r\n            const lineA = findLineSegmentById(entities, constraint.lineA);\r\n            const lineB = findLineSegmentById(entities, constraint.lineB);\r\n            if (!lineA || !lineB) {\r\n                return undefined;\r\n            }\r\n            return lineLineDistance(lineA, lineB, entities);\r\n        }\r\n        case 'radius': {\r\n            const curve = findCurveById(entities, constraint.entity);\r\n            if (!curve) {\r\n                return undefined;\r\n            }\r\n            const radius = typeof curve.radius === 'number' ? curve.radius : Number(curve.radius);\r\n            return Number.isFinite(radius) ? radius : undefined;\r\n        }\r\n        case 'diameter': {\r\n            const curve = findCurveById(entities, constraint.entity);\r\n            if (!curve) {\r\n                return undefined;\r\n            }\r\n            const radius = typeof curve.radius === 'number' ? curve.radius : Number(curve.radius);\r\n            return Number.isFinite(radius) ? radius * 2 : undefined;\r\n        }\r\n        case 'angle': {\r\n            const lineA = findLineSegmentById(entities, constraint.lineA);\r\n            const lineB = findLineSegmentById(entities, constraint.lineB);\r\n            if (!lineA || !lineB) {\r\n                return undefined;\r\n            }\r\n            return lineAngle(lineA, lineB, entities);\r\n        }\r\n        default:\r\n            return getScalarValue((constraint as unknown as Record<string, unknown>).value);\r\n    }\r\n}\r\n\r\nfunction buildMeasuredDrivenDimensions(snapshot: SketchSnapshot): readonly DrivenDimensionValue[] {\r\n    return snapshot.constraints\r\n        .filter((constraint) => isDrivenConstraint(constraint))\r\n        .map((constraint) => withMeasuredDrivenValue(constraint, measureDrivenConstraint(constraint, snapshot.entities)));\r\n}\r\n\r\nfunction parseSnapshot(rawSnapshot: string): NativeSketchSnapshot {\r\n    try {\r\n        return JSON.parse(rawSnapshot) as NativeSketchSnapshot;\r\n    } catch (error) {\r\n        const detail = error instanceof Error ? error.message : String(error);\r\n        throw new KernelError('OPERATION_FAILED', `Native sketch toolkit returned invalid snapshot JSON: ${detail}`);\r\n    }\r\n}\r\n\r\nfunction parseNativeSolvePayload(rawPayload: string): NativeSketchSolvePayload {\r\n    try {\r\n        return JSON.parse(rawPayload) as NativeSketchSolvePayload;\r\n    } catch (error) {\r\n        const detail = error instanceof Error ? error.message : String(error);\r\n        throw new KernelError('OPERATION_FAILED', `Native sketch toolkit returned invalid solve JSON: ${detail}`);\r\n    }\r\n}\r\n\r\nexport class SketchToolkit {\r\n    private readonly native: NativeSketchToolkit;\r\n    private readonly sessionId: string;\r\n\r\n    constructor(module: SketchToolkitWasmModule) {\r\n        this.native = new module.SketchToolkitNative();\r\n        const nativeSessionId = this.native.getSessionId?.();\r\n        this.sessionId = typeof nativeSessionId === 'string' && nativeSessionId.length > 0\r\n            ? nativeSessionId\r\n            : createSessionId();\r\n    }\r\n\r\n    createSketch(params: SketchCreateParams): SketchHandle {\r\n        const id = wrapNativeCall(this.native, () => this.native.createSketch(JSON.stringify(params)));\r\n        if (!Number.isInteger(id) || id <= 0) {\r\n            throw new KernelError('OPERATION_FAILED', `Native sketch toolkit returned an invalid sketch id: ${String(id)}`);\r\n        }\r\n        return Object.freeze({ id, sessionId: this.sessionId });\r\n    }\r\n\r\n    disposeSketch(handle: SketchHandle): void {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        wrapNativeCall(this.native, () => this.native.disposeSketch?.(sketchId));\r\n    }\r\n\r\n    addEntity(handle: SketchHandle, spec: EntitySpec): EntityId {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        const entityId = wrapNativeCall(this.native, () => this.native.addEntity(sketchId, JSON.stringify(normalizeEntitySpec(spec))));\r\n        if (!Number.isInteger(entityId) || entityId <= 0) {\r\n            throw new KernelError('OPERATION_FAILED', `Native sketch toolkit returned an invalid entity id: ${String(entityId)}`);\r\n        }\r\n        return entityId;\r\n    }\r\n\r\n    addPoint(handle: SketchHandle, spec: Omit<Point2DEntitySpec, 'kind'>): EntityId {\r\n        return this.addEntity(handle, { kind: 'point', ...spec });\r\n    }\r\n\r\n    addLineSegment(handle: SketchHandle, spec: Omit<Extract<EntitySpec, { kind: 'line-segment' }>, 'kind'>): EntityId {\r\n        return this.addEntity(handle, { kind: 'line-segment', ...spec });\r\n    }\r\n\r\n    addCircle(handle: SketchHandle, spec: Omit<Circle2DEntitySpec, 'kind'>): EntityId {\r\n        return this.addEntity(handle, { kind: 'circle', ...spec });\r\n    }\r\n\r\n    addArc(handle: SketchHandle, spec: Omit<Arc2DEntitySpec, 'kind'>): EntityId {\r\n        return this.addEntity(handle, { kind: 'arc', ...spec });\r\n    }\r\n\r\n    removeEntity(handle: SketchHandle, entityId: EntityId): void {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        wrapNativeCall(this.native, () => this.native.removeEntity?.(sketchId, entityId));\r\n    }\r\n\r\n    addConstraint(handle: SketchHandle, spec: ConstraintSpec): ConstraintId {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        const constraintId = wrapNativeCall(this.native, () => this.native.addConstraint(sketchId, JSON.stringify(spec)));\r\n        if (!Number.isInteger(constraintId) || constraintId <= 0) {\r\n            throw new KernelError('OPERATION_FAILED', `Native sketch toolkit returned an invalid constraint id: ${String(constraintId)}`);\r\n        }\r\n        return constraintId;\r\n    }\r\n\r\n    removeConstraint(handle: SketchHandle, constraintId: ConstraintId): void {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        wrapNativeCall(this.native, () => this.native.removeConstraint?.(sketchId, constraintId));\r\n    }\r\n\r\n    setParameter(handle: SketchHandle, name: string, value: ScalarSource): void {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        wrapNativeCall(this.native, () => this.native.setParameter?.(sketchId, name, JSON.stringify(value)));\r\n    }\r\n\r\n    getSketchSnapshot(handle: SketchHandle): SketchSnapshot {\r\n        const sketchId = this.resolveSketchId(handle, 'sketch');\r\n        const rawSnapshot = wrapNativeCall(this.native, () => this.native.getSketchSnapshot(sketchId));\r\n        const parsed = parseSnapshot(rawSnapshot);\r\n        const createParams = parsed.createParams;\r\n\r\n        return {\r\n            handle,\r\n            name: createParams?.name ?? `Sketch${handle.id}`,\r\n            plane: createParams?.plane ?? defaultPlane(),\r\n            entities: parsed.entities.map(toStoredEntity),\r\n            constraints: parsed.constraints.map(toStoredConstraint),\r\n            parameters: Object.freeze({ ...(parsed.parameters ?? {}) }),\r\n        };\r\n    }\r\n\r\n    solveSketch(handle: SketchHandle, options: SketchSolveOptions = {}): SketchSolveResult {\r\n        if (this.native.solveSketch) {\r\n            const sketchId = this.resolveSketchId(handle, 'sketch');\r\n            const rawPayload = wrapNativeCall(this.native, () => this.native.solveSketch?.(sketchId, JSON.stringify(options)) ?? '');\r\n            const parsed = parseNativeSolvePayload(rawPayload);\r\n            const snapshot = this.getSketchSnapshot(handle);\r\n            const dof = parsed.diagnostics?.dof ?? summarizeDof(snapshot.entities, snapshot.constraints);\r\n            const status = parsed.status ?? parsed.diagnostics?.state ?? deriveStatus(dof);\r\n            const diagnostics = appendDerivedDiagnostics(parsed.diagnostics ?? buildDiagnostics(status, dof), snapshot, status);\r\n\r\n            return {\r\n                converged: parsed.converged ?? false,\r\n                status,\r\n                algorithm: parsed.algorithm ?? options.algorithm ?? 'auto',\r\n                iterations: parsed.iterations ?? 0,\r\n                maxScaledResidual: parsed.maxScaledResidual ?? 0,\r\n                diagnostics,\r\n                drivenDimensions: buildMeasuredDrivenDimensions(snapshot),\r\n            };\r\n        }\r\n\r\n        const snapshot = this.getSketchSnapshot(handle);\r\n        const dof = summarizeDof(snapshot.entities, snapshot.constraints);\r\n        const status = deriveStatus(dof);\r\n        const algorithm: SolveAlgorithm = options.algorithm ?? 'auto';\r\n        const diagnostics = appendDerivedDiagnostics(buildDiagnostics(status, dof), snapshot, status);\r\n\r\n        return {\r\n            converged: false,\r\n            status,\r\n            algorithm,\r\n            iterations: 0,\r\n            maxScaledResidual: 0,\r\n            diagnostics,\r\n            drivenDimensions: buildMeasuredDrivenDimensions(snapshot),\r\n        };\r\n    }\r\n\r\n    getVersionInfo(): SketchToolkitVersionInfo {\r\n        return {\r\n            libraryVersion: LIBRARY_VERSION,\r\n            apiVersion: API_VERSION,\r\n            target: 'sketch-toolkit',\r\n            status: 'phase1-scaffold',\r\n        };\r\n    }\r\n\r\n    private resolveSketchId(handle: SketchHandle, name: string): number {\r\n        if (!Number.isInteger(handle.id) || handle.id <= 0) {\r\n            throw new KernelError('INVALID_HANDLE', `${name} must contain a positive integer id`);\r\n        }\r\n        if (typeof handle.sessionId !== 'string' || handle.sessionId.length === 0) {\r\n            throw new KernelError('INVALID_HANDLE', `${name} was not created by a valid sketch toolkit session`);\r\n        }\r\n        if (handle.sessionId !== this.sessionId) {\r\n            throw new KernelError('SESSION_MISMATCH', `${name} belongs to sketch toolkit session ${handle.sessionId}, not ${this.sessionId}`);\r\n        }\r\n        return handle.id;\r\n    }\r\n}\r\n\r\nfunction defaultPlane(): SketchPlaneFrame {\r\n    return {\r\n        origin: [0, 0, 0],\r\n        normal: [0, 0, 1],\r\n        xAxis: [1, 0, 0],\r\n        yAxis: [0, 1, 0],\r\n    };\r\n}\r\n", "const FULL_CIRCLE_EPS = 1.0e-6;\r\nconst PARALLEL_EPS = 0.01;\r\nconst ANGLE_RAY_EPS = 1.0e-9;\r\n\r\nexport type SmartDimensionKind = 'distance' | 'dx' | 'dy' | 'angle' | 'radius' | 'diameter';\r\nexport type SmartSegmentEndpointKey = 'p1' | 'p2';\r\n\r\nexport interface SmartPointLike {\r\n    readonly type: 'point';\r\n    readonly x: number;\r\n    readonly y: number;\r\n    readonly id?: number;\r\n}\r\n\r\nexport interface SmartVertexLike {\r\n    readonly x: number;\r\n    readonly y: number;\r\n}\r\n\r\nexport interface SmartSegmentLike {\r\n    readonly type: 'segment';\r\n    readonly x1: number;\r\n    readonly y1: number;\r\n    readonly x2: number;\r\n    readonly y2: number;\r\n    readonly midX?: number;\r\n    readonly midY?: number;\r\n    readonly p1?: SmartVertexLike;\r\n    readonly p2?: SmartVertexLike;\r\n    readonly id?: number;\r\n}\r\n\r\nexport interface SmartCurveLike {\r\n    readonly type: 'circle' | 'arc';\r\n    readonly cx: number;\r\n    readonly cy: number;\r\n    readonly radius: number;\r\n    readonly sweepAngle?: number;\r\n    readonly id?: number;\r\n}\r\n\r\nexport type SmartDimensionEntityLike = SmartPointLike | SmartSegmentLike | SmartCurveLike;\r\n\r\nexport interface SmartSegmentAngleInfo {\r\n    readonly vx: number;\r\n    readonly vy: number;\r\n    readonly startAngle: number;\r\n    readonly sweep: number;\r\n    readonly angleEndpointAKey: SmartSegmentEndpointKey | null;\r\n    readonly angleEndpointBKey: SmartSegmentEndpointKey | null;\r\n}\r\n\r\nexport interface SmartDimensionCandidate {\r\n    readonly dimType: SmartDimensionKind;\r\n    readonly label?: string;\r\n    readonly x1: number;\r\n    readonly y1: number;\r\n    readonly x2: number;\r\n    readonly y2: number;\r\n    readonly angleStart?: number;\r\n    readonly angleSweep?: number;\r\n    readonly angleEndpointAKey?: SmartSegmentEndpointKey | null;\r\n    readonly angleEndpointBKey?: SmartSegmentEndpointKey | null;\r\n    readonly sourceA?: SmartDimensionEntityLike;\r\n    readonly sourceB?: SmartDimensionEntityLike | null;\r\n}\r\n\r\ninterface SmartAngleInfoOptions {\r\n    readonly endpointAKey?: SmartSegmentEndpointKey | null;\r\n    readonly endpointBKey?: SmartSegmentEndpointKey | null;\r\n}\r\n\r\ninterface SegmentRayCandidate {\r\n    readonly endpointKey: SmartSegmentEndpointKey;\r\n    readonly angle: number;\r\n    readonly length: number;\r\n}\r\n\r\nfunction isPointLike(entity: SmartDimensionEntityLike | null | undefined): entity is SmartPointLike {\r\n    return !!entity && entity.type === 'point';\r\n}\r\n\r\nfunction isSegmentLike(entity: SmartDimensionEntityLike | null | undefined): entity is SmartSegmentLike {\r\n    return !!entity && entity.type === 'segment';\r\n}\r\n\r\nfunction isCurveLike(entity: SmartDimensionEntityLike | null | undefined): entity is SmartCurveLike {\r\n    return !!entity && (entity.type === 'circle' || entity.type === 'arc');\r\n}\r\n\r\nfunction anchorX(entity: SmartDimensionEntityLike): number {\r\n    if (isSegmentLike(entity)) {\r\n        return Number(entity.x1);\r\n    }\r\n    if (isPointLike(entity)) {\r\n        return Number(entity.x);\r\n    }\r\n    return Number(entity.cx);\r\n}\r\n\r\nfunction anchorY(entity: SmartDimensionEntityLike): number {\r\n    if (isSegmentLike(entity)) {\r\n        return Number(entity.y1);\r\n    }\r\n    if (isPointLike(entity)) {\r\n        return Number(entity.y);\r\n    }\r\n    return Number(entity.cy);\r\n}\r\n\r\nfunction segmentMidX(segment: SmartSegmentLike): number {\r\n    return Number.isFinite(segment.midX) ? Number(segment.midX) : (Number(segment.x1) + Number(segment.x2)) / 2;\r\n}\r\n\r\nfunction segmentMidY(segment: SmartSegmentLike): number {\r\n    return Number.isFinite(segment.midY) ? Number(segment.midY) : (Number(segment.y1) + Number(segment.y2)) / 2;\r\n}\r\n\r\nfunction footOnLine(px: number, py: number, ax: number, ay: number, bx: number, by: number): { x: number; y: number } {\r\n    const dx = bx - ax;\r\n    const dy = by - ay;\r\n    const lenSq = dx * dx + dy * dy;\r\n    if (lenSq === 0) {\r\n        return { x: ax, y: ay };\r\n    }\r\n    const t = ((px - ax) * dx + (py - ay) * dy) / lenSq;\r\n    return { x: ax + t * dx, y: ay + t * dy };\r\n}\r\n\r\nfunction footOnSegment(px: number, py: number, ax: number, ay: number, bx: number, by: number): { x: number; y: number } {\r\n    const dx = bx - ax;\r\n    const dy = by - ay;\r\n    const lenSq = dx * dx + dy * dy;\r\n    if (lenSq === 0) {\r\n        return { x: ax, y: ay };\r\n    }\r\n    let t = ((px - ax) * dx + (py - ay) * dy) / lenSq;\r\n    t = Math.max(0, Math.min(1, t));\r\n    return { x: ax + t * dx, y: ay + t * dy };\r\n}\r\n\r\nexport function prefersDiameterByDefault(shape: SmartDimensionEntityLike | null | undefined): boolean {\r\n    if (!isCurveLike(shape)) {\r\n        return false;\r\n    }\r\n    if (shape.type === 'circle') {\r\n        return true;\r\n    }\r\n    return Math.abs(Math.abs(Number(shape.sweepAngle ?? 0)) - Math.PI * 2) <= FULL_CIRCLE_EPS;\r\n}\r\n\r\nfunction normalizeAngle(angle: number): number {\r\n    let value = angle;\r\n    while (value > Math.PI) {\r\n        value -= 2 * Math.PI;\r\n    }\r\n    while (value < -Math.PI) {\r\n        value += 2 * Math.PI;\r\n    }\r\n    return value;\r\n}\r\n\r\nfunction lineIntersection(a1x: number, a1y: number, a2x: number, a2y: number, b1x: number, b1y: number, b2x: number, b2y: number): { x: number; y: number } {\r\n    const dAx = a2x - a1x;\r\n    const dAy = a2y - a1y;\r\n    const dBx = b2x - b1x;\r\n    const dBy = b2y - b1y;\r\n    const denom = dAx * dBy - dAy * dBx;\r\n    if (Math.abs(denom) < 1.0e-9) {\r\n        return {\r\n            x: (a1x + a2x + b1x + b2x) / 4,\r\n            y: (a1y + a2y + b1y + b2y) / 4,\r\n        };\r\n    }\r\n    const t = ((b1x - a1x) * dBy - (b1y - a1y) * dBx) / denom;\r\n    return {\r\n        x: a1x + t * dAx,\r\n        y: a1y + t * dAy,\r\n    };\r\n}\r\n\r\nfunction segmentRayCandidate(segment: SmartSegmentLike, vertex: { x: number; y: number }, endpointKey: SmartSegmentEndpointKey): SegmentRayCandidate | null {\r\n    const endpoint = segment?.[endpointKey];\r\n    if (!endpoint) {\r\n        return null;\r\n    }\r\n    const dx = Number(endpoint.x) - vertex.x;\r\n    const dy = Number(endpoint.y) - vertex.y;\r\n    const length = Math.hypot(dx, dy);\r\n    if (length <= ANGLE_RAY_EPS) {\r\n        return null;\r\n    }\r\n    return {\r\n        endpointKey,\r\n        angle: Math.atan2(dy, dx),\r\n        length,\r\n    };\r\n}\r\n\r\nfunction compareAngleScores(left: readonly number[], right: readonly number[]): number {\r\n    for (let index = 0; index < Math.max(left.length, right.length); index += 1) {\r\n        const lhs = left[index] ?? 0;\r\n        const rhs = right[index] ?? 0;\r\n        if (lhs < rhs) {\r\n            return -1;\r\n        }\r\n        if (lhs > rhs) {\r\n            return 1;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\n\r\nfunction fallbackSegmentAngleInfo(segA: SmartSegmentLike, segB: SmartSegmentLike): SmartSegmentAngleInfo {\r\n    const vertex = lineIntersection(segA.x1, segA.y1, segA.x2, segA.y2, segB.x1, segB.y1, segB.x2, segB.y2);\r\n    const angleA = Math.atan2(segA.y2 - segA.y1, segA.x2 - segA.x1);\r\n    const angleB = Math.atan2(segB.y2 - segB.y1, segB.x2 - segB.x1);\r\n    return {\r\n        vx: vertex.x,\r\n        vy: vertex.y,\r\n        startAngle: angleA,\r\n        sweep: normalizeAngle(angleB - angleA),\r\n        angleEndpointAKey: null,\r\n        angleEndpointBKey: null,\r\n    };\r\n}\r\n\r\nfunction areParallel(segA: SmartSegmentLike, segB: SmartSegmentLike): boolean {\r\n    const dxA = segA.x2 - segA.x1;\r\n    const dyA = segA.y2 - segA.y1;\r\n    const dxB = segB.x2 - segB.x1;\r\n    const dyB = segB.y2 - segB.y1;\r\n    const lenA = Math.hypot(dxA, dyA) || 1.0e-9;\r\n    const lenB = Math.hypot(dxB, dyB) || 1.0e-9;\r\n    const cross = Math.abs(dxA * dyB - dyA * dxB) / (lenA * lenB);\r\n    return cross < PARALLEL_EPS;\r\n}\r\n\r\nexport function buildSmartSegmentAngleInfo(segA: SmartSegmentLike, segB: SmartSegmentLike, options: SmartAngleInfoOptions = {}): SmartSegmentAngleInfo {\r\n    const vertex = lineIntersection(segA.x1, segA.y1, segA.x2, segA.y2, segB.x1, segB.y1, segB.x2, segB.y2);\r\n    const candidateKeysA: SmartSegmentEndpointKey[] = options.endpointAKey ? [options.endpointAKey] : ['p1', 'p2'];\r\n    const candidateKeysB: SmartSegmentEndpointKey[] = options.endpointBKey ? [options.endpointBKey] : ['p1', 'p2'];\r\n    const candidatesA = candidateKeysA.map((key) => segmentRayCandidate(segA, vertex, key)).filter((candidate): candidate is SegmentRayCandidate => candidate !== null);\r\n    const candidatesB = candidateKeysB.map((key) => segmentRayCandidate(segB, vertex, key)).filter((candidate): candidate is SegmentRayCandidate => candidate !== null);\r\n\r\n    let best: (SmartSegmentAngleInfo & { readonly score: readonly number[] }) | null = null;\r\n    for (const candidateA of candidatesA) {\r\n        for (const candidateB of candidatesB) {\r\n            const sweep = normalizeAngle(candidateB.angle - candidateA.angle);\r\n            const score = [\r\n                Math.abs(sweep),\r\n                -(candidateA.length + candidateB.length),\r\n                sweep < 0 ? 1 : 0,\r\n            ] as const;\r\n            if (!best || compareAngleScores(score, best.score) < 0) {\r\n                best = {\r\n                    vx: vertex.x,\r\n                    vy: vertex.y,\r\n                    startAngle: candidateA.angle,\r\n                    sweep,\r\n                    angleEndpointAKey: candidateA.endpointKey,\r\n                    angleEndpointBKey: candidateB.endpointKey,\r\n                    score,\r\n                };\r\n            }\r\n        }\r\n    }\r\n\r\n    if (best) {\r\n        return best;\r\n    }\r\n    return fallbackSegmentAngleInfo(segA, segB);\r\n}\r\n\r\nexport function detectDimensionType(a: SmartDimensionEntityLike, b?: SmartDimensionEntityLike | null): SmartDimensionCandidate | null {\r\n    if (!b) {\r\n        if (isSegmentLike(a)) {\r\n            return { dimType: 'distance', x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 };\r\n        }\r\n        if (isCurveLike(a)) {\r\n            const dimType = prefersDiameterByDefault(a) ? 'diameter' : 'radius';\r\n            return { dimType, x1: a.cx, y1: a.cy, x2: a.cx + a.radius, y2: a.cy };\r\n        }\r\n        return null;\r\n    }\r\n\r\n    if (isPointLike(a) && isPointLike(b)) {\r\n        return { dimType: 'distance', x1: a.x, y1: a.y, x2: b.x, y2: b.y };\r\n    }\r\n\r\n    if (isSegmentLike(a) && isSegmentLike(b)) {\r\n        if (areParallel(a, b)) {\r\n            const foot = footOnLine(segmentMidX(a), segmentMidY(a), b.x1, b.y1, b.x2, b.y2);\r\n            return { dimType: 'distance', x1: segmentMidX(a), y1: segmentMidY(a), x2: foot.x, y2: foot.y };\r\n        }\r\n        const info = buildSmartSegmentAngleInfo(a, b);\r\n        return {\r\n            dimType: 'angle',\r\n            x1: info.vx,\r\n            y1: info.vy,\r\n            x2: info.vx,\r\n            y2: info.vy,\r\n            angleStart: info.startAngle,\r\n            angleSweep: info.sweep,\r\n            angleEndpointAKey: info.angleEndpointAKey,\r\n            angleEndpointBKey: info.angleEndpointBKey,\r\n        };\r\n    }\r\n\r\n    if (isPointLike(a) && isSegmentLike(b)) {\r\n        const foot = footOnSegment(a.x, a.y, b.x1, b.y1, b.x2, b.y2);\r\n        return { dimType: 'distance', x1: a.x, y1: a.y, x2: foot.x, y2: foot.y };\r\n    }\r\n    if (isSegmentLike(a) && isPointLike(b)) {\r\n        const foot = footOnSegment(b.x, b.y, a.x1, a.y1, a.x2, a.y2);\r\n        return { dimType: 'distance', x1: b.x, y1: b.y, x2: foot.x, y2: foot.y };\r\n    }\r\n\r\n    if (isCurveLike(a) && isPointLike(b)) {\r\n        return { dimType: 'distance', x1: a.cx, y1: a.cy, x2: b.x, y2: b.y };\r\n    }\r\n    if (isPointLike(a) && isCurveLike(b)) {\r\n        return { dimType: 'distance', x1: a.x, y1: a.y, x2: b.cx, y2: b.cy };\r\n    }\r\n\r\n    if (isCurveLike(a) && isCurveLike(b)) {\r\n        return { dimType: 'distance', x1: a.cx, y1: a.cy, x2: b.cx, y2: b.cy };\r\n    }\r\n\r\n    if (isSegmentLike(a) && isCurveLike(b)) {\r\n        return { dimType: 'distance', x1: segmentMidX(a), y1: segmentMidY(a), x2: b.cx, y2: b.cy };\r\n    }\r\n    if (isCurveLike(a) && isSegmentLike(b)) {\r\n        return { dimType: 'distance', x1: a.cx, y1: a.cy, x2: segmentMidX(b), y2: segmentMidY(b) };\r\n    }\r\n\r\n    return {\r\n        dimType: 'distance',\r\n        x1: anchorX(a),\r\n        y1: anchorY(a),\r\n        x2: anchorX(b),\r\n        y2: anchorY(b),\r\n    };\r\n}\r\n\r\nexport function detectAllDimensionTypes(a: SmartDimensionEntityLike, b?: SmartDimensionEntityLike | null): SmartDimensionCandidate[] {\r\n    const results: SmartDimensionCandidate[] = [];\r\n\r\n    if (!b) {\r\n        if (isSegmentLike(a)) {\r\n            results.push({ dimType: 'distance', label: 'Length', x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 });\r\n            results.push({ dimType: 'dx', label: 'Horizontal (\u0394X)', x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 });\r\n            results.push({ dimType: 'dy', label: 'Vertical (\u0394Y)', x1: a.x1, y1: a.y1, x2: a.x2, y2: a.y2 });\r\n        }\r\n        if (isCurveLike(a)) {\r\n            const curveTypes: Array<{ dimType: SmartDimensionKind; label: string }> = prefersDiameterByDefault(a)\r\n                ? [{ dimType: 'diameter', label: 'Diameter' }, { dimType: 'radius', label: 'Radius' }]\r\n                : [{ dimType: 'radius', label: 'Radius' }, { dimType: 'diameter', label: 'Diameter' }];\r\n            for (const curveType of curveTypes) {\r\n                results.push({\r\n                    ...curveType,\r\n                    x1: a.cx,\r\n                    y1: a.cy,\r\n                    x2: a.cx + a.radius,\r\n                    y2: a.cy,\r\n                });\r\n            }\r\n        }\r\n        return results;\r\n    }\r\n\r\n    if (isPointLike(a) && isPointLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance', x1: a.x, y1: a.y, x2: b.x, y2: b.y });\r\n        results.push({ dimType: 'dx', label: 'Horizontal (\u0394X)', x1: a.x, y1: a.y, x2: b.x, y2: b.y });\r\n        results.push({ dimType: 'dy', label: 'Vertical (\u0394Y)', x1: a.x, y1: a.y, x2: b.x, y2: b.y });\r\n        return results;\r\n    }\r\n\r\n    if (isSegmentLike(a) && isSegmentLike(b)) {\r\n        if (areParallel(a, b)) {\r\n            const midX = segmentMidX(a);\r\n            const midY = segmentMidY(a);\r\n            const foot = footOnLine(midX, midY, b.x1, b.y1, b.x2, b.y2);\r\n            results.push({ dimType: 'distance', label: 'Distance', x1: midX, y1: midY, x2: foot.x, y2: foot.y });\r\n        } else {\r\n            const info = buildSmartSegmentAngleInfo(a, b);\r\n            results.push({\r\n                dimType: 'angle',\r\n                label: 'Angle',\r\n                x1: info.vx,\r\n                y1: info.vy,\r\n                x2: info.vx,\r\n                y2: info.vy,\r\n                angleStart: info.startAngle,\r\n                angleSweep: info.sweep,\r\n                sourceA: a,\r\n                sourceB: b,\r\n                angleEndpointAKey: info.angleEndpointAKey,\r\n                angleEndpointBKey: info.angleEndpointBKey,\r\n            });\r\n            const invertedInfo = buildSmartSegmentAngleInfo(b, a);\r\n            results.push({\r\n                dimType: 'angle',\r\n                label: 'Angle (Inverted)',\r\n                x1: invertedInfo.vx,\r\n                y1: invertedInfo.vy,\r\n                x2: invertedInfo.vx,\r\n                y2: invertedInfo.vy,\r\n                angleStart: invertedInfo.startAngle,\r\n                angleSweep: invertedInfo.sweep,\r\n                sourceA: b,\r\n                sourceB: a,\r\n                angleEndpointAKey: invertedInfo.angleEndpointAKey,\r\n                angleEndpointBKey: invertedInfo.angleEndpointBKey,\r\n            });\r\n            const midX = segmentMidX(a);\r\n            const midY = segmentMidY(a);\r\n            const foot = footOnLine(midX, midY, b.x1, b.y1, b.x2, b.y2);\r\n            results.push({ dimType: 'distance', label: 'Distance', x1: midX, y1: midY, x2: foot.x, y2: foot.y });\r\n        }\r\n        return results;\r\n    }\r\n\r\n    if (isPointLike(a) && isSegmentLike(b)) {\r\n        const foot = footOnSegment(a.x, a.y, b.x1, b.y1, b.x2, b.y2);\r\n        results.push({ dimType: 'distance', label: 'Distance', x1: a.x, y1: a.y, x2: foot.x, y2: foot.y });\r\n        return results;\r\n    }\r\n    if (isSegmentLike(a) && isPointLike(b)) {\r\n        const foot = footOnSegment(b.x, b.y, a.x1, a.y1, a.x2, a.y2);\r\n        results.push({ dimType: 'distance', label: 'Distance', x1: b.x, y1: b.y, x2: foot.x, y2: foot.y });\r\n        return results;\r\n    }\r\n\r\n    if (isCurveLike(a) && isPointLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance (center)', x1: a.cx, y1: a.cy, x2: b.x, y2: b.y });\r\n        return results;\r\n    }\r\n    if (isPointLike(a) && isCurveLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance (center)', x1: a.x, y1: a.y, x2: b.cx, y2: b.cy });\r\n        return results;\r\n    }\r\n\r\n    if (isCurveLike(a) && isCurveLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance (centers)', x1: a.cx, y1: a.cy, x2: b.cx, y2: b.cy });\r\n        return results;\r\n    }\r\n\r\n    if (isSegmentLike(a) && isCurveLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance', x1: segmentMidX(a), y1: segmentMidY(a), x2: b.cx, y2: b.cy });\r\n        return results;\r\n    }\r\n    if (isCurveLike(a) && isSegmentLike(b)) {\r\n        results.push({ dimType: 'distance', label: 'Distance', x1: a.cx, y1: a.cy, x2: segmentMidX(b), y2: segmentMidY(b) });\r\n        return results;\r\n    }\r\n\r\n    results.push({\r\n        dimType: 'distance',\r\n        label: 'Distance',\r\n        x1: anchorX(a),\r\n        y1: anchorY(a),\r\n        x2: anchorX(b),\r\n        y2: anchorY(b),\r\n    });\r\n    return results;\r\n}\r\n\r\nexport const smartDimensions = Object.freeze({\r\n    prefersDiameterByDefault,\r\n    detectDimensionType,\r\n    detectAllDimensionTypes,\r\n    buildSmartSegmentAngleInfo,\r\n});", "import { KernelError } from './errors';\r\nimport { unwrapFactory, type WasmModuleFactory } from './default-module';\r\nimport { SketchToolkit, type SketchToolkitWasmModule } from './sketch-kernel';\r\nimport type { CreateSketchToolkitOptions } from './sketch-toolkit';\r\n\r\nexport * from './sketch-api';\r\n\r\ndeclare global {\r\n    var createSketchToolkitModule: WasmModuleFactory | undefined;\r\n}\r\n\r\nlet browserFactoryPromise: Promise<WasmModuleFactory> | undefined;\r\n\r\nfunction normalizeCreateSketchToolkitInput(input?: SketchToolkitWasmModule | CreateSketchToolkitOptions): CreateSketchToolkitOptions {\r\n    if (!input) {\r\n        return {};\r\n    }\r\n    if (typeof input === 'object' && 'wasmModule' in input) {\r\n        return input as CreateSketchToolkitOptions;\r\n    }\r\n    return { wasmModule: input as SketchToolkitWasmModule };\r\n}\r\n\r\nfunction getGlobalFactory(): WasmModuleFactory | undefined {\r\n    return unwrapFactory((globalThis as { createSketchToolkitModule?: unknown }).createSketchToolkitModule);\r\n}\r\n\r\nasync function loadBrowserFactory(): Promise<WasmModuleFactory> {\r\n    const existingFactory = getGlobalFactory();\r\n    if (existingFactory) {\r\n        return existingFactory;\r\n    }\r\n\r\n    if (browserFactoryPromise) {\r\n        return browserFactoryPromise;\r\n    }\r\n\r\n    browserFactoryPromise = (async () => {\r\n        const scriptUrl = new URL('./sketch-toolkit.wasm.js', import.meta.url).href;\r\n\r\n        if (typeof importScripts === 'function') {\r\n            importScripts(scriptUrl);\r\n            const workerFactory = getGlobalFactory();\r\n            if (!workerFactory) {\r\n                throw new KernelError('NOT_INITIALIZED', 'Loaded sketch-toolkit.wasm.js in a worker, but no factory became available');\r\n            }\r\n            return workerFactory;\r\n        }\r\n\r\n        if (typeof document === 'undefined') {\r\n            throw new KernelError('NOT_INITIALIZED', 'No browser loader is available in this runtime; pass a pre-loaded sketch toolkit wasmModule instead');\r\n        }\r\n\r\n        await new Promise<void>((resolve, reject) => {\r\n            const existingScript = Array.from(document.getElementsByTagName('script')).find((script) => script.src === scriptUrl);\r\n\r\n            const handleLoad = () => resolve();\r\n            const handleError = () => reject(new KernelError('NOT_INITIALIZED', `Failed to load ${scriptUrl}`));\r\n\r\n            if (existingScript) {\r\n                if (getGlobalFactory()) {\r\n                    resolve();\r\n                    return;\r\n                }\r\n                existingScript.addEventListener('load', handleLoad, { once: true });\r\n                existingScript.addEventListener('error', handleError, { once: true });\r\n                return;\r\n            }\r\n\r\n            const script = document.createElement('script');\r\n            script.src = scriptUrl;\r\n            script.async = true;\r\n            script.addEventListener('load', handleLoad, { once: true });\r\n            script.addEventListener('error', handleError, { once: true });\r\n            (document.head ?? document.body ?? document.documentElement).appendChild(script);\r\n        });\r\n\r\n        const loadedFactory = getGlobalFactory();\r\n        if (!loadedFactory) {\r\n            throw new KernelError('NOT_INITIALIZED', 'Loaded sketch-toolkit.wasm.js, but no WASM module factory was registered on globalThis');\r\n        }\r\n        return loadedFactory;\r\n    })();\r\n\r\n    try {\r\n        return await browserFactoryPromise;\r\n    } catch (error) {\r\n        browserFactoryPromise = undefined;\r\n        throw error;\r\n    }\r\n}\r\n\r\nexport async function createSketchToolkit(input?: SketchToolkitWasmModule | CreateSketchToolkitOptions): Promise<SketchToolkit> {\r\n    const options = normalizeCreateSketchToolkitInput(input);\r\n    if (options.wasmModule) {\r\n        return new SketchToolkit(options.wasmModule);\r\n    }\r\n\r\n    const mod = await (await loadBrowserFactory())();\r\n    return new SketchToolkit(mod as unknown as SketchToolkitWasmModule);\r\n}\r\n"],
  "mappings": "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",
  "names": ["snapshot", "dof", "status", "diagnostics", "script"]
}
