// Type definitions for agate/PopupMenu

import * as React from "react";
import { SlottableProps as ui_Slottable_SlottableProps } from "@enact/ui/Slottable";
import { SkinnableProps as agate_Skinnable_SkinnableProps } from "@enact/agate/Skinnable";

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;

export interface PopupMenuBaseProps {}
/**
 * The base popup menu component.
 */

export class PopupMenuBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, PopupMenuBaseProps>
> {}

export interface PopupMenuDecoratorProps
  extends Merge<ui_Slottable_SlottableProps, agate_Skinnable_SkinnableProps> {}
export function PopupMenuDecorator<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & PopupMenuDecoratorProps>;

export interface PopupMenuProps
  extends Merge<PopupMenuBaseProps, PopupMenuDecoratorProps> {}
/**
 * A stateful component that renders a popup menu.
 * 
 * Usage:
 * ```
<PopupMenu open title="Title">
  Hello!
</PopupMenu>
```
 */

export class PopupMenu extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, PopupMenuProps>
> {}

export default PopupMenu;
