src/components/columns.tsx
import React from 'react'
import { clsx } from 'clsx'
interface ColumnsProps {
children: React.ReactNode
className?: string
gap?: string
cols?: string
align?: string
reverseColumns?: boolean
}
function getColumnsDefaults() {
return {
gap: 'gap-20 lg:gap-20',
cols: 'grid-cols-1 lg:grid-cols-2',
align: 'items-center',
}
}
export function Columns({
children,
className,
gap = '',
cols = '',
align = '',
reverseColumns = false,
}: ColumnsProps) {
const defaults = getColumnsDefaults()
const finalGap = gap || defaults.gap
const finalCols = cols || defaults.cols
const finalAlign = align || defaults.align
const getReverseClasses = () => {
if (!reverseColumns) return ''
return 'lg:[&>*:nth-child(odd)]:order-2 lg:[&>*:nth-child(even)]:order-1'
}
return (
<div
className={clsx(
'grid',
finalCols,
finalGap,
finalAlign,
getReverseClasses(),
className
)}
>
{children}
</div>
)
}
interface ColumnProps {
children: React.ReactNode
className?: string
}
export function Column({ children, className }: ColumnProps) {
return (
<div className={clsx('[&>*:last-child]:mb-0', className)}>{children}</div>
)
}