Create Card component
This commit is contained in:
43
webui/src/common/components/Card/Card.jsx
Normal file
43
webui/src/common/components/Card/Card.jsx
Normal file
@@ -0,0 +1,43 @@
|
||||
import React from 'react';
|
||||
import './styles.sass';
|
||||
|
||||
export const Card = ({
|
||||
children,
|
||||
className = '',
|
||||
hover = false,
|
||||
padding = 'md',
|
||||
variant = 'default',
|
||||
...rest
|
||||
}) => {
|
||||
const cardClasses = [
|
||||
'card',
|
||||
`card--${variant}`,
|
||||
`card--padding-${padding}`,
|
||||
hover && 'card--hover',
|
||||
className
|
||||
].filter(Boolean).join(' ');
|
||||
|
||||
return (
|
||||
<div className={cardClasses} {...rest}>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const CardHeader = ({ children, className = '' }) => (
|
||||
<div className={`card-header ${className}`}>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
|
||||
export const CardBody = ({ children, className = '' }) => (
|
||||
<div className={`card-body ${className}`}>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
|
||||
export const CardFooter = ({ children, className = '' }) => (
|
||||
<div className={`card-footer ${className}`}>
|
||||
{children}
|
||||
</div>
|
||||
);
|
1
webui/src/common/components/Card/index.js
Normal file
1
webui/src/common/components/Card/index.js
Normal file
@@ -0,0 +1 @@
|
||||
export { Card as default, CardHeader, CardBody, CardFooter } from './Card.jsx';
|
43
webui/src/common/components/Card/styles.sass
Normal file
43
webui/src/common/components/Card/styles.sass
Normal file
@@ -0,0 +1,43 @@
|
||||
.card
|
||||
background: var(--bg-alt)
|
||||
border: 1px solid var(--border)
|
||||
border-radius: var(--radius-lg)
|
||||
transition: all 0.2s ease
|
||||
|
||||
&--hover:hover
|
||||
border-color: var(--border-strong)
|
||||
transform: translateY(-2px)
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1)
|
||||
|
||||
&--padding-none
|
||||
padding: 0
|
||||
|
||||
&--padding-sm
|
||||
padding: 1rem
|
||||
|
||||
&--padding-md
|
||||
padding: 1.5rem
|
||||
|
||||
&--padding-lg
|
||||
padding: 2rem
|
||||
|
||||
&--variant-elevated
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1)
|
||||
|
||||
&--variant-outlined
|
||||
border-width: 2px
|
||||
|
||||
.card-header
|
||||
margin-bottom: 1rem
|
||||
|
||||
&:last-child
|
||||
margin-bottom: 0
|
||||
|
||||
.card-body
|
||||
flex: 1
|
||||
|
||||
.card-footer
|
||||
margin-top: 1rem
|
||||
|
||||
&:first-child
|
||||
margin-top: 0
|
Reference in New Issue
Block a user