From f84907ca3c97d2ef73a7f765b62478d0b8bdbdc8 Mon Sep 17 00:00:00 2001
From: JeremyWuuuuu <591449570@qq.com>
Date: Wed, 29 Jul 2020 21:25:29 +0800
Subject: [PATCH] feat/card - add new component card and it's tests, docs
---
packages/card/__tests__/card.spec.ts | 71 ++++++++++++++++++++++++++++
packages/card/doc/complex.vue | 19 ++++++++
packages/card/doc/index.stories.ts | 7 +++
packages/card/index.ts | 5 ++
packages/card/package.json | 12 +++++
packages/card/src/index.vue | 32 +++++++++++++
packages/element-plus/index.ts | 2 +
packages/element-plus/package.json | 1 +
8 files changed, 149 insertions(+)
create mode 100644 packages/card/__tests__/card.spec.ts
create mode 100644 packages/card/doc/complex.vue
create mode 100644 packages/card/doc/index.stories.ts
create mode 100644 packages/card/index.ts
create mode 100644 packages/card/package.json
create mode 100644 packages/card/src/index.vue
diff --git a/packages/card/__tests__/card.spec.ts b/packages/card/__tests__/card.spec.ts
new file mode 100644
index 0000000000..9efae6e1f6
--- /dev/null
+++ b/packages/card/__tests__/card.spec.ts
@@ -0,0 +1,71 @@
+import { mount } from '@vue/test-utils'
+import Card from '../src/index.vue'
+
+const AXIOM = 'Rem is the best girl'
+
+describe('Card.vue', () => {
+ test('render test', () => {
+ const wrapper = mount(Card, {
+ slots: {
+ default: AXIOM,
+ },
+ })
+ expect(wrapper.text()).toEqual(AXIOM)
+ })
+
+ test('string header', () => {
+ const header = 'I am header'
+ const wrapper = mount(Card, {
+ slots: {
+ default: AXIOM,
+ },
+ props: {
+ header,
+ },
+ })
+ expect(wrapper.text()).toContain(header)
+ })
+
+ test('vnode header', () => {
+ const headerCls = 'header-text'
+ const btnCls = 'test-btn'
+ const wrapper = mount(Card, {
+ slots: {
+ default: AXIOM,
+ header: `
+
+
+
`,
+ },
+ })
+ expect(wrapper.find('.header-text').exists()).toBe(true)
+ expect(wrapper.find('.test-btn').exists()).toBe(true)
+ })
+
+ test('body style', () => {
+ const style = 'font-size: 14px;'
+ const wrapper = mount(Card, {
+ props: {
+ slots: {
+ default: AXIOM,
+ },
+ bodyStyle: style,
+ },
+ })
+ expect(wrapper.find('.el-card__body').attributes('style')).toBe(style)
+ })
+
+ test('shadow', () => {
+ const shadow = 'test-shadow'
+ const wrapper = mount(Card, {
+ props: {
+ slots: {
+ default: AXIOM,
+ },
+ shadow,
+ },
+ })
+
+ expect(wrapper.find(`.is-${shadow}-shadow`).exists()).toBe(true)
+ })
+})
diff --git a/packages/card/doc/complex.vue b/packages/card/doc/complex.vue
new file mode 100644
index 0000000000..ec5a01a93c
--- /dev/null
+++ b/packages/card/doc/complex.vue
@@ -0,0 +1,19 @@
+
+
+
+ 卡片名称
+ 点我
+
+ {{ '列表内容 ' + o }}
+
+
+
+
diff --git a/packages/card/doc/index.stories.ts b/packages/card/doc/index.stories.ts
new file mode 100644
index 0000000000..20fe670d35
--- /dev/null
+++ b/packages/card/doc/index.stories.ts
@@ -0,0 +1,7 @@
+export default {
+ title: 'Card',
+}
+
+export const BasicCard = () :string => 'basic card'
+export const MinimalCard = (): string => 'minimal card with no header'
+export { default as ComplexCard } from './complex.vue'
diff --git a/packages/card/index.ts b/packages/card/index.ts
new file mode 100644
index 0000000000..859883df64
--- /dev/null
+++ b/packages/card/index.ts
@@ -0,0 +1,5 @@
+import { App } from 'vue'
+import Card from './src/index.vue'
+export default (app: App): void => {
+ app.component(Card.name, Card)
+}
diff --git a/packages/card/package.json b/packages/card/package.json
new file mode 100644
index 0000000000..2161ef5b19
--- /dev/null
+++ b/packages/card/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "@element-plus/card",
+ "version": "0.0.0",
+ "main": "dist/index.js",
+ "license": "MIT",
+ "peerDependencies": {
+ "vue": "^3.0.0-rc.1"
+ },
+ "devDependencies": {
+ "@vue/test-utils": "^2.0.0-beta.0"
+ }
+}
diff --git a/packages/card/src/index.vue b/packages/card/src/index.vue
new file mode 100644
index 0000000000..f4f0673356
--- /dev/null
+++ b/packages/card/src/index.vue
@@ -0,0 +1,32 @@
+
+
+
+
diff --git a/packages/element-plus/index.ts b/packages/element-plus/index.ts
index 999f4c2159..d34e1a82f9 100644
--- a/packages/element-plus/index.ts
+++ b/packages/element-plus/index.ts
@@ -1,6 +1,7 @@
import type { App } from 'vue'
import ElButton from '@element-plus/button'
import ElBadge from '@element-plus/badge'
+import ElCard from '@element-plus/card'
import ElTag from '@element-plus/tag'
import ElDivider from '@element-plus/divider'
@@ -11,6 +12,7 @@ export {
export default function install(app: App): void {
ElButton(app)
ElBadge(app)
+ ElCard(app)
ElTag(app)
ElDivider(app)
}
diff --git a/packages/element-plus/package.json b/packages/element-plus/package.json
index 2152600517..1d5f269b8b 100644
--- a/packages/element-plus/package.json
+++ b/packages/element-plus/package.json
@@ -16,6 +16,7 @@
"dependencies": {
"@element-plus/badge": "^0.0.0",
"@element-plus/button": "^0.0.0",
+ "@element-plus/card": "^0.0.0",
"@element-plus/tag": "^0.0.0"
}
}