Merge branch 'dev' into next

This commit is contained in:
chenjiahan
2022-02-08 14:56:38 +08:00
32 changed files with 570 additions and 406 deletions
@@ -1,3 +0,0 @@
module.exports = {
presets: ['@vant/cli/preset'],
};
@@ -3,20 +3,23 @@
"version": "1.0.0",
"description": "",
"main": "lib/<%= name %>.js",
"module": "es/index.js",
"style": "lib/index.css",
"typings": "lib/index.d.ts",
"files": [
"lib",
"es"
],
"scripts": {
"dev": "vant-cli dev",
"test": "vant-cli test",
"lint": "vant-cli lint",
"test": "vant-cli test",
"build": "vant-cli build",
"prepare": "husky install",
"release": "vant-cli release",
"test:coverage": "open test/coverage/index.html",
"build-site": "vant-cli build-site && gh-pages -d site-dist"
"build:site": "vant-cli build-site",
"release": "vant-cli release --tag next",
"release:site": "pnpm build:site && gh-pages -d site-dist",
"test:watch": "vant-cli test --watch",
"test:coverage": "open test/coverage/index.html"
},
"author": "",
"license": "MIT",
@@ -30,8 +33,9 @@
"vue": "^3.0.0"
},
"devDependencies": {
"@vant/cli": "^3.9.0",
"vue": "^3.0.0"
"@vant/cli": "^4.0.0",
"vue": "^3.0.0",
"sass": "^1.49.7"
},
"eslintConfig": {
"root": true,
@@ -1,4 +1,4 @@
module.exports = {
export default {
name: '<%= name %>',
build: {
css: {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "create-vant-cli-app",
"version": "1.1.1",
"version": "2.0.0",
"description": "Create Vant Cli App",
"main": "lib/index.js",
"bin": {
-1
View File
@@ -68,5 +68,4 @@ pnpm add @vant/cli -D
- [命令](https://github.com/youzan/vant/tree/dev/packages/vant-cli/docs/commands.md)
- [配置指南](https://github.com/youzan/vant/tree/dev/packages/vant-cli/docs/config.md)
- [目录结构](https://github.com/youzan/vant/tree/dev/packages/vant-cli/docs/directory.md)
- [桌面端组件](https://github.com/youzan/vant/tree/dev/packages/vant-cli/docs/desktop.md)
- [更新日志](https://github.com/youzan/vant/tree/dev/packages/vant-cli/changelog.md)
+20 -35
View File
@@ -1,72 +1,57 @@
# 更新日志
## v4.0.0-rc.6
## v4.0.0
- 修复通过 pnpm 安装使用时报错的问题
## v4.0.0-rc.4
- 新增 CommonJS 格式的构建产物,分别为 `lib/[name].cjs.js``lib/[name].cjs.min.js`
- 现在 ESModule 和 CommonJS 格式的产物会自动对外部依赖进行 external 处理
- 修复 Windows 路径兼容问题
## v4.0.0-rc.3
`2022-02-07`
### 不兼容更新
- 支持的 node 版本范围提升到 `^14.16.0 || >=16.0.0`
- 使用 vite 代替 webpack 进行构建,移除了所有 webpack 相关依赖
- 使用 esbuild 进行代码转义和压缩
- babel preset 添加了 `cjs` 后缀,现在需要通过 `@vant/cli/preset.cjs` 引入
- vant.config.js 重命名为 `vant.config.mjs`,由 commonJs 变更为 ESModule 格式
### Features
- 新增 build.configureWebpack 配置项
### 依赖升级
对以下依赖进行了大版本升级:
- eslint v8
## v4.0.0-beta.6
### 不兼容更新
- 使用 vite 代替 webpack 进行构建,移除了所有 webpack 相关依赖
- 站点构建产物的目录由 `site` 调整为 `site-dist`
- 不再支持 webpack.config.js 配置文件
- 不再支持 less import 语法中使用波浪号
- 不再在 demo 文件中自动注册组件
- 暂时不支持预览桌面端组件
- 移除 build 命令的 --watch 参数
- 移除内置的 babel-plugin-import 插件
- 由于不再使用 html-webpack-plugin, 因此移除了 site.htmlPluginOptions 配置项
- 为了避免幽灵依赖,不再默认依赖 `@vue/test-utils`,使用时需要手动安装
- 为了减少依赖数量,移除了默认安装的 sass 依赖,使用 sass 时需要手动安装:
```bash
yarn add sass
```
- 为了避免 Phantom dependency,不再默认依赖 `@vue/test-utils`,使用时需要手动安装
### Features
- 新增 site.htmlMeta 配置项
- 新增 ESModule 格式的构建产物,分别为 `lib/[name].es.js``lib/[name].es.min.js`
### 依赖升级
对以下依赖进行了大版本升级:
- eslint v8
- jest v27
- husky v7
- ts-jest v27
- postcss v8
- clean-css v5
- commander v8
- babel-jest v27
- lint-staged v11
- autoprefixer v10
### Features
- 新增 site.htmlMeta 配置项
- 新增 build.configureWebpack 配置项
- 新增 ESModule 格式的构建产物,分别为 `lib/[name].es.js``lib/[name].es.min.js`
- 新增 CommonJS 格式的构建产物,分别为 `lib/[name].cjs.js``lib/[name].cjs.min.js`
- 现在 ESModule 和 CommonJS 格式的产物会自动对外部依赖进行 external 处理
### BugFixes
- 修复 Windows 路径兼容问题
- 修复通过 pnpm 安装使用时报错的问题
## v3.11.2
`2021-07-15`
+1 -1
View File
@@ -25,7 +25,7 @@ npx vant-cli dev
运行本地开发环境。
运行 dev 命令时,Vant Cli 会通过 [webpack-dev-server](https://github.com/webpack/webpack-dev-server) 启动一个本地服务器,用于在开发过程中对文档和示例进行预览。
运行 dev 命令时,Vant Cli 会通过启动一个本地服务器,用于在开发过程中对文档和示例进行预览。
### build
-84
View File
@@ -1,84 +0,0 @@
## 关于桌面端组件
Vant Cli 也支持预览桌面端组件,你可以在组件的 `demo` 目录下新建一个 `.vue` 文件,并在组件的 `README` 中按如下格式声明要预览的组件:
```html
<demo-code>./demo/MyDemo.vue</demo-code>
```
`demo-code` 标签中间的文本为 `README``demo` 文件的相对路径。
```
button
├─ demo # 组件示例
│ └─ MyDemo.vue # 要预览的 demo 文件
├─ index.js # 组件入口
├─ index.less # 组件样式
└─ README.md # 组件文档
```
![image](https://user-images.githubusercontent.com/5093611/111076378-0e981a00-8527-11eb-8e3f-31f0be7e4021.png)
`demo-code` 标签支持以下属性:
| 名称 | 类型 | 描述 |
| --------- | ------- | --------------------------------------- |
| compact | boolean | 紧凑模式 |
| transform | boolean | 防止预览区内 fixed 定位的元素飞出预览区 |
| inline | boolean | 只显示组件本身,不显示预览区边框和代码 |
### `compact`
```html
<demo-code compact>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076728-77cc5d00-8528-11eb-85f1-e7217344ab14.png)
### `transform`
```html
<demo-code transform>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076799-d5f94000-8528-11eb-973f-c9d69f91d2a7.png)
### `inline`
```html
<demo-code inline>./demo/MyDemo.vue</demo-code>
```
![image](https://user-images.githubusercontent.com/5093611/111076845-15c02780-8529-11eb-9cfb-76c9b25dc2a2.png)
### 去除手机模拟器
对于 PC 端的组件,如果不需要右侧的手机模拟器,可以在 `vant.config.js` 文件中设置 `site.hideSimulator``true`,这样在所有页面都会隐藏手机模拟器,也可以只针对具体页面设置。
```js
module.exports = {
site: {
defaultLang: 'zh-CN',
hideSimulator: true, // 所有页面都不显示
locales: {
'zh-CN': {
title: 'Vant',
description: '轻量、可靠的移动端 Vue 组件库',
hideSimulator: true, // 中文下所有页面都不显示
nav: [
{
title: '基础组件',
items: [
{
path: 'button',
title: 'Button 按钮',
hideSimulator: true, // 只针对某个页面不显示
},
],
},
],
},
},
},
};
```
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@vant/cli",
"version": "4.0.0-rc.6",
"version": "4.0.0",
"type": "module",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
+27
View File
@@ -8,4 +8,31 @@ export function decamelize(str, sep = '-') {
.toLowerCase();
}
// from https://30secondsofcode.org
export function copyToClipboard(str) {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
const selection = document.getSelection();
if (!selection) {
return;
}
const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
el.select();
document.execCommand('copy');
document.body.removeChild(el);
if (selected) {
selection.removeAllRanges();
selection.addRange(selected);
}
}
export { isMobile };
@@ -8,6 +8,8 @@
</template>
<script>
import { copyToClipboard } from '../../common';
export default {
name: 'VanDocContent',
@@ -21,6 +23,20 @@ export default {
},
},
watch: {
$route(to, from) {
if (from.path !== to.path) {
setTimeout(() => {
this.copyAction();
});
}
},
},
mounted() {
this.copyAction();
},
methods: {
onClick({ target }) {
if (['H2', 'H3', 'H4', 'H5'].includes(target.tagName)) {
@@ -36,6 +52,31 @@ export default {
});
}
},
copyAction() {
const codeBoxes = document.querySelectorAll('.van-doc-card pre code');
if (!codeBoxes || !codeBoxes.length) {
return;
}
for (let i = 0; i < codeBoxes.length; i++) {
const item = codeBoxes[i];
let timer = null;
item.addEventListener('click', () => {
if (timer) return;
const content = item.innerText;
copyToClipboard(content);
item.classList.add('code-copy-success');
timer = setTimeout(() => {
item.classList.remove('code-copy-success');
timer = null;
}, 1400);
});
}
},
},
};
</script>
@@ -47,6 +88,54 @@ export default {
background-color: var(--van-doc-background-2);
border-radius: var(--van-doc-border-radius);
> pre code {
position: relative;
padding-right: 30px;
pointer-events: none;
overflow: initial;
}
> pre:hover {
code::before {
position: absolute;
z-index: 9;
right: 14px;
top: 11px;
width: 20px;
height: 20px;
background-position: center;
background-size: contain;
background-image: url(data:image/png;base64,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);
cursor: pointer;
content: '';
display: block;
pointer-events: auto;
}
}
> pre .code-copy-success::after {
content: 'Copied!';
display: block;
position: absolute;
z-index: 9;
right: -4px;
top: 0;
animation: ease-out code-copy-animation 0.2s;
animation-fill-mode: forwards;
}
@keyframes code-copy-animation {
0% {
top: 0;
opacity: 0;
}
100% {
top: -20px;
opacity: 1;
}
}
> p a,
> ul a,
> table a,
@@ -19,7 +19,7 @@
title="Toggle source code panel"
class="action-icon"
role="source"
@click="toogleSource"
@click="toggleSource"
/>
</div>
<div
@@ -33,32 +33,7 @@
</template>
<script>
// from https://30secondsofcode.org
function copyToClipboard(str) {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
const selection = document.getSelection();
if (!selection) {
return;
}
const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
el.select();
document.execCommand('copy');
document.body.removeChild(el);
if (selected) {
selection.removeAllRanges();
selection.addRange(selected);
}
}
import { copyToClipboard } from '../../common';
export default {
name: 'DemoPlayground',
@@ -77,7 +52,7 @@ export default {
},
methods: {
unescape,
toogleSource() {
toggleSource() {
this.showSource = !this.showSource;
},
copySourceCode() {
@@ -0,0 +1,4 @@
/** @type {import('@jest/types').Config.InitialOptions} */
module.exports = {
resolver: '<rootDir>/jest.resolver.js',
};
@@ -0,0 +1,13 @@
// https://github.com/facebook/jest/issues/9771#issuecomment-871585234
const resolver = require('enhanced-resolve').create.sync({
conditionNames: ['require', 'node', 'default'],
extensions: ['.js', '.json', '.node', '.ts', '.tsx'],
});
module.exports = function (request, options) {
// list global module that must be resolved by defaultResolver here
if (['fs', 'http', 'path'].includes(request)) {
return options.defaultResolver(request, options);
}
return resolver(options.basedir, request);
};
+15 -7
View File
@@ -7,6 +7,10 @@
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"scripts": {
"update:deps": "pnpm update --latest --interactive",
"test": "jest"
},
"repository": {
"type": "git",
"url": "https://github.com/youzan/vant.git",
@@ -16,15 +20,19 @@
"author": "chenjiahan",
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "^5.3.1",
"@typescript-eslint/parser": "5.3.1",
"eslint-config-airbnb-base": "^14.2.1",
"@typescript-eslint/eslint-plugin": "^5.10.0",
"@typescript-eslint/parser": "^5.10.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.24.0",
"eslint-plugin-vue": "^7.18.0"
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-vue": "^8.4.0"
},
"devDependencies": {
"eslint": "^8.0.0",
"typescript": "~4.5.2"
"enhanced-resolve": "^5.8.3",
"eslint": "^8.7.0",
"typescript": "~4.5.5"
},
"peerDependencies": {
"eslint": "^7.32.0 || ^8.2.0"
}
}
@@ -20,9 +20,11 @@ async function lintProject(name) {
test('a vue project should pass lint', async () => {
const rest = await lintProject('vue');
expect([
'no-const-assign',
'@typescript-eslint/no-unused-vars',
'vue/multi-word-component-names',
'no-undef',
]).toEqual(rest);
});
@@ -32,6 +34,7 @@ test('a vue-tsx project should pass lint', async () => {
expect([
'@typescript-eslint/no-unused-vars',
'vue/multi-word-component-names',
'vue/no-ref-as-operand',
'@typescript-eslint/no-empty-interface',
]).toEqual(rest);
@@ -8,6 +8,7 @@
const a = 1;
a = 1;
export default {
name: 'Todo',
data() {
return {
arr: [1, 2, 3],
+12 -6
View File
@@ -2,7 +2,7 @@
### Tips
The current document is the changelog of Vant 3. If you want to view the changelog of Vant 2, please visit [Vant 2 Changelog](https://youzan.github.io/vant/#/en-US/changelog).
The current document is the changelog of Vant 3. If you want to view the changelog of Vant 2, please visit [Vant 2 Changelog](https://youzan.github.io/vant/v2/#/en-US/changelog).
### Intro
@@ -16,20 +16,26 @@ Vant follows [Semantic Versioning 2.0.0](https://semver.org/lang/zh-CN/).
## Details
### [v3.4.4](https://github.com/youzan/vant/compare/v3.4.4...v3.4.3)
`2022-02-07`
- Vant 3 对应的 npm tag 切换为 `latest`
### [v3.4.3](https://github.com/compare/v3.4.2...v3.4.3)
`2022-01-26`
**Feature**
- Locale: add Hindi translation [#10248](https://github.com/issues/10248)
- Locale: add Korean translations [#10243](https://github.com/issues/10243)
- improve cursor of haptics elements [#10232](https://github.com/issues/10232)
- Locale: add Hindi translation [#10248](https://github.com/youzan/vant/issues/10248)
- Locale: add Korean translations [#10243](https://github.com/youzan/vant/issues/10243)
- improve cursor of haptics elements [#10232](https://github.com/youzan/vant/issues/10232)
**Bug Fixes**
- Icon: remove white space under image when using image URL [#10220](https://github.com/issues/10220)
- TreeSelect: click-nav event not work when clicking active item [#10239](https://github.com/issues/10239)
- Icon: remove white space under image when using image URL [#10220](https://github.com/youzan/vant/issues/10220)
- TreeSelect: click-nav event not work when clicking active item [#10239](https://github.com/youzan/vant/issues/10239)
### [v3.4.2](https://github.com/compare/v3.4.1...v3.4.2)
+12 -6
View File
@@ -2,7 +2,7 @@
### 提示
当前文档为 Vant 3 的更新日志,如需查询 Vant 2 的更新内容,请访问 [Vant 2 更新日志](https://youzan.github.io/vant/#/zh-CN/changelog)。
当前文档为 Vant 3 的更新日志,如需查询 Vant 2 的更新内容,请访问 [Vant 2 更新日志](https://youzan.github.io/vant/v2/#/zh-CN/changelog)。
### 介绍
@@ -16,20 +16,26 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。
## 更新内容
### [v3.4.4](https://github.com/youzan/vant/compare/v3.4.4...v3.4.3)
`2022-02-07`
- switch default npm tag to `latest`
### [v3.4.3](https://github.com/compare/v3.4.2...v3.4.3)
`2022-01-26`
**Feature**
- Locale: 新增 Hindi 印地语 [#10248](https://github.com/issues/10248)
- Locale: 新增 Korean 韩语 [#10243](https://github.com/issues/10243)
- 优化 cursor 样式 [#10232](https://github.com/issues/10232)
- Locale: 新增 Hindi 印地语 [#10248](https://github.com/youzan/vant/issues/10248)
- Locale: 新增 Korean 韩语 [#10243](https://github.com/youzan/vant/issues/10243)
- 优化 cursor 样式 [#10232](https://github.com/youzan/vant/issues/10232)
**Bug Fixes**
- Icon: 修复使用图片作为图标时水平未对齐的问题 [#10220](https://github.com/issues/10220)
- TreeSelect: 修复重复点击时无法触发 click-nav 事件的问题 [#10239](https://github.com/issues/10239)
- Icon: 修复使用图片作为图标时水平未对齐的问题 [#10220](https://github.com/youzan/vant/issues/10220)
- TreeSelect: 修复重复点击时无法触发 click-nav 事件的问题 [#10239](https://github.com/youzan/vant/issues/10239)
### [v3.4.2](https://github.com/compare/v3.4.1...v3.4.2)
+2 -2
View File
@@ -10,11 +10,11 @@
Vant 是**有赞前端团队**开源的移动端组件库,于 2017 年开源。Vant 对内承载了有赞所有核心业务,对外服务十多万开发者,是业界主流的移动端组件库之一。
目前 Vant 官方提供了 [Vue 2 版本](https://vant-contrib.gitee.io/vant)、[Vue 3 版本](https://vant-contrib.gitee.io/vant/v3)和[微信小程序版本](http://vant-contrib.gitee.io/vant-weapp),并由社区团队维护 [React 版本](https://github.com/mxdi9i7/vant-react)和[支付宝小程序版本](https://github.com/ant-move/Vant-Aliapp)。
目前 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/mxdi9i7/vant-react)和[支付宝小程序版本](https://github.com/ant-move/Vant-Aliapp)。
### 版本提示
你当前浏览的是 **Vant 3.x 版本** 的文档,适用于 Vue 3 开发。如果你在使用 Vue 2,请浏览 [Vant 2 文档](https://vant-contrib.gitee.io/vant)。
你当前浏览的是 **Vant 3.x 版本** 的文档,适用于 Vue 3 开发。如果你在使用 Vue 2,请浏览 [Vant 2 文档](https://vant-contrib.gitee.io/vant/v2)。
### 特性
@@ -7,21 +7,21 @@
Using `npm` to install:
```bash
# install Vant 2 for Vue 2 project
npm i vant@2
# install latest Vant for Vue 3 project
npm i vant
# install Vant 3 for Vue 3 project
npm i vant@3
# install Vant 2 for Vue 2 project
npm i vant@latest-v2
```
Using `yarn` or `pnpm`:
```bash
# with yarn
yarn add vant@3
yarn add vant
# with pnpm
pnpm add vant@3
pnpm add vant
```
### CDN
@@ -32,12 +32,12 @@ The easiest way to use Vant is to include a CDN link in the html file, after whi
<!-- import style -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/vant@next/lib/index.css"
href="https://cdn.jsdelivr.net/npm/vant@3/lib/index.css"
/>
<!-- import script -->
<script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
<script src="https://cdn.jsdelivr.net/npm/vant@next/lib/vant.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
<script src="https://cdn.jsdelivr.net/npm/vant@3/lib/vant.min.js"></script>
<script>
// Render the Button component
@@ -11,21 +11,21 @@
在现有项目中使用 Vant 时,可以通过 `npm` 进行安装:
```bash
# Vue 2 项目,安装 Vant 2
npm i vant@2
# Vue 3 项目,安装最新版 Vant
npm i vant
# Vue 3 项目,安装 Vant 3
npm i vant@3
# Vue 2 项目,安装 Vant 2
npm i vant@latest-v2
```
当然,你也可以通过 `yarn``pnpm` 进行安装:
```bash
# 通过 yarn 安装
yarn add vant@3
yarn add vant
# 通过 pnpm 安装
pnpm add vant@3
pnpm add vant
```
### 通过 CDN 安装
@@ -36,12 +36,12 @@ pnpm add vant@3
<!-- 引入样式文件 -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/vant@next/lib/index.css"
href="https://cdn.jsdelivr.net/npm/vant@3/lib/index.css"
/>
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
<script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
<script src="https://cdn.jsdelivr.net/npm/vant@next/lib/vant.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
<script src="https://cdn.jsdelivr.net/npm/vant@3/lib/vant.min.js"></script>
<script>
// 在 #app 标签下渲染一个按钮组件
+3 -6
View File
@@ -1,6 +1,6 @@
{
"name": "vant",
"version": "3.4.3",
"version": "3.4.4",
"description": "Mobile UI Components built on Vue",
"main": "lib/vant.cjs.js",
"module": "es/index.js",
@@ -35,8 +35,8 @@
"test": "vant-cli test",
"build": "vant-cli build",
"build:site": "vant-cli build-site",
"release": "vant-cli release --tag next",
"release:site": "pnpm build:site && gh-pages -d site-dist --add --dest v3",
"release": "vant-cli release",
"release:site": "pnpm build:site && gh-pages -d site-dist --add",
"test:watch": "vant-cli test --watch",
"test:coverage": "open test/coverage/index.html"
},
@@ -51,9 +51,6 @@
"bugs": "https://github.com/youzan/vant/issues",
"author": "chenjiahan",
"license": "MIT",
"npm": {
"tag": "next"
},
"keywords": [
"ui",
"vue",
+2 -1
View File
@@ -33,7 +33,8 @@ export function runRuleValidator(value: unknown, rule: FieldRule) {
const returnVal = rule.validator!(value, rule);
if (isPromise(returnVal)) {
return returnVal.then(resolve);
returnVal.then(resolve);
return;
}
resolve(returnVal);
+7 -2
View File
@@ -107,12 +107,17 @@ test('should support async validator in rules prop', async () => {
validator: (value, rule) => {
expect(value).toEqual('123');
expect(typeof rule).toEqual('object');
return new Promise((resolve) => resolve(true));
return new Promise((resolve) => {
resolve(true);
});
},
message: 'should pass',
},
{
validator: () => new Promise((resolve) => resolve(false)),
validator: () =>
new Promise((resolve) => {
resolve(false);
}),
message: 'should fail',
},
];
+3 -1
View File
@@ -162,7 +162,9 @@ export default defineComponent({
}
};
const init = () => nextTick(onScroll);
const init = () => {
nextTick(onScroll);
};
useEventListener('scroll', onScroll, { target: scrollParent });
@@ -426,7 +426,10 @@ test('before-delete prop resolved', async () => {
const wrapper = mount(Uploader, {
props: {
modelValue: [{ url: IMAGE }],
beforeDelete: () => new Promise<boolean>((resolve) => resolve(true)),
beforeDelete: () =>
new Promise<boolean>((resolve) => {
resolve(true);
}),
},
});
@@ -439,7 +442,10 @@ test('before-delete prop rejected', async () => {
const wrapper = mount(Uploader, {
props: {
modelValue: [{ url: IMAGE }],
beforeDelete: () => new Promise<boolean>((resolve, reject) => reject()),
beforeDelete: () =>
new Promise<boolean>((resolve, reject) => {
reject();
}),
},
});
+2 -3
View File
@@ -7,8 +7,7 @@ export default {
packageManager: 'pnpm',
site: {
publicPath:
(typeof window === 'undefined' && process.env.PUBLIC_PATH) ||
'/vant/v3/',
(typeof window === 'undefined' && process.env.PUBLIC_PATH) || '/vant/',
},
vetur: {
tagPrefix: 'van-',
@@ -19,7 +18,7 @@ export default {
darkModeClass: 'van-theme-dark',
versions: [
{ label: 'v1', link: '/vant/v1/' },
{ label: 'v2', link: '/vant/' },
{ label: 'v2', link: '/vant/v2/' },
],
baiduAnalytics: {
seed: 'ad6b5732c36321f2dafed737ac2da92f',