import { EventEmitter, h } from '../../stencil-public-runtime';
import { Dimensions, Point } from '@vertexvis/geometry';
import { BasicViewer } from '@vertexvis/utils';
import { Markup, MarkupCenteringBehavior } from '../../lib/types/markup';
import { LineAnchorStyle } from '../viewer-markup-arrow/utils';
/**
 * The types of markup that can be performed by this tool.
 */
export type ViewerMarkupToolType = 'arrow' | 'circle' | 'freeform';
export declare class ViewerMarkupTool {
    /**
     * An HTML template that describes the HTML to use for new arrow
     * markup. It's expected that the template contains a
     * `<vertex-viewer-markup-arrow>`.
     */
    arrowTemplateId?: string;
    /**
     * An HTML template that describes the HTML to use for new circle
     * markup. It's expected that the template contains a
     * `<vertex-viewer-markup-circle>`.
     */
    circleTemplateId?: string;
    /**
     * An HTML template that describes the HTML to use for new freeform
     * markup. It's expected that the template contains a
     * `<vertex-viewer-markup-freeform>`.
     */
    freeformTemplateId?: string;
    /**
     * The type of markup.
     *
     * This property will automatically be set when a child of a
     * `<vertex-viewer-markup>` element.
     */
    tool: ViewerMarkupToolType;
    /**
     * Disables markups.
     *
     * This property will automatically be set when a child of a
     * `<vertex-viewer-markup>` element.
     */
    disabled: boolean;
    /**
     * The viewer to connect to markup.
     *
     * This property will automatically be set when a child of a
     * `<vertex-viewer-markup>` or `<vertex-viewer>` element.
     */
    viewer?: BasicViewer;
    /**
     * The style of the starting anchor. This defaults to none.
     */
    startLineAnchorStyle: LineAnchorStyle;
    /**
     * The style of the ending anchor. This defaults to 'arrow-triangle.'
     */
    endLineAnchorStyle: LineAnchorStyle;
    /**
     * The original viewport dimensions where this markup was created. This value is used
     * to determine where the markup should be rendered relative to the current viewport,
     * enabling some markup to appear "off-screen".
     *
     * When provided, all NDC values will be considered relative to this viewport.
     */
    originatingViewport?: Dimensions.Dimensions;
    /**
     * Defines the behavior of the provided markup when the originating viewport is smaller
     * than the current viewport, or is scaled to a size smaller than the current viewport
     * using the `scale` property.
     *
     * Options:
     * - `x-only`: Markup will be centered horizontally, but not vertically.
     * - `y-only`: Markup will be centered vertically, but not horizontally.
     * - `both`: Markup will be centered both horizontally and vertically.
     * - `none`: Markup will not be centered (default).
     */
    centeringBehavior: MarkupCenteringBehavior;
    /**
     * The current offset of the visible viewport. This value is used to determine where
     * markup should be rendered relative to the current viewport, enabling some markup to appear "off-screen".
     *
     * When provided, all computed coordinates will be offset by this amount.
     */
    offset?: Point.Point;
    /**
     * The scale to render this markup at. This value is used to scale the element's bounds
     * along with any `offset` to determine the final computed coordinates.
     *
     * When provided, all computed coordinates will be scaled by this amount.
     */
    scale: number;
    /**
     * An event that is dispatched when a user begins a new markup.
     */
    markupBegin: EventEmitter<void>;
    /**
     * An event that is dispatched when a user has finished their markup.
     */
    markupEnd: EventEmitter<Markup>;
    private hostEl;
    /**
     * Captures internal state that you want to preserve across dev refreshes, but
     * don't want to trigger a render when the state changes.
     */
    private stateMap;
    protected handleViewerChanged(): Promise<void>;
    /**
     * @ignore
     */
    protected handlePropertyChanged(): void;
    protected handleScalingConfigurationChanged(): void;
    /**
     * @ignore
     */
    protected componentDidLoad(): void;
    /**
     * Resets the state of the internally managed markup element
     * to allow for creating a new markup. This state is automatically
     * managed when this element is placed as a child of a
     * `<vertex-viewer-markup>` element.
     */
    reset(): Promise<void>;
    /**
     * @ignore
     */
    protected render(): h.JSX.IntrinsicElements;
    private createArrowMarkupElement;
    private createCircleMarkupElement;
    private createFreeformMarkupElement;
    private createNewMarkupElement;
    private updateMarkupElement;
    private handleMarkupInteractionBegin;
    private handleMarkupInteractionEnd;
}
