mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 07:45:47 +00:00
feat: create PopoverContent component
This commit is contained in:
@@ -0,0 +1,71 @@
|
|||||||
|
import { cn } from '@/lib/helper';
|
||||||
|
|
||||||
|
export interface PopoverContentProps {
|
||||||
|
children: React.ReactNode;
|
||||||
|
id: string;
|
||||||
|
anchorName: string; // Must include `--` like "--menu-anchor"
|
||||||
|
popover?: 'auto' | 'hint' | 'manual';
|
||||||
|
position?:
|
||||||
|
| 'top'
|
||||||
|
| 'bottom'
|
||||||
|
| 'left'
|
||||||
|
| 'right'
|
||||||
|
| 'top-start'
|
||||||
|
| 'top-end'
|
||||||
|
| 'bottom-start'
|
||||||
|
| 'bottom-end'
|
||||||
|
| 'left-start'
|
||||||
|
| 'left-end'
|
||||||
|
| 'right-start'
|
||||||
|
| 'right-end';
|
||||||
|
className?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const positionAreaMap: Record<
|
||||||
|
NonNullable<PopoverContentProps['position']>,
|
||||||
|
string
|
||||||
|
> = {
|
||||||
|
top: 'top center',
|
||||||
|
bottom: 'bottom center',
|
||||||
|
left: 'left center',
|
||||||
|
right: 'right center',
|
||||||
|
|
||||||
|
'top-start': 'top left',
|
||||||
|
'top-end': 'top right',
|
||||||
|
'bottom-start': 'bottom left',
|
||||||
|
'bottom-end': 'bottom right',
|
||||||
|
|
||||||
|
'left-start': 'left top',
|
||||||
|
'left-end': 'left bottom',
|
||||||
|
|
||||||
|
'right-start': 'right top',
|
||||||
|
'right-end': 'right bottom',
|
||||||
|
};
|
||||||
|
|
||||||
|
const PopoverContent = ({
|
||||||
|
children,
|
||||||
|
id,
|
||||||
|
anchorName,
|
||||||
|
popover = 'auto',
|
||||||
|
position = 'bottom-start',
|
||||||
|
className,
|
||||||
|
}: PopoverContentProps) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cn(className)}
|
||||||
|
id={id}
|
||||||
|
popover={popover}
|
||||||
|
style={
|
||||||
|
{
|
||||||
|
inset: 'unset',
|
||||||
|
positionAnchor: anchorName,
|
||||||
|
positionArea: positionAreaMap[position],
|
||||||
|
} as React.CSSProperties
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PopoverContent;
|
||||||
Reference in New Issue
Block a user