import { HTMLAttributes, forwardRef } from 'react';
import { clsx } from 'clsx';
import { useMedia } from '../hooks/useMedia';
import { Breakpoint } from '../propsValues/breakpoint';
export type ShapeSize = 16 | 24 | 32 | 40 | 48 | 56 | 72;
export type Props = {
/**
* Modify underlying element, `div` by default
*/
as?: React.ElementType;
/**
* Set size of the circle in px, `48` by default
*/
size?: ShapeSize;
/**
* When `true` will use the fixed size (`48px`) instead of the CSS spacing variable (`--size-*`)
* as those can be dynamic a at certain viewport sizes
*/
fixedSize?: boolean;
enableBorder?: boolean;
} & HTMLAttributes;
/**
* circle like components has custom sizes for icons
*/
const MAP_ICON_SIZE = {
16: 12,
24: 16,
32: 18,
40: 20,
48: 24,
56: 28,
72: 36,
};
/**
* circle like components have custom typography styles for for default (Inter) font
*
* circle size : font size (px)
*/
const MAP_FONT_SIZE = {
16: 8,
24: 12,
32: 14,
40: 18,
48: 22,
56: 26,
72: 30,
};
const Circle = forwardRef(function Circle(
{
as: Element = 'div',
children,
size = 48,
fixedSize = false,
enableBorder = false,
className,
style,
...props
}: Props,
ref,
) {
const isTinyViewport = useMedia(`(max-width: ${Breakpoint.ZOOM_400}px)`);
return (
{children}
);
});
export default Circle;