UNPKG

5.95 kBTypeScriptView Raw
1/** @jsx jsx */
2import { ReactElement, ReactNode, Ref } from 'react';
3import { jsx } from '@emotion/react';
4import { MenuPlacement, MenuPosition, CommonProps, GroupBase, CommonPropsAndClassName, CoercedMenuPlacement, CSSObjectWithLabel } from '../types';
5interface CalculatedMenuPlacementAndHeight {
6 placement: CoercedMenuPlacement;
7 maxHeight: number;
8}
9interface PlacementArgs {
10 maxHeight: number;
11 menuEl: HTMLDivElement | null;
12 minHeight: number;
13 placement: MenuPlacement;
14 shouldScroll: boolean;
15 isFixedPosition: boolean;
16 controlHeight: number;
17}
18export declare function getMenuPlacement({ maxHeight: preferredMaxHeight, menuEl, minHeight, placement: preferredPlacement, shouldScroll, isFixedPosition, controlHeight, }: PlacementArgs): CalculatedMenuPlacementAndHeight;
19export interface MenuPlacementProps {
20 /** Set the minimum height of the menu. */
21 minMenuHeight: number;
22 /** Set the maximum height of the menu. */
23 maxMenuHeight: number;
24 /** Set whether the menu should be at the top, at the bottom. The auto options sets it to bottom. */
25 menuPlacement: MenuPlacement;
26 /** The CSS position value of the menu, when "fixed" extra layout management is required */
27 menuPosition: MenuPosition;
28 /** Set whether the page should scroll to show the menu. */
29 menuShouldScrollIntoView: boolean;
30}
31export interface MenuProps<Option = unknown, IsMulti extends boolean = boolean, Group extends GroupBase<Option> = GroupBase<Option>> extends CommonPropsAndClassName<Option, IsMulti, Group>, MenuPlacementProps {
32 /** Reference to the internal element, consumed by the MenuPlacer component */
33 innerRef: Ref<HTMLDivElement>;
34 innerProps: JSX.IntrinsicElements['div'];
35 isLoading: boolean;
36 placement: CoercedMenuPlacement;
37 /** The children to be rendered. */
38 children: ReactNode;
39}
40interface PlacerProps {
41 placement: CoercedMenuPlacement;
42 maxHeight: number;
43}
44interface ChildrenProps {
45 ref: Ref<HTMLDivElement>;
46 placerProps: PlacerProps;
47}
48export interface MenuPlacerProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>> extends CommonProps<Option, IsMulti, Group>, MenuPlacementProps {
49 /** The children to be rendered. */
50 children: (childrenProps: ChildrenProps) => ReactElement;
51}
52export declare const menuCSS: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ placement, theme: { borderRadius, spacing, colors }, }: MenuProps<Option, IsMulti, Group>, unstyled: boolean) => CSSObjectWithLabel;
53export declare const MenuPlacer: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(props: MenuPlacerProps<Option, IsMulti, Group>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
54declare const Menu: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(props: MenuProps<Option, IsMulti, Group>) => jsx.JSX.Element;
55export default Menu;
56export interface MenuListProps<Option = unknown, IsMulti extends boolean = boolean, Group extends GroupBase<Option> = GroupBase<Option>> extends CommonPropsAndClassName<Option, IsMulti, Group> {
57 /** Set the max height of the Menu component */
58 maxHeight: number;
59 /** The children to be rendered. */
60 children: ReactNode;
61 /** Inner ref to DOM ReactNode */
62 innerRef: Ref<HTMLDivElement>;
63 /** The currently focused option */
64 focusedOption: Option;
65 /** Props to be passed to the menu-list wrapper. */
66 innerProps: JSX.IntrinsicElements['div'];
67}
68export declare const menuListCSS: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ maxHeight, theme: { spacing: { baseUnit }, }, }: MenuListProps<Option, IsMulti, Group>, unstyled: boolean) => CSSObjectWithLabel;
69export declare const MenuList: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(props: MenuListProps<Option, IsMulti, Group>) => jsx.JSX.Element;
70export declare const noOptionsMessageCSS: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ theme: { spacing: { baseUnit }, colors, }, }: NoticeProps<Option, IsMulti, Group>, unstyled: boolean) => CSSObjectWithLabel;
71export declare const loadingMessageCSS: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ theme: { spacing: { baseUnit }, colors, }, }: NoticeProps<Option, IsMulti, Group>, unstyled: boolean) => CSSObjectWithLabel;
72export interface NoticeProps<Option = unknown, IsMulti extends boolean = boolean, Group extends GroupBase<Option> = GroupBase<Option>> extends CommonPropsAndClassName<Option, IsMulti, Group> {
73 /** The children to be rendered. */
74 children: ReactNode;
75 /** Props to be passed on to the wrapper. */
76 innerProps: JSX.IntrinsicElements['div'];
77}
78export declare const NoOptionsMessage: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ children, innerProps, ...restProps }: NoticeProps<Option, IsMulti, Group>) => jsx.JSX.Element;
79export declare const LoadingMessage: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({ children, innerProps, ...restProps }: NoticeProps<Option, IsMulti, Group>) => jsx.JSX.Element;
80export interface MenuPortalProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>> extends CommonPropsAndClassName<Option, IsMulti, Group> {
81 appendTo: HTMLElement | undefined;
82 children: ReactNode;
83 controlElement: HTMLDivElement | null;
84 innerProps: JSX.IntrinsicElements['div'];
85 menuPlacement: MenuPlacement;
86 menuPosition: MenuPosition;
87}
88export interface PortalStyleArgs {
89 offset: number;
90 position: MenuPosition;
91 rect: {
92 left: number;
93 width: number;
94 };
95}
96export declare const menuPortalCSS: ({ rect, offset, position, }: PortalStyleArgs) => CSSObjectWithLabel;
97export declare const MenuPortal: <Option, IsMulti extends boolean, Group extends GroupBase<Option>>(props: MenuPortalProps<Option, IsMulti, Group>) => jsx.JSX.Element | null;