@finos/perspective-viewer
Version:
The `<perspective-viewer>` Custom Element, frontend for Perspective.js
71 lines (70 loc) • 3.27 kB
TypeScript
import type { HTMLPerspectiveViewerPluginElement } from "./plugin";
import { PerspectiveViewerElement } from "../../dist/wasm/perspective-viewer.js";
import type React from "react";
import { ViewerConfigUpdate } from "./ts-rs/ViewerConfigUpdate.js";
import type { ViewWindow } from "@finos/perspective";
export type HTMLPerspectiveViewerElement = PerspectiveViewerElement & PerspectiveViewerElementExt & HTMLElement;
export type PerspectiveClickEventDetail = {
config: ViewerConfigUpdate;
row: Record<string, any>;
column_names: Array<string | Array<string>>;
};
export type PerspectiveSelectEventDetail = {
view_window: ViewWindow;
};
type ReactPerspectiveViewerAttributes<T> = React.HTMLAttributes<T>;
type JsxPerspectiveViewerElement = {
class?: string;
} & React.DetailedHTMLProps<ReactPerspectiveViewerAttributes<HTMLPerspectiveViewerElement>, HTMLPerspectiveViewerElement>;
declare global {
namespace JSX {
interface IntrinsicElements {
"perspective-viewer": JsxPerspectiveViewerElement;
}
}
}
declare global {
interface Document {
createElement(tagName: "perspective-viewer", options?: ElementCreationOptions): HTMLPerspectiveViewerElement;
createElement(tagName: "perspective-viewer-plugin", options?: ElementCreationOptions): HTMLPerspectiveViewerPluginElement;
querySelector<E extends Element = Element>(selectors: string): E | null;
querySelector(selectors: "perspective-viewer"): HTMLPerspectiveViewerElement | null;
}
interface CustomElementRegistry {
get(tagName: "perspective-viewer"): typeof PerspectiveViewerElement & PerspectiveViewerElementExt & typeof HTMLElement;
get(tagName: "perspective-viewer-plugin"): typeof HTMLPerspectiveViewerPluginElement;
}
}
export interface PerspectiveViewerElementExt {
/**
* Register a new plugin via its custom element name. This method is called
* automatically as a side effect of importing a plugin module, so this
* method should only typically be called by plugin authors.
*
* @category Plugin
* @param name The `name` of the custom element to register, as supplied
* to the `customElements.define(name)` method.
* @example
* ```javascript
* customElements.get("perspective-viewer").registerPlugin("my-plugin");
* ```
*/
registerPlugin(name: string): Promise<void>;
addEventListener(name: "perspective-click", cb: (e: CustomEvent) => void, options?: {
signal: AbortSignal;
}): void;
addEventListener(name: "perspective-select", cb: (e: CustomEvent) => void, options?: {
signal: AbortSignal;
}): void;
addEventListener(name: "perspective-toggle-settings", cb: (e: CustomEvent) => void, options?: {
signal: AbortSignal;
}): void;
addEventListener(name: "perspective-config-update", cb: (e: CustomEvent) => void, options?: {
signal: AbortSignal;
}): void;
removeEventListener(name: "perspective-click", cb: any): void;
removeEventListener(name: "perspective-select", cb: any): void;
removeEventListener(name: "perspective-toggle-settings", cb: any): void;
removeEventListener(name: "perspective-config-update", cb: any): void;
}
export {};