bigbuffet-rw/app/soapbox/components/ui/stack/stack.tsx

50 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-03-21 11:09:01 -07:00
import classNames from 'classnames';
import React from 'react';
type SIZES = 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5
const spaces = {
'0.5': 'space-y-0.5',
1: 'space-y-1',
'1.5': 'space-y-1.5',
2: 'space-y-2',
3: 'space-y-3',
4: 'space-y-4',
5: 'space-y-5',
};
const justifyContentOptions = {
center: 'justify-center',
};
const alignItemsOptions = {
center: 'items-center',
};
interface IStack extends React.HTMLAttributes<HTMLDivElement > {
2022-03-21 11:09:01 -07:00
space?: SIZES,
alignItems?: 'center',
justifyContent?: 'center',
className?: string,
}
const Stack: React.FC<IStack> = (props) => {
const { space, alignItems, justifyContent, className, ...filteredProps } = props;
return (
<div
{...filteredProps}
className={classNames('flex flex-col', {
// @ts-ignore
2022-03-21 11:09:01 -07:00
[spaces[space]]: typeof space !== 'undefined',
// @ts-ignore
2022-03-21 11:09:01 -07:00
[alignItemsOptions[alignItems]]: typeof alignItems !== 'undefined',
// @ts-ignore
2022-03-21 11:09:01 -07:00
[justifyContentOptions[justifyContent]]: typeof justifyContent !== 'undefined',
}, className)}
2022-03-21 11:09:01 -07:00
/>
);
};
export default Stack;