From 78908c3d64a6759a915b5a8b772e750f928740e4 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Tue, 12 Mar 2024 16:07:46 +0100 Subject: [PATCH] feat(Card): new component --- src/runtime/components/Card.vue | 40 +++++++++++++++++++ src/theme/card.ts | 8 ++++ src/theme/index.ts | 1 + test/components/Card.spec.ts | 15 +++++++ .../__snapshots__/Card.spec.ts.snap | 33 +++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 src/runtime/components/Card.vue create mode 100644 src/theme/card.ts create mode 100644 test/components/Card.spec.ts create mode 100644 test/components/__snapshots__/Card.spec.ts.snap 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`] = ` +"
+ +
Default slot
+ +
" +`; + +exports[`Card > renders with footer slot correctly 1`] = ` +"
+ + +
Footer slot
+
" +`; + +exports[`Card > renders with header slot correctly 1`] = ` +"
+
Header slot
+ + +
" +`;