2024-02-01 00:58:19 +03:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
import { forwardRef } from 'react';
|
2024-02-01 15:23:59 +03:00
|
|
|
import { Icon } from '../components';
|
|
|
|
import { FABProps } from './fab.types';
|
2024-02-01 00:58:19 +03:00
|
|
|
import { ButtonLayout } from '../button-layout/button-layout';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* FABs component
|
|
|
|
** description
|
|
|
|
*/
|
|
|
|
|
|
|
|
const sizes = {
|
|
|
|
small: 24,
|
|
|
|
default: 24,
|
|
|
|
large: 36,
|
|
|
|
extended: 24,
|
|
|
|
};
|
|
|
|
|
2024-02-01 15:23:59 +03:00
|
|
|
export const FAB = forwardRef<HTMLButtonElement, FABProps>(
|
2024-02-01 00:58:19 +03:00
|
|
|
(
|
|
|
|
{
|
|
|
|
variant,
|
|
|
|
disabled,
|
|
|
|
icon,
|
|
|
|
centralRipple = false,
|
|
|
|
size = 'default',
|
|
|
|
elevated,
|
|
|
|
...props
|
|
|
|
},
|
|
|
|
ref,
|
|
|
|
) => (
|
|
|
|
<ButtonLayout
|
|
|
|
{...props}
|
|
|
|
centralRipple={centralRipple}
|
|
|
|
className={`m3-fab m3-${size}-fab ${!(elevated ?? false) && 'without-elevation'}`}
|
|
|
|
disabled={disabled}
|
|
|
|
ref={ref}
|
|
|
|
variant={variant ? variant : 'surface'}
|
|
|
|
>
|
|
|
|
<Icon iconSize={sizes[size]} svgSize={sizes[size]}>
|
|
|
|
{icon}
|
|
|
|
</Icon>
|
|
|
|
{size === 'extended' ? (
|
|
|
|
<span className={'label-large'}>{props.children}</span>
|
|
|
|
) : (
|
|
|
|
<></>
|
|
|
|
)}
|
|
|
|
</ButtonLayout>
|
|
|
|
),
|
|
|
|
);
|