@kobalte/core
Version:
Unstyled components and primitives for building accessible web apps and design systems with SolidJS.
88 lines (84 loc) • 3.02 kB
JavaScript
import { MenuCheckboxItem, MenuGroup, MenuGroupLabel, MenuIcon, MenuItem, MenuItemDescription, MenuItemIndicator, MenuItemLabel, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, useMenuRootContext, useMenuContext, MenuContent, MenuRoot } from './46NU5BYI.js';
import { SeparatorRoot } from './STGRFJHZ.js';
import { PopperArrow } from './LMWVDFW6.js';
import { __export } from './5ZKAE4VZ.js';
import { createComponent, mergeProps } from 'solid-js/web';
import { mergeDefaultProps, focusWithoutScrolling } from '@kobalte/utils';
import { splitProps, createUniqueId } from 'solid-js';
// src/dropdown-menu/index.tsx
var dropdown_menu_exports = {};
__export(dropdown_menu_exports, {
Arrow: () => PopperArrow,
CheckboxItem: () => MenuCheckboxItem,
Content: () => DropdownMenuContent,
DropdownMenu: () => DropdownMenu,
Group: () => MenuGroup,
GroupLabel: () => MenuGroupLabel,
Icon: () => MenuIcon,
Item: () => MenuItem,
ItemDescription: () => MenuItemDescription,
ItemIndicator: () => MenuItemIndicator,
ItemLabel: () => MenuItemLabel,
Portal: () => MenuPortal,
RadioGroup: () => MenuRadioGroup,
RadioItem: () => MenuRadioItem,
Root: () => DropdownMenuRoot,
Separator: () => SeparatorRoot,
Sub: () => MenuSub,
SubContent: () => MenuSubContent,
SubTrigger: () => MenuSubTrigger,
Trigger: () => MenuTrigger
});
function DropdownMenuContent(props) {
const rootContext = useMenuRootContext();
const context = useMenuContext();
const [local, others] = splitProps(props, ["onCloseAutoFocus", "onInteractOutside"]);
let hasInteractedOutside = false;
const onCloseAutoFocus = (e) => {
local.onCloseAutoFocus?.(e);
if (!hasInteractedOutside) {
focusWithoutScrolling(context.triggerRef());
}
hasInteractedOutside = false;
e.preventDefault();
};
const onInteractOutside = (e) => {
local.onInteractOutside?.(e);
if (!rootContext.isModal() || e.detail.isContextMenu) {
hasInteractedOutside = true;
}
};
return createComponent(MenuContent, mergeProps({
onCloseAutoFocus,
onInteractOutside
}, others));
}
function DropdownMenuRoot(props) {
const defaultId = `dropdownmenu-${createUniqueId()}`;
const mergedProps = mergeDefaultProps({
id: defaultId
}, props);
return createComponent(MenuRoot, mergedProps);
}
// src/dropdown-menu/index.tsx
var DropdownMenu = Object.assign(DropdownMenuRoot, {
Arrow: PopperArrow,
CheckboxItem: MenuCheckboxItem,
Content: DropdownMenuContent,
Group: MenuGroup,
GroupLabel: MenuGroupLabel,
Icon: MenuIcon,
Item: MenuItem,
ItemDescription: MenuItemDescription,
ItemIndicator: MenuItemIndicator,
ItemLabel: MenuItemLabel,
Portal: MenuPortal,
RadioGroup: MenuRadioGroup,
RadioItem: MenuRadioItem,
Separator: SeparatorRoot,
Sub: MenuSub,
SubContent: MenuSubContent,
SubTrigger: MenuSubTrigger,
Trigger: MenuTrigger
});
export { DropdownMenu, DropdownMenuContent, DropdownMenuRoot, dropdown_menu_exports };