import type { ForwardedRef, HTMLAttributes } from 'react';
import React, { forwardRef } from 'react';
import classNames from 'classnames';
import type { SafeExtract, Spacing } from '../../types';
import type { DataListContextType } from './context';
import { useDataListContext } from './context';
import { DataListItemCell } from './DataListItemCell';
const DEFAULT_DIVIDER = true;
const DEFAULT_DISABLED = false;
/** @inheritdoc */
export interface DataListItemOwnProps extends Partial> {
/**
* Gap between items
*
* By default, `sm` size when true.
*
* @type boolean | 'xxs' | 'xs' | 'sm' | 'md' | 'lg'
* @default true
*/
gap?: boolean | SafeExtract;
}
/** @inheritdoc */
export interface DataListItemProps extends DataListItemOwnProps, Omit, 'className'> {}
export function getDatalistItemProps<
P extends DataListItemOwnProps & {
className?: string;
},
>({ className, divider = DEFAULT_DIVIDER, dense = false, disabled = DEFAULT_DISABLED, gap = true, ...rest }: P) {
return {
'data-disabled': disabled === true ? true : undefined,
'aria-disabled': disabled === true ? true : undefined,
...rest,
className: classNames(className, 'dataList__item', {
'dataList__item--hasDivider': divider,
'dataList__item--dense': dense,
['dataList__item--gap']: gap === true,
['dataList__item--gapXxs']: gap === 'xxs',
['dataList__item--gapXs']: gap === 'xs',
['dataList__item--gapSm']: gap === 'sm',
['dataList__item--gapMd']: gap === 'md',
['dataList__item--noGap']: gap === false,
}),
};
}
/**
* DataList.Item component
* **⚠️ INTERNAL UI KIT USE ONLY**
*/
export const DataListItem = Object.assign(
forwardRef(function Option(
{ divider, disabled, ...props }: DataListItemProps,
forwardedRef: ForwardedRef
) {
const { divider: contextDivider, disabled: contextDisabled } = useDataListContext();
return (
);
}),
{
displayName: 'DataList.Item',
Cell: DataListItemCell,
}
);