109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import type { ComponentBounds, Hookable } from './hooks.js';
 | |
| import type { Context } from './context.js';
 | |
| import type { ComponentInstance, ComponentState, StateBase } from './component.js';
 | |
| import type { App } from './app.js';
 | |
| import type { ID } from './util.js';
 | |
| export interface DevtoolsPluginApi<TSettings> {
 | |
|     on: Hookable<Context>;
 | |
|     notifyComponentUpdate: (instance?: ComponentInstance) => void;
 | |
|     addTimelineLayer: (options: TimelineLayerOptions) => void;
 | |
|     addTimelineEvent: (options: TimelineEventOptions) => void;
 | |
|     addInspector: (options: CustomInspectorOptions) => void;
 | |
|     sendInspectorTree: (inspectorId: string) => void;
 | |
|     sendInspectorState: (inspectorId: string) => void;
 | |
|     selectInspectorNode: (inspectorId: string, nodeId: string) => void;
 | |
|     getComponentBounds: (instance: ComponentInstance) => Promise<ComponentBounds>;
 | |
|     getComponentName: (instance: ComponentInstance) => Promise<string>;
 | |
|     getComponentInstances: (app: App) => Promise<ComponentInstance[]>;
 | |
|     highlightElement: (instance: ComponentInstance) => void;
 | |
|     unhighlightElement: () => void;
 | |
|     getSettings: (pluginId?: string) => TSettings;
 | |
|     now: () => number;
 | |
|     /**
 | |
|      * @private
 | |
|      */
 | |
|     setSettings: (values: TSettings) => void;
 | |
| }
 | |
| export interface AppRecord {
 | |
|     id: string;
 | |
|     name: string;
 | |
|     instanceMap: Map<string, ComponentInstance>;
 | |
|     rootInstance: ComponentInstance;
 | |
| }
 | |
| export interface TimelineLayerOptions<TData = any, TMeta = any> {
 | |
|     id: string;
 | |
|     label: string;
 | |
|     color: number;
 | |
|     skipScreenshots?: boolean;
 | |
|     groupsOnly?: boolean;
 | |
|     ignoreNoDurationGroups?: boolean;
 | |
|     screenshotOverlayRender?: (event: TimelineEvent<TData, TMeta> & ScreenshotOverlayEvent, ctx: ScreenshotOverlayRenderContext) => ScreenshotOverlayRenderResult | Promise<ScreenshotOverlayRenderResult>;
 | |
| }
 | |
| export interface ScreenshotOverlayEvent {
 | |
|     layerId: string;
 | |
|     renderMeta: any;
 | |
| }
 | |
| export interface ScreenshotOverlayRenderContext<TData = any, TMeta = any> {
 | |
|     screenshot: ScreenshotData;
 | |
|     events: (TimelineEvent<TData, TMeta> & ScreenshotOverlayEvent)[];
 | |
|     index: number;
 | |
| }
 | |
| export type ScreenshotOverlayRenderResult = HTMLElement | string | false;
 | |
| export interface ScreenshotData {
 | |
|     time: number;
 | |
| }
 | |
| export interface TimelineEventOptions {
 | |
|     layerId: string;
 | |
|     event: TimelineEvent;
 | |
|     all?: boolean;
 | |
| }
 | |
| export interface TimelineEvent<TData = any, TMeta = any> {
 | |
|     time: number;
 | |
|     data: TData;
 | |
|     logType?: 'default' | 'warning' | 'error';
 | |
|     meta?: TMeta;
 | |
|     groupId?: ID;
 | |
|     title?: string;
 | |
|     subtitle?: string;
 | |
| }
 | |
| export interface TimelineMarkerOptions {
 | |
|     id: string;
 | |
|     time: number;
 | |
|     color: number;
 | |
|     label: string;
 | |
|     all?: boolean;
 | |
| }
 | |
| export interface CustomInspectorOptions {
 | |
|     id: string;
 | |
|     label: string;
 | |
|     icon?: string;
 | |
|     treeFilterPlaceholder?: string;
 | |
|     stateFilterPlaceholder?: string;
 | |
|     noSelectionText?: string;
 | |
|     actions?: {
 | |
|         icon: string;
 | |
|         tooltip?: string;
 | |
|         action: () => void | Promise<void>;
 | |
|     }[];
 | |
|     nodeActions?: {
 | |
|         icon: string;
 | |
|         tooltip?: string;
 | |
|         action: (nodeId: string) => void | Promise<void>;
 | |
|     }[];
 | |
| }
 | |
| export interface CustomInspectorNode {
 | |
|     id: string;
 | |
|     label: string;
 | |
|     children?: CustomInspectorNode[];
 | |
|     tags?: InspectorNodeTag[];
 | |
| }
 | |
| export interface InspectorNodeTag {
 | |
|     label: string;
 | |
|     textColor: number;
 | |
|     backgroundColor: number;
 | |
|     tooltip?: string;
 | |
| }
 | |
| export interface CustomInspectorState {
 | |
|     [key: string]: (StateBase | Omit<ComponentState, 'type'>)[];
 | |
| }
 |