jswm
Version:
Virtual Window for React
172 lines (171 loc) • 4.03 kB
TypeScript
import io from 'socket.io-client';
import React, { ReactNode, Component } from "react";
export declare enum WindowStyle {
TITLE = 1,
MAX = 2,
MIN = 4,
CLOSE = 8,
FRAME = 16,
RESIZE = 32
}
export interface WindowProps {
id?: string | null;
x?: number | null;
y?: number | null;
width?: number;
height?: number;
zoomSensitivity?: number;
minScale?: number;
maxScale?: number;
moveable?: boolean;
workspace?: boolean;
borderSize?: number;
titleSize?: number;
title?: string;
children?: ReactNode | null;
active?: boolean;
overlapped?: boolean;
windowStyle?: number;
windowState?: WindowState;
onUpdate?: ((status: WindowInfo) => void) | null;
onClose?: (() => void) | null;
clientStyle?: React.CSSProperties;
socket?: typeof io.Socket | null;
}
declare type NonNullableType<T, K extends keyof T = keyof T> = {
[P in K]-?: T[P];
};
export interface WindowInfo extends NonNullableType<WindowProps> {
realX: number;
realY: number;
realWidth: number;
realHeight: number;
realWindowState: WindowState;
clientWidth: number;
clientHeight: number;
}
export declare enum WindowState {
NORMAL = 1,
MAX = 2,
MIN = 3,
HIDE = 4
}
interface ZoomTransformState {
originX: number;
originY: number;
translateX: number;
translateY: number;
scale: number;
}
interface State {
active: boolean;
overlapped: boolean;
titlePrmisson: number;
titleSize: number;
borderSize: number;
x: number | null;
y: number | null;
width: number;
height: number;
transformation: ZoomTransformState;
clientWidth: number;
clientHeight: number;
windowState: number;
oldEnumState: number;
boxEnumState: number;
}
/**
*FrameWindow of React
*
* @export
* @class JswfWindow
* @extends {Component<WindowProps, State>}
*/
export declare class JSWindow extends Component<WindowProps, State> {
static defaultProps: WindowProps;
private rootRef;
private titleRef;
private clientRef;
private zoomRef;
private resizeObserver?;
private resizeHandle?;
private moveHandle?;
private moveParams?;
private updateInfoHandle?;
private windowInfo;
private windowInfoKeep;
private socketSend;
flagWindowState: boolean;
/**
*Creates an instance of JswfWindow.
* @param {WindowProps} props
* @memberof JswfWindow
*/
constructor(props: WindowProps);
shouldComponentUpdate(props: WindowProps, state: State): boolean;
/**
*React componentDidMount
*
* @memberof JswfWindow
*/
componentDidMount(): void;
/**
*React componentWillUnmount
*
* @memberof JswfWindow
*/
componentWillUnmount(): void;
componentDidUpdate(): void;
/**
* React render
*
* @returns
* @memberof JswfWindow
*/
render(): JSX.Element;
/**
*ウインドウ情報を返す
*
* @returns
* @memberof JswfWindow
*/
getWindowInfo(): WindowInfo;
/**
*ウインドウの状態を変更する
*
* @param {(WindowState | undefined)} enumState
* WindowState.NORMAL
* WindowState.MAX
* WindowState.MIN
* WindowState.HIDE
* @memberof JswfWindow
*/
setWindowState(state: WindowState | undefined): void;
_setWindowState(state: WindowState | undefined): void;
/**
*ウインドウをフォアグラウンドにする
*
* @memberof JswfWindow
*/
foreground(): void;
protected update(): void;
private changeState;
private min;
private max;
private normal;
private hide;
private onMouseDown;
private onFrame;
private onActive;
private onParentSize;
private getParentScale;
private socketSendNow;
private onMove;
private getTranslate;
private getScale;
private panBy;
private zoom;
private onWheel;
private onMouseMove;
}
export {};