import { IDesignItem } from '../../../../item/IDesignItem.js';
import { IDesignerCanvas } from '../../IDesignerCanvas.js';
import { AbstractExtension } from '../AbstractExtension.js';
import { IExtensionManager } from '../IExtensionManger.js';
import { IGeometryReader } from './geometry/IGeometry.js';
export interface UnifiedGeometryExtensionOptions {
    allowShapeDrag?: boolean;
}
export declare class UnifiedGeometryExtension extends AbstractExtension {
    private _geometry;
    private _reader;
    private _dragState;
    private _options;
    private _overlayStructureSignature;
    private _eventCleanups;
    /** Map from 'anchor-{index}', 'cp1-{index}', 'cp2-{index}' to overlay circle */
    private _overlayCircles;
    /** Lines for control point connections */
    private _overlayLines;
    constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem, reader?: IGeometryReader, options?: UnifiedGeometryExtensionOptions);
    extend(): void;
    refresh(): void;
    dispose(): void;
    private _cleanupAll;
    private _getOverlayStructureSignature;
    private _hasOverlayStructureMismatch;
    private _getRefreshValues;
    /** Convert an SVG user-space coordinate to overlay (canvas) coordinates. */
    private _toOverlay;
    /** Convert overlay (canvas) coordinates back to SVG user-space. */
    private _fromOverlay;
    private _getSvgOverlayTransform;
    private _mapSvgPointToOverlay;
    private _mapOverlayPointToSvg;
    private _createProjectiveMatrixForQuad;
    private _applyProjectiveMatrix;
    private _invertProjectiveMatrix;
    private _toElementReferenceBoxPoint;
    private _fromElementReferenceBoxPoint;
    private _getSvgGeometryBBoxOffset;
    private _drawOverlays;
    private _updateOverlayAppearance;
    private _addTrackedListener;
    private _drawAnchorCircle;
    private _drawControlCircle;
    private _onPointerDown;
    private _onPointerMove;
    private _dragSingleHandle;
    private _dragRectCorner;
    private _setRectCornerPoints;
    private _dragCircleCardinal;
    private _dragEllipseCardinal;
    private _normalizeCardinalIndex;
    private _setCardinalArcPoints;
    private _shouldRenderAnchorHandle;
    private _dragWholeShape;
    /** Update existing overlay circle/line positions without removing/recreating them.
     *  This preserves pointer capture during drag. */
    private _updateOverlayPositions;
    private _onPointerUp;
    /** Set attributes directly on the DOM element for live visual feedback during drag */
    private _applyGeometryToElement;
    /** Commit geometry change through the designItem undo system.
     *  group.commit() will trigger refreshAllExtensions which redraws overlays. */
    private _commitGeometryChange;
    private _showContextMenu;
    private _findLastNonCloseIndex;
    private _findNextNonCloseSegment;
    private _findPreviousAnchor;
    private _insertPointAfter;
    private _convertToLine;
    private _convertToQuadratic;
    private _convertToCubic;
    private _convertToArc;
    private _invertArc;
    private _evalCubicBezier;
    private _evalQuadraticBezier;
}
