Primary
Default
Dashed
diff --git a/components/card/Card.vue b/components/card/Card.vue
index bbdc24838..c1081d7ac 100644
--- a/components/card/Card.vue
+++ b/components/card/Card.vue
@@ -1,9 +1,8 @@
diff --git a/components/vc-cascader/Menus.vue b/components/vc-cascader/Menus.vue
new file mode 100644
index 000000000..53b6e200d
--- /dev/null
+++ b/components/vc-cascader/Menus.vue
@@ -0,0 +1,156 @@
+
diff --git a/components/vc-cascader/assets/index.less b/components/vc-cascader/assets/index.less
new file mode 100644
index 000000000..c2a2e3b3c
--- /dev/null
+++ b/components/vc-cascader/assets/index.less
@@ -0,0 +1,167 @@
+.effect() {
+ animation-duration: .3s;
+ animation-fill-mode: both;
+ transform-origin: 0 0;
+}
+
+.rc-cascader {
+ font-size: 12px;
+ &-menus {
+ font-size: 12px;
+ overflow: hidden;
+ background: #fff;
+ position: absolute;
+ border: 1px solid #d9d9d9;
+ border-radius: 6px;
+ box-shadow: 0 0 4px rgba(0,0,0,0.17);
+ white-space: nowrap;
+
+ &-hidden {
+ display: none;
+ }
+
+ &.slide-up-enter, &.slide-up-appear {
+ .effect();
+ opacity: 0;
+ animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);
+ animation-play-state: paused;
+ }
+
+ &.slide-up-leave {
+ .effect();
+ opacity: 1;
+ animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);
+ animation-play-state: paused;
+ }
+
+ &.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,
+ &.slide-up-appear.slide-up-appear-active&-placement-bottomLeft {
+ animation-name: SlideUpIn;
+ animation-play-state: running;
+ }
+
+ &.slide-up-enter.slide-up-enter-active&-placement-topLeft,
+ &.slide-up-appear.slide-up-appear-active&-placement-topLeft {
+ animation-name: SlideDownIn;
+ animation-play-state: running;
+ }
+
+ &.slide-up-leave.slide-up-leave-active&-placement-bottomLeft {
+ animation-name: SlideUpOut;
+ animation-play-state: running;
+ }
+
+ &.slide-up-leave.slide-up-leave-active&-placement-topLeft {
+ animation-name: SlideDownOut;
+ animation-play-state: running;
+ }
+ }
+ &-menu {
+ display: inline-block;
+ width: 100px;
+ height: 192px;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ border-right: 1px solid #e9e9e9;
+ overflow: auto;
+ &:last-child {
+ border-right: 0;
+ }
+ }
+ &-menu-item {
+ height: 32px;
+ line-height: 32px;
+ padding: 0 16px;
+ cursor: pointer;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ transition: all 0.3s ease;
+ position: relative;
+ &:hover {
+ background: tint(#2db7f5, 90%);
+ }
+ &-disabled {
+ cursor: not-allowed;
+ color: #ccc;
+ &:hover {
+ background: transparent;
+ }
+ }
+ &-loading:after {
+ position: absolute;
+ right: 12px;
+ content: 'loading';
+ color: #aaa;
+ font-style: italic;
+ }
+ &-active {
+ background: tint(#2db7f5, 80%);
+ &:hover {
+ background: tint(#2db7f5, 80%);
+ }
+ }
+ &-expand {
+ position: relative;
+ &:after {
+ content: '>';
+ font-size: 12px;
+ color: #999;
+ position: absolute;
+ right: 16px;
+ line-height: 32px;
+ }
+ }
+ }
+}
+
+@keyframes SlideUpIn {
+ 0% {
+ opacity: 0;
+ transform-origin: 0% 0%;
+ transform: scaleY(.8);
+ }
+ 100% {
+ opacity: 1;
+ transform-origin: 0% 0%;
+ transform: scaleY(1);
+ }
+}
+@keyframes SlideUpOut {
+ 0% {
+ opacity: 1;
+ transform-origin: 0% 0%;
+ transform: scaleY(1);
+ }
+ 100% {
+ opacity: 0;
+ transform-origin: 0% 0%;
+ transform: scaleY(0.8);
+ }
+}
+
+@keyframes SlideDownIn {
+ 0% {
+ opacity: 0;
+ transform-origin: 0% 100%;
+ transform: scaleY(0.8);
+ }
+ 100% {
+ opacity: 1;
+ transform-origin: 0% 100%;
+ transform: scaleY(1);
+ }
+}
+@keyframes SlideDownOut {
+ 0% {
+ opacity: 1;
+ transform-origin: 0% 100%;
+ transform: scaleY(1);
+ }
+ 100% {
+ opacity: 0;
+ transform-origin: 0% 100%;
+ transform: scaleY(0.8);
+ }
+}
diff --git a/components/vc-cascader/index.js b/components/vc-cascader/index.js
new file mode 100644
index 000000000..f68442fea
--- /dev/null
+++ b/components/vc-cascader/index.js
@@ -0,0 +1,3 @@
+// export this package's api
+import Cascader from './Cascader'
+export default Cascader
diff --git a/components/vc-switch/Switch.vue b/components/vc-switch/Switch.vue
index dab42e7f4..a4f0ea373 100644
--- a/components/vc-switch/Switch.vue
+++ b/components/vc-switch/Switch.vue
@@ -15,9 +15,6 @@ export default {
props: {
...switchPropTypes,
prefixCls: switchPropTypes.prefixCls.def('rc-switch'),
- checkedChildren: switchPropTypes.checkedChildren,
- unCheckedChildren: switchPropTypes.unCheckedChildren,
- defaultChecked: switchPropTypes.defaultChecked.def(''),
// onChange: switchPropTypes.onChange.def(noop),
// onClick: switchPropTypes.onClick.def(noop),
},
diff --git a/contributors.md b/contributors.md
index 1c22363aa..71dbb0380 100644
--- a/contributors.md
+++ b/contributors.md
@@ -19,6 +19,8 @@ Select | done
Input | done
InputNumber
AutoComplete | done
+Affix | done
+Cascader
Modal
Alert
Calendar
@@ -32,7 +34,6 @@ Mention
##万
Grid
Col
-Affix
BackTop
Layout
Anchor
diff --git a/examples/demo.js b/examples/demo.js
index 64b03cb57..00f3ce5e2 100644
--- a/examples/demo.js
+++ b/examples/demo.js
@@ -25,4 +25,5 @@ export { default as message } from 'antd/message/demo/index.vue'
export { default as spin } from 'antd/spin/demo/index.vue'
export { default as switch } from 'antd/switch/demo/index.vue'
export { default as autoComplete } from 'antd/auto-complete/demo/index.vue'
+export { default as affix } from 'antd/Affix/demo/index.vue'
diff --git a/examples/routes.js b/examples/routes.js
index e9d28cb55..1e76bdeae 100644
--- a/examples/routes.js
+++ b/examples/routes.js
@@ -3,7 +3,7 @@ const AsyncComp = () => {
const hashs = window.location.hash.split('/')
const d = hashs[hashs.length - 1]
return {
- component: import(`../components/auto-complete/demo/${d}`),
+ component: import(`../components/affix/demo/${d}`),
}
}
export default [
diff --git a/package.json b/package.json
index e327fb284..b0a193a8e 100644
--- a/package.json
+++ b/package.json
@@ -100,6 +100,7 @@
"lodash.isplainobject": "^4.0.6",
"moment": "^2.20.1",
"omit.js": "^1.0.0",
+ "shallowequal": "^1.0.2",
"vue": "^2.5.13",
"vue-clipboard2": "0.0.8",
"vue-types": "^1.0.2",