import { EventEmitter, h } from '../../stencil-public-runtime';
import { Dimensions, Point } from '@vertexvis/geometry';
import { BasicViewer } from '@vertexvis/utils';
import { MarkupCenteringBehavior, MarkupInteraction } from '../../lib/types/markup';
import { LineAnchorStyle } from './utils';
/**
 * The supported arrow markup modes.
 *
 * @see {@link ViewerMarkupArrowMode.mode} - For more details about modes.
 */
export type ViewerMarkupArrowMode = 'edit' | 'create' | '';
export declare class ViewerMarkupArrow {
    /**
     * The position of the starting anchor. Can either be an instance of a
     * `Point` or a JSON string representation in the format of `[x, y]` or
     * `{"x": 0, "y": 0}`.
     *
     * Points are expected to be relative coordinates from `[-0.5, 0.5]`,
     * e.g. `[0, 0]` corresponds to a point in the center of the viewport.
     */
    start?: Point.Point;
    /**
     * The position of the starting anchor, as a JSON string. Can either be an
     * instance of a `Point` or a JSON string representation in the format of
     * `[x, y]` or `{"x": 0, "y": 0}`.
     *
     * Points are expected to be relative coordinates from `[-0.5, 0.5]`,
     * e.g. `[0, 0]` corresponds to a point in the center of the viewport.
     */
    startJson?: string;
    /**
     * The position of the ending anchor. Can either be an instance of a `Point`
     * or a JSON string representation in the format of `[x, y]` or `{"x": 0,
     * "y": 0}`.
     *
     * Points are expected to be relative coordinates from `[-0.5, 0.5]`,
     * e.g. `[0, 0]` corresponds to a point in the center of the viewport.
     */
    end?: Point.Point;
    /**
     * The position of the ending anchor, as a JSON string. Can either be an
     * instance of a `Point` or a JSON string representation in the format of
     * `[x, y]` or `{"x": 0, "y": 0}`.
     *
     * Points are expected to be relative coordinates from `[-0.5, 0.5]`,
     * e.g. `[0, 0]` corresponds to a point in the center of the viewport.
     */
    endJson?: string;
    /**
     * 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;
    /**
     * 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;
    /**
     * A mode that specifies how the markup component should behave. When
     * unset, the component will not respond to interactions with the handles.
     * When `edit`, the markup anchors are interactive and the user is able
     * to reposition them. When `create`, anytime the user clicks on the canvas,
     * a new markup will be performed.
     */
    mode: ViewerMarkupArrowMode;
    /**
     * The viewer to connect to markups.
     *
     * This property will automatically be set when a child of a
     * `<vertex-viewer-markup>` or `<vertex-viewer>` element.
     */
    viewer?: BasicViewer;
    /**
     * An event that is dispatched anytime the user begins interacting with the
     * markup.
     */
    interactionBegin: EventEmitter<void>;
    /**
     * An event that is dispatched when the user has finished interacting with the
     * markup.
     */
    interactionEnd: EventEmitter<MarkupInteraction>;
    /**
     * An event that is dispatched when this markup element is in view
     * mode (`this.mode === ""`), and it completes a rerender.
     */
    viewRendered: EventEmitter<void>;
    private hostEl;
    private elementBounds?;
    private interactionHandler;
    private registeredInteraction?;
    /**
     * @ignore
     */
    protected componentWillLoad(): void;
    protected componentDidLoad(): void;
    protected componentDidRender(): void;
    protected disconnectedCallback(): void;
    dispose(): Promise<void>;
    /**
     * @ignore
     */
    protected handleViewerChanged(newViewer?: BasicViewer): Promise<void>;
    protected handleStartJsonChange(): void;
    protected handleEndJsonChange(): void;
    protected handleModeChange(): void;
    protected handleScalingConfigurationChange(): void;
    protected handleScaleChange(): void;
    private updateViewport;
    private updatePointsFromProps;
    private renderLineAnchorStyle;
    render(): h.JSX.IntrinsicElements;
    private handleWindowPointerDown;
    private handleTouchStart;
}
