mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-06-26 22:29:15 +08:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b45b0b7608 | ||
|
c309ca2aaf |
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,6 +1,6 @@
|
|||||||
### Before submitting a pull request, please make sure the following is done:
|
### Before submitting a pull request, please make sure the following is done:
|
||||||
|
|
||||||
1. Read the [contributing guide](https://github.com/vant-ui/vant/blob/main/.github/CONTRIBUTING.md).
|
1. Read the [contributing guide](https://github.com/vant-ui/vant/blob/dev/.github/CONTRIBUTING.md).
|
||||||
2. If you've added code that should be tested, add tests.
|
2. If you've added code that should be tested, add tests.
|
||||||
3. If you've changed APIs, update the documentation.
|
3. If you've changed APIs, update the documentation.
|
||||||
4. Ensure the test suite passes (`npm test`).
|
4. Ensure the test suite passes (`npm test`).
|
||||||
|
4
.github/workflows/codeql-analysis.yml
vendored
4
.github/workflows/codeql-analysis.yml
vendored
@ -13,10 +13,10 @@ name: "CodeQL"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ dev ]
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
# The branches below must be a subset of the branches above
|
||||||
branches: [ main ]
|
branches: [ dev ]
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '36 21 * * 2'
|
- cron: '36 21 * * 2'
|
||||||
|
|
||||||
|
55
.github/workflows/deploy-v4-site.yml
vendored
55
.github/workflows/deploy-v4-site.yml
vendored
@ -2,7 +2,7 @@ name: Deploy V4 Site
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [dev]
|
||||||
paths:
|
paths:
|
||||||
- 'packages/vant/docs/**'
|
- 'packages/vant/docs/**'
|
||||||
|
|
||||||
@ -15,14 +15,14 @@ jobs:
|
|||||||
- name: Checkout 🛎️
|
- name: Checkout 🛎️
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
ref: 'main'
|
ref: 'next'
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: corepack enable
|
run: npm i pnpm@7 -g
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '16'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
@ -31,49 +31,10 @@ jobs:
|
|||||||
- name: Build Site
|
- name: Build Site
|
||||||
run: npm run build:site
|
run: npm run build:site
|
||||||
|
|
||||||
- name: Deploy for Gitee 🚀
|
- name: Deploy 🚀
|
||||||
uses: JamesIves/github-pages-deploy-action@v4.4.0
|
uses: JamesIves/github-pages-deploy-action@4.1.1
|
||||||
with:
|
with:
|
||||||
branch: gh-pages
|
branch: gh-pages
|
||||||
folder: packages/vant/site-dist
|
folder: packages/vant/site-dist
|
||||||
clean: true
|
target-folder: v4
|
||||||
clean-exclude: |
|
clean: false
|
||||||
1.x/*
|
|
||||||
1.x/**/*
|
|
||||||
next/*
|
|
||||||
next/**/*
|
|
||||||
v1/*
|
|
||||||
v1/**/*
|
|
||||||
v2/*
|
|
||||||
v2/**/*
|
|
||||||
v3/*
|
|
||||||
v3/**/*
|
|
||||||
v4/*
|
|
||||||
v4/**/*
|
|
||||||
vant-use/*
|
|
||||||
vant-use/**/*
|
|
||||||
|
|
||||||
- name: Deploy for GitHub 🚀
|
|
||||||
uses: JamesIves/github-pages-deploy-action@v4.4.0
|
|
||||||
with:
|
|
||||||
branch: main
|
|
||||||
folder: packages/vant/site-dist
|
|
||||||
token: ${{ secrets.VANT_UI_TOKEN }}
|
|
||||||
repository-name: vant-ui/vant-ui.github.io
|
|
||||||
target-folder: vant
|
|
||||||
clean: true
|
|
||||||
clean-exclude: |
|
|
||||||
1.x/*
|
|
||||||
1.x/**/*
|
|
||||||
next/*
|
|
||||||
next/**/*
|
|
||||||
v1/*
|
|
||||||
v1/**/*
|
|
||||||
v2/*
|
|
||||||
v2/**/*
|
|
||||||
v3/*
|
|
||||||
v3/**/*
|
|
||||||
v4/*
|
|
||||||
v4/**/*
|
|
||||||
vant-use/*
|
|
||||||
vant-use/**/*
|
|
||||||
|
3
.github/workflows/sync-gitee.yml
vendored
3
.github/workflows/sync-gitee.yml
vendored
@ -2,8 +2,7 @@ name: Sync to Gitee
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
branches: [dev, 2.x, 3.x, gh-pages]
|
||||||
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
14
.github/workflows/test.yml
vendored
14
.github/workflows/test.yml
vendored
@ -7,7 +7,7 @@ on:
|
|||||||
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- dev
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
@ -18,11 +18,11 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: corepack enable
|
run: npm i pnpm@7 -g
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '16'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
@ -37,11 +37,11 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: corepack enable
|
run: npm i pnpm@7 -g
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '16'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
@ -61,11 +61,11 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
run: corepack enable
|
run: npm i pnpm@7 -g
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '16'
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
36
README.md
36
README.md
@ -4,13 +4,14 @@
|
|||||||
|
|
||||||
<h1 align="center">Vant</h1>
|
<h1 align="center">Vant</h1>
|
||||||
|
|
||||||
<p align="center">A lightweight, customizable Vue UI library for mobile web apps.</p>
|
<p align="center">Lightweight Mobile UI Components built on Vue</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://img.shields.io/npm/v/vant?style=flat-square" alt="npm version" />
|
<img src="https://img.shields.io/npm/v/vant?style=flat-square" alt="npm version" />
|
||||||
|
<img src="https://img.shields.io/github/workflow/status/vant-ui/vant/CI/dev?style=flat-square" alt="CI Status" />
|
||||||
<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/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/npm/dm/vant.svg?style=flat-square&color=#4fc08d" alt="downloads" />
|
||||||
<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" />
|
<img src="https://img.badgesize.io/https://unpkg.com/vant@3/lib/vant.min.js?compression=gzip&style=flat-square&label=gzip%20size&color=#4fc08d" alt="Gzip Size" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@ -33,13 +34,12 @@
|
|||||||
- 📖 Extensive documentation and demos
|
- 📖 Extensive documentation and demos
|
||||||
- 📖 Provide Sketch and Axure design resources
|
- 📖 Provide Sketch and Axure design resources
|
||||||
- 🍭 Support Vue 2 & Vue 3
|
- 🍭 Support Vue 2 & Vue 3
|
||||||
- 🍭 Support Nuxt 2 & Nuxt 3, provide [Vant Module](https://github.com/vant-ui/vant-nuxt) for Nuxt
|
|
||||||
- 🍭 Support Tree Shaking
|
- 🍭 Support Tree Shaking
|
||||||
- 🍭 Support Custom Theme
|
- 🍭 Support Custom Theme
|
||||||
- 🍭 Support Accessibility (still improving)
|
- 🍭 Support Accessibility (still improving)
|
||||||
- 🍭 Support Dark Mode
|
- 🍭 Support Dark Mode (Requires upgrade to [Vant 4](https://vant-contrib.gitee.io/vant/v4/#/en-US/config-provider))
|
||||||
- 🍭 Support SSR
|
- 🍭 Support SSR
|
||||||
- 🌍 Support i18n, built-in 30+ languages
|
- 🌍 Support i18n, built-in 20+ languages
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
@ -92,16 +92,16 @@ Vant 3/4 supports modern browsers and Chrome >= 51、iOS >= 10.0 (same as Vue 3)
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [vant-weapp](https://github.com/vant-ui/vant-weapp) | WeChat MiniProgram UI |
|
| [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-demo](https://github.com/vant-ui/vant-demo) | Collection of Vant demos |
|
||||||
| [vant-cli](https://github.com/vant-ui/vant/tree/main/packages/vant-cli) | Scaffold for UI library |
|
| [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/main/packages/vant-icons) | Vant icons |
|
| [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/main/packages/vant-touch-emulator) | Using vant in desktop browsers |
|
| [vant-touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator) | Using vant in desktop browsers |
|
||||||
| [vant-nuxt](https://github.com/vant-ui/vant-nuxt) | Vant module for Nuxt |
|
|
||||||
|
|
||||||
## Community Ecosystem
|
## Community Ecosystem
|
||||||
|
|
||||||
| Project | Description |
|
| Project | Description |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [3lang3/react-vant](https://github.com/3lang3/react-vant) | React mobile UI Components based on Vant |
|
| [3lang3/react-vant](https://github.com/3lang3/react-vant) | React mobile UI Components based on Vant |
|
||||||
|
| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | React mobile UI Components based on Vant |
|
||||||
| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Alipay MiniProgram UI |
|
| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Alipay MiniProgram UI |
|
||||||
| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro |
|
| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro |
|
||||||
| [vant-theme](https://github.com/Aisen60/vant-theme) | Online theme preview built on Vant UI |
|
| [vant-theme](https://github.com/Aisen60/vant-theme) | Online theme preview built on Vant UI |
|
||||||
@ -112,7 +112,7 @@ Vant 3/4 supports modern browsers and Chrome >= 51、iOS >= 10.0 (same as Vue 3)
|
|||||||
|
|
||||||
- [Documentation](https://vant-ui.github.io/vant)
|
- [Documentation](https://vant-ui.github.io/vant)
|
||||||
- [Changelog](https://vant-ui.github.io/vant#/en-US/changelog)
|
- [Changelog](https://vant-ui.github.io/vant#/en-US/changelog)
|
||||||
- [Discussions](https://github.com/vant-ui/vant/discussions)
|
- [Gitter](https://gitter.im/vant-contrib/discuss?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
|
||||||
|
|
||||||
## Preview
|
## Preview
|
||||||
|
|
||||||
@ -124,13 +124,9 @@ You can scan the following QR code to access the demo:
|
|||||||
|
|
||||||
Core contributors of Vant and Vant Weapp:
|
Core contributors of Vant and Vant Weapp:
|
||||||
|
|
||||||
| [](https://github.com/chenjiahan/) | [](https://github.com/cookfront/) | [](https://github.com/w91/) | [](https://github.com/pangxie1991/) | [](https://github.com/rex-zsd/) |
|
| [](https://github.com/chenjiahan/) | [](https://github.com/cookfront/) | [](https://github.com/w91/) | [](https://github.com/pangxie1991/) | [](https://github.com/rex-zsd/) | [](https://github.com/nemo-shen/) | [](https://github.com/Lindysen/) | [](https://github.com/JakeLaoyu/) |
|
||||||
| :-: | :-: | :-: | :-: | :-: |
|
| :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|
||||||
| [chenjiahan](https://github.com/chenjiahan/) | [cookfront](https://github.com/cookfront/) | [wangnaiyi](https://github.com/w91/) | [pangxie](https://github.com/pangxie1991/) | [rex-zsd](https://github.com/rex-zsd/) |
|
| [chenjiahan](https://github.com/chenjiahan/) | [cookfront](https://github.com/cookfront/) | [wangnaiyi](https://github.com/w91/) | [pangxie](https://github.com/pangxie1991/) | [rex-zsd](https://github.com/rex-zsd/) | [nemo-shen](https://github.com/nemo-shen/) | [Lindysen](https://github.com/Lindysen/) | [JakeLaoyu](https://github.com/JakeLaoyu/) |
|
||||||
|
|
||||||
| [](https://github.com/nemo-shen/) | [](https://github.com/Lindysen/) | [](https://github.com/JakeLaoyu/) | [](https://github.com/landluck/) | [](https://github.com/wjw-gavin/) |
|
|
||||||
| :-: | :-: | :-: | :-: | :-: |
|
|
||||||
| [nemo-shen](https://github.com/nemo-shen/) | [Lindysen](https://github.com/Lindysen/) | [JakeLaoyu](https://github.com/JakeLaoyu/) | [landluck](https://github.com/landluck/) | [wjw-gavin](https://github.com/wjw-gavin/) |
|
|
||||||
|
|
||||||
## All Contributors
|
## All Contributors
|
||||||
|
|
||||||
@ -144,10 +140,6 @@ Thanks to the following friends for their contributions to Vant:
|
|||||||
|
|
||||||
Please make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.
|
Please make sure to read the [Contributing Guide](./.github/CONTRIBUTING.md) before making a pull request.
|
||||||
|
|
||||||
## Start On Web IDE
|
|
||||||
|
|
||||||
[https://github.dev/youzan/vant](https://github.dev/youzan/vant)
|
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
Vant is [MIT](https://github.com/youzan/vant/blob/main/LICENSE) licensed.
|
[MIT](https://en.wikipedia.org/wiki/MIT_License)
|
||||||
|
@ -4,13 +4,14 @@
|
|||||||
|
|
||||||
<h1 align="center">Vant</h1>
|
<h1 align="center">Vant</h1>
|
||||||
|
|
||||||
<p align="center">轻量、可定制的移动端 Vue 组件库</p>
|
<p align="center">轻量、可靠的移动端 Vue 组件库</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://img.shields.io/npm/v/vant?style=flat-square" alt="npm version" />
|
<img src="https://img.shields.io/npm/v/vant?style=flat-square" alt="npm version" />
|
||||||
|
<img src="https://img.shields.io/github/workflow/status/vant-ui/vant/CI/dev?style=flat-square" alt="CI Status" />
|
||||||
<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/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/npm/dm/vant.svg?style=flat-square&color=#4fc08d" alt="downloads" />
|
||||||
<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" />
|
<img src="https://img.badgesize.io/https://unpkg.com/vant@3/lib/vant.min.js?compression=gzip&style=flat-square&label=gzip%20size&color=#4fc08d" alt="Gzip Size" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@ -23,7 +24,7 @@
|
|||||||
|
|
||||||
### 介绍
|
### 介绍
|
||||||
|
|
||||||
Vant 是一个**轻量、可定制的移动端组件库**,于 2017 年开源。
|
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)。
|
目前 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)。
|
||||||
|
|
||||||
@ -37,13 +38,12 @@ Vant 是一个**轻量、可定制的移动端组件库**,于 2017 年开源
|
|||||||
- 📖 提供丰富的中英文文档和组件示例
|
- 📖 提供丰富的中英文文档和组件示例
|
||||||
- 📖 提供 Sketch 和 Axure 设计资源
|
- 📖 提供 Sketch 和 Axure 设计资源
|
||||||
- 🍭 支持 Vue 2、Vue 3 和微信小程序
|
- 🍭 支持 Vue 2、Vue 3 和微信小程序
|
||||||
- 🍭 支持 Nuxt 2、Nuxt 3,提供 Nuxt 的 [Vant Module](https://github.com/vant-ui/vant-nuxt)
|
|
||||||
- 🍭 支持主题定制,内置 700+ 个主题变量
|
- 🍭 支持主题定制,内置 700+ 个主题变量
|
||||||
- 🍭 支持按需引入和 Tree Shaking
|
- 🍭 支持按需引入和 Tree Shaking
|
||||||
- 🍭 支持无障碍访问(持续改进中)
|
- 🍭 支持无障碍访问(持续改进中)
|
||||||
- 🍭 支持深色模式
|
- 🍭 支持深色模式(从 [Vant 4](https://vant-contrib.gitee.io/vant/v4/#/zh-CN/config-provider) 开始支持)
|
||||||
- 🍭 支持服务器端渲染
|
- 🍭 支持服务器端渲染
|
||||||
- 🌍 支持国际化,内置 30+ 种语言包
|
- 🌍 支持国际化,内置 20+ 种语言包
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
@ -98,10 +98,9 @@ Vant 3/4 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [vant-weapp](https://github.com/vant-ui/vant-weapp) | Vant 微信小程序版 |
|
| [vant-weapp](https://github.com/vant-ui/vant-weapp) | Vant 微信小程序版 |
|
||||||
| [vant-demo](https://github.com/vant-ui/vant-demo) | Vant 官方示例合集 |
|
| [vant-demo](https://github.com/vant-ui/vant-demo) | Vant 官方示例合集 |
|
||||||
| [vant-cli](https://github.com/vant-ui/vant/tree/main/packages/vant-cli) | 开箱即用的组件库搭建工具 |
|
| [vant-cli](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli) | 开箱即用的组件库搭建工具 |
|
||||||
| [vant-icons](https://github.com/vant-ui/vant/tree/main/packages/vant-icons) | Vant 图标库 |
|
| [vant-icons](https://github.com/vant-ui/vant/tree/dev/packages/vant-icons) | Vant 图标库 |
|
||||||
| [vant-touch-emulator](https://github.com/vant-ui/vant/tree/main/packages/vant-touch-emulator) | 在桌面端使用 Vant 的辅助库 |
|
| [vant-touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator) | 在桌面端使用 Vant 的辅助库 |
|
||||||
| [vant-nuxt](https://github.com/vant-ui/vant-nuxt) | 为 Nuxt 准备的模块 |
|
|
||||||
|
|
||||||
## 社区生态
|
## 社区生态
|
||||||
|
|
||||||
@ -110,6 +109,7 @@ Vant 3/4 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一
|
|||||||
| 项目 | 描述 |
|
| 项目 | 描述 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| [3lang3/react-vant](https://github.com/3lang3/react-vant) | 参照 Vant 打造的 React 框架移动端组件库 |
|
| [3lang3/react-vant](https://github.com/3lang3/react-vant) | 参照 Vant 打造的 React 框架移动端组件库 |
|
||||||
|
| [rc-ui-lib](https://github.com/rancui/rc-ui-lib) | 参照 Vant 打造的 React 框架移动端组件库 |
|
||||||
| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Vant 支付宝小程序版 |
|
| [vant-aliapp](https://github.com/ant-move/Vant-Aliapp) | Vant 支付宝小程序版 |
|
||||||
| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro 版 |
|
| [taroify](https://gitee.com/mallfoundry/taroify) | Vant Taro 版 |
|
||||||
| [vant-theme](https://github.com/Aisen60/vant-theme) | Vant 在线主题预览工具 |
|
| [vant-theme](https://github.com/Aisen60/vant-theme) | Vant 在线主题预览工具 |
|
||||||
@ -120,8 +120,7 @@ Vant 3/4 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一
|
|||||||
|
|
||||||
- [详细文档](https://vant-contrib.gitee.io/vant)
|
- [详细文档](https://vant-contrib.gitee.io/vant)
|
||||||
- [更新日志](https://vant-contrib.gitee.io/vant#/zh-CN/changelog)
|
- [更新日志](https://vant-contrib.gitee.io/vant#/zh-CN/changelog)
|
||||||
- [码云镜像仓库](https://gitee.com/vant-contrib/vant)
|
- [Gitter 讨论组](https://gitter.im/vant-contrib/discuss?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
|
||||||
- [Discussions 讨论区](https://github.com/vant-ui/vant/discussions)
|
|
||||||
|
|
||||||
## 手机预览
|
## 手机预览
|
||||||
|
|
||||||
@ -133,13 +132,9 @@ Vant 3/4 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一
|
|||||||
|
|
||||||
以下是 Vant 和 Vant Weapp 的核心贡献者们:
|
以下是 Vant 和 Vant Weapp 的核心贡献者们:
|
||||||
|
|
||||||
| [](https://github.com/chenjiahan/) | [](https://github.com/cookfront/) | [](https://github.com/w91/) | [](https://github.com/pangxie1991/) | [](https://github.com/rex-zsd/) |
|
| [](https://github.com/chenjiahan/) | [](https://github.com/cookfront/) | [](https://github.com/w91/) | [](https://github.com/pangxie1991/) | [](https://github.com/rex-zsd/) | [](https://github.com/nemo-shen/) | [](https://github.com/Lindysen/) | [](https://github.com/JakeLaoyu/) |
|
||||||
| :-: | :-: | :-: | :-: | :-: |
|
| :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|
||||||
| [chenjiahan](https://github.com/chenjiahan/) | [cookfront](https://github.com/cookfront/) | [wangnaiyi](https://github.com/w91/) | [pangxie](https://github.com/pangxie1991/) | [rex-zsd](https://github.com/rex-zsd/) |
|
| [chenjiahan](https://github.com/chenjiahan/) | [cookfront](https://github.com/cookfront/) | [wangnaiyi](https://github.com/w91/) | [pangxie](https://github.com/pangxie1991/) | [rex-zsd](https://github.com/rex-zsd/) | [nemo-shen](https://github.com/nemo-shen/) | [Lindysen](https://github.com/Lindysen/) | [JakeLaoyu](https://github.com/JakeLaoyu/) |
|
||||||
|
|
||||||
| [](https://github.com/nemo-shen/) | [](https://github.com/Lindysen/) | [](https://github.com/JakeLaoyu/) | [](https://github.com/landluck/) | [](https://github.com/wjw-gavin/) |
|
|
||||||
| :-: | :-: | :-: | :-: | :-: |
|
|
||||||
| [nemo-shen](https://github.com/nemo-shen/) | [Lindysen](https://github.com/Lindysen/) | [JakeLaoyu](https://github.com/JakeLaoyu/) | [landluck](https://github.com/landluck/) | [wjw-gavin](https://github.com/wjw-gavin/) |
|
|
||||||
|
|
||||||
## 贡献者们
|
## 贡献者们
|
||||||
|
|
||||||
@ -155,10 +150,6 @@ Vant 3/4 支持现代浏览器以及 Chrome >= 51、iOS >= 10.0(与 Vue 3 一
|
|||||||
|
|
||||||
使用过程中发现任何问题都可以提 [Issue](https://github.com/vant-ui/vant/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://github.com/vant-ui/vant/pulls)。
|
使用过程中发现任何问题都可以提 [Issue](https://github.com/vant-ui/vant/issues) 给我们,当然,我们也非常欢迎你给我们发 [PR](https://github.com/vant-ui/vant/pulls)。
|
||||||
|
|
||||||
## 在 Cloud IDE 中预览
|
|
||||||
|
|
||||||
[https://idegithub.com/youzan/vant](https://idegithub.com/youzan/vant)
|
|
||||||
|
|
||||||
## 开源协议
|
## 开源协议
|
||||||
|
|
||||||
本项目基于 [MIT](https://github.com/youzan/vant/blob/main/LICENSE) 协议,请自由地享受和参与开源。
|
本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议,请自由地享受和参与开源。
|
||||||
|
21
package.json
21
package.json
@ -6,7 +6,6 @@
|
|||||||
"lint": "pnpm --dir ./packages/vant lint",
|
"lint": "pnpm --dir ./packages/vant lint",
|
||||||
"test": "pnpm --dir ./packages/vant test",
|
"test": "pnpm --dir ./packages/vant test",
|
||||||
"test:watch": "pnpm --dir ./packages/vant test:watch",
|
"test:watch": "pnpm --dir ./packages/vant test:watch",
|
||||||
"test:update": "pnpm --dir ./packages/vant test:update",
|
|
||||||
"build": "pnpm --dir ./packages/vant build",
|
"build": "pnpm --dir ./packages/vant build",
|
||||||
"build:site": "pnpm --dir ./packages/vant build:site"
|
"build:site": "pnpm --dir ./packages/vant build:site"
|
||||||
},
|
},
|
||||||
@ -15,16 +14,24 @@
|
|||||||
"*.{ts,tsx,js,vue,less}": "prettier --write",
|
"*.{ts,tsx,js,vue,less}": "prettier --write",
|
||||||
"*.{ts,tsx,js,vue}": "eslint --fix"
|
"*.{ts,tsx,js,vue}": "eslint --fix"
|
||||||
},
|
},
|
||||||
"engines": {
|
"packageManager": "pnpm@7.11.0",
|
||||||
"pnpm": ">= 8.0.0"
|
|
||||||
},
|
|
||||||
"packageManager": "pnpm@8.1.0",
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vant/cli": "workspace:*",
|
"@vant/cli": "workspace:*",
|
||||||
"@vant/eslint-config": "workspace:*",
|
"@vant/eslint-config": "workspace:*",
|
||||||
"eslint": "^8.31.0",
|
"eslint": "^8.23.0",
|
||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"nano-staged": "^0.8.0",
|
"nano-staged": "^0.8.0",
|
||||||
"prettier": "^2.7.1"
|
"prettier": "^2.7.1",
|
||||||
|
"rimraf": "^3.0.2"
|
||||||
|
},
|
||||||
|
"pnpm": {
|
||||||
|
"peerDependencyRules": {
|
||||||
|
"ignoreMissing": [
|
||||||
|
"@algolia/client-search",
|
||||||
|
"@types/react",
|
||||||
|
"react",
|
||||||
|
"react-dom"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,5 +15,5 @@ test/coverage
|
|||||||
es
|
es
|
||||||
lib
|
lib
|
||||||
dist
|
dist
|
||||||
**/site-dist
|
site
|
||||||
changelog.generated.md
|
changelog.generated.md
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
"vue": "^3.0.0"
|
"vue": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vant/cli": "^6.0.0",
|
"@vant/cli": "^4.0.0",
|
||||||
"vue": "^3.0.0",
|
"vue": "^3.0.0",
|
||||||
"sass": "^1.49.7"
|
"sass": "^1.49.7"
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "create-vant-cli-app",
|
"name": "create-vant-cli-app",
|
||||||
"version": "2.2.0",
|
"version": "2.0.1",
|
||||||
"description": "Create Vant CLI App",
|
"description": "Create Vant CLI App",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -31,22 +31,22 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/fs-extra": "^11.0.1",
|
"@types/fs-extra": "^9.0.13",
|
||||||
|
"@types/inquirer": "^8.2.3",
|
||||||
"release-it": "^15.4.1",
|
"release-it": "^15.4.1",
|
||||||
"rimraf": "^5.0.0",
|
"typescript": "^4.8.2"
|
||||||
"typescript": "^5.0.2"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"consola": "^3.0.2",
|
"consola": "^2.11.3",
|
||||||
"fast-glob": "^3.2.11",
|
"fast-glob": "^3.2.11",
|
||||||
"fs-extra": "^11.1.0",
|
"fs-extra": "^10.1.0",
|
||||||
"enquirer": "2.3.6",
|
"inquirer": "^8.2.4",
|
||||||
"picocolors": "^1.0.0"
|
"picocolors": "^1.0.0"
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: create-vant-cli-app v${version}"
|
"commitMessage": "release: create-vant-cli-app ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
|
|
||||||
export const CWD = process.cwd();
|
export const CWD = process.cwd();
|
||||||
export const GENERATOR_DIR = join(__dirname, '../generators');
|
export const GENERATOR_DIR = join(__dirname, '../generators');
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
import color from 'picocolors';
|
import color from 'picocolors';
|
||||||
import { consola } from 'consola';
|
import consola from 'consola';
|
||||||
import { prompt } from 'enquirer';
|
import { prompt } from 'inquirer';
|
||||||
import { sep, join } from 'node:path';
|
import { sep, join } from 'path';
|
||||||
import { CWD, GENERATOR_DIR } from './constant';
|
import { CWD, GENERATOR_DIR } from './constant';
|
||||||
|
|
||||||
const PROMPTS = [
|
const PROMPTS = [
|
||||||
{
|
{
|
||||||
name: 'vueVersion',
|
name: 'vueVersion',
|
||||||
message: 'Select Vue version',
|
message: 'Select Vue version',
|
||||||
type: 'select',
|
type: 'list',
|
||||||
choices: [
|
choices: [
|
||||||
{
|
{
|
||||||
name: 'vue2',
|
name: 'Vue 2',
|
||||||
message: 'Vue 2',
|
value: 'vue2',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'vue3',
|
name: 'Vue 3',
|
||||||
message: 'Vue 3',
|
value: 'vue3',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'preprocessor',
|
name: 'preprocessor',
|
||||||
message: 'Select css preprocessor',
|
message: 'Select css preprocessor',
|
||||||
type: 'select',
|
type: 'list',
|
||||||
choices: ['Less', 'Sass'],
|
choices: ['Less', 'Sass'],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
import { consola } from 'consola';
|
import consola from 'consola';
|
||||||
import { prompt } from 'enquirer';
|
import { prompt } from 'inquirer';
|
||||||
import { ensureDir } from 'fs-extra';
|
import { ensureDir } from 'fs-extra';
|
||||||
import { VanGenerator } from './generator';
|
import { VanGenerator } from './generator';
|
||||||
|
|
||||||
async function run() {
|
const PROMPTS = [
|
||||||
const { name } = await prompt<{ name: string }>({
|
{
|
||||||
type: 'input',
|
type: 'input',
|
||||||
name: 'name',
|
name: 'name',
|
||||||
message: 'Your package name',
|
message: 'Your package name',
|
||||||
});
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
const { name } = await prompt(PROMPTS);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await ensureDir(name);
|
await ensureDir(name);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Vant China Area Data
|
# Vant Area Data
|
||||||
|
|
||||||
中国省市区数据,适用于 Vant 的 Area 和 Cascader 等组件。
|
中国省市区数据,适用于 Vant Area 组件。
|
||||||
|
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
@ -17,20 +17,10 @@ pnpm add @vant/area-data
|
|||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
在 Vant 的 Area 组件中使用时,直接引用 `areaList` 对象即可:
|
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import { areaList } from '@vant/area-data';
|
import { areaList } from '@vant/area-data';
|
||||||
```
|
```
|
||||||
|
|
||||||
在 Vant 的 Cascader 组件中使用时,请使用 `useCascaderAreaData` 方法:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { useCascaderAreaData } from '@vant/area-data';
|
|
||||||
|
|
||||||
const cascaderAreaData = useCascaderAreaData();
|
|
||||||
```
|
|
||||||
|
|
||||||
## 数据更新
|
## 数据更新
|
||||||
|
|
||||||
中国的行政区划每年都会有变动,如果发现省市区数据未及时更新,欢迎提 Pull Request 帮助我们更新。你可以在[「国家统计局 - 全国区划代码」](http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/) 和[「民政部 - 行政区划代码」](https://www.mca.gov.cn/article/sj/xzqh/1980/)上查询到最新数据,请根据官方数据进行核实。
|
中国的行政区划每年都会有变动,如果发现省市区数据未及时更新,欢迎提 Pull Request 帮助我们更新。
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vant/area-data",
|
"name": "@vant/area-data",
|
||||||
"version": "1.4.1",
|
"version": "1.3.2",
|
||||||
"description": "Vant 省市区数据",
|
"description": "Vant 省市区数据",
|
||||||
"main": "dist/index.cjs.js",
|
"main": "dist/index.cjs.js",
|
||||||
"module": "dist/index.esm.mjs",
|
"module": "dist/index.esm.mjs",
|
||||||
@ -11,7 +11,6 @@
|
|||||||
"require": "./dist/index.cjs.js"
|
"require": "./dist/index.cjs.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sideEffects": false,
|
|
||||||
"files": [
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
@ -37,15 +36,14 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"esbuild": "^0.17.12",
|
"esbuild": "^0.14.54",
|
||||||
"release-it": "^15.4.1",
|
"release-it": "^15.4.1",
|
||||||
"rimraf": "^5.0.0",
|
"typescript": "^4.8.2"
|
||||||
"typescript": "^5.0.2"
|
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/area-data v${version}"
|
"commitMessage": "release: @vant/area-data ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
export const areaList: {
|
export const areaList = {
|
||||||
province_list: Record<string, string>;
|
|
||||||
city_list: Record<string, string>;
|
|
||||||
county_list: Record<string, string>;
|
|
||||||
} = {
|
|
||||||
province_list: {
|
province_list: {
|
||||||
110000: '北京市',
|
110000: '北京市',
|
||||||
120000: '天津市',
|
120000: '天津市',
|
||||||
@ -1625,6 +1621,7 @@ export const areaList: {
|
|||||||
360724: '上犹县',
|
360724: '上犹县',
|
||||||
360725: '崇义县',
|
360725: '崇义县',
|
||||||
360726: '安远县',
|
360726: '安远县',
|
||||||
|
360727: '龙南县',
|
||||||
360728: '定南县',
|
360728: '定南县',
|
||||||
360729: '全南县',
|
360729: '全南县',
|
||||||
360730: '宁都县',
|
360730: '宁都县',
|
||||||
@ -1634,7 +1631,6 @@ export const areaList: {
|
|||||||
360734: '寻乌县',
|
360734: '寻乌县',
|
||||||
360735: '石城县',
|
360735: '石城县',
|
||||||
360781: '瑞金市',
|
360781: '瑞金市',
|
||||||
360783: '龙南市',
|
|
||||||
360802: '吉州区',
|
360802: '吉州区',
|
||||||
360803: '青原区',
|
360803: '青原区',
|
||||||
360821: '吉安县',
|
360821: '吉安县',
|
||||||
@ -3890,53 +3886,3 @@ export const areaList: {
|
|||||||
820204: '圣方济各堂区',
|
820204: '圣方济各堂区',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
type CascaderOption = {
|
|
||||||
text: string;
|
|
||||||
value: string;
|
|
||||||
children?: CascaderOption[];
|
|
||||||
};
|
|
||||||
|
|
||||||
const makeOption = (
|
|
||||||
text: string,
|
|
||||||
value: string,
|
|
||||||
children?: CascaderOption[]
|
|
||||||
): CascaderOption => ({
|
|
||||||
text,
|
|
||||||
value,
|
|
||||||
children,
|
|
||||||
});
|
|
||||||
|
|
||||||
export function useCascaderAreaData() {
|
|
||||||
const {
|
|
||||||
city_list: city,
|
|
||||||
county_list: county,
|
|
||||||
province_list: province,
|
|
||||||
} = areaList;
|
|
||||||
|
|
||||||
const provinceMap = new Map<string, CascaderOption>();
|
|
||||||
Object.keys(province).forEach((code) => {
|
|
||||||
provinceMap.set(code.slice(0, 2), makeOption(province[code], code, []));
|
|
||||||
});
|
|
||||||
|
|
||||||
const cityMap = new Map<string, CascaderOption>();
|
|
||||||
|
|
||||||
Object.keys(city).forEach((code) => {
|
|
||||||
const option = makeOption(city[code], code, []);
|
|
||||||
cityMap.set(code.slice(0, 4), option);
|
|
||||||
|
|
||||||
const province = provinceMap.get(code.slice(0, 2));
|
|
||||||
if (province) {
|
|
||||||
province.children!.push(option);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.keys(county).forEach((code) => {
|
|
||||||
const city = cityMap.get(code.slice(0, 4));
|
|
||||||
if (city) {
|
|
||||||
city.children!.push(makeOption(county[code], code));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return Array.from(provinceMap.values());
|
|
||||||
}
|
|
||||||
|
@ -65,7 +65,7 @@ Please add the followed config to `package.json` file.
|
|||||||
|
|
||||||
## More Details
|
## More Details
|
||||||
|
|
||||||
- [cli](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/commands.md)
|
- [cli](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/commands.md)
|
||||||
- [config](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/config.md)
|
- [config](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/config.md)
|
||||||
- [directory structure](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/directory.md)
|
- [directory structure](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/directory.md)
|
||||||
- [CHANGELOG](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/changelog.md)
|
- [CHANGELOG](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/changelog.md)
|
||||||
|
@ -62,7 +62,7 @@ pnpm add @vant/cli -D
|
|||||||
|
|
||||||
## 详细文档
|
## 详细文档
|
||||||
|
|
||||||
- [命令](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/commands.zh-CN.md)
|
- [命令](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/commands.zh-CN.md)
|
||||||
- [配置指南](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/config.zh-CN.md)
|
- [配置指南](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/config.zh-CN.md)
|
||||||
- [目录结构](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/directory.zh-CN.md)
|
- [目录结构](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/directory.zh-CN.md)
|
||||||
- [更新日志](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/changelog.md)
|
- [更新日志](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/changelog.md)
|
||||||
|
@ -1,61 +1,14 @@
|
|||||||
# 更新日志
|
# 更新日志
|
||||||
|
|
||||||
## v6.1.0
|
## v5.0.0 (未发布)
|
||||||
|
|
||||||
`2023-03-19`
|
|
||||||
|
|
||||||
- 升级 typescript v5
|
|
||||||
- 升级 esbuild 0.17
|
|
||||||
- 升级 vite 4.2
|
|
||||||
- 优化 tsc 错误日志的格式
|
|
||||||
|
|
||||||
## v6.0.1
|
|
||||||
|
|
||||||
`2023-03-11`
|
|
||||||
|
|
||||||
- 修复编译 `mjs` 或者 `cjs` 时, 替换 vue 文件导入出现重复后缀的问题
|
|
||||||
|
|
||||||
## v6.0.0
|
|
||||||
|
|
||||||
`2023-02-26`
|
|
||||||
|
|
||||||
- vite: 由 v3 升级至 v4
|
|
||||||
- @vitejs/plugin-vue: 由 v3 升级至 v4
|
|
||||||
- @vitejs/plugin-vue-jsx: 由 v2 升级至 v3
|
|
||||||
- 移除 `site.searchConfig` 配置项
|
|
||||||
- 修复 build 时解析 markdown 可能报错的问题
|
|
||||||
|
|
||||||
## v5.1.0
|
|
||||||
|
|
||||||
`2022-11-05`
|
|
||||||
|
|
||||||
- 支持读取 `vite.config.ts` 文件来自定义 vite 配置
|
|
||||||
- 修复设置 vite 的 `server.port` 配置项不生效的问题
|
|
||||||
|
|
||||||
## v5.0.2
|
|
||||||
|
|
||||||
`2022-10-07`
|
|
||||||
|
|
||||||
- 修复首次运行 dev 时 vite 引入了两份 Vue 代码导致渲染失败的问题
|
|
||||||
|
|
||||||
## v5.0.1
|
|
||||||
|
|
||||||
`2022-10-06`
|
|
||||||
|
|
||||||
- 修复 jest 版本未正确升级的问题
|
|
||||||
|
|
||||||
## v5.0.0
|
|
||||||
|
|
||||||
### 依赖升级
|
### 依赖升级
|
||||||
|
|
||||||
`2022-10-06`
|
|
||||||
|
|
||||||
对以下依赖进行了大版本升级:
|
对以下依赖进行了大版本升级:
|
||||||
|
|
||||||
- vite: 由 v2 升级至 v3
|
- vite v3
|
||||||
- jest: 由 v27 升级至 v29
|
- @vitejs/plugin-vue v3
|
||||||
- @vitejs/plugin-vue: 由 v2 升级至 v3
|
- @vitejs/plugin-vue-jsx v2
|
||||||
- @vitejs/plugin-vue-jsx: 由 v1 升级至 v2
|
|
||||||
|
|
||||||
### 依赖精简
|
### 依赖精简
|
||||||
|
|
||||||
|
@ -29,10 +29,6 @@ const DEFAULT_CONFIG = {
|
|||||||
],
|
],
|
||||||
coverageReporters: ['html', 'lcov', 'text-summary'],
|
coverageReporters: ['html', 'lcov', 'text-summary'],
|
||||||
coverageDirectory: './test/coverage',
|
coverageDirectory: './test/coverage',
|
||||||
testEnvironmentOptions: {
|
|
||||||
// https://stackoverflow.com/questions/72428323/jest-referenceerror-vue-is-not-defined
|
|
||||||
customExportConditions: ['node', 'node-addons'],
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function readRootConfig() {
|
function readRootConfig() {
|
||||||
|
@ -87,8 +87,6 @@ module.exports = {
|
|||||||
if (isJsxFile(path)) {
|
if (isJsxFile(path)) {
|
||||||
code = transformJsx(code, path);
|
code = transformJsx(code, path);
|
||||||
}
|
}
|
||||||
return {
|
return transformScript(code);
|
||||||
code: transformScript(code)
|
|
||||||
};
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -29,7 +29,7 @@ Start local dev server for browsering components and demo.
|
|||||||
|
|
||||||
Build Vue component library.
|
Build Vue component library.
|
||||||
|
|
||||||
Files will be output to `es` and `lib` directory. More details [directory structure](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/directory.md)
|
Files will be output to `es` and `lib` directory. More details [directory structure](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/directory.md)
|
||||||
|
|
||||||
Please add the followed config to `package.json` when publish to npm.
|
Please add the followed config to `package.json` when publish to npm.
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ npx vant-cli dev
|
|||||||
|
|
||||||
构建组件库。
|
构建组件库。
|
||||||
|
|
||||||
运行 build 命令会在 `es` 和 `lib` 目录下生成可用于生产环境的组件代码,详见 [目录结构](https://github.com/vant-ui/vant/tree/main/packages/vant-cli/docs/directory.zh-CN.md)。
|
运行 build 命令会在 `es` 和 `lib` 目录下生成可用于生产环境的组件代码,详见 [目录结构](https://github.com/vant-ui/vant/tree/dev/packages/vant-cli/docs/directory.zh-CN.md)。
|
||||||
|
|
||||||
发布 npm 时,请将以下配置加入到 `package.json` 中,使 npm 包能被正确识别:
|
发布 npm 时,请将以下配置加入到 `package.json` 中,使 npm 包能被正确识别:
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
- [site.nav](#sitenav)
|
- [site.nav](#sitenav)
|
||||||
- [site.versions](#siteversions)
|
- [site.versions](#siteversions)
|
||||||
- [site.baiduAnalytics](#sitebaiduanalytics)
|
- [site.baiduAnalytics](#sitebaiduanalytics)
|
||||||
|
- [site.searchConfig](#sitesearchconfig)
|
||||||
- [site.hideSimulator](#sitehidesimulator)
|
- [site.hideSimulator](#sitehidesimulator)
|
||||||
- [site.simulator.url](#sitesimulatorurl)
|
- [site.simulator.url](#sitesimulatorurl)
|
||||||
- [site.htmlMeta](#sitehtmlmeta)
|
- [site.htmlMeta](#sitehtmlmeta)
|
||||||
@ -176,16 +177,17 @@ When set to `true`, `export * from 'xxx'` will be used to export all modules and
|
|||||||
|
|
||||||
### build.configureVite
|
### build.configureVite
|
||||||
|
|
||||||
- Type: `(config: InlineConfig): InlineConfig | undefined`
|
- Type: `(config: InlineConfig): InlineConfig`
|
||||||
- Default: `undefined`
|
- Default: `undefined`
|
||||||
|
|
||||||
Custom [vite config](https://vitejs.dev/config/), requires `@vant/cli>= 4.0.0`.
|
Custom vite config(`@vant/cli>= 4.0.0`)
|
||||||
|
|
||||||
```js
|
```js
|
||||||
module.exports = {
|
module.exports = {
|
||||||
build: {
|
build: {
|
||||||
configureVite(config) {
|
configureVite(config) {
|
||||||
config.server.port = 3000;
|
// add vite plugin
|
||||||
|
config.plugins.push(vitePluginXXX);
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -212,14 +214,10 @@ module.exports = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that you are not allowed to import vite plugins in `vant.config.mjs`, because the file will be bundled into the website code.
|
|
||||||
|
|
||||||
If you need to configure some vite plugins, please create a `vite.config.ts` file in the same directory of `vant.config.mjs`, in which you can add any vite configuration (this feature requires @vant/cli 5.1.0).
|
|
||||||
|
|
||||||
### build.packageManager
|
### build.packageManager
|
||||||
|
|
||||||
- Type: `'npm' | 'yarn' | 'pnpm'`
|
- Type: `'npm' | 'yarn' | 'pnpm'`
|
||||||
- Default: `yarn`
|
- Default: `undefined`
|
||||||
|
|
||||||
`npm` package manager.
|
`npm` package manager.
|
||||||
|
|
||||||
@ -354,6 +352,13 @@ module.exports = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### site.searchConfig
|
||||||
|
|
||||||
|
- Type: `object`
|
||||||
|
- Default: `undefined`
|
||||||
|
|
||||||
|
Documentation site search config. Based on [docsearch](https://docsearch.algolia.com/docs/behavior) of algolia.
|
||||||
|
|
||||||
### site.hideSimulator
|
### site.hideSimulator
|
||||||
|
|
||||||
- Type: `boolean`
|
- Type: `boolean`
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
- [site.nav](#sitenav)
|
- [site.nav](#sitenav)
|
||||||
- [site.versions](#siteversions)
|
- [site.versions](#siteversions)
|
||||||
- [site.baiduAnalytics](#sitebaiduanalytics)
|
- [site.baiduAnalytics](#sitebaiduanalytics)
|
||||||
|
- [site.searchConfig](#sitesearchconfig)
|
||||||
- [site.hideSimulator](#sitehidesimulator)
|
- [site.hideSimulator](#sitehidesimulator)
|
||||||
- [site.simulator.url](#sitesimulatorurl)
|
- [site.simulator.url](#sitesimulatorurl)
|
||||||
- [site.htmlMeta](#sitehtmlmeta)
|
- [site.htmlMeta](#sitehtmlmeta)
|
||||||
@ -176,16 +177,17 @@ module.exports = {
|
|||||||
|
|
||||||
### build.configureVite
|
### build.configureVite
|
||||||
|
|
||||||
- Type: `(config: InlineConfig): InlineConfig | undefined`
|
- Type: `(config: InlineConfig): InlineConfig`
|
||||||
- Default: `undefined`
|
- Default: `undefined`
|
||||||
|
|
||||||
vant-cli 使用 vite 来构建组件库和文档站点,通过 `configureVite` 选项可以自定义 [vite 配置](https://vitejs.dev/config/)(从 4.0.0 版本开始支持)。
|
vant-cli 使用 vite 来构建组件库和文档站点,通过 `configureVite` 选项可以自定义 vite 配置(从 4.0.0 版本开始支持)。
|
||||||
|
|
||||||
```js
|
```js
|
||||||
module.exports = {
|
module.exports = {
|
||||||
build: {
|
build: {
|
||||||
configureVite(config) {
|
configureVite(config) {
|
||||||
config.server.port = 3000;
|
// 添加一个自定义插件
|
||||||
|
config.plugins.push(vitePluginXXX);
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -214,14 +216,10 @@ module.exports = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
注意,由于 `vant.config.mjs` 文件会被打包到文档网站的代码中,因此 `configureVite` 中不允许引用 vite 插件。
|
|
||||||
|
|
||||||
如果需要配置 vite 插件,可以在 `vant.config.mjs` 的同级目录下创建 `vite.config.ts` 文件,在该文件中你可以添加任意的 vite 配置(该特性从 @vant/cli 5.1.0 版本开始支持)。
|
|
||||||
|
|
||||||
### build.packageManager
|
### build.packageManager
|
||||||
|
|
||||||
- Type: `'npm' | 'yarn' | 'pnpm'`
|
- Type: `'npm' | 'yarn' | 'pnpm'`
|
||||||
- Default: `yarn`
|
- Default: `undefined`
|
||||||
|
|
||||||
指定使用的包管理器。
|
指定使用的包管理器。
|
||||||
|
|
||||||
@ -356,6 +354,15 @@ module.exports = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### site.searchConfig
|
||||||
|
|
||||||
|
- Type: `object`
|
||||||
|
- Default: `undefined`
|
||||||
|
|
||||||
|
文档网站的搜索配置,基于 algolia 提供的 docsearch 服务实现。
|
||||||
|
|
||||||
|
配置内容参见 [docsearch](https://docsearch.algolia.com/docs/behavior)。
|
||||||
|
|
||||||
### site.hideSimulator
|
### site.hideSimulator
|
||||||
|
|
||||||
- Type: `boolean`
|
- Type: `boolean`
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vant/cli",
|
"name": "@vant/cli",
|
||||||
"version": "6.1.0",
|
"version": "4.0.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"typings": "lib/index.d.ts",
|
"typings": "lib/index.d.ts",
|
||||||
@ -39,61 +39,61 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@jest/types": "^29.1.2",
|
"@jest/types": "^27.5.1",
|
||||||
"@types/fs-extra": "^11.0.1",
|
"@types/fs-extra": "^9.0.13",
|
||||||
"@types/less": "^3.0.3",
|
"@types/less": "^3.0.3",
|
||||||
"@types/lodash": "^4.14.191",
|
|
||||||
"@types/markdown-it": "^12.2.3",
|
"@types/markdown-it": "^12.2.3",
|
||||||
"rimraf": "^5.0.0",
|
"react": "^18.2.0",
|
||||||
"vue": "^3.2.47"
|
"react-dom": "^18.2.0",
|
||||||
|
"vue": "^3.2.38"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/core": "^7.18.13",
|
"@babel/core": "^7.18.13",
|
||||||
"@babel/preset-typescript": "^7.18.6",
|
"@babel/preset-typescript": "^7.18.6",
|
||||||
"@types/jest": "^29.1.1",
|
"@docsearch/css": "^3.2.1",
|
||||||
|
"@docsearch/js": "^3.2.1",
|
||||||
|
"@types/jest": "^27.5.2",
|
||||||
"@vant/eslint-config": "^3.5.0",
|
"@vant/eslint-config": "^3.5.0",
|
||||||
"@vant/touch-emulator": "^1.4.0",
|
"@vant/touch-emulator": "^1.4.0",
|
||||||
"@vitejs/plugin-vue": "^4.0.0",
|
"@vitejs/plugin-vue": "^3.0.3",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
"@vitejs/plugin-vue-jsx": "^2.0.1",
|
||||||
"@vue/babel-plugin-jsx": "^1.1.1",
|
"@vue/babel-plugin-jsx": "^1.1.1",
|
||||||
"autoprefixer": "^10.4.8",
|
"autoprefixer": "^10.4.8",
|
||||||
"commander": "^10.0.0",
|
"commander": "^9.4.0",
|
||||||
"consola": "^3.0.2",
|
"consola": "^2.15.3",
|
||||||
"conventional-changelog": "^3.1.25",
|
"conventional-changelog": "^3.1.25",
|
||||||
"esbuild": "^0.17.12",
|
"esbuild": "^0.14.54",
|
||||||
"eslint": "^8.31.0",
|
"eslint": "^8.23.0",
|
||||||
"execa": "^6.1.0",
|
"execa": "^5.1.1",
|
||||||
"fast-glob": "^3.2.11",
|
"fast-glob": "^3.2.11",
|
||||||
"fs-extra": "^11.1.0",
|
"fs-extra": "^10.1.0",
|
||||||
"hash-sum": "^2.0.0",
|
"hash-sum": "^2.0.0",
|
||||||
"highlight.js": "^11.6.0",
|
"highlight.js": "^11.6.0",
|
||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"jest": "^29.3.1",
|
"jest": "^27.5.1",
|
||||||
"jest-canvas-mock": "^2.4.0",
|
"jest-canvas-mock": "^2.4.0",
|
||||||
"jest-environment-jsdom": "^29.1.2",
|
|
||||||
"jest-serializer-html": "^7.1.0",
|
"jest-serializer-html": "^7.1.0",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
"lodash": "^4.17.21",
|
|
||||||
"markdown-it": "^12.3.2",
|
"markdown-it": "^12.3.2",
|
||||||
"markdown-it-anchor": "^8.6.4",
|
"markdown-it-anchor": "^8.6.4",
|
||||||
"nano-staged": "^0.8.0",
|
"nano-staged": "^0.8.0",
|
||||||
"nanospinner": "^1.1.0",
|
"nanospinner": "^1.1.0",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"postcss": "^8.4.16",
|
"postcss": "^8.4.16",
|
||||||
"postcss-load-config": "^4.0.1",
|
"postcss-load-config": "^3.1.4",
|
||||||
"prettier": "^2.7.1",
|
"prettier": "^2.7.1",
|
||||||
"release-it": "^15.4.1",
|
"release-it": "^15.4.1",
|
||||||
"terser": "^5.16.1",
|
|
||||||
"transliteration": "^2.3.5",
|
"transliteration": "^2.3.5",
|
||||||
"typescript": "^5.0.2",
|
"typescript": "^4.8.2",
|
||||||
"vite": "^4.2.0",
|
"vite": "^3.0.9",
|
||||||
|
"vite-plugin-html": "^2.1.2",
|
||||||
"vite-plugin-md": "^0.11.9",
|
"vite-plugin-md": "^0.11.9",
|
||||||
"vue-router": "^4.1.5"
|
"vue-router": "^4.1.5"
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/cli v${version}"
|
"commitMessage": "release: @vant/cli ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ code {
|
|||||||
color: var(--van-doc-code-color);
|
color: var(--van-doc-code-color);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: var(--van-doc-code-font-family);
|
font-family: 'Source Code Pro', 'Monaco', 'Inconsolata', monospace;
|
||||||
line-height: 26px;
|
line-height: 26px;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
@ -15,13 +15,6 @@ code {
|
|||||||
border-radius: var(--van-doc-border-radius);
|
border-radius: var(--van-doc-border-radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
|
||||||
code {
|
|
||||||
display: inline-flex;
|
|
||||||
padding: 4px 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
margin: 20px 0 0;
|
margin: 20px 0 0;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
:root {
|
body {
|
||||||
// colors
|
// colors
|
||||||
--van-doc-black: #000;
|
--van-doc-black: #000;
|
||||||
--van-doc-white: #fff;
|
--van-doc-white: #fff;
|
||||||
@ -12,20 +12,15 @@
|
|||||||
--van-doc-gray-8: #323233;
|
--van-doc-gray-8: #323233;
|
||||||
--van-doc-blue: #1989fa;
|
--van-doc-blue: #1989fa;
|
||||||
--van-doc-green: #07c160;
|
--van-doc-green: #07c160;
|
||||||
--van-doc-purple: #8e69d3;
|
|
||||||
|
|
||||||
// sizes
|
// sizes
|
||||||
--van-doc-padding: 32px;
|
--van-doc-padding: 24px;
|
||||||
--van-doc-row-max-width: 1680px;
|
--van-doc-row-max-width: 1680px;
|
||||||
--van-doc-nav-width: 220px;
|
--van-doc-nav-width: 220px;
|
||||||
--van-doc-border-radius: 20px;
|
--van-doc-border-radius: 20px;
|
||||||
--van-doc-simulator-width: 360px;
|
--van-doc-simulator-width: 360px;
|
||||||
--van-doc-simulator-height: 620px;
|
--van-doc-simulator-height: 620px;
|
||||||
--van-doc-header-top-height: 64px;
|
--van-doc-header-top-height: 64px;
|
||||||
|
|
||||||
// fonts
|
|
||||||
--van-doc-code-font-family: 'Menlo', 'Source Code Pro', 'Monaco',
|
|
||||||
'Inconsolata', monospace;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.van-doc-theme-light {
|
.van-doc-theme-light {
|
||||||
@ -49,7 +44,7 @@
|
|||||||
--van-doc-code-background: var(--van-doc-gray-1);
|
--van-doc-code-background: var(--van-doc-gray-1);
|
||||||
|
|
||||||
// blockquote
|
// blockquote
|
||||||
--van-doc-blockquote-color: #2f85da;
|
--van-doc-blockquote-color: #4994df;
|
||||||
--van-doc-blockquote-background: #ecf9ff;
|
--van-doc-blockquote-background: #ecf9ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +83,8 @@ export default {
|
|||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
.van-doc-card {
|
.van-doc-card {
|
||||||
margin-bottom: var(--van-doc-padding);
|
margin-bottom: 24px;
|
||||||
padding: 28px 28px 32px;
|
padding: 24px;
|
||||||
background-color: var(--van-doc-background-2);
|
background-color: var(--van-doc-background-2);
|
||||||
border-radius: var(--van-doc-border-radius);
|
border-radius: var(--van-doc-border-radius);
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
@ -185,7 +185,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
> p {
|
> p {
|
||||||
margin-top: 16px;
|
margin-top: 8px;
|
||||||
color: var(--van-doc-text-color-3);
|
color: var(--van-doc-text-color-3);
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 26px;
|
line-height: 26px;
|
||||||
@ -245,7 +245,7 @@ export default {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
color: var(--van-doc-green);
|
color: var(--van-doc-green);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: var(--van-doc-code-font-family);
|
font-family: 'Source Code Pro', 'Monaco', 'Inconsolata', monospace;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
-webkit-font-smoothing: auto;
|
-webkit-font-smoothing: auto;
|
||||||
@ -253,7 +253,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
> ul {
|
> ul {
|
||||||
margin: 16px 0 0;
|
margin: 12px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
> ul li,
|
> ul li,
|
||||||
@ -291,19 +291,19 @@ export default {
|
|||||||
> table code {
|
> table code {
|
||||||
display: inline;
|
display: inline;
|
||||||
margin: 0 2px;
|
margin: 0 2px;
|
||||||
padding: 3px 7px;
|
padding: 2px 5px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
font-family: inherit;
|
||||||
|
font-weight: 600;
|
||||||
word-break: keep-all;
|
word-break: keep-all;
|
||||||
border-radius: 6px;
|
border-radius: 4px;
|
||||||
-webkit-font-smoothing: auto;
|
-webkit-font-smoothing: antialiased;
|
||||||
font-family: var(--van-doc-code-font-family);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
> blockquote {
|
> blockquote {
|
||||||
margin: 16px 0 0;
|
margin: 16px 0 0;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
font-size: 15px;
|
font-size: 14px;
|
||||||
line-height: 26px;
|
|
||||||
color: var(--van-doc-blockquote-color);
|
color: var(--van-doc-blockquote-color);
|
||||||
background-color: var(--van-doc-blockquote-background);
|
background-color: var(--van-doc-blockquote-background);
|
||||||
border-radius: var(--van-doc-border-radius);
|
border-radius: var(--van-doc-border-radius);
|
||||||
@ -312,7 +312,7 @@ export default {
|
|||||||
> img,
|
> img,
|
||||||
> p img {
|
> p img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 16px 0 0;
|
margin: 16px 0;
|
||||||
border-radius: var(--van-doc-border-radius);
|
border-radius: var(--van-doc-border-radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -323,7 +323,7 @@ export default {
|
|||||||
padding: 0 0 75px;
|
padding: 0 0 75px;
|
||||||
|
|
||||||
.van-doc-markdown-body {
|
.van-doc-markdown-body {
|
||||||
padding: var(--van-doc-padding);
|
padding: 24px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
h1,
|
h1,
|
||||||
@ -343,7 +343,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
margin: 52px 0 20px;
|
margin: 45px 0 20px;
|
||||||
font-size: 26px;
|
font-size: 26px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,12 @@
|
|||||||
{{ langLabel }}
|
{{ langLabel }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<search-input
|
||||||
|
v-if="searchConfig"
|
||||||
|
:lang="lang"
|
||||||
|
:search-config="searchConfig"
|
||||||
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -71,12 +77,17 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import SearchInput from './SearchInput.vue';
|
||||||
import { packageVersion } from 'site-desktop-shared';
|
import { packageVersion } from 'site-desktop-shared';
|
||||||
import { getDefaultTheme, syncThemeToChild } from '../../common/iframe-sync';
|
import { getDefaultTheme, syncThemeToChild } from '../../common/iframe-sync';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'VanDocHeader',
|
name: 'VanDocHeader',
|
||||||
|
|
||||||
|
components: {
|
||||||
|
SearchInput,
|
||||||
|
},
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
lang: String,
|
lang: String,
|
||||||
config: Object,
|
config: Object,
|
||||||
@ -111,6 +122,10 @@ export default {
|
|||||||
return {};
|
return {};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
searchConfig() {
|
||||||
|
return this.config.searchConfig;
|
||||||
|
},
|
||||||
|
|
||||||
themeImg() {
|
themeImg() {
|
||||||
if (this.currentTheme === 'light') {
|
if (this.currentTheme === 'light') {
|
||||||
return 'https://b.yzcdn.cn/vant/dark-theme.svg';
|
return 'https://b.yzcdn.cn/vant/dark-theme.svg';
|
||||||
@ -123,8 +138,8 @@ export default {
|
|||||||
currentTheme: {
|
currentTheme: {
|
||||||
handler(newVal, oldVal) {
|
handler(newVal, oldVal) {
|
||||||
window.localStorage.setItem('vantTheme', newVal);
|
window.localStorage.setItem('vantTheme', newVal);
|
||||||
document.documentElement.classList.remove(`van-doc-theme-${oldVal}`);
|
document.body.classList.remove(`van-doc-theme-${oldVal}`);
|
||||||
document.documentElement.classList.add(`van-doc-theme-${newVal}`);
|
document.body.classList.add(`van-doc-theme-${newVal}`);
|
||||||
syncThemeToChild(newVal);
|
syncThemeToChild(newVal);
|
||||||
},
|
},
|
||||||
immediate: true,
|
immediate: true,
|
||||||
@ -172,8 +187,6 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--van-doc-header-background);
|
background-color: var(--van-doc-header-background);
|
||||||
user-select: none;
|
user-select: none;
|
||||||
position: relative;
|
|
||||||
z-index: 2;
|
|
||||||
|
|
||||||
&__top {
|
&__top {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div :class="['van-doc-nav', { 'van-doc-nav-fixed': isFixed }]">
|
<div class="van-doc-nav" :style="style">
|
||||||
<div
|
<div
|
||||||
v-for="(group, index) in navConfig"
|
v-for="(group, index) in navConfig"
|
||||||
class="van-doc-nav__group"
|
class="van-doc-nav__group"
|
||||||
@ -38,11 +38,19 @@ export default {
|
|||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isFixed: false,
|
top: 64,
|
||||||
|
bottom: 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
style() {
|
||||||
|
return {
|
||||||
|
top: this.top + 'px',
|
||||||
|
bottom: this.bottom + 'px',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
base() {
|
base() {
|
||||||
return this.lang ? `/${this.lang}/` : '/';
|
return this.lang ? `/${this.lang}/` : '/';
|
||||||
},
|
},
|
||||||
@ -56,7 +64,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
onScroll() {
|
onScroll() {
|
||||||
const { pageYOffset: offset } = window;
|
const { pageYOffset: offset } = window;
|
||||||
this.isFixed = offset > 64;
|
this.top = Math.max(0, 64 - offset);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -64,10 +72,8 @@ export default {
|
|||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
.van-doc-nav {
|
.van-doc-nav {
|
||||||
position: absolute;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: var(--van-doc-header-top-height);
|
|
||||||
bottom: 0;
|
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
min-width: var(--van-doc-nav-width);
|
min-width: var(--van-doc-nav-width);
|
||||||
max-width: var(--van-doc-nav-width);
|
max-width: var(--van-doc-nav-width);
|
||||||
@ -80,10 +86,6 @@ export default {
|
|||||||
margin-left: calc((var(--van-doc-row-max-width) / 2 * -1));
|
margin-left: calc((var(--van-doc-row-max-width) / 2 * -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
&.van-doc-nav-fixed {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
&::-webkit-scrollbar {
|
&::-webkit-scrollbar {
|
||||||
width: 6px;
|
width: 6px;
|
||||||
height: 6px;
|
height: 6px;
|
||||||
@ -108,14 +110,14 @@ export default {
|
|||||||
padding: 24px 0 0 var(--van-doc-padding);
|
padding: 24px 0 0 var(--van-doc-padding);
|
||||||
color: var(--van-doc-text-color-2);
|
color: var(--van-doc-text-color-2);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 16px;
|
font-size: 15px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__item {
|
&__item {
|
||||||
a {
|
a {
|
||||||
display: block;
|
display: block;
|
||||||
margin: 4px 0;
|
margin: 8px 0;
|
||||||
padding: 6px 0 6px var(--van-doc-padding);
|
padding: 6px 0 6px var(--van-doc-padding);
|
||||||
color: var(--van-doc-text-color-3);
|
color: var(--van-doc-text-color-3);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
63
packages/vant-cli/site/desktop/components/SearchInput.vue
Normal file
63
packages/vant-cli/site/desktop/components/SearchInput.vue
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<template>
|
||||||
|
<div id="docsearch" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'VanDocSearch',
|
||||||
|
|
||||||
|
props: {
|
||||||
|
lang: String,
|
||||||
|
searchConfig: Object,
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
lang() {
|
||||||
|
this.initDocsearch();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.initDocsearch();
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
initDocsearch() {
|
||||||
|
if (this.searchConfig) {
|
||||||
|
import('@docsearch/css');
|
||||||
|
import('@docsearch/js').then((docsearch) => {
|
||||||
|
docsearch.default({
|
||||||
|
...this.searchConfig,
|
||||||
|
container: '#docsearch',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
#docsearch {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocSearch-Button {
|
||||||
|
height: 32px;
|
||||||
|
background: #f7f8fa;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocSearch-Search-Icon {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.DocSearch-Button-Key {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -11,12 +11,12 @@
|
|||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
||||||
/>
|
/>
|
||||||
<%= meta %>
|
<%- meta %>
|
||||||
<meta http-equiv="Cache-Control" content="no-cache" />
|
<meta http-equiv="Cache-Control" content="no-cache" />
|
||||||
<meta http-equiv="Pragma" content="no-cache" />
|
<meta http-equiv="Pragma" content="no-cache" />
|
||||||
<meta http-equiv="Expires" content="0" />
|
<meta http-equiv="Expires" content="0" />
|
||||||
<% if (headHtml) { %>
|
<% if (headHtml) { %>
|
||||||
<%= headHtml %>
|
<%- headHtml %>
|
||||||
<% } %>
|
<% } %>
|
||||||
<% if (baiduAnalytics) { %>
|
<% if (baiduAnalytics) { %>
|
||||||
<script>
|
<script>
|
||||||
|
@ -11,12 +11,12 @@
|
|||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
||||||
/>
|
/>
|
||||||
<%= meta %>
|
<%- meta %>
|
||||||
<meta http-equiv="Cache-Control" content="no-cache" />
|
<meta http-equiv="Cache-Control" content="no-cache" />
|
||||||
<meta http-equiv="Pragma" content="no-cache" />
|
<meta http-equiv="Pragma" content="no-cache" />
|
||||||
<meta http-equiv="Expires" content="0" />
|
<meta http-equiv="Expires" content="0" />
|
||||||
<% if (headHtml) { %>
|
<% if (headHtml) { %>
|
||||||
<%= headHtml %>
|
<%- headHtml %>
|
||||||
<% } %>
|
<% } %>
|
||||||
<% if (enableVConsole) { %>
|
<% if (enableVConsole) { %>
|
||||||
<script src="https://unpkg.com/vconsole/dist/vconsole.min.js"></script>
|
<script src="https://unpkg.com/vconsole/dist/vconsole.min.js"></script>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<demo-nav />
|
<demo-nav />
|
||||||
<router-view v-slot="{ Component }">
|
<router-view v-slot="{ Component }">
|
||||||
<demo-section>
|
<keep-alive>
|
||||||
<keep-alive>
|
<demo-section>
|
||||||
<component :is="Component" />
|
<component :is="Component" />
|
||||||
</keep-alive>
|
</demo-section>
|
||||||
</demo-section>
|
</keep-alive>
|
||||||
</router-view>
|
</router-view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -24,21 +24,12 @@ export default {
|
|||||||
watch(
|
watch(
|
||||||
theme,
|
theme,
|
||||||
(newVal, oldVal) => {
|
(newVal, oldVal) => {
|
||||||
document.documentElement.classList.remove(`van-doc-theme-${oldVal}`);
|
document.body.classList.remove(`van-doc-theme-${oldVal}`);
|
||||||
document.documentElement.classList.add(`van-doc-theme-${newVal}`);
|
document.body.classList.add(`van-doc-theme-${newVal}`);
|
||||||
|
|
||||||
const { darkModeClass, lightModeClass } = config.site;
|
const { darkModeClass } = config.site;
|
||||||
if (darkModeClass) {
|
if (darkModeClass) {
|
||||||
document.documentElement.classList.toggle(
|
document.body.classList.toggle(darkModeClass, newVal === 'dark');
|
||||||
darkModeClass,
|
|
||||||
newVal === 'dark'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (lightModeClass) {
|
|
||||||
document.documentElement.classList.toggle(
|
|
||||||
lightModeClass,
|
|
||||||
newVal === 'light'
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
@ -52,7 +43,6 @@ export default {
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
min-width: 100vw;
|
min-width: 100vw;
|
||||||
background-color: inherit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.van-doc-theme-light {
|
.van-doc-theme-light {
|
||||||
|
@ -93,7 +93,6 @@ export default {
|
|||||||
margin: 0 0 40px;
|
margin: 0 0 40px;
|
||||||
color: var(--van-doc-text-color-4);
|
color: var(--van-doc-text-color-4);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.6;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -45,10 +45,6 @@ program
|
|||||||
'--runInBand',
|
'--runInBand',
|
||||||
'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests'
|
'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests'
|
||||||
)
|
)
|
||||||
.option(
|
|
||||||
'--updateSnapshot',
|
|
||||||
'Re-record every snapshot that fails during this test run'
|
|
||||||
)
|
|
||||||
.option('--debug', 'Print debugging info about your Jest config')
|
.option('--debug', 'Print debugging info about your Jest config')
|
||||||
.action(async (options) => {
|
.action(async (options) => {
|
||||||
const { test } = await import('./commands/jest.js');
|
const { test } = await import('./commands/jest.js');
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import { execa } from 'execa';
|
import execa from 'execa';
|
||||||
import { join, relative } from 'node:path';
|
import { join, relative } from 'path';
|
||||||
import { clean } from './clean.js';
|
import { clean } from './clean.js';
|
||||||
import { CSS_LANG } from '../common/css.js';
|
import { CSS_LANG } from '../common/css.js';
|
||||||
import { createSpinner, consola } from '../common/logger.js';
|
import { createSpinner, consola } from '../common/logger.js';
|
||||||
@ -104,10 +104,7 @@ async function buildTypeDeclarations() {
|
|||||||
const tsConfig = join(process.cwd(), 'tsconfig.declaration.json');
|
const tsConfig = join(process.cwd(), 'tsconfig.declaration.json');
|
||||||
|
|
||||||
if (existsSync(tsConfig)) {
|
if (existsSync(tsConfig)) {
|
||||||
await execa('tsc', ['-p', tsConfig], {
|
await execa('tsc', ['-p', tsConfig]);
|
||||||
stdout: 'inherit',
|
|
||||||
stderr: 'inherit',
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { join, dirname } from 'node:path';
|
import { join, dirname } from 'path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'url';
|
||||||
import { ROOT } from '../common/constant.js';
|
import { ROOT } from '../common/constant.js';
|
||||||
import { createSpinner, slimPath } from '../common/logger.js';
|
import { createSpinner, slimPath } from '../common/logger.js';
|
||||||
import { createWriteStream, readFileSync } from 'node:fs';
|
import { createWriteStream, readFileSync } from 'fs';
|
||||||
import conventionalChangelog from 'conventional-changelog';
|
import conventionalChangelog from 'conventional-changelog';
|
||||||
|
|
||||||
const DIST_FILE = join(ROOT, './changelog.generated.md');
|
const DIST_FILE = join(ROOT, './changelog.generated.md');
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'fs';
|
||||||
import { consola } from '../common/logger.js';
|
import { consola } from '../common/logger.js';
|
||||||
|
|
||||||
const commitRE =
|
const commitRE =
|
||||||
|
@ -24,7 +24,6 @@ export function test(command: Config.Argv) {
|
|||||||
clearCache: command.clearCache,
|
clearCache: command.clearCache,
|
||||||
changedSince: command.changedSince,
|
changedSince: command.changedSince,
|
||||||
logHeapUsage: command.logHeapUsage,
|
logHeapUsage: command.logHeapUsage,
|
||||||
updateSnapshot: command.updateSnapshot,
|
|
||||||
// make jest tests faster
|
// make jest tests faster
|
||||||
// see: https://ivantanev.com/make-jest-faster/
|
// see: https://ivantanev.com/make-jest-faster/
|
||||||
maxWorkers: '50%',
|
maxWorkers: '50%',
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { execa } from 'execa';
|
import execa from 'execa';
|
||||||
import { consola, createSpinner } from '../common/logger.js';
|
import { consola, createSpinner } from '../common/logger.js';
|
||||||
import { SCRIPT_EXTS } from '../common/constant.js';
|
import { SCRIPT_EXTS } from '../common/constant.js';
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ function runCommand(
|
|||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
execa(cmd, options, {
|
execa(cmd, options, {
|
||||||
preferLocal: true,
|
preferLocal: true,
|
||||||
env: { FORCE_COLOR: 'true' },
|
env: { FORCE_COLOR: true },
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
spinner.success({ text: messages.succeed });
|
spinner.success({ text: messages.succeed });
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* eslint-disable no-template-curly-in-string */
|
/* eslint-disable no-template-curly-in-string */
|
||||||
import releaseIt from 'release-it';
|
import releaseIt from 'release-it';
|
||||||
import { join, dirname } from 'node:path';
|
import { join, dirname } from 'path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'url';
|
||||||
|
|
||||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
const PLUGIN_PATH = join(__dirname, '../compiler/vant-cli-release-plugin.js');
|
const PLUGIN_PATH = join(__dirname, '../compiler/vant-cli-release-plugin.js');
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { existsSync, readFileSync } from 'node:fs';
|
import { existsSync, readFileSync } from 'fs';
|
||||||
import { fileURLToPath, pathToFileURL } from 'node:url';
|
import { fileURLToPath, pathToFileURL } from 'url';
|
||||||
import { join, dirname, isAbsolute } from 'node:path';
|
import { join, dirname, isAbsolute } from 'path';
|
||||||
|
|
||||||
function findRootDir(dir: string): string {
|
function findRootDir(dir: string): string {
|
||||||
if (existsSync(join(dir, 'vant.config.mjs'))) {
|
if (existsSync(join(dir, 'vant.config.mjs'))) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { existsSync } from 'node:fs';
|
import { existsSync } from 'fs';
|
||||||
import { join, isAbsolute } from 'node:path';
|
import { join, isAbsolute } from 'path';
|
||||||
import { getVantConfig } from '../common/index.js';
|
import { getVantConfig } from '../common/index.js';
|
||||||
import { STYLE_DIR, SRC_DIR } from './constant.js';
|
import { STYLE_DIR, SRC_DIR } from './constant.js';
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import { sep, join } from 'node:path';
|
import { sep, join } from 'path';
|
||||||
import { SRC_DIR, getVantConfig } from './constant.js';
|
import { SRC_DIR, getVantConfig } from './constant.js';
|
||||||
import { InlineConfig, loadConfigFromFile, mergeConfig } from 'vite';
|
import type { InlineConfig } from 'vite';
|
||||||
|
|
||||||
const { lstatSync, existsSync, readdirSync, readFileSync, outputFileSync } =
|
const { lstatSync, existsSync, readdirSync, readFileSync, outputFileSync } =
|
||||||
fse;
|
fse;
|
||||||
@ -114,33 +114,13 @@ export function smartOutputFile(filePath: string, content: string) {
|
|||||||
outputFileSync(filePath, content);
|
outputFileSync(filePath, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function mergeCustomViteConfig(
|
export function mergeCustomViteConfig(config: InlineConfig) {
|
||||||
config: InlineConfig,
|
|
||||||
mode: 'production' | 'development'
|
|
||||||
): Promise<InlineConfig> {
|
|
||||||
const vantConfig = getVantConfig();
|
const vantConfig = getVantConfig();
|
||||||
const configureVite = vantConfig.build?.configureVite;
|
const configureVite = vantConfig.build?.configureVite;
|
||||||
|
|
||||||
const userConfig = await loadConfigFromFile(
|
|
||||||
{
|
|
||||||
mode,
|
|
||||||
command: mode === 'development' ? 'serve' : 'build',
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
process.cwd()
|
|
||||||
);
|
|
||||||
|
|
||||||
if (configureVite) {
|
if (configureVite) {
|
||||||
const ret = configureVite(config);
|
return configureVite(config);
|
||||||
if (ret) {
|
|
||||||
config = ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userConfig) {
|
|
||||||
return mergeConfig(config, userConfig.config);
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { createSpinner } from 'nanospinner';
|
import { createSpinner } from 'nanospinner';
|
||||||
import color from 'picocolors';
|
import color from 'picocolors';
|
||||||
import { consola } from 'consola';
|
import consola from 'consola';
|
||||||
import { ROOT } from '../common/constant.js';
|
import { ROOT } from '../common/constant.js';
|
||||||
|
|
||||||
export function slimPath(path: string) {
|
export function slimPath(path: string) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { execa } from 'execa';
|
import execa from 'execa';
|
||||||
import { consola } from './logger.js';
|
import { consola } from './logger.js';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { getVantConfig } from './constant.js';
|
import { getVantConfig } from './constant.js';
|
||||||
|
@ -34,13 +34,8 @@ export async function compileBundles() {
|
|||||||
getVantConfig().build?.bundleOptions || DEFAULT_OPTIONS;
|
getVantConfig().build?.bundleOptions || DEFAULT_OPTIONS;
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
bundleOptions.map(async (config) =>
|
bundleOptions.map((config) =>
|
||||||
build(
|
build(mergeCustomViteConfig(getViteConfigForPackage(config)))
|
||||||
await mergeCustomViteConfig(
|
|
||||||
getViteConfigForPackage(config),
|
|
||||||
'production'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import less from 'less';
|
import less from 'less';
|
||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync } from 'fs';
|
||||||
import { CWD } from '../common/constant.js';
|
import { CWD } from '../common/constant.js';
|
||||||
|
|
||||||
export async function compileLess(filePath: string) {
|
export async function compileLess(filePath: string) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'module';
|
||||||
|
|
||||||
const require = createRequire(import.meta.url);
|
const require = createRequire(import.meta.url);
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import babel from '@babel/core';
|
import babel from '@babel/core';
|
||||||
import esbuild, { type Format } from 'esbuild';
|
import esbuild, { type Format } from 'esbuild';
|
||||||
import { sep } from 'node:path';
|
import { sep } from 'path';
|
||||||
import { isJsx, replaceExt, getVantConfig } from '../common/index.js';
|
import { isJsx, replaceExt, getVantConfig } from '../common/index.js';
|
||||||
import { replaceCSSImportExt } from '../common/css.js';
|
import { replaceCSSImportExt } from '../common/css.js';
|
||||||
import { replaceScriptImportExt } from './get-deps.js';
|
import { replaceScriptImportExt } from './get-deps.js';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import path from 'node:path';
|
import path from 'path';
|
||||||
import hash from 'hash-sum';
|
import hash from 'hash-sum';
|
||||||
import {
|
import {
|
||||||
parse,
|
parse,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import color from 'picocolors';
|
import color from 'picocolors';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'module';
|
||||||
import { createServer, build } from 'vite';
|
import { createServer, build } from 'vite';
|
||||||
import {
|
import {
|
||||||
getViteConfigForSiteDev,
|
getViteConfigForSiteDev,
|
||||||
@ -29,18 +29,12 @@ export function genSiteEntry(): Promise<void> {
|
|||||||
export async function compileSite(production = false) {
|
export async function compileSite(production = false) {
|
||||||
await genSiteEntry();
|
await genSiteEntry();
|
||||||
if (production) {
|
if (production) {
|
||||||
const config = await mergeCustomViteConfig(
|
const config = mergeCustomViteConfig(getViteConfigForSiteProd());
|
||||||
getViteConfigForSiteProd(),
|
|
||||||
'production'
|
|
||||||
);
|
|
||||||
await build(config);
|
await build(config);
|
||||||
} else {
|
} else {
|
||||||
const config = await mergeCustomViteConfig(
|
const config = mergeCustomViteConfig(getViteConfigForSiteDev());
|
||||||
getViteConfigForSiteDev(),
|
|
||||||
'development'
|
|
||||||
);
|
|
||||||
const server = await createServer(config);
|
const server = await createServer(config);
|
||||||
await server.listen(config.server?.port);
|
await server.listen();
|
||||||
|
|
||||||
const require = createRequire(import.meta.url);
|
const require = createRequire(import.meta.url);
|
||||||
const { version } = require('vite/package.json');
|
const { version } = require('vite/package.json');
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { parse } from 'node:path';
|
import { parse } from 'path';
|
||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import { getVantConfig, replaceExt } from '../common/index.js';
|
import { getVantConfig, replaceExt } from '../common/index.js';
|
||||||
import { compileCss } from './compile-css.js';
|
import { compileCss } from './compile-css.js';
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'module';
|
||||||
import { sep, join, relative } from 'node:path';
|
import { sep, join, relative } from 'path';
|
||||||
import { getComponents, replaceExt } from '../common/index.js';
|
import { getComponents, replaceExt } from '../common/index.js';
|
||||||
import { CSS_LANG, getCssBaseFile } from '../common/css.js';
|
import { CSS_LANG, getCssBaseFile } from '../common/css.js';
|
||||||
import { checkStyleExists } from './gen-style-deps-map.js';
|
import { checkStyleExists } from './gen-style-deps-map.js';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import {
|
import {
|
||||||
pascalize,
|
pascalize,
|
||||||
getComponents,
|
getComponents,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { existsSync } from 'node:fs';
|
import { existsSync } from 'fs';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'module';
|
||||||
import { smartOutputFile, normalizePath } from '../common/index.js';
|
import { smartOutputFile, normalizePath } from '../common/index.js';
|
||||||
import { CSS_LANG, getCssBaseFile } from '../common/css.js';
|
import { CSS_LANG, getCssBaseFile } from '../common/css.js';
|
||||||
import { SRC_DIR, STYLE_DEPS_JSON_FILE } from '../common/constant.js';
|
import { SRC_DIR, STYLE_DEPS_JSON_FILE } from '../common/constant.js';
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
import { join, parse } from 'node:path';
|
import { join, parse } from 'path';
|
||||||
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
import { existsSync, readFileSync, readdirSync } from 'fs';
|
||||||
import { pascalize, getVantConfig, normalizePath } from '../common/index.js';
|
import {
|
||||||
|
isDev,
|
||||||
|
pascalize,
|
||||||
|
getVantConfig,
|
||||||
|
normalizePath,
|
||||||
|
} from '../common/index.js';
|
||||||
import {
|
import {
|
||||||
SRC_DIR,
|
SRC_DIR,
|
||||||
DOCS_DIR,
|
DOCS_DIR,
|
||||||
@ -75,7 +80,10 @@ function genImportDocuments(items: DocumentItem[]) {
|
|||||||
return items
|
return items
|
||||||
.map((item) => {
|
.map((item) => {
|
||||||
const path = normalizePath(item.path);
|
const path = normalizePath(item.path);
|
||||||
return `const ${item.name} = () => import('${path}');`;
|
if (isDev()) {
|
||||||
|
return `const ${item.name} = () => import('${path}');`;
|
||||||
|
}
|
||||||
|
return `import ${item.name} from '${path}';`;
|
||||||
})
|
})
|
||||||
.join('\n');
|
.join('\n');
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { existsSync, readdirSync } from 'node:fs';
|
import { existsSync, readdirSync } from 'fs';
|
||||||
import { SRC_DIR } from '../common/constant.js';
|
import { SRC_DIR } from '../common/constant.js';
|
||||||
import {
|
import {
|
||||||
pascalize,
|
pascalize,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { relative, sep, join } from 'node:path';
|
import { relative, sep, join } from 'path';
|
||||||
import { CSS_LANG } from '../common/css.js';
|
import { CSS_LANG } from '../common/css.js';
|
||||||
import { existsSync } from 'node:fs';
|
import { existsSync } from 'fs';
|
||||||
import { getDeps, clearDepsCache, fillExt } from './get-deps.js';
|
import { getDeps, clearDepsCache, fillExt } from './get-deps.js';
|
||||||
import { getComponents, smartOutputFile } from '../common/index.js';
|
import { getComponents, smartOutputFile } from '../common/index.js';
|
||||||
import { SRC_DIR, STYLE_DEPS_JSON_FILE } from '../common/constant.js';
|
import { SRC_DIR, STYLE_DEPS_JSON_FILE } from '../common/constant.js';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { SCRIPT_EXTS, STYLE_EXTS } from '../common/constant.js';
|
import { SCRIPT_EXTS, STYLE_EXTS } from '../common/constant.js';
|
||||||
import { readFileSync, existsSync } from 'node:fs';
|
import { readFileSync, existsSync } from 'fs';
|
||||||
|
|
||||||
let depsMap: Record<string, string[]> = {};
|
let depsMap: Record<string, string[]> = {};
|
||||||
let existsCache: Record<string, boolean> = {};
|
let existsCache: Record<string, boolean> = {};
|
||||||
@ -127,12 +127,6 @@ export function replaceScriptImportExt(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isExistExt = line.includes(ext);
|
|
||||||
if (isExistExt) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const pathInfo = getPathByImport(line, filePath);
|
const pathInfo = getPathByImport(line, filePath);
|
||||||
|
|
||||||
if (pathInfo) {
|
if (pathInfo) {
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
/* eslint-disable no-continue */
|
/* eslint-disable no-continue */
|
||||||
import { Articles } from './parser.js';
|
import { Articles } from './parser.js';
|
||||||
import { formatType, removeVersion, toKebabCase } from './utils.js';
|
import {
|
||||||
|
formatOptions,
|
||||||
|
formatType,
|
||||||
|
removeVersion,
|
||||||
|
toKebabCase,
|
||||||
|
} from './utils.js';
|
||||||
import { VueEventArgument, VueTag } from './type.js';
|
import { VueEventArgument, VueTag } from './type.js';
|
||||||
|
|
||||||
function formatComponentName(name: string, tagPrefix: string) {
|
function formatComponentName(name: string, tagPrefix: string) {
|
||||||
@ -29,15 +34,9 @@ function formatArguments(input: string): VueEventArgument[] {
|
|||||||
} else if ([':', ',', '_', ' '].includes(input[0])) {
|
} else if ([':', ',', '_', ' '].includes(input[0])) {
|
||||||
input = input.substring(1);
|
input = input.substring(1);
|
||||||
} else {
|
} else {
|
||||||
const matched = input.match(/( |'|\||\w)+/);
|
const val = input.match(/( |'|\||\w)+/)![0] || '';
|
||||||
|
input = input.substring(val.length);
|
||||||
if (matched?.length && matched[0]) {
|
items.push(val);
|
||||||
const val = matched[0];
|
|
||||||
input = input.substring(val.length);
|
|
||||||
items.push(val);
|
|
||||||
} else {
|
|
||||||
input = '';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,6 +66,9 @@ function findTag(vueTags: VueTag[], name: string) {
|
|||||||
|
|
||||||
const newTag: VueTag = {
|
const newTag: VueTag = {
|
||||||
name,
|
name,
|
||||||
|
slots: [],
|
||||||
|
events: [],
|
||||||
|
attributes: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
vueTags.push(newTag);
|
vueTags.push(newTag);
|
||||||
@ -105,16 +107,12 @@ export function formatter(
|
|||||||
const tag = findTag(vueTags, name);
|
const tag = findTag(vueTags, name);
|
||||||
|
|
||||||
table.body.forEach((line) => {
|
table.body.forEach((line) => {
|
||||||
const [name, desc, type, defaultVal] = line;
|
const [name, desc, type, defaultVal, options] = line;
|
||||||
|
tag.attributes!.push({
|
||||||
if (!tag.attributes) {
|
|
||||||
tag.attributes = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.attributes.push({
|
|
||||||
name: removeVersion(name),
|
name: removeVersion(name),
|
||||||
default: defaultVal,
|
default: defaultVal,
|
||||||
description: desc,
|
description: desc,
|
||||||
|
options: formatOptions(options),
|
||||||
value: {
|
value: {
|
||||||
type: formatType(type),
|
type: formatType(type),
|
||||||
kind: 'expression',
|
kind: 'expression',
|
||||||
@ -130,12 +128,7 @@ export function formatter(
|
|||||||
|
|
||||||
table.body.forEach((line) => {
|
table.body.forEach((line) => {
|
||||||
const [name, desc, args] = line;
|
const [name, desc, args] = line;
|
||||||
|
tag.events!.push({
|
||||||
if (!tag.events) {
|
|
||||||
tag.events = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.events.push({
|
|
||||||
name: removeVersion(name),
|
name: removeVersion(name),
|
||||||
description: desc,
|
description: desc,
|
||||||
arguments: formatArguments(args),
|
arguments: formatArguments(args),
|
||||||
@ -150,12 +143,7 @@ export function formatter(
|
|||||||
|
|
||||||
table.body.forEach((line) => {
|
table.body.forEach((line) => {
|
||||||
const [name, desc] = line;
|
const [name, desc] = line;
|
||||||
|
tag.slots!.push({
|
||||||
if (!tag.slots) {
|
|
||||||
tag.slots = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.slots.push({
|
|
||||||
name: removeVersion(name),
|
name: removeVersion(name),
|
||||||
description: desc,
|
description: desc,
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import fse from 'fs-extra';
|
import fse from 'fs-extra';
|
||||||
import { mdParser } from './parser.js';
|
import { mdParser } from './parser.js';
|
||||||
import { formatter } from './formatter.js';
|
import { formatter } from './formatter.js';
|
||||||
@ -36,7 +36,7 @@ export async function parseAndWrite(options: Options) {
|
|||||||
const webTypes = genWebTypes(vueTags, options);
|
const webTypes = genWebTypes(vueTags, options);
|
||||||
fse.outputFileSync(
|
fse.outputFileSync(
|
||||||
join(options.outputDir, 'web-types.json'),
|
join(options.outputDir, 'web-types.json'),
|
||||||
JSON.stringify(webTypes)
|
JSON.stringify(webTypes, null, 2)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { PathLike } from 'node:fs';
|
import { PathLike } from 'fs';
|
||||||
|
|
||||||
export type VueSlot = {
|
export type VueSlot = {
|
||||||
name: string;
|
name: string;
|
||||||
@ -20,6 +20,7 @@ export type VueAttribute = {
|
|||||||
name: string;
|
name: string;
|
||||||
default: string;
|
default: string;
|
||||||
description: string;
|
description: string;
|
||||||
|
options: string[];
|
||||||
value: {
|
value: {
|
||||||
kind: 'expression';
|
kind: 'expression';
|
||||||
type: string;
|
type: string;
|
||||||
|
@ -20,3 +20,9 @@ export function formatType(type: string) {
|
|||||||
export function normalizePath(path: string): string {
|
export function normalizePath(path: string): string {
|
||||||
return path.replace(/\\/g, '/');
|
return path.replace(/\\/g, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// `default` `primary` -> ['default', 'primary']
|
||||||
|
export function formatOptions(options?: string) {
|
||||||
|
if (!options) return [];
|
||||||
|
return options.replace(/`/g, '').split(' ');
|
||||||
|
}
|
||||||
|
@ -12,8 +12,8 @@ export function genWebTypes(tags: VueTag[], options: Options) {
|
|||||||
html: {
|
html: {
|
||||||
tags,
|
tags,
|
||||||
attributes: [],
|
attributes: [],
|
||||||
|
'types-syntax': 'typescript',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'js-types-syntax': 'typescript',
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { setBuildTarget } from '../common/index.js';
|
import { setBuildTarget } from '../common/index.js';
|
||||||
import { CWD, ES_DIR, getVantConfig, LIB_DIR } from '../common/constant.js';
|
import { CWD, ES_DIR, getVantConfig, LIB_DIR } from '../common/constant.js';
|
||||||
import type { InlineConfig } from 'vite';
|
import type { InlineConfig } from 'vite';
|
||||||
@ -28,8 +28,6 @@ export function getViteConfigForPackage({
|
|||||||
: undefined,
|
: undefined,
|
||||||
|
|
||||||
build: {
|
build: {
|
||||||
emptyOutDir: false,
|
|
||||||
|
|
||||||
lib: {
|
lib: {
|
||||||
name,
|
name,
|
||||||
entry,
|
entry,
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { join } from 'node:path';
|
import { join } from 'path';
|
||||||
import { createRequire } from 'node:module';
|
import { createRequire } from 'module';
|
||||||
import hljs from 'highlight.js';
|
import hljs from 'highlight.js';
|
||||||
import vitePluginMd from 'vite-plugin-md';
|
import vitePluginMd from 'vite-plugin-md';
|
||||||
import vitePluginVue from '@vitejs/plugin-vue';
|
import vitePluginVue from '@vitejs/plugin-vue';
|
||||||
import vitePluginJsx from '@vitejs/plugin-vue-jsx';
|
import vitePluginJsx from '@vitejs/plugin-vue-jsx';
|
||||||
import { setBuildTarget, getVantConfig, isDev } from '../common/index.js';
|
import { setBuildTarget, getVantConfig, isDev } from '../common/index.js';
|
||||||
import { SITE_DIST_DIR, SITE_SRC_DIR } from '../common/constant.js';
|
import { SITE_DIST_DIR, SITE_SRC_DIR } from '../common/constant.js';
|
||||||
import lodash from 'lodash';
|
import { injectHtml } from 'vite-plugin-html';
|
||||||
import type { InlineConfig, PluginOption } from 'vite';
|
import type { InlineConfig, PluginOption } from 'vite';
|
||||||
import type MarkdownIt from 'markdown-it';
|
import type MarkdownIt from 'markdown-it';
|
||||||
import { genSiteMobileShared } from '../compiler/gen-site-mobile-shared.js';
|
import { genSiteMobileShared } from '../compiler/gen-site-mobile-shared.js';
|
||||||
@ -131,18 +131,6 @@ function vitePluginGenVantBaseCode(): PluginOption {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function vitePluginHTML(data: object): PluginOption {
|
|
||||||
return {
|
|
||||||
name: 'vite-plugin-html',
|
|
||||||
transformIndexHtml: {
|
|
||||||
enforce: 'pre',
|
|
||||||
transform(html) {
|
|
||||||
return lodash.template(html)(data);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getViteConfigForSiteDev(): InlineConfig {
|
export function getViteConfigForSiteDev(): InlineConfig {
|
||||||
setBuildTarget('site');
|
setBuildTarget('site');
|
||||||
|
|
||||||
@ -156,11 +144,6 @@ export function getViteConfigForSiteDev(): InlineConfig {
|
|||||||
return {
|
return {
|
||||||
root: SITE_SRC_DIR,
|
root: SITE_SRC_DIR,
|
||||||
|
|
||||||
optimizeDeps: {
|
|
||||||
// https://github.com/youzan/vant/issues/10930
|
|
||||||
include: ['vue', 'vue-router'],
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
plugins: [
|
||||||
vitePluginGenVantBaseCode(),
|
vitePluginGenVantBaseCode(),
|
||||||
vitePluginVue({
|
vitePluginVue({
|
||||||
@ -189,16 +172,18 @@ export function getViteConfigForSiteDev(): InlineConfig {
|
|||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
vitePluginJsx(),
|
vitePluginJsx(),
|
||||||
vitePluginHTML({
|
injectHtml({
|
||||||
...siteConfig,
|
data: {
|
||||||
title,
|
...siteConfig,
|
||||||
// `description` is used by the HTML ejs template,
|
title,
|
||||||
// so it needs to be written explicitly here to avoid error: description is not defined
|
// `description` is used by the HTML ejs template,
|
||||||
description: siteConfig.description,
|
// so it needs to be written explicitly here to avoid error: description is not defined
|
||||||
headHtml,
|
description: siteConfig.description,
|
||||||
baiduAnalytics,
|
headHtml,
|
||||||
enableVConsole,
|
baiduAnalytics,
|
||||||
meta: getHTMLMeta(vantConfig),
|
enableVConsole,
|
||||||
|
meta: getHTMLMeta(vantConfig),
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import fs from 'node:fs';
|
import fs from 'fs';
|
||||||
import { URL, fileURLToPath } from 'node:url';
|
import { URL, fileURLToPath } from 'url';
|
||||||
|
|
||||||
const packagePath = fileURLToPath(new URL('../package.json', import.meta.url));
|
const packagePath = fileURLToPath(new URL('../package.json', import.meta.url));
|
||||||
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
||||||
|
1
packages/vant-cli/src/module.d.ts
vendored
1
packages/vant-cli/src/module.d.ts
vendored
@ -1,4 +1,5 @@
|
|||||||
// some modules with missing type definitions
|
// some modules with missing type definitions
|
||||||
|
declare module 'execa';
|
||||||
declare module 'hash-sum';
|
declare module 'hash-sum';
|
||||||
declare module '@babel/core';
|
declare module '@babel/core';
|
||||||
declare module 'release-it';
|
declare module 'release-it';
|
||||||
|
@ -36,18 +36,17 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vue/runtime-core": "^3.2.47",
|
"@vue/runtime-core": "^3.2.27",
|
||||||
"vant": "workspace:*",
|
"vant": "workspace:*",
|
||||||
"vue": "^3.2.47",
|
"vue": "^3.2.27",
|
||||||
"esbuild": "^0.17.12",
|
"esbuild": "^0.14.29",
|
||||||
"release-it": "^15.1.1",
|
"release-it": "^15.1.1",
|
||||||
"rimraf": "^5.0.0",
|
"typescript": "^4.7.4"
|
||||||
"typescript": "^5.0.2"
|
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/compat v${version}"
|
"commitMessage": "release: @vant/compat ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,18 +20,17 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "^5.48.0",
|
"@typescript-eslint/eslint-plugin": "^5.36.1",
|
||||||
"@typescript-eslint/parser": "^5.48.0",
|
"@typescript-eslint/parser": "^5.36.1",
|
||||||
"eslint-config-airbnb-base": "^15.0.0",
|
"eslint-config-airbnb-base": "^15.0.0",
|
||||||
"eslint-config-prettier": "^8.6.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-import": "^2.26.0",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"eslint-plugin-vue": "^9.8.0"
|
"eslint-plugin-vue": "^9.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"enhanced-resolve": "^5.12.0",
|
"enhanced-resolve": "^5.10.0",
|
||||||
"eslint": "^8.31.0",
|
"eslint": "^8.23.0",
|
||||||
"jest": "^29.3.1",
|
"typescript": "^4.8.2"
|
||||||
"typescript": "^5.0.2"
|
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^7.32.0 || ^8.2.0"
|
"eslint": "^7.32.0 || ^8.2.0"
|
||||||
|
@ -24,6 +24,7 @@ test('a vue project should pass lint', async () => {
|
|||||||
expect([
|
expect([
|
||||||
'no-const-assign',
|
'no-const-assign',
|
||||||
'@typescript-eslint/no-unused-vars',
|
'@typescript-eslint/no-unused-vars',
|
||||||
|
'vue/multi-word-component-names',
|
||||||
'no-undef',
|
'no-undef',
|
||||||
]).toEqual(rest);
|
]).toEqual(rest);
|
||||||
});
|
});
|
||||||
@ -33,6 +34,7 @@ test('a vue-tsx project should pass lint', async () => {
|
|||||||
|
|
||||||
expect([
|
expect([
|
||||||
'@typescript-eslint/no-unused-vars',
|
'@typescript-eslint/no-unused-vars',
|
||||||
|
'vue/multi-word-component-names',
|
||||||
'vue/no-ref-as-operand',
|
'vue/no-ref-as-operand',
|
||||||
'@typescript-eslint/no-empty-interface',
|
'@typescript-eslint/no-empty-interface',
|
||||||
]).toEqual(rest);
|
]).toEqual(rest);
|
||||||
|
@ -1,14 +1,5 @@
|
|||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
## 2.0.1
|
|
||||||
|
|
||||||
- add woff format back to be compatible with some special webview
|
|
||||||
|
|
||||||
## 2.0.0
|
|
||||||
|
|
||||||
- no longer support woff/ttf format
|
|
||||||
- fix delete / delete-o icon
|
|
||||||
|
|
||||||
## 1.8.0
|
## 1.8.0
|
||||||
|
|
||||||
- add qq icon
|
- add qq icon
|
||||||
|
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vant/icons",
|
"name": "@vant/icons",
|
||||||
"version": "2.0.1",
|
"version": "1.8.0",
|
||||||
"description": "vant icons",
|
"description": "vant icons",
|
||||||
"main": "./src/config.js",
|
"main": "./src/config.js",
|
||||||
"types": "./src/config.d.ts",
|
"types": "./src/config.d.ts",
|
||||||
@ -28,7 +28,7 @@
|
|||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/icons v${version}",
|
"commitMessage": "release: @vant/icons ${version}",
|
||||||
"addUntrackedFiles": true,
|
"addUntrackedFiles": true,
|
||||||
"requireCleanWorkingDir": false
|
"requireCleanWorkingDir": false
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
1
packages/vant-icons/src/encode.less
Normal file
1
packages/vant-icons/src/encode.less
Normal file
@ -0,0 +1 @@
|
|||||||
|
// deprecated
|
@ -5,8 +5,10 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: auto;
|
font-display: auto;
|
||||||
font-family: 'vant-icon';
|
font-family: 'vant-icon';
|
||||||
src: url('//at.alicdn.com/t/c/font_2553510_ovbl29ce9ud.woff2?t=1672541115585')
|
src: url('https://at.alicdn.com/t/font_2553510_iv4v8nulyz.woff2?t=1649083952952')
|
||||||
format('woff2'),
|
format('woff2'),
|
||||||
url('//at.alicdn.com/t/c/font_2553510_ovbl29ce9ud.woff?t=1672541115585')
|
url('https://at.alicdn.com/t/font_2553510_iv4v8nulyz.woff?t=1649083952952')
|
||||||
format('woff');
|
format('woff'),
|
||||||
|
url('https://at.alicdn.com/t/font_2553510_iv4v8nulyz.ttf?t=1649083952952')
|
||||||
|
format('truetype');
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vant/popperjs",
|
"name": "@vant/popperjs",
|
||||||
"version": "1.3.0",
|
"version": "1.2.1",
|
||||||
"description": "Pre-compiled popperjs core",
|
"description": "Pre-compiled popperjs core",
|
||||||
"main": "dist/index.cjs.js",
|
"main": "dist/index.cjs.js",
|
||||||
"module": "dist/index.esm.mjs",
|
"module": "dist/index.esm.mjs",
|
||||||
@ -36,17 +36,18 @@
|
|||||||
"bugs": "https://github.com/vant-ui/vant/issues",
|
"bugs": "https://github.com/vant-ui/vant/issues",
|
||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@popperjs/core": "^2.11.6"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@popperjs/core": "^2.11.6",
|
"esbuild": "^0.14.54",
|
||||||
"esbuild": "^0.17.12",
|
|
||||||
"release-it": "^15.4.1",
|
"release-it": "^15.4.1",
|
||||||
"rimraf": "^5.0.0",
|
"typescript": "^4.8.2"
|
||||||
"typescript": "^5.0.2"
|
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/popperjs v${version}"
|
"commitMessage": "release: @vant/popperjs ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { createPopper } from '@popperjs/core/lib/popper-lite';
|
import { createPopper } from '@popperjs/core/lib/popper-lite';
|
||||||
import offsetModifier from '@popperjs/core/lib/modifiers/offset';
|
import offsetModifier from '@popperjs/core/lib/modifiers/offset';
|
||||||
import type { Instance } from '@popperjs/core';
|
import type { Instance, Placement } from '@popperjs/core';
|
||||||
|
|
||||||
export { createPopper, offsetModifier };
|
export { createPopper, offsetModifier };
|
||||||
export type { Instance };
|
export type { Instance, Placement };
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
const { build, context } = require('esbuild');
|
const { build } = require('esbuild');
|
||||||
|
|
||||||
async function bundle(format) {
|
function bundleBundle(format) {
|
||||||
const ext = format === 'esm' ? '.mjs' : '.js';
|
const ext = format === 'esm' ? '.mjs' : '.js';
|
||||||
const outfile = `dist/index.${format}${ext}`;
|
const outfile = `dist/index.${format}${ext}`;
|
||||||
const finish = () => console.log('Build finished:', outfile);
|
const finish = () => console.log('Build finished:', outfile);
|
||||||
|
const onRebuild = (error) => (error ? console.log(error) : finish());
|
||||||
|
|
||||||
const options = {
|
build({
|
||||||
|
watch: process.argv.includes('-w') && { onRebuild },
|
||||||
format,
|
format,
|
||||||
bundle: true,
|
bundle: true,
|
||||||
target: ['chrome53'],
|
target: ['chrome53'],
|
||||||
@ -14,27 +16,8 @@ async function bundle(format) {
|
|||||||
charset: 'utf8',
|
charset: 'utf8',
|
||||||
external: ['vue', 'vant'],
|
external: ['vue', 'vant'],
|
||||||
entryPoints: ['./src/index.ts'],
|
entryPoints: ['./src/index.ts'],
|
||||||
};
|
}).then(finish);
|
||||||
|
|
||||||
if (process.argv.includes('-w')) {
|
|
||||||
const loggerPlugin = {
|
|
||||||
name: 'loggerPlugin',
|
|
||||||
setup(build) {
|
|
||||||
build.onEnd(finish);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const ctx = await context({
|
|
||||||
...options,
|
|
||||||
plugins: [loggerPlugin],
|
|
||||||
});
|
|
||||||
|
|
||||||
await ctx.watch();
|
|
||||||
} else {
|
|
||||||
await build(options);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bundle('esm');
|
bundleBundle('esm');
|
||||||
bundle('cjs');
|
bundleBundle('cjs');
|
||||||
|
@ -1,25 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v1.5.1
|
|
||||||
|
|
||||||
- add `vue` as peer dependencies
|
|
||||||
|
|
||||||
## v1.5.0
|
|
||||||
|
|
||||||
- `useEventListener` now returns a cleanup function
|
|
||||||
|
|
||||||
## v1.4.4
|
|
||||||
|
|
||||||
- Fix `useChildren` not sort children correctly
|
|
||||||
|
|
||||||
## v1.4.3
|
|
||||||
|
|
||||||
- improve `useEventListener` typing
|
|
||||||
|
|
||||||
## v1.4.2
|
|
||||||
|
|
||||||
- `useClickAway` support multiple targets
|
|
||||||
|
|
||||||
## v1.4.1
|
## v1.4.1
|
||||||
|
|
||||||
- Add `exports` field to package.json, support nuxt 3.
|
- Add `exports` field to package.json, support nuxt 3.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@vant/use",
|
"name": "@vant/use",
|
||||||
"version": "1.5.1",
|
"version": "1.4.2",
|
||||||
"description": "Vant Composition API",
|
"description": "Vant Composition API",
|
||||||
"main": "dist/index.cjs.js",
|
"main": "dist/index.cjs.js",
|
||||||
"module": "dist/index.esm.mjs",
|
"module": "dist/index.esm.mjs",
|
||||||
@ -37,19 +37,15 @@
|
|||||||
"author": "chenjiahan",
|
"author": "chenjiahan",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"esbuild": "^0.17.12",
|
"esbuild": "^0.14.54",
|
||||||
"release-it": "^15.4.1",
|
"release-it": "^15.4.1",
|
||||||
"rimraf": "^5.0.0",
|
"typescript": "^4.8.2",
|
||||||
"typescript": "^5.0.2",
|
"vue": "^3.2.38"
|
||||||
"vue": "^3.2.47"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"vue": "^3.0.0"
|
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
"git": {
|
"git": {
|
||||||
"tag": false,
|
"tag": false,
|
||||||
"commitMessage": "release: @vant/use v${version}"
|
"commitMessage": "release: @vant/use ${version}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
import {
|
import { Ref, watch, isRef, unref, onUnmounted, onDeactivated } from 'vue';
|
||||||
Ref,
|
|
||||||
watch,
|
|
||||||
isRef,
|
|
||||||
unref,
|
|
||||||
onUnmounted,
|
|
||||||
onDeactivated,
|
|
||||||
type WatchStopHandle,
|
|
||||||
} from 'vue';
|
|
||||||
import { onMountedOrActivated } from '../onMountedOrActivated';
|
import { onMountedOrActivated } from '../onMountedOrActivated';
|
||||||
import { inBrowser } from '../utils';
|
import { inBrowser } from '../utils';
|
||||||
|
|
||||||
@ -22,12 +14,12 @@ export function useEventListener<K extends keyof DocumentEventMap>(
|
|||||||
type: K,
|
type: K,
|
||||||
listener: (event: DocumentEventMap[K]) => void,
|
listener: (event: DocumentEventMap[K]) => void,
|
||||||
options?: UseEventListenerOptions
|
options?: UseEventListenerOptions
|
||||||
): () => void;
|
): void;
|
||||||
export function useEventListener(
|
export function useEventListener(
|
||||||
type: string,
|
type: string,
|
||||||
listener: EventListener,
|
listener: EventListener,
|
||||||
options?: UseEventListenerOptions
|
options?: UseEventListenerOptions
|
||||||
): () => void;
|
): void;
|
||||||
export function useEventListener(
|
export function useEventListener(
|
||||||
type: string,
|
type: string,
|
||||||
listener: EventListener,
|
listener: EventListener,
|
||||||
@ -39,13 +31,9 @@ export function useEventListener(
|
|||||||
|
|
||||||
const { target = window, passive = false, capture = false } = options;
|
const { target = window, passive = false, capture = false } = options;
|
||||||
|
|
||||||
let cleaned = false;
|
|
||||||
let attached: boolean;
|
let attached: boolean;
|
||||||
|
|
||||||
const add = (target?: TargetRef) => {
|
const add = (target?: TargetRef) => {
|
||||||
if (cleaned) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const element = unref(target);
|
const element = unref(target);
|
||||||
|
|
||||||
if (element && !attached) {
|
if (element && !attached) {
|
||||||
@ -58,9 +46,6 @@ export function useEventListener(
|
|||||||
};
|
};
|
||||||
|
|
||||||
const remove = (target?: TargetRef) => {
|
const remove = (target?: TargetRef) => {
|
||||||
if (cleaned) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const element = unref(target);
|
const element = unref(target);
|
||||||
|
|
||||||
if (element && attached) {
|
if (element && attached) {
|
||||||
@ -73,21 +58,10 @@ export function useEventListener(
|
|||||||
onDeactivated(() => remove(target));
|
onDeactivated(() => remove(target));
|
||||||
onMountedOrActivated(() => add(target));
|
onMountedOrActivated(() => add(target));
|
||||||
|
|
||||||
let stopWatch: WatchStopHandle;
|
|
||||||
|
|
||||||
if (isRef(target)) {
|
if (isRef(target)) {
|
||||||
stopWatch = watch(target, (val, oldVal) => {
|
watch(target, (val, oldVal) => {
|
||||||
remove(oldVal);
|
remove(oldVal);
|
||||||
add(val);
|
add(val);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean up the event listener
|
|
||||||
*/
|
|
||||||
return () => {
|
|
||||||
stopWatch?.();
|
|
||||||
remove(target);
|
|
||||||
cleaned = true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
@ -37,20 +37,6 @@ export function flattenVNodes(children: VNodeNormalizedChildren) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const findVNodeIndex = (vnodes: VNode[], vnode: VNode) => {
|
|
||||||
const index = vnodes.indexOf(vnode);
|
|
||||||
if (index === -1) {
|
|
||||||
return vnodes.findIndex(
|
|
||||||
(item) =>
|
|
||||||
vnode.key !== undefined &&
|
|
||||||
vnode.key !== null &&
|
|
||||||
item.type === vnode.type &&
|
|
||||||
item.key === vnode.key
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return index;
|
|
||||||
};
|
|
||||||
|
|
||||||
// sort children instances by vnodes order
|
// sort children instances by vnodes order
|
||||||
export function sortChildren(
|
export function sortChildren(
|
||||||
parent: ComponentInternalInstance,
|
parent: ComponentInternalInstance,
|
||||||
@ -60,7 +46,7 @@ export function sortChildren(
|
|||||||
const vnodes = flattenVNodes(parent.subTree.children);
|
const vnodes = flattenVNodes(parent.subTree.children);
|
||||||
|
|
||||||
internalChildren.sort(
|
internalChildren.sort(
|
||||||
(a, b) => findVNodeIndex(vnodes, a.vnode) - findVNodeIndex(vnodes, b.vnode)
|
(a, b) => vnodes.indexOf(a.vnode) - vnodes.indexOf(b.vnode)
|
||||||
);
|
);
|
||||||
|
|
||||||
const orderedPublicChildren = internalChildren.map((item) => item.proxy!);
|
const orderedPublicChildren = internalChildren.map((item) => item.proxy!);
|
||||||
|
4
packages/vant/.stylelintignore
Normal file
4
packages/vant/.stylelintignore
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
lib
|
||||||
|
*.tsx
|
@ -132,7 +132,7 @@ module.exports = {
|
|||||||
|
|
||||||
### Adapt to PC Browsers
|
### Adapt to PC Browsers
|
||||||
|
|
||||||
Vant is a mobile-first component library, if you want to use Vant in PC browsers, you can use the [@vant/touch-emulator](https://github.com/vant-ui/vant/tree/main/packages/vant-touch-emulator) module. This module will automatically convert the mouse events of the PC browser into the touch events of the mobile browser.
|
Vant is a mobile-first component library, if you want to use Vant in PC browsers, you can use the [@vant/touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator) module. This module will automatically convert the mouse events of the PC browser into the touch events of the mobile browser.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install
|
# Install
|
||||||
|
@ -197,7 +197,7 @@ module.exports = {
|
|||||||
|
|
||||||
Vant 是一个面向移动端的组件库,因此默认只适配了移动端设备,这意味着组件只监听了移动端的 `touch` 事件,没有监听桌面端的 `mouse` 事件。
|
Vant 是一个面向移动端的组件库,因此默认只适配了移动端设备,这意味着组件只监听了移动端的 `touch` 事件,没有监听桌面端的 `mouse` 事件。
|
||||||
|
|
||||||
如果你需要在桌面端使用 Vant,可以引入我们提供的 [@vant/touch-emulator](https://github.com/vant-ui/vant/tree/main/packages/vant-touch-emulator),这个库会在桌面端自动将 `mouse` 事件转换成对应的 `touch` 事件,使得组件能够在桌面端使用。
|
如果你需要在桌面端使用 Vant,可以引入我们提供的 [@vant/touch-emulator](https://github.com/vant-ui/vant/tree/dev/packages/vant-touch-emulator),这个库会在桌面端自动将 `mouse` 事件转换成对应的 `touch` 事件,使得组件能够在桌面端使用。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 安装模块
|
# 安装模块
|
||||||
|
@ -19,345 +19,6 @@ Vant follows [Semantic Versioning 2.0.0](https://semver.org/lang/zh-CN/).
|
|||||||
|
|
||||||
## Details
|
## Details
|
||||||
|
|
||||||
### [v4.1.2](https://github.com/vant-ui/vant/compare/v4.1.1...v4.1.2)
|
|
||||||
|
|
||||||
`2023-03-26`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Locale: add Khmer translations [#11701](https://github.com/vant-ui/vant/issues/11701)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: label-align top works well with label-width [#11684](https://github.com/vant-ui/vant/issues/11684)
|
|
||||||
- Field: should emit blur event when readonly [#11699](https://github.com/vant-ui/vant/issues/11699)
|
|
||||||
- ImagePreview: long vertical images sliding up and down [#11702](https://github.com/vant-ui/vant/issues/11702)
|
|
||||||
|
|
||||||
### [v4.1.1](https://github.com/vant-ui/vant/compare/v4.1.0...v4.1.1)
|
|
||||||
|
|
||||||
`2023-03-19`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Uploader: support avif image format [#11655](https://github.com/vant-ui/vant/issues/11655)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- @vant/use: add vue as peer dependencies [#11662](https://github.com/vant-ui/vant/issues/11662)
|
|
||||||
- DatePicker: fix display back wrong of date-picker [#11656](https://github.com/vant-ui/vant/issues/11656)
|
|
||||||
- Field: fix `FieldRuleFormatter` typo [#11674](https://github.com/vant-ui/vant/issues/11674)
|
|
||||||
- TextEllipsis: fix that numbers and letters cannot display ellipses [#11669](https://github.com/vant-ui/vant/issues/11669)
|
|
||||||
|
|
||||||
### [v4.1.0](https://github.com/vant-ui/vant/compare/v4.0.11...v4.1.0)
|
|
||||||
|
|
||||||
`2023-03-05`
|
|
||||||
|
|
||||||
**New Component**
|
|
||||||
|
|
||||||
- add new TextEllipsis component [#11593](https://github.com/vant-ui/vant/issues/11593)
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Swipe: add index param to drag-start/drag-end event [#11632](https://github.com/vant-ui/vant/issues/11632)
|
|
||||||
- TreeSelect: add nav-text slot [#11602](https://github.com/vant-ui/vant/issues/11602) [#11641](https://github.com/vant-ui/vant/issues/11641)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DropdownMenu: fix dropdown-item position when expanded by default [#11640](https://github.com/vant-ui/vant/issues/11640)
|
|
||||||
- Field: fix label-align top not work when set label-width [#11611](https://github.com/vant-ui/vant/issues/11611)
|
|
||||||
- Locale: improve Ukrainian translation [#11629](https://github.com/vant-ui/vant/issues/11629)
|
|
||||||
|
|
||||||
### [v4.0.11](https://github.com/vant-ui/vant/compare/v4.0.10...v4.0.11)
|
|
||||||
|
|
||||||
`2023-02-20`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Add new [vant-nuxt](https://github.com/vant-ui/vant-nuxt) module for Nuxt [#11588](https://github.com/vant-ui/vant/issues/11588)
|
|
||||||
- BackTop: support css variable and prop of z-index [#11582](https://github.com/vant-ui/vant/issues/11582)
|
|
||||||
- Picker: expose option index to option slot [#11594](https://github.com/vant-ui/vant/issues/11594)
|
|
||||||
- @vant/use: support cleanup useEventListener [#11540](https://github.com/vant-ui/vant/issues/11540)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- PickerGroup: confirm event missing params [#11566](https://github.com/vant-ui/vant/issues/11566)
|
|
||||||
- PickerGroup: fix style of tab-line caused by v-show [#11547](https://github.com/vant-ui/vant/issues/11547)
|
|
||||||
- PickerGroup: fix slots not work [#11564](https://github.com/vant-ui/vant/issues/11564)
|
|
||||||
- Popover: fix the arrow position of `*-start/end` placements [#11584](https://github.com/vant-ui/vant/issues/11584)
|
|
||||||
- Popover: should update location after transition [#11568](https://github.com/vant-ui/vant/issues/11568)
|
|
||||||
- Space: Text is not defined in SSR [#11549](https://github.com/vant-ui/vant/issues/11549)
|
|
||||||
|
|
||||||
### [v4.0.10](https://github.com/vant-ui/vant/compare/v4.0.9...v4.0.10)
|
|
||||||
|
|
||||||
`2023-02-02`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DatePicker: fix the value is not updated in time of change event [#11529](https://github.com/vant-ui/vant/issues/11529)
|
|
||||||
- Slider: fix button does not work properly in two-thumb mode [#11526](https://github.com/vant-ui/vant/issues/11526) [#11534](https://github.com/vant-ui/vant/issues/11534)
|
|
||||||
|
|
||||||
### [v4.0.9](https://github.com/vant-ui/vant/compare/v4.0.8...v4.0.9)
|
|
||||||
|
|
||||||
`2023-01-26`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- BackTop: add immediate prop [#11515](https://github.com/vant-ui/vant/issues/11515)
|
|
||||||
- Calendar: add month-title slot [#11500](https://github.com/vant-ui/vant/issues/11500)
|
|
||||||
- Cascader: add useCascaderAreaData method [#11518](https://github.com/vant-ui/vant/issues/11518)
|
|
||||||
- ImagePreview: allow swipe when image is moved to edge [#11505](https://github.com/vant-ui/vant/issues/11505)
|
|
||||||
- Locale: add Esperanto translations [#11520](https://github.com/vant-ui/vant/issues/11520)
|
|
||||||
- Locale: add useCurrentLang method [#11517](https://github.com/vant-ui/vant/issues/11517)
|
|
||||||
- Swipe: add drag-start, drag-end event [#11502](https://github.com/vant-ui/vant/issues/11502)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- ImagePreview: disable zoom when swiping [#11504](https://github.com/vant-ui/vant/issues/11504)
|
|
||||||
- Locale: fix Italian general revision [#11519](https://github.com/vant-ui/vant/issues/11519)
|
|
||||||
- Swipe: avoid resetting position on multi-finger touch [#11503](https://github.com/vant-ui/vant/issues/11503)
|
|
||||||
|
|
||||||
### [v4.0.8](https://github.com/vant-ui/vant/compare/v4.0.7...v4.0.8)
|
|
||||||
|
|
||||||
`2023-01-15`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- PickerGroup: add next-step-text prop [#11487](https://github.com/vant-ui/vant/issues/11487)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Picker: change confirm button color to primary color [#11479](https://github.com/vant-ui/vant/issues/11479)
|
|
||||||
- NumberKeyboard: change confirm button color to primary color [#11479](https://github.com/vant-ui/vant/issues/11479)
|
|
||||||
- Icons: add woff format to compat some special webview [#11485](https://github.com/vant-ui/vant/issues/11485)
|
|
||||||
- Picker: ensure title align in center [#11489](https://github.com/vant-ui/vant/issues/11489)
|
|
||||||
- Skeleton: fix can not register skeleton image component [#11470](https://github.com/vant-ui/vant/issues/11470) [#11469](https://github.com/vant-ui/vant/issues/11469)
|
|
||||||
- Tabs: incorrect insert position in some cases [#11462](https://github.com/vant-ui/vant/issues/11462)
|
|
||||||
|
|
||||||
### [v4.0.7](https://github.com/vant-ui/vant/compare/v4.0.6...v4.0.7)
|
|
||||||
|
|
||||||
`2023-01-02`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Icons: fix delete / delete-o icon [#11441](https://github.com/vant-ui/vant/issues/11441)
|
|
||||||
- Icons: no longer support woff/ttf format [#11442](https://github.com/vant-ui/vant/issues/11442)
|
|
||||||
- ImagePreview:fix teleport prop not work [#11429](https://github.com/vant-ui/vant/issues/11429)
|
|
||||||
- Locale: fix typo of "Calendar" in ru-RU [#11425](https://github.com/vant-ui/vant/issues/11425)
|
|
||||||
- Swipe: failed to render inside keep-alive [#11437](https://github.com/vant-ui/vant/issues/11437)
|
|
||||||
|
|
||||||
### [v4.0.6](https://github.com/vant-ui/vant/compare/v4.0.5...v4.0.6)
|
|
||||||
|
|
||||||
`2022-12-26`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Fix missing declaration files caused by upgrading vite v4 [#11423](https://github.com/vant-ui/vant/issues/11423)
|
|
||||||
|
|
||||||
### [v4.0.5](https://github.com/vant-ui/vant/compare/v4.0.4...v4.0.5)
|
|
||||||
|
|
||||||
`2022-12-25`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Locale: add Dutch lang [#11419](https://github.com/vant-ui/vant/issues/11419)
|
|
||||||
- Locale: add Mongolian lang [#11418](https://github.com/vant-ui/vant/issues/11418)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Badge: fix badge offset of different position [#11400](https://github.com/vant-ui/vant/issues/11400)
|
|
||||||
- Form: filter no name field's value [#11410](https://github.com/vant-ui/vant/issues/11410)
|
|
||||||
- Picker: picker loading color in dark theme [#11405](https://github.com/vant-ui/vant/issues/11405)
|
|
||||||
|
|
||||||
### [v4.0.4](https://github.com/vant-ui/vant/compare/v4.0.3...v4.0.4)
|
|
||||||
|
|
||||||
`2022-12-23`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: incorrect cursor position when value length exceeds maxlength or when formatter is used [#11360](https://github.com/vant-ui/vant/issues/11360)
|
|
||||||
- Image: load event missing params [#11406](https://github.com/vant-ui/vant/issues/11406)
|
|
||||||
|
|
||||||
### [v4.0.3](https://github.com/vant-ui/vant/compare/v4.0.2...v4.0.3)
|
|
||||||
|
|
||||||
`2022-12-13`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: failed to dynamically set empty label [#11373](https://github.com/vant-ui/vant/issues/11373)
|
|
||||||
- ImagePreview: fix loading when previewing images [#11376](https://github.com/vant-ui/vant/issues/11376)
|
|
||||||
|
|
||||||
### [v4.0.2](https://github.com/vant-ui/vant/compare/v4.0.1...v4.0.2)
|
|
||||||
|
|
||||||
`2022-12-03`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: incorrect cursor position when using formatter [#11348](https://github.com/vant-ui/vant/issues/11348)
|
|
||||||
- Image: load event not triggered in nuxt3 [128972](https://github.com/vant-ui/vant/commit/128972a75329d4b14028d00cd23dac66038e2d4c)
|
|
||||||
- NavBar: update placeholder height when window resized [#11351](https://github.com/vant-ui/vant/issues/11351)
|
|
||||||
|
|
||||||
### [v4.0.1](https://github.com/vant-ui/vant/compare/v4.0.0...v4.0.1)
|
|
||||||
|
|
||||||
`2022-12-01`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Picker: add selectedIndexes to the confirm event [#11329](https://github.com/vant-ui/vant/issues/11329)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: set selection range only when focused [#11333](https://github.com/vant-ui/vant/issues/11333)
|
|
||||||
|
|
||||||
### [v4.0.0](https://github.com/vant-ui/vant/compare/v4.0.0-rc.9...v4.0.0)
|
|
||||||
|
|
||||||
`2022-11-26`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- List: add disabled prop [#11307](https://github.com/vant-ui/vant/issues/11307)
|
|
||||||
- BackTop: allow dynamically set target prop [#11311](https://github.com/vant-ui/vant/issues/11311)
|
|
||||||
- BackTop: allow using css var to custom position [#11312](https://github.com/vant-ui/vant/issues/11312)
|
|
||||||
- BackTop: rename visibility-height prop to offset [#11309](https://github.com/vant-ui/vant/issues/11309)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: keep selection position after updating value [#11308](https://github.com/vant-ui/vant/issues/11308)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.9](https://github.com/vant-ui/vant/compare/v4.0.0-rc.8...v4.0.0-rc.9)
|
|
||||||
|
|
||||||
`2022-11-24`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Cell: arrow-direction assignment right is invalid [#11279](https://github.com/vant-ui/vant/issues/11279)
|
|
||||||
- Style: body normalize not work [#11287](https://github.com/vant-ui/vant/issues/11287)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.8](https://github.com/vant-ui/vant/compare/v4.0.0-rc.7...v4.0.0-rc.8)
|
|
||||||
|
|
||||||
`2022-11-20`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- add new BackTop component, note that the API is not stable yet, we may change the API before 4.0 release. [#11236](https://github.com/vant-ui/vant/issues/11236)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DropdownItem: should inherit attrs when using teleport [#11273](https://github.com/vant-ui/vant/issues/11273)
|
|
||||||
- List: incorrect initial loading value [#11275](https://github.com/vant-ui/vant/issues/11275)
|
|
||||||
- NumberKeyboard: should inherit attrs when using teleport [#11274](https://github.com/vant-ui/vant/issues/11274)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.7](https://github.com/vant-ui/vant/compare/v4.0.0-rc.6...v4.0.0-rc.7)
|
|
||||||
|
|
||||||
`2022-11-13`
|
|
||||||
|
|
||||||
**New Component**
|
|
||||||
|
|
||||||
- Add new SkeletonAvatar、SkeletonTitle、SkeletonImage、SkeletonParagraph components [#11173](https://github.com/vant-ui/vant/issues/11173)
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- ImagePreview: add long-press event [#11252](https://github.com/vant-ui/vant/issues/11252)
|
|
||||||
- Popover: support uncontrolled mode [#11244](https://github.com/vant-ui/vant/issues/11244)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- ActionSheet: fix that close is invalid without title [#11213](https://github.com/vant-ui/vant/issues/11213)
|
|
||||||
- DatePicker: only throw error in development [#11248](https://github.com/vant-ui/vant/issues/11248)
|
|
||||||
- Lazyload: lazy-image h is not a function [#11229](https://github.com/vant-ui/vant/issues/11229)
|
|
||||||
- Picker: correct v-model when emit confirm event [#11194](https://github.com/vant-ui/vant/issues/11194)
|
|
||||||
- Picker: empty column will cause error [#11249](https://github.com/vant-ui/vant/issues/11249)
|
|
||||||
- Uploader: chooseFile is invalid when show-upload is false [#11218](https://github.com/vant-ui/vant/issues/11218)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.6](https://github.com/vant-ui/vant/compare/v4.0.0-rc.5...v4.0.0-rc.6)
|
|
||||||
|
|
||||||
`2022-10-23`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Calendar: add params for subtitle slot [#11168](https://github.com/vant-ui/vant/issues/11168)
|
|
||||||
- Cell: add tag prop [#11139](https://github.com/vant-ui/vant/issues/11139)
|
|
||||||
- ImagePreview: add image slot [#11133](https://github.com/vant-ui/vant/issues/11133)
|
|
||||||
- Toast: add wordBreak prop [#11147](https://github.com/vant-ui/vant/issues/11147)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- CouponList: fix the style of coupon checkbox [#11153](https://github.com/vant-ui/vant/issues/11153)
|
|
||||||
- CouponList: incorrect field style [#11155](https://github.com/vant-ui/vant/issues/11155)
|
|
||||||
- Swipe: failed to render when inside popup [#11162](https://github.com/vant-ui/vant/issues/11162)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.5](https://github.com/vant-ui/vant/compare/v4.0.0-rc.4...v4.0.0-rc.5)
|
|
||||||
|
|
||||||
`2022-10-07`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Field: support label-position top [#11102](https://github.com/vant-ui/vant/issues/11102)
|
|
||||||
- Loading: add icon slot [#11109](https://github.com/vant-ui/vant/issues/11109)
|
|
||||||
- NavBar: add clickable prop [#11048](https://github.com/vant-ui/vant/issues/11048)
|
|
||||||
- Stepper: add auto-fixed prop [#11071](https://github.com/vant-ui/vant/issues/11071)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DatePicker: format value when exceed max date [#11122](https://github.com/vant-ui/vant/issues/11122)
|
|
||||||
- Tabs: incorrect nav scroll animation in some cases [#11116](https://github.com/vant-ui/vant/issues/11116)
|
|
||||||
- Tabs: scroll position when using nav-bottom slot [#11115](https://github.com/vant-ui/vant/issues/11115)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.4](https://github.com/vant-ui/vant/compare/v4.0.0-rc.3...v4.0.0-rc.4)
|
|
||||||
|
|
||||||
`2022-09-25`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Field: add message param to 'end-validate' method [#11080](https://github.com/vant-ui/vant/issues/11080)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Tabs: incorrect scroll position in some cases [#11085](https://github.com/vant-ui/vant/issues/11085)
|
|
||||||
- Tabs: incorrect scroll position when inited [#11059](https://github.com/vant-ui/vant/issues/11059)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.3](https://github.com/vant-ui/vant/compare/v4.0.0-rc.2...v4.0.0-rc.3)
|
|
||||||
|
|
||||||
`2022-09-12`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- ConfigProvider: add ConfigProviderThemeVars type [#11034](https://github.com/vant-ui/vant/issues/11034)
|
|
||||||
- Notify: add z-index prop [#11032](https://github.com/vant-ui/vant/issues/11032)
|
|
||||||
- remove popperjs to reduce install size [#11030](https://github.com/vant-ui/vant/issues/11030)
|
|
||||||
|
|
||||||
**Types**
|
|
||||||
|
|
||||||
- Toast: fix missing global components type [#11033](https://github.com/vant-ui/vant/issues/11033)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.2](https://github.com/vant-ui/vant/compare/v4.0.0-rc.1...v4.0.0-rc.2)
|
|
||||||
|
|
||||||
`2022-09-11`
|
|
||||||
|
|
||||||
**Breaking Changes**
|
|
||||||
|
|
||||||
- attach css variables to :root element [#11026](https://github.com/vant-ui/vant/issues/11026)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Dialog: incorrect transform behavior [#11028](https://github.com/vant-ui/vant/issues/11028)
|
|
||||||
- Empty: fix opacity in dark mode [#11027](https://github.com/vant-ui/vant/issues/11027)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.1](https://github.com/vant-ui/vant/compare/v4.0.0-rc.0...v4.0.0-rc.1)
|
|
||||||
|
|
||||||
`2022-09-10`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- export props of all components [#11024](https://github.com/vant-ui/vant/issues/11024)
|
|
||||||
- Dialog: message-align can be justify [#11014](https://github.com/vant-ui/vant/issues/11014)
|
|
||||||
- Image: add block prop [#11022](https://github.com/vant-ui/vant/issues/11022)
|
|
||||||
- Toast: add message slot [#11018](https://github.com/vant-ui/vant/issues/11018)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Picker: failed to update value in some cases [#11009](https://github.com/vant-ui/vant/issues/11009)
|
|
||||||
- Locale: avoid getting unexpected value [#11010](https://github.com/vant-ui/vant/issues/11010)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.0](https://github.com/vant-ui/vant/compare/v3.6.2...v4.0.0-rc.0)
|
### [v4.0.0-rc.0](https://github.com/vant-ui/vant/compare/v3.6.2...v4.0.0-rc.0)
|
||||||
|
|
||||||
`2022-09-04`
|
`2022-09-04`
|
||||||
|
@ -19,347 +19,6 @@ Vant 遵循 [Semver](https://semver.org/lang/zh-CN/) 语义化版本规范。
|
|||||||
|
|
||||||
## 更新内容
|
## 更新内容
|
||||||
|
|
||||||
### [v4.1.2](https://github.com/vant-ui/vant/compare/v4.1.1...v4.1.2)
|
|
||||||
|
|
||||||
`2023-03-26`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Locale: 增加 Khmer 高棉语 [#11701](https://github.com/vant-ui/vant/issues/11701)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复同时设置 label-align "top" 和 is-link 时样式错误的问题 [#11684](https://github.com/vant-ui/vant/issues/11684)
|
|
||||||
- Field: 修复设置 readonly 属性后无法触发 blur 事件的问题 [#11699](https://github.com/vant-ui/vant/issues/11699)
|
|
||||||
- ImagePreview: 修复长图片上下拖动不顺滑的问题 [#11702](https://github.com/vant-ui/vant/issues/11702)
|
|
||||||
|
|
||||||
### [v4.1.1](https://github.com/vant-ui/vant/compare/v4.1.0...v4.1.1)
|
|
||||||
|
|
||||||
`2023-03-19`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Uploader: 支持 avif 图片格式 [#11655](https://github.com/vant-ui/vant/issues/11655)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- @vant/use: 增加 vue 作为 peer dependencies [#11662](https://github.com/vant-ui/vant/issues/11662)
|
|
||||||
- DatePicker: 修复个别情况下显示时间错误的问题 [#11656](https://github.com/vant-ui/vant/issues/11656)
|
|
||||||
- Field: 修复 `FieldRuleFormatter` 类型拼写错误 [#11674](https://github.com/vant-ui/vant/issues/11674)
|
|
||||||
- TextEllipsis: 修复长数字无法被正确截断的问题 [#11669](https://github.com/vant-ui/vant/issues/11669)
|
|
||||||
|
|
||||||
### [v4.1.0](https://github.com/vant-ui/vant/compare/v4.0.11...v4.1.0)
|
|
||||||
|
|
||||||
`2023-03-05`
|
|
||||||
|
|
||||||
**New Component**
|
|
||||||
|
|
||||||
- 新增 TextEllipsis 文本省略组件 [#11593](https://github.com/vant-ui/vant/issues/11593)
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Swipe: 新增 drag-start/drag-end 事件的 index 参数 [#11632](https://github.com/vant-ui/vant/issues/11632)
|
|
||||||
- TreeSelect: 新增 nav-text 插槽 [#11602](https://github.com/vant-ui/vant/issues/11602) [#11641](https://github.com/vant-ui/vant/issues/11641)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DropdownMenu: 修复使用 toggle 方法打开时位置错误的问题 [#11640](https://github.com/vant-ui/vant/issues/11640)
|
|
||||||
- Field: 修复设置 label-width 后 label-position 不生效的问题 [#11611](https://github.com/vant-ui/vant/issues/11611)
|
|
||||||
- Locale: 修复乌克兰语翻译问题 [#11629](https://github.com/vant-ui/vant/issues/11629)
|
|
||||||
|
|
||||||
### [v4.0.11](https://github.com/vant-ui/vant/compare/v4.0.10...v4.0.11)
|
|
||||||
|
|
||||||
`2023-02-20`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- 新增 [vant-nuxt](https://github.com/vant-ui/vant-nuxt) 包,作为官方的 Nuxt Module [#11588](https://github.com/vant-ui/vant/issues/11588)
|
|
||||||
- BackTop: 新增 z-index 属性以及相关 CSS 变量 [#11582](https://github.com/vant-ui/vant/issues/11582)
|
|
||||||
- Picker: 支持在 option 插槽中获取选项的 index [#11594](https://github.com/vant-ui/vant/issues/11594)
|
|
||||||
- @vant/use: 支持注销 useEventListener [#11540](https://github.com/vant-ui/vant/issues/11540)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- PickerGroup: 修复 confirm 事件参数不正确的问题 [#11566](https://github.com/vant-ui/vant/issues/11566)
|
|
||||||
- PickerGroup: 修复 Tab 的下划线样式错误问题 [#11547](https://github.com/vant-ui/vant/issues/11547)
|
|
||||||
- PickerGroup: 修复部分插槽不可用的问题 [#11564](https://github.com/vant-ui/vant/issues/11564)
|
|
||||||
- Popover: 修复 placement 为 `*-start/end` 时箭头位置错误的问题 [#11584](https://github.com/vant-ui/vant/issues/11584)
|
|
||||||
- Popover: 修复动画会导致组件位置错误的问题 [#11568](https://github.com/vant-ui/vant/issues/11568)
|
|
||||||
- Space: 修复 SSR 时出现缺少 Text 报错的问题 [#11549](https://github.com/vant-ui/vant/issues/11549)
|
|
||||||
|
|
||||||
### [v4.0.10](https://github.com/vant-ui/vant/compare/v4.0.9...v4.0.10)
|
|
||||||
|
|
||||||
`2023-02-02`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DatePicker: 修复 change 事件中日期参数不正确的问题 [#11529](https://github.com/vant-ui/vant/issues/11529)
|
|
||||||
- Slider: 修复双滑块模式下无法正确拖动的问题 [#11526](https://github.com/vant-ui/vant/issues/11526) [#11534](https://github.com/vant-ui/vant/issues/11534)
|
|
||||||
|
|
||||||
### [v4.0.9](https://github.com/vant-ui/vant/compare/v4.0.8...v4.0.9)
|
|
||||||
|
|
||||||
`2023-01-26`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- BackTop: 新增 immediate 属性 [#11515](https://github.com/vant-ui/vant/issues/11515)
|
|
||||||
- Calendar: 新增 month-title 插槽 [#11500](https://github.com/vant-ui/vant/issues/11500)
|
|
||||||
- Cascader: 新增 useCascaderAreaData 方法 [#11518](https://github.com/vant-ui/vant/issues/11518)
|
|
||||||
- ImagePreview: 支持在缩放图片后滑动至其他图片 [#11505](https://github.com/vant-ui/vant/issues/11505)
|
|
||||||
- Locale: 新增 Esperanto 世界语 [#11520](https://github.com/vant-ui/vant/issues/11520)
|
|
||||||
- Locale: 新增 useCurrentLang 方法 [#11517](https://github.com/vant-ui/vant/issues/11517)
|
|
||||||
- Swipe: 新增 drag-start, drag-end 事件 [#11502](https://github.com/vant-ui/vant/issues/11502)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- ImagePreview: 修复切换图片过程中可以触发图片缩放的问题 [#11504](https://github.com/vant-ui/vant/issues/11504)
|
|
||||||
- Locale: 修复意大利语翻译问题 [#11519](https://github.com/vant-ui/vant/issues/11519)
|
|
||||||
- Swipe: 修复多指操作时滑动位置被错误重置的问题 [#11503](https://github.com/vant-ui/vant/issues/11503)
|
|
||||||
|
|
||||||
### [v4.0.8](https://github.com/vant-ui/vant/compare/v4.0.7...v4.0.8)
|
|
||||||
|
|
||||||
`2023-01-15`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- PickerGroup: 新增 next-step-text 属性 [#11487](https://github.com/vant-ui/vant/issues/11487)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Picker: 调整确认按钮的颜色为 primary color [#11479](https://github.com/vant-ui/vant/issues/11479)
|
|
||||||
- NumberKeyboard: 调整确认按钮的颜色为 primary color [#11479](https://github.com/vant-ui/vant/issues/11479)
|
|
||||||
- Icons: 增加 woff 格式来兼容个别 webview 环境 [#11485](https://github.com/vant-ui/vant/issues/11485)
|
|
||||||
- Picker: 修复标题文字可能不居中的问题 [#11489](https://github.com/vant-ui/vant/issues/11489)
|
|
||||||
- Skeleton: 修复全量引入组件时不会自动注册 Skeleton 子组件的问题 [#11470](https://github.com/vant-ui/vant/issues/11470) [#11469](https://github.com/vant-ui/vant/issues/11469)
|
|
||||||
- Tabs: 修复动态插入 Tab 时在个别情况下顺序错误的问题 [#11462](https://github.com/vant-ui/vant/issues/11462)
|
|
||||||
|
|
||||||
### [v4.0.7](https://github.com/vant-ui/vant/compare/v4.0.6...v4.0.7)
|
|
||||||
|
|
||||||
`2023-01-02`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Icons: 修复 delete / delete-o 图标存在多余黑点的问题 [#11441](https://github.com/vant-ui/vant/issues/11441)
|
|
||||||
- Icons: 移除多余的 woff/ttf 格式声明 [#11442](https://github.com/vant-ui/vant/issues/11442)
|
|
||||||
- ImagePreview:修复 teleport 属性不生效的问题 [#11429](https://github.com/vant-ui/vant/issues/11429)
|
|
||||||
- Locale: 修复 ru-RU 中的 "Calendar" 拼写错误 [#11425](https://github.com/vant-ui/vant/issues/11425)
|
|
||||||
- Swipe: 修复在 keep-alive 内使用时可能渲染空白的问题 [#11437](https://github.com/vant-ui/vant/issues/11437)
|
|
||||||
|
|
||||||
### [v4.0.6](https://github.com/vant-ui/vant/compare/v4.0.5...v4.0.6)
|
|
||||||
|
|
||||||
`2022-12-26`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- 修复升级 vite v4 导致构建产物不全的问题 [#11423](https://github.com/vant-ui/vant/issues/11423)
|
|
||||||
|
|
||||||
### [v4.0.5](https://github.com/vant-ui/vant/compare/v4.0.4...v4.0.5)
|
|
||||||
|
|
||||||
`2022-12-25`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Locale: 新增 Dutch 荷兰语 [#11419](https://github.com/vant-ui/vant/issues/11419)
|
|
||||||
- Locale: 新增 Mongolian 蒙古语 [#11418](https://github.com/vant-ui/vant/issues/11418)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Badge: 修复 offset 属性部分情况下导致样式错误的问题 [#11400](https://github.com/vant-ui/vant/issues/11400)
|
|
||||||
- Form: 修复事件参数中可能出现 key 为 undefined 的问题 [#11410](https://github.com/vant-ui/vant/issues/11410)
|
|
||||||
- Picker: 修复深色模式下加载状态样式错误的问题 [#11405](https://github.com/vant-ui/vant/issues/11405)
|
|
||||||
|
|
||||||
### [v4.0.4](https://github.com/vant-ui/vant/compare/v4.0.3...v4.0.4)
|
|
||||||
|
|
||||||
`2022-12-23`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复使用 formatter 时光标位置可能错误的问题 [#11360](https://github.com/vant-ui/vant/issues/11360)
|
|
||||||
- Image: 修复 load 事件未正确触发导致 ImagePreview 报错的问题 [#11406](https://github.com/vant-ui/vant/issues/11406)
|
|
||||||
|
|
||||||
### [v4.0.3](https://github.com/vant-ui/vant/compare/v4.0.2...v4.0.3)
|
|
||||||
|
|
||||||
`2022-12-13`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复动态设置空的 label 不生效的问题 [#11373](https://github.com/vant-ui/vant/issues/11373)
|
|
||||||
- ImagePreview: 修复图片可能加载失败的问题 [#11376](https://github.com/vant-ui/vant/issues/11376)
|
|
||||||
|
|
||||||
### [v4.0.2](https://github.com/vant-ui/vant/compare/v4.0.1...v4.0.2)
|
|
||||||
|
|
||||||
`2022-12-03`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复使用 formatter 时光标位置错误的问题 [#11348](https://github.com/vant-ui/vant/issues/11348)
|
|
||||||
- Image: 修复在 Nuxt 3 下图片可能无法展示的问题 [128972](https://github.com/vant-ui/vant/commit/128972a75329d4b14028d00cd23dac66038e2d4c)
|
|
||||||
- NavBar: 修复屏幕旋转时 placeholder 未自动适配高度的问题 [#11351](https://github.com/vant-ui/vant/issues/11351)
|
|
||||||
|
|
||||||
### [v4.0.1](https://github.com/vant-ui/vant/compare/v4.0.0...v4.0.1)
|
|
||||||
|
|
||||||
`2022-12-01`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Picker: 新增 selectedIndexes 作为事件入参 [#11329](https://github.com/vant-ui/vant/issues/11329)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复未选中时修改绑定的值会导致键盘弹出的问题 [#11333](https://github.com/vant-ui/vant/issues/11333)
|
|
||||||
|
|
||||||
### [v4.0.0](https://github.com/vant-ui/vant/compare/v4.0.0-rc.9...v4.0.0)
|
|
||||||
|
|
||||||
`2022-11-26`
|
|
||||||
|
|
||||||
> 完整内容请移步:[「4.0 更新介绍」](https://vant-ui.github.io/vant/#/zh-CN/release-note-v4)
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- List: 新增 disabled 属性 [#11307](https://github.com/vant-ui/vant/issues/11307)
|
|
||||||
- BackTop: 支持动态设置 target 属性 [#11311](https://github.com/vant-ui/vant/issues/11311)
|
|
||||||
- BackTop: 支持通过 CSS 变量修改组件位置 [#11312](https://github.com/vant-ui/vant/issues/11312)
|
|
||||||
- BackTop: 重命名 visibility-height 属性为 offset [#11309](https://github.com/vant-ui/vant/issues/11309)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Field: 修复格式化值后,光标位置错误的问题 [#11308](https://github.com/vant-ui/vant/issues/11308)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.9](https://github.com/vant-ui/vant/compare/v4.0.0-rc.8...v4.0.0-rc.9)
|
|
||||||
|
|
||||||
`2022-11-24`
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Cell: 修复 arrow-direction 设置为 right 不显示的问题 [#11279](https://github.com/vant-ui/vant/issues/11279)
|
|
||||||
- Style: 修复 body 标签上的 normalize 样式未生效的问题 [#11287](https://github.com/vant-ui/vant/issues/11287)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.8](https://github.com/vant-ui/vant/compare/v4.0.0-rc.7...v4.0.0-rc.8)
|
|
||||||
|
|
||||||
`2022-11-20`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- 新增 BackTop 回到顶部组件,注意该新组件的 API 尚未稳定,在 4.0 正式版发布前仍可能产生 breaking change [#11236](https://github.com/vant-ui/vant/issues/11236)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DropdownItem: 修复使用 teleport 时无法设置 attr 的问题 [#11273](https://github.com/vant-ui/vant/issues/11273)
|
|
||||||
- List: 修复初始的 loading 值为 true 时加载错误的问题 [#11275](https://github.com/vant-ui/vant/issues/11275)
|
|
||||||
- NumberKeyboard: 修复使用 teleport 时无法设置 attr 的问题 [#11274](https://github.com/vant-ui/vant/issues/11274)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.7](https://github.com/vant-ui/vant/compare/v4.0.0-rc.6...v4.0.0-rc.7)
|
|
||||||
|
|
||||||
`2022-11-13`
|
|
||||||
|
|
||||||
**New Component**
|
|
||||||
|
|
||||||
- 新增 SkeletonAvatar、SkeletonTitle、SkeletonImage、SkeletonParagraph 组件 [#11173](https://github.com/vant-ui/vant/issues/11173)
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- ImagePreview: 新增 long-press 事件 [#11252](https://github.com/vant-ui/vant/issues/11252)
|
|
||||||
- Popover: 支持非受控模式 [#11244](https://github.com/vant-ui/vant/issues/11244)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- ActionSheet: 修复标题为空时取消按钮层级错误的问题 [#11213](https://github.com/vant-ui/vant/issues/11213)
|
|
||||||
- DatePicker: 在生产环境下不再抛出开发错误提示 [#11248](https://github.com/vant-ui/vant/issues/11248)
|
|
||||||
- Lazyload: 修复使用 lazy-image 时报错 h is not a function 的问题 [#11229](https://github.com/vant-ui/vant/issues/11229)
|
|
||||||
- Picker: 修复抛出 confirm 事件时 v-model 未正确更新的问题 [#11194](https://github.com/vant-ui/vant/issues/11194)
|
|
||||||
- Picker: 修复 column 为空时操作报错的问题 [#11249](https://github.com/vant-ui/vant/issues/11249)
|
|
||||||
- Uploader: 修复 show-upload 为 false 时 chooseFile 无法调用的问题 [#11218](https://github.com/vant-ui/vant/issues/11218)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.6](https://github.com/vant-ui/vant/compare/v4.0.0-rc.5...v4.0.0-rc.6)
|
|
||||||
|
|
||||||
`2022-10-23`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Calendar: subtitle 插槽新增 text 和 date 入参 [#11168](https://github.com/vant-ui/vant/issues/11168)
|
|
||||||
- Cell: 新增 tag 属性 [#11139](https://github.com/vant-ui/vant/issues/11139)
|
|
||||||
- ImagePreview: 新增 image 插槽 [#11133](https://github.com/vant-ui/vant/issues/11133)
|
|
||||||
- Toast: 新增 wordBreak 选项 [#11147](https://github.com/vant-ui/vant/issues/11147)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- CouponList: 修复 coupon 位置错误的问题 [#11153](https://github.com/vant-ui/vant/issues/11153)
|
|
||||||
- CouponList: 修复输入框样式错误的问题 [#11155](https://github.com/vant-ui/vant/issues/11155)
|
|
||||||
- Swipe: 修复在 Popup 内时个别情况下渲染错误的问题 [#11162](https://github.com/vant-ui/vant/issues/11162)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.5](https://github.com/vant-ui/vant/compare/v4.0.0-rc.4...v4.0.0-rc.5)
|
|
||||||
|
|
||||||
`2022-10-07`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Field: 支持将 label-position 设置为 top [#11102](https://github.com/vant-ui/vant/issues/11102)
|
|
||||||
- Loading: 新增 icon 插槽 [#11109](https://github.com/vant-ui/vant/issues/11109)
|
|
||||||
- NavBar: 新增 clickable 属性 [#11048](https://github.com/vant-ui/vant/issues/11048)
|
|
||||||
- Stepper: 新增 auto-fixed 属性 [#11071](https://github.com/vant-ui/vant/issues/11071)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- DatePicker: 修复日期超出 maxDate 时格式化不正确的问题 [#11122](https://github.com/vant-ui/vant/issues/11122)
|
|
||||||
- Tabs: 修复开启 scrollspy 时个别情况下标题栏滚动位置错误的问题 [#11116](https://github.com/vant-ui/vant/issues/11116)
|
|
||||||
- Tabs: 修复开启 scrollspy 时 nav-bottom 插槽遮挡内容的问题 [#11115](https://github.com/vant-ui/vant/issues/11115)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.4](https://github.com/vant-ui/vant/compare/v4.0.0-rc.3...v4.0.0-rc.4)
|
|
||||||
|
|
||||||
`2022-09-25`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- Field: end-validate 事件新增 message 参数 [#11080](https://github.com/vant-ui/vant/issues/11080)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Tabs: 修复个别情况下页面滚动位置错误的问题 [#11085](https://github.com/vant-ui/vant/issues/11085)
|
|
||||||
- Tabs: 修复初始化时菜单横向滚动位置错误的问题 [#11059](https://github.com/vant-ui/vant/issues/11059)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.3](https://github.com/vant-ui/vant/compare/v4.0.0-rc.2...v4.0.0-rc.3)
|
|
||||||
|
|
||||||
`2022-09-12`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- ConfigProvider: 新增 ConfigProviderThemeVars 类型 [#11034](https://github.com/vant-ui/vant/issues/11034)
|
|
||||||
- Notify: 新增 z-index 属性 [#11032](https://github.com/vant-ui/vant/issues/11032)
|
|
||||||
- 移除 `@popperjs/core` 依赖,减少安装体积 1.6MB [#11030](https://github.com/vant-ui/vant/issues/11030)
|
|
||||||
|
|
||||||
**Types**
|
|
||||||
|
|
||||||
- Toast: 修复缺少全局类型定义的问题 [#11033](https://github.com/vant-ui/vant/issues/11033)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.2](https://github.com/vant-ui/vant/compare/v4.0.0-rc.1...v4.0.0-rc.2)
|
|
||||||
|
|
||||||
`2022-09-11`
|
|
||||||
|
|
||||||
**Breaking Changes**
|
|
||||||
|
|
||||||
- 调整了所有 CSS 变量的挂载位置,由 `body` 节点调整回 `:root` 节点,调整后与 Vant v3 版本保持一致,以便于 v3 项目更平滑地升级到 v4 版本。 [#11026](https://github.com/vant-ui/vant/issues/11026)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Dialog: 修复过渡动画异常的问题 [#11028](https://github.com/vant-ui/vant/issues/11028)
|
|
||||||
- Empty: 修复深色模式下亮度过高的问题 [#11027](https://github.com/vant-ui/vant/issues/11027)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.1](https://github.com/vant-ui/vant/compare/v4.0.0-rc.0...v4.0.0-rc.1)
|
|
||||||
|
|
||||||
`2022-09-10`
|
|
||||||
|
|
||||||
**Feature**
|
|
||||||
|
|
||||||
- 导出所有组件的 props,方便进行二次封装 [#11024](https://github.com/vant-ui/vant/issues/11024)
|
|
||||||
- Dialog: message-align 属性支持设置为 justify [#11014](https://github.com/vant-ui/vant/issues/11014)
|
|
||||||
- Image: 新增 block 属性 [#11022](https://github.com/vant-ui/vant/issues/11022)
|
|
||||||
- Toast: 新增 message 插槽 [#11018](https://github.com/vant-ui/vant/issues/11018)
|
|
||||||
|
|
||||||
**Bug Fixes**
|
|
||||||
|
|
||||||
- Picker: 修复部分情况下未正确更新选中值的问题 [#11009](https://github.com/vant-ui/vant/issues/11009)
|
|
||||||
- Locale: 修复读取 i18n 文案时可能获取到 JS 原生方法的问题 [#11010](https://github.com/vant-ui/vant/issues/11010)
|
|
||||||
|
|
||||||
### [v4.0.0-rc.0](https://github.com/vant-ui/vant/compare/v3.6.2...v4.0.0-rc.0)
|
### [v4.0.0-rc.0](https://github.com/vant-ui/vant/compare/v3.6.2...v4.0.0-rc.0)
|
||||||
|
|
||||||
`2022-09-04`
|
`2022-09-04`
|
||||||
|
@ -1,138 +0,0 @@
|
|||||||
# Contribution Guide
|
|
||||||
|
|
||||||
### Introduction
|
|
||||||
|
|
||||||
Thank you for using Vant.
|
|
||||||
|
|
||||||
Below are the guidelines for submitting feedback or code to Vant. Please take a few minutes to read the following before submitting an issue or PR to Vant.
|
|
||||||
|
|
||||||
### Issue Specification
|
|
||||||
|
|
||||||
- If you encountered a problem, please first confirm whether the problem has been recorded in the issue or has been fixed.
|
|
||||||
- When submitting an issue, please describe the problem you encountered in a short language, and add the environment and reproduction steps when the problem occurs.
|
|
||||||
|
|
||||||
## Participate in development
|
|
||||||
|
|
||||||
### Local development
|
|
||||||
|
|
||||||
Before developing locally, please make sure that [Node.js >= 14.19.0](https://nodejs.org) is installed in your development environment.
|
|
||||||
|
|
||||||
Follow the steps below to develop Vant components locally.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Clone repository
|
|
||||||
git clone git@github.com:vant-ui/vant.git
|
|
||||||
|
|
||||||
# Enable pnpm package manager
|
|
||||||
corepack enable
|
|
||||||
|
|
||||||
# Install dependencies
|
|
||||||
pnpm i
|
|
||||||
|
|
||||||
# Start development
|
|
||||||
pnpm dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Different branches of the repository correspond to different Vant versions, please switch to the appropriate branch for development:
|
|
||||||
|
|
||||||
- The main branch corresponds to the Vant 4 version, suitable for Vue 3
|
|
||||||
- 3.x branch corresponds to Vant 3 version, suitable for Vue 3
|
|
||||||
- 2.x branch corresponds to Vant 2 version, suitable for Vue 2
|
|
||||||
|
|
||||||
### Mirror repository
|
|
||||||
|
|
||||||
If GitHub cloning is slow, you can also directly clone Vant's [mirror repository](https://gitee.com/vant-contrib/vant) directly on gitee:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone git@gitee.com:vant-contrib/vant.git
|
|
||||||
```
|
|
||||||
|
|
||||||
The mirror repository is only used to speed up local access, please do not submit issues and pull requests to the mirror repository.
|
|
||||||
|
|
||||||
### Directory Structure
|
|
||||||
|
|
||||||
Vant uses monorepo for code management, and all subpackages are in the `packages/vant` directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
root
|
|
||||||
└─ packages
|
|
||||||
├─ vant # Component library
|
|
||||||
├─ vant-cli # Scaffolding
|
|
||||||
├─ vant-icons # Icon library
|
|
||||||
├─ vant-use # Composition API
|
|
||||||
└─ .... # Other npm packages
|
|
||||||
```
|
|
||||||
|
|
||||||
Among them, the `packages/vant` directory is the core code of the component library:
|
|
||||||
|
|
||||||
```
|
|
||||||
vant
|
|
||||||
├─ docs # Documentation
|
|
||||||
├─ src # Component source code
|
|
||||||
├─ test # Test utils
|
|
||||||
└─ vant.config.mjs # Document configuration
|
|
||||||
```
|
|
||||||
|
|
||||||
The `packages/vant/src` directory contains the source code of each component, and each folder corresponds to a component:
|
|
||||||
|
|
||||||
```
|
|
||||||
src
|
|
||||||
└─ button
|
|
||||||
├─ demo # Demo code
|
|
||||||
├─ test # Unit test
|
|
||||||
├─ Component.tsx # Component
|
|
||||||
├─ index.ts # Component entry
|
|
||||||
├─ index.less # Styles
|
|
||||||
├─ README.md # English document
|
|
||||||
└─ README.zh-CN.md # Chinese document
|
|
||||||
```
|
|
||||||
|
|
||||||
### Code Specification
|
|
||||||
|
|
||||||
When writing code, please note:
|
|
||||||
|
|
||||||
- Make sure the code can pass the repository's ESLint check.
|
|
||||||
- Make sure the code format is standardized, use prettier for code formatting.
|
|
||||||
- Make sure you don't use incompatible APIs like `async`, `await`.
|
|
||||||
|
|
||||||
## Submitting a Pull Request
|
|
||||||
|
|
||||||
### Reference Guide
|
|
||||||
|
|
||||||
If this is your first time submitting a pull request on GitHub, you can learn from the following article:
|
|
||||||
|
|
||||||
- [First participation in open source](https://github.com/firstcontributions/first-contributions)
|
|
||||||
|
|
||||||
### Pull Request Specification
|
|
||||||
|
|
||||||
When submitting a Pull Request, please note:
|
|
||||||
|
|
||||||
- Keep your PRs small enough that a PR only addresses a single issue or adds a single feature.
|
|
||||||
- When adding new components or modifying original components, remember to add or modify the corresponding unit tests to ensure the stability of the code.
|
|
||||||
- Please include an appropriate description in the PR, and link related issues.
|
|
||||||
|
|
||||||
### Pull Request Process
|
|
||||||
|
|
||||||
1. Fork the main repository. If you have already forked, please synchronize the latest code from the main repository.
|
|
||||||
2. Create a new branch based on the main branch of the repository after the fork, such as `feature/button_color`.
|
|
||||||
3. Develop on the new branch. When development is complete, submit a pull request to the main branch of the main repository.
|
|
||||||
4. The pull request is merged into the main repository after the review is approved.
|
|
||||||
5. Wait for Vant to release a new version, usually once a week.
|
|
||||||
|
|
||||||
### Synchronize the latest code
|
|
||||||
|
|
||||||
Before submitting a Pull Request, please synchronize the latest code of the main repository according to the following process:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Add the main repository to remote
|
|
||||||
git remote add upstream git@github.com:vant-ui/vant.git
|
|
||||||
|
|
||||||
# Pull the latest code from the main repository
|
|
||||||
git fetch upstream
|
|
||||||
|
|
||||||
# Switch to the main branch
|
|
||||||
git checkout main
|
|
||||||
|
|
||||||
# Merge the code from the main repository
|
|
||||||
git merge upstream/main
|
|
||||||
```
|
|
@ -26,6 +26,9 @@ git clone git@github.com:vant-ui/vant.git
|
|||||||
# 启用 pnpm 包管理器
|
# 启用 pnpm 包管理器
|
||||||
corepack enable
|
corepack enable
|
||||||
|
|
||||||
|
# 如果无法使用 corepack,你也可以手动安装 pnpm
|
||||||
|
npm install -g pnpm@7
|
||||||
|
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
pnpm i
|
pnpm i
|
||||||
|
|
||||||
@ -35,7 +38,7 @@ pnpm dev
|
|||||||
|
|
||||||
仓库的不同分支对应不同的 Vant 版本,请切换到对应分支进行开发:
|
仓库的不同分支对应不同的 Vant 版本,请切换到对应分支进行开发:
|
||||||
|
|
||||||
- main 分支对应 Vant 4 版本,适用于 Vue 3
|
- dev 分支对应 Vant 4 版本,适用于 Vue 3
|
||||||
- 3.x 分支对应 Vant 3 版本 ,适用于 Vue 3
|
- 3.x 分支对应 Vant 3 版本 ,适用于 Vue 3
|
||||||
- 2.x 分支对应 Vant 2 版本,适用于 Vue 2
|
- 2.x 分支对应 Vant 2 版本,适用于 Vue 2
|
||||||
|
|
||||||
@ -63,7 +66,7 @@ root
|
|||||||
└─ .... # 其他周边 npm 包
|
└─ .... # 其他周边 npm 包
|
||||||
```
|
```
|
||||||
|
|
||||||
其中,`packages/vant` 目录为组件库的核心代码:
|
其中,`vant` 目录为组件库的核心代码:
|
||||||
|
|
||||||
```
|
```
|
||||||
vant
|
vant
|
||||||
@ -73,7 +76,7 @@ vant
|
|||||||
└─ vant.config.mjs # 文档网站配置
|
└─ vant.config.mjs # 文档网站配置
|
||||||
```
|
```
|
||||||
|
|
||||||
`packages/vant/src` 目录包含各个组件的源码,每个文件夹对应一个组件:
|
`src` 目录包含各个组件的源码,每个文件夹对应一个组件:
|
||||||
|
|
||||||
```
|
```
|
||||||
src
|
src
|
||||||
@ -83,6 +86,7 @@ src
|
|||||||
├─ Component.tsx # 组件
|
├─ Component.tsx # 组件
|
||||||
├─ index.ts # 组件入口
|
├─ index.ts # 组件入口
|
||||||
├─ index.less # 样式
|
├─ index.less # 样式
|
||||||
|
├─ var.less # 样式变量
|
||||||
├─ README.md # 英文文档
|
├─ README.md # 英文文档
|
||||||
└─ README.zh-CN.md # 中文文档
|
└─ README.zh-CN.md # 中文文档
|
||||||
```
|
```
|
||||||
@ -93,30 +97,30 @@ src
|
|||||||
|
|
||||||
- 确保代码可以通过仓库的 ESLint 校验。
|
- 确保代码可以通过仓库的 ESLint 校验。
|
||||||
- 确保代码格式是规范的,使用 prettier 进行代码格式化。
|
- 确保代码格式是规范的,使用 prettier 进行代码格式化。
|
||||||
- 确保没有使用超出兼容性范围的 API,比如 `async`, `await`.
|
- 确保没有使用超出兼容性范围的 API,比如 `async/await`。
|
||||||
|
|
||||||
## 提交 Pull Request
|
## 提交 PR
|
||||||
|
|
||||||
### 参考指南
|
### 参考指南
|
||||||
|
|
||||||
如果你是第一次在 GitHub 上提 Pull Request ,可以阅读下面这两篇文章来学习:
|
如果你是第一次在 GitHub 上提 Pull Request ,可以阅读下面这两篇文章来学习:
|
||||||
|
|
||||||
- [第一次参与开源](https://github.com/firstcontributions/first-contributions/blob/main/translations/README.zh-cn.md)
|
|
||||||
- [如何优雅地在 GitHub 上贡献代码](https://segmentfault.com/a/1190000000736629)
|
- [如何优雅地在 GitHub 上贡献代码](https://segmentfault.com/a/1190000000736629)
|
||||||
|
- [第一次参与开源](https://github.com/firstcontributions/first-contributions/blob/master/translations/README.chs.md)
|
||||||
|
|
||||||
### Pull Request 规范
|
### Pull Request 规范
|
||||||
|
|
||||||
在提交 Pull Request 时,请注意:
|
在提交 Pull Request 时,请注意:
|
||||||
|
|
||||||
- 保持你的 PR 足够小,一个 PR 只解决单个问题或添加单个功能。
|
- 如果遇到问题,建议保持你的 PR 足够小。保证一个 PR 只解决单个问题、添加单个功能。
|
||||||
- 当新增组件或者修改原有组件时,记得增加或者修改对应的单元测试,保证代码的稳定。
|
- 当新增组件或者修改原有组件时,记得增加或者修改对应的单元测试,保证代码的稳定。
|
||||||
- 在 PR 中请添加合适的描述,并关联相关的 Issue。
|
- 在 PR 中请添加合适的描述,并关联相关的 Issue。
|
||||||
|
|
||||||
### Pull Request 流程
|
### Pull Request 流程
|
||||||
|
|
||||||
1. fork 主仓库,如果已经 fork 过,请同步主仓库的最新代码。
|
1. fork 主仓库,如果已经 fork 过,请同步主仓库的最新代码。
|
||||||
2. 基于 fork 后仓库的 main 分支新建一个分支,比如 `feature/button_color`。
|
2. 基于 fork 后仓库的 dev 分支新建一个分支,比如 `feature/button_color`。
|
||||||
3. 在新分支上进行开发,开发完成后,提 Pull Request 到主仓库的 main 分支。
|
3. 在新分支上进行开发,开发完成后,提 Pull Request 到主仓库的 dev 分支。
|
||||||
4. Pull Request 会在 Review 通过后被合并到主仓库。
|
4. Pull Request 会在 Review 通过后被合并到主仓库。
|
||||||
5. 等待 Vant 发布新版本,一般是每周一次。
|
5. 等待 Vant 发布新版本,一般是每周一次。
|
||||||
|
|
||||||
@ -125,15 +129,15 @@ src
|
|||||||
提 Pull Request 前,请依照下面的流程同步主仓库的最新代码:
|
提 Pull Request 前,请依照下面的流程同步主仓库的最新代码:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 添加主仓库到 remote
|
# 添加主仓库到 remote,作为 fork 后仓库的上游仓库
|
||||||
git remote add upstream git@github.com:vant-ui/vant.git
|
git remote add upstream git@github.com:vant-ui/vant.git
|
||||||
|
|
||||||
# 拉取主仓库最新代码
|
# 拉取主仓库最新代码
|
||||||
git fetch upstream
|
git fetch upstream
|
||||||
|
|
||||||
# 切换至 main 分支
|
# 切换至 dev 分支
|
||||||
git checkout main
|
git checkout dev
|
||||||
|
|
||||||
# 合并主仓库代码
|
# 合并主仓库代码
|
||||||
git merge upstream/main
|
git merge upstream/dev
|
||||||
```
|
```
|
||||||
|
@ -22,7 +22,7 @@ Contains color specifications, font specifications, and component design specifi
|
|||||||
|
|
||||||
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/tab_202009101415.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/tab_202009101415.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
||||||
|
|
||||||
<a class="design-download" href="https://github.com/vant-ui/vant/blob/main/packages/vant/docs/assets/design.sketch?raw=true">Download</a>
|
<a class="design-download" href="https://github.com/vant-ui/vant/blob/dev/packages/vant/docs/assets/design.sketch?raw=true">Download</a>
|
||||||
|
|
||||||
### Icons (Sketch)
|
### Icons (Sketch)
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ Contains icon library resources.
|
|||||||
|
|
||||||
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/design-icons-0321.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/design-icons-0321.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
||||||
|
|
||||||
<a class="design-download" href="https://github.com/vant-ui/vant/blob/main/packages/vant-icons/assets/icons.sketch?raw=true">Download</a>
|
<a class="design-download" href="https://github.com/vant-ui/vant/blob/dev/packages/vant-icons/assets/icons.sketch?raw=true">Download</a>
|
||||||
|
|
||||||
### Axure
|
### Axure
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/tab_202009101415.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/tab_202009101415.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
||||||
|
|
||||||
<a class="design-download" href="https://github.com/vant-ui/vant/blob/main/packages/vant/docs/assets/design.sketch?raw=true">下载</a>
|
<a class="design-download" href="https://github.com/vant-ui/vant/blob/dev/packages/vant/docs/assets/design.sketch?raw=true">下载</a>
|
||||||
|
|
||||||
### 图标设计稿(Sketch)
|
### 图标设计稿(Sketch)
|
||||||
|
|
||||||
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/design-icons-0321.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
<img src="https://fastly.jsdelivr.net/npm/@vant/assets/design-icons-0321.png" style="width: 80%; box-shadow: 0 1px 2px rgba(0,0,0,.2)">
|
||||||
|
|
||||||
<a class="design-download" href="https://github.com/vant-ui/vant/blob/main/packages/vant-icons/assets/icons.sketch?raw=true">下载</a>
|
<a class="design-download" href="https://github.com/vant-ui/vant/blob/dev/packages/vant-icons/assets/icons.sketch?raw=true">下载</a>
|
||||||
|
|
||||||
#### 在线资源
|
#### 在线资源
|
||||||
|
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
# FAQ
|
|
||||||
|
|
||||||
### How do I customize the style of Vant components?
|
|
||||||
|
|
||||||
#### 1. Theme customization
|
|
||||||
|
|
||||||
Vant provides the ability to customize the theme based on CSS variables, and can uniformly modify the component style. For details, see [ConfigProvider Global Configuration](#/en-US/config-provider) component.
|
|
||||||
|
|
||||||
#### 2. Overriding the default style
|
|
||||||
|
|
||||||
If the theme customization does not meet your needs, you can also override the default style using a **custom style class**, see the following example:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<template>
|
|
||||||
<van-button class="my-button">Button</van-button>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
/** Override the style of Button's root element */
|
|
||||||
.my-button {
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Override the style of Button's child elements */
|
|
||||||
.my-button.van-button__text {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
```
|
|
||||||
|
|
||||||
### Components not rendering correctly in HTML?
|
|
||||||
|
|
||||||
When using Vant components in HTML, you may encounter situations where some sample code may not render correctly, such as the following usage:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<van-cell-group>
|
|
||||||
<van-cell title="cell" value="content" />
|
|
||||||
<van-cell title="cell" value="content" />
|
|
||||||
</van-cell-group>
|
|
||||||
```
|
|
||||||
|
|
||||||
This is because HTML does not support self-closing custom elements, so syntax like `<van-cell />` is not recognized. Using a closing tag can work around this problem:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<van-cell-group>
|
|
||||||
<van-cell title="cell" value="content"></van-cell>
|
|
||||||
<van-cell title="cell" value="content"></van-cell>
|
|
||||||
</van-cell-group>
|
|
||||||
```
|
|
||||||
|
|
||||||
Self-closing custom elements are available in single-file components, string templates, and JSX, so this problem doesn't arise.
|
|
||||||
|
|
||||||
### Can't trigger the click feedback on iOS?
|
|
||||||
|
|
||||||
This is because iOS Safari does not trigger the `:active` pseudo-class by default. The solution is to add an empty `ontouchstart` attribute to the `body` tag:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<body ontouchstart="">
|
|
||||||
...
|
|
||||||
</body>
|
|
||||||
```
|
|
||||||
|
|
||||||
Reference link: [stackoverflow - :active pseudo-class doesn't work in mobile safari](https://stackoverflow.com/questions/3885018/active-pseudo-class-doesnt-work-in-mobile-safari/33681490#33681490)
|
|
||||||
|
|
||||||
### Why is there no Select component?
|
|
||||||
|
|
||||||
Select is a widely used component on the desktop, but its interactive form is not suitable for the mobile device.
|
|
||||||
|
|
||||||
On the mobile side, we recommend using the [Picker selector component](#/en-US/picker) instead.
|
|
||||||
|
|
||||||
### Is it supported in uni-app?
|
|
||||||
|
|
||||||
All components of Vant are implemented based on the Vue framework and are not adapted to uni-app, so the availability of each component under uni-app is not guaranteed.
|
|
||||||
|
|
||||||
If you encounter problems using Vant in uni-app, it is recommended to provide feedback to uni-app.
|
|
||||||
|
|
||||||
### Some components do not work on the desktop?
|
|
||||||
|
|
||||||
See [Adapt to PC Browsers](#/en-US/advanced-usage#adapt-to-pc-browsers).
|
|
||||||
|
|
||||||
### How do I implement mobile responsive adaptation?
|
|
||||||
|
|
||||||
See [Browser Adaptation](#/en-US/advanced-usage#browser-adaptation).
|
|
@ -50,7 +50,7 @@ Vant 基于 CSS 变量提供了主题定制的能力,可以对组件样式进
|
|||||||
|
|
||||||
在单文件组件、字符串模板和 JSX 中可以使用自闭合的自定义元素,因此不会出现这个问题。
|
在单文件组件、字符串模板和 JSX 中可以使用自闭合的自定义元素,因此不会出现这个问题。
|
||||||
|
|
||||||
### 在 iOS 上无法触发组件的点击反馈效果?
|
### 在 iOS 上点击组件时,无法触发点击反馈效果?
|
||||||
|
|
||||||
这是因为 iOS Safari 默认不会触发 `:active` 伪类,解决方法是在 `body` 标签上添加一个空的 `ontouchstart` 属性:
|
这是因为 iOS Safari 默认不会触发 `:active` 伪类,解决方法是在 `body` 标签上添加一个空的 `ontouchstart` 属性:
|
||||||
|
|
||||||
@ -68,12 +68,6 @@ Select 是桌面端常用的组件,但它的交互形式不适合移动端。
|
|||||||
|
|
||||||
在移动端,我们推荐使用 [Picker 选择器组件](#/zh-CN/picker) 作为代替。
|
在移动端,我们推荐使用 [Picker 选择器组件](#/zh-CN/picker) 作为代替。
|
||||||
|
|
||||||
### 是否支持在 uni-app 中使用?
|
|
||||||
|
|
||||||
Vant 所有组件都是基于 Vue 框架实现的,没有针对 uni-app 进行适配,因此不保证各个组件在 uni-app 下的可用性。
|
|
||||||
|
|
||||||
如果你在 uni-app 中使用 Vant 遇到问题,建议向 uni-app 进行反馈。
|
|
||||||
|
|
||||||
### 部分组件无法在桌面端进行操作?
|
### 部分组件无法在桌面端进行操作?
|
||||||
|
|
||||||
参见[桌面端适配](#/zh-CN/advanced-usage#zhuo-mian-duan-gua-pei)。
|
参见[桌面端适配](#/zh-CN/advanced-usage#zhuo-mian-duan-gua-pei)。
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user