UNPKG

@saleae/react-contexify

Version:

Add contextmenu to your react component with ease

84 lines (83 loc) 2.56 kB
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 };