--- /dev/null
+/**
+ * Copyright (c) 2017 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { IEvent } from 'common/EventEmitter';
+import { IDisposable } from 'common/Types';
+
+export interface IColorManager {
+ colors: IColorSet;
+}
+
+export interface IColor {
+ css: string;
+ rgba: number; // 32-bit int with rgba in each byte
+}
+
+export interface IColorSet {
+ foreground: IColor;
+ background: IColor;
+ cursor: IColor;
+ cursorAccent: IColor;
+ selection: IColor;
+ ansi: IColor[];
+}
+
+export interface IPartialColorSet {
+ foreground: IColor;
+ background: IColor;
+ cursor?: IColor;
+ cursorAccent?: IColor;
+ selection?: IColor;
+ ansi: IColor[];
+}
+
+export interface IViewport extends IDisposable {
+ scrollBarWidth: number;
+ syncScrollArea(immediate?: boolean): void;
+ getLinesScrolled(ev: WheelEvent): number;
+ onWheel(ev: WheelEvent): boolean;
+ onTouchStart(ev: TouchEvent): void;
+ onTouchMove(ev: TouchEvent): boolean;
+ onThemeChange(colors: IColorSet): void;
+}
+
+export interface IViewportRange {
+ start: IViewportRangePosition;
+ end: IViewportRangePosition;
+}
+
+export interface IViewportRangePosition {
+ x: number;
+ y: number;
+}
+
+export type LinkMatcherHandler = (event: MouseEvent, uri: string) => void;
+export type LinkMatcherHoverTooltipCallback = (event: MouseEvent, uri: string, position: IViewportRange) => void;
+export type LinkMatcherValidationCallback = (uri: string, callback: (isValid: boolean) => void) => void;
+
+export interface ILinkMatcher {
+ id: number;
+ regex: RegExp;
+ handler: LinkMatcherHandler;
+ hoverTooltipCallback?: LinkMatcherHoverTooltipCallback;
+ hoverLeaveCallback?: () => void;
+ matchIndex?: number;
+ validationCallback?: LinkMatcherValidationCallback;
+ priority?: number;
+ willLinkActivate?: (event: MouseEvent, uri: string) => boolean;
+}
+
+export interface IRegisteredLinkMatcher extends ILinkMatcher {
+ priority: number;
+}
+
+export interface ILinkifierEvent {
+ x1: number;
+ y1: number;
+ x2: number;
+ y2: number;
+ cols: number;
+ fg: number | undefined;
+}
+
+export interface ILinkifier {
+ onLinkHover: IEvent<ILinkifierEvent>;
+ onLinkLeave: IEvent<ILinkifierEvent>;
+ onLinkTooltip: IEvent<ILinkifierEvent>;
+
+ attachToDom(element: HTMLElement, mouseZoneManager: IMouseZoneManager): void;
+ linkifyRows(start: number, end: number): void;
+ registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number;
+ deregisterLinkMatcher(matcherId: number): boolean;
+}
+
+export interface ILinkMatcherOptions {
+ /**
+ * The index of the link from the regex.match(text) call. This defaults to 0
+ * (for regular expressions without capture groups).
+ */
+ matchIndex?: number;
+ /**
+ * A callback that validates an individual link, returning true if valid and
+ * false if invalid.
+ */
+ validationCallback?: LinkMatcherValidationCallback;
+ /**
+ * A callback that fires when the mouse hovers over a link.
+ */
+ tooltipCallback?: LinkMatcherHoverTooltipCallback;
+ /**
+ * A callback that fires when the mouse leaves a link that was hovered.
+ */
+ leaveCallback?: () => void;
+ /**
+ * The priority of the link matcher, this defines the order in which the link
+ * matcher is evaluated relative to others, from highest to lowest. The
+ * default value is 0.
+ */
+ priority?: number;
+ /**
+ * A callback that fires when the mousedown and click events occur that
+ * determines whether a link will be activated upon click. This enables
+ * only activating a link when a certain modifier is held down, if not the
+ * mouse event will continue propagation (eg. double click to select word).
+ */
+ willLinkActivate?: (event: MouseEvent, uri: string) => boolean;
+}
+
+export interface IMouseZoneManager extends IDisposable {
+ add(zone: IMouseZone): void;
+ clearAll(start?: number, end?: number): void;
+}
+
+export interface IMouseZone {
+ x1: number;
+ x2: number;
+ y1: number;
+ y2: number;
+ clickCallback: (e: MouseEvent) => any;
+ hoverCallback: (e: MouseEvent) => any | undefined;
+ tooltipCallback: (e: MouseEvent) => any | undefined;
+ leaveCallback: () => any | undefined;
+ willLinkActivate: (e: MouseEvent) => boolean;
+}