-
{{ title }}
-
¥ {{ price }}
+
{{ title }}
+
¥ {{ price }}
-
{{ desc }}
-
x {{ num }}
+
{{ desc }}
+
x {{ num }}
diff --git a/packages/coupon-cell/index.vue b/packages/coupon-cell/index.vue
index 953540e5f..2017c1e16 100644
--- a/packages/coupon-cell/index.vue
+++ b/packages/coupon-cell/index.vue
@@ -3,8 +3,8 @@
-
{{ amount }}
-
{{ coupons[chosenCoupon].condition }}
+
{{ amount }}
+
{{ coupons[chosenCoupon].condition }}
{{ guide }}
diff --git a/packages/coupon-list/index.vue b/packages/coupon-list/index.vue
index 2787e4de9..9a7ddaae9 100644
--- a/packages/coupon-list/index.vue
+++ b/packages/coupon-list/index.vue
@@ -1,5 +1,5 @@
-
+
{{ exchangeButtonText }}
@@ -22,7 +22,7 @@
/>
{{ closeButtonText }}
-
+
diff --git a/packages/panel/index.vue b/packages/panel/index.vue
index 60107b200..4ccdabd8e 100644
--- a/packages/panel/index.vue
+++ b/packages/panel/index.vue
@@ -2,7 +2,7 @@
diff --git a/packages/steps/index.vue b/packages/steps/index.vue
index 800cfd118..a333938be 100644
--- a/packages/steps/index.vue
+++ b/packages/steps/index.vue
@@ -8,8 +8,8 @@
diff --git a/packages/vant-css/assets/icons.sketch b/packages/vant-css/assets/icons.sketch
index f81941d43..cc77e345a 100644
Binary files a/packages/vant-css/assets/icons.sketch and b/packages/vant-css/assets/icons.sketch differ
diff --git a/packages/vant-css/package.json b/packages/vant-css/package.json
index 2e8cc9bda..cbad0fe19 100644
--- a/packages/vant-css/package.json
+++ b/packages/vant-css/package.json
@@ -1,6 +1,6 @@
{
"name": "vant-css",
- "version": "0.9.2",
+ "version": "0.9.5",
"description": "vant css.",
"main": "lib/index.css",
"style": "lib/index.css",
diff --git a/packages/vant-css/scripts/fount-config.js b/packages/vant-css/scripts/fount-config.js
index 9063f39af..88dbc67bd 100644
--- a/packages/vant-css/scripts/fount-config.js
+++ b/packages/vant-css/scripts/fount-config.js
@@ -393,6 +393,16 @@ module.exports = {
keywords: ['gold-coin'],
src: '金币.svg',
css: 'gold-coin'
+ },
+ {
+ keywords: ['completed'],
+ src: '已完成.svg',
+ css: 'completed'
+ },
+ {
+ keywords: ['value-card'],
+ src: '会员余额.svg',
+ css: 'value-card'
}
]
};
diff --git a/packages/vant-css/src/base.css b/packages/vant-css/src/base.css
index 5cbf9bc24..5609574e8 100644
--- a/packages/vant-css/src/base.css
+++ b/packages/vant-css/src/base.css
@@ -5,4 +5,4 @@
@import "./common/var.css";
@import "./common/normalize.css";
@import "./common/hairline.css";
-
+@import "./common/animation.css";
diff --git a/packages/vant-css/src/button.css b/packages/vant-css/src/button.css
index b058230a3..7a3356dd1 100644
--- a/packages/vant-css/src/button.css
+++ b/packages/vant-css/src/button.css
@@ -24,7 +24,7 @@
border-radius: inherit; /* inherit parent's border radius */
}
- &:not(.is-disabled):active::before {
+ &:not([disabled]):active::before {
opacity: .3;
}
@@ -36,10 +36,6 @@
color: $button-default-color;
background-color: $button-default-background-color;
border: 1px solid $button-default-border-color;
-
- &:active {
- color: $gray-dark;
- }
}
&--primary {
@@ -91,12 +87,6 @@
}
}
- &--disabled {
- color: $button-disabled-color;
- background-color: $button-disabled-background-color;
- border: 1px solid $button-disabled-border-color;
- }
-
&--block {
width: 100%;
display: block;
@@ -112,13 +102,14 @@
color: $bottom-action-button-default-color;
background-color: $bottom-action-button-default-background-color;
- &:active {
- color: $white;
- }
-
&.van-button--primary {
- color: $bottom-action-button-primary-color;
background-color: $bottom-action-button-primary-background-color;
}
}
+
+ &--disabled {
+ color: $button-disabled-color;
+ background-color: $button-disabled-background-color;
+ border: 1px solid $button-disabled-border-color;
+ }
}
diff --git a/packages/vant-css/src/common/animation.css b/packages/vant-css/src/common/animation.css
new file mode 100644
index 000000000..070c8e1fc
--- /dev/null
+++ b/packages/vant-css/src/common/animation.css
@@ -0,0 +1,21 @@
+@keyframes van-slide-bottom-enter {
+ from {
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes van-slide-bottom-leave {
+ to {
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.van-slide-bottom {
+ &-enter-active {
+ animation: van-slide-bottom-enter .3s both ease;
+ }
+
+ &-leave-active {
+ animation: van-slide-bottom-leave .3s both ease;
+ }
+}
diff --git a/packages/vant-css/src/common/normalize.css b/packages/vant-css/src/common/normalize.css
index 5561d9e4b..a935e39f3 100644
--- a/packages/vant-css/src/common/normalize.css
+++ b/packages/vant-css/src/common/normalize.css
@@ -6,6 +6,10 @@ html {
-webkit-tap-highlight-color: transparent;
}
+body {
+ margin: 0;
+}
+
a {
text-decoration: none;
}
diff --git a/packages/vant-css/src/coupon-list.css b/packages/vant-css/src/coupon-list.css
index f13498e23..8c65692f6 100644
--- a/packages/vant-css/src/coupon-list.css
+++ b/packages/vant-css/src/coupon-list.css
@@ -4,6 +4,7 @@
.van-coupon {
&-list {
height: 100%;
+ position: relative;
background-color: $background-color;
&__top {
@@ -33,6 +34,7 @@
color: $gray-dark;
margin: 15px 0;
font-size: 14px;
+ font-weight: normal;
position: relative;
text-align: center;
@@ -105,7 +107,8 @@
h2 {
font-size: 22px;
- margin-bottom: 10px;
+ font-weight: normal;
+ margin: 0 0 10px;
span {
font-size: 16px;
@@ -113,6 +116,7 @@
}
p {
+ margin: 0;
font-size: 14px;
font-weight: 300;
@mixin multi-ellipsis 1;
@@ -132,8 +136,10 @@
border-radius: 0 4px 4px 0;
h2 {
+ margin: 0;
opacity: .8;
font-size: 16px;
+ font-weight: normal;
}
p,
diff --git a/packages/vant-css/src/goods-action.css b/packages/vant-css/src/goods-action.css
index ce80b3ce0..ce63f0009 100644
--- a/packages/vant-css/src/goods-action.css
+++ b/packages/vant-css/src/goods-action.css
@@ -17,6 +17,7 @@
height: 50px;
font-size: 10px;
min-width: 15%;
+ line-height: 1;
text-align: center;
background-color: $white;
flex-direction: column;
diff --git a/packages/vant-css/src/icon.css b/packages/vant-css/src/icon.css
index a58683465..08f66012d 100644
--- a/packages/vant-css/src/icon.css
+++ b/packages/vant-css/src/icon.css
@@ -2,11 +2,11 @@
@font-face {
font-family: 'vant-icon';
- src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-5e6d465ada.eot');
- src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-5e6d465ada.eot?#iefix') format('embedded-opentype'),
- url('https://b.yzcdn.cn/zanui/icon/vant-icon-5e6d465ada.woff2') format('woff2'),
- url('https://b.yzcdn.cn/zanui/icon/vant-icon-5e6d465ada.woff') format('woff'),
- url('https://b.yzcdn.cn/zanui/icon/vant-icon-5e6d465ada.ttf') format('truetype')
+ src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-6b495bd63f.eot');
+ src: url('https://b.yzcdn.cn/zanui/icon/vant-icon-6b495bd63f.eot?#iefix') format('embedded-opentype'),
+ url('https://b.yzcdn.cn/zanui/icon/vant-icon-6b495bd63f.woff2') format('woff2'),
+ url('https://b.yzcdn.cn/zanui/icon/vant-icon-6b495bd63f.woff') format('woff'),
+ url('https://b.yzcdn.cn/zanui/icon/vant-icon-6b495bd63f.ttf') format('truetype')
}
.van-icon {
@@ -121,4 +121,6 @@
.van-icon-gift-card:before { content: '\e847'; } /* '' */
.van-icon-coupon:before { content: '\e848'; } /* '' */
.van-icon-clock:before { content: '\e849'; } /* '' */
-.van-icon-gold-coin:before { content: '\e84a'; } /* '' */
\ No newline at end of file
+.van-icon-gold-coin:before { content: '\e84a'; } /* '' */
+.van-icon-completed:before { content: '\e84b'; } /* '' */
+.van-icon-value-card:before { content: '\e84c'; } /* '' */
\ No newline at end of file
diff --git a/packages/vant-css/src/index.css b/packages/vant-css/src/index.css
index 31bd8c8cc..dc819043f 100644
--- a/packages/vant-css/src/index.css
+++ b/packages/vant-css/src/index.css
@@ -34,6 +34,8 @@
@import './radio.css';
@import './switch.css';
@import './uploader.css';
+@import './password-input.css';
+@import './number-keyboard.css';
/* action components */
@import './actionsheet.css';
diff --git a/packages/vant-css/src/loading.css b/packages/vant-css/src/loading.css
index 94288eeb3..055031e79 100644
--- a/packages/vant-css/src/loading.css
+++ b/packages/vant-css/src/loading.css
@@ -41,8 +41,8 @@
}
&.van-loading__spinner--white {
- border-color: rgba(0, 0, 0, .5);
- border-top-color: transparent;
+ border-color: rgba(0, 0, 0, .1);
+ border-top-color: rgba(255, 255, 255, .7);
}
}
diff --git a/packages/vant-css/src/number-keyboard.css b/packages/vant-css/src/number-keyboard.css
new file mode 100644
index 000000000..fc2c4b39a
--- /dev/null
+++ b/packages/vant-css/src/number-keyboard.css
@@ -0,0 +1,52 @@
+@import "./common/var.css";
+
+.van-number-keyboard {
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ position: fixed;
+ user-select: none;
+ background-color: $white;
+ animation-timing-function: ease-out;
+
+ &__title {
+ font-weight: 400;
+ text-align: center;
+ color: $gray-dark;
+ font-size: 12px;
+ line-height: 25px;
+ }
+
+ i {
+ width: calc(100%/3);
+ height: 54px;
+ font-size: 24px;
+ line-height: 54px;
+ font-style: normal;
+ text-align: center;
+ display: inline-block;
+ vertical-align: middle;
+
+ &::after {
+ border-top-width: 1px;
+ }
+
+ &:not(:nth-of-type(3n))::after {
+ border-right-width: 1px;
+ }
+
+ &:nth-of-type(10),
+ &:nth-of-type(12) {
+ background-color: #F3F3F6;
+ }
+ }
+
+ &__delete {
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAeCAMAAABg6AyVAAAAbFBMVEUAAAAfHiIdHB4eHR8dHR4eHB4dHB4dHR8gICIdHB4dHB4dHB4dHB8eHh8hISEeHR8fHB8fHR8fHR8fHx8eHiArKyszMzMeHB8eHB8fHR8eHiAeHh4dHB4vLjDY2Nn////b29zKysq9vb28vLzkfBRpAAAAHHRSTlMAK/PW+I/llBv77N1kSCPwWlFAOTMGBb28hHlu08g5sgAAAMlJREFUOMuV1MsWgiAQgGHQyOx+s+sgYO//jnnMGIdDDfwbN99CYEDQFiVEKkolPUG7gl9VTWC31NKuDbVz+Fc1tRJtPDmxS2BS3p5ZC+XXnnbAVoz2WEBCH7uZAalzGoa06whGiznT6sG2xgX4QO2Aej1+KN7XBKL2FvGaMtTWBhbQhtoaYzVQrHKwuGf8hhAPSF5g3xPSt45sCHcouNWx436FGA+RHyQcD35EcUj54U8ff4WYvVi1zLjelUh/OG6XjOeLWv5hfAOI+HLwwOAqhAAAAABJRU5ErkJggg==") no-repeat center center;
+ background-size: auto 15px;
+ }
+
+ i&--active {
+ background-color: $active-color!important;
+ }
+}
diff --git a/packages/vant-css/src/password-input.css b/packages/vant-css/src/password-input.css
new file mode 100644
index 000000000..eb6a64982
--- /dev/null
+++ b/packages/vant-css/src/password-input.css
@@ -0,0 +1,59 @@
+@import "./common/var.css";
+
+.van-password-input {
+ margin: 0 15px;
+ user-select: none;
+ position: relative;
+
+ &:focus {
+ outline: none;
+ }
+
+ &__info,
+ &__error-info {
+ font-size: 14px;
+ margin-top: 15px;
+ text-align: center;
+ }
+
+ &__info {
+ color: $gray-dark;
+ }
+
+ &__error-info {
+ color: $red;
+ }
+
+ &__security {
+ width: 100%;
+ height: 50px;
+ display: flex;
+ background-color: $white;
+
+ &::after {
+ border-radius: 6px;
+ }
+
+ li {
+ flex: 1;
+ height: 100%;
+ position: relative;
+
+ &:not(:first-of-type)::after {
+ border-left-width: 1px;
+ }
+ }
+
+ i {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ width: 10px;
+ height: 10px;
+ margin: -5px 0 0 -5px;
+ visibility: hidden;
+ border-radius: 100%;
+ background-color: $black;
+ }
+ }
+}
diff --git a/packages/vant-css/src/search.css b/packages/vant-css/src/search.css
index 4c816f9d2..cc165a328 100644
--- a/packages/vant-css/src/search.css
+++ b/packages/vant-css/src/search.css
@@ -32,8 +32,12 @@
width: 100%;
height: 14px;
font-size: 14px;
- color: $gray-dark;
+ color: $gray-darker;
border: none;
+
+ &::placeholder {
+ color: $gray-dark;
+ }
}
&__cancel {
diff --git a/test/unit/components/number-keyboard.vue b/test/unit/components/number-keyboard.vue
new file mode 100644
index 000000000..b6cd28b8d
--- /dev/null
+++ b/test/unit/components/number-keyboard.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/test/unit/specs/coupon.spec.js b/test/unit/specs/coupon.spec.js
index 378edd553..45c5fe334 100644
--- a/test/unit/specs/coupon.spec.js
+++ b/test/unit/specs/coupon.spec.js
@@ -82,8 +82,7 @@ describe('CouponCell', () => {
DOMChecker(wrapper, {
text: {
- '.van-cell__value--link h2': '新手专用优惠券 省¥1.50',
- '.van-cell__value--link span': '下单立减 1.50 元'
+ '.van-cell__value--link div div': '新手专用优惠券 省¥1.50'
},
count: {
'.van-cell__right-icon': 1
@@ -102,8 +101,7 @@ describe('CouponCell', () => {
DOMChecker(wrapper, {
text: {
- '.van-cell__value h2': '新手专用优惠券 省¥1.50',
- '.van-cell__value span': '下单立减 1.50 元'
+ '.van-cell__value div div': '新手专用优惠券 省¥1.50'
},
count: {
'.van-cell__right-icon': 0
@@ -155,7 +153,6 @@ describe('CouponList', () => {
wrapper = mount(CouponList, {
attachToDocument: true,
propsData: {
- show: true,
chosenCoupon: -1,
coupons: [coupon, discountCoupon],
disabledCoupons: [disabledCoupon, disabledDiscountCoupon]
@@ -166,9 +163,7 @@ describe('CouponList', () => {
wrapper.vm.chosenCoupon = index;
});
- // 弹出 popup
setTimeout(() => {
- expect(wrapper.find('.van-coupon-list')[0].hasStyle('display', 'none')).to.equal(false);
wrapper.find('.van-coupon-item')[0].trigger('click');
setTimeout(() => {
@@ -182,7 +177,6 @@ describe('CouponList', () => {
wrapper = mount(CouponList, {
attachToDocument: true,
propsData: {
- show: false,
chosenCoupon: 0,
displayedCouponIndex: 0,
coupons: [coupon, discountCoupon],
@@ -190,8 +184,6 @@ describe('CouponList', () => {
}
});
- wrapper.vm.show = true;
-
wrapper.vm.$on('change', (index) => {
wrapper.vm.chosenCoupon = index;
wrapper.vm.displayedCouponIndex = index;
@@ -201,7 +193,6 @@ describe('CouponList', () => {
wrapper.find('.van-coupon-list__close')[0].trigger('click');
setTimeout(() => {
expect(wrapper.vm.chosenCoupon).to.equal(-1);
- expect(wrapper.find('.van-coupon-list')[0].hasStyle('display', 'none')).to.equal(true);
done();
}, 500);
}, 500);
@@ -257,7 +248,6 @@ describe('CouponList', () => {
wrapper = mount(CouponList, {
attachToDocument: true,
propsData: {
- show: true,
chosenCoupon: 0,
coupons: [coupon, discountCoupon, emptyCoupon],
disabledCoupons: [disabledCoupon, disabledDiscountCoupon]
@@ -307,7 +297,6 @@ describe('CouponList', () => {
it('displayedCouponIndex out of range', (done) => {
wrapper = mount(CouponList, {
propsData: {
- show: true,
displayedCouponIndex: -100,
coupons: [coupon, discountCoupon, emptyCoupon]
}
diff --git a/test/unit/specs/number-keyboard.spec.js b/test/unit/specs/number-keyboard.spec.js
new file mode 100644
index 000000000..d096722e4
--- /dev/null
+++ b/test/unit/specs/number-keyboard.spec.js
@@ -0,0 +1,160 @@
+import NumberKeyboard from 'packages/number-keyboard';
+import NumberKeyboardKeepAlive from '../components/number-keyboard';
+import { mount } from 'avoriaz';
+import { triggerTouch } from '../utils';
+
+function mockKeyDown(wrapper, keyIndex) {
+ const customEvent = document.createEvent('CustomEvent');
+ customEvent.initCustomEvent('touchstart', true, true, {});
+ wrapper.element.dataset.key = keyIndex;
+ wrapper.element.dispatchEvent(customEvent);
+}
+
+describe('NumberKeyboard', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('create a NumberKeyboard', () => {
+ wrapper = mount(NumberKeyboard, {});
+ expect(wrapper.hasClass('van-number-keyboard')).to.be.true;
+ });
+
+ it('click a keyboard key', (done) => {
+ wrapper = mount(NumberKeyboard, {});
+
+ // just for coverage
+ wrapper.vm.handler(true);
+
+ wrapper.vm.$on('input', value => {
+ expect(value).to.equal(1);
+ expect(wrapper.vm.active).to.equal(0);
+
+ triggerTouch(wrapper, 'touchend');
+ expect(wrapper.vm.active).to.equal(-1);
+ done();
+ });
+
+ mockKeyDown(wrapper, 9);
+ mockKeyDown(wrapper, NaN);
+ mockKeyDown(wrapper, 0);
+ });
+
+ it('click delete key', (done) => {
+ wrapper = mount(NumberKeyboard, {});
+
+ const deleteSpy = sinon.spy();
+ wrapper.vm.$on('delete', deleteSpy);
+
+ mockKeyDown(wrapper, 11);
+ wrapper.vm.$nextTick(() => {
+ expect(deleteSpy.calledOnce).to.be.true;
+ done();
+ });
+ });
+
+ it('blur keyboard', (done) => {
+ wrapper = mount(NumberKeyboard, {
+ attachToDocument: true
+ });
+
+ const blur = sinon.spy();
+ wrapper.vm.$on('blur', blur);
+
+ triggerTouch(document.body, 'touchstart');
+ wrapper.vm.$nextTick(() => {
+ expect(blur.calledOnce).to.be.true;
+ done();
+ });
+ });
+
+ it('listen to show event when has transtion', (done) => {
+ wrapper = mount(NumberKeyboard, {
+ attachToDocument: true
+ });
+
+ const show = sinon.spy();
+ wrapper.vm.$on('show', show);
+ wrapper.vm.show = true;
+ wrapper.trigger('animationend');
+
+ setTimeout(() => {
+ expect(show.calledOnce).to.be.true;
+ done();
+ }, 100);
+ });
+
+ it('listen to show event when no transtion', (done) => {
+ wrapper = mount(NumberKeyboard, {
+ attachToDocument: true,
+ propsData: {
+ transition: false
+ }
+ });
+
+ const show = sinon.spy();
+ wrapper.vm.$on('show', show);
+ wrapper.vm.show = true;
+
+ wrapper.vm.$nextTick(() => {
+ expect(show.calledOnce).to.be.true;
+ done();
+ });
+ });
+
+ it('listen to hide event when has transtion', (done) => {
+ wrapper = mount(NumberKeyboard, {
+ attachToDocument: true,
+ propsData: {
+ show: true
+ }
+ });
+
+ const hide = sinon.spy();
+ wrapper.vm.$on('hide', hide);
+ wrapper.vm.show = false;
+ wrapper.trigger('animationend');
+
+ setTimeout(() => {
+ expect(hide.calledOnce).to.be.true;
+ done();
+ }, 100);
+ });
+
+ it('listen to hide event when no transtion', (done) => {
+ wrapper = mount(NumberKeyboard, {
+ attachToDocument: true,
+ propsData: {
+ show: true,
+ transition: false
+ }
+ });
+
+ const hide = sinon.spy();
+ wrapper.vm.$on('hide', hide);
+ wrapper.vm.show = false;
+
+ wrapper.vm.$nextTick(() => {
+ expect(hide.calledOnce).to.be.true;
+ done();
+ });
+ });
+
+ it('keey-alive live cycle', (done) => {
+ wrapper = mount(NumberKeyboardKeepAlive, {
+ attachToDocument: true,
+ propsData: {
+ showKeyboard: true
+ }
+ });
+
+ expect(wrapper.find('.van-number-keyboard').length).to.equal(1);
+
+ wrapper.vm.showKeyboard = false;
+ wrapper.vm.$nextTick(() => {
+ expect(wrapper.find('.van-number-keyboard').length).to.equal(0);
+ done();
+ });
+ });
+});
diff --git a/test/unit/specs/password-input.spec.js b/test/unit/specs/password-input.spec.js
new file mode 100644
index 000000000..e5ce480d5
--- /dev/null
+++ b/test/unit/specs/password-input.spec.js
@@ -0,0 +1,56 @@
+import PasswordInput from 'packages/password-input';
+import { mount } from 'avoriaz';
+
+describe('PasswordInput', () => {
+ let wrapper;
+ afterEach(() => {
+ wrapper && wrapper.destroy();
+ });
+
+ it('create a PasswordInput', () => {
+ wrapper = mount(PasswordInput, {});
+ expect(wrapper.find('.van-password-input').length).to.equal(1);
+ });
+
+ it('create a PasswordInput with value && info', (done) => {
+ wrapper = mount(PasswordInput, {
+ propsData: {
+ value: '000',
+ info: '测试info'
+ }
+ });
+
+ expect(wrapper.find('.van-password-input i')[2].hasStyle('visibility', 'visible')).to.be.true;
+ expect(wrapper.find('.van-password-input i')[3].hasStyle('visibility', 'visible')).to.be.false;
+ expect(wrapper.find('.van-password-input__info')[0].text()).to.equal('测试info');
+
+ wrapper.vm.value = '0000';
+ wrapper.vm.errorInfo = '测试errorInfo';
+ wrapper.vm.$nextTick(() => {
+ expect(wrapper.find('.van-password-input i')[3].hasStyle('visibility', 'visible')).to.be.true;
+ expect(wrapper.find('.van-password-input__info').length).to.equal(0);
+ expect(wrapper.find('.van-password-input__error-info')[0].text()).to.equal('测试errorInfo');
+ done();
+ });
+ });
+
+ it('listen to focus event', () => {
+ wrapper = mount(PasswordInput, {});
+
+ const focus = sinon.spy();
+ wrapper.vm.$on('focus', focus);
+ wrapper.find('.van-password-input__security')[0].trigger('touchstart');
+
+ expect(focus.calledOnce).to.be.true;
+ });
+
+ it('change password length', () => {
+ wrapper = mount(PasswordInput, {
+ propsData: {
+ length: 2
+ }
+ });
+
+ expect(wrapper.find('.van-password-input i').length).to.equal(2);
+ });
+});
diff --git a/yarn.lock b/yarn.lock
index f62d7febb..e34c64473 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -323,14 +323,14 @@ autoprefixer@^6.3.1:
postcss-value-parser "^3.2.3"
autoprefixer@^7.1.3:
- version "7.1.3"
- resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.3.tgz#0e8d337976d6f13644db9f8813b4c42f3d1ccc34"
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.4.tgz#960847dbaa4016bc8e8e52ec891cbf8f1257a748"
dependencies:
browserslist "^2.4.0"
- caniuse-lite "^1.0.30000718"
+ caniuse-lite "^1.0.30000726"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^6.0.10"
+ postcss "^6.0.11"
postcss-value-parser "^3.2.3"
avoriaz@2.0.0:
@@ -1195,6 +1195,10 @@ caniuse-lite@^1.0.30000718:
version "1.0.30000718"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000718.tgz#0dd24290beb11310b2d80f6b70a823c2a65a6fad"
+caniuse-lite@^1.0.30000726:
+ version "1.0.30000727"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000727.tgz#20c895768398ded5f98a4beab4a76c285def41d2"
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@@ -1713,7 +1717,7 @@ cssesc@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-"cssnano@>=2.6.1 <4", cssnano@^3.4.0:
+"cssnano@>=2.6.1 <4":
version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
dependencies:
@@ -3343,7 +3347,7 @@ hawk@~3.1.3:
hoek "2.x.x"
sntp "1.x.x"
-he@1.1.x, he@^1.1.0:
+he@1.1.1, he@1.1.x, he@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
@@ -4132,13 +4136,6 @@ klaw@^1.0.0:
optionalDependencies:
graceful-fs "^4.1.9"
-last-call-webpack-plugin@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-2.1.1.tgz#bd7af41186b80e6cc3968eee5d65b250eaf791f1"
- dependencies:
- lodash "^4.17.4"
- webpack-sources "^1.0.1"
-
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
@@ -4758,8 +4755,8 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi
minimist "0.0.8"
mocha@^3.4.2:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.0.tgz#1328567d2717f997030f8006234bce9b8cd72465"
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d"
dependencies:
browser-stdout "1.3.0"
commander "2.9.0"
@@ -4768,6 +4765,7 @@ mocha@^3.4.2:
escape-string-regexp "1.0.5"
glob "7.1.1"
growl "1.9.2"
+ he "1.1.1"
json3 "3.3.2"
lodash.create "3.1.1"
mkdirp "0.5.1"
@@ -5075,13 +5073,6 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
-optimize-css-assets-webpack-plugin@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-3.1.1.tgz#b86f255a762d9143e3db41a64a136a6b76e8c8a7"
- dependencies:
- cssnano "^3.4.0"
- last-call-webpack-plugin "^2.1.1"
-
optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
@@ -5815,7 +5806,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.2.3"
-postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.10, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.9:
+postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6, postcss@^6.0.9:
version "6.0.10"
resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4"
dependencies:
@@ -5823,6 +5814,14 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.10, postcss@^6.0.2, postcss@^6.0.3,
source-map "^0.5.7"
supports-color "^4.2.1"
+postcss@^6.0.10, postcss@^6.0.11:
+ version "6.0.11"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.11.tgz#f48db210b1d37a7f7ab6499b7a54982997ab6f72"
+ dependencies:
+ chalk "^2.1.0"
+ source-map "^0.5.7"
+ supports-color "^4.4.0"
+
precss@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/precss/-/precss-2.0.0.tgz#7f567e3318e06d44c8fdbf9e58452e8358bf4b71"
@@ -6310,12 +6309,18 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies:
glob "^7.0.5"
+rimraf@^2.5.4:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
@@ -6825,6 +6830,12 @@ supports-color@^4.0.0, supports-color@^4.2.1:
dependencies:
has-flag "^2.0.0"
+supports-color@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
+ dependencies:
+ has-flag "^2.0.0"
+
svgo@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
@@ -7311,8 +7322,8 @@ vue-loader@^13.0.4:
vue-template-es2015-compiler "^1.5.3"
vue-markdown-loader@^2.1.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/vue-markdown-loader/-/vue-markdown-loader-2.1.0.tgz#112d1921dd56daa29906b7c012623c6c5d6e0d8c"
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/vue-markdown-loader/-/vue-markdown-loader-2.2.1.tgz#becf0c7455589eb27189fe78a9d5a283bb7acc00"
dependencies:
cheerio "^0.20.0"
highlight.js "^9.4.0"
@@ -7331,8 +7342,8 @@ vue-sfc-compiler@^0.0.2:
vue-template-es2015-compiler "^1.5.3"
vue-style-loader@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.0.1.tgz#c8b639bb2f24baf9d78274dc17e4f264c1deda08"
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.0.2.tgz#eaeb299729fa3ee54717e907ce3c1e425ebae729"
dependencies:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
@@ -7429,8 +7440,8 @@ webpack-sources@^1.0.1:
source-map "~0.5.3"
webpack@^3.5.5:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.5.tgz#3226f09fc8b3e435ff781e7af34f82b68b26996c"
+ version "3.5.6"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.6.tgz#a492fb6c1ed7f573816f90e00c8fbb5a20cc5c36"
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
@@ -7641,8 +7652,8 @@ yeast@0.1.2:
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
zan-doc@^0.2.12:
- version "0.2.12"
- resolved "https://registry.npmjs.org/zan-doc/-/zan-doc-0.2.12.tgz#bfbf9a7ec5a4b77a7f53ca1ac030b305432a91c5"
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/zan-doc/-/zan-doc-0.2.14.tgz#f5915e8e45fd10d2eae3e36d10949d22a7f9ac62"
dependencies:
cheerio "0.22.0"
decamelize "^1.2.0"