import { RulerDefinition } from './ruler-core.js'; /** * CSS class names for ruler elements */ export declare const RULER_CLASS_NAMES: { /** Main ruler container */ readonly ruler: "superdoc-ruler"; /** Tick mark element */ readonly tick: "superdoc-ruler-tick"; /** Main (inch) tick */ readonly tickMain: "superdoc-ruler-tick--main"; /** Half-inch tick */ readonly tickHalf: "superdoc-ruler-tick--half"; /** Eighth-inch tick */ readonly tickEighth: "superdoc-ruler-tick--eighth"; /** Inch label number */ readonly label: "superdoc-ruler-label"; /** Margin handle */ readonly handle: "superdoc-ruler-handle"; /** Left margin handle */ readonly handleLeft: "superdoc-ruler-handle--left"; /** Right margin handle */ readonly handleRight: "superdoc-ruler-handle--right"; /** Vertical indicator line during drag */ readonly indicator: "superdoc-ruler-indicator"; }; /** * Options for creating a ruler element */ export type CreateRulerElementOptions = { /** The ruler definition from generateRulerDefinition() */ definition: RulerDefinition; /** Document to create elements in */ doc: Document; /** Whether to include interactive margin handles (default: false for per-page rulers) */ interactive?: boolean; /** Callback when margin handle drag starts */ onDragStart?: (side: 'left' | 'right', event: PointerEvent) => void; /** Callback when margin handle is dragged */ onDrag?: (side: 'left' | 'right', x: number, event: PointerEvent) => void; /** Callback when margin handle drag ends */ onDragEnd?: (side: 'left' | 'right', x: number, event: PointerEvent) => void; }; /** * Create a ruler DOM element. * * Creates a complete ruler with tick marks and optionally interactive margin handles. * For per-page rulers in the painter, set `interactive: false` to render display-only rulers. * For the main interactive ruler overlay, set `interactive: true` and provide callbacks. * * @param options - Options for creating the ruler * @returns The ruler container element * * @example * ```typescript * // Display-only ruler for per-page rendering * const ruler = createRulerElement({ * definition: generateRulerDefinition({ pageSize, pageMargins }), * doc: document, * interactive: false, * }); * pageElement.insertBefore(ruler, pageElement.firstChild); * * // Interactive ruler with margin handles * const interactiveRuler = createRulerElement({ * definition, * doc: document, * interactive: true, * onDragEnd: (side, x) => editor.updatePageStyle({ pageMargins: { [side]: x / 96 } }), * }); * ``` */ export declare function createRulerElement(options: CreateRulerElementOptions): HTMLElement; /** * Update a handle's position. * * @param ruler - Ruler container element * @param side - Which handle to update * @param x - New X position in pixels */ export declare function updateHandlePosition(ruler: HTMLElement, side: 'left' | 'right', x: number): void; /** * Create a vertical indicator line element for drag feedback. * * @param doc - Document to create element in * @param height - Height of the indicator in pixels * @returns Indicator element */ export declare function createIndicatorElement(doc: Document, height: number): HTMLElement; /** * Show/hide and position the vertical indicator. * * @param indicator - Indicator element * @param visible - Whether to show the indicator * @param x - X position in pixels (only used when visible) */ export declare function updateIndicator(indicator: HTMLElement, visible: boolean, x?: number): void; //# sourceMappingURL=ruler-renderer.d.ts.map