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; private _getSelectedHandleRefreshKey; /** Convert an SVG user-space coordinate to overlay (canvas) coordinates. */ private _toOverlay; /** Convert overlay (canvas) coordinates back to SVG user-space. */ private _fromOverlay; private _drawOverlays; private _updateOverlayAppearance; private _addTrackedListener; private _drawAnchorCircle; private _drawControlCircle; private _onPointerDown; private _selectSourcePart; private _getSourcePart; private _isSelectedHandle; private _onPointerMove; private _dragSingleHandle; private _normalizeAxisLineSegments; 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 _convertToMove; private _convertToLine; private _convertToHorizontalLine; private _convertToVerticalLine; private _convertToQuadratic; private _convertToCubic; private _convertToArc; private _invertArc; private _evalCubicBezier; private _evalQuadraticBezier; }