@snowball-tech/fractal
Version:
Fractal's (Snowball's design system) React component library based on RadixUI and PandaCSS
100 lines (97 loc) • 2.99 kB
TypeScript
import { AllHTMLAttributes, ReactNode, CSSProperties } from 'react';
import { PaperProps } from '../Paper/Paper.types.js';
import { PopoverProps } from '../Popover/Popover.types.js';
import { Orientations } from './Menu.constants.js';
import '../constants-QFINMz1u.js';
import '../Paper/Paper.constants.js';
import '../Typography/Typography.constants.js';
import '@radix-ui/react-popover';
type CombinedRefs = {
container: HTMLDivElement | null;
menu: HTMLDivElement | null;
};
type SubMenuCombinedRefs = {
content: HTMLDivElement | null;
trigger: HTMLElement | null;
};
interface MenuProps extends AllHTMLAttributes<HTMLDivElement> {
children: ReactNode;
condensed?: boolean;
disabled?: boolean;
elevation?: PaperProps['elevation'];
embedded?: boolean;
fullWidth?: boolean;
menu?: {
className?: string;
style?: CSSProperties;
};
orientation?: `${Orientations}`;
rainbow?: boolean;
}
interface MenuItemProps extends AllHTMLAttributes<HTMLDivElement> {
active?: boolean;
children?: ReactNode;
condensed?: boolean;
disabled?: boolean;
href?: string;
icon?: ReactNode;
label?: string;
rainbow?: boolean;
target?: HTMLAnchorElement['target'];
onActivate?: () => void;
}
interface MenuItemGroupProps extends AllHTMLAttributes<HTMLDivElement> {
children: ReactNode;
label: string;
condensed?: boolean;
disabled?: boolean;
rainbow?: boolean;
}
type MenuItemSeparatorProps = AllHTMLAttributes<HTMLDivElement>;
interface SubMenuProps extends Omit<AllHTMLAttributes<HTMLDivElement>, 'content' | 'popover'> {
children: ReactNode;
active?: boolean;
align?: PopoverProps['align'];
condensed?: boolean;
condensedItems?: boolean;
defaultOpen?: boolean;
disabled?: boolean;
elevation?: PaperProps['elevation'];
icon?: ReactNode;
open?: boolean;
popover?: boolean;
popup?: {
className?: string;
content?: {
className?: string;
positionner?: {
className?: string;
style?: CSSProperties;
};
style?: CSSProperties;
wrapper?: {
className?: string;
style?: CSSProperties;
};
};
style?: CSSProperties;
trigger?: {
className?: string;
style?: CSSProperties;
wrapper?: {
className?: string;
style?: CSSProperties;
};
};
};
rainbow?: boolean;
side?: PopoverProps['side'];
triggerOnHover?: boolean;
withIndicator?: boolean;
withScroll?: boolean;
onClose?: () => void;
onInteractOutside?: PopoverProps['onInteractOutside'];
onOpen?: () => void;
onSubMenuOpenChange?: PopoverProps['onOpenChange'];
}
export type { CombinedRefs, MenuItemGroupProps, MenuItemProps, MenuItemSeparatorProps, MenuProps, SubMenuCombinedRefs, SubMenuProps };