diff --git a/packages/vant-cli/site/index.html b/packages/vant-cli/site/index.html index 98a063899..5764eeda9 100644 --- a/packages/vant-cli/site/index.html +++ b/packages/vant-cli/site/index.html @@ -30,7 +30,7 @@ <% } %> -
+ diff --git a/packages/vant-cli/site/mobile.html b/packages/vant-cli/site/mobile.html index 4d26f4752..e5ff77b7d 100644 --- a/packages/vant-cli/site/mobile.html +++ b/packages/vant-cli/site/mobile.html @@ -39,7 +39,7 @@ <% } %> - + diff --git a/packages/vant-cli/site/mobile/main.js b/packages/vant-cli/site/mobile/main.js index adb8a450d..3d85b1e2b 100644 --- a/packages/vant-cli/site/mobile/main.js +++ b/packages/vant-cli/site/mobile/main.js @@ -13,3 +13,8 @@ window.app = createApp(App) setTimeout(() => { window.app.mount('#app'); }, 0); + +// https://stackoverflow.com/questions/3885018/active-pseudo-class-doesnt-work-in-mobile-safari/33681490#33681490 +document.addEventListener('touchstart', () => {}, { + passive: true, +}); diff --git a/packages/vant/docs/markdown/quickstart.en-US.md b/packages/vant/docs/markdown/quickstart.en-US.md index eae856fa9..1314ae181 100644 --- a/packages/vant/docs/markdown/quickstart.en-US.md +++ b/packages/vant/docs/markdown/quickstart.en-US.md @@ -212,3 +212,24 @@ import 'vant/es/image-preview/style'; ``` > Tip: "Full Import" and "On-demand Import" should not be used at the same time, otherwise it will lead to problems such as code duplication and style overrides. + +## With Frameworks + +### Use Vant in Nuxt 3 + +When using Vant in Nuxt 3, you should add `/vant/` to the `build.transpile`: + +```ts +import { defineNuxtConfig } from 'nuxt'; + +export default defineNuxtConfig({ + experimental: { + externalVue: true, + }, +}); +``` + +Reference: + +- [nuxt/framework#6761](https://github.com/nuxt/framework/issues/6761) +- [nuxt/framework#4084](https://github.com/nuxt/framework/issues/4084) diff --git a/packages/vant/docs/markdown/quickstart.zh-CN.md b/packages/vant/docs/markdown/quickstart.zh-CN.md index b6dfbb2b5..151eba488 100644 --- a/packages/vant/docs/markdown/quickstart.zh-CN.md +++ b/packages/vant/docs/markdown/quickstart.zh-CN.md @@ -217,3 +217,24 @@ import 'vant/es/image-preview/style'; ``` > 提示:在单个项目中不应该同时使用「全量引入」和「按需引入」,否则会导致代码重复、样式错乱等问题。 + +## 在框架中使用 + +### 在 Nuxt 3 中使用 + +在 Nuxt 3 中使用 Vant 时,由于 Nuxt 3 框架本身的限制,需要在 `nuxt.config.ts` 中添加以下配置: + +```ts +import { defineNuxtConfig } from 'nuxt'; + +export default defineNuxtConfig({ + experimental: { + externalVue: true, + }, +}); +``` + +关于该问题的背景,可以参考以下 issue: + +- [nuxt/framework#6761](https://github.com/nuxt/framework/issues/6761) +- [nuxt/framework#4084](https://github.com/nuxt/framework/issues/4084) diff --git a/packages/vant/src/calendar/Calendar.tsx b/packages/vant/src/calendar/Calendar.tsx index bee36ba3c..3cbd9ed60 100644 --- a/packages/vant/src/calendar/Calendar.tsx +++ b/packages/vant/src/calendar/Calendar.tsx @@ -134,7 +134,7 @@ export default defineComponent({ }; const getInitialDate = (defaultDate = props.defaultDate) => { - const { type, minDate, maxDate } = props; + const { type, minDate, maxDate, allowSameDay } = props; if (defaultDate === null) { return defaultDate; @@ -149,9 +149,12 @@ export default defineComponent({ const start = limitDateRange( defaultDate[0] || now, minDate, - getPrevDay(maxDate) + allowSameDay ? maxDate : getPrevDay(maxDate) + ); + const end = limitDateRange( + defaultDate[1] || now, + allowSameDay ? minDate : getNextDay(minDate) ); - const end = limitDateRange(defaultDate[1] || now, getNextDay(minDate)); return [start, end]; } diff --git a/packages/vant/src/calendar/test/prop.spec.ts b/packages/vant/src/calendar/test/prop.spec.ts index 434ddcd08..aa6ea5bb6 100644 --- a/packages/vant/src/calendar/test/prop.spec.ts +++ b/packages/vant/src/calendar/test/prop.spec.ts @@ -270,3 +270,41 @@ test('should emit overRange when exceeded max range', async () => { expect(onOverRange).toHaveBeenCalledTimes(1); }); + +test('should allow default date to be minDate when using allowSameDay prop', () => { + const minDate = new Date(1800, 0, 1); + const maxDate = new Date(1800, 0, 29); + const wrapper = mount(Calendar, { + props: { + type: 'range', + poppable: false, + minDate, + maxDate, + defaultDate: [minDate, minDate], + lazyRender: false, + allowSameDay: true, + }, + }); + + wrapper.find('.van-calendar__confirm').trigger('click'); + expect(wrapper.emitted<[Date]>('confirm')![0][0]).toEqual([minDate, minDate]); +}); + +test('should allow default date to be maxDate when using allowSameDay prop', () => { + const minDate = new Date(1800, 0, 1); + const maxDate = new Date(1800, 0, 29); + const wrapper = mount(Calendar, { + props: { + type: 'range', + poppable: false, + minDate, + maxDate, + defaultDate: [maxDate, maxDate], + lazyRender: false, + allowSameDay: true, + }, + }); + + wrapper.find('.van-calendar__confirm').trigger('click'); + expect(wrapper.emitted<[Date]>('confirm')![0][0]).toEqual([maxDate, maxDate]); +}); diff --git a/packages/vant/src/field/Field.tsx b/packages/vant/src/field/Field.tsx index 022d751bc..ef8ad3e91 100644 --- a/packages/vant/src/field/Field.tsx +++ b/packages/vant/src/field/Field.tsx @@ -26,6 +26,7 @@ import { makeStringProp, makeNumericProp, createNamespace, + type ComponentInstance, } from '../utils'; import { cutString, @@ -42,7 +43,11 @@ import { import { cellSharedProps } from '../cell/Cell'; // Composables -import { CUSTOM_FIELD_INJECTION_KEY, useParent } from '@vant/use'; +import { + useParent, + useEventListener, + CUSTOM_FIELD_INJECTION_KEY, +} from '@vant/use'; import { useId } from '../composables/use-id'; import { useExpose } from '../composables/use-expose'; @@ -145,6 +150,7 @@ export default defineComponent({ }); const inputRef = ref