import type { CanvasAnnotationTranslate, SendCanvasAnnotation } from "./types.js"; export interface CanvasPin { id: string; /** Position as a percentage of the canvas (so it survives resize/zoom) */ xPct: number; yPct: number; /** Optional CSS selector of the element under the click, for context */ targetSelector?: string; /** Best-effort stable canvas/code-layer id when the clicked layer exposes one. */ targetAnchorId?: string; /** Optional snippet of text content the user clicked near */ targetText?: string; /** Pending comment text the user is composing */ draft?: string; /** Held locally until the user batch-applies queued comments. */ queued?: boolean; /** Submitted state — the marker stays visible as confirmation. */ submitted?: boolean; } export interface CanvasCommentPinsProps { translate: CanvasAnnotationTranslate; sendToAgent: SendCanvasAnnotation; onSendError?: () => void; allowQueue?: boolean; showAnchorDetails?: boolean; showSubmitShortcut?: boolean; /** Whether the pin tool is active. When true, clicks drop pins. */ active: boolean; /** In queue mode, pin Send adds to the shared annotation batch. */ submitMode?: "direct" | "queue"; /** Disable / exit the pin mode (called on Escape, after submit, etc.) */ onClose: () => void; /** Mirrors local pins to a parent that can submit them with other annotations. */ onPinsChange?: (pins: CanvasPin[]) => void; /** Increment to mark queued pins as submitted by a parent action. */ submitQueuedSignal?: number; /** Keep the click plane below a sibling draw toolbar in combined annotate mode. */ clickPlaneUnderToolbar?: boolean; /** * Selector for the canvas surface (e.g. `.slide-content`). Pins are anchored * to this element's bounding rect; clicks outside are ignored. */ canvasSelector: string; /** Stable identifier for the current view (slide id / design id) — used in * the agent prompt and as a pin namespace key. */ contextId: string; /** Human-readable label for the context (slide title, slide index, design * title) used in the agent prompt. */ contextLabel?: string; } /** * Click-to-comment pins anchored to the canvas. * * Mirrors claude.ai/design's "inline comments" feature — the most-praised * interaction pattern of that tool. A user clicks anywhere on the canvas to * drop a pin, types a one-line instruction, and the pin's position + nearby * element selector + instruction is sent to the agent. Submitted pins stay on * the canvas as local confirmation; the agent's reply lands in the chat * sidebar where it can make targeted edits. * * Why pins (vs text-anchored comments): * The existing slide_comments table anchors comments to text selections via * TipTap. That's good for prose review — but Rochkind also wants to point * to images, charts, and whitespace. Pins handle those cases without * requiring a text selection. */ export declare function CanvasCommentPins({ translate, sendToAgent, onSendError, allowQueue, showAnchorDetails, showSubmitShortcut, active, submitMode, onClose, onPinsChange, submitQueuedSignal, clickPlaneUnderToolbar, canvasSelector, contextId, contextLabel, }: CanvasCommentPinsProps): import("react").JSX.Element | null; //# sourceMappingURL=CanvasCommentPins.d.ts.map