diff --git a/src/runtime/components/Card.vue b/src/runtime/components/Card.vue
new file mode 100644
index 00000000..fe35ed47
--- /dev/null
+++ b/src/runtime/components/Card.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/theme/card.ts b/src/theme/card.ts
new file mode 100644
index 00000000..a3a86feb
--- /dev/null
+++ b/src/theme/card.ts
@@ -0,0 +1,8 @@
+export default {
+ slots: {
+ root: 'bg-white dark:bg-gray-900 ring ring-gray-200 dark:ring-gray-800 rounded-lg shadow',
+ header: 'p-4 sm:px-6',
+ body: 'px-4 py-5 sm:p-6',
+ footer: 'p-4 sm:px-6'
+ }
+}
\ No newline at end of file
diff --git a/src/theme/index.ts b/src/theme/index.ts
index 6cd525fa..aaf01a38 100644
--- a/src/theme/index.ts
+++ b/src/theme/index.ts
@@ -1,6 +1,7 @@
export { default as avatar } from './avatar'
export { default as badge } from './badge'
export { default as button } from './button'
+export { default as card } from './card'
export { default as collapsible } from './collapsible'
export { default as container } from './container'
export { default as icons } from './icons'
diff --git a/test/components/Card.spec.ts b/test/components/Card.spec.ts
new file mode 100644
index 00000000..9116075f
--- /dev/null
+++ b/test/components/Card.spec.ts
@@ -0,0 +1,15 @@
+import { describe, it, expect } from 'vitest'
+import Card, { type CardProps } from '../../src/runtime/components/Card.vue'
+import ComponentRender from '../component-render'
+
+describe('Card', () => {
+ it.each([
+ ['basic case', {}],
+ ['with default slot', { slots: { default: () => 'Default slot' } }],
+ ['with header slot', { slots: { header: () => 'Header slot' } }],
+ ['with footer slot', { slots: { footer: () => 'Footer slot' } }]
+ ])('renders %s correctly', async (nameOrHtml: string, options: { props?: CardProps, slots?: any }) => {
+ const html = await ComponentRender(nameOrHtml, options, Card)
+ expect(html).toMatchSnapshot()
+ })
+})
\ No newline at end of file
diff --git a/test/components/__snapshots__/Card.spec.ts.snap b/test/components/__snapshots__/Card.spec.ts.snap
new file mode 100644
index 00000000..d52f51f9
--- /dev/null
+++ b/test/components/__snapshots__/Card.spec.ts.snap
@@ -0,0 +1,33 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`Card > renders basic case correctly 1`] = `
+"
+
+
+
+
"
+`;
+
+exports[`Card > renders with default slot correctly 1`] = `
+""
+`;
+
+exports[`Card > renders with footer slot correctly 1`] = `
+""
+`;
+
+exports[`Card > renders with header slot correctly 1`] = `
+""
+`;