@saleae/react-contexify
Version:
Add contextmenu to your react component with ease
84 lines (83 loc) • 2.56 kB
TypeScript
import React, { Component, ReactNode } from 'react';
import PropTypes from 'prop-types';
import { TriggerEvent, StyleProps, MenuId } from '../types';
export interface MenuProps extends StyleProps {
/**
* Unique id to identify the menu. Use to Trigger the corresponding menu
*/
id: MenuId;
/**
* Any valid node that can be rendered
*/
children: ReactNode;
/**
* Theme is appended to `react-contexify__theme--${given theme}`.
*
* Built-in theme are `light` and `dark`
*/
theme?: string;
/**
* Animation is appended to `.react-contexify__will-enter--${given animation}`
*
* Built-in animations are fade, flip, pop, zoom
*/
animation?: string;
/**
* Invoked when the menu is shown.
*/
onShown?: () => void;
/**
* Invoked when the menu is hidden.
*/
onHidden?: () => void;
/**
* menu wrapper props
*/
menuWrapperProps?: Omit<React.HTMLAttributes<HTMLDivElement>, 'onMouseEnter' | 'onMouseLeave' | 'style'>;
}
interface MenuState {
x: number;
y: number;
visible: boolean;
nativeEvent: TriggerEvent;
propsFromTrigger: object;
}
declare class Menu extends Component<MenuProps, MenuState> {
static propTypes: {
id: PropTypes.Validator<MenuId>;
children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
theme: PropTypes.Requireable<string>;
animation: PropTypes.Requireable<string>;
className: PropTypes.Requireable<string>;
style: PropTypes.Requireable<object>;
menuWrapperProps: PropTypes.Requireable<object>;
};
state: {
x: number;
y: number;
visible: boolean;
nativeEvent: TriggerEvent;
propsFromTrigger: {};
onShown: null;
onHidden: null;
};
menuRef: React.RefObject<HTMLDivElement>;
unsub: (() => boolean)[];
componentDidMount(): void;
componentWillUnmount(): void;
componentDidUpdate(_: Readonly<MenuProps>, prevState: Readonly<MenuState>): void;
bindWindowEvent: () => void;
unBindWindowEvent: () => void;
onMouseEnter: () => void;
onMouseLeave: () => void;
hide: (event?: Event | undefined) => void;
handleKeyboard: (e: KeyboardEvent) => void;
setMenuPosition(): void;
getMousePosition(e: TriggerEvent): {
x: number;
y: number;
};
show: (e: TriggerEvent, props: object) => void;
render(): JSX.Element;
}
export { Menu };