@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
283 lines (282 loc) • 16 kB
TypeScript
import { HTMLProps, PropGetter } from "../../core/components/index.types.js";
import "../../core/index.js";
import { Descendant, DescendantProps, Descendants } from "../../hooks/use-descendants/index.js";
import { UseDisclosureProps } from "../../hooks/use-disclosure/use-disclosure.js";
import "../../index.js";
import * as react807 from "react";
import { RefObject } from "react";
//#region src/components/menu/use-menu.d.ts
type SubMenuDirection = "end" | "start";
interface MenuDescendantProps {
id: string;
}
type MenuDescendant = Descendant<HTMLDivElement, MenuDescendantProps>;
declare const MenuDescendantsContext: react807.Context<{
active: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined, options?: FocusOptions) => void;
count: () => number;
destroy: () => void;
enabledCount: () => number;
enabledFirstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledIndexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
enabledLastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledNextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledPrevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValue: (index: number) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValues: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
firstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
indexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
lastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
nextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
prevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
register: (props?: DescendantProps<HTMLDivElement, MenuDescendantProps> | undefined) => react807.RefCallback<HTMLDivElement>;
unregister: (node?: HTMLDivElement | null | undefined) => void;
value: (indexOrNode: number | HTMLDivElement | null) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
values: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
}>, useMenuDescendant: (props?: DescendantProps<HTMLDivElement, MenuDescendantProps> | undefined) => {
descendants: {
active: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined, options?: FocusOptions) => void;
count: () => number;
destroy: () => void;
enabledCount: () => number;
enabledFirstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledIndexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
enabledLastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledNextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledPrevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValue: (index: number) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValues: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
firstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
indexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
lastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
nextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
prevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
register: (props?: DescendantProps<HTMLDivElement, MenuDescendantProps> | undefined) => react807.RefCallback<HTMLDivElement>;
unregister: (node?: HTMLDivElement | null | undefined) => void;
value: (indexOrNode: number | HTMLDivElement | null) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
values: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
};
register: react807.RefCallback<HTMLDivElement>;
}, useMenuDescendants: () => {
active: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined, options?: FocusOptions) => void;
count: () => number;
destroy: () => void;
enabledCount: () => number;
enabledFirstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledIndexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
enabledLastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledNextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledPrevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValue: (index: number) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValues: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
firstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
indexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
lastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
nextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
prevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
register: (props?: DescendantProps<HTMLDivElement, MenuDescendantProps> | undefined) => react807.RefCallback<HTMLDivElement>;
unregister: (node?: HTMLDivElement | null | undefined) => void;
value: (indexOrNode: number | HTMLDivElement | null) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
values: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
};
interface MenuContext extends Pick<UseMenuReturn, "onActiveDescendant" | "onClose" | "onCloseSubMenu" | "onOpen" | "onSelect" | "subMenu" | "subMenuDirection"> {}
declare const MenuContext: react807.Context<MenuContext>, useMenuContext: () => MenuContext;
interface MenuGroupContext extends Pick<UseMenuGroupReturn, "getLabelProps"> {}
declare const MenuGroupContext: react807.Context<MenuGroupContext>, useMenuGroupContext: () => MenuGroupContext;
interface MainMenuContext {
descendants: Descendants<HTMLDivElement, MenuDescendantProps>;
onActiveDescendant: (descendant?: MenuDescendant) => void;
onCloseRef: RefObject<() => void>;
onSelect: (value?: string, closeOnSelect?: boolean) => void;
closeOnSelect?: boolean;
}
declare const MainMenuContext: react807.Context<MainMenuContext | undefined>, useMainMenuContext: () => MainMenuContext | undefined;
interface MenuOptionGroupContext {
type: "checkbox" | "radio";
value: string | string[];
onChange?: (value: string) => void;
}
declare const MenuOptionGroupContext: react807.Context<MenuOptionGroupContext>, useMenuOptionGroupContext: () => MenuOptionGroupContext;
interface UseMenuProps extends Omit<UseDisclosureProps, "timing"> {
/**
* If `true`, the menu item will be closed when selected.
*
* @default true
*/
closeOnSelect?: boolean;
/**
* If `true`, the menu will be disabled.
*
* @default false
*/
disabled?: boolean;
/**
* The direction of the sub menu.
*
* @default 'end'
*/
subMenuDirection?: SubMenuDirection;
/**
* Callback invoked when a menu item is selected.
*/
onSelect?: (value?: string) => void;
}
declare const useMenu: ({
closeOnSelect,
defaultOpen,
disabled,
open: openProp,
subMenuDirection,
onClose: onCloseProp,
onOpen: onOpenProp,
onSelect: onSelectProp
}?: UseMenuProps) => {
closeOnSelect: boolean;
descendants: {
active: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined, options?: FocusOptions) => void;
count: () => number;
destroy: () => void;
enabledCount: () => number;
enabledFirstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledIndexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
enabledLastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledNextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledPrevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValue: (index: number) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
enabledValues: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
firstValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
indexOf: (target?: HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null | undefined) => number;
lastValue: () => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
nextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
prevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, MenuDescendantProps> | null, loop?: boolean) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
register: (props?: DescendantProps<HTMLDivElement, MenuDescendantProps> | undefined) => react807.RefCallback<HTMLDivElement>;
unregister: (node?: HTMLDivElement | null | undefined) => void;
value: (indexOrNode: number | HTMLDivElement | null) => Descendant<HTMLDivElement, MenuDescendantProps> | undefined;
values: () => Descendant<HTMLDivElement, MenuDescendantProps>[];
};
open: boolean;
subMenu: boolean;
subMenuDirection: SubMenuDirection;
updateRef: RefObject<() => void>;
getContentProps: PropGetter<"div", undefined, undefined>;
getContextTriggerProps: PropGetter<"div", undefined, undefined>;
getSeparatorProps: PropGetter<"div", undefined, undefined>;
getTriggerProps: PropGetter<"div", undefined, undefined>;
onActiveDescendant: (descendant?: MenuDescendant, options?: FocusOptions) => void;
onClose: () => void | Promise<void>;
onCloseRef: RefObject<() => void>;
onCloseSubMenu: () => void;
onOpen: () => void | Promise<void>;
onSelect: (value?: string, closeOnSelectProp?: boolean) => void;
};
type UseMenuReturn = ReturnType<typeof useMenu>;
interface UseSubMenuProps extends Omit<Required<UseDisclosureProps>, "defaultOpen" | "timing"> {
descendants: Descendants<HTMLDivElement, MenuDescendantProps>;
onActiveDescendant: (descendant?: MenuDescendant) => void;
disabled?: boolean;
subMenuDirection?: SubMenuDirection;
}
declare const useSubMenu: ({
descendants,
disabled,
open,
subMenuDirection,
onActiveDescendant,
onClose,
onOpen
}: UseSubMenuProps) => {
mainCloseOnSelect: boolean | undefined;
subMenu: boolean;
getSubMenuProps: PropGetter<"div", undefined, undefined>;
onMainSelect: ((value?: string, closeOnSelect?: boolean) => void) | undefined;
};
type UseSubMenuReturn = ReturnType<typeof useSubMenu>;
interface UseMenuGroupProps extends HTMLProps {}
declare const useMenuGroup: ({
"aria-labelledby": ariaLabelledbyProp,
...rest
}: UseMenuGroupProps) => {
getGroupProps: PropGetter<"div", undefined, undefined>;
getLabelProps: PropGetter<"span", undefined, undefined>;
};
type UseMenuGroupReturn = ReturnType<typeof useMenuGroup>;
interface UseMenuItemProps extends HTMLProps {
/**
* If `true`, the menu item will be closed when selected.
*/
closeOnSelect?: boolean;
/**
* If `true`, the menu item will be disabled.
*
* @default false
*/
disabled?: boolean;
/**
* The value of the menu item.
*/
value?: string;
}
declare const useMenuItem: ({
id,
"aria-disabled": ariaDisabled,
"data-disabled": dataDisabled,
"data-trigger": dataTrigger,
closeOnSelect,
disabled,
value,
...rest
}: UseMenuItemProps) => {
subMenuTrigger: boolean;
getItemProps: PropGetter<"div", undefined, undefined>;
};
type UseMenuItemReturn = ReturnType<typeof useMenuItem>;
type MenuOptionGroupType = "checkbox" | "radio";
type MenuOptionGroupValue<Y extends MenuOptionGroupType> = Y extends "checkbox" ? string[] : string;
interface UseMenuOptionGroupProps<Y extends MenuOptionGroupType = "checkbox", M extends MenuOptionGroupValue<Y> = MenuOptionGroupValue<Y>> {
/**
* The type of the menu option group.
*/
type?: Y;
/**
* The initial value of the menu item group.
*/
defaultValue?: M;
/**
* The value of the menu item group.
*/
value?: M;
/**
* The callback fired when any children checkbox is checked or unchecked.
*/
onChange?: (value: M) => void;
}
declare const useMenuOptionGroup: <Y extends "checkbox" | "radio" = "checkbox", M extends (Y extends "checkbox" ? string[] : string) = (Y extends "checkbox" ? string[] : string)>({
type,
defaultValue,
value: valueProp,
onChange: onChangeProp
}: UseMenuOptionGroupProps<Y, M>) => {
type: Y;
value: M;
onChange: (selectedValue: string) => void;
};
type UseMenuOptionGroupReturn = ReturnType<typeof useMenuOptionGroup>;
interface UseMenuOptionItemProps extends UseMenuItemProps {
/**
* The value of the menu option item.
*/
value: string;
}
declare const useMenuOptionItem: ({
disabled,
value,
...rest
}: UseMenuOptionItemProps) => {
type: "checkbox" | "radio";
selected: boolean;
getIndicatorProps: PropGetter<"div", undefined, undefined>;
getOptionItemProps: PropGetter<"div", undefined, undefined>;
};
type UseMenuOptionItemReturn = ReturnType<typeof useMenuOptionItem>;
//#endregion
export { MainMenuContext, MenuContext, MenuDescendantsContext, MenuGroupContext, MenuOptionGroupContext, MenuOptionGroupType, MenuOptionGroupValue, UseMenuGroupProps, UseMenuGroupReturn, UseMenuItemProps, UseMenuItemReturn, UseMenuOptionGroupProps, UseMenuOptionGroupReturn, UseMenuOptionItemProps, UseMenuOptionItemReturn, UseMenuProps, UseMenuReturn, UseSubMenuProps, UseSubMenuReturn, useMainMenuContext, useMenu, useMenuContext, useMenuDescendant, useMenuDescendants, useMenuGroup, useMenuGroupContext, useMenuItem, useMenuOptionGroup, useMenuOptionGroupContext, useMenuOptionItem, useSubMenu };
//# sourceMappingURL=use-menu.d.ts.map