Просмотр исходного кода

chore: 更新常用依赖版本

zhangyuhan 1 год назад
Родитель
Сommit
fd413f0500
100 измененных файлов с 5802 добавлено и 0 удалено
  1. 0 0
      lib/axios/1.6.7/axios.min.js
  2. 7 0
      lib/vant/2.13.2/LICENSE
  3. 112 0
      lib/vant/2.13.2/README.md
  4. 127 0
      lib/vant/2.13.2/README.zh-CN.md
  5. 11 0
      lib/vant/2.13.2/changelog.generated.md
  6. 1 0
      lib/vant/2.13.2/es/action-sheet/index.css
  7. 180 0
      lib/vant/2.13.2/es/action-sheet/index.js
  8. 113 0
      lib/vant/2.13.2/es/action-sheet/index.less
  9. 7 0
      lib/vant/2.13.2/es/action-sheet/style/index.js
  10. 7 0
      lib/vant/2.13.2/es/action-sheet/style/less.js
  11. 116 0
      lib/vant/2.13.2/es/address-edit/Detail.js
  12. 1 0
      lib/vant/2.13.2/es/address-edit/index.css
  13. 495 0
      lib/vant/2.13.2/es/address-edit/index.js
  14. 45 0
      lib/vant/2.13.2/es/address-edit/index.less
  15. 16 0
      lib/vant/2.13.2/es/address-edit/style/index.js
  16. 16 0
      lib/vant/2.13.2/es/address-edit/style/less.js
  17. 107 0
      lib/vant/2.13.2/es/address-list/Item.js
  18. 1 0
      lib/vant/2.13.2/es/address-list/index.css
  19. 93 0
      lib/vant/2.13.2/es/address-list/index.js
  20. 97 0
      lib/vant/2.13.2/es/address-list/index.less
  21. 10 0
      lib/vant/2.13.2/es/address-list/style/index.js
  22. 10 0
      lib/vant/2.13.2/es/address-list/style/less.js
  23. 321 0
      lib/vant/2.13.2/es/area/index.js
  24. 3 0
      lib/vant/2.13.2/es/area/style/index.js
  25. 3 0
      lib/vant/2.13.2/es/area/style/less.js
  26. 1 0
      lib/vant/2.13.2/es/badge/index.css
  27. 68 0
      lib/vant/2.13.2/es/badge/index.js
  28. 38 0
      lib/vant/2.13.2/es/badge/index.less
  29. 2 0
      lib/vant/2.13.2/es/badge/style/index.js
  30. 2 0
      lib/vant/2.13.2/es/badge/style/less.js
  31. 0 0
      lib/vant/2.13.2/es/button/index.css
  32. 181 0
      lib/vant/2.13.2/es/button/index.js
  33. 190 0
      lib/vant/2.13.2/es/button/index.less
  34. 5 0
      lib/vant/2.13.2/es/button/style/index.js
  35. 5 0
      lib/vant/2.13.2/es/button/style/less.js
  36. 55 0
      lib/vant/2.13.2/es/calendar/components/Header.js
  37. 333 0
      lib/vant/2.13.2/es/calendar/components/Month.js
  38. 0 0
      lib/vant/2.13.2/es/calendar/index.css
  39. 553 0
      lib/vant/2.13.2/es/calendar/index.js
  40. 188 0
      lib/vant/2.13.2/es/calendar/index.less
  41. 9 0
      lib/vant/2.13.2/es/calendar/style/index.js
  42. 9 0
      lib/vant/2.13.2/es/calendar/style/less.js
  43. 66 0
      lib/vant/2.13.2/es/calendar/utils.js
  44. 1 0
      lib/vant/2.13.2/es/card/index.css
  45. 158 0
      lib/vant/2.13.2/es/card/index.js
  46. 109 0
      lib/vant/2.13.2/es/card/index.less
  47. 6 0
      lib/vant/2.13.2/es/card/style/index.js
  48. 6 0
      lib/vant/2.13.2/es/card/style/less.js
  49. 1 0
      lib/vant/2.13.2/es/cascader/index.css
  50. 284 0
      lib/vant/2.13.2/es/cascader/index.js
  51. 82 0
      lib/vant/2.13.2/es/cascader/index.less
  52. 7 0
      lib/vant/2.13.2/es/cascader/style/index.js
  53. 7 0
      lib/vant/2.13.2/es/cascader/style/less.js
  54. 1 0
      lib/vant/2.13.2/es/cell-group/index.css
  55. 41 0
      lib/vant/2.13.2/es/cell-group/index.js
  56. 22 0
      lib/vant/2.13.2/es/cell-group/index.less
  57. 2 0
      lib/vant/2.13.2/es/cell-group/style/index.js
  58. 2 0
      lib/vant/2.13.2/es/cell-group/style/less.js
  59. 1 0
      lib/vant/2.13.2/es/cell/index.css
  60. 121 0
      lib/vant/2.13.2/es/cell/index.js
  61. 103 0
      lib/vant/2.13.2/es/cell/index.less
  62. 24 0
      lib/vant/2.13.2/es/cell/shared.js
  63. 4 0
      lib/vant/2.13.2/es/cell/style/index.js
  64. 4 0
      lib/vant/2.13.2/es/cell/style/less.js
  65. 1 0
      lib/vant/2.13.2/es/checkbox-group/index.css
  66. 64 0
      lib/vant/2.13.2/es/checkbox-group/index.js
  67. 8 0
      lib/vant/2.13.2/es/checkbox-group/index.less
  68. 2 0
      lib/vant/2.13.2/es/checkbox-group/style/index.js
  69. 2 0
      lib/vant/2.13.2/es/checkbox-group/style/less.js
  70. 1 0
      lib/vant/2.13.2/es/checkbox/index.css
  71. 80 0
      lib/vant/2.13.2/es/checkbox/index.js
  72. 86 0
      lib/vant/2.13.2/es/checkbox/index.less
  73. 4 0
      lib/vant/2.13.2/es/checkbox/style/index.js
  74. 4 0
      lib/vant/2.13.2/es/checkbox/style/less.js
  75. 1 0
      lib/vant/2.13.2/es/circle/index.css
  76. 175 0
      lib/vant/2.13.2/es/circle/index.js
  77. 41 0
      lib/vant/2.13.2/es/circle/index.less
  78. 2 0
      lib/vant/2.13.2/es/circle/style/index.js
  79. 2 0
      lib/vant/2.13.2/es/circle/style/less.js
  80. 1 0
      lib/vant/2.13.2/es/col/index.css
  81. 55 0
      lib/vant/2.13.2/es/col/index.js
  82. 20 0
      lib/vant/2.13.2/es/col/index.less
  83. 2 0
      lib/vant/2.13.2/es/col/style/index.js
  84. 2 0
      lib/vant/2.13.2/es/col/style/less.js
  85. 1 0
      lib/vant/2.13.2/es/collapse-item/index.css
  86. 202 0
      lib/vant/2.13.2/es/collapse-item/index.js
  87. 69 0
      lib/vant/2.13.2/es/collapse-item/index.less
  88. 5 0
      lib/vant/2.13.2/es/collapse-item/style/index.js
  89. 5 0
      lib/vant/2.13.2/es/collapse-item/style/less.js
  90. 39 0
      lib/vant/2.13.2/es/collapse/index.js
  91. 1 0
      lib/vant/2.13.2/es/collapse/style/index.js
  92. 1 0
      lib/vant/2.13.2/es/collapse/style/less.js
  93. 1 0
      lib/vant/2.13.2/es/contact-card/index.css
  94. 59 0
      lib/vant/2.13.2/es/contact-card/index.js
  95. 42 0
      lib/vant/2.13.2/es/contact-card/index.less
  96. 5 0
      lib/vant/2.13.2/es/contact-card/style/index.js
  97. 5 0
      lib/vant/2.13.2/es/contact-card/style/less.js
  98. 1 0
      lib/vant/2.13.2/es/contact-edit/index.css
  99. 193 0
      lib/vant/2.13.2/es/contact-edit/index.js
  100. 30 0
      lib/vant/2.13.2/es/contact-edit/index.less

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
lib/axios/1.6.7/axios.min.js


+ 7 - 0
lib/vant/2.13.2/LICENSE

@@ -0,0 +1,7 @@
+Copyright 2016-present Youzan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 112 - 0
lib/vant/2.13.2/README.md

@@ -0,0 +1,112 @@
+<p align="center">
+    <img alt="logo" src="https://img01.yzcdn.cn/vant/logo.png" width="120" height="120" style="margin-bottom: 10px;">
+</p>
+
+<h1 align="center">Vant</h1>
+
+<p align="center">Mobile UI Components built on Vue</p>
+
+<p align="center">
+    <img src="https://img.shields.io/npm/v/vant.svg?style=flat-square" alt="npm version" />
+    <img src="https://img.shields.io/github/workflow/status/vant-ui/vant/CI/dev?style=flat-square" alt="npm version" />
+    <img src="https://img.shields.io/codecov/c/github/vant-ui/vant/dev.svg?style=flat-square&color=#4fc08d" alt="Coverage Status" />
+    <img src="https://img.shields.io/npm/dm/vant.svg?style=flat-square&color=#4fc08d" alt="downloads" />
+    <img src="https://img.shields.io/jsdelivr/npm/hm/vant?style=flat-square" alt="Jsdelivr Hits">
+    <img src="https://img.badgesize.io/https://unpkg.com/vant/lib/vant.min.js?compression=gzip&style=flat-square&label=gzip%20size&color=#4fc08d" alt="Gzip Size" />
+</p>
+
+<p align="center">
+  🔥 <a href="https://vant-contrib.gitee.io/vant">文档网站</a>
+  &nbsp;
+  &nbsp;
+  🇨🇳 <a href="./README.zh-CN.md">中文版介绍</a>
+  &nbsp;
+  &nbsp;
+  🚀 <a href="https://github.com/vant-ui/vant-weapp" target="_blank">小程序版</a>
+</p>
+
+---
+
+## Features
+
+- 🚀 1KB Component average size (min+gzip)
+- 🚀 65+ High quality components
+- 💪 90%+ Unit test coverage
+- 💪 Written in TypeScript
+- 📖 Extensive documentation and demos
+- 📖 Provide Sketch and Axure design resources
+- 🍭 Support Vue 2 & Vue 3
+- 🍭 Support Tree Shaking
+- 🍭 Support Custom Theme
+- 🍭 Support i18n
+- 🌍 Support SSR
+
+## Install
+
+```bash
+# Install latest Vant for Vue 3 project
+npm i vant -S
+
+# Install Vant 2 for Vue 2 project
+npm i vant@latest-v2 -S
+```
+
+## Quickstart
+
+```js
+import Vue from 'vue';
+import { Button } from 'vant';
+import 'vant/lib/index.css';
+
+Vue.use(Button);
+```
+
+See more in [Quickstart](https://vant-ui.github.io/vant#/en-US/quickstart).
+
+## Contribution
+
+Please make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.
+
+## Browser Support
+
+Vant 2 supports modern browsers and Android >= 4.0、iOS >= 8.0.
+
+Vant 3 supports modern browsers and Chrome >= 51、iOS >= 10.0 (same as Vue 3).
+
+## Official Ecosystem
+
+| Project | Description |
+| --- | --- |
+| [vant-weapp](https://github.com/vant-ui/vant-weapp) | WeChat MiniProgram UI |
+| [vant-demo](https://github.com/vant-ui/vant-demo) | Collection of Vant demos |
+| [vant-cli](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli) | Scaffold for UI library |
+| [vant-icons](https://github.com/vant-ui/vant/tree/dev/packages/vant-icons) | Vant icons |
+| [vant-touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator) | Using vant in desktop browsers |
+
+## Community Ecosystem
+
+| Project | Description |
+| --- | --- |
+| [3lang3/react-vant](https://github.com/3lang3/react-vant) | React mobile UI Components based on Vant |
+| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | Mobile UI Components built on React and TS, inspired by Vant |
+| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Alipay MiniProgram UI |
+| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro |
+| [vant-theme](https://github.com/Aisen60/vant-theme) | Online theme preview built on Vant UI |
+| [@antmjs/vantui](https://github.com/antmjs/vantui) | Mobile UI Components based on Vant, supporting Taro and React |
+| [@formily/vant](https://github.com/formilyjs/vant) | Form solution based on Vant and Formily |
+
+## Links
+
+- [Documentation](https://vant-ui.github.io/vant)
+- [Changelog](https://vant-ui.github.io/vant#/en-US/changelog)
+- [Gitter](https://gitter.im/vant-contrib/discuss?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
+
+## Preview
+
+You can scan the following QR code to access the demo:
+
+<img src="https://img01.yzcdn.cn/vant/preview_qrcode_20180528.png" width="220" height="220" >
+
+## LICENSE
+
+[MIT](https://en.wikipedia.org/wiki/MIT_License)

+ 127 - 0
lib/vant/2.13.2/README.zh-CN.md

@@ -0,0 +1,127 @@
+<p align="center">
+    <img alt="logo" src="https://img01.yzcdn.cn/vant/logo.png" width="120" style="margin-bottom: 10px;">
+</p>
+
+<h1 align="center">Vant</h1>
+
+<p align="center">轻量、可靠的移动端 Vue 组件库</p>
+
+<p align="center">
+    <img src="https://img.shields.io/npm/v/vant.svg?style=flat-square" alt="npm version" />
+    <img src="https://img.shields.io/github/workflow/status/vant-ui/vant/CI/dev?style=flat-square" alt="npm version" />
+    <img src="https://img.shields.io/codecov/c/github/vant-ui/vant/dev.svg?style=flat-square&color=#4fc08d" alt="Coverage Status" />
+    <img src="https://img.shields.io/npm/dm/vant.svg?style=flat-square&color=#4fc08d" alt="downloads" />
+    <img src="https://img.shields.io/jsdelivr/npm/hm/vant?style=flat-square" alt="Jsdelivr Hits">
+    <img src="https://img.badgesize.io/https://unpkg.com/vant/lib/vant.min.js?compression=gzip&style=flat-square&label=gzip%20size&color=#4fc08d" alt="Gzip Size" />
+</p>
+
+<p align="center">
+  🔥 <a href="https://vant-contrib.gitee.io/vant">文档网站</a>
+  &nbsp;
+  &nbsp;
+  🚀 <a href="https://github.com/vant-ui/vant-weapp" target="_blank">小程序版</a>
+</p>
+
+---
+
+### 介绍
+
+Vant 是一个**轻量、可靠的移动端组件库**,于 2017 年开源。
+
+目前 Vant 官方提供了 [Vue 2 版本](https://vant-contrib.gitee.io/vant/v2)、[Vue 3 版本](https://vant-contrib.gitee.io/vant)和[微信小程序版本](http://vant-contrib.gitee.io/vant-weapp),并由社区团队维护 [React 版本](https://github.com/3lang3/react-vant)和[支付宝小程序版本](https://github.com/ant-move/Vant-Aliapp)。
+
+## 特性
+
+- 🚀 性能极佳,组件平均体积小于 1KB(min+gzip)
+- 🚀 65+ 个高质量组件,覆盖移动端主流场景
+- 💪 使用 TypeScript 编写,提供完整的类型定义
+- 💪 单元测试覆盖率超过 90%,提供稳定性保障
+- 📖 提供完善的中英文文档和组件示例
+- 📖 提供 Sketch 和 Axure 设计资源
+- 🍭 支持 Vue 2、Vue 3 和微信小程序
+- 🍭 支持主题定制,内置 700+ 个主题变量
+- 🍭 支持按需引入和 Tree Shaking
+- 🍭 支持服务器端渲染
+- 🌍 支持国际化和语言包定制
+
+## 安装
+
+```bash
+# Vue 3 项目,安装最新版 Vant:
+npm i vant -S
+
+# Vue 2 项目,安装 Vant 2:
+npm i vant@latest-v2 -S
+```
+
+## 快速上手
+
+```js
+import Vue from 'vue';
+import { Button } from 'vant';
+import 'vant/lib/index.css';
+
+Vue.use(Button);
+```
+
+vant 也支持按需引入、CDN 引入等方式,详细说明见 [快速上手](https://vant-contrib.gitee.io/vant#/zh-CN/quickstart).
+
+## 贡献代码
+
+修改代码请阅读我们的 [开发指南](https://vant-contrib.gitee.io/vant/#/zh-CN/contribution)。
+
+使用过程中发现任何问题都可以提 [Issue](https://github.com/vant-ui/vant/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://github.com/vant-ui/vant/pulls)。
+
+## 浏览器支持
+
+Vant 2 支持现代浏览器以及 Android >= 4.0、iOS >= 8.0。
+
+Vant 3 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一致)。
+
+## 官方生态
+
+由 Vant 官方团队维护的项目如下:
+
+| 项目 | 描述 |
+| --- | --- |
+| [vant-weapp](https://github.com/vant-ui/vant-weapp) | Vant 微信小程序版 |
+| [vant-demo](https://github.com/vant-ui/vant-demo) | Vant 官方示例合集 |
+| [vant-cli](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli) | 开箱即用的组件库搭建工具 |
+| [vant-icons](https://github.com/vant-ui/vant/tree/dev/packages/vant-icons) | Vant 图标库 |
+| [vant-touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator) | 在桌面端使用 Vant 的辅助库 |
+
+## 社区生态
+
+由社区维护的项目如下,欢迎补充:
+
+| 项目 | 描述 |
+| --- | --- |
+| [3lang3/react-vant](https://github.com/3lang3/react-vant) | 参照 Vant 打造的 React 移动端组件库 |
+| [mxdi9i7/vant-react](https://github.com/mxdi9i7/vant-react) | 基于 React 和 TS 构建的移动端组件库 |
+| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Vant 支付宝小程序版 |
+| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro 版 |
+| [vant-theme](https://github.com/Aisen60/vant-theme) | Vant 在线主题预览工具 |
+| [@antmjs/vantui](https://github.com/antmjs/vantui) | 基于 Vant Weapp 开发的多端组件库,同时支持 Taro 和 React |
+| [@formily/vant](https://github.com/formilyjs/vant) | 基于 Vant 和 Formily 开发的表单解决方案 |
+
+## 链接
+
+- [详细文档](https://vant-contrib.gitee.io/vant)
+- [更新日志](https://vant-contrib.gitee.io/vant#/zh-CN/changelog)
+- [Gitter 讨论组](https://gitter.im/vant-contrib/discuss?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
+
+## 手机预览
+
+可以手机扫码以下二维码访问手机端 demo:
+
+<img src="https://img01.yzcdn.cn/vant/preview_qrcode_20180528.png" width="220" height="220" >
+
+## 微信讨论群
+
+欢迎大家加入 Vant 交流群一起讨论,添加下方微信并注明『加入 Vant 交流群』即可
+
+<img src="https://img01.yzcdn.cn/vant/wechat_20180606.png" width="220" height="292" >
+
+## 开源协议
+
+本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议,请自由地享受和参与开源。

+ 11 - 0
lib/vant/2.13.2/changelog.generated.md

@@ -0,0 +1,11 @@
+### [v2.13.2](https://github.com/vant-ui/vant/compare/v2.13.1...v2.13.2)
+
+`2023-10-17`
+
+**Document**
+
+- changelog [c0b1e5](https://github.com/vant-ui/vant/commit/c0b1e51d7d01b3c5412cd89e5efd95f3398d3da0)
+
+**Feature**
+
+- Sku: add more slots about sku-messages [#12368](https://github.com/vant-ui/vant/issues/12368)

+ 1 - 0
lib/vant/2.13.2/es/action-sheet/index.css

@@ -0,0 +1 @@
+.van-action-sheet{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;max-height:80%;overflow:hidden;color:#323233}.van-action-sheet__content{-webkit-box-flex:1;-webkit-flex:1 auto;flex:1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch}.van-action-sheet__cancel,.van-action-sheet__item{display:block;width:100%;padding:14px 16px;font-size:16px;background-color:#fff;border:none;cursor:pointer}.van-action-sheet__cancel:active,.van-action-sheet__item:active{background-color:#f2f3f5}.van-action-sheet__item{line-height:22px}.van-action-sheet__item--disabled,.van-action-sheet__item--loading{color:#c8c9cc}.van-action-sheet__item--disabled:active,.van-action-sheet__item--loading:active{background-color:#fff}.van-action-sheet__item--disabled{cursor:not-allowed}.van-action-sheet__item--loading{cursor:default}.van-action-sheet__cancel{-webkit-flex-shrink:0;flex-shrink:0;box-sizing:border-box;color:#646566}.van-action-sheet__subname{margin-top:8px;color:#969799;font-size:12px;line-height:18px}.van-action-sheet__gap{display:block;height:8px;background-color:#f7f8fa}.van-action-sheet__header{-webkit-flex-shrink:0;flex-shrink:0;font-weight:500;font-size:16px;line-height:48px;text-align:center}.van-action-sheet__description{position:relative;-webkit-flex-shrink:0;flex-shrink:0;padding:20px 16px;color:#969799;font-size:14px;line-height:20px;text-align:center}.van-action-sheet__description::after{position:absolute;box-sizing:border-box;content:' ';pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-action-sheet__loading-icon .van-loading__spinner{width:22px;height:22px}.van-action-sheet__close{position:absolute;top:0;right:0;z-index:1;padding:0 16px;color:#c8c9cc;font-size:22px;line-height:inherit}.van-action-sheet__close:active{color:#969799}

+ 180 - 0
lib/vant/2.13.2/es/action-sheet/index.js

@@ -0,0 +1,180 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+import Vue from 'vue'; // Utils
+
+import { createNamespace } from '../utils';
+import { emit, inherit } from '../utils/functional'; // Mixins
+
+import { popupMixinProps } from '../mixins/popup'; // Components
+
+import Icon from '../icon';
+import Popup from '../popup';
+import Loading from '../loading'; // Types
+
+var _createNamespace = createNamespace('action-sheet'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function ActionSheet(h, props, slots, ctx) {
+  var title = props.title,
+      cancelText = props.cancelText,
+      closeable = props.closeable;
+
+  function onCancel() {
+    emit(ctx, 'input', false);
+    emit(ctx, 'cancel');
+  }
+
+  function Header() {
+    if (title) {
+      return h("div", {
+        "class": bem('header')
+      }, [title, closeable && h(Icon, {
+        "attrs": {
+          "name": props.closeIcon
+        },
+        "class": bem('close'),
+        "on": {
+          "click": onCancel
+        }
+      })]);
+    }
+  }
+
+  function Option(item, index) {
+    var disabled = item.disabled,
+        loading = item.loading,
+        callback = item.callback;
+
+    function onClickOption(event) {
+      event.stopPropagation();
+
+      if (disabled || loading) {
+        return;
+      }
+
+      if (callback) {
+        callback(item);
+      }
+
+      if (props.closeOnClickAction) {
+        emit(ctx, 'input', false);
+      }
+
+      Vue.nextTick(function () {
+        emit(ctx, 'select', item, index);
+      });
+    }
+
+    function OptionContent() {
+      if (loading) {
+        return h(Loading, {
+          "class": bem('loading-icon')
+        });
+      }
+
+      return [h("span", {
+        "class": bem('name')
+      }, [item.name]), item.subname && h("div", {
+        "class": bem('subname')
+      }, [item.subname])];
+    }
+
+    return h("button", {
+      "attrs": {
+        "type": "button"
+      },
+      "class": [bem('item', {
+        disabled: disabled,
+        loading: loading
+      }), item.className],
+      "style": {
+        color: item.color
+      },
+      "on": {
+        "click": onClickOption
+      }
+    }, [OptionContent()]);
+  }
+
+  function CancelText() {
+    if (cancelText) {
+      return [h("div", {
+        "class": bem('gap')
+      }), h("button", {
+        "attrs": {
+          "type": "button"
+        },
+        "class": bem('cancel'),
+        "on": {
+          "click": onCancel
+        }
+      }, [cancelText])];
+    }
+  }
+
+  function Description() {
+    var description = (slots.description == null ? void 0 : slots.description()) || props.description;
+
+    if (description) {
+      return h("div", {
+        "class": bem('description')
+      }, [description]);
+    }
+  }
+
+  return h(Popup, _mergeJSXProps([{
+    "class": bem(),
+    "attrs": {
+      "position": "bottom",
+      "round": props.round,
+      "value": props.value,
+      "overlay": props.overlay,
+      "duration": props.duration,
+      "lazyRender": props.lazyRender,
+      "lockScroll": props.lockScroll,
+      "getContainer": props.getContainer,
+      "closeOnPopstate": props.closeOnPopstate,
+      "closeOnClickOverlay": props.closeOnClickOverlay,
+      "safeAreaInsetBottom": props.safeAreaInsetBottom
+    }
+  }, inherit(ctx, true)]), [Header(), Description(), h("div", {
+    "class": bem('content')
+  }, [props.actions && props.actions.map(Option), slots.default == null ? void 0 : slots.default()]), CancelText()]);
+}
+
+ActionSheet.props = _extends({}, popupMixinProps, {
+  title: String,
+  actions: Array,
+  duration: [Number, String],
+  cancelText: String,
+  description: String,
+  getContainer: [String, Function],
+  closeOnPopstate: Boolean,
+  closeOnClickAction: Boolean,
+  round: {
+    type: Boolean,
+    default: true
+  },
+  closeable: {
+    type: Boolean,
+    default: true
+  },
+  closeIcon: {
+    type: String,
+    default: 'cross'
+  },
+  safeAreaInsetBottom: {
+    type: Boolean,
+    default: true
+  },
+  overlay: {
+    type: Boolean,
+    default: true
+  },
+  closeOnClickOverlay: {
+    type: Boolean,
+    default: true
+  }
+});
+export default createComponent(ActionSheet);

+ 113 - 0
lib/vant/2.13.2/es/action-sheet/index.less

@@ -0,0 +1,113 @@
+@import '../style/var';
+@import '../style/mixins/hairline';
+
+.van-action-sheet {
+  display: flex;
+  flex-direction: column;
+  max-height: @action-sheet-max-height;
+  overflow: hidden;
+  color: @action-sheet-item-text-color;
+
+  &__content {
+    flex: 1 auto;
+    overflow-y: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+
+  &__item,
+  &__cancel {
+    display: block;
+    width: 100%;
+    padding: 14px @padding-md;
+    font-size: @action-sheet-item-font-size;
+    background-color: @action-sheet-item-background;
+    border: none;
+    cursor: pointer;
+
+    &:active {
+      background-color: @active-color;
+    }
+  }
+
+  &__item {
+    line-height: @action-sheet-item-line-height;
+
+    &--loading,
+    &--disabled {
+      color: @action-sheet-item-disabled-text-color;
+
+      &:active {
+        background-color: @action-sheet-item-background;
+      }
+    }
+
+    &--disabled {
+      cursor: not-allowed;
+    }
+
+    &--loading {
+      cursor: default;
+    }
+  }
+
+  &__cancel {
+    flex-shrink: 0;
+    box-sizing: border-box;
+    color: @action-sheet-cancel-text-color;
+  }
+
+  &__subname {
+    margin-top: @padding-xs;
+    color: @action-sheet-subname-color;
+    font-size: @action-sheet-subname-font-size;
+    line-height: @action-sheet-subname-line-height;
+  }
+
+  &__gap {
+    display: block;
+    height: @action-sheet-cancel-padding-top;
+    background-color: @action-sheet-cancel-padding-color;
+  }
+
+  &__header {
+    flex-shrink: 0;
+    font-weight: @font-weight-bold;
+    font-size: @action-sheet-header-font-size;
+    line-height: @action-sheet-header-height;
+    text-align: center;
+  }
+
+  &__description {
+    position: relative;
+    flex-shrink: 0;
+    padding: 20px @padding-md;
+    color: @action-sheet-description-color;
+    font-size: @action-sheet-description-font-size;
+    line-height: @action-sheet-description-line-height;
+    text-align: center;
+
+    &::after {
+      .hairline-bottom(@cell-border-color, @padding-md, @padding-md);
+    }
+  }
+
+  &__loading-icon .van-loading__spinner {
+    width: @action-sheet-loading-icon-size;
+    height: @action-sheet-loading-icon-size;
+  }
+
+  &__close {
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 1;
+    padding: @action-sheet-close-icon-padding;
+    color: @action-sheet-close-icon-color;
+    font-size: @action-sheet-close-icon-size;
+    line-height: inherit;
+
+    &:active {
+      color: @action-sheet-close-icon-active-color;
+    }
+  }
+}

+ 7 - 0
lib/vant/2.13.2/es/action-sheet/style/index.js

@@ -0,0 +1,7 @@
+import '../../style/base.css';
+import '../../overlay/index.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../popup/index.css';
+import '../../loading/index.css';
+import '../index.css';

+ 7 - 0
lib/vant/2.13.2/es/action-sheet/style/less.js

@@ -0,0 +1,7 @@
+import '../../style/base.less';
+import '../../overlay/index.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../popup/index.less';
+import '../../loading/index.less';
+import '../index.less';

+ 116 - 0
lib/vant/2.13.2/es/address-edit/Detail.js

@@ -0,0 +1,116 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+// Utils
+import { createNamespace } from '../utils';
+import { isAndroid } from '../utils/validate/system'; // Components
+
+import Cell from '../cell';
+import Field from '../field';
+
+var _createNamespace = createNamespace('address-edit-detail'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+var android = isAndroid();
+export default createComponent({
+  props: {
+    value: String,
+    errorMessage: String,
+    focused: Boolean,
+    detailRows: [Number, String],
+    searchResult: Array,
+    detailMaxlength: [Number, String],
+    showSearchResult: Boolean
+  },
+  computed: {
+    shouldShowSearchResult: function shouldShowSearchResult() {
+      return this.focused && this.searchResult && this.showSearchResult;
+    }
+  },
+  methods: {
+    onSelect: function onSelect(express) {
+      this.$emit('select-search', express);
+      this.$emit('input', ((express.address || '') + " " + (express.name || '')).trim());
+    },
+    onFinish: function onFinish() {
+      this.$refs.field.blur();
+    },
+    genFinish: function genFinish() {
+      var h = this.$createElement;
+      var show = this.value && this.focused && android;
+
+      if (show) {
+        return h("div", {
+          "class": bem('finish'),
+          "on": {
+            "click": this.onFinish
+          }
+        }, [t('complete')]);
+      }
+    },
+    genSearchResult: function genSearchResult() {
+      var _this = this;
+
+      var h = this.$createElement;
+      var value = this.value,
+          shouldShowSearchResult = this.shouldShowSearchResult,
+          searchResult = this.searchResult;
+
+      if (shouldShowSearchResult) {
+        return searchResult.map(function (express) {
+          return h(Cell, {
+            "key": express.name + express.address,
+            "attrs": {
+              "clickable": true,
+              "border": false,
+              "icon": "location-o",
+              "label": express.address
+            },
+            "class": bem('search-item'),
+            "on": {
+              "click": function click() {
+                _this.onSelect(express);
+              }
+            },
+            "scopedSlots": {
+              title: function title() {
+                if (express.name) {
+                  var text = express.name.replace(value, "<span class=" + bem('keyword') + ">" + value + "</span>");
+                  return h("div", {
+                    "domProps": {
+                      "innerHTML": text
+                    }
+                  });
+                }
+              }
+            }
+          });
+        });
+      }
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h(Cell, {
+      "class": bem()
+    }, [h(Field, {
+      "attrs": {
+        "autosize": true,
+        "rows": this.detailRows,
+        "clearable": !android,
+        "type": "textarea",
+        "value": this.value,
+        "errorMessage": this.errorMessage,
+        "border": !this.shouldShowSearchResult,
+        "label": t('label'),
+        "maxlength": this.detailMaxlength,
+        "placeholder": t('placeholder')
+      },
+      "ref": "field",
+      "scopedSlots": {
+        icon: this.genFinish
+      },
+      "on": _extends({}, this.$listeners)
+    }), this.genSearchResult()]);
+  }
+});

+ 1 - 0
lib/vant/2.13.2/es/address-edit/index.css

@@ -0,0 +1 @@
+.van-address-edit{padding:12px}.van-address-edit__fields{overflow:hidden;border-radius:8px}.van-address-edit__fields .van-field__label{width:4.1em}.van-address-edit__default{margin-top:12px;overflow:hidden;border-radius:8px}.van-address-edit__buttons{padding:32px 4px}.van-address-edit__buttons .van-button{margin-bottom:12px}.van-address-edit-detail{padding:0}.van-address-edit-detail__search-item{background-color:#f2f3f5}.van-address-edit-detail__keyword{color:#ee0a24}.van-address-edit-detail__finish{color:#1989fa;font-size:12px}

+ 495 - 0
lib/vant/2.13.2/es/address-edit/index.js

@@ -0,0 +1,495 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+// Utils
+import { createNamespace, isObject } from '../utils';
+import { isMobile } from '../utils/validate/mobile'; // Components
+
+import Area from '../area';
+import Cell from '../cell';
+import Field from '../field';
+import Popup from '../popup';
+import Toast from '../toast';
+import Button from '../button';
+import Dialog from '../dialog';
+import Detail from './Detail';
+import Switch from '../switch';
+
+var _createNamespace = createNamespace('address-edit'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+var defaultData = {
+  name: '',
+  tel: '',
+  country: '',
+  province: '',
+  city: '',
+  county: '',
+  areaCode: '',
+  postalCode: '',
+  addressDetail: '',
+  isDefault: false
+};
+
+function isPostal(value) {
+  return /^\d{6}$/.test(value);
+}
+
+export default createComponent({
+  props: {
+    areaList: Object,
+    isSaving: Boolean,
+    isDeleting: Boolean,
+    validator: Function,
+    showDelete: Boolean,
+    showPostal: Boolean,
+    searchResult: Array,
+    telMaxlength: [Number, String],
+    showSetDefault: Boolean,
+    saveButtonText: String,
+    areaPlaceholder: String,
+    deleteButtonText: String,
+    showSearchResult: Boolean,
+    showArea: {
+      type: Boolean,
+      default: true
+    },
+    showDetail: {
+      type: Boolean,
+      default: true
+    },
+    disableArea: Boolean,
+    detailRows: {
+      type: [Number, String],
+      default: 1
+    },
+    detailMaxlength: {
+      type: [Number, String],
+      default: 200
+    },
+    addressInfo: {
+      type: Object,
+      default: function _default() {
+        return _extends({}, defaultData);
+      }
+    },
+    telValidator: {
+      type: Function,
+      default: isMobile
+    },
+    postalValidator: {
+      type: Function,
+      default: isPostal
+    },
+    areaColumnsPlaceholder: {
+      type: Array,
+      default: function _default() {
+        return [];
+      }
+    }
+  },
+  data: function data() {
+    return {
+      data: {},
+      showAreaPopup: false,
+      detailFocused: false,
+      errorInfo: {
+        tel: '',
+        name: '',
+        areaCode: '',
+        postalCode: '',
+        addressDetail: ''
+      }
+    };
+  },
+  computed: {
+    areaListLoaded: function areaListLoaded() {
+      return isObject(this.areaList) && Object.keys(this.areaList).length;
+    },
+    areaText: function areaText() {
+      var _this$data = this.data,
+          country = _this$data.country,
+          province = _this$data.province,
+          city = _this$data.city,
+          county = _this$data.county,
+          areaCode = _this$data.areaCode;
+
+      if (areaCode) {
+        var arr = [country, province, city, county];
+
+        if (province && province === city) {
+          arr.splice(1, 1);
+        }
+
+        return arr.filter(function (text) {
+          return text;
+        }).join('/');
+      }
+
+      return '';
+    },
+    // hide bottom field when use search && detail get focused
+    hideBottomFields: function hideBottomFields() {
+      var searchResult = this.searchResult;
+      return searchResult && searchResult.length && this.detailFocused;
+    }
+  },
+  watch: {
+    addressInfo: {
+      handler: function handler(val) {
+        this.data = _extends({}, defaultData, val);
+        this.setAreaCode(val.areaCode);
+      },
+      deep: true,
+      immediate: true
+    },
+    areaList: function areaList() {
+      this.setAreaCode(this.data.areaCode);
+    }
+  },
+  methods: {
+    onFocus: function onFocus(key) {
+      this.errorInfo[key] = '';
+      this.detailFocused = key === 'addressDetail';
+      this.$emit('focus', key);
+    },
+    onChangeDetail: function onChangeDetail(val) {
+      this.data.addressDetail = val;
+      this.$emit('change-detail', val);
+    },
+    onAreaConfirm: function onAreaConfirm(values) {
+      values = values.filter(function (value) {
+        return !!value;
+      });
+
+      if (values.some(function (value) {
+        return !value.code;
+      })) {
+        Toast(t('areaEmpty'));
+        return;
+      }
+
+      this.showAreaPopup = false;
+      this.assignAreaValues();
+      this.$emit('change-area', values);
+    },
+    assignAreaValues: function assignAreaValues() {
+      var area = this.$refs.area;
+
+      if (area) {
+        var detail = area.getArea();
+        detail.areaCode = detail.code;
+        delete detail.code;
+
+        _extends(this.data, detail);
+      }
+    },
+    onSave: function onSave() {
+      var _this = this;
+
+      var items = ['name', 'tel'];
+
+      if (this.showArea) {
+        items.push('areaCode');
+      }
+
+      if (this.showDetail) {
+        items.push('addressDetail');
+      }
+
+      if (this.showPostal) {
+        items.push('postalCode');
+      }
+
+      var isValid = items.every(function (item) {
+        var msg = _this.getErrorMessage(item);
+
+        if (msg) {
+          _this.errorInfo[item] = msg;
+        }
+
+        return !msg;
+      });
+
+      if (isValid && !this.isSaving) {
+        this.$emit('save', this.data);
+      }
+    },
+    getErrorMessage: function getErrorMessage(key) {
+      var value = String(this.data[key] || '').trim();
+
+      if (this.validator) {
+        var message = this.validator(key, value);
+
+        if (message) {
+          return message;
+        }
+      }
+
+      switch (key) {
+        case 'name':
+          return value ? '' : t('nameEmpty');
+
+        case 'tel':
+          return this.telValidator(value) ? '' : t('telInvalid');
+
+        case 'areaCode':
+          return value ? '' : t('areaEmpty');
+
+        case 'addressDetail':
+          return value ? '' : t('addressEmpty');
+
+        case 'postalCode':
+          return value && !this.postalValidator(value) ? t('postalEmpty') : '';
+      }
+    },
+    onDelete: function onDelete() {
+      var _this2 = this;
+
+      Dialog.confirm({
+        title: t('confirmDelete')
+      }).then(function () {
+        _this2.$emit('delete', _this2.data);
+      }).catch(function () {
+        _this2.$emit('cancel-delete', _this2.data);
+      });
+    },
+    // get values of area component
+    getArea: function getArea() {
+      return this.$refs.area ? this.$refs.area.getValues() : [];
+    },
+    // set area code to area component
+    setAreaCode: function setAreaCode(code) {
+      this.data.areaCode = code || '';
+
+      if (code) {
+        this.$nextTick(this.assignAreaValues);
+      }
+    },
+    // @exposed-api
+    setAddressDetail: function setAddressDetail(value) {
+      this.data.addressDetail = value;
+    },
+    onDetailBlur: function onDetailBlur() {
+      var _this3 = this;
+
+      // await for click search event
+      setTimeout(function () {
+        _this3.detailFocused = false;
+      });
+    },
+    genSetDefaultCell: function genSetDefaultCell(h) {
+      var _this4 = this;
+
+      if (this.showSetDefault) {
+        var slots = {
+          'right-icon': function rightIcon() {
+            return h(Switch, {
+              "attrs": {
+                "size": "24"
+              },
+              "on": {
+                "change": function change(event) {
+                  _this4.$emit('change-default', event);
+                }
+              },
+              "model": {
+                value: _this4.data.isDefault,
+                callback: function callback($$v) {
+                  _this4.$set(_this4.data, "isDefault", $$v);
+                }
+              }
+            });
+          }
+        };
+        return h(Cell, {
+          "directives": [{
+            name: "show",
+            value: !this.hideBottomFields
+          }],
+          "attrs": {
+            "center": true,
+            "title": t('defaultAddress')
+          },
+          "class": bem('default'),
+          "scopedSlots": slots
+        });
+      }
+
+      return h();
+    }
+  },
+  render: function render(h) {
+    var _this5 = this;
+
+    var data = this.data,
+        errorInfo = this.errorInfo,
+        disableArea = this.disableArea,
+        hideBottomFields = this.hideBottomFields;
+
+    var onFocus = function onFocus(name) {
+      return function () {
+        return _this5.onFocus(name);
+      };
+    };
+
+    return h("div", {
+      "class": bem()
+    }, [h("div", {
+      "class": bem('fields')
+    }, [h(Field, {
+      "attrs": {
+        "clearable": true,
+        "label": t('name'),
+        "placeholder": t('namePlaceholder'),
+        "errorMessage": errorInfo.name
+      },
+      "on": {
+        "focus": onFocus('name')
+      },
+      "model": {
+        value: data.name,
+        callback: function callback($$v) {
+          _this5.$set(data, "name", $$v);
+        }
+      }
+    }), h(Field, {
+      "attrs": {
+        "clearable": true,
+        "type": "tel",
+        "label": t('tel'),
+        "maxlength": this.telMaxlength,
+        "placeholder": t('telPlaceholder'),
+        "errorMessage": errorInfo.tel
+      },
+      "on": {
+        "focus": onFocus('tel')
+      },
+      "model": {
+        value: data.tel,
+        callback: function callback($$v) {
+          _this5.$set(data, "tel", $$v);
+        }
+      }
+    }), h(Field, {
+      "directives": [{
+        name: "show",
+        value: this.showArea
+      }],
+      "attrs": {
+        "readonly": true,
+        "clickable": !disableArea,
+        "label": t('area'),
+        "placeholder": this.areaPlaceholder || t('areaPlaceholder'),
+        "errorMessage": errorInfo.areaCode,
+        "rightIcon": !disableArea ? 'arrow' : null,
+        "value": this.areaText
+      },
+      "on": {
+        "focus": onFocus('areaCode'),
+        "click": function click() {
+          _this5.$emit('click-area');
+
+          _this5.showAreaPopup = !disableArea;
+        }
+      }
+    }), h(Detail, {
+      "directives": [{
+        name: "show",
+        value: this.showDetail
+      }],
+      "attrs": {
+        "focused": this.detailFocused,
+        "value": data.addressDetail,
+        "errorMessage": errorInfo.addressDetail,
+        "detailRows": this.detailRows,
+        "detailMaxlength": this.detailMaxlength,
+        "searchResult": this.searchResult,
+        "showSearchResult": this.showSearchResult
+      },
+      "on": {
+        "focus": onFocus('addressDetail'),
+        "blur": this.onDetailBlur,
+        "input": this.onChangeDetail,
+        "select-search": function selectSearch(event) {
+          _this5.$emit('select-search', event);
+        }
+      }
+    }), this.showPostal && h(Field, {
+      "directives": [{
+        name: "show",
+        value: !hideBottomFields
+      }],
+      "attrs": {
+        "type": "tel",
+        "maxlength": "6",
+        "label": t('postal'),
+        "placeholder": t('postal'),
+        "errorMessage": errorInfo.postalCode
+      },
+      "on": {
+        "focus": onFocus('postalCode')
+      },
+      "model": {
+        value: data.postalCode,
+        callback: function callback($$v) {
+          _this5.$set(data, "postalCode", $$v);
+        }
+      }
+    }), this.slots()]), this.genSetDefaultCell(h), h("div", {
+      "directives": [{
+        name: "show",
+        value: !hideBottomFields
+      }],
+      "class": bem('buttons')
+    }, [h(Button, {
+      "attrs": {
+        "block": true,
+        "round": true,
+        "loading": this.isSaving,
+        "type": "danger",
+        "text": this.saveButtonText || t('save')
+      },
+      "on": {
+        "click": this.onSave
+      }
+    }), this.showDelete && h(Button, {
+      "attrs": {
+        "block": true,
+        "round": true,
+        "loading": this.isDeleting,
+        "text": this.deleteButtonText || t('delete')
+      },
+      "on": {
+        "click": this.onDelete
+      }
+    })]), h(Popup, {
+      "attrs": {
+        "round": true,
+        "position": "bottom",
+        "lazyRender": false,
+        "getContainer": "body"
+      },
+      "model": {
+        value: _this5.showAreaPopup,
+        callback: function callback($$v) {
+          _this5.showAreaPopup = $$v;
+        }
+      }
+    }, [h(Area, {
+      "ref": "area",
+      "attrs": {
+        "value": data.areaCode,
+        "loading": !this.areaListLoaded,
+        "areaList": this.areaList,
+        "columnsPlaceholder": this.areaColumnsPlaceholder
+      },
+      "on": {
+        "confirm": this.onAreaConfirm,
+        "cancel": function cancel() {
+          _this5.showAreaPopup = false;
+        }
+      }
+    })])]);
+  }
+});

+ 45 - 0
lib/vant/2.13.2/es/address-edit/index.less

@@ -0,0 +1,45 @@
+@import '../style/var';
+
+.van-address-edit {
+  padding: @address-edit-padding;
+
+  &__fields {
+    overflow: hidden;
+    border-radius: @padding-xs;
+
+    .van-field__label {
+      width: 4.1em;
+    }
+  }
+
+  &__default {
+    margin-top: @padding-sm;
+    overflow: hidden;
+    border-radius: @padding-xs;
+  }
+
+  &__buttons {
+    padding: @address-edit-buttons-padding;
+
+    .van-button {
+      margin-bottom: @address-edit-button-margin-bottom;
+    }
+  }
+
+  &-detail {
+    padding: 0;
+
+    &__search-item {
+      background-color: @gray-2;
+    }
+
+    &__keyword {
+      color: @red;
+    }
+
+    &__finish {
+      color: @address-edit-detail-finish-color;
+      font-size: @address-edit-detail-finish-font-size;
+    }
+  }
+}

+ 16 - 0
lib/vant/2.13.2/es/address-edit/style/index.js

@@ -0,0 +1,16 @@
+import '../../style/base.css';
+import '../../overlay/index.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../cell/index.css';
+import '../../field/index.css';
+import '../../popup/index.css';
+import '../../loading/index.css';
+import '../../switch/index.css';
+import '../../button/index.css';
+import '../../goods-action-button/index.css';
+import '../../toast/index.css';
+import '../../picker/index.css';
+import '../../goods-action/index.css';
+import '../../dialog/index.css';
+import '../index.css';

+ 16 - 0
lib/vant/2.13.2/es/address-edit/style/less.js

@@ -0,0 +1,16 @@
+import '../../style/base.less';
+import '../../overlay/index.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../cell/index.less';
+import '../../field/index.less';
+import '../../popup/index.less';
+import '../../loading/index.less';
+import '../../switch/index.less';
+import '../../button/index.less';
+import '../../goods-action-button/index.less';
+import '../../toast/index.less';
+import '../../picker/index.less';
+import '../../goods-action/index.less';
+import '../../dialog/index.less';
+import '../index.less';

+ 107 - 0
lib/vant/2.13.2/es/address-list/Item.js

@@ -0,0 +1,107 @@
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+import _extends from "@babel/runtime/helpers/esm/extends";
+// Utils
+import { createNamespace } from '../utils';
+import { emit, inherit } from '../utils/functional'; // Components
+
+import Tag from '../tag';
+import Icon from '../icon';
+import Cell from '../cell';
+import Radio from '../radio'; // Types
+
+var _createNamespace = createNamespace('address-item'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function AddressItem(h, props, slots, ctx) {
+  var disabled = props.disabled,
+      switchable = props.switchable;
+
+  function onClick() {
+    if (switchable) {
+      emit(ctx, 'select');
+    }
+
+    emit(ctx, 'click');
+  }
+
+  var genRightIcon = function genRightIcon() {
+    return h(Icon, {
+      "attrs": {
+        "name": "edit"
+      },
+      "class": bem('edit'),
+      "on": {
+        "click": function click(event) {
+          event.stopPropagation();
+          emit(ctx, 'edit');
+          emit(ctx, 'click');
+        }
+      }
+    });
+  };
+
+  function genTag() {
+    if (slots.tag) {
+      return slots.tag(_extends({}, props.data));
+    }
+
+    if (props.data.isDefault && props.defaultTagText) {
+      return h(Tag, {
+        "attrs": {
+          "type": "danger",
+          "round": true
+        },
+        "class": bem('tag')
+      }, [props.defaultTagText]);
+    }
+  }
+
+  function genContent() {
+    var data = props.data;
+    var Info = [h("div", {
+      "class": bem('name')
+    }, [data.name + " " + data.tel, genTag()]), h("div", {
+      "class": bem('address')
+    }, [data.address])];
+
+    if (switchable && !disabled) {
+      return h(Radio, {
+        "attrs": {
+          "name": data.id,
+          "iconSize": 18
+        }
+      }, [Info]);
+    }
+
+    return Info;
+  }
+
+  return h("div", {
+    "class": bem({
+      disabled: disabled
+    }),
+    "on": {
+      "click": onClick
+    }
+  }, [h(Cell, _mergeJSXProps([{
+    "attrs": {
+      "border": false,
+      "valueClass": bem('value')
+    },
+    "scopedSlots": {
+      default: genContent,
+      'right-icon': genRightIcon
+    }
+  }, inherit(ctx)])), slots.bottom == null ? void 0 : slots.bottom(_extends({}, props.data, {
+    disabled: disabled
+  }))]);
+}
+
+AddressItem.props = {
+  data: Object,
+  disabled: Boolean,
+  switchable: Boolean,
+  defaultTagText: String
+};
+export default createComponent(AddressItem);

+ 1 - 0
lib/vant/2.13.2/es/address-list/index.css

@@ -0,0 +1 @@
+.van-address-list{box-sizing:border-box;height:100%;padding:12px 12px 80px}.van-address-list__bottom{position:fixed;bottom:0;left:0;z-index:999;box-sizing:border-box;width:100%;padding:0 16px;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom);background-color:#fff}.van-address-list__add{height:40px;margin:5px 0}.van-address-list__disabled-text{padding:20px 0 16px;color:#969799;font-size:14px;line-height:20px}.van-address-item{padding:12px;background-color:#fff;border-radius:8px}.van-address-item:not(:last-child){margin-bottom:12px}.van-address-item__value{padding-right:44px}.van-address-item__name{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin-bottom:8px;font-size:16px;line-height:22px}.van-address-item__tag{-webkit-box-flex:0;-webkit-flex:none;flex:none;margin-left:8px;padding-top:0;padding-bottom:0;line-height:1.4em}.van-address-item__address{color:#323233;font-size:13px;line-height:18px}.van-address-item--disabled .van-address-item__address,.van-address-item--disabled .van-address-item__name{color:#c8c9cc}.van-address-item__edit{position:absolute;top:50%;right:16px;color:#969799;font-size:20px;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.van-address-item .van-cell{padding:0}.van-address-item .van-radio__label{margin-left:12px}.van-address-item .van-radio__icon--checked .van-icon{background-color:#ee0a24;border-color:#ee0a24}

+ 93 - 0
lib/vant/2.13.2/es/address-list/index.js

@@ -0,0 +1,93 @@
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace } from '../utils';
+import { emit, inherit } from '../utils/functional'; // Components
+
+import Button from '../button';
+import RadioGroup from '../radio-group';
+import AddressItem from './Item'; // Types
+
+var _createNamespace = createNamespace('address-list'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+function AddressList(h, props, slots, ctx) {
+  function genList(list, disabled) {
+    if (!list) {
+      return;
+    }
+
+    return list.map(function (item, index) {
+      return h(AddressItem, {
+        "attrs": {
+          "data": item,
+          "disabled": disabled,
+          "switchable": props.switchable,
+          "defaultTagText": props.defaultTagText
+        },
+        "key": item.id,
+        "scopedSlots": {
+          bottom: slots['item-bottom'],
+          tag: slots.tag
+        },
+        "on": {
+          "select": function select() {
+            emit(ctx, disabled ? 'select-disabled' : 'select', item, index);
+
+            if (!disabled) {
+              emit(ctx, 'input', item.id);
+            }
+          },
+          "edit": function edit() {
+            emit(ctx, disabled ? 'edit-disabled' : 'edit', item, index);
+          },
+          "click": function click() {
+            emit(ctx, 'click-item', item, index);
+          }
+        }
+      });
+    });
+  }
+
+  var List = genList(props.list);
+  var DisabledList = genList(props.disabledList, true);
+  return h("div", _mergeJSXProps([{
+    "class": bem()
+  }, inherit(ctx)]), [slots.top == null ? void 0 : slots.top(), h(RadioGroup, {
+    "attrs": {
+      "value": props.value
+    }
+  }, [List]), props.disabledText && h("div", {
+    "class": bem('disabled-text')
+  }, [props.disabledText]), DisabledList, slots.default == null ? void 0 : slots.default(), h("div", {
+    "class": bem('bottom')
+  }, [h(Button, {
+    "attrs": {
+      "round": true,
+      "block": true,
+      "type": "danger",
+      "text": props.addButtonText || t('add')
+    },
+    "class": bem('add'),
+    "on": {
+      "click": function click() {
+        emit(ctx, 'add');
+      }
+    }
+  })])]);
+}
+
+AddressList.props = {
+  list: Array,
+  value: [Number, String],
+  disabledList: Array,
+  disabledText: String,
+  addButtonText: String,
+  defaultTagText: String,
+  switchable: {
+    type: Boolean,
+    default: true
+  }
+};
+export default createComponent(AddressList);

+ 97 - 0
lib/vant/2.13.2/es/address-list/index.less

@@ -0,0 +1,97 @@
+@import '../style/var';
+
+.van-address-list {
+  box-sizing: border-box;
+  height: 100%;
+  padding: @address-list-padding;
+
+  &__bottom {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    z-index: @address-list-add-button-z-index;
+    box-sizing: border-box;
+    width: 100%;
+    padding: 0 @padding-md;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    background-color: @white;
+  }
+
+  &__add {
+    height: 40px;
+    margin: 5px 0;
+  }
+
+  &__disabled-text {
+    padding: @address-list-disabled-text-padding;
+    color: @address-list-disabled-text-color;
+    font-size: @address-list-disabled-text-font-size;
+    line-height: @address-list-disabled-text-line-height;
+  }
+}
+
+.van-address-item {
+  padding: @address-list-item-padding;
+  background-color: @white;
+  border-radius: @border-radius-lg;
+
+  &:not(:last-child) {
+    margin-bottom: @padding-sm;
+  }
+
+  &__value {
+    padding-right: 44px;
+  }
+
+  &__name {
+    display: flex;
+    align-items: center;
+    margin-bottom: @padding-xs;
+    font-size: @font-size-lg;
+    line-height: @line-height-lg;
+  }
+
+  &__tag {
+    flex: none;
+    margin-left: @padding-xs;
+    padding-top: 0;
+    padding-bottom: 0;
+    line-height: 1.4em;
+  }
+
+  &__address {
+    color: @address-list-item-text-color;
+    font-size: @address-list-item-font-size;
+    line-height: @address-list-item-line-height;
+  }
+
+  &--disabled {
+    .van-address-item__name,
+    .van-address-item__address {
+      color: @address-list-item-disabled-text-color;
+    }
+  }
+
+  &__edit {
+    position: absolute;
+    top: 50%;
+    right: @padding-md;
+    color: @gray-6;
+    font-size: @address-list-edit-icon-size;
+    transform: translate(0, -50%);
+  }
+
+  .van-cell {
+    padding: 0;
+  }
+
+  .van-radio__label {
+    margin-left: @padding-sm;
+  }
+
+  .van-radio__icon--checked .van-icon {
+    background-color: @address-list-item-radio-icon-color;
+    border-color: @address-list-item-radio-icon-color;
+  }
+}

+ 10 - 0
lib/vant/2.13.2/es/address-list/style/index.js

@@ -0,0 +1,10 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../radio/index.css';
+import '../../tag/index.css';
+import '../../cell/index.css';
+import '../../loading/index.css';
+import '../../button/index.css';
+import '../../radio-group/index.css';
+import '../index.css';

+ 10 - 0
lib/vant/2.13.2/es/address-list/style/less.js

@@ -0,0 +1,10 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../radio/index.less';
+import '../../tag/index.less';
+import '../../cell/index.less';
+import '../../loading/index.less';
+import '../../button/index.less';
+import '../../radio-group/index.less';
+import '../index.less';

+ 321 - 0
lib/vant/2.13.2/es/area/index.js

@@ -0,0 +1,321 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import { createNamespace } from '../utils';
+import { pickerProps } from '../picker/shared';
+import Picker from '../picker';
+
+var _createNamespace = createNamespace('area'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+var PLACEHOLDER_CODE = '000000';
+
+function isOverseaCode(code) {
+  return code[0] === '9';
+}
+
+function pickSlots(instance, keys) {
+  var $slots = instance.$slots,
+      $scopedSlots = instance.$scopedSlots;
+  var scopedSlots = {};
+  keys.forEach(function (key) {
+    if ($scopedSlots[key]) {
+      scopedSlots[key] = $scopedSlots[key];
+    } else if ($slots[key]) {
+      scopedSlots[key] = function () {
+        return $slots[key];
+      };
+    }
+  });
+  return scopedSlots;
+}
+
+export default createComponent({
+  props: _extends({}, pickerProps, {
+    value: String,
+    areaList: {
+      type: Object,
+      default: function _default() {
+        return {};
+      }
+    },
+    columnsNum: {
+      type: [Number, String],
+      default: 3
+    },
+    isOverseaCode: {
+      type: Function,
+      default: isOverseaCode
+    },
+    columnsPlaceholder: {
+      type: Array,
+      default: function _default() {
+        return [];
+      }
+    }
+  }),
+  data: function data() {
+    return {
+      code: this.value,
+      columns: [{
+        values: []
+      }, {
+        values: []
+      }, {
+        values: []
+      }]
+    };
+  },
+  computed: {
+    province: function province() {
+      return this.areaList.province_list || {};
+    },
+    city: function city() {
+      return this.areaList.city_list || {};
+    },
+    county: function county() {
+      return this.areaList.county_list || {};
+    },
+    displayColumns: function displayColumns() {
+      return this.columns.slice(0, +this.columnsNum);
+    },
+    placeholderMap: function placeholderMap() {
+      return {
+        province: this.columnsPlaceholder[0] || '',
+        city: this.columnsPlaceholder[1] || '',
+        county: this.columnsPlaceholder[2] || ''
+      };
+    }
+  },
+  watch: {
+    value: function value(val) {
+      this.code = val;
+      this.setValues();
+    },
+    areaList: {
+      deep: true,
+      handler: 'setValues'
+    },
+    columnsNum: function columnsNum() {
+      var _this = this;
+
+      this.$nextTick(function () {
+        _this.setValues();
+      });
+    }
+  },
+  mounted: function mounted() {
+    this.setValues();
+  },
+  methods: {
+    // get list by code
+    getList: function getList(type, code) {
+      var result = [];
+
+      if (type !== 'province' && !code) {
+        return result;
+      }
+
+      var list = this[type];
+      result = Object.keys(list).map(function (listCode) {
+        return {
+          code: listCode,
+          name: list[listCode]
+        };
+      });
+
+      if (code) {
+        // oversea code
+        if (this.isOverseaCode(code) && type === 'city') {
+          code = '9';
+        }
+
+        result = result.filter(function (item) {
+          return item.code.indexOf(code) === 0;
+        });
+      }
+
+      if (this.placeholderMap[type] && result.length) {
+        // set columns placeholder
+        var codeFill = '';
+
+        if (type === 'city') {
+          codeFill = PLACEHOLDER_CODE.slice(2, 4);
+        } else if (type === 'county') {
+          codeFill = PLACEHOLDER_CODE.slice(4, 6);
+        }
+
+        result.unshift({
+          code: "" + code + codeFill,
+          name: this.placeholderMap[type]
+        });
+      }
+
+      return result;
+    },
+    // get index by code
+    getIndex: function getIndex(type, code) {
+      var compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
+      var list = this.getList(type, code.slice(0, compareNum - 2)); // oversea code
+
+      if (this.isOverseaCode(code) && type === 'province') {
+        compareNum = 1;
+      }
+
+      code = code.slice(0, compareNum);
+
+      for (var i = 0; i < list.length; i++) {
+        if (list[i].code.slice(0, compareNum) === code) {
+          return i;
+        }
+      }
+
+      return 0;
+    },
+    // parse output columns data
+    parseOutputValues: function parseOutputValues(values) {
+      var _this2 = this;
+
+      return values.map(function (value, index) {
+        // save undefined value
+        if (!value) return value;
+        value = JSON.parse(JSON.stringify(value));
+
+        if (!value.code || value.name === _this2.columnsPlaceholder[index]) {
+          value.code = '';
+          value.name = '';
+        }
+
+        return value;
+      });
+    },
+    onChange: function onChange(picker, values, index) {
+      this.code = values[index].code;
+      this.setValues();
+      var parsedValues = this.parseOutputValues(picker.getValues());
+      this.$emit('change', picker, parsedValues, index);
+    },
+    onConfirm: function onConfirm(values, index) {
+      values = this.parseOutputValues(values);
+      this.setValues();
+      this.$emit('confirm', values, index);
+    },
+    getDefaultCode: function getDefaultCode() {
+      if (this.columnsPlaceholder.length) {
+        return PLACEHOLDER_CODE;
+      }
+
+      var countyCodes = Object.keys(this.county);
+
+      if (countyCodes[0]) {
+        return countyCodes[0];
+      }
+
+      var cityCodes = Object.keys(this.city);
+
+      if (cityCodes[0]) {
+        return cityCodes[0];
+      }
+
+      return '';
+    },
+    setValues: function setValues() {
+      var code = this.code;
+
+      if (!code) {
+        code = this.getDefaultCode();
+      }
+
+      var picker = this.$refs.picker;
+      var province = this.getList('province');
+      var city = this.getList('city', code.slice(0, 2));
+
+      if (!picker) {
+        return;
+      }
+
+      picker.setColumnValues(0, province);
+      picker.setColumnValues(1, city);
+
+      if (city.length && code.slice(2, 4) === '00' && !this.isOverseaCode(code)) {
+        code = city[0].code;
+      }
+
+      picker.setColumnValues(2, this.getList('county', code.slice(0, 4)));
+      picker.setIndexes([this.getIndex('province', code), this.getIndex('city', code), this.getIndex('county', code)]);
+    },
+    getValues: function getValues() {
+      var picker = this.$refs.picker;
+      var getValues = picker ? picker.getValues().filter(function (value) {
+        return !!value;
+      }) : [];
+      getValues = this.parseOutputValues(getValues);
+      return getValues;
+    },
+    getArea: function getArea() {
+      var values = this.getValues();
+      var area = {
+        code: '',
+        country: '',
+        province: '',
+        city: '',
+        county: ''
+      };
+
+      if (!values.length) {
+        return area;
+      }
+
+      var names = values.map(function (item) {
+        return item.name;
+      });
+      var validValues = values.filter(function (value) {
+        return !!value.code;
+      });
+      area.code = validValues.length ? validValues[validValues.length - 1].code : '';
+
+      if (this.isOverseaCode(area.code)) {
+        area.country = names[1] || '';
+        area.province = names[2] || '';
+      } else {
+        area.province = names[0] || '';
+        area.city = names[1] || '';
+        area.county = names[2] || '';
+      }
+
+      return area;
+    },
+    // @exposed-api
+    reset: function reset(code) {
+      this.code = code || '';
+      this.setValues();
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+
+    var on = _extends({}, this.$listeners, {
+      change: this.onChange,
+      confirm: this.onConfirm
+    });
+
+    return h(Picker, {
+      "ref": "picker",
+      "class": bem(),
+      "attrs": {
+        "showToolbar": true,
+        "valueKey": "name",
+        "title": this.title,
+        "columns": this.displayColumns,
+        "loading": this.loading,
+        "readonly": this.readonly,
+        "itemHeight": this.itemHeight,
+        "swipeDuration": this.swipeDuration,
+        "visibleItemCount": this.visibleItemCount,
+        "cancelButtonText": this.cancelButtonText,
+        "confirmButtonText": this.confirmButtonText
+      },
+      "scopedSlots": pickSlots(this, ['title', 'columns-top', 'columns-bottom']),
+      "on": _extends({}, on)
+    });
+  }
+});

+ 3 - 0
lib/vant/2.13.2/es/area/style/index.js

@@ -0,0 +1,3 @@
+import '../../style/base.css';
+import '../../loading/index.css';
+import '../../picker/index.css';

+ 3 - 0
lib/vant/2.13.2/es/area/style/less.js

@@ -0,0 +1,3 @@
+import '../../style/base.less';
+import '../../loading/index.less';
+import '../../picker/index.less';

+ 1 - 0
lib/vant/2.13.2/es/badge/index.css

@@ -0,0 +1 @@
+.van-badge{display:inline-block;box-sizing:border-box;min-width:16px;padding:0 3px;color:#fff;font-weight:500;font-size:12px;font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif;line-height:1.2;text-align:center;background-color:#ee0a24;border:1px solid #fff;border-radius:999px}.van-badge--fixed{position:absolute;top:0;right:0;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);-webkit-transform-origin:100%;transform-origin:100%}.van-badge--dot{width:8px;min-width:0;height:8px;background-color:#ee0a24;border-radius:100%}.van-badge__wrapper{position:relative;display:inline-block}

+ 68 - 0
lib/vant/2.13.2/es/badge/index.js

@@ -0,0 +1,68 @@
+import { isDef, createNamespace } from '../utils';
+import { isNumeric } from '../utils/validate/number';
+
+var _createNamespace = createNamespace('badge'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+export default createComponent({
+  props: {
+    dot: Boolean,
+    max: [Number, String],
+    color: String,
+    content: [Number, String],
+    tag: {
+      type: String,
+      default: 'div'
+    }
+  },
+  methods: {
+    hasContent: function hasContent() {
+      return !!(this.$scopedSlots.content || isDef(this.content) && this.content !== '');
+    },
+    renderContent: function renderContent() {
+      var dot = this.dot,
+          max = this.max,
+          content = this.content;
+
+      if (!dot && this.hasContent()) {
+        if (this.$scopedSlots.content) {
+          return this.$scopedSlots.content();
+        }
+
+        if (isDef(max) && isNumeric(content) && +content > max) {
+          return max + "+";
+        }
+
+        return content;
+      }
+    },
+    renderBadge: function renderBadge() {
+      var h = this.$createElement;
+
+      if (this.hasContent() || this.dot) {
+        return h("div", {
+          "class": bem({
+            dot: this.dot,
+            fixed: !!this.$scopedSlots.default
+          }),
+          "style": {
+            background: this.color
+          }
+        }, [this.renderContent()]);
+      }
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+
+    if (this.$scopedSlots.default) {
+      var tag = this.tag;
+      return h(tag, {
+        "class": bem('wrapper')
+      }, [this.$scopedSlots.default(), this.renderBadge()]);
+    }
+
+    return this.renderBadge();
+  }
+});

+ 38 - 0
lib/vant/2.13.2/es/badge/index.less

@@ -0,0 +1,38 @@
+@import '../style/var';
+
+.van-badge {
+  display: inline-block;
+  box-sizing: border-box;
+  min-width: @badge-size;
+  padding: @badge-padding;
+  color: @badge-color;
+  font-weight: @badge-font-weight;
+  font-size: @badge-font-size;
+  font-family: @badge-font-family;
+  line-height: 1.2;
+  text-align: center;
+  background-color: @badge-background-color;
+  border: @badge-border-width solid @white;
+  border-radius: @border-radius-max;
+
+  &--fixed {
+    position: absolute;
+    top: 0;
+    right: 0;
+    transform: translate(50%, -50%);
+    transform-origin: 100%;
+  }
+
+  &--dot {
+    width: @badge-dot-size;
+    min-width: 0;
+    height: @badge-dot-size;
+    background-color: @badge-dot-color;
+    border-radius: 100%;
+  }
+
+  &__wrapper {
+    position: relative;
+    display: inline-block;
+  }
+}

+ 2 - 0
lib/vant/2.13.2/es/badge/style/index.js

@@ -0,0 +1,2 @@
+import '../../style/base.css';
+import '../index.css';

+ 2 - 0
lib/vant/2.13.2/es/badge/style/less.js

@@ -0,0 +1,2 @@
+import '../../style/base.less';
+import '../index.less';

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
lib/vant/2.13.2/es/button/index.css


+ 181 - 0
lib/vant/2.13.2/es/button/index.js

@@ -0,0 +1,181 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace } from '../utils';
+import { emit, inherit } from '../utils/functional';
+import { BORDER_SURROUND } from '../utils/constant';
+import { routeProps, functionalRoute } from '../utils/router'; // Components
+
+import Icon from '../icon';
+import Loading from '../loading'; // Types
+
+var _createNamespace = createNamespace('button'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function Button(h, props, slots, ctx) {
+  var _ref;
+
+  var tag = props.tag,
+      icon = props.icon,
+      type = props.type,
+      color = props.color,
+      plain = props.plain,
+      disabled = props.disabled,
+      loading = props.loading,
+      hairline = props.hairline,
+      loadingText = props.loadingText,
+      iconPosition = props.iconPosition;
+  var style = {};
+
+  if (color) {
+    style.color = plain ? color : 'white';
+
+    if (!plain) {
+      // Use background instead of backgroundColor to make linear-gradient work
+      style.background = color;
+    } // hide border when color is linear-gradient
+
+
+    if (color.indexOf('gradient') !== -1) {
+      style.border = 0;
+    } else {
+      style.borderColor = color;
+    }
+  }
+
+  function onClick(event) {
+    if (props.loading) {
+      event.preventDefault();
+    }
+
+    if (!loading && !disabled) {
+      emit(ctx, 'click', event);
+      functionalRoute(ctx);
+    }
+  }
+
+  function onTouchstart(event) {
+    emit(ctx, 'touchstart', event);
+  }
+
+  var classes = [bem([type, props.size, {
+    plain: plain,
+    loading: loading,
+    disabled: disabled,
+    hairline: hairline,
+    block: props.block,
+    round: props.round,
+    square: props.square
+  }]), (_ref = {}, _ref[BORDER_SURROUND] = hairline, _ref)];
+
+  function renderIcon() {
+    if (loading) {
+      return slots.loading ? slots.loading() : h(Loading, {
+        "class": bem('loading'),
+        "attrs": {
+          "size": props.loadingSize,
+          "type": props.loadingType,
+          "color": "currentColor"
+        }
+      });
+    }
+
+    if (slots.icon) {
+      return h("div", {
+        "class": bem('icon')
+      }, [slots.icon()]);
+    }
+
+    if (icon) {
+      return h(Icon, {
+        "attrs": {
+          "name": icon,
+          "classPrefix": props.iconPrefix
+        },
+        "class": bem('icon')
+      });
+    }
+  }
+
+  function renderContent() {
+    var content = [];
+
+    if (iconPosition === 'left') {
+      content.push(renderIcon());
+    }
+
+    var text;
+
+    if (loading) {
+      text = loadingText;
+    } else {
+      text = slots.default ? slots.default() : props.text;
+    }
+
+    if (text) {
+      content.push(h("span", {
+        "class": bem('text')
+      }, [text]));
+    }
+
+    if (iconPosition === 'right') {
+      content.push(renderIcon());
+    }
+
+    return content;
+  }
+
+  return h(tag, _mergeJSXProps([{
+    "style": style,
+    "class": classes,
+    "attrs": {
+      "type": props.nativeType,
+      "disabled": disabled
+    },
+    "on": {
+      "click": onClick,
+      "touchstart": onTouchstart
+    }
+  }, inherit(ctx)]), [h("div", {
+    "class": bem('content')
+  }, [renderContent()])]);
+}
+
+Button.props = _extends({}, routeProps, {
+  text: String,
+  icon: String,
+  color: String,
+  block: Boolean,
+  plain: Boolean,
+  round: Boolean,
+  square: Boolean,
+  loading: Boolean,
+  hairline: Boolean,
+  disabled: Boolean,
+  iconPrefix: String,
+  nativeType: String,
+  loadingText: String,
+  loadingType: String,
+  tag: {
+    type: String,
+    default: 'button'
+  },
+  type: {
+    type: String,
+    default: 'default'
+  },
+  size: {
+    type: String,
+    default: 'normal'
+  },
+  loadingSize: {
+    type: String,
+    default: '20px'
+  },
+  iconPosition: {
+    type: String,
+    default: 'left'
+  }
+});
+export default createComponent(Button);

+ 190 - 0
lib/vant/2.13.2/es/button/index.less

@@ -0,0 +1,190 @@
+@import '../style/var';
+
+.van-button {
+  position: relative;
+  display: inline-block;
+  box-sizing: border-box;
+  height: @button-default-height;
+  margin: 0;
+  padding: 0;
+  font-size: @button-default-font-size;
+  line-height: @button-default-line-height;
+  text-align: center;
+  border-radius: @button-border-radius;
+  cursor: pointer;
+  transition: opacity @animation-duration-fast;
+  -webkit-appearance: none;
+
+  &::before {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 100%;
+    height: 100%;
+    background-color: @black;
+    border: inherit;
+    border-color: @black;
+    border-radius: inherit; /* inherit parent's border radius */
+    transform: translate(-50%, -50%);
+    opacity: 0;
+    content: ' ';
+  }
+
+  &:active::before {
+    opacity: 0.1;
+  }
+
+  &--loading,
+  &--disabled {
+    &::before {
+      display: none;
+    }
+  }
+
+  &--default {
+    color: @button-default-color;
+    background-color: @button-default-background-color;
+    border: @button-border-width solid @button-default-border-color;
+  }
+
+  &--primary {
+    color: @button-primary-color;
+    background-color: @button-primary-background-color;
+    border: @button-border-width solid @button-primary-border-color;
+  }
+
+  &--info {
+    color: @button-info-color;
+    background-color: @button-info-background-color;
+    border: @button-border-width solid @button-info-border-color;
+  }
+
+  &--danger {
+    color: @button-danger-color;
+    background-color: @button-danger-background-color;
+    border: @button-border-width solid @button-danger-border-color;
+  }
+
+  &--warning {
+    color: @button-warning-color;
+    background-color: @button-warning-background-color;
+    border: @button-border-width solid @button-warning-border-color;
+  }
+
+  &--plain {
+    background-color: @button-plain-background-color;
+
+    &.van-button--primary {
+      color: @button-primary-background-color;
+    }
+
+    &.van-button--info {
+      color: @button-info-background-color;
+    }
+
+    &.van-button--danger {
+      color: @button-danger-background-color;
+    }
+
+    &.van-button--warning {
+      color: @button-warning-background-color;
+    }
+  }
+
+  &--large {
+    width: 100%;
+    height: @button-large-height;
+  }
+
+  &--normal {
+    padding: 0 15px;
+    font-size: @button-normal-font-size;
+  }
+
+  &--small {
+    height: @button-small-height;
+    padding: 0 @padding-xs;
+    font-size: @button-small-font-size;
+  }
+
+  &__loading {
+    color: inherit;
+    font-size: inherit;
+  }
+
+  &--mini {
+    height: @button-mini-height;
+    padding: 0 @padding-base;
+    font-size: @button-mini-font-size;
+
+    & + .van-button--mini {
+      margin-left: @padding-base;
+    }
+  }
+
+  &--block {
+    display: block;
+    width: 100%;
+  }
+
+  &--disabled {
+    cursor: not-allowed;
+    opacity: @button-disabled-opacity;
+  }
+
+  &--loading {
+    cursor: default;
+  }
+
+  &--round {
+    border-radius: @button-round-border-radius;
+  }
+
+  &--square {
+    border-radius: 0;
+  }
+
+  // align-items are ignored when flex container is a button in legacy safari
+  // see: https://bugs.webkit.org/show_bug.cgi?id=169700
+  &__content {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 100%;
+
+    // fix icon vertical align
+    // see: https://github.com/vant-ui/vant/issues/7617
+    &::before {
+      content: ' ';
+    }
+  }
+
+  &__icon {
+    font-size: 1.2em;
+    line-height: inherit;
+  }
+
+  &__icon + &__text,
+  &__loading + &__text,
+  &__text + &__icon,
+  &__text + &__loading {
+    margin-left: @padding-base;
+  }
+
+  &--hairline {
+    border-width: 0;
+
+    &::after {
+      border-color: inherit;
+      border-radius: @button-border-radius * 2;
+    }
+
+    &.van-button--round::after {
+      border-radius: @button-round-border-radius;
+    }
+
+    &.van-button--square::after {
+      border-radius: 0;
+    }
+  }
+}

+ 5 - 0
lib/vant/2.13.2/es/button/style/index.js

@@ -0,0 +1,5 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../loading/index.css';
+import '../index.css';

+ 5 - 0
lib/vant/2.13.2/es/button/style/less.js

@@ -0,0 +1,5 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../loading/index.less';
+import '../index.less';

+ 55 - 0
lib/vant/2.13.2/es/calendar/components/Header.js

@@ -0,0 +1,55 @@
+import { createNamespace } from '../../utils';
+import { t, bem } from '../utils';
+
+var _createNamespace = createNamespace('calendar-header'),
+    createComponent = _createNamespace[0];
+
+export default createComponent({
+  props: {
+    title: String,
+    subtitle: String,
+    showTitle: Boolean,
+    showSubtitle: Boolean,
+    firstDayOfWeek: Number
+  },
+  methods: {
+    genTitle: function genTitle() {
+      var h = this.$createElement;
+
+      if (this.showTitle) {
+        var title = this.slots('title') || this.title || t('title');
+        return h("div", {
+          "class": bem('header-title')
+        }, [title]);
+      }
+    },
+    genSubtitle: function genSubtitle() {
+      var h = this.$createElement;
+
+      if (this.showSubtitle) {
+        return h("div", {
+          "class": bem('header-subtitle')
+        }, [this.subtitle]);
+      }
+    },
+    genWeekDays: function genWeekDays() {
+      var h = this.$createElement;
+      var weekdays = t('weekdays');
+      var firstDayOfWeek = this.firstDayOfWeek;
+      var renderWeekDays = [].concat(weekdays.slice(firstDayOfWeek, 7), weekdays.slice(0, firstDayOfWeek));
+      return h("div", {
+        "class": bem('weekdays')
+      }, [renderWeekDays.map(function (item) {
+        return h("span", {
+          "class": bem('weekday')
+        }, [item]);
+      })]);
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": bem('header')
+    }, [this.genTitle(), this.genSubtitle(), this.genWeekDays()]);
+  }
+});

+ 333 - 0
lib/vant/2.13.2/es/calendar/components/Month.js

@@ -0,0 +1,333 @@
+import { createNamespace, addUnit } from '../../utils';
+import { setScrollTop } from '../../utils/dom/scroll';
+import { t, bem, compareDay, getPrevDay, getNextDay, formatMonthTitle } from '../utils';
+import { getMonthEndDay } from '../../datetime-picker/utils';
+
+var _createNamespace = createNamespace('calendar-month'),
+    createComponent = _createNamespace[0];
+
+export default createComponent({
+  props: {
+    date: Date,
+    type: String,
+    color: String,
+    minDate: Date,
+    maxDate: Date,
+    showMark: Boolean,
+    rowHeight: [Number, String],
+    formatter: Function,
+    lazyRender: Boolean,
+    currentDate: [Date, Array],
+    allowSameDay: Boolean,
+    showSubtitle: Boolean,
+    showMonthTitle: Boolean,
+    firstDayOfWeek: Number
+  },
+  data: function data() {
+    return {
+      visible: false
+    };
+  },
+  computed: {
+    title: function title() {
+      return formatMonthTitle(this.date);
+    },
+    rowHeightWithUnit: function rowHeightWithUnit() {
+      return addUnit(this.rowHeight);
+    },
+    offset: function offset() {
+      var firstDayOfWeek = this.firstDayOfWeek;
+      var realDay = this.date.getDay();
+
+      if (!firstDayOfWeek) {
+        return realDay;
+      }
+
+      return (realDay + 7 - this.firstDayOfWeek) % 7;
+    },
+    totalDay: function totalDay() {
+      return getMonthEndDay(this.date.getFullYear(), this.date.getMonth() + 1);
+    },
+    shouldRender: function shouldRender() {
+      return this.visible || !this.lazyRender;
+    },
+    placeholders: function placeholders() {
+      var rows = [];
+      var count = Math.ceil((this.totalDay + this.offset) / 7);
+
+      for (var day = 1; day <= count; day++) {
+        rows.push({
+          type: 'placeholder'
+        });
+      }
+
+      return rows;
+    },
+    days: function days() {
+      var days = [];
+      var year = this.date.getFullYear();
+      var month = this.date.getMonth();
+
+      for (var day = 1; day <= this.totalDay; day++) {
+        var date = new Date(year, month, day);
+        var type = this.getDayType(date);
+        var config = {
+          date: date,
+          type: type,
+          text: day,
+          bottomInfo: this.getBottomInfo(type)
+        };
+
+        if (this.formatter) {
+          config = this.formatter(config);
+        }
+
+        days.push(config);
+      }
+
+      return days;
+    }
+  },
+  methods: {
+    getHeight: function getHeight() {
+      var _this$$el;
+
+      return ((_this$$el = this.$el) == null ? void 0 : _this$$el.getBoundingClientRect().height) || 0;
+    },
+    scrollIntoView: function scrollIntoView(body) {
+      var _this$$refs = this.$refs,
+          days = _this$$refs.days,
+          month = _this$$refs.month;
+      var el = this.showSubtitle ? days : month;
+      var scrollTop = el.getBoundingClientRect().top - body.getBoundingClientRect().top + body.scrollTop;
+      setScrollTop(body, scrollTop);
+    },
+    getMultipleDayType: function getMultipleDayType(day) {
+      var _this = this;
+
+      var isSelected = function isSelected(date) {
+        return _this.currentDate.some(function (item) {
+          return compareDay(item, date) === 0;
+        });
+      };
+
+      if (isSelected(day)) {
+        var prevDay = getPrevDay(day);
+        var nextDay = getNextDay(day);
+        var prevSelected = isSelected(prevDay);
+        var nextSelected = isSelected(nextDay);
+
+        if (prevSelected && nextSelected) {
+          return 'multiple-middle';
+        }
+
+        if (prevSelected) {
+          return 'end';
+        }
+
+        return nextSelected ? 'start' : 'multiple-selected';
+      }
+
+      return '';
+    },
+    getRangeDayType: function getRangeDayType(day) {
+      var _this$currentDate = this.currentDate,
+          startDay = _this$currentDate[0],
+          endDay = _this$currentDate[1];
+
+      if (!startDay) {
+        return '';
+      }
+
+      var compareToStart = compareDay(day, startDay);
+
+      if (!endDay) {
+        return compareToStart === 0 ? 'start' : '';
+      }
+
+      var compareToEnd = compareDay(day, endDay);
+
+      if (compareToStart === 0 && compareToEnd === 0 && this.allowSameDay) {
+        return 'start-end';
+      }
+
+      if (compareToStart === 0) {
+        return 'start';
+      }
+
+      if (compareToEnd === 0) {
+        return 'end';
+      }
+
+      if (compareToStart > 0 && compareToEnd < 0) {
+        return 'middle';
+      }
+    },
+    getDayType: function getDayType(day) {
+      var type = this.type,
+          minDate = this.minDate,
+          maxDate = this.maxDate,
+          currentDate = this.currentDate;
+
+      if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) {
+        return 'disabled';
+      }
+
+      if (currentDate === null) {
+        return;
+      }
+
+      if (type === 'single') {
+        return compareDay(day, currentDate) === 0 ? 'selected' : '';
+      }
+
+      if (type === 'multiple') {
+        return this.getMultipleDayType(day);
+      }
+      /* istanbul ignore else */
+
+
+      if (type === 'range') {
+        return this.getRangeDayType(day);
+      }
+    },
+    getBottomInfo: function getBottomInfo(type) {
+      if (this.type === 'range') {
+        if (type === 'start' || type === 'end') {
+          return t(type);
+        }
+
+        if (type === 'start-end') {
+          return t('startEnd');
+        }
+      }
+    },
+    getDayStyle: function getDayStyle(type, index) {
+      var style = {
+        height: this.rowHeightWithUnit
+      };
+
+      if (type === 'placeholder') {
+        style.width = '100%';
+        return style;
+      }
+
+      if (index === 0) {
+        style.marginLeft = 100 * this.offset / 7 + "%";
+      }
+
+      if (this.color) {
+        if (type === 'start' || type === 'end' || type === 'start-end' || type === 'multiple-selected' || type === 'multiple-middle') {
+          style.background = this.color;
+        } else if (type === 'middle') {
+          style.color = this.color;
+        }
+      }
+
+      return style;
+    },
+    genTitle: function genTitle() {
+      var h = this.$createElement;
+
+      if (this.showMonthTitle) {
+        return h("div", {
+          "class": bem('month-title')
+        }, [this.title]);
+      }
+    },
+    genMark: function genMark() {
+      var h = this.$createElement;
+
+      if (this.showMark && this.shouldRender) {
+        return h("div", {
+          "class": bem('month-mark')
+        }, [this.date.getMonth() + 1]);
+      }
+    },
+    genDays: function genDays() {
+      var h = this.$createElement;
+      var days = this.shouldRender ? this.days : this.placeholders;
+      return h("div", {
+        "ref": "days",
+        "attrs": {
+          "role": "grid"
+        },
+        "class": bem('days')
+      }, [this.genMark(), days.map(this.genDay)]);
+    },
+    genTopInfo: function genTopInfo(item) {
+      var h = this.$createElement;
+      var slot = this.$scopedSlots['top-info'];
+
+      if (item.topInfo || slot) {
+        return h("div", {
+          "class": bem('top-info')
+        }, [slot ? slot(item) : item.topInfo]);
+      }
+    },
+    genBottomInfo: function genBottomInfo(item) {
+      var h = this.$createElement;
+      var slot = this.$scopedSlots['bottom-info'];
+
+      if (item.bottomInfo || slot) {
+        return h("div", {
+          "class": bem('bottom-info')
+        }, [slot ? slot(item) : item.bottomInfo]);
+      }
+    },
+    genDay: function genDay(item, index) {
+      var _this2 = this;
+
+      var h = this.$createElement;
+      var type = item.type;
+      var style = this.getDayStyle(type, index);
+      var disabled = type === 'disabled';
+
+      var onClick = function onClick() {
+        if (!disabled) {
+          _this2.$emit('click', item);
+        }
+      };
+
+      if (type === 'selected') {
+        return h("div", {
+          "attrs": {
+            "role": "gridcell",
+            "tabindex": -1
+          },
+          "style": style,
+          "class": [bem('day'), item.className],
+          "on": {
+            "click": onClick
+          }
+        }, [h("div", {
+          "class": bem('selected-day'),
+          "style": {
+            width: this.rowHeightWithUnit,
+            height: this.rowHeightWithUnit,
+            background: this.color
+          }
+        }, [this.genTopInfo(item), item.text, this.genBottomInfo(item)])]);
+      }
+
+      return h("div", {
+        "attrs": {
+          "role": "gridcell",
+          "tabindex": disabled ? null : -1
+        },
+        "style": style,
+        "class": [bem('day', type), item.className],
+        "on": {
+          "click": onClick
+        }
+      }, [this.genTopInfo(item), item.text, this.genBottomInfo(item)]);
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": bem('month'),
+      "ref": "month"
+    }, [this.genTitle(), this.genDays()]);
+  }
+});

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
lib/vant/2.13.2/es/calendar/index.css


+ 553 - 0
lib/vant/2.13.2/es/calendar/index.js

@@ -0,0 +1,553 @@
+// Utils
+import { raf } from '../utils/dom/raf';
+import { isDate } from '../utils/validate/date';
+import { getScrollTop } from '../utils/dom/scroll';
+import { t, bem, copyDate, copyDates, getNextDay, compareDay, calcDateNum, compareMonth, createComponent, getDayByOffset } from './utils'; // Components
+
+import Popup from '../popup';
+import Button from '../button';
+import Toast from '../toast';
+import Month from './components/Month';
+import Header from './components/Header';
+export default createComponent({
+  props: {
+    title: String,
+    color: String,
+    value: Boolean,
+    readonly: Boolean,
+    formatter: Function,
+    rowHeight: [Number, String],
+    confirmText: String,
+    rangePrompt: String,
+    defaultDate: [Date, Array],
+    getContainer: [String, Function],
+    allowSameDay: Boolean,
+    confirmDisabledText: String,
+    type: {
+      type: String,
+      default: 'single'
+    },
+    round: {
+      type: Boolean,
+      default: true
+    },
+    position: {
+      type: String,
+      default: 'bottom'
+    },
+    poppable: {
+      type: Boolean,
+      default: true
+    },
+    maxRange: {
+      type: [Number, String],
+      default: null
+    },
+    lazyRender: {
+      type: Boolean,
+      default: true
+    },
+    showMark: {
+      type: Boolean,
+      default: true
+    },
+    showTitle: {
+      type: Boolean,
+      default: true
+    },
+    showConfirm: {
+      type: Boolean,
+      default: true
+    },
+    showSubtitle: {
+      type: Boolean,
+      default: true
+    },
+    closeOnPopstate: {
+      type: Boolean,
+      default: true
+    },
+    closeOnClickOverlay: {
+      type: Boolean,
+      default: true
+    },
+    safeAreaInsetBottom: {
+      type: Boolean,
+      default: true
+    },
+    minDate: {
+      type: Date,
+      validator: isDate,
+      default: function _default() {
+        return new Date();
+      }
+    },
+    maxDate: {
+      type: Date,
+      validator: isDate,
+      default: function _default() {
+        var now = new Date();
+        return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate());
+      }
+    },
+    firstDayOfWeek: {
+      type: [Number, String],
+      default: 0,
+      validator: function validator(val) {
+        return val >= 0 && val <= 6;
+      }
+    }
+  },
+  inject: {
+    vanPopup: {
+      default: null
+    }
+  },
+  data: function data() {
+    return {
+      subtitle: '',
+      currentDate: this.getInitialDate()
+    };
+  },
+  computed: {
+    months: function months() {
+      var months = [];
+      var cursor = new Date(this.minDate);
+      cursor.setDate(1);
+
+      do {
+        months.push(new Date(cursor));
+        cursor.setMonth(cursor.getMonth() + 1);
+      } while (compareMonth(cursor, this.maxDate) !== 1);
+
+      return months;
+    },
+    buttonDisabled: function buttonDisabled() {
+      var type = this.type,
+          currentDate = this.currentDate;
+
+      if (currentDate) {
+        if (type === 'range') {
+          return !currentDate[0] || !currentDate[1];
+        }
+
+        if (type === 'multiple') {
+          return !currentDate.length;
+        }
+      }
+
+      return !currentDate;
+    },
+    dayOffset: function dayOffset() {
+      return this.firstDayOfWeek ? this.firstDayOfWeek % 7 : 0;
+    }
+  },
+  watch: {
+    value: 'init',
+    type: function type() {
+      this.reset();
+    },
+    defaultDate: function defaultDate(val) {
+      this.currentDate = val;
+      this.scrollIntoView();
+    }
+  },
+  mounted: function mounted() {
+    this.init(); // https://github.com/vant-ui/vant/issues/9845
+
+    if (!this.poppable) {
+      var _this$vanPopup;
+
+      (_this$vanPopup = this.vanPopup) == null ? void 0 : _this$vanPopup.$on('opened', this.onScroll);
+    }
+  },
+
+  /* istanbul ignore next */
+  activated: function activated() {
+    this.init();
+  },
+  methods: {
+    // @exposed-api
+    reset: function reset(date) {
+      if (date === void 0) {
+        date = this.getInitialDate();
+      }
+
+      this.currentDate = date;
+      this.scrollIntoView();
+    },
+    init: function init() {
+      var _this = this;
+
+      if (this.poppable && !this.value) {
+        return;
+      }
+
+      this.$nextTick(function () {
+        // add Math.floor to avoid decimal height issues
+        // https://github.com/vant-ui/vant/issues/5640
+        _this.bodyHeight = Math.floor(_this.$refs.body.getBoundingClientRect().height);
+
+        _this.onScroll();
+
+        _this.scrollIntoView();
+      });
+    },
+    // @exposed-api
+    scrollToDate: function scrollToDate(targetDate) {
+      var _this2 = this;
+
+      raf(function () {
+        var displayed = _this2.value || !_this2.poppable;
+        /* istanbul ignore if */
+
+        if (!targetDate || !displayed) {
+          return;
+        }
+
+        _this2.months.some(function (month, index) {
+          if (compareMonth(month, targetDate) === 0) {
+            var _this2$$refs = _this2.$refs,
+                body = _this2$$refs.body,
+                months = _this2$$refs.months;
+            months[index].scrollIntoView(body);
+            return true;
+          }
+
+          return false;
+        });
+
+        _this2.onScroll();
+      });
+    },
+    // scroll to current month
+    scrollIntoView: function scrollIntoView() {
+      var currentDate = this.currentDate;
+
+      if (currentDate) {
+        var targetDate = this.type === 'single' ? currentDate : currentDate[0];
+        this.scrollToDate(targetDate);
+      }
+    },
+    getInitialDate: function getInitialDate() {
+      var type = this.type,
+          minDate = this.minDate,
+          maxDate = this.maxDate,
+          defaultDate = this.defaultDate;
+
+      if (defaultDate === null) {
+        return defaultDate;
+      }
+
+      var defaultVal = new Date();
+
+      if (compareDay(defaultVal, minDate) === -1) {
+        defaultVal = minDate;
+      } else if (compareDay(defaultVal, maxDate) === 1) {
+        defaultVal = maxDate;
+      }
+
+      if (type === 'range') {
+        var _ref = defaultDate || [],
+            startDay = _ref[0],
+            endDay = _ref[1];
+
+        return [startDay || defaultVal, endDay || getNextDay(defaultVal)];
+      }
+
+      if (type === 'multiple') {
+        return defaultDate || [defaultVal];
+      }
+
+      return defaultDate || defaultVal;
+    },
+    // calculate the position of the elements
+    // and find the elements that needs to be rendered
+    onScroll: function onScroll() {
+      var _this$$refs = this.$refs,
+          body = _this$$refs.body,
+          months = _this$$refs.months;
+      var top = getScrollTop(body);
+      var bottom = top + this.bodyHeight;
+      var heights = months.map(function (item) {
+        return item.getHeight();
+      });
+      var heightSum = heights.reduce(function (a, b) {
+        return a + b;
+      }, 0); // iOS scroll bounce may exceed the range
+
+      if (bottom > heightSum && top > 0) {
+        return;
+      }
+
+      var height = 0;
+      var currentMonth;
+      var visibleRange = [-1, -1];
+
+      for (var i = 0; i < months.length; i++) {
+        var visible = height <= bottom && height + heights[i] >= top;
+
+        if (visible) {
+          visibleRange[1] = i;
+
+          if (!currentMonth) {
+            currentMonth = months[i];
+            visibleRange[0] = i;
+          }
+
+          if (!months[i].showed) {
+            months[i].showed = true;
+            this.$emit('month-show', {
+              date: months[i].date,
+              title: months[i].title
+            });
+          }
+        }
+
+        height += heights[i];
+      }
+
+      months.forEach(function (month, index) {
+        month.visible = index >= visibleRange[0] - 1 && index <= visibleRange[1] + 1;
+      });
+      /* istanbul ignore else */
+
+      if (currentMonth) {
+        this.subtitle = currentMonth.title;
+      }
+    },
+    onClickDay: function onClickDay(item) {
+      if (this.readonly) {
+        return;
+      }
+
+      var date = item.date;
+      var type = this.type,
+          currentDate = this.currentDate;
+
+      if (type === 'range') {
+        if (!currentDate) {
+          this.select([date, null]);
+          return;
+        }
+
+        var startDay = currentDate[0],
+            endDay = currentDate[1];
+
+        if (startDay && !endDay) {
+          var compareToStart = compareDay(date, startDay);
+
+          if (compareToStart === 1) {
+            this.select([startDay, date], true);
+          } else if (compareToStart === -1) {
+            this.select([date, null]);
+          } else if (this.allowSameDay) {
+            this.select([date, date], true);
+          }
+        } else {
+          this.select([date, null]);
+        }
+      } else if (type === 'multiple') {
+        if (!currentDate) {
+          this.select([date]);
+          return;
+        }
+
+        var selectedIndex;
+        var selected = this.currentDate.some(function (dateItem, index) {
+          var equal = compareDay(dateItem, date) === 0;
+
+          if (equal) {
+            selectedIndex = index;
+          }
+
+          return equal;
+        });
+
+        if (selected) {
+          var _currentDate$splice = currentDate.splice(selectedIndex, 1),
+              unselectedDate = _currentDate$splice[0];
+
+          this.$emit('unselect', copyDate(unselectedDate));
+        } else if (this.maxRange && currentDate.length >= this.maxRange) {
+          Toast(this.rangePrompt || t('rangePrompt', this.maxRange));
+        } else {
+          this.select([].concat(currentDate, [date]));
+        }
+      } else {
+        this.select(date, true);
+      }
+    },
+    togglePopup: function togglePopup(val) {
+      this.$emit('input', val);
+    },
+    select: function select(date, complete) {
+      var _this3 = this;
+
+      var emit = function emit(date) {
+        _this3.currentDate = date;
+
+        _this3.$emit('select', copyDates(_this3.currentDate));
+      };
+
+      if (complete && this.type === 'range') {
+        var valid = this.checkRange(date);
+
+        if (!valid) {
+          // auto selected to max range if showConfirm
+          if (this.showConfirm) {
+            emit([date[0], getDayByOffset(date[0], this.maxRange - 1)]);
+          } else {
+            emit(date);
+          }
+
+          return;
+        }
+      }
+
+      emit(date);
+
+      if (complete && !this.showConfirm) {
+        this.onConfirm();
+      }
+    },
+    checkRange: function checkRange(date) {
+      var maxRange = this.maxRange,
+          rangePrompt = this.rangePrompt;
+
+      if (maxRange && calcDateNum(date) > maxRange) {
+        Toast(rangePrompt || t('rangePrompt', maxRange));
+        return false;
+      }
+
+      return true;
+    },
+    onConfirm: function onConfirm() {
+      this.$emit('confirm', copyDates(this.currentDate));
+    },
+    genMonth: function genMonth(date, index) {
+      var h = this.$createElement;
+      var showMonthTitle = index !== 0 || !this.showSubtitle;
+      return h(Month, {
+        "ref": "months",
+        "refInFor": true,
+        "attrs": {
+          "date": date,
+          "type": this.type,
+          "color": this.color,
+          "minDate": this.minDate,
+          "maxDate": this.maxDate,
+          "showMark": this.showMark,
+          "formatter": this.formatter,
+          "rowHeight": this.rowHeight,
+          "lazyRender": this.lazyRender,
+          "currentDate": this.currentDate,
+          "showSubtitle": this.showSubtitle,
+          "allowSameDay": this.allowSameDay,
+          "showMonthTitle": showMonthTitle,
+          "firstDayOfWeek": this.dayOffset
+        },
+        "scopedSlots": {
+          'top-info': this.$scopedSlots['top-info'],
+          'bottom-info': this.$scopedSlots['bottom-info']
+        },
+        "on": {
+          "click": this.onClickDay
+        }
+      });
+    },
+    genFooterContent: function genFooterContent() {
+      var h = this.$createElement;
+      var slot = this.slots('footer');
+
+      if (slot) {
+        return slot;
+      }
+
+      if (this.showConfirm) {
+        var text = this.buttonDisabled ? this.confirmDisabledText : this.confirmText;
+        return h(Button, {
+          "attrs": {
+            "round": true,
+            "block": true,
+            "type": "danger",
+            "color": this.color,
+            "disabled": this.buttonDisabled,
+            "nativeType": "button"
+          },
+          "class": bem('confirm'),
+          "on": {
+            "click": this.onConfirm
+          }
+        }, [text || t('confirm')]);
+      }
+    },
+    genFooter: function genFooter() {
+      var h = this.$createElement;
+      return h("div", {
+        "class": bem('footer', {
+          unfit: !this.safeAreaInsetBottom
+        })
+      }, [this.genFooterContent()]);
+    },
+    genCalendar: function genCalendar() {
+      var _this4 = this;
+
+      var h = this.$createElement;
+      return h("div", {
+        "class": bem()
+      }, [h(Header, {
+        "attrs": {
+          "title": this.title,
+          "showTitle": this.showTitle,
+          "subtitle": this.subtitle,
+          "showSubtitle": this.showSubtitle,
+          "firstDayOfWeek": this.dayOffset
+        },
+        "scopedSlots": {
+          title: function title() {
+            return _this4.slots('title');
+          }
+        }
+      }), h("div", {
+        "ref": "body",
+        "class": bem('body'),
+        "on": {
+          "scroll": this.onScroll
+        }
+      }, [this.months.map(this.genMonth)]), this.genFooter()]);
+    }
+  },
+  render: function render() {
+    var _this5 = this;
+
+    var h = arguments[0];
+
+    if (this.poppable) {
+      var _attrs;
+
+      var createListener = function createListener(name) {
+        return function () {
+          return _this5.$emit(name);
+        };
+      };
+
+      return h(Popup, {
+        "attrs": (_attrs = {
+          "round": true,
+          "value": this.value
+        }, _attrs["round"] = this.round, _attrs["position"] = this.position, _attrs["closeable"] = this.showTitle || this.showSubtitle, _attrs["getContainer"] = this.getContainer, _attrs["closeOnPopstate"] = this.closeOnPopstate, _attrs["closeOnClickOverlay"] = this.closeOnClickOverlay, _attrs),
+        "class": bem('popup'),
+        "on": {
+          "input": this.togglePopup,
+          "open": createListener('open'),
+          "opened": createListener('opened'),
+          "close": createListener('close'),
+          "closed": createListener('closed')
+        }
+      }, [this.genCalendar()]);
+    }
+
+    return this.genCalendar();
+  }
+});

+ 188 - 0
lib/vant/2.13.2/es/calendar/index.less

@@ -0,0 +1,188 @@
+@import '../style/var';
+
+.van-calendar {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  background-color: @calendar-background-color;
+
+  &__popup {
+    &.van-popup--top,
+    &.van-popup--bottom {
+      height: @calendar-popup-height;
+    }
+
+    &.van-popup--left,
+    &.van-popup--right {
+      height: 100%;
+    }
+
+    .van-popup__close-icon {
+      top: 11px;
+    }
+  }
+
+  &__header {
+    flex-shrink: 0;
+    box-shadow: @calendar-header-box-shadow;
+  }
+
+  &__month-title,
+  &__header-title,
+  &__header-subtitle {
+    height: @calendar-header-title-height;
+    font-weight: @font-weight-bold;
+    line-height: @calendar-header-title-height;
+    text-align: center;
+  }
+
+  &__header-title {
+    font-size: @calendar-header-title-font-size;
+  }
+
+  &__header-subtitle {
+    font-size: @calendar-header-subtitle-font-size;
+  }
+
+  &__month-title {
+    font-size: @calendar-month-title-font-size;
+  }
+
+  &__weekdays {
+    display: flex;
+  }
+
+  &__weekday {
+    flex: 1;
+    font-size: @calendar-weekdays-font-size;
+    line-height: @calendar-weekdays-height;
+    text-align: center;
+  }
+
+  &__body {
+    flex: 1;
+    overflow: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+
+  &__days {
+    position: relative;
+    display: flex;
+    flex-wrap: wrap;
+    user-select: none;
+  }
+
+  &__month-mark {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    z-index: 0;
+    color: @calendar-month-mark-color;
+    font-size: @calendar-month-mark-font-size;
+    transform: translate(-50%, -50%);
+    pointer-events: none;
+  }
+
+  &__day,
+  &__selected-day {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
+  }
+
+  &__day {
+    position: relative;
+    width: 14.285%;
+    height: @calendar-day-height;
+    font-size: @calendar-day-font-size;
+    cursor: pointer;
+
+    &--end,
+    &--start,
+    &--start-end,
+    &--multiple-middle,
+    &--multiple-selected {
+      color: @calendar-range-edge-color;
+      background-color: @calendar-range-edge-background-color;
+    }
+
+    &--start {
+      border-radius: @border-radius-md 0 0 @border-radius-md;
+    }
+
+    &--end {
+      border-radius: 0 @border-radius-md @border-radius-md 0;
+    }
+
+    &--start-end,
+    &--multiple-selected {
+      border-radius: @border-radius-md;
+    }
+
+    &--middle {
+      color: @calendar-range-middle-color;
+
+      &::after {
+        position: absolute;
+        top: 0;
+        right: 0;
+        bottom: 0;
+        left: 0;
+        background-color: currentColor;
+        opacity: @calendar-range-middle-background-opacity;
+        content: '';
+      }
+    }
+
+    &--disabled {
+      color: @calendar-day-disabled-color;
+      cursor: default;
+    }
+  }
+
+  &__top-info,
+  &__bottom-info {
+    position: absolute;
+    right: 0;
+    left: 0;
+    font-size: @calendar-info-font-size;
+    line-height: @calendar-info-line-height;
+
+    @media (max-width: 350px) {
+      font-size: 9px;
+    }
+  }
+
+  &__top-info {
+    top: 6px;
+  }
+
+  &__bottom-info {
+    bottom: 6px;
+  }
+
+  &__selected-day {
+    width: @calendar-selected-day-size;
+    height: @calendar-selected-day-size;
+    color: @calendar-selected-day-color;
+    background-color: @calendar-selected-day-background-color;
+    border-radius: @border-radius-md;
+  }
+
+  &__footer {
+    flex-shrink: 0;
+    padding: 0 @padding-md;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+
+    &--unfit {
+      padding-bottom: 0;
+    }
+  }
+
+  &__confirm {
+    height: @calendar-confirm-button-height;
+    margin: @calendar-confirm-button-margin;
+  }
+}

+ 9 - 0
lib/vant/2.13.2/es/calendar/style/index.js

@@ -0,0 +1,9 @@
+import '../../style/base.css';
+import '../../overlay/index.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../popup/index.css';
+import '../../loading/index.css';
+import '../../button/index.css';
+import '../../toast/index.css';
+import '../index.css';

+ 9 - 0
lib/vant/2.13.2/es/calendar/style/less.js

@@ -0,0 +1,9 @@
+import '../../style/base.less';
+import '../../overlay/index.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../popup/index.less';
+import '../../loading/index.less';
+import '../../button/index.less';
+import '../../toast/index.less';
+import '../index.less';

+ 66 - 0
lib/vant/2.13.2/es/calendar/utils.js

@@ -0,0 +1,66 @@
+import { createNamespace } from '../utils';
+
+var _createNamespace = createNamespace('calendar'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+export { createComponent, bem, t };
+export function formatMonthTitle(date) {
+  return t('monthTitle', date.getFullYear(), date.getMonth() + 1);
+}
+export function compareMonth(date1, date2) {
+  var year1 = date1.getFullYear();
+  var year2 = date2.getFullYear();
+  var month1 = date1.getMonth();
+  var month2 = date2.getMonth();
+
+  if (year1 === year2) {
+    return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+  }
+
+  return year1 > year2 ? 1 : -1;
+}
+export function compareDay(day1, day2) {
+  var compareMonthResult = compareMonth(day1, day2);
+
+  if (compareMonthResult === 0) {
+    var date1 = day1.getDate();
+    var date2 = day2.getDate();
+    return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
+  }
+
+  return compareMonthResult;
+}
+export function getDayByOffset(date, offset) {
+  date = new Date(date);
+  date.setDate(date.getDate() + offset);
+  return date;
+}
+export function getPrevDay(date) {
+  return getDayByOffset(date, -1);
+}
+export function getNextDay(date) {
+  return getDayByOffset(date, 1);
+}
+export function calcDateNum(date) {
+  var day1 = date[0].getTime();
+  var day2 = date[1].getTime();
+  return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
+}
+export function copyDate(dates) {
+  return new Date(dates);
+}
+export function copyDates(dates) {
+  if (Array.isArray(dates)) {
+    return dates.map(function (date) {
+      if (date === null) {
+        return date;
+      }
+
+      return copyDate(date);
+    });
+  }
+
+  return copyDate(dates);
+}

+ 1 - 0
lib/vant/2.13.2/es/card/index.css

@@ -0,0 +1 @@
+.van-card{position:relative;box-sizing:border-box;padding:8px 16px;color:#323233;font-size:12px;background-color:#fafafa}.van-card:not(:first-child){margin-top:8px}.van-card__header{display:-webkit-box;display:-webkit-flex;display:flex}.van-card__thumb{position:relative;-webkit-box-flex:0;-webkit-flex:none;flex:none;width:88px;height:88px;margin-right:8px}.van-card__thumb img{border-radius:8px}.van-card__content{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;min-width:0;min-height:88px}.van-card__content--centered{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.van-card__desc,.van-card__title{word-wrap:break-word}.van-card__title{max-height:32px;font-weight:500;line-height:16px}.van-card__desc{max-height:20px;color:#646566;line-height:20px}.van-card__bottom{line-height:20px}.van-card__price{display:inline-block;color:#323233;font-weight:500;font-size:12px}.van-card__price-integer{font-size:16px;font-family:Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif}.van-card__price-decimal{font-family:Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif}.van-card__origin-price{display:inline-block;margin-left:5px;color:#969799;font-size:10px;text-decoration:line-through}.van-card__num{float:right;color:#969799}.van-card__tag{position:absolute;top:2px;left:0}.van-card__footer{-webkit-box-flex:0;-webkit-flex:none;flex:none;text-align:right}.van-card__footer .van-button{margin-left:5px}

+ 158 - 0
lib/vant/2.13.2/es/card/index.js

@@ -0,0 +1,158 @@
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace, isDef } from '../utils';
+import { emit, inherit } from '../utils/functional'; // Components
+
+import Tag from '../tag';
+import Image from '../image'; // Types
+
+var _createNamespace = createNamespace('card'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function Card(h, props, slots, ctx) {
+  var _slots$priceTop;
+
+  var thumb = props.thumb;
+  var showNum = slots.num || isDef(props.num);
+  var showPrice = slots.price || isDef(props.price);
+  var showOriginPrice = slots['origin-price'] || isDef(props.originPrice);
+  var showBottom = showNum || showPrice || showOriginPrice || slots.bottom;
+
+  function onThumbClick(event) {
+    emit(ctx, 'click-thumb', event);
+  }
+
+  function ThumbTag() {
+    if (slots.tag || props.tag) {
+      return h("div", {
+        "class": bem('tag')
+      }, [slots.tag ? slots.tag() : h(Tag, {
+        "attrs": {
+          "mark": true,
+          "type": "danger"
+        }
+      }, [props.tag])]);
+    }
+  }
+
+  function Thumb() {
+    if (slots.thumb || thumb) {
+      return h("a", {
+        "attrs": {
+          "href": props.thumbLink
+        },
+        "class": bem('thumb'),
+        "on": {
+          "click": onThumbClick
+        }
+      }, [slots.thumb ? slots.thumb() : h(Image, {
+        "attrs": {
+          "src": thumb,
+          "width": "100%",
+          "height": "100%",
+          "fit": "cover",
+          "lazy-load": props.lazyLoad
+        }
+      }), ThumbTag()]);
+    }
+  }
+
+  function Title() {
+    if (slots.title) {
+      return slots.title();
+    }
+
+    if (props.title) {
+      return h("div", {
+        "class": [bem('title'), 'van-multi-ellipsis--l2']
+      }, [props.title]);
+    }
+  }
+
+  function Desc() {
+    if (slots.desc) {
+      return slots.desc();
+    }
+
+    if (props.desc) {
+      return h("div", {
+        "class": [bem('desc'), 'van-ellipsis']
+      }, [props.desc]);
+    }
+  }
+
+  function PriceContent() {
+    var priceArr = props.price.toString().split('.');
+    return h("div", [h("span", {
+      "class": bem('price-currency')
+    }, [props.currency]), h("span", {
+      "class": bem('price-integer')
+    }, [priceArr[0]]), ".", h("span", {
+      "class": bem('price-decimal')
+    }, [priceArr[1]])]);
+  }
+
+  function Price() {
+    if (showPrice) {
+      return h("div", {
+        "class": bem('price')
+      }, [slots.price ? slots.price() : PriceContent()]);
+    }
+  }
+
+  function OriginPrice() {
+    if (showOriginPrice) {
+      var slot = slots['origin-price'];
+      return h("div", {
+        "class": bem('origin-price')
+      }, [slot ? slot() : props.currency + " " + props.originPrice]);
+    }
+  }
+
+  function Num() {
+    if (showNum) {
+      return h("div", {
+        "class": bem('num')
+      }, [slots.num ? slots.num() : "x" + props.num]);
+    }
+  }
+
+  function Footer() {
+    if (slots.footer) {
+      return h("div", {
+        "class": bem('footer')
+      }, [slots.footer()]);
+    }
+  }
+
+  return h("div", _mergeJSXProps([{
+    "class": bem()
+  }, inherit(ctx, true)]), [h("div", {
+    "class": bem('header')
+  }, [Thumb(), h("div", {
+    "class": bem('content', {
+      centered: props.centered
+    })
+  }, [h("div", [Title(), Desc(), slots.tags == null ? void 0 : slots.tags()]), showBottom && h("div", {
+    "class": "van-card__bottom"
+  }, [(_slots$priceTop = slots['price-top']) == null ? void 0 : _slots$priceTop.call(slots), Price(), OriginPrice(), Num(), slots.bottom == null ? void 0 : slots.bottom()])])]), Footer()]);
+}
+
+Card.props = {
+  tag: String,
+  desc: String,
+  thumb: String,
+  title: String,
+  centered: Boolean,
+  lazyLoad: Boolean,
+  thumbLink: String,
+  num: [Number, String],
+  price: [Number, String],
+  originPrice: [Number, String],
+  currency: {
+    type: String,
+    default: '¥'
+  }
+};
+export default createComponent(Card);

+ 109 - 0
lib/vant/2.13.2/es/card/index.less

@@ -0,0 +1,109 @@
+@import '../style/var';
+
+.van-card {
+  position: relative;
+  box-sizing: border-box;
+  padding: @card-padding;
+  color: @card-text-color;
+  font-size: @card-font-size;
+  background-color: @card-background-color;
+
+  &:not(:first-child) {
+    margin-top: @padding-xs;
+  }
+
+  &__header {
+    display: flex;
+  }
+
+  &__thumb {
+    position: relative;
+    flex: none;
+    width: @card-thumb-size;
+    height: @card-thumb-size;
+    margin-right: @padding-xs;
+
+    img {
+      border-radius: @card-thumb-border-radius;
+    }
+  }
+
+  &__content {
+    position: relative;
+    display: flex;
+    flex: 1;
+    flex-direction: column;
+    justify-content: space-between;
+    min-width: 0; /* hack for flex box ellipsis */
+    min-height: @card-thumb-size;
+
+    &--centered {
+      justify-content: center;
+    }
+  }
+
+  &__title,
+  &__desc {
+    word-wrap: break-word;
+  }
+
+  &__title {
+    max-height: 32px;
+    font-weight: @font-weight-bold;
+    line-height: @card-title-line-height;
+  }
+
+  &__desc {
+    max-height: @card-desc-line-height;
+    color: @card-desc-color;
+    line-height: @card-desc-line-height;
+  }
+
+  &__bottom {
+    line-height: @line-height-md;
+  }
+
+  &__price {
+    display: inline-block;
+    color: @card-price-color;
+    font-weight: @font-weight-bold;
+    font-size: @card-price-font-size;
+  }
+
+  &__price-integer {
+    font-size: @card-price-integer-font-size;
+    font-family: @card-price-font-family;
+  }
+
+  &__price-decimal {
+    font-family: @card-price-font-family;
+  }
+
+  &__origin-price {
+    display: inline-block;
+    margin-left: 5px;
+    color: @card-origin-price-color;
+    font-size: @card-origin-price-font-size;
+    text-decoration: line-through;
+  }
+
+  &__num {
+    float: right;
+    color: @card-num-color;
+  }
+
+  &__tag {
+    position: absolute;
+    top: 2px;
+    left: 0;
+  }
+
+  &__footer {
+    flex: none;
+    text-align: right;
+
+    .van-button {
+      margin-left: 5px;
+    }
+  }
+}

+ 6 - 0
lib/vant/2.13.2/es/card/style/index.js

@@ -0,0 +1,6 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../image/index.css';
+import '../../tag/index.css';
+import '../index.css';

+ 6 - 0
lib/vant/2.13.2/es/card/style/less.js

@@ -0,0 +1,6 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../image/index.less';
+import '../../tag/index.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/cascader/index.css

@@ -0,0 +1 @@
+.van-cascader__header{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;height:48px;padding:0 16px}.van-cascader__title{font-weight:500;font-size:16px;line-height:20px}.van-cascader__close-icon{color:#c8c9cc;font-size:22px}.van-cascader__close-icon:active{color:#969799}.van-cascader__tabs .van-tab{-webkit-box-flex:0;-webkit-flex:none;flex:none;padding:0 10px}.van-cascader__tabs.van-tabs--line .van-tabs__wrap{height:48px}.van-cascader__tabs .van-tabs__nav--complete{padding-right:6px;padding-left:6px}.van-cascader__tab{color:#323233;font-weight:500}.van-cascader__tab--unselected{color:#969799;font-weight:400}.van-cascader__option{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;padding:10px 16px;font-size:14px;line-height:20px}.van-cascader__option:active{background-color:#f2f3f5}.van-cascader__option--selected{color:#ee0a24;font-weight:500}.van-cascader__selected-icon{font-size:18px}.van-cascader__options{box-sizing:border-box;height:384px;padding-top:6px;overflow-y:auto;-webkit-overflow-scrolling:touch}

+ 284 - 0
lib/vant/2.13.2/es/cascader/index.js

@@ -0,0 +1,284 @@
+import { createNamespace } from '../utils';
+import Tab from '../tab';
+import Tabs from '../tabs';
+import Icon from '../icon';
+
+var _createNamespace = createNamespace('cascader'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+export default createComponent({
+  props: {
+    title: String,
+    value: [Number, String],
+    fieldNames: Object,
+    placeholder: String,
+    activeColor: String,
+    options: {
+      type: Array,
+      default: function _default() {
+        return [];
+      }
+    },
+    closeable: {
+      type: Boolean,
+      default: true
+    },
+    showHeader: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data: function data() {
+    return {
+      tabs: [],
+      activeTab: 0
+    };
+  },
+  computed: {
+    textKey: function textKey() {
+      var _this$fieldNames;
+
+      return ((_this$fieldNames = this.fieldNames) == null ? void 0 : _this$fieldNames.text) || 'text';
+    },
+    valueKey: function valueKey() {
+      var _this$fieldNames2;
+
+      return ((_this$fieldNames2 = this.fieldNames) == null ? void 0 : _this$fieldNames2.value) || 'value';
+    },
+    childrenKey: function childrenKey() {
+      var _this$fieldNames3;
+
+      return ((_this$fieldNames3 = this.fieldNames) == null ? void 0 : _this$fieldNames3.children) || 'children';
+    }
+  },
+  watch: {
+    options: {
+      deep: true,
+      handler: 'updateTabs'
+    },
+    value: function value(_value) {
+      var _this = this;
+
+      if (_value || _value === 0) {
+        var values = this.tabs.map(function (tab) {
+          var _tab$selectedOption;
+
+          return (_tab$selectedOption = tab.selectedOption) == null ? void 0 : _tab$selectedOption[_this.valueKey];
+        });
+
+        if (values.indexOf(_value) !== -1) {
+          return;
+        }
+      }
+
+      this.updateTabs();
+    }
+  },
+  created: function created() {
+    this.updateTabs();
+  },
+  methods: {
+    getSelectedOptionsByValue: function getSelectedOptionsByValue(options, value) {
+      for (var i = 0; i < options.length; i++) {
+        var option = options[i];
+
+        if (option[this.valueKey] === value) {
+          return [option];
+        }
+
+        if (option[this.childrenKey]) {
+          var selectedOptions = this.getSelectedOptionsByValue(option[this.childrenKey], value);
+
+          if (selectedOptions) {
+            return [option].concat(selectedOptions);
+          }
+        }
+      }
+    },
+    updateTabs: function updateTabs() {
+      var _this2 = this;
+
+      if (this.value || this.value === 0) {
+        var selectedOptions = this.getSelectedOptionsByValue(this.options, this.value);
+
+        if (selectedOptions) {
+          var optionsCursor = this.options;
+          this.tabs = selectedOptions.map(function (option) {
+            var tab = {
+              options: optionsCursor,
+              selectedOption: option
+            };
+            var next = optionsCursor.filter(function (item) {
+              return item[_this2.valueKey] === option[_this2.valueKey];
+            });
+
+            if (next.length) {
+              optionsCursor = next[0][_this2.childrenKey];
+            }
+
+            return tab;
+          });
+
+          if (optionsCursor) {
+            this.tabs.push({
+              options: optionsCursor,
+              selectedOption: null
+            });
+          }
+
+          this.$nextTick(function () {
+            _this2.activeTab = _this2.tabs.length - 1;
+          });
+          return;
+        }
+      }
+
+      this.tabs = [{
+        options: this.options,
+        selectedOption: null
+      }];
+    },
+    onSelect: function onSelect(option, tabIndex) {
+      var _this3 = this;
+
+      this.tabs[tabIndex].selectedOption = option;
+
+      if (this.tabs.length > tabIndex + 1) {
+        this.tabs = this.tabs.slice(0, tabIndex + 1);
+      }
+
+      if (option[this.childrenKey]) {
+        var nextTab = {
+          options: option[this.childrenKey],
+          selectedOption: null
+        };
+
+        if (this.tabs[tabIndex + 1]) {
+          this.$set(this.tabs, tabIndex + 1, nextTab);
+        } else {
+          this.tabs.push(nextTab);
+        }
+
+        this.$nextTick(function () {
+          _this3.activeTab++;
+        });
+      }
+
+      var selectedOptions = this.tabs.map(function (tab) {
+        return tab.selectedOption;
+      }).filter(function (item) {
+        return !!item;
+      });
+      var eventParams = {
+        value: option[this.valueKey],
+        tabIndex: tabIndex,
+        selectedOptions: selectedOptions
+      };
+      this.$emit('input', option[this.valueKey]);
+      this.$emit('change', eventParams);
+
+      if (!option[this.childrenKey]) {
+        this.$emit('finish', eventParams);
+      }
+    },
+    onClose: function onClose() {
+      this.$emit('close');
+    },
+    renderHeader: function renderHeader() {
+      var h = this.$createElement;
+
+      if (this.showHeader) {
+        return h("div", {
+          "class": bem('header')
+        }, [h("h2", {
+          "class": bem('title')
+        }, [this.slots('title') || this.title]), this.closeable ? h(Icon, {
+          "attrs": {
+            "name": "cross"
+          },
+          "class": bem('close-icon'),
+          "on": {
+            "click": this.onClose
+          }
+        }) : null]);
+      }
+    },
+    renderOptions: function renderOptions(options, selectedOption, tabIndex) {
+      var _this4 = this;
+
+      var h = this.$createElement;
+
+      var renderOption = function renderOption(option) {
+        var isSelected = selectedOption && option[_this4.valueKey] === selectedOption[_this4.valueKey];
+        var Text = _this4.slots('option', {
+          option: option,
+          selected: isSelected
+        }) || h("span", [option[_this4.textKey]]);
+        return h("li", {
+          "class": bem('option', {
+            selected: isSelected
+          }),
+          "style": {
+            color: isSelected ? _this4.activeColor : null
+          },
+          "on": {
+            "click": function click() {
+              _this4.onSelect(option, tabIndex);
+            }
+          }
+        }, [Text, isSelected ? h(Icon, {
+          "attrs": {
+            "name": "success"
+          },
+          "class": bem('selected-icon')
+        }) : null]);
+      };
+
+      return h("ul", {
+        "class": bem('options')
+      }, [options.map(renderOption)]);
+    },
+    renderTab: function renderTab(item, tabIndex) {
+      var h = this.$createElement;
+      var options = item.options,
+          selectedOption = item.selectedOption;
+      var title = selectedOption ? selectedOption[this.textKey] : this.placeholder || t('select');
+      return h(Tab, {
+        "attrs": {
+          "title": title,
+          "titleClass": bem('tab', {
+            unselected: !selectedOption
+          })
+        }
+      }, [this.renderOptions(options, selectedOption, tabIndex)]);
+    },
+    renderTabs: function renderTabs() {
+      var _this5 = this;
+
+      var h = this.$createElement;
+      return h(Tabs, {
+        "attrs": {
+          "animated": true,
+          "swipeable": true,
+          "swipeThreshold": 0,
+          "color": this.activeColor
+        },
+        "class": bem('tabs'),
+        "model": {
+          value: _this5.activeTab,
+          callback: function callback($$v) {
+            _this5.activeTab = $$v;
+          }
+        }
+      }, [this.tabs.map(this.renderTab)]);
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": bem()
+    }, [this.renderHeader(), this.renderTabs()]);
+  }
+});

+ 82 - 0
lib/vant/2.13.2/es/cascader/index.less

@@ -0,0 +1,82 @@
+@import '../style/var';
+
+.van-cascader {
+  &__header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: @cascader-header-height;
+    padding: 0 @padding-md;
+  }
+
+  &__title {
+    font-weight: @font-weight-bold;
+    font-size: @cascader-title-font-size;
+    line-height: @cascader-title-line-height;
+  }
+
+  &__close-icon {
+    color: @cascader-close-icon-color;
+    font-size: @cascader-close-icon-size;
+
+    &:active {
+      color: @cascader-close-icon-active-color;
+    }
+  }
+
+  &__tabs {
+    .van-tab {
+      flex: none;
+      padding: 0 10px;
+    }
+
+    &.van-tabs--line .van-tabs__wrap {
+      height: @cascader-tabs-height;
+    }
+
+    .van-tabs__nav--complete {
+      padding-right: 6px;
+      padding-left: 6px;
+    }
+  }
+
+  &__tab {
+    color: @cascader-tab-color;
+    font-weight: @font-weight-bold;
+
+    &--unselected {
+      color: @cascader-unselected-tab-color;
+      font-weight: normal;
+    }
+  }
+
+  &__option {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 10px @padding-md;
+    font-size: @font-size-md;
+    line-height: @line-height-md;
+
+    &:active {
+      background-color: @active-color;
+    }
+
+    &--selected {
+      color: @cascader-active-color;
+      font-weight: @font-weight-bold;
+    }
+  }
+
+  &__selected-icon {
+    font-size: @cascader-selected-icon-size;
+  }
+
+  &__options {
+    box-sizing: border-box;
+    height: @cascader-options-height;
+    padding-top: 6px;
+    overflow-y: auto;
+    -webkit-overflow-scrolling: touch;
+  }
+}

+ 7 - 0
lib/vant/2.13.2/es/cascader/style/index.js

@@ -0,0 +1,7 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../tab/index.css';
+import '../../sticky/index.css';
+import '../../tabs/index.css';
+import '../index.css';

+ 7 - 0
lib/vant/2.13.2/es/cascader/style/less.js

@@ -0,0 +1,7 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../tab/index.less';
+import '../../sticky/index.less';
+import '../../tabs/index.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/cell-group/index.css

@@ -0,0 +1 @@
+.van-cell-group{background-color:#fff}.van-cell-group--inset{margin:0 16px;overflow:hidden;border-radius:8px}.van-cell-group__title{padding:16px 16px 8px;color:#969799;font-size:14px;line-height:16px}.van-cell-group__title--inset{padding:16px 16px 8px 32px}

+ 41 - 0
lib/vant/2.13.2/es/cell-group/index.js

@@ -0,0 +1,41 @@
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace } from '../utils';
+import { inherit } from '../utils/functional';
+import { BORDER_TOP_BOTTOM } from '../utils/constant'; // Types
+
+var _createNamespace = createNamespace('cell-group'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function CellGroup(h, props, slots, ctx) {
+  var _ref;
+
+  var Group = h("div", _mergeJSXProps([{
+    "class": [bem({
+      inset: props.inset
+    }), (_ref = {}, _ref[BORDER_TOP_BOTTOM] = props.border, _ref)]
+  }, inherit(ctx, true)]), [slots.default == null ? void 0 : slots.default()]);
+
+  if (props.title || slots.title) {
+    return h("div", {
+      "key": ctx.data.key
+    }, [h("div", {
+      "class": bem('title', {
+        inset: props.inset
+      })
+    }, [slots.title ? slots.title() : props.title]), Group]);
+  }
+
+  return Group;
+}
+
+CellGroup.props = {
+  title: String,
+  inset: Boolean,
+  border: {
+    type: Boolean,
+    default: true
+  }
+};
+export default createComponent(CellGroup);

+ 22 - 0
lib/vant/2.13.2/es/cell-group/index.less

@@ -0,0 +1,22 @@
+@import '../style/var';
+
+.van-cell-group {
+  background-color: @cell-group-background-color;
+
+  &--inset {
+    margin: @cell-group-inset-padding;
+    overflow: hidden;
+    border-radius: @cell-group-inset-border-radius;
+  }
+
+  &__title {
+    padding: @cell-group-title-padding;
+    color: @cell-group-title-color;
+    font-size: @cell-group-title-font-size;
+    line-height: @cell-group-title-line-height;
+
+    &--inset {
+      padding: @cell-group-inset-title-padding;
+    }
+  }
+}

+ 2 - 0
lib/vant/2.13.2/es/cell-group/style/index.js

@@ -0,0 +1,2 @@
+import '../../style/base.css';
+import '../index.css';

+ 2 - 0
lib/vant/2.13.2/es/cell-group/style/less.js

@@ -0,0 +1,2 @@
+import '../../style/base.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/cell/index.css

@@ -0,0 +1 @@
+.van-cell{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;overflow:hidden;color:#323233;font-size:14px;line-height:24px;background-color:#fff}.van-cell::after{position:absolute;box-sizing:border-box;content:' ';pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-cell--borderless::after,.van-cell:last-child::after{display:none}.van-cell__label{margin-top:4px;color:#969799;font-size:12px;line-height:18px}.van-cell__title,.van-cell__value{-webkit-box-flex:1;-webkit-flex:1;flex:1}.van-cell__value{position:relative;overflow:hidden;color:#969799;text-align:right;vertical-align:middle;word-wrap:break-word}.van-cell__value--alone{color:#323233;text-align:left}.van-cell__left-icon,.van-cell__right-icon{height:24px;font-size:16px;line-height:24px}.van-cell__left-icon{margin-right:4px}.van-cell__right-icon{margin-left:4px;color:#969799}.van-cell--clickable{cursor:pointer}.van-cell--clickable:active{background-color:#f2f3f5}.van-cell--required{overflow:visible}.van-cell--required::before{position:absolute;left:8px;color:#ee0a24;font-size:14px;content:'*'}.van-cell--center{-webkit-box-align:center;-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-bottom:12px}.van-cell--large .van-cell__title{font-size:16px}.van-cell--large .van-cell__label{font-size:14px}

+ 121 - 0
lib/vant/2.13.2/es/cell/index.js

@@ -0,0 +1,121 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace, isDef } from '../utils';
+import { emit, inherit } from '../utils/functional';
+import { routeProps, functionalRoute } from '../utils/router';
+import { cellProps } from './shared'; // Components
+
+import Icon from '../icon'; // Types
+
+var _createNamespace = createNamespace('cell'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+function Cell(h, props, slots, ctx) {
+  var _props$clickable;
+
+  var icon = props.icon,
+      size = props.size,
+      title = props.title,
+      label = props.label,
+      value = props.value,
+      isLink = props.isLink;
+  var showTitle = slots.title || isDef(title);
+
+  function Label() {
+    var showLabel = slots.label || isDef(label);
+
+    if (showLabel) {
+      return h("div", {
+        "class": [bem('label'), props.labelClass]
+      }, [slots.label ? slots.label() : label]);
+    }
+  }
+
+  function Title() {
+    if (showTitle) {
+      return h("div", {
+        "class": [bem('title'), props.titleClass],
+        "style": props.titleStyle
+      }, [slots.title ? slots.title() : h("span", [title]), Label()]);
+    }
+  }
+
+  function Value() {
+    var showValue = slots.default || isDef(value);
+
+    if (showValue) {
+      return h("div", {
+        "class": [bem('value', {
+          alone: !showTitle
+        }), props.valueClass]
+      }, [slots.default ? slots.default() : h("span", [value])]);
+    }
+  }
+
+  function LeftIcon() {
+    if (slots.icon) {
+      return slots.icon();
+    }
+
+    if (icon) {
+      return h(Icon, {
+        "class": bem('left-icon'),
+        "attrs": {
+          "name": icon,
+          "classPrefix": props.iconPrefix
+        }
+      });
+    }
+  }
+
+  function RightIcon() {
+    var rightIconSlot = slots['right-icon'];
+
+    if (rightIconSlot) {
+      return rightIconSlot();
+    }
+
+    if (isLink) {
+      var arrowDirection = props.arrowDirection;
+      return h(Icon, {
+        "class": bem('right-icon'),
+        "attrs": {
+          "name": arrowDirection ? "arrow-" + arrowDirection : 'arrow'
+        }
+      });
+    }
+  }
+
+  function onClick(event) {
+    emit(ctx, 'click', event);
+    functionalRoute(ctx);
+  }
+
+  var clickable = (_props$clickable = props.clickable) != null ? _props$clickable : isLink;
+  var classes = {
+    clickable: clickable,
+    center: props.center,
+    required: props.required,
+    borderless: !props.border
+  };
+
+  if (size) {
+    classes[size] = size;
+  }
+
+  return h("div", _mergeJSXProps([{
+    "class": bem(classes),
+    "attrs": {
+      "role": clickable ? 'button' : null,
+      "tabindex": clickable ? 0 : null
+    },
+    "on": {
+      "click": onClick
+    }
+  }, inherit(ctx)]), [LeftIcon(), Title(), Value(), RightIcon(), slots.extra == null ? void 0 : slots.extra()]);
+}
+
+Cell.props = _extends({}, cellProps, routeProps);
+export default createComponent(Cell);

+ 103 - 0
lib/vant/2.13.2/es/cell/index.less

@@ -0,0 +1,103 @@
+@import '../style/var';
+@import '../style/mixins/hairline';
+
+.van-cell {
+  position: relative;
+  display: flex;
+  box-sizing: border-box;
+  width: 100%;
+  padding: @cell-vertical-padding @cell-horizontal-padding;
+  overflow: hidden;
+  color: @cell-text-color;
+  font-size: @cell-font-size;
+  line-height: @cell-line-height;
+  background-color: @cell-background-color;
+
+  &::after {
+    .hairline-bottom(@cell-border-color, @padding-md, @padding-md);
+  }
+
+  &:last-child::after,
+  &--borderless::after {
+    display: none;
+  }
+
+  &__label {
+    margin-top: @cell-label-margin-top;
+    color: @cell-label-color;
+    font-size: @cell-label-font-size;
+    line-height: @cell-label-line-height;
+  }
+
+  &__title,
+  &__value {
+    flex: 1;
+  }
+
+  &__value {
+    position: relative;
+    overflow: hidden;
+    color: @cell-value-color;
+    text-align: right;
+    vertical-align: middle;
+    word-wrap: break-word;
+
+    &--alone {
+      color: @text-color;
+      text-align: left;
+    }
+  }
+
+  &__left-icon,
+  &__right-icon {
+    height: @cell-line-height;
+    font-size: @cell-icon-size;
+    line-height: @cell-line-height;
+  }
+
+  &__left-icon {
+    margin-right: @padding-base;
+  }
+
+  &__right-icon {
+    margin-left: @padding-base;
+    color: @cell-right-icon-color;
+  }
+
+  &--clickable {
+    cursor: pointer;
+
+    &:active {
+      background-color: @cell-active-color;
+    }
+  }
+
+  &--required {
+    overflow: visible;
+
+    &::before {
+      position: absolute;
+      left: @padding-xs;
+      color: @cell-required-color;
+      font-size: @cell-font-size;
+      content: '*';
+    }
+  }
+
+  &--center {
+    align-items: center;
+  }
+
+  &--large {
+    padding-top: @cell-large-vertical-padding;
+    padding-bottom: @cell-large-vertical-padding;
+
+    .van-cell__title {
+      font-size: @cell-large-title-font-size;
+    }
+
+    .van-cell__label {
+      font-size: @cell-large-label-font-size;
+    }
+  }
+}

+ 24 - 0
lib/vant/2.13.2/es/cell/shared.js

@@ -0,0 +1,24 @@
+export var cellProps = {
+  icon: String,
+  size: String,
+  center: Boolean,
+  isLink: Boolean,
+  required: Boolean,
+  iconPrefix: String,
+  titleStyle: null,
+  titleClass: null,
+  valueClass: null,
+  labelClass: null,
+  title: [Number, String],
+  value: [Number, String],
+  label: [Number, String],
+  arrowDirection: String,
+  border: {
+    type: Boolean,
+    default: true
+  },
+  clickable: {
+    type: Boolean,
+    default: null
+  }
+};

+ 4 - 0
lib/vant/2.13.2/es/cell/style/index.js

@@ -0,0 +1,4 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../index.css';

+ 4 - 0
lib/vant/2.13.2/es/cell/style/less.js

@@ -0,0 +1,4 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/checkbox-group/index.css

@@ -0,0 +1 @@
+.van-checkbox-group--horizontal{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}

+ 64 - 0
lib/vant/2.13.2/es/checkbox-group/index.js

@@ -0,0 +1,64 @@
+import { createNamespace } from '../utils';
+import { FieldMixin } from '../mixins/field';
+import { ParentMixin } from '../mixins/relation';
+
+var _createNamespace = createNamespace('checkbox-group'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+export default createComponent({
+  mixins: [ParentMixin('vanCheckbox'), FieldMixin],
+  props: {
+    max: [Number, String],
+    disabled: Boolean,
+    direction: String,
+    iconSize: [Number, String],
+    checkedColor: String,
+    value: {
+      type: Array,
+      default: function _default() {
+        return [];
+      }
+    }
+  },
+  watch: {
+    value: function value(val) {
+      this.$emit('change', val);
+    }
+  },
+  methods: {
+    // @exposed-api
+    toggleAll: function toggleAll(options) {
+      if (options === void 0) {
+        options = {};
+      }
+
+      if (typeof options === 'boolean') {
+        options = {
+          checked: options
+        };
+      }
+
+      var _options = options,
+          checked = _options.checked,
+          skipDisabled = _options.skipDisabled;
+      var children = this.children.filter(function (item) {
+        if (item.disabled && skipDisabled) {
+          return item.checked;
+        }
+
+        return checked != null ? checked : !item.checked;
+      });
+      var names = children.map(function (item) {
+        return item.name;
+      });
+      this.$emit('input', names);
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": bem([this.direction])
+    }, [this.slots()]);
+  }
+});

+ 8 - 0
lib/vant/2.13.2/es/checkbox-group/index.less

@@ -0,0 +1,8 @@
+@import '../style/var';
+
+.van-checkbox-group {
+  &--horizontal {
+    display: flex;
+    flex-wrap: wrap;
+  }
+}

+ 2 - 0
lib/vant/2.13.2/es/checkbox-group/style/index.js

@@ -0,0 +1,2 @@
+import '../../style/base.css';
+import '../index.css';

+ 2 - 0
lib/vant/2.13.2/es/checkbox-group/style/less.js

@@ -0,0 +1,2 @@
+import '../../style/base.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/checkbox/index.css

@@ -0,0 +1 @@
+.van-checkbox{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;overflow:hidden;cursor:pointer;-webkit-user-select:none;user-select:none}.van-checkbox--disabled{cursor:not-allowed}.van-checkbox--label-disabled{cursor:default}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon{-webkit-box-flex:0;-webkit-flex:none;flex:none;height:1em;font-size:20px;line-height:1em;cursor:pointer}.van-checkbox__icon .van-icon{display:block;box-sizing:border-box;width:1.25em;height:1.25em;color:transparent;font-size:.8em;line-height:1.25;text-align:center;border:1px solid #c8c9cc;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:color,border-color,background-color;transition-property:color,border-color,background-color}.van-checkbox__icon--round .van-icon{border-radius:100%}.van-checkbox__icon--checked .van-icon{color:#fff;background-color:#1989fa;border-color:#1989fa}.van-checkbox__icon--disabled{cursor:not-allowed}.van-checkbox__icon--disabled .van-icon{background-color:#ebedf0;border-color:#c8c9cc}.van-checkbox__icon--disabled.van-checkbox__icon--checked .van-icon{color:#c8c9cc}.van-checkbox__label{margin-left:8px;color:#323233;line-height:20px}.van-checkbox__label--left{margin:0 8px 0 0}.van-checkbox__label--disabled{color:#c8c9cc}

+ 80 - 0
lib/vant/2.13.2/es/checkbox/index.js

@@ -0,0 +1,80 @@
+import { createNamespace } from '../utils';
+import { CheckboxMixin } from '../mixins/checkbox';
+
+var _createNamespace = createNamespace('checkbox'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+export default createComponent({
+  mixins: [CheckboxMixin({
+    bem: bem,
+    role: 'checkbox',
+    parent: 'vanCheckbox'
+  })],
+  computed: {
+    checked: {
+      get: function get() {
+        if (this.parent) {
+          return this.parent.value.indexOf(this.name) !== -1;
+        }
+
+        return this.value;
+      },
+      set: function set(val) {
+        if (this.parent) {
+          this.setParentValue(val);
+        } else {
+          this.$emit('input', val);
+        }
+      }
+    }
+  },
+  watch: {
+    value: function value(val) {
+      this.$emit('change', val);
+    }
+  },
+  methods: {
+    // @exposed-api
+    toggle: function toggle(checked) {
+      var _this = this;
+
+      if (checked === void 0) {
+        checked = !this.checked;
+      }
+
+      // When toggle method is called multiple times at the same time,
+      // only the last call is valid.
+      // This is a hack for usage inside Cell.
+      clearTimeout(this.toggleTask);
+      this.toggleTask = setTimeout(function () {
+        _this.checked = checked;
+      });
+    },
+    setParentValue: function setParentValue(val) {
+      var parent = this.parent;
+      var value = parent.value.slice();
+
+      if (val) {
+        if (parent.max && value.length >= parent.max) {
+          return;
+        }
+        /* istanbul ignore else */
+
+
+        if (value.indexOf(this.name) === -1) {
+          value.push(this.name);
+          parent.$emit('input', value);
+        }
+      } else {
+        var index = value.indexOf(this.name);
+        /* istanbul ignore else */
+
+        if (index !== -1) {
+          value.splice(index, 1);
+          parent.$emit('input', value);
+        }
+      }
+    }
+  }
+});

+ 86 - 0
lib/vant/2.13.2/es/checkbox/index.less

@@ -0,0 +1,86 @@
+@import '../style/var';
+
+.van-checkbox {
+  display: flex;
+  align-items: center;
+  overflow: hidden;
+  cursor: pointer;
+  user-select: none;
+
+  &--disabled {
+    cursor: not-allowed;
+  }
+
+  &--label-disabled {
+    cursor: default;
+  }
+
+  &--horizontal {
+    margin-right: @padding-sm;
+  }
+
+  &__icon {
+    flex: none;
+    height: 1em;
+    font-size: @checkbox-size;
+    line-height: 1em;
+    cursor: pointer;
+
+    .van-icon {
+      display: block;
+      box-sizing: border-box;
+      width: 1.25em;
+      height: 1.25em;
+      color: transparent;
+      font-size: 0.8em;
+      line-height: 1.25;
+      text-align: center;
+      border: 1px solid @checkbox-border-color;
+      transition-duration: @checkbox-transition-duration;
+      transition-property: color, border-color, background-color;
+    }
+
+    &--round {
+      .van-icon {
+        border-radius: 100%;
+      }
+    }
+
+    &--checked {
+      .van-icon {
+        color: @white;
+        background-color: @checkbox-checked-icon-color;
+        border-color: @checkbox-checked-icon-color;
+      }
+    }
+
+    &--disabled {
+      cursor: not-allowed;
+
+      .van-icon {
+        background-color: @checkbox-disabled-background-color;
+        border-color: @checkbox-disabled-icon-color;
+      }
+    }
+
+    &--disabled&--checked {
+      .van-icon {
+        color: @checkbox-disabled-icon-color;
+      }
+    }
+  }
+
+  &__label {
+    margin-left: @checkbox-label-margin;
+    color: @checkbox-label-color;
+    line-height: @checkbox-size;
+
+    &--left {
+      margin: 0 @checkbox-label-margin 0 0;
+    }
+
+    &--disabled {
+      color: @checkbox-disabled-label-color;
+    }
+  }
+}

+ 4 - 0
lib/vant/2.13.2/es/checkbox/style/index.js

@@ -0,0 +1,4 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../index.css';

+ 4 - 0
lib/vant/2.13.2/es/checkbox/style/less.js

@@ -0,0 +1,4 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/circle/index.css

@@ -0,0 +1 @@
+.van-circle{position:relative;display:inline-block;width:100px;height:100px;text-align:center}.van-circle svg{position:absolute;top:0;left:0;width:100%;height:100%}.van-circle__layer{stroke:#fff}.van-circle__hover{fill:none;stroke:#1989fa;stroke-linecap:round}.van-circle__text{position:absolute;top:50%;left:0;box-sizing:border-box;width:100%;padding:0 4px;color:#323233;font-weight:500;font-size:14px;line-height:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}

+ 175 - 0
lib/vant/2.13.2/es/circle/index.js

@@ -0,0 +1,175 @@
+import { createNamespace, isObject, addUnit } from '../utils';
+import { raf, cancelRaf } from '../utils/dom/raf';
+
+var _createNamespace = createNamespace('circle'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+var PERIMETER = 3140;
+var uid = 0;
+
+function format(rate) {
+  return Math.min(Math.max(rate, 0), 100);
+}
+
+function getPath(clockwise, viewBoxSize) {
+  var sweepFlag = clockwise ? 1 : 0;
+  return "M " + viewBoxSize / 2 + " " + viewBoxSize / 2 + " m 0, -500 a 500, 500 0 1, " + sweepFlag + " 0, 1000 a 500, 500 0 1, " + sweepFlag + " 0, -1000";
+}
+
+export default createComponent({
+  props: {
+    text: String,
+    size: [Number, String],
+    color: [String, Object],
+    layerColor: String,
+    strokeLinecap: String,
+    value: {
+      type: Number,
+      default: 0
+    },
+    speed: {
+      type: [Number, String],
+      default: 0
+    },
+    fill: {
+      type: String,
+      default: 'none'
+    },
+    rate: {
+      type: [Number, String],
+      default: 100
+    },
+    strokeWidth: {
+      type: [Number, String],
+      default: 40
+    },
+    clockwise: {
+      type: Boolean,
+      default: true
+    }
+  },
+  beforeCreate: function beforeCreate() {
+    this.uid = "van-circle-gradient-" + uid++;
+  },
+  computed: {
+    style: function style() {
+      var size = addUnit(this.size);
+      return {
+        width: size,
+        height: size
+      };
+    },
+    path: function path() {
+      return getPath(this.clockwise, this.viewBoxSize);
+    },
+    viewBoxSize: function viewBoxSize() {
+      return +this.strokeWidth + 1000;
+    },
+    layerStyle: function layerStyle() {
+      return {
+        fill: "" + this.fill,
+        stroke: "" + this.layerColor,
+        strokeWidth: this.strokeWidth + "px"
+      };
+    },
+    hoverStyle: function hoverStyle() {
+      var offset = PERIMETER * this.value / 100;
+      return {
+        stroke: "" + (this.gradient ? "url(#" + this.uid + ")" : this.color),
+        strokeWidth: +this.strokeWidth + 1 + "px",
+        strokeLinecap: this.strokeLinecap,
+        strokeDasharray: offset + "px " + PERIMETER + "px"
+      };
+    },
+    gradient: function gradient() {
+      return isObject(this.color);
+    },
+    LinearGradient: function LinearGradient() {
+      var _this = this;
+
+      var h = this.$createElement;
+
+      if (!this.gradient) {
+        return;
+      }
+
+      var Stops = Object.keys(this.color).sort(function (a, b) {
+        return parseFloat(a) - parseFloat(b);
+      }).map(function (key, index) {
+        return h("stop", {
+          "key": index,
+          "attrs": {
+            "offset": key,
+            "stop-color": _this.color[key]
+          }
+        });
+      });
+      return h("defs", [h("linearGradient", {
+        "attrs": {
+          "id": this.uid,
+          "x1": "100%",
+          "y1": "0%",
+          "x2": "0%",
+          "y2": "0%"
+        }
+      }, [Stops])]);
+    }
+  },
+  watch: {
+    rate: {
+      handler: function handler(rate) {
+        this.startTime = Date.now();
+        this.startRate = this.value;
+        this.endRate = format(rate);
+        this.increase = this.endRate > this.startRate;
+        this.duration = Math.abs((this.startRate - this.endRate) * 1000 / this.speed);
+
+        if (this.speed) {
+          cancelRaf(this.rafId);
+          this.rafId = raf(this.animate);
+        } else {
+          this.$emit('input', this.endRate);
+        }
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    animate: function animate() {
+      var now = Date.now();
+      var progress = Math.min((now - this.startTime) / this.duration, 1);
+      var rate = progress * (this.endRate - this.startRate) + this.startRate;
+      this.$emit('input', format(parseFloat(rate.toFixed(1))));
+
+      if (this.increase ? rate < this.endRate : rate > this.endRate) {
+        this.rafId = raf(this.animate);
+      }
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": bem(),
+      "style": this.style
+    }, [h("svg", {
+      "attrs": {
+        "viewBox": "0 0 " + this.viewBoxSize + " " + this.viewBoxSize
+      }
+    }, [this.LinearGradient, h("path", {
+      "class": bem('layer'),
+      "style": this.layerStyle,
+      "attrs": {
+        "d": this.path
+      }
+    }), h("path", {
+      "attrs": {
+        "d": this.path
+      },
+      "class": bem('hover'),
+      "style": this.hoverStyle
+    })]), this.slots() || this.text && h("div", {
+      "class": bem('text')
+    }, [this.text])]);
+  }
+});

+ 41 - 0
lib/vant/2.13.2/es/circle/index.less

@@ -0,0 +1,41 @@
+@import '../style/var';
+
+.van-circle {
+  position: relative;
+  display: inline-block;
+  width: @circle-size;
+  height: @circle-size;
+  text-align: center;
+
+  svg {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+  }
+
+  &__layer {
+    stroke: @circle-layer-color;
+  }
+
+  &__hover {
+    fill: none;
+    stroke: @circle-color;
+    stroke-linecap: round;
+  }
+
+  &__text {
+    position: absolute;
+    top: 50%;
+    left: 0;
+    box-sizing: border-box;
+    width: 100%;
+    padding: 0 @padding-base;
+    color: @circle-text-color;
+    font-weight: @circle-text-font-weight;
+    font-size: @circle-text-font-size;
+    line-height: @circle-text-line-height;
+    transform: translateY(-50%);
+  }
+}

+ 2 - 0
lib/vant/2.13.2/es/circle/style/index.js

@@ -0,0 +1,2 @@
+import '../../style/base.css';
+import '../index.css';

+ 2 - 0
lib/vant/2.13.2/es/circle/style/less.js

@@ -0,0 +1,2 @@
+import '../../style/base.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/col/index.css

@@ -0,0 +1 @@
+.van-col{float:left;box-sizing:border-box;min-height:1px}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%}

+ 55 - 0
lib/vant/2.13.2/es/col/index.js

@@ -0,0 +1,55 @@
+import { createNamespace } from '../utils';
+import { ChildrenMixin } from '../mixins/relation';
+
+var _createNamespace = createNamespace('col'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+export default createComponent({
+  mixins: [ChildrenMixin('vanRow')],
+  props: {
+    span: [Number, String],
+    offset: [Number, String],
+    tag: {
+      type: String,
+      default: 'div'
+    }
+  },
+  computed: {
+    style: function style() {
+      var index = this.index;
+
+      var _ref = this.parent || {},
+          spaces = _ref.spaces;
+
+      if (spaces && spaces[index]) {
+        var _spaces$index = spaces[index],
+            left = _spaces$index.left,
+            right = _spaces$index.right;
+        return {
+          paddingLeft: left ? left + "px" : null,
+          paddingRight: right ? right + "px" : null
+        };
+      }
+    }
+  },
+  methods: {
+    onClick: function onClick(event) {
+      this.$emit('click', event);
+    }
+  },
+  render: function render() {
+    var _bem;
+
+    var h = arguments[0];
+    var span = this.span,
+        offset = this.offset;
+    return h(this.tag, {
+      "style": this.style,
+      "class": bem((_bem = {}, _bem[span] = span, _bem["offset-" + offset] = offset, _bem)),
+      "on": {
+        "click": this.onClick
+      }
+    }, [this.slots()]);
+  }
+});

+ 20 - 0
lib/vant/2.13.2/es/col/index.less

@@ -0,0 +1,20 @@
+@import '../style/var';
+
+.van-col {
+  float: left;
+  box-sizing: border-box;
+  min-height: 1px;
+}
+
+.generate-col(24);
+.generate-col(@n, @i: 1) when (@i =< @n) {
+  .van-col--@{i} {
+    width: (@i * 100% / 24);
+  }
+
+  .van-col--offset-@{i} {
+    margin-left: (@i * 100% / 24);
+  }
+
+  .generate-col(@n, (@i + 1));
+}

+ 2 - 0
lib/vant/2.13.2/es/col/style/index.js

@@ -0,0 +1,2 @@
+import '../../style/base.css';
+import '../index.css';

+ 2 - 0
lib/vant/2.13.2/es/col/style/less.js

@@ -0,0 +1,2 @@
+import '../../style/base.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/collapse-item/index.css

@@ -0,0 +1 @@
+.van-collapse-item{position:relative}.van-collapse-item--border::after{position:absolute;box-sizing:border-box;content:' ';pointer-events:none;top:0;right:16px;left:16px;border-top:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-collapse-item__title .van-cell__right-icon::before{-webkit-transform:rotate(90deg) translateZ(0);transform:rotate(90deg) translateZ(0);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.van-collapse-item__title::after{right:16px;display:none}.van-collapse-item__title--expanded .van-cell__right-icon::before{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.van-collapse-item__title--expanded::after{display:block}.van-collapse-item__title--borderless::after{display:none}.van-collapse-item__title--disabled{cursor:not-allowed}.van-collapse-item__title--disabled,.van-collapse-item__title--disabled .van-cell__right-icon{color:#c8c9cc}.van-collapse-item__title--disabled:active{background-color:#fff}.van-collapse-item__wrapper{overflow:hidden;-webkit-transition:height .3s ease-in-out;transition:height .3s ease-in-out;will-change:height}.van-collapse-item__content{padding:12px 16px;color:#969799;font-size:14px;line-height:1.5;background-color:#fff}

+ 202 - 0
lib/vant/2.13.2/es/collapse-item/index.js

@@ -0,0 +1,202 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+// Utils
+import { createNamespace } from '../utils';
+import { raf, doubleRaf } from '../utils/dom/raf'; // Mixins
+
+import { ChildrenMixin } from '../mixins/relation'; // Components
+
+import Cell from '../cell';
+import { cellProps } from '../cell/shared';
+
+var _createNamespace = createNamespace('collapse-item'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+var CELL_SLOTS = ['title', 'icon', 'right-icon'];
+export default createComponent({
+  mixins: [ChildrenMixin('vanCollapse')],
+  props: _extends({}, cellProps, {
+    name: [Number, String],
+    disabled: Boolean,
+    lazyRender: {
+      type: Boolean,
+      default: true
+    },
+    isLink: {
+      type: Boolean,
+      default: true
+    }
+  }),
+  data: function data() {
+    return {
+      show: null,
+      inited: null
+    };
+  },
+  computed: {
+    currentName: function currentName() {
+      var _this$name;
+
+      return (_this$name = this.name) != null ? _this$name : this.index;
+    },
+    expanded: function expanded() {
+      var _this = this;
+
+      if (!this.parent) {
+        return null;
+      }
+
+      var _this$parent = this.parent,
+          value = _this$parent.value,
+          accordion = _this$parent.accordion;
+
+      if (process.env.NODE_ENV === 'development' && !accordion && !Array.isArray(value)) {
+        console.error('[Vant] Collapse: type of prop "value" should be Array');
+        return;
+      }
+
+      return accordion ? value === this.currentName : value.some(function (name) {
+        return name === _this.currentName;
+      });
+    }
+  },
+  created: function created() {
+    this.show = this.expanded;
+    this.inited = this.expanded;
+  },
+  watch: {
+    expanded: function expanded(_expanded, prev) {
+      var _this2 = this;
+
+      if (prev === null) {
+        return;
+      }
+
+      if (_expanded) {
+        this.show = true;
+        this.inited = true;
+      } // Use raf: flick when opened in safari
+      // Use nextTick: closing animation failed when set `user-select: none`
+
+
+      var nextTick = _expanded ? this.$nextTick : raf;
+      nextTick(function () {
+        var _this2$$refs = _this2.$refs,
+            content = _this2$$refs.content,
+            wrapper = _this2$$refs.wrapper;
+
+        if (!content || !wrapper) {
+          return;
+        }
+
+        var offsetHeight = content.offsetHeight;
+
+        if (offsetHeight) {
+          var contentHeight = offsetHeight + "px";
+          wrapper.style.height = _expanded ? 0 : contentHeight; // use double raf to ensure animation can start
+
+          doubleRaf(function () {
+            wrapper.style.height = _expanded ? contentHeight : 0;
+          });
+        } else {
+          _this2.onTransitionEnd();
+        }
+      });
+    }
+  },
+  methods: {
+    onClick: function onClick() {
+      if (!this.disabled) {
+        this.toggle();
+      }
+    },
+    // @exposed-api
+    toggle: function toggle(expanded) {
+      if (expanded === void 0) {
+        expanded = !this.expanded;
+      }
+
+      var parent = this.parent,
+          currentName = this.currentName;
+      var close = parent.accordion && currentName === parent.value;
+      var name = close ? '' : currentName;
+      this.parent.switch(name, expanded);
+    },
+    onTransitionEnd: function onTransitionEnd() {
+      if (!this.expanded) {
+        this.show = false;
+      } else {
+        this.$refs.wrapper.style.height = '';
+      }
+    },
+    genTitle: function genTitle() {
+      var _this3 = this;
+
+      var h = this.$createElement;
+      var border = this.border,
+          disabled = this.disabled,
+          expanded = this.expanded;
+      var titleSlots = CELL_SLOTS.reduce(function (slots, name) {
+        if (_this3.slots(name)) {
+          slots[name] = function () {
+            return _this3.slots(name);
+          };
+        }
+
+        return slots;
+      }, {});
+
+      if (this.slots('value')) {
+        titleSlots.default = function () {
+          return _this3.slots('value');
+        };
+      }
+
+      return h(Cell, {
+        "attrs": {
+          "role": "button",
+          "tabindex": disabled ? -1 : 0,
+          "aria-expanded": String(expanded)
+        },
+        "class": bem('title', {
+          disabled: disabled,
+          expanded: expanded,
+          borderless: !border
+        }),
+        "on": {
+          "click": this.onClick
+        },
+        "scopedSlots": titleSlots,
+        "props": _extends({}, this.$props)
+      });
+    },
+    genContent: function genContent() {
+      var h = this.$createElement;
+
+      if (this.inited || !this.lazyRender) {
+        return h("div", {
+          "directives": [{
+            name: "show",
+            value: this.show
+          }],
+          "ref": "wrapper",
+          "class": bem('wrapper'),
+          "on": {
+            "transitionend": this.onTransitionEnd
+          }
+        }, [h("div", {
+          "ref": "content",
+          "class": bem('content')
+        }, [this.slots()])]);
+      }
+    }
+  },
+  render: function render() {
+    var h = arguments[0];
+    return h("div", {
+      "class": [bem({
+        border: this.index && this.border
+      })]
+    }, [this.genTitle(), this.genContent()]);
+  }
+});

+ 69 - 0
lib/vant/2.13.2/es/collapse-item/index.less

@@ -0,0 +1,69 @@
+@import '../style/var';
+@import '../style/mixins/hairline';
+
+.van-collapse-item {
+  position: relative;
+
+  &--border {
+    &::after {
+      .hairline-top(@cell-border-color, @padding-md, @padding-md);
+    }
+  }
+
+  &__title {
+    .van-cell__right-icon::before {
+      // using translateZ to fix safari rendering issues
+      // see: https://github.com/vant-ui/vant/issues/8608
+      transform: rotate(90deg) translateZ(0);
+      transition: transform @collapse-item-transition-duration;
+    }
+
+    &::after {
+      right: @padding-md;
+      display: none;
+    }
+
+    &--expanded {
+      .van-cell__right-icon::before {
+        transform: rotate(-90deg);
+      }
+
+      &::after {
+        display: block;
+      }
+    }
+
+    &--borderless {
+      &::after {
+        display: none;
+      }
+    }
+
+    &--disabled {
+      cursor: not-allowed;
+
+      &,
+      & .van-cell__right-icon {
+        color: @collapse-item-title-disabled-color;
+      }
+
+      &:active {
+        background-color: @white;
+      }
+    }
+  }
+
+  &__wrapper {
+    overflow: hidden;
+    transition: height @collapse-item-transition-duration ease-in-out;
+    will-change: height;
+  }
+
+  &__content {
+    padding: @collapse-item-content-padding;
+    color: @collapse-item-content-text-color;
+    font-size: @collapse-item-content-font-size;
+    line-height: @collapse-item-content-line-height;
+    background-color: @collapse-item-content-background-color;
+  }
+}

+ 5 - 0
lib/vant/2.13.2/es/collapse-item/style/index.js

@@ -0,0 +1,5 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../cell/index.css';
+import '../index.css';

+ 5 - 0
lib/vant/2.13.2/es/collapse-item/style/less.js

@@ -0,0 +1,5 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../cell/index.less';
+import '../index.less';

+ 39 - 0
lib/vant/2.13.2/es/collapse/index.js

@@ -0,0 +1,39 @@
+import { createNamespace } from '../utils';
+import { ParentMixin } from '../mixins/relation';
+import { BORDER_TOP_BOTTOM } from '../utils/constant';
+
+var _createNamespace = createNamespace('collapse'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1];
+
+export default createComponent({
+  mixins: [ParentMixin('vanCollapse')],
+  props: {
+    accordion: Boolean,
+    value: [String, Number, Array],
+    border: {
+      type: Boolean,
+      default: true
+    }
+  },
+  methods: {
+    switch: function _switch(name, expanded) {
+      if (!this.accordion) {
+        name = expanded ? this.value.concat(name) : this.value.filter(function (activeName) {
+          return activeName !== name;
+        });
+      }
+
+      this.$emit('change', name);
+      this.$emit('input', name);
+    }
+  },
+  render: function render() {
+    var _ref;
+
+    var h = arguments[0];
+    return h("div", {
+      "class": [bem(), (_ref = {}, _ref[BORDER_TOP_BOTTOM] = this.border, _ref)]
+    }, [this.slots()]);
+  }
+});

+ 1 - 0
lib/vant/2.13.2/es/collapse/style/index.js

@@ -0,0 +1 @@
+import '../../style/base.css';

+ 1 - 0
lib/vant/2.13.2/es/collapse/style/less.js

@@ -0,0 +1 @@
+import '../../style/base.less';

+ 1 - 0
lib/vant/2.13.2/es/contact-card/index.css

@@ -0,0 +1 @@
+.van-contact-card{padding:16px}.van-contact-card__value{margin-left:5px;line-height:20px}.van-contact-card--add .van-contact-card__value{line-height:40px}.van-contact-card--add .van-cell__left-icon{color:#1989fa;font-size:40px}.van-contact-card::before{position:absolute;right:0;bottom:0;left:0;height:2px;background:-webkit-repeating-linear-gradient(135deg,#ff6c6c 0,#ff6c6c 20%,transparent 0,transparent 25%,#1989fa 0,#1989fa 45%,transparent 0,transparent 50%);background:repeating-linear-gradient(-45deg,#ff6c6c 0,#ff6c6c 20%,transparent 0,transparent 25%,#1989fa 0,#1989fa 45%,transparent 0,transparent 50%);background-size:80px;content:''}

+ 59 - 0
lib/vant/2.13.2/es/contact-card/index.js

@@ -0,0 +1,59 @@
+import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
+// Utils
+import { createNamespace } from '../utils';
+import { emit, inherit } from '../utils/functional'; // Components
+
+import Cell from '../cell'; // Types
+
+var _createNamespace = createNamespace('contact-card'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+function ContactCard(h, props, slots, ctx) {
+  var type = props.type,
+      editable = props.editable;
+
+  function onClick(event) {
+    if (editable) {
+      emit(ctx, 'click', event);
+    }
+  }
+
+  function Content() {
+    if (type === 'add') {
+      return props.addText || t('addText');
+    }
+
+    return [h("div", [t('name') + "\uFF1A" + props.name]), h("div", [t('tel') + "\uFF1A" + props.tel])];
+  }
+
+  return h(Cell, _mergeJSXProps([{
+    "attrs": {
+      "center": true,
+      "border": false,
+      "isLink": editable,
+      "valueClass": bem('value'),
+      "icon": type === 'edit' ? 'contact' : 'add-square'
+    },
+    "class": bem([type]),
+    "on": {
+      "click": onClick
+    }
+  }, inherit(ctx)]), [Content()]);
+}
+
+ContactCard.props = {
+  tel: String,
+  name: String,
+  addText: String,
+  editable: {
+    type: Boolean,
+    default: true
+  },
+  type: {
+    type: String,
+    default: 'add'
+  }
+};
+export default createComponent(ContactCard);

+ 42 - 0
lib/vant/2.13.2/es/contact-card/index.less

@@ -0,0 +1,42 @@
+@import '../style/var';
+
+.van-contact-card {
+  padding: @contact-card-padding;
+
+  &__value {
+    margin-left: 5px;
+    line-height: @contact-card-value-line-height;
+  }
+
+  &--add {
+    .van-contact-card__value {
+      line-height: @contact-card-add-icon-size;
+    }
+
+    .van-cell__left-icon {
+      color: @contact-card-add-icon-color;
+      font-size: @contact-card-add-icon-size;
+    }
+  }
+
+  &::before {
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    height: 2px;
+    background: repeating-linear-gradient(
+      -45deg,
+      #ff6c6c 0,
+      #ff6c6c 20%,
+      transparent 0,
+      transparent 25%,
+      @blue 0,
+      @blue 45%,
+      transparent 0,
+      transparent 50%
+    );
+    background-size: 80px;
+    content: '';
+  }
+}

+ 5 - 0
lib/vant/2.13.2/es/contact-card/style/index.js

@@ -0,0 +1,5 @@
+import '../../style/base.css';
+import '../../info/index.css';
+import '../../icon/index.css';
+import '../../cell/index.css';
+import '../index.css';

+ 5 - 0
lib/vant/2.13.2/es/contact-card/style/less.js

@@ -0,0 +1,5 @@
+import '../../style/base.less';
+import '../../info/index.less';
+import '../../icon/index.less';
+import '../../cell/index.less';
+import '../index.less';

+ 1 - 0
lib/vant/2.13.2/es/contact-edit/index.css

@@ -0,0 +1 @@
+.van-contact-edit{padding:16px}.van-contact-edit__fields{overflow:hidden;border-radius:4px}.van-contact-edit__fields .van-field__label{width:4.1em}.van-contact-edit__switch-cell{margin-top:10px;padding-top:9px;padding-bottom:9px;border-radius:4px}.van-contact-edit__buttons{padding:32px 0}.van-contact-edit .van-button{margin-bottom:12px;font-size:16px}

+ 193 - 0
lib/vant/2.13.2/es/contact-edit/index.js

@@ -0,0 +1,193 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+// Utils
+import { createNamespace } from '../utils';
+import { isMobile } from '../utils/validate/mobile'; // Components
+
+import Cell from '../cell';
+import Field from '../field';
+import Button from '../button';
+import Dialog from '../dialog';
+import Switch from '../switch';
+
+var _createNamespace = createNamespace('contact-edit'),
+    createComponent = _createNamespace[0],
+    bem = _createNamespace[1],
+    t = _createNamespace[2];
+
+var defaultContact = {
+  tel: '',
+  name: ''
+};
+export default createComponent({
+  props: {
+    isEdit: Boolean,
+    isSaving: Boolean,
+    isDeleting: Boolean,
+    showSetDefault: Boolean,
+    setDefaultLabel: String,
+    contactInfo: {
+      type: Object,
+      default: function _default() {
+        return _extends({}, defaultContact);
+      }
+    },
+    telValidator: {
+      type: Function,
+      default: isMobile
+    }
+  },
+  data: function data() {
+    return {
+      data: _extends({}, defaultContact, this.contactInfo),
+      errorInfo: {
+        name: '',
+        tel: ''
+      }
+    };
+  },
+  watch: {
+    contactInfo: function contactInfo(val) {
+      this.data = _extends({}, defaultContact, val);
+    }
+  },
+  methods: {
+    onFocus: function onFocus(key) {
+      this.errorInfo[key] = '';
+    },
+    getErrorMessageByKey: function getErrorMessageByKey(key) {
+      var value = this.data[key].trim();
+
+      switch (key) {
+        case 'name':
+          return value ? '' : t('nameInvalid');
+
+        case 'tel':
+          return this.telValidator(value) ? '' : t('telInvalid');
+      }
+    },
+    onSave: function onSave() {
+      var _this = this;
+
+      var isValid = ['name', 'tel'].every(function (item) {
+        var msg = _this.getErrorMessageByKey(item);
+
+        if (msg) {
+          _this.errorInfo[item] = msg;
+        }
+
+        return !msg;
+      });
+
+      if (isValid && !this.isSaving) {
+        this.$emit('save', this.data);
+      }
+    },
+    onDelete: function onDelete() {
+      var _this2 = this;
+
+      Dialog.confirm({
+        title: t('confirmDelete')
+      }).then(function () {
+        _this2.$emit('delete', _this2.data);
+      });
+    }
+  },
+  render: function render() {
+    var _this3 = this;
+
+    var h = arguments[0];
+    var data = this.data,
+        errorInfo = this.errorInfo;
+
+    var onFocus = function onFocus(name) {
+      return function () {
+        return _this3.onFocus(name);
+      };
+    };
+
+    return h("div", {
+      "class": bem()
+    }, [h("div", {
+      "class": bem('fields')
+    }, [h(Field, {
+      "attrs": {
+        "clearable": true,
+        "maxlength": "30",
+        "label": t('name'),
+        "placeholder": t('nameEmpty'),
+        "errorMessage": errorInfo.name
+      },
+      "on": {
+        "focus": onFocus('name')
+      },
+      "model": {
+        value: data.name,
+        callback: function callback($$v) {
+          _this3.$set(data, "name", $$v);
+        }
+      }
+    }), h(Field, {
+      "attrs": {
+        "clearable": true,
+        "type": "tel",
+        "label": t('tel'),
+        "placeholder": t('telEmpty'),
+        "errorMessage": errorInfo.tel
+      },
+      "on": {
+        "focus": onFocus('tel')
+      },
+      "model": {
+        value: data.tel,
+        callback: function callback($$v) {
+          _this3.$set(data, "tel", $$v);
+        }
+      }
+    })]), this.showSetDefault && h(Cell, {
+      "attrs": {
+        "title": this.setDefaultLabel,
+        "border": false
+      },
+      "class": bem('switch-cell')
+    }, [h(Switch, {
+      "attrs": {
+        "size": 24
+      },
+      "slot": "right-icon",
+      "on": {
+        "change": function change(event) {
+          _this3.$emit('change-default', event);
+        }
+      },
+      "model": {
+        value: data.isDefault,
+        callback: function callback($$v) {
+          _this3.$set(data, "isDefault", $$v);
+        }
+      }
+    })]), h("div", {
+      "class": bem('buttons')
+    }, [h(Button, {
+      "attrs": {
+        "block": true,
+        "round": true,
+        "type": "danger",
+        "text": t('save'),
+        "loading": this.isSaving
+      },
+      "on": {
+        "click": this.onSave
+      }
+    }), this.isEdit && h(Button, {
+      "attrs": {
+        "block": true,
+        "round": true,
+        "text": t('delete'),
+        "loading": this.isDeleting
+      },
+      "on": {
+        "click": this.onDelete
+      }
+    })])]);
+  }
+});

+ 30 - 0
lib/vant/2.13.2/es/contact-edit/index.less

@@ -0,0 +1,30 @@
+@import '../style/var';
+
+.van-contact-edit {
+  padding: @contact-edit-padding;
+
+  &__fields {
+    overflow: hidden;
+    border-radius: @contact-edit-fields-radius;
+
+    .van-field__label {
+      width: @contact-edit-field-label-width;
+    }
+  }
+
+  &__switch-cell {
+    margin-top: 10px;
+    padding-top: 9px;
+    padding-bottom: 9px;
+    border-radius: @contact-edit-fields-radius;
+  }
+
+  &__buttons {
+    padding: @contact-edit-buttons-padding;
+  }
+
+  .van-button {
+    margin-bottom: @contact-edit-button-margin-bottom;
+    font-size: @contact-edit-button-font-size;
+  }
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов