⚡️ feat: create heading component
This commit is contained in:
parent
282001c317
commit
3215a19141
@ -0,0 +1,7 @@
|
|||||||
|
import { tv, type VariantProps } from 'tailwind-variants';
|
||||||
|
|
||||||
|
export const headingTheme = tv({
|
||||||
|
base: ['text-elements-high-em', 'font-display', 'font-semibold'],
|
||||||
|
});
|
||||||
|
|
||||||
|
export type HeadingVariants = VariantProps<typeof headingTheme>;
|
30
packages/frontend/src/components/shared/Heading/Heading.tsx
Normal file
30
packages/frontend/src/components/shared/Heading/Heading.tsx
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import React, { type PropsWithChildren } from 'react';
|
||||||
|
|
||||||
|
import { headingTheme, type HeadingVariants } from './Heading.theme';
|
||||||
|
import { PolymorphicProps } from 'types/common';
|
||||||
|
|
||||||
|
export type HeadingElementType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
||||||
|
|
||||||
|
export type HeadingProps<Element extends HeadingElementType> =
|
||||||
|
PropsWithChildren<PolymorphicProps<Element, HeadingVariants>>;
|
||||||
|
|
||||||
|
export const Heading = <Element extends HeadingElementType>({
|
||||||
|
children,
|
||||||
|
as,
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: HeadingProps<Element>) => {
|
||||||
|
// Component is the element that will be rendered
|
||||||
|
const Component = as ?? 'h1';
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Component
|
||||||
|
{...props}
|
||||||
|
className={headingTheme({
|
||||||
|
className,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Component>
|
||||||
|
);
|
||||||
|
};
|
1
packages/frontend/src/components/shared/Heading/index.ts
Normal file
1
packages/frontend/src/components/shared/Heading/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from './Heading';
|
Loading…
Reference in New Issue
Block a user