From 2a308fb5bec47aac0f59e074d793cec6e95db1c3 Mon Sep 17 00:00:00 2001
From: Furkan Sahin <furkan-dev@proton.me>
Date: Mon, 28 Aug 2023 21:33:44 -0500
Subject: Add wg2nd

---
 components/Typography/index.tsx | 47 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 components/Typography/index.tsx

(limited to 'components/Typography/index.tsx')

diff --git a/components/Typography/index.tsx b/components/Typography/index.tsx
new file mode 100644
index 0000000..b9babc0
--- /dev/null
+++ b/components/Typography/index.tsx
@@ -0,0 +1,47 @@
+import React from 'react';
+import styles from './typo.module.scss';
+import clsx from 'clsx';
+
+
+type Variant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body';
+type Align = 'inherit' | 'left' | 'center' | 'right';
+
+interface TypographyProps extends React.HTMLAttributes<HTMLElement> {
+    variant?: Variant;
+    align?: Align;
+    gutter?: boolean;
+}
+
+const variantTagMap: Record<Variant, keyof JSX.IntrinsicElements> = {
+    h1: 'h1',
+    h2: 'h2',
+    h3: 'h3',
+    h4: 'h4',
+    h5: 'h5',
+    h6: 'h6',
+    body: 'p'
+};
+
+const Typography: React.FC<TypographyProps> = ({
+    variant = 'body',
+    align = 'inherit',
+    gutter = false,
+    className,
+    ...props
+}) => {
+    const Tag = variantTagMap[variant] as keyof React.ReactHTML;
+
+    const typographyClassName = clsx(
+        styles[`typo-${variant}`],
+        {
+            [`align-${align}`]: align !== 'inherit',
+            [styles['typo-gutter']]: gutter
+        },
+        className
+    );
+
+    return <Tag className={typographyClassName} {...props} />;
+};
+
+export default Typography;
+
-- 
cgit v1.2.3

