44 lines
1.9 KiB
TypeScript
44 lines
1.9 KiB
TypeScript
import { type MenuItemProps, type MenuProps } from '@mantine/core';
|
|
import { type ReactNode } from 'react';
|
|
export interface MantineBetterMenuInstance {
|
|
id: string;
|
|
items?: Array<MantineBetterMenuInstanceItem>;
|
|
menuProps?: MenuProps;
|
|
renderer?: ReactNode;
|
|
visible: boolean;
|
|
x: number;
|
|
y: number;
|
|
}
|
|
export interface MantineBetterMenuInstanceItem extends Partial<MenuItemProps> {
|
|
isDivider?: boolean;
|
|
label?: string;
|
|
onClick?: (e?: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
onClickAsync?: () => Promise<void>;
|
|
renderer?: ((props: MantineBetterMenuInstanceItem & Record<string, unknown>) => ReactNode) | ReactNode;
|
|
}
|
|
export interface MenuStoreProps {
|
|
providerID?: string;
|
|
}
|
|
export type MenuStoreState = MenuStoreProps & MenuStoreStateOnly;
|
|
export interface MenuStoreStateOnly {
|
|
hide: (id: string) => void;
|
|
menus: Array<MantineBetterMenuInstance>;
|
|
setInstanceState: <K extends keyof MantineBetterMenuInstance>(instanceID: string, key: K, value: MantineBetterMenuInstance[K]) => void;
|
|
setState: <K extends keyof MenuStoreState>(key: K, value: Partial<MenuStoreState[K]>) => void;
|
|
show: (id: string, options?: Partial<MantineBetterMenuInstance>) => void;
|
|
}
|
|
declare const MantineBetterMenusStoreProvider: (props: {
|
|
children: ReactNode;
|
|
} & {
|
|
firstSyncProps?: string[];
|
|
persist?: import("zustand/middleware").PersistOptions<Partial<MenuStoreProps & MenuStoreStateOnly>, Partial<MenuStoreProps & MenuStoreStateOnly>, unknown> | undefined;
|
|
} & MenuStoreProps) => React.ReactNode, useMantineBetterMenus: {
|
|
(): {
|
|
$sync?: ((props: MenuStoreProps) => void) | undefined;
|
|
} & MenuStoreProps & MenuStoreStateOnly;
|
|
<U>(selector: (state: {
|
|
$sync?: ((props: MenuStoreProps) => void) | undefined;
|
|
} & MenuStoreProps & MenuStoreStateOnly) => U, equalityFn?: ((a: U, b: U) => boolean) | undefined): U;
|
|
};
|
|
export { MantineBetterMenusStoreProvider, useMantineBetterMenus };
|