import { useContext, forwardRef } from 'react';
import { clsx } from 'clsx';
import ButtonComp, { type ButtonAddonIcon, type NewButtonProps } from '../../button';
import { useListItemControl } from '../useListItemControl';
import { ListItemContext } from '../ListItemContext';
export type ListItemButtonProps = Omit<
NewButtonProps,
'v2' | 'size' | 'disabled' | 'block' | 'addonStart'
> & {
/**
* Toggles the [interactivity strategy](https://storybook.wise.design/?path=/docs/content-listitem--docs#interactivity) for the whole ListItem.
*/
partiallyInteractive?: boolean;
addonStart?: ButtonAddonIcon;
/** @default 'secondary-neutral' */
priority?: NewButtonProps['priority'];
};
/**
* This component allows for rendering a Button control. It's a thin wrapper around the
* [Button component](https://storybook.wise.design/?path=/docs/content-button--docs), but offers only
* a subset of its features in line with the ListItem's constraints.
*
* Please refer to the [Design documentation](https://wise.design/components/list-item---button) for details.
*/
export const Button = forwardRef(
(
{ priority = 'secondary-neutral', partiallyInteractive, ...props }: ListItemButtonProps,
ref,
) => {
const { baseItemProps } = useListItemControl('button', { partiallyInteractive, ...props });
const { ids, describedByIds } = useContext(ListItemContext);
const commonProps = {
...props,
className: clsx(
'wds-list-item-control',
!partiallyInteractive && props.href && 'wds-list-item-control_pseudo-element',
),
id: ids.control,
priority,
v2: true,
size: 'sm',
disabled: baseItemProps.disabled,
};
const buttonContentId = props.href || partiallyInteractive ? '' : `${ids.control}_content`;
return (
);
},
);
Button.displayName = 'ListItem.Button';