From a208a8f314f697dbd6f85f8be8332bcea0204178 Mon Sep 17 00:00:00 2001
From: Armand Philippot <git@armandphilippot.com>
Date: Fri, 29 Apr 2022 18:49:38 +0200
Subject: chore: add a Columns component

---
 src/components/molecules/layout/columns.tsx | 49 +++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)
 create mode 100644 src/components/molecules/layout/columns.tsx

(limited to 'src/components/molecules/layout/columns.tsx')

diff --git a/src/components/molecules/layout/columns.tsx b/src/components/molecules/layout/columns.tsx
new file mode 100644
index 0000000..c196457
--- /dev/null
+++ b/src/components/molecules/layout/columns.tsx
@@ -0,0 +1,49 @@
+import Column from '@components/atoms/layout/column';
+import { FC, ReactComponentElement } from 'react';
+import styles from './columns.module.scss';
+
+export type ColumnsProps = {
+  /**
+   * The columns.
+   */
+  children: ReactComponentElement<typeof Column>[];
+  /**
+   * Set additional classnames to the columns wrapper.
+   */
+  className?: string;
+  /**
+   * The number of columns.
+   */
+  count: 2 | 3 | 4;
+  /**
+   * Should the columns be stacked on small devices? Default: true.
+   */
+  responsive?: boolean;
+};
+
+/**
+ * Columns component.
+ *
+ * Render some Column components as columns.
+ */
+const Columns: FC<ColumnsProps> = ({
+  children,
+  className = '',
+  count,
+  responsive = true,
+}) => {
+  const countClass = `wrapper--${count}-columns`;
+  const responsiveClass = responsive
+    ? `wrapper--responsive`
+    : 'wrapper--no-responsive';
+
+  return (
+    <div
+      className={`${styles.wrapper} ${styles[countClass]} ${styles[responsiveClass]} ${className}`}
+    >
+      {children}
+    </div>
+  );
+};
+
+export default Columns;
-- 
cgit v1.2.3

