import React from 'react';
import styled from 'styled-components';
import type { ReactNode, JSX } from 'react';
import type { DropdownMenuItemProps } from '@redocly/theme/components/Dropdown/DropdownMenuItem';
import { DropdownMenuItem } from '@redocly/theme/components/Dropdown/DropdownMenuItem';
export type DropdownMenuProps = { className?: string; role?: string; footer?: React.ReactNode } & (
| {
items: DropdownMenuItemProps[];
}
| { children?: ReactNode }
);
export function DropdownMenu(props: DropdownMenuProps): JSX.Element {
let content: React.ReactNode = null;
if ('children' in props) {
content = props.children;
}
if ('items' in props) {
content = props.items.map((item, idx) => (
{item.content}
));
}
return (
{content}
{props.footer || null}
);
}
const DropdownMenuWrapper = styled.ul`
font-size: var(--dropdown-menu-font-size);
font-weight: var(--dropdown-menu-font-weight);
line-height: var(--dropdown-menu-line-height);
color: var(--dropdown-menu-text-color);
/* Make sure the spacing is not overriden by the markdown list styles */
--md-list-margin: 0;
--md-list-left-padding: var(--dropdown-menu-padding);
margin: 0;
min-width: var(--dropdown-menu-min-width);
max-width: var(--dropdown-menu-max-width);
max-height: var(--dropdown-menu-max-height);
padding: var(--dropdown-menu-padding);
background-color: var(--dropdown-menu-bg-color);
border-radius: var(--dropdown-menu-border-radius);
box-shadow: var(--dropdown-menu-box-shadow);
border: 1px solid var(--dropdown-menu-border-color);
list-style-type: none;
white-space: nowrap;
overflow-x: hidden;
overflow-y: auto;
z-index: var(--z-index-surface);
display: flex;
flex-direction: column;
gap: var(--dropdown-menu-item-gap);
`;