2016-06-23 09:47:54 -07:00
|
|
|
/**
|
|
|
|
* @license
|
|
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
|
|
* found in the LICENSE file at https://angular.io/license
|
|
|
|
*/
|
|
|
|
|
2017-02-14 21:03:18 -08:00
|
|
|
import {InjectionToken, Injector} from '../di';
|
2016-06-08 16:38:52 -07:00
|
|
|
import {ViewEncapsulation} from '../metadata/view';
|
|
|
|
|
2016-05-25 15:00:05 -07:00
|
|
|
/**
|
2017-03-07 16:36:12 -08:00
|
|
|
* @deprecated Use `RendererType2` (and `Renderer2`) instead.
|
2016-05-25 15:00:05 -07:00
|
|
|
*/
|
2015-12-02 10:35:51 -08:00
|
|
|
export class RenderComponentType {
|
2016-06-08 16:38:52 -07:00
|
|
|
constructor(
|
|
|
|
public id: string, public templateUrl: string, public slotCount: number,
|
2016-07-08 17:11:12 -07:00
|
|
|
public encapsulation: ViewEncapsulation, public styles: Array<string|any[]>,
|
2017-02-22 15:14:49 -08:00
|
|
|
public animations: any) {}
|
2015-12-02 10:35:51 -08:00
|
|
|
}
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2017-02-20 08:00:31 -08:00
|
|
|
/**
|
|
|
|
* @deprecated Debug info is handeled internally in the view engine now.
|
|
|
|
*/
|
2016-01-06 14:13:44 -08:00
|
|
|
export abstract class RenderDebugInfo {
|
2017-09-28 13:36:56 -07:00
|
|
|
abstract get injector(): Injector;
|
|
|
|
abstract get component(): any;
|
|
|
|
abstract get providerTokens(): any[];
|
|
|
|
abstract get references(): {[key: string]: any};
|
|
|
|
abstract get context(): any;
|
|
|
|
abstract get source(): string;
|
2016-01-13 21:35:21 -08:00
|
|
|
}
|
|
|
|
|
2017-02-20 08:00:31 -08:00
|
|
|
/**
|
2017-03-07 16:36:12 -08:00
|
|
|
* @deprecated Use the `Renderer2` instead.
|
2017-02-20 08:00:31 -08:00
|
|
|
*/
|
2016-11-02 17:54:05 -07:00
|
|
|
export interface DirectRenderer {
|
|
|
|
remove(node: any): void;
|
|
|
|
appendChild(node: any, parent: any): void;
|
|
|
|
insertBefore(node: any, refNode: any): void;
|
|
|
|
nextSibling(node: any): any;
|
|
|
|
parentElement(node: any): any;
|
|
|
|
}
|
|
|
|
|
2016-05-25 15:00:05 -07:00
|
|
|
/**
|
2017-03-07 16:36:12 -08:00
|
|
|
* @deprecated Use the `Renderer2` instead.
|
2016-05-25 15:00:05 -07:00
|
|
|
*/
|
2016-01-06 14:13:44 -08:00
|
|
|
export abstract class Renderer {
|
2016-06-08 16:38:52 -07:00
|
|
|
abstract selectRootElement(selectorOrNode: string|any, debugInfo?: RenderDebugInfo): any;
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2016-05-26 14:41:33 +01:00
|
|
|
abstract createElement(parentElement: any, name: string, debugInfo?: RenderDebugInfo): any;
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2015-12-02 10:35:51 -08:00
|
|
|
abstract createViewRoot(hostElement: any): any;
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2016-05-26 14:41:33 +01:00
|
|
|
abstract createTemplateAnchor(parentElement: any, debugInfo?: RenderDebugInfo): any;
|
2015-06-24 13:46:39 -07:00
|
|
|
|
2016-05-26 14:41:33 +01:00
|
|
|
abstract createText(parentElement: any, value: string, debugInfo?: RenderDebugInfo): any;
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2016-03-28 14:25:22 -07:00
|
|
|
abstract projectNodes(parentElement: any, nodes: any[]): void;
|
2015-03-23 14:10:55 -07:00
|
|
|
|
2016-03-28 14:25:22 -07:00
|
|
|
abstract attachViewAfter(node: any, viewRootNodes: any[]): void;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2016-03-28 14:25:22 -07:00
|
|
|
abstract detachView(viewRootNodes: any[]): void;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2016-03-28 14:25:22 -07:00
|
|
|
abstract destroyView(hostElement: any, viewAllNodes: any[]): void;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2016-01-25 14:47:25 -08:00
|
|
|
abstract listen(renderElement: any, name: string, callback: Function): Function;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2015-12-02 10:35:51 -08:00
|
|
|
abstract listenGlobal(target: string, name: string, callback: Function): Function;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2016-03-28 14:25:22 -07:00
|
|
|
abstract setElementProperty(renderElement: any, propertyName: string, propertyValue: any): void;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2016-06-08 16:38:52 -07:00
|
|
|
abstract setElementAttribute(renderElement: any, attributeName: string, attributeValue: string):
|
|
|
|
void;
|
2015-09-11 13:37:05 -07:00
|
|
|
|
2015-07-07 08:15:58 +02:00
|
|
|
/**
|
2016-01-06 14:13:44 -08:00
|
|
|
* Used only in debug mode to serialize property changes to dom nodes as attributes.
|
2015-07-07 08:15:58 +02:00
|
|
|
*/
|
2016-06-08 16:38:52 -07:00
|
|
|
abstract setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string):
|
|
|
|
void;
|
2015-10-06 06:53:39 -07:00
|
|
|
|
2016-07-12 10:26:54 -07:00
|
|
|
abstract setElementClass(renderElement: any, className: string, isAdd: boolean): void;
|
2015-06-23 11:21:56 -07:00
|
|
|
|
2016-07-12 10:26:54 -07:00
|
|
|
abstract setElementStyle(renderElement: any, styleName: string, styleValue: string): void;
|
2015-12-02 10:35:51 -08:00
|
|
|
|
2016-07-12 10:26:54 -07:00
|
|
|
abstract invokeElementMethod(renderElement: any, methodName: string, args?: any[]): void;
|
2015-12-02 10:35:51 -08:00
|
|
|
|
2016-07-12 10:26:54 -07:00
|
|
|
abstract setText(renderNode: any, text: string): void;
|
2016-05-25 12:46:22 -07:00
|
|
|
|
2016-06-08 16:38:52 -07:00
|
|
|
abstract animate(
|
2017-02-27 23:08:19 -08:00
|
|
|
element: any, startingStyles: any, keyframes: any[], duration: number, delay: number,
|
|
|
|
easing: string, previousPlayers?: any[]): any;
|
2015-11-02 08:39:14 -08:00
|
|
|
}
|
2015-09-28 19:58:38 -07:00
|
|
|
|
2017-03-07 16:36:12 -08:00
|
|
|
export const Renderer2Interceptor = new InjectionToken<Renderer2[]>('Renderer2Interceptor');
|
2017-02-22 15:14:49 -08:00
|
|
|
|
2017-02-16 13:55:55 -08:00
|
|
|
/**
|
|
|
|
* Injectable service that provides a low-level interface for modifying the UI.
|
|
|
|
*
|
|
|
|
* Use this service to bypass Angular's templating and make custom UI changes that can't be
|
|
|
|
* expressed declaratively. For example if you need to set a property or an attribute whose name is
|
2017-10-13 22:27:38 +03:00
|
|
|
* not statically known, use {@link Renderer#setElementProperty setElementProperty} or
|
|
|
|
* {@link Renderer#setElementAttribute setElementAttribute} respectively.
|
2017-02-16 13:55:55 -08:00
|
|
|
*
|
|
|
|
* If you are implementing a custom renderer, you must implement this interface.
|
|
|
|
*
|
|
|
|
* The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.
|
2017-02-20 08:00:31 -08:00
|
|
|
*
|
2017-03-07 16:36:12 -08:00
|
|
|
* @deprecated Use `RendererFactory2` instead.
|
2017-02-16 13:55:55 -08:00
|
|
|
*/
|
|
|
|
export abstract class RootRenderer {
|
|
|
|
abstract renderComponent(componentType: RenderComponentType): Renderer;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Used by `RendererFactory2` to associate custom rendering data and styles
|
|
|
|
* with a rendering implementation.
|
|
|
|
* @experimental
|
2017-02-16 13:55:55 -08:00
|
|
|
*/
|
2017-03-07 16:36:12 -08:00
|
|
|
export interface RendererType2 {
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* A unique identifying string for the new renderer, used when creating
|
|
|
|
* unique styles for encapsulation.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
id: string;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* The view encapsulation type, which determines how styles are applied to
|
|
|
|
* DOM elements. One of
|
|
|
|
* - `Emulated` (default): Emulate native scoping of styles.
|
|
|
|
* - `Native`: Use the native encapsulation mechanism of the renderer.
|
2018-07-18 10:26:59 -07:00
|
|
|
* - `ShadowDom`: Use modern [Shadow
|
2018-07-02 12:06:52 -07:00
|
|
|
* DOM](https://w3c.github.io/webcomponents/spec/shadow/) and
|
|
|
|
* create a ShadowRoot for component's host element.
|
|
|
|
* - `None`: Do not provide any template or style encapsulation.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
encapsulation: ViewEncapsulation;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Defines CSS styles to be stored on a renderer instance.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
styles: (string|any[])[];
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Defines arbitrary developer-defined data to be stored on a renderer instance.
|
|
|
|
* This is useful for renderers that delegate to other renderers.
|
|
|
|
*/
|
2017-02-24 12:10:19 -08:00
|
|
|
data: {[kind: string]: any};
|
2017-02-16 13:55:55 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Creates and initializes a custom renderer that implements the `Renderer2` base class.
|
|
|
|
*
|
2017-02-16 13:55:55 -08:00
|
|
|
* @experimental
|
|
|
|
*/
|
2017-03-07 16:36:12 -08:00
|
|
|
export abstract class RendererFactory2 {
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
2018-07-18 10:26:59 -07:00
|
|
|
* Creates and initializes a custom renderer for a host DOM element.
|
2018-07-02 12:06:52 -07:00
|
|
|
* @param hostElement The element to render.
|
|
|
|
* @param type The base class to implement.
|
|
|
|
* @returns The new custom renderer instance.
|
|
|
|
*/
|
2017-03-29 09:34:45 -07:00
|
|
|
abstract createRenderer(hostElement: any, type: RendererType2|null): Renderer2;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* A callback invoked when rendering has begun.
|
|
|
|
*/
|
2017-05-03 13:17:46 -07:00
|
|
|
abstract begin?(): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* A callback invoked when rendering has completed.
|
|
|
|
*/
|
2017-05-03 13:17:46 -07:00
|
|
|
abstract end?(): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Use with animations test-only mode. Notifies the test when rendering has completed.
|
|
|
|
* @returns The asynchronous result of the developer-defined function.
|
|
|
|
*/
|
2017-05-12 17:32:51 -04:00
|
|
|
abstract whenRenderingDone?(): Promise<any>;
|
2017-02-16 13:55:55 -08:00
|
|
|
}
|
|
|
|
|
2017-03-13 09:45:04 -07:00
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Flags for renderer-specific style modifiers.
|
2017-03-13 09:45:04 -07:00
|
|
|
* @experimental
|
|
|
|
*/
|
|
|
|
export enum RendererStyleFlags2 {
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Marks a style as important.
|
|
|
|
*/
|
2017-03-13 09:45:04 -07:00
|
|
|
Important = 1 << 0,
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Marks a style as using dash case naming (this-is-dash-case).
|
|
|
|
*/
|
2017-03-13 09:45:04 -07:00
|
|
|
DashCase = 1 << 1
|
|
|
|
}
|
|
|
|
|
2017-02-14 21:03:18 -08:00
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Extend this base class to implement custom rendering. By default, Angular
|
|
|
|
* renders a template into DOM. You can use custom rendering to intercept
|
|
|
|
* rendering calls, or to render to something other than DOM.
|
|
|
|
*
|
|
|
|
* Create your custom renderer using `RendererFactory2`.
|
|
|
|
*
|
2018-07-18 10:26:59 -07:00
|
|
|
* Use a custom renderer to bypass Angular's templating and
|
|
|
|
* make custom UI changes that can't be expressed declaratively.
|
2018-07-02 12:06:52 -07:00
|
|
|
* For example if you need to set a property or an attribute whose name is
|
2018-07-18 10:26:59 -07:00
|
|
|
* not statically known, use the `setProperty()` or
|
|
|
|
* `setAttribute()` method.
|
2018-07-02 12:06:52 -07:00
|
|
|
*
|
2017-02-14 21:03:18 -08:00
|
|
|
* @experimental
|
|
|
|
*/
|
2017-03-07 16:36:12 -08:00
|
|
|
export abstract class Renderer2 {
|
2017-02-24 12:10:19 -08:00
|
|
|
/**
|
2018-07-18 10:26:59 -07:00
|
|
|
* Use to store arbitrary developer-defined data on a renderer instance,
|
2018-07-02 12:06:52 -07:00
|
|
|
* as an object containing key-value pairs.
|
2017-02-24 12:10:19 -08:00
|
|
|
* This is useful for renderers that delegate to other renderers.
|
|
|
|
*/
|
2017-09-28 13:36:56 -07:00
|
|
|
abstract get data(): {[key: string]: any};
|
2017-02-24 12:10:19 -08:00
|
|
|
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to destroy the renderer or the host element.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
abstract destroy(): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to create an instance of the host element.
|
|
|
|
* @param name An identifying name for the new element, unique within the namespace.
|
|
|
|
* @param namespace The namespace for the new element.
|
|
|
|
* @returns The new element.
|
|
|
|
*/
|
2017-03-29 09:34:45 -07:00
|
|
|
abstract createElement(name: string, namespace?: string|null): any;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to add a comment to the DOM of the host element.
|
|
|
|
* @param value The comment text.
|
|
|
|
* @returns The modified element.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
abstract createComment(value: string): any;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to add text to the DOM of the host element.
|
|
|
|
* @param value The text string.
|
|
|
|
* @returns The modified element.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
abstract createText(value: string): any;
|
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* If null or undefined, the view engine won't call it.
|
2017-02-16 13:55:55 -08:00
|
|
|
* This is used as a performance optimization for production mode.
|
|
|
|
*/
|
2018-06-18 16:38:33 -07:00
|
|
|
// TODO(issue/24571): remove '!'.
|
|
|
|
destroyNode !: ((node: any) => void) | null;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Appends a child to a given parent node in the host element DOM.
|
|
|
|
* @param parent The parent node.
|
|
|
|
* @param newChild The new child node.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract appendChild(parent: any, newChild: any): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to insert a child node at a given position in a parent node
|
|
|
|
* in the host element DOM.
|
|
|
|
* @param parent The parent node.
|
|
|
|
* @param newChild The new child nodes.
|
|
|
|
* @param refChild The existing child node that should precede the new node.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract insertBefore(parent: any, newChild: any, refChild: any): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to remove a child node from the host element's DOM.
|
|
|
|
* @param parent The parent node.
|
|
|
|
* @param oldChild The child node to remove.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract removeChild(parent: any, oldChild: any): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
2018-07-18 10:26:59 -07:00
|
|
|
* Implement this callback to prepare an element to be bootstrapped
|
|
|
|
* as a root element, and return the element instance.
|
2018-07-02 12:06:52 -07:00
|
|
|
* @param selectorOrNode The DOM element.
|
|
|
|
* @returns The root element.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
abstract selectRootElement(selectorOrNode: string|any): any;
|
2017-02-14 21:03:18 -08:00
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Implement this callback to get the parent of a given node
|
|
|
|
* in the host element's DOM.
|
|
|
|
* @param node The child node to query.
|
|
|
|
* @returns The parent node, or null if there is no parent.
|
|
|
|
* For WebWorkers, always returns true.
|
|
|
|
* This is because the check is synchronous,
|
|
|
|
* and the caller can't rely on checking for null.
|
2017-02-14 21:03:18 -08:00
|
|
|
*/
|
|
|
|
abstract parentNode(node: any): any;
|
|
|
|
/**
|
2018-07-02 12:06:52 -07:00
|
|
|
* Implement this callback to get the next sibling node of a given node
|
|
|
|
* in the host element's DOM.
|
|
|
|
* @returns The sibling node, or null if there is no sibling.
|
|
|
|
* For WebWorkers, always returns a value.
|
|
|
|
* This is because the check is synchronous,
|
|
|
|
* and the caller can't rely on checking for null.
|
2017-02-14 21:03:18 -08:00
|
|
|
*/
|
|
|
|
abstract nextSibling(node: any): any;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to set an attribute value for an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param name The attribute name.
|
|
|
|
* @param value The new value.
|
|
|
|
* @param namespace The namespace.
|
|
|
|
*/
|
2017-03-29 09:34:45 -07:00
|
|
|
abstract setAttribute(el: any, name: string, value: string, namespace?: string|null): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to remove an attribute from an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param name The attribute name.
|
|
|
|
* @param namespace The namespace.
|
|
|
|
*/
|
2017-03-29 09:34:45 -07:00
|
|
|
abstract removeAttribute(el: any, name: string, namespace?: string|null): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
/**
|
|
|
|
* Implement this callback to add a class to an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param name The class name.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract addClass(el: any, name: string): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to remove a class from an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param name The class name.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract removeClass(el: any, name: string): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to set a CSS style for an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param style The name of the style.
|
|
|
|
* @param value The new value.
|
|
|
|
* @param flags Flags for style variations. No flags are set by default.
|
|
|
|
*/
|
2017-03-13 09:45:04 -07:00
|
|
|
abstract setStyle(el: any, style: string, value: any, flags?: RendererStyleFlags2): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to remove the value from a CSS style for an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param style The name of the style.
|
|
|
|
* @param flags Flags for style variations to remove, if set. ???
|
|
|
|
*/
|
2017-03-13 09:45:04 -07:00
|
|
|
abstract removeStyle(el: any, style: string, flags?: RendererStyleFlags2): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to set the value of a property of an element in the DOM.
|
|
|
|
* @param el The element.
|
|
|
|
* @param name The property name.
|
|
|
|
* @param value The new value.
|
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract setProperty(el: any, name: string, value: any): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to set the value of a node in the host element.
|
|
|
|
* @param node The node.
|
|
|
|
* @param value The new value.
|
|
|
|
*/
|
2017-02-16 13:55:55 -08:00
|
|
|
abstract setValue(node: any, value: string): void;
|
2018-07-02 12:06:52 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implement this callback to start an event listener.
|
|
|
|
* @param target The context in which to listen for events. Can be
|
|
|
|
* the entire window or document, the body of the document, or a specific
|
|
|
|
* DOM element.
|
|
|
|
* @param eventName The event to listen for.
|
|
|
|
* @param callback A handler function to invoke when the event occurs.
|
2018-07-18 10:26:59 -07:00
|
|
|
* @returns An "unlisten" function for disposing of this handler.
|
2018-07-02 12:06:52 -07:00
|
|
|
*/
|
2017-02-14 21:03:18 -08:00
|
|
|
abstract listen(
|
|
|
|
target: 'window'|'document'|'body'|any, eventName: string,
|
2017-03-07 16:36:12 -08:00
|
|
|
callback: (event: any) => boolean | void): () => void;
|
2017-02-14 21:03:18 -08:00
|
|
|
}
|