vant 3.2.8 → 3.3.3-beta.nuxt3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/es/address-edit/AddressEdit.js +154 -180
  2. package/es/address-edit/AddressEditDetail.d.ts +10 -9
  3. package/es/address-edit/AddressEditDetail.js +6 -6
  4. package/es/button/Button.js +2 -2
  5. package/es/calendar/Calendar.js +8 -14
  6. package/es/calendar/CalendarHeader.js +1 -3
  7. package/es/calendar/CalendarMonth.js +11 -10
  8. package/es/calendar/types.d.ts +1 -1
  9. package/es/cascader/Cascader.js +10 -2
  10. package/es/checkbox/Checker.js +1 -1
  11. package/es/checkbox/types.d.ts +2 -6
  12. package/es/composables/use-id.d.ts +1 -0
  13. package/es/composables/use-id.js +14 -0
  14. package/es/composables/use-route.d.ts +1 -1
  15. package/es/composables/use-route.js +4 -4
  16. package/es/count-down/CountDown.js +1 -0
  17. package/es/coupon-list/CouponList.js +40 -24
  18. package/es/coupon-list/index.css +1 -1
  19. package/es/coupon-list/index.less +0 -5
  20. package/es/dropdown-item/DropdownItem.js +7 -2
  21. package/es/dropdown-item/types.d.ts +2 -6
  22. package/es/dropdown-menu/DropdownMenu.js +7 -3
  23. package/es/dropdown-menu/types.d.ts +1 -0
  24. package/es/empty/Network.js +22 -34
  25. package/es/field/Field.d.ts +1 -1
  26. package/es/field/Field.js +13 -5
  27. package/es/field/index.d.ts +2 -2
  28. package/es/field/types.d.ts +7 -6
  29. package/es/form/Form.js +2 -2
  30. package/es/image/Image.js +4 -9
  31. package/es/image-preview/ImagePreview.js +3 -4
  32. package/es/index.d.ts +1 -1
  33. package/es/index.js +1 -1
  34. package/es/lazyload/index.d.ts +1 -1
  35. package/es/lazyload/index.js +1 -1
  36. package/es/lazyload/vue-lazyload/index.d.ts +55 -0
  37. package/es/lazyload/vue-lazyload/index.js +46 -0
  38. package/es/lazyload/vue-lazyload/lazy-component.js +53 -0
  39. package/es/lazyload/vue-lazyload/lazy-container.js +98 -0
  40. package/es/lazyload/vue-lazyload/lazy-image.js +115 -0
  41. package/es/lazyload/vue-lazyload/lazy.js +507 -0
  42. package/es/lazyload/vue-lazyload/listener.js +241 -0
  43. package/es/lazyload/vue-lazyload/util.js +183 -0
  44. package/es/list/List.js +3 -1
  45. package/es/locale/lang/pt-BR.d.ts +73 -0
  46. package/es/locale/lang/pt-BR.js +72 -0
  47. package/es/number-keyboard/NumberKeyboardKey.js +4 -4
  48. package/es/pagination/Pagination.js +67 -49
  49. package/es/pagination/index.css +1 -1
  50. package/es/pagination/index.less +32 -31
  51. package/es/password-input/PasswordInput.d.ts +1 -1
  52. package/es/password-input/index.d.ts +1 -1
  53. package/es/popover/Popover.js +2 -0
  54. package/es/popup/Popup.d.ts +1 -2
  55. package/es/popup/Popup.js +2 -5
  56. package/es/popup/index.d.ts +1 -2
  57. package/es/rate/Rate.js +5 -3
  58. package/es/search/Search.js +8 -2
  59. package/es/sidebar/Sidebar.js +1 -0
  60. package/es/sidebar-item/SidebarItem.js +4 -1
  61. package/es/slider/Slider.js +5 -3
  62. package/es/stepper/Stepper.js +11 -8
  63. package/es/swipe/Swipe.js +11 -6
  64. package/es/swipe/index.css +1 -1
  65. package/es/swipe/index.less +2 -0
  66. package/es/swipe/types.d.ts +1 -3
  67. package/es/switch/Switch.js +1 -0
  68. package/es/switch/index.css +1 -1
  69. package/es/switch/index.less +2 -0
  70. package/es/tab/Tab.js +18 -5
  71. package/es/tab/index.css +1 -1
  72. package/es/tab/index.less +1 -1
  73. package/es/tabbar/Tabbar.d.ts +1 -1
  74. package/es/tabbar/Tabbar.js +10 -10
  75. package/es/tabbar-item/TabbarItem.js +16 -7
  76. package/es/tabs/Tabs.js +10 -5
  77. package/es/tabs/TabsTitle.d.ts +6 -0
  78. package/es/tabs/TabsTitle.js +7 -1
  79. package/es/tabs/types.d.ts +1 -0
  80. package/es/uploader/UploaderPreviewItem.js +4 -1
  81. package/es/uploader/utils.d.ts +2 -2
  82. package/es/uploader/utils.js +2 -2
  83. package/es/utils/dom.d.ts +1 -0
  84. package/es/utils/dom.js +6 -2
  85. package/es/utils/format.js +6 -5
  86. package/es/vue-tsx-shim.d.ts +1 -0
  87. package/lib/address-edit/AddressEdit.js +155 -180
  88. package/lib/address-edit/AddressEditDetail.d.ts +10 -9
  89. package/lib/address-edit/AddressEditDetail.js +6 -6
  90. package/lib/button/Button.js +1 -1
  91. package/lib/calendar/Calendar.js +8 -14
  92. package/lib/calendar/CalendarHeader.js +1 -3
  93. package/lib/calendar/CalendarMonth.js +11 -10
  94. package/lib/calendar/types.d.ts +1 -1
  95. package/lib/cascader/Cascader.js +10 -2
  96. package/lib/checkbox/Checker.js +1 -1
  97. package/lib/checkbox/types.d.ts +2 -6
  98. package/lib/composables/use-id.d.ts +1 -0
  99. package/lib/composables/use-id.js +21 -0
  100. package/lib/composables/use-route.d.ts +1 -1
  101. package/lib/composables/use-route.js +4 -4
  102. package/lib/count-down/CountDown.js +1 -0
  103. package/lib/coupon-list/CouponList.js +39 -22
  104. package/lib/coupon-list/index.css +1 -1
  105. package/lib/coupon-list/index.less +0 -5
  106. package/lib/dropdown-item/DropdownItem.js +7 -2
  107. package/lib/dropdown-item/types.d.ts +2 -6
  108. package/lib/dropdown-menu/DropdownMenu.js +7 -2
  109. package/lib/dropdown-menu/types.d.ts +1 -0
  110. package/lib/empty/Network.js +22 -34
  111. package/lib/field/Field.d.ts +1 -1
  112. package/lib/field/Field.js +14 -5
  113. package/lib/field/index.d.ts +2 -2
  114. package/lib/field/types.d.ts +7 -6
  115. package/lib/form/Form.js +1 -1
  116. package/lib/image/Image.js +4 -9
  117. package/lib/image-preview/ImagePreview.js +1 -2
  118. package/lib/index.css +1 -1
  119. package/lib/index.d.ts +1 -1
  120. package/lib/index.js +1 -1
  121. package/lib/lazyload/index.d.ts +1 -1
  122. package/lib/lazyload/index.js +3 -3
  123. package/lib/lazyload/vue-lazyload/index.d.ts +55 -0
  124. package/lib/lazyload/vue-lazyload/index.js +58 -0
  125. package/lib/lazyload/vue-lazyload/lazy-component.js +62 -0
  126. package/lib/lazyload/vue-lazyload/lazy-container.js +106 -0
  127. package/lib/lazyload/vue-lazyload/lazy-image.js +125 -0
  128. package/lib/lazyload/vue-lazyload/lazy.js +520 -0
  129. package/lib/lazyload/vue-lazyload/listener.js +251 -0
  130. package/lib/lazyload/vue-lazyload/util.js +213 -0
  131. package/lib/list/List.js +3 -1
  132. package/lib/locale/lang/pt-BR.d.ts +73 -0
  133. package/lib/locale/lang/pt-BR.js +77 -0
  134. package/lib/number-keyboard/NumberKeyboardKey.js +3 -3
  135. package/lib/pagination/Pagination.js +65 -47
  136. package/lib/pagination/index.css +1 -1
  137. package/lib/pagination/index.less +32 -31
  138. package/lib/password-input/PasswordInput.d.ts +1 -1
  139. package/lib/password-input/index.d.ts +1 -1
  140. package/lib/popover/Popover.js +2 -0
  141. package/lib/popup/Popup.d.ts +1 -2
  142. package/lib/popup/Popup.js +2 -5
  143. package/lib/popup/index.d.ts +1 -2
  144. package/lib/rate/Rate.js +5 -3
  145. package/lib/search/Search.js +9 -2
  146. package/lib/sidebar/Sidebar.js +1 -0
  147. package/lib/sidebar-item/SidebarItem.js +4 -1
  148. package/lib/slider/Slider.js +5 -3
  149. package/lib/ssr.js +7 -0
  150. package/lib/ssr.mjs +1 -0
  151. package/lib/stepper/Stepper.js +11 -8
  152. package/lib/swipe/Swipe.js +9 -4
  153. package/lib/swipe/index.css +1 -1
  154. package/lib/swipe/index.less +2 -0
  155. package/lib/swipe/types.d.ts +1 -3
  156. package/lib/switch/Switch.js +1 -0
  157. package/lib/switch/index.css +1 -1
  158. package/lib/switch/index.less +2 -0
  159. package/lib/tab/Tab.js +20 -5
  160. package/lib/tab/index.css +1 -1
  161. package/lib/tab/index.less +1 -1
  162. package/lib/tabbar/Tabbar.d.ts +1 -1
  163. package/lib/tabbar/Tabbar.js +10 -10
  164. package/lib/tabbar-item/TabbarItem.js +16 -7
  165. package/lib/tabs/Tabs.js +9 -3
  166. package/lib/tabs/TabsTitle.d.ts +6 -0
  167. package/lib/tabs/TabsTitle.js +7 -1
  168. package/lib/tabs/types.d.ts +1 -0
  169. package/lib/uploader/UploaderPreviewItem.js +3 -0
  170. package/lib/uploader/utils.d.ts +2 -2
  171. package/lib/uploader/utils.js +3 -2
  172. package/lib/utils/dom.d.ts +1 -0
  173. package/lib/utils/dom.js +9 -2
  174. package/lib/utils/format.js +7 -5
  175. package/lib/vant.cjs.js +14407 -0
  176. package/lib/vant.cjs.min.js +1 -0
  177. package/lib/vant.es.js +1125 -2186
  178. package/lib/vant.es.min.js +1125 -2186
  179. package/lib/vant.js +1109 -1089
  180. package/lib/vant.min.js +1 -1
  181. package/lib/vue-tsx-shim.d.ts +1 -0
  182. package/package.json +26 -11
  183. package/vetur/attributes.json +557 -557
  184. package/vetur/tags.json +183 -183
  185. package/vetur/web-types.json +1577 -1577
  186. package/es/composables/use-link-field.d.ts +0 -0
  187. package/es/composables/use-link-field.js +0 -0
  188. package/lib/composables/use-link-field.d.ts +0 -0
  189. package/lib/composables/use-link-field.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { createVNode as _createVNode } from "vue";
2
- import { computed, watch, defineComponent } from 'vue';
3
- import { BORDER, makeStringProp, makeNumberProp, makeNumericProp, createNamespace } from '../utils';
2
+ import { computed, watchEffect, defineComponent } from 'vue';
3
+ import { clamp, makeStringProp, makeNumberProp, makeNumericProp, createNamespace, BORDER_SURROUND } from '../utils';
4
4
  var [name, bem, t] = createNamespace('pagination');
5
5
 
6
6
  var makePage = (number, text, active) => ({
@@ -46,12 +46,7 @@ export default defineComponent({
46
46
  var {
47
47
  modelValue,
48
48
  forceEllipses
49
- } = props;
50
-
51
- if (props.mode !== 'multi') {
52
- return items;
53
- } // Default page limits
54
-
49
+ } = props; // Default page limits
55
50
 
56
51
  var startPage = 1;
57
52
  var endPage = pageCount;
@@ -90,59 +85,82 @@ export default defineComponent({
90
85
  return items;
91
86
  });
92
87
 
93
- var select = (page, emitChange) => {
94
- page = Math.min(count.value, Math.max(1, page));
88
+ var updateModelValue = (value, emitChange) => {
89
+ value = clamp(value, 1, count.value);
95
90
 
96
- if (props.modelValue !== page) {
97
- emit('update:modelValue', page);
91
+ if (props.modelValue !== value) {
92
+ emit('update:modelValue', value);
98
93
 
99
94
  if (emitChange) {
100
- emit('change', page);
95
+ emit('change', value);
101
96
  }
102
97
  }
103
- };
98
+ }; // format modelValue
104
99
 
105
- watch(() => props.modelValue, value => {
106
- select(value);
107
- }, {
108
- immediate: true
109
- });
110
-
111
- var renderDesc = () => {
112
- if (props.mode !== 'multi') {
113
- return _createVNode("li", {
114
- "class": bem('page-desc')
115
- }, [slots.pageDesc ? slots.pageDesc() : props.modelValue + "/" + count.value]);
116
- }
117
- };
118
100
 
119
- return () => {
120
- var value = props.modelValue;
121
- var simple = props.mode !== 'multi';
101
+ watchEffect(() => updateModelValue(props.modelValue));
122
102
 
123
- var onSelect = value => () => select(value, true);
103
+ var renderDesc = () => _createVNode("li", {
104
+ "class": bem('page-desc')
105
+ }, [slots.pageDesc ? slots.pageDesc() : props.modelValue + "/" + count.value]);
124
106
 
125
- return _createVNode("ul", {
126
- "class": bem({
127
- simple
128
- })
129
- }, [_createVNode("li", {
130
- "class": [bem('item', {
131
- disabled: value === 1
132
- }), bem('prev'), BORDER],
133
- "onClick": onSelect(value - 1)
134
- }, [slots['prev-text'] ? slots['prev-text']() : props.prevText || t('prev')]), pages.value.map(page => _createVNode("li", {
107
+ var renderPrevButton = () => {
108
+ var {
109
+ mode,
110
+ modelValue
111
+ } = props;
112
+ var slot = slots['prev-text'];
113
+ var disabled = modelValue === 1;
114
+ return _createVNode("li", {
135
115
  "class": [bem('item', {
136
- active: page.active
137
- }), bem('page'), BORDER],
138
- "onClick": onSelect(page.number)
139
- }, [slots.page ? slots.page(page) : page.text])), renderDesc(), _createVNode("li", {
116
+ disabled,
117
+ border: mode === 'simple',
118
+ prev: true
119
+ }), BORDER_SURROUND]
120
+ }, [_createVNode("button", {
121
+ "type": "button",
122
+ "disabled": disabled,
123
+ "onClick": () => updateModelValue(modelValue - 1)
124
+ }, [slot ? slot() : props.prevText || t('prev')])]);
125
+ };
126
+
127
+ var renderNextButton = () => {
128
+ var {
129
+ mode,
130
+ modelValue
131
+ } = props;
132
+ var slot = slots['next-text'];
133
+ var disabled = modelValue === count.value;
134
+ return _createVNode("li", {
140
135
  "class": [bem('item', {
141
- disabled: value === count.value
142
- }), bem('next'), BORDER],
143
- "onClick": onSelect(value + 1)
144
- }, [slots['next-text'] ? slots['next-text']() : props.nextText || t('next')])]);
136
+ disabled,
137
+ border: mode === 'simple',
138
+ next: true
139
+ }), BORDER_SURROUND]
140
+ }, [_createVNode("button", {
141
+ "type": "button",
142
+ "disabled": disabled,
143
+ "onClick": () => updateModelValue(modelValue + 1)
144
+ }, [slot ? slot() : props.nextText || t('next')])]);
145
145
  };
146
+
147
+ var renderPages = () => pages.value.map(page => _createVNode("li", {
148
+ "class": [bem('item', {
149
+ active: page.active,
150
+ page: true
151
+ }), BORDER_SURROUND]
152
+ }, [_createVNode("button", {
153
+ "type": "button",
154
+ "aria-current": page.active || undefined,
155
+ "onClick": () => updateModelValue(page.number)
156
+ }, [slots.page ? slots.page(page) : page.text])]));
157
+
158
+ return () => _createVNode("nav", {
159
+ "role": "navigation",
160
+ "class": bem()
161
+ }, [_createVNode("ul", {
162
+ "class": bem('items')
163
+ }, [renderPrevButton(), props.mode === 'simple' ? renderDesc() : renderPages(), renderNextButton()])]);
146
164
  }
147
165
 
148
166
  });
@@ -1 +1 @@
1
- :root{--van-pagination-height:40px;--van-pagination-font-size:var(--van-font-size-md);--van-pagination-item-width:36px;--van-pagination-item-default-color:var(--van-primary-color);--van-pagination-item-disabled-color:var(--van-gray-7);--van-pagination-item-disabled-background-color:var(--van-background-color);--van-pagination-background-color:var(--van-background-color-light);--van-pagination-desc-color:var(--van-gray-7);--van-pagination-disabled-opacity:var(--van-disabled-opacity)}.van-pagination{display:flex;font-size:var(--van-pagination-font-size)}.van-pagination__item,.van-pagination__page-desc{display:flex;align-items:center;justify-content:center}.van-pagination__item{flex:1;box-sizing:border-box;min-width:var(--van-pagination-item-width);height:var(--van-pagination-height);color:var(--van-pagination-item-default-color);background:var(--van-pagination-background-color);cursor:pointer;-webkit-user-select:none;user-select:none}.van-pagination__item:active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item::after{border-width:var(--van-border-width-base) 0 var(--van-border-width-base) var(--van-border-width-base)}.van-pagination__item:last-child::after{border-right-width:var(--van-border-width-base)}.van-pagination__item--active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__next,.van-pagination__prev{padding:0 var(--van-padding-base);cursor:pointer}.van-pagination__item--disabled,.van-pagination__item--disabled:active{color:var(--van-pagination-item-disabled-color);background-color:var(--van-pagination-item-disabled-background-color);cursor:not-allowed;opacity:var(--van-pagination-disabled-opacity)}.van-pagination__page{flex-grow:0}.van-pagination__page-desc{flex:1;height:var(--van-pagination-height);color:var(--van-pagination-desc-color)}.van-pagination--simple .van-pagination__next::after,.van-pagination--simple .van-pagination__prev::after{border-width:var(--van-border-width-base)}
1
+ :root{--van-pagination-height:40px;--van-pagination-font-size:var(--van-font-size-md);--van-pagination-item-width:36px;--van-pagination-item-default-color:var(--van-primary-color);--van-pagination-item-disabled-color:var(--van-gray-7);--van-pagination-item-disabled-background-color:var(--van-background-color);--van-pagination-background-color:var(--van-background-color-light);--van-pagination-desc-color:var(--van-gray-7);--van-pagination-disabled-opacity:var(--van-disabled-opacity)}.van-pagination{font-size:var(--van-pagination-font-size)}.van-pagination__items{display:flex}.van-pagination__item,.van-pagination__page-desc{display:flex;align-items:center;justify-content:center}.van-pagination__item{flex:1;box-sizing:border-box;min-width:var(--van-pagination-item-width);height:var(--van-pagination-height);color:var(--van-pagination-item-default-color);background:var(--van-pagination-background-color);cursor:pointer;-webkit-user-select:none;user-select:none}.van-pagination__item button{flex:1;height:100%;border:none;padding:0;background:0 0}.van-pagination__item button[disabled]{cursor:not-allowed}.van-pagination__item:active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item:not(:last-child)::after{border-right-width:0}.van-pagination__item--active{color:var(--van-white);background-color:var(--van-pagination-item-default-color)}.van-pagination__item--page{flex-grow:0}.van-pagination__item--next,.van-pagination__item--prev{padding:0 var(--van-padding-base);cursor:pointer}.van-pagination__item--border::after{border-width:var(--van-border-width-base)}.van-pagination__item--disabled{color:var(--van-pagination-item-disabled-color);background-color:var(--van-pagination-item-disabled-background-color);opacity:var(--van-pagination-disabled-opacity)}.van-pagination__page-desc{flex:1;height:var(--van-pagination-height);color:var(--van-pagination-desc-color)}
@@ -13,9 +13,12 @@
13
13
  }
14
14
 
15
15
  .van-pagination {
16
- display: flex;
17
16
  font-size: var(--van-pagination-font-size);
18
17
 
18
+ &__items {
19
+ display: flex;
20
+ }
21
+
19
22
  &__item,
20
23
  &__page-desc {
21
24
  display: flex;
@@ -33,58 +36,56 @@
33
36
  cursor: pointer;
34
37
  user-select: none;
35
38
 
39
+ button {
40
+ flex: 1;
41
+ height: 100%;
42
+ border: none;
43
+ padding: 0;
44
+ background: transparent;
45
+
46
+ &[disabled] {
47
+ cursor: not-allowed;
48
+ }
49
+ }
50
+
36
51
  &:active {
37
52
  color: var(--van-white);
38
53
  background-color: var(--van-pagination-item-default-color);
39
54
  }
40
55
 
41
- &::after {
42
- border-width: var(--van-border-width-base) 0 var(--van-border-width-base)
43
- var(--van-border-width-base);
44
- }
45
-
46
- &:last-child::after {
47
- border-right-width: var(--van-border-width-base);
56
+ &:not(:last-child)::after {
57
+ border-right-width: 0;
48
58
  }
49
59
 
50
60
  &--active {
51
61
  color: var(--van-white);
52
62
  background-color: var(--van-pagination-item-default-color);
53
63
  }
54
- }
55
64
 
56
- &__prev,
57
- &__next {
58
- padding: 0 var(--van-padding-base);
59
- cursor: pointer;
60
- }
65
+ &--page {
66
+ flex-grow: 0;
67
+ }
61
68
 
62
- &__item--disabled {
63
- &,
64
- &:active {
69
+ &--prev,
70
+ &--next {
71
+ padding: 0 var(--van-padding-base);
72
+ cursor: pointer;
73
+ }
74
+
75
+ &--border::after {
76
+ border-width: var(--van-border-width-base);
77
+ }
78
+
79
+ &--disabled {
65
80
  color: var(--van-pagination-item-disabled-color);
66
81
  background-color: var(--van-pagination-item-disabled-background-color);
67
- cursor: not-allowed;
68
82
  opacity: var(--van-pagination-disabled-opacity);
69
83
  }
70
84
  }
71
85
 
72
- &__page {
73
- flex-grow: 0;
74
- }
75
-
76
86
  &__page-desc {
77
87
  flex: 1;
78
88
  height: var(--van-pagination-height);
79
89
  color: var(--van-pagination-desc-color);
80
90
  }
81
-
82
- &--simple {
83
- .van-pagination__prev,
84
- .van-pagination__next {
85
- &::after {
86
- border-width: var(--van-border-width-base);
87
- }
88
- }
89
- }
90
91
  }
@@ -49,9 +49,9 @@ declare const _default: import("vue").DefineComponent<{
49
49
  value: string;
50
50
  focused: boolean;
51
51
  } & {
52
- errorInfo?: string | undefined;
53
52
  gutter?: string | number | undefined;
54
53
  info?: string | undefined;
54
+ errorInfo?: string | undefined;
55
55
  }> & {
56
56
  onFocus?: ((...args: any[]) => any) | undefined;
57
57
  }, {
@@ -29,9 +29,9 @@ export declare const PasswordInput: import("../utils").WithInstall<import("vue")
29
29
  value: string;
30
30
  focused: boolean;
31
31
  } & {
32
- errorInfo?: string | undefined;
33
32
  gutter?: string | number | undefined;
34
33
  info?: string | undefined;
34
+ errorInfo?: string | undefined;
35
35
  }> & {
36
36
  onFocus?: ((...args: any[]) => any) | undefined;
37
37
  }, {
@@ -135,6 +135,8 @@ export default defineComponent({
135
135
  "style": {
136
136
  color
137
137
  },
138
+ "tabindex": disabled ? undefined : 0,
139
+ "aria-disabled": disabled || undefined,
138
140
  "onClick": () => onClickAction(action, index)
139
141
  }, [icon && _createVNode(Icon, {
140
142
  "name": icon,
@@ -91,7 +91,7 @@ declare const _default: import("vue").DefineComponent<{
91
91
  default: PopupCloseIconPosition;
92
92
  };
93
93
  safeAreaInsetBottom: BooleanConstructor;
94
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("open" | "click" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon")[], "open" | "click" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
94
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("open" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon")[], "open" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
95
95
  show?: unknown;
96
96
  zIndex?: unknown;
97
97
  overlay?: unknown;
@@ -137,7 +137,6 @@ declare const _default: import("vue").DefineComponent<{
137
137
  overlayClass?: unknown;
138
138
  transition?: string | undefined;
139
139
  }> & {
140
- onClick?: ((...args: any[]) => any) | undefined;
141
140
  onOpen?: ((...args: any[]) => any) | undefined;
142
141
  onClose?: ((...args: any[]) => any) | undefined;
143
142
  onOpened?: ((...args: any[]) => any) | undefined;
package/es/popup/Popup.js CHANGED
@@ -29,7 +29,7 @@ export default defineComponent({
29
29
  name,
30
30
  inheritAttrs: false,
31
31
  props: popupProps,
32
- emits: ['open', 'close', 'click', 'opened', 'closed', 'update:show', 'click-overlay', 'click-close-icon'],
32
+ emits: ['open', 'close', 'opened', 'closed', 'update:show', 'click-overlay', 'click-close-icon'],
33
33
 
34
34
  setup(props, _ref) {
35
35
  var {
@@ -121,8 +121,6 @@ export default defineComponent({
121
121
  }
122
122
  };
123
123
 
124
- var onClick = event => emit('click', event);
125
-
126
124
  var onOpened = () => emit('opened');
127
125
 
128
126
  var onClosed = () => emit('closed');
@@ -141,8 +139,7 @@ export default defineComponent({
141
139
  [position]: position
142
140
  }), {
143
141
  'van-safe-area-bottom': safeAreaInsetBottom
144
- }],
145
- "onClick": onClick
142
+ }]
146
143
  }, attrs), [slots.default == null ? void 0 : slots.default(), renderCloseIcon()]), [[_vShow, props.show]]);
147
144
  });
148
145
 
@@ -42,7 +42,7 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
42
42
  default: import("./Popup").PopupCloseIconPosition;
43
43
  };
44
44
  safeAreaInsetBottom: BooleanConstructor;
45
- }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("open" | "click" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon")[], "open" | "click" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
45
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("open" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon")[], "open" | "close" | "opened" | "closed" | "update:show" | "click-overlay" | "click-close-icon", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
46
46
  show?: unknown;
47
47
  zIndex?: unknown;
48
48
  overlay?: unknown;
@@ -88,7 +88,6 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
88
88
  overlayClass?: unknown;
89
89
  transition?: string | undefined;
90
90
  }> & {
91
- onClick?: ((...args: any[]) => any) | undefined;
92
91
  onOpen?: ((...args: any[]) => any) | undefined;
93
92
  onClose?: ((...args: any[]) => any) | undefined;
94
93
  onOpened?: ((...args: any[]) => any) | undefined;
package/es/rate/Rate.js CHANGED
@@ -172,8 +172,8 @@ export default defineComponent({
172
172
  "role": "radio",
173
173
  "style": style,
174
174
  "class": bem('item'),
175
- "tabindex": 0,
176
- "aria-setsize": +count,
175
+ "tabindex": disabled ? undefined : 0,
176
+ "aria-setsize": count,
177
177
  "aria-posinset": score,
178
178
  "aria-checked": !isVoid,
179
179
  "onClick": onClickItem
@@ -208,7 +208,9 @@ export default defineComponent({
208
208
  readonly: props.readonly,
209
209
  disabled: props.disabled
210
210
  }),
211
- "tabindex": 0,
211
+ "tabindex": props.disabled ? undefined : 0,
212
+ "aria-disabled": props.disabled,
213
+ "aria-readonly": props.readonly,
212
214
  "onTouchstart": onTouchStart,
213
215
  "onTouchmove": onTouchMove
214
216
  }, [list.value.map(renderStar)]);
@@ -4,6 +4,7 @@ import { ref, defineComponent } from 'vue'; // Utils
4
4
  import { pick, extend, truthProp, preventDefault, makeStringProp, createNamespace } from '../utils';
5
5
  import { fieldSharedProps } from '../field/Field'; // Composables
6
6
 
7
+ import { useId } from '../composables/use-id';
7
8
  import { useExpose } from '../composables/use-expose'; // Components
8
9
 
9
10
  import { Field } from '../field'; // Types
@@ -29,6 +30,7 @@ export default defineComponent({
29
30
  slots,
30
31
  attrs
31
32
  } = _ref;
33
+ var id = useId();
32
34
  var filedRef = ref();
33
35
 
34
36
  var onCancel = () => {
@@ -47,11 +49,13 @@ export default defineComponent({
47
49
  }
48
50
  };
49
51
 
52
+ var getInputId = () => props.id || id + "-input";
53
+
50
54
  var renderLabel = () => {
51
55
  if (slots.label || props.label) {
52
56
  return _createVNode("label", {
53
57
  "class": bem('label'),
54
- "for": props.id
58
+ "for": getInputId()
55
59
  }, [slots.label ? slots.label() : props.label]);
56
60
  }
57
61
  };
@@ -83,7 +87,9 @@ export default defineComponent({
83
87
  var fieldPropNames = Object.keys(fieldSharedProps);
84
88
 
85
89
  var renderField = () => {
86
- var fieldAttrs = extend({}, attrs, pick(props, fieldPropNames));
90
+ var fieldAttrs = extend({}, attrs, pick(props, fieldPropNames), {
91
+ id: getInputId()
92
+ });
87
93
 
88
94
  var onInput = value => emit('update:modelValue', value);
89
95
 
@@ -35,6 +35,7 @@ export default defineComponent({
35
35
  setActive
36
36
  });
37
37
  return () => _createVNode("div", {
38
+ "role": "tablist",
38
39
  "class": bem()
39
40
  }, [slots.default == null ? void 0 : slots.default()]);
40
41
  }
@@ -57,11 +57,14 @@ export default defineComponent({
57
57
  disabled
58
58
  } = props;
59
59
  var selected = index.value === parent.getActive();
60
- return _createVNode("a", {
60
+ return _createVNode("div", {
61
+ "role": "tab",
61
62
  "class": bem({
62
63
  select: selected,
63
64
  disabled
64
65
  }),
66
+ "tabindex": disabled ? undefined : 0,
67
+ "aria-selected": selected,
65
68
  "onClick": onClick
66
69
  }, [_createVNode(Badge, {
67
70
  "dot": dot,
@@ -285,10 +285,12 @@ export default defineComponent({
285
285
  return _createVNode("div", {
286
286
  "role": "slider",
287
287
  "class": getButtonClassName(index),
288
- "tabindex": props.disabled || props.readonly ? -1 : 0,
289
- "aria-valuemin": +props.min,
288
+ "tabindex": props.disabled ? undefined : 0,
289
+ "aria-valuemin": props.min,
290
290
  "aria-valuenow": current,
291
- "aria-valuemax": +props.max,
291
+ "aria-valuemax": props.max,
292
+ "aria-disabled": props.disabled || undefined,
293
+ "aria-readonly": props.readonly || undefined,
292
294
  "aria-orientation": props.vertical ? 'vertical' : 'horizontal',
293
295
  "onTouchstart": event => {
294
296
  if (typeof index === 'number') {
@@ -211,14 +211,14 @@ export default defineComponent({
211
211
  // fix mobile safari page scroll down issue
212
212
  // see: https://github.com/youzan/vant/issues/7690
213
213
  if (props.disableInput) {
214
- event.preventDefault();
214
+ preventDefault(event);
215
215
  }
216
216
  };
217
217
 
218
218
  var createListeners = type => ({
219
219
  onClick: event => {
220
220
  // disable double tap scrolling on mobile safari
221
- event.preventDefault();
221
+ preventDefault(event);
222
222
  actionType = type;
223
223
  onChange();
224
224
  },
@@ -230,7 +230,7 @@ export default defineComponent({
230
230
  onTouchcancel: onTouchEnd
231
231
  });
232
232
 
233
- watch([() => props.max, () => props.min, () => props.integer, () => props.decimalLength], check);
233
+ watch(() => [props.max, props.min, props.integer, props.decimalLength], check);
234
234
  watch(() => props.modelValue, value => {
235
235
  if (!isEqual(value, current.value)) {
236
236
  current.value = format(value);
@@ -244,6 +244,7 @@ export default defineComponent({
244
244
  });
245
245
  useCustomFieldValue(() => props.modelValue);
246
246
  return () => _createVNode("div", {
247
+ "role": "group",
247
248
  "class": bem([props.theme])
248
249
  }, [_withDirectives(_createVNode("button", _mergeProps({
249
250
  "type": "button",
@@ -252,7 +253,8 @@ export default defineComponent({
252
253
  disabled: minusDisabled.value
253
254
  }), {
254
255
  [HAPTICS_FEEDBACK]: !minusDisabled.value
255
- }]
256
+ }],
257
+ "aria-disabled": minusDisabled.value || undefined
256
258
  }, createListeners('minus')), null), [[_vShow, props.showMinus]]), _withDirectives(_createVNode("input", {
257
259
  "ref": inputRef,
258
260
  "type": props.integer ? 'tel' : 'text',
@@ -264,9 +266,9 @@ export default defineComponent({
264
266
  "readonly": props.disableInput,
265
267
  "inputmode": props.integer ? 'numeric' : 'decimal',
266
268
  "placeholder": props.placeholder,
267
- "aria-valuemax": +props.max,
268
- "aria-valuemin": +props.min,
269
- "aria-valuenow": +current.value,
269
+ "aria-valuemax": props.max,
270
+ "aria-valuemin": props.min,
271
+ "aria-valuenow": current.value,
270
272
  "onBlur": onBlur,
271
273
  "onInput": onInput,
272
274
  "onFocus": onFocus,
@@ -278,7 +280,8 @@ export default defineComponent({
278
280
  disabled: plusDisabled.value
279
281
  }), {
280
282
  [HAPTICS_FEEDBACK]: !plusDisabled.value
281
- }]
283
+ }],
284
+ "aria-disabled": plusDisabled.value || undefined
282
285
  }, createListeners('plus')), null), [[_vShow, props.showPlus]])]);
283
286
  }
284
287
 
package/es/swipe/Swipe.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { createVNode as _createVNode } from "vue";
2
2
  import { ref, watch, reactive, computed, onMounted, onActivated, onDeactivated, onBeforeUnmount, defineComponent } from 'vue'; // Utils
3
3
 
4
- import { clamp, isHidden, truthProp, numericProp, preventDefault, createNamespace, makeNumericProp } from '../utils'; // Composables
4
+ import { clamp, isHidden, truthProp, numericProp, windowWidth, windowHeight, preventDefault, createNamespace, makeNumericProp } from '../utils'; // Composables
5
5
 
6
- import { doubleRaf, useChildren, useWindowSize, usePageVisibility } from '@vant/use';
6
+ import { doubleRaf, useChildren, usePageVisibility } from '@vant/use';
7
7
  import { useTouch } from '../composables/use-touch';
8
8
  import { useExpose } from '../composables/use-expose';
9
9
  import { onPopupReopen } from '../composables/on-popup-reopen'; // Types
@@ -44,7 +44,6 @@ export default defineComponent({
44
44
  swiping: false
45
45
  });
46
46
  var touch = useTouch();
47
- var windowSize = useWindowSize();
48
47
  var {
49
48
  children,
50
49
  linkChildren
@@ -260,10 +259,16 @@ export default defineComponent({
260
259
 
261
260
  var onTouchMove = event => {
262
261
  if (props.touchable && state.swiping) {
263
- touch.move(event);
262
+ touch.move(event); // if user starting to touchmove, prevent the event bubbling to
263
+ // avoid affecting the parent components
264
264
 
265
- if (isCorrectDirection.value) {
265
+ var shouldPrevent = isCorrectDirection.value || touch.offsetY.value > touch.offsetX.value === props.vertical;
266
+
267
+ if (shouldPrevent) {
266
268
  preventDefault(event, props.stopPropagation);
269
+ }
270
+
271
+ if (isCorrectDirection.value) {
267
272
  move({
268
273
  offset: delta.value
269
274
  });
@@ -380,7 +385,7 @@ export default defineComponent({
380
385
  watch(() => props.initialSwipe, value => initialize(+value));
381
386
  watch(count, () => initialize(state.active));
382
387
  watch(() => props.autoplay, autoplay);
383
- watch([windowSize.width, windowSize.height], resize);
388
+ watch([windowWidth, windowHeight], resize);
384
389
  watch(usePageVisibility(), visible => {
385
390
  if (visible === 'visible') {
386
391
  autoplay();
@@ -1 +1 @@
1
- :root{--van-swipe-indicator-size:6px;--van-swipe-indicator-margin:var(--van-padding-sm);--van-swipe-indicator-active-opacity:1;--van-swipe-indicator-inactive-opacity:0.3;--van-swipe-indicator-active-background-color:var(--van-primary-color);--van-swipe-indicator-inactive-background-color:var(--van-border-color)}.van-swipe{position:relative;overflow:hidden;cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-swipe__track{display:flex;height:100%}.van-swipe__track--vertical{flex-direction:column}.van-swipe__indicators{position:absolute;bottom:var(--van-swipe-indicator-margin);left:50%;display:flex;transform:translateX(-50%)}.van-swipe__indicators--vertical{top:50%;bottom:auto;left:var(--van-swipe-indicator-margin);flex-direction:column;transform:translateY(-50%)}.van-swipe__indicators--vertical .van-swipe__indicator:not(:last-child){margin-bottom:var(--van-swipe-indicator-size)}.van-swipe__indicator{width:var(--van-swipe-indicator-size);height:var(--van-swipe-indicator-size);background-color:var(--van-swipe-indicator-inactive-background-color);border-radius:100%;opacity:var(--van-swipe-indicator-inactive-opacity);transition:opacity var(--van-animation-duration-fast),background-color var(--van-animation-duration-fast)}.van-swipe__indicator:not(:last-child){margin-right:var(--van-swipe-indicator-size)}.van-swipe__indicator--active{background-color:var(--van-swipe-indicator-active-background-color);opacity:var(--van-swipe-indicator-active-opacity)}
1
+ :root{--van-swipe-indicator-size:6px;--van-swipe-indicator-margin:var(--van-padding-sm);--van-swipe-indicator-active-opacity:1;--van-swipe-indicator-inactive-opacity:0.3;--van-swipe-indicator-active-background-color:var(--van-primary-color);--van-swipe-indicator-inactive-background-color:var(--van-border-color)}.van-swipe{position:relative;overflow:hidden;transform:translateZ(0);cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;user-select:none}.van-swipe__track{display:flex;height:100%}.van-swipe__track--vertical{flex-direction:column}.van-swipe__indicators{position:absolute;bottom:var(--van-swipe-indicator-margin);left:50%;display:flex;transform:translateX(-50%)}.van-swipe__indicators--vertical{top:50%;bottom:auto;left:var(--van-swipe-indicator-margin);flex-direction:column;transform:translateY(-50%)}.van-swipe__indicators--vertical .van-swipe__indicator:not(:last-child){margin-bottom:var(--van-swipe-indicator-size)}.van-swipe__indicator{width:var(--van-swipe-indicator-size);height:var(--van-swipe-indicator-size);background-color:var(--van-swipe-indicator-inactive-background-color);border-radius:100%;opacity:var(--van-swipe-indicator-inactive-opacity);transition:opacity var(--van-animation-duration-fast),background-color var(--van-animation-duration-fast)}.van-swipe__indicator:not(:last-child){margin-right:var(--van-swipe-indicator-size)}.van-swipe__indicator--active{background-color:var(--van-swipe-indicator-active-background-color);opacity:var(--van-swipe-indicator-active-opacity)}
@@ -12,6 +12,8 @@
12
12
  .van-swipe {
13
13
  position: relative;
14
14
  overflow: hidden;
15
+ // https://github.com/youzan/vant/issues/9931
16
+ transform: translateZ(0);
15
17
  cursor: grab;
16
18
  user-select: none;
17
19
 
@@ -19,9 +19,7 @@ export declare type SwipeExpose = {
19
19
  next: () => void;
20
20
  resize: () => void;
21
21
  swipeTo: (index: number, options?: SwipeToOptions) => void;
22
- /**
23
- * @private
24
- */
22
+ /** @private */
25
23
  state: SwipeState;
26
24
  };
27
25
  export declare type SwipeProvide = {
@@ -72,6 +72,7 @@ export default defineComponent({
72
72
  disabled
73
73
  }),
74
74
  "style": style,
75
+ "tabindex": disabled ? undefined : 0,
75
76
  "aria-checked": checked,
76
77
  "onClick": onClick
77
78
  }, [_createVNode("div", {
@@ -1 +1 @@
1
- :root{--van-switch-size:30px;--van-switch-width:2em;--van-switch-height:1em;--van-switch-node-size:1em;--van-switch-node-background-color:var(--van-white);--van-switch-node-box-shadow:0 3px 1px 0 rgba(0, 0, 0, 0.05),0 2px 2px 0 rgba(0, 0, 0, 0.1),0 3px 3px 0 rgba(0, 0, 0, 0.05);--van-switch-background-color:var(--van-background-color-light);--van-switch-on-background-color:var(--van-primary-color);--van-switch-transition-duration:var(--van-animation-duration-base);--van-switch-disabled-opacity:var(--van-disabled-opacity);--van-switch-border:var(--van-border-width-base) solid rgba(0, 0, 0, 0.1)}.van-switch{position:relative;display:inline-block;box-sizing:content-box;width:var(--van-switch-width);height:var(--van-switch-height);font-size:var(--van-switch-size);background:var(--van-switch-background-color);border:var(--van-switch-border);border-radius:var(--van-switch-node-size);cursor:pointer;transition:background-color var(--van-switch-transition-duration)}.van-switch__node{position:absolute;top:0;left:0;width:var(--van-switch-node-size);height:var(--van-switch-node-size);background:var(--van-switch-node-background-color);border-radius:100%;box-shadow:var(--van-switch-node-box-shadow);transition:transform var(--van-switch-transition-duration) cubic-bezier(.3, 1.05, .4, 1.05)}.van-switch__loading{top:25%;left:25%;width:50%;height:50%;line-height:1}.van-switch--on{background:var(--van-switch-on-background-color)}.van-switch--on .van-switch__node{transform:translateX(calc(var(--van-switch-width) - var(--van-switch-node-size)))}.van-switch--on .van-switch__loading{color:var(--van-switch-on-background-color)}.van-switch--disabled{cursor:not-allowed;opacity:var(--van-switch-disabled-opacity)}.van-switch--loading{cursor:default}
1
+ :root{--van-switch-size:30px;--van-switch-width:2em;--van-switch-height:1em;--van-switch-node-size:1em;--van-switch-node-background-color:var(--van-white);--van-switch-node-box-shadow:0 3px 1px 0 rgba(0, 0, 0, 0.05),0 2px 2px 0 rgba(0, 0, 0, 0.1),0 3px 3px 0 rgba(0, 0, 0, 0.05);--van-switch-background-color:var(--van-background-color-light);--van-switch-on-background-color:var(--van-primary-color);--van-switch-transition-duration:var(--van-animation-duration-base);--van-switch-disabled-opacity:var(--van-disabled-opacity);--van-switch-border:var(--van-border-width-base) solid rgba(0, 0, 0, 0.1)}.van-switch{position:relative;display:inline-block;box-sizing:content-box;width:var(--van-switch-width);height:var(--van-switch-height);font-size:var(--van-switch-size);background:var(--van-switch-background-color);border:var(--van-switch-border);border-radius:var(--van-switch-node-size);cursor:pointer;transition:background-color var(--van-switch-transition-duration)}.van-switch__node{position:absolute;top:0;left:0;width:var(--van-switch-node-size);height:var(--van-switch-node-size);font-size:inherit;background:var(--van-switch-node-background-color);border-radius:100%;box-shadow:var(--van-switch-node-box-shadow);transition:transform var(--van-switch-transition-duration) cubic-bezier(.3, 1.05, .4, 1.05)}.van-switch__loading{top:25%;left:25%;width:50%;height:50%;line-height:1}.van-switch--on{background:var(--van-switch-on-background-color)}.van-switch--on .van-switch__node{transform:translateX(calc(var(--van-switch-width) - var(--van-switch-node-size)))}.van-switch--on .van-switch__loading{color:var(--van-switch-on-background-color)}.van-switch--disabled{cursor:not-allowed;opacity:var(--van-switch-disabled-opacity)}.van-switch--loading{cursor:default}
@@ -33,6 +33,8 @@
33
33
  left: 0;
34
34
  width: var(--van-switch-node-size);
35
35
  height: var(--van-switch-node-size);
36
+ // https://github.com/youzan/vant/issues/9839
37
+ font-size: inherit;
36
38
  background: var(--van-switch-node-background-color);
37
39
  border-radius: 100%;
38
40
  box-shadow: var(--van-switch-node-box-shadow);