oranguru/src/MantineBetterMenu/Store.d.ts
2025-09-19 14:06:53 +02:00

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 };