vant 3.2.8 → 3.3.0

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 (171) hide show
  1. package/es/address-edit/AddressEdit.js +155 -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/CalendarHeader.js +1 -3
  6. package/es/cascader/Cascader.js +10 -2
  7. package/es/checkbox/Checker.js +1 -1
  8. package/es/checkbox/types.d.ts +2 -6
  9. package/es/composables/use-id.d.ts +1 -0
  10. package/es/composables/use-id.js +14 -0
  11. package/es/composables/use-route.d.ts +1 -1
  12. package/es/composables/use-route.js +4 -4
  13. package/es/count-down/CountDown.js +1 -0
  14. package/es/coupon-list/CouponList.js +40 -24
  15. package/es/coupon-list/index.css +1 -1
  16. package/es/coupon-list/index.less +0 -5
  17. package/es/dropdown-item/DropdownItem.js +7 -2
  18. package/es/dropdown-item/types.d.ts +2 -6
  19. package/es/dropdown-menu/DropdownMenu.js +7 -3
  20. package/es/dropdown-menu/types.d.ts +1 -0
  21. package/es/empty/Network.js +22 -34
  22. package/es/field/Field.d.ts +1 -1
  23. package/es/field/Field.js +13 -5
  24. package/es/field/index.d.ts +2 -2
  25. package/es/field/types.d.ts +7 -6
  26. package/es/form/Form.js +2 -2
  27. package/es/image/Image.js +4 -9
  28. package/es/image-preview/ImagePreview.js +3 -4
  29. package/es/index.d.ts +1 -1
  30. package/es/index.js +1 -1
  31. package/es/lazyload/index.d.ts +1 -1
  32. package/es/lazyload/index.js +1 -1
  33. package/es/lazyload/vue-lazyload/index.d.ts +55 -0
  34. package/es/lazyload/vue-lazyload/index.js +46 -0
  35. package/es/lazyload/vue-lazyload/lazy-component.js +53 -0
  36. package/es/lazyload/vue-lazyload/lazy-container.js +98 -0
  37. package/es/lazyload/vue-lazyload/lazy-image.js +115 -0
  38. package/es/lazyload/vue-lazyload/lazy.js +507 -0
  39. package/es/lazyload/vue-lazyload/listener.js +241 -0
  40. package/es/lazyload/vue-lazyload/util.js +183 -0
  41. package/es/list/List.js +3 -1
  42. package/es/number-keyboard/NumberKeyboardKey.js +4 -4
  43. package/es/pagination/Pagination.js +67 -49
  44. package/es/pagination/index.css +1 -1
  45. package/es/pagination/index.less +32 -31
  46. package/es/password-input/PasswordInput.d.ts +1 -1
  47. package/es/password-input/index.d.ts +1 -1
  48. package/es/popover/Popover.js +2 -0
  49. package/es/popup/Popup.d.ts +1 -2
  50. package/es/popup/Popup.js +2 -5
  51. package/es/popup/index.d.ts +1 -2
  52. package/es/rate/Rate.js +5 -3
  53. package/es/search/Search.js +8 -2
  54. package/es/sidebar/Sidebar.js +1 -0
  55. package/es/sidebar-item/SidebarItem.js +4 -1
  56. package/es/slider/Slider.js +5 -3
  57. package/es/stepper/Stepper.js +11 -8
  58. package/es/swipe/Swipe.js +3 -4
  59. package/es/swipe/types.d.ts +1 -3
  60. package/es/switch/Switch.js +1 -0
  61. package/es/switch/index.css +1 -1
  62. package/es/switch/index.less +2 -0
  63. package/es/tab/Tab.js +17 -4
  64. package/es/tab/index.css +1 -1
  65. package/es/tab/index.less +1 -1
  66. package/es/tabbar/Tabbar.d.ts +1 -1
  67. package/es/tabbar/Tabbar.js +10 -10
  68. package/es/tabbar-item/TabbarItem.js +11 -4
  69. package/es/tabs/Tabs.js +10 -5
  70. package/es/tabs/TabsTitle.d.ts +6 -0
  71. package/es/tabs/TabsTitle.js +7 -1
  72. package/es/tabs/types.d.ts +1 -0
  73. package/es/uploader/UploaderPreviewItem.js +4 -1
  74. package/es/uploader/utils.d.ts +2 -2
  75. package/es/uploader/utils.js +2 -2
  76. package/es/utils/dom.d.ts +1 -0
  77. package/es/utils/dom.js +6 -2
  78. package/es/utils/format.js +6 -5
  79. package/es/vue-tsx-shim.d.ts +1 -0
  80. package/lib/address-edit/AddressEdit.js +156 -180
  81. package/lib/address-edit/AddressEditDetail.d.ts +10 -9
  82. package/lib/address-edit/AddressEditDetail.js +6 -6
  83. package/lib/button/Button.js +1 -1
  84. package/lib/calendar/CalendarHeader.js +1 -3
  85. package/lib/cascader/Cascader.js +10 -2
  86. package/lib/checkbox/Checker.js +1 -1
  87. package/lib/checkbox/types.d.ts +2 -6
  88. package/lib/composables/use-id.d.ts +1 -0
  89. package/lib/composables/use-id.js +21 -0
  90. package/lib/composables/use-route.d.ts +1 -1
  91. package/lib/composables/use-route.js +4 -4
  92. package/lib/count-down/CountDown.js +1 -0
  93. package/lib/coupon-list/CouponList.js +39 -22
  94. package/lib/coupon-list/index.css +1 -1
  95. package/lib/coupon-list/index.less +0 -5
  96. package/lib/dropdown-item/DropdownItem.js +7 -2
  97. package/lib/dropdown-item/types.d.ts +2 -6
  98. package/lib/dropdown-menu/DropdownMenu.js +7 -2
  99. package/lib/dropdown-menu/types.d.ts +1 -0
  100. package/lib/empty/Network.js +22 -34
  101. package/lib/field/Field.d.ts +1 -1
  102. package/lib/field/Field.js +14 -5
  103. package/lib/field/index.d.ts +2 -2
  104. package/lib/field/types.d.ts +7 -6
  105. package/lib/form/Form.js +1 -1
  106. package/lib/image/Image.js +4 -9
  107. package/lib/image-preview/ImagePreview.js +1 -2
  108. package/lib/index.css +1 -1
  109. package/lib/index.d.ts +1 -1
  110. package/lib/index.js +1 -1
  111. package/lib/lazyload/index.d.ts +1 -1
  112. package/lib/lazyload/index.js +3 -3
  113. package/lib/lazyload/vue-lazyload/index.d.ts +55 -0
  114. package/lib/lazyload/vue-lazyload/index.js +58 -0
  115. package/lib/lazyload/vue-lazyload/lazy-component.js +62 -0
  116. package/lib/lazyload/vue-lazyload/lazy-container.js +106 -0
  117. package/lib/lazyload/vue-lazyload/lazy-image.js +125 -0
  118. package/lib/lazyload/vue-lazyload/lazy.js +520 -0
  119. package/lib/lazyload/vue-lazyload/listener.js +251 -0
  120. package/lib/lazyload/vue-lazyload/util.js +213 -0
  121. package/lib/list/List.js +3 -1
  122. package/lib/number-keyboard/NumberKeyboardKey.js +3 -3
  123. package/lib/pagination/Pagination.js +65 -47
  124. package/lib/pagination/index.css +1 -1
  125. package/lib/pagination/index.less +32 -31
  126. package/lib/password-input/PasswordInput.d.ts +1 -1
  127. package/lib/password-input/index.d.ts +1 -1
  128. package/lib/popover/Popover.js +2 -0
  129. package/lib/popup/Popup.d.ts +1 -2
  130. package/lib/popup/Popup.js +2 -5
  131. package/lib/popup/index.d.ts +1 -2
  132. package/lib/rate/Rate.js +5 -3
  133. package/lib/search/Search.js +9 -2
  134. package/lib/sidebar/Sidebar.js +1 -0
  135. package/lib/sidebar-item/SidebarItem.js +4 -1
  136. package/lib/slider/Slider.js +5 -3
  137. package/lib/stepper/Stepper.js +11 -8
  138. package/lib/swipe/Swipe.js +1 -2
  139. package/lib/swipe/types.d.ts +1 -3
  140. package/lib/switch/Switch.js +1 -0
  141. package/lib/switch/index.css +1 -1
  142. package/lib/switch/index.less +2 -0
  143. package/lib/tab/Tab.js +19 -4
  144. package/lib/tab/index.css +1 -1
  145. package/lib/tab/index.less +1 -1
  146. package/lib/tabbar/Tabbar.d.ts +1 -1
  147. package/lib/tabbar/Tabbar.js +10 -10
  148. package/lib/tabbar-item/TabbarItem.js +11 -4
  149. package/lib/tabs/Tabs.js +9 -3
  150. package/lib/tabs/TabsTitle.d.ts +6 -0
  151. package/lib/tabs/TabsTitle.js +7 -1
  152. package/lib/tabs/types.d.ts +1 -0
  153. package/lib/uploader/UploaderPreviewItem.js +3 -0
  154. package/lib/uploader/utils.d.ts +2 -2
  155. package/lib/uploader/utils.js +3 -2
  156. package/lib/utils/dom.d.ts +1 -0
  157. package/lib/utils/dom.js +9 -2
  158. package/lib/utils/format.js +7 -5
  159. package/lib/vant.es.js +1086 -1068
  160. package/lib/vant.es.min.js +1086 -1068
  161. package/lib/vant.js +1085 -1067
  162. package/lib/vant.min.js +1 -1
  163. package/lib/vue-tsx-shim.d.ts +1 -0
  164. package/package.json +4 -4
  165. package/vetur/attributes.json +340 -340
  166. package/vetur/tags.json +119 -119
  167. package/vetur/web-types.json +1143 -1143
  168. package/es/composables/use-link-field.d.ts +0 -0
  169. package/es/composables/use-link-field.js +0 -0
  170. package/lib/composables/use-link-field.d.ts +0 -0
  171. package/lib/composables/use-link-field.js +0 -1
@@ -7,6 +7,7 @@ import { useExpose } from '../composables/use-expose'; // Components
7
7
 
8
8
  import { Area } from '../area';
9
9
  import { Cell } from '../cell';
10
+ import { Form } from '../form';
10
11
  import { Field } from '../field';
11
12
  import { Popup } from '../popup';
12
13
  import { Toast } from '../toast';
@@ -74,18 +75,9 @@ export default defineComponent({
74
75
  slots
75
76
  } = _ref;
76
77
  var areaRef = ref();
77
- var state = reactive({
78
- data: {},
79
- showAreaPopup: false,
80
- detailFocused: false,
81
- errorInfo: {
82
- tel: '',
83
- name: '',
84
- areaCode: '',
85
- postalCode: '',
86
- addressDetail: ''
87
- }
88
- });
78
+ var data = reactive({});
79
+ var showAreaPopup = ref(false);
80
+ var detailFocused = ref(false);
89
81
  var areaListLoaded = computed(() => isObject(props.areaList) && Object.keys(props.areaList).length);
90
82
  var areaText = computed(() => {
91
83
  var {
@@ -94,7 +86,7 @@ export default defineComponent({
94
86
  city,
95
87
  county,
96
88
  areaCode
97
- } = state.data;
89
+ } = data;
98
90
 
99
91
  if (areaCode) {
100
92
  var arr = [country, province, city, county];
@@ -112,7 +104,7 @@ export default defineComponent({
112
104
  var hideBottomFields = computed(() => {
113
105
  var _props$searchResult;
114
106
 
115
- return ((_props$searchResult = props.searchResult) == null ? void 0 : _props$searchResult.length) && state.detailFocused;
107
+ return ((_props$searchResult = props.searchResult) == null ? void 0 : _props$searchResult.length) && detailFocused.value;
116
108
  });
117
109
 
118
110
  var assignAreaValues = () => {
@@ -120,77 +112,59 @@ export default defineComponent({
120
112
  var detail = areaRef.value.getArea();
121
113
  detail.areaCode = detail.code;
122
114
  delete detail.code;
123
- extend(state.data, detail);
115
+ extend(data, detail);
124
116
  }
125
117
  };
126
118
 
127
119
  var onFocus = key => {
128
- state.errorInfo[key] = '';
129
- state.detailFocused = key === 'addressDetail';
120
+ detailFocused.value = key === 'addressDetail';
130
121
  emit('focus', key);
131
122
  };
132
123
 
133
- var getErrorMessage = key => {
134
- var value = String(state.data[key] || '').trim();
135
-
136
- if (props.validator) {
137
- var message = props.validator(key, value);
138
-
139
- if (message) {
140
- return message;
141
- }
142
- }
143
-
144
- switch (key) {
145
- case 'name':
146
- return value ? '' : t('nameEmpty');
147
-
148
- case 'tel':
149
- return props.telValidator(value) ? '' : t('telInvalid');
150
-
151
- case 'areaCode':
152
- return value ? '' : t('areaEmpty');
153
-
154
- case 'addressDetail':
155
- return value ? '' : t('addressEmpty');
156
-
157
- case 'postalCode':
158
- return value && !props.postalValidator(value) ? t('postalEmpty') : '';
159
- }
160
- };
161
-
162
- var onSave = () => {
163
- var items = ['name', 'tel'];
164
-
165
- if (props.showArea) {
166
- items.push('areaCode');
167
- }
124
+ var rules = computed(() => {
125
+ var {
126
+ validator,
127
+ telValidator,
128
+ postalValidator
129
+ } = props;
168
130
 
169
- if (props.showDetail) {
170
- items.push('addressDetail');
171
- }
131
+ var makeRule = (name, emptyMessage) => ({
132
+ validator: value => {
133
+ if (validator) {
134
+ var message = validator(name, value);
172
135
 
173
- if (props.showPostal) {
174
- items.push('postalCode');
175
- }
136
+ if (message) {
137
+ return message;
138
+ }
139
+ }
176
140
 
177
- var isValid = items.every(item => {
178
- var msg = getErrorMessage(item);
141
+ if (!value) {
142
+ return emptyMessage;
143
+ }
179
144
 
180
- if (msg) {
181
- state.errorInfo[item] = msg;
145
+ return true;
182
146
  }
183
-
184
- return !msg;
185
147
  });
186
148
 
187
- if (isValid && !props.isSaving) {
188
- emit('save', state.data);
189
- }
190
- };
149
+ return {
150
+ name: [makeRule('name', t('nameEmpty'))],
151
+ tel: [makeRule('tel', t('telInvalid')), {
152
+ validator: telValidator,
153
+ message: t('telInvalid')
154
+ }],
155
+ areaCode: [makeRule('areaCode', t('areaEmpty'))],
156
+ addressDetail: [makeRule('addressDetail', t('addressEmpty'))],
157
+ postalCode: [makeRule('addressDetail', t('postalEmpty')), {
158
+ validator: postalValidator,
159
+ message: t('postalEmpty')
160
+ }]
161
+ };
162
+ });
163
+
164
+ var onSave = () => emit('save', data);
191
165
 
192
166
  var onChangeDetail = val => {
193
- state.data.addressDetail = val;
167
+ data.addressDetail = val;
194
168
  emit('change-detail', val);
195
169
  };
196
170
 
@@ -199,22 +173,25 @@ export default defineComponent({
199
173
 
200
174
  if (values.some(value => !value.code)) {
201
175
  Toast(t('areaEmpty'));
202
- return;
176
+ } else {
177
+ showAreaPopup.value = false;
178
+ assignAreaValues();
179
+ emit('change-area', values);
203
180
  }
204
-
205
- state.showAreaPopup = false;
206
- assignAreaValues();
207
- emit('change-area', values);
208
181
  };
209
182
 
210
- var onDelete = () => emit('delete', state.data); // get values of area component
183
+ var onDelete = () => emit('delete', data); // get values of area component
184
+
211
185
 
186
+ var getArea = () => {
187
+ var _areaRef$value;
212
188
 
213
- var getArea = () => areaRef.value ? areaRef.value.getValues() : []; // set area code to area component
189
+ return ((_areaRef$value = areaRef.value) == null ? void 0 : _areaRef$value.getValues()) || [];
190
+ }; // set area code to area component
214
191
 
215
192
 
216
193
  var setAreaCode = code => {
217
- state.data.areaCode = code || '';
194
+ data.areaCode = code || '';
218
195
 
219
196
  if (code) {
220
197
  nextTick(assignAreaValues);
@@ -224,20 +201,20 @@ export default defineComponent({
224
201
  var onDetailBlur = () => {
225
202
  // await for click search event
226
203
  setTimeout(() => {
227
- state.detailFocused = false;
204
+ detailFocused.value = false;
228
205
  });
229
206
  };
230
207
 
231
208
  var setAddressDetail = value => {
232
- state.data.addressDetail = value;
209
+ data.addressDetail = value;
233
210
  };
234
211
 
235
212
  var renderSetDefaultCell = () => {
236
213
  if (props.showSetDefault) {
237
214
  var _slots = {
238
215
  'right-icon': () => _createVNode(Switch, {
239
- "modelValue": state.data.isDefault,
240
- "onUpdate:modelValue": $event => state.data.isDefault = $event,
216
+ "modelValue": data.isDefault,
217
+ "onUpdate:modelValue": $event => data.isDefault = $event,
241
218
  "size": "24",
242
219
  "onChange": event => emit('change-default', event)
243
220
  }, null)
@@ -248,8 +225,6 @@ export default defineComponent({
248
225
  "class": bem('default')
249
226
  }, _slots), [[_vShow, !hideBottomFields.value]]);
250
227
  }
251
-
252
- return null;
253
228
  };
254
229
 
255
230
  useExpose({
@@ -257,115 +232,115 @@ export default defineComponent({
257
232
  setAreaCode,
258
233
  setAddressDetail
259
234
  });
260
- watch(() => props.areaList, () => setAreaCode(state.data.areaCode));
235
+ watch(() => props.areaList, () => setAreaCode(data.areaCode));
261
236
  watch(() => props.addressInfo, value => {
262
- state.data = extend({}, DEFAULT_DATA, value);
237
+ extend(data, DEFAULT_DATA, value);
263
238
  setAreaCode(value.areaCode);
264
239
  }, {
265
240
  deep: true,
266
241
  immediate: true
267
242
  });
268
243
  return () => {
269
- var {
270
- data,
271
- errorInfo
272
- } = state;
273
244
  var {
274
245
  disableArea
275
246
  } = props;
276
- return _createVNode("div", {
277
- "class": bem()
278
- }, [_createVNode("div", {
279
- "class": bem('fields')
280
- }, [_createVNode(Field, {
281
- "modelValue": data.name,
282
- "onUpdate:modelValue": $event => data.name = $event,
283
- "clearable": true,
284
- "label": t('name'),
285
- "placeholder": t('name'),
286
- "errorMessage": errorInfo.name,
287
- "onFocus": () => onFocus('name')
288
- }, null), _createVNode(Field, {
289
- "modelValue": data.tel,
290
- "onUpdate:modelValue": $event => data.tel = $event,
291
- "clearable": true,
292
- "type": "tel",
293
- "label": t('tel'),
294
- "maxlength": props.telMaxlength,
295
- "placeholder": t('tel'),
296
- "errorMessage": errorInfo.tel,
297
- "onFocus": () => onFocus('tel')
298
- }, null), _withDirectives(_createVNode(Field, {
299
- "readonly": true,
300
- "label": t('area'),
301
- "is-link": !disableArea,
302
- "modelValue": areaText.value,
303
- "placeholder": props.areaPlaceholder || t('area'),
304
- "errorMessage": errorInfo.areaCode,
305
- "onFocus": () => onFocus('areaCode'),
306
- "onClick": () => {
307
- emit('click-area');
308
- state.showAreaPopup = !disableArea;
309
- }
310
- }, null), [[_vShow, props.showArea]]), _createVNode(AddressEditDetail, {
311
- "show": props.showDetail,
312
- "value": data.addressDetail,
313
- "focused": state.detailFocused,
314
- "detailRows": props.detailRows,
315
- "errorMessage": errorInfo.addressDetail,
316
- "searchResult": props.searchResult,
317
- "detailMaxlength": props.detailMaxlength,
318
- "showSearchResult": props.showSearchResult,
319
- "onBlur": onDetailBlur,
320
- "onFocus": () => onFocus('addressDetail'),
321
- "onInput": onChangeDetail,
322
- "onSelect-search": event => emit('select-search', event)
323
- }, null), props.showPostal && _withDirectives(_createVNode(Field, {
324
- "modelValue": data.postalCode,
325
- "onUpdate:modelValue": $event => data.postalCode = $event,
326
- "type": "tel",
327
- "label": t('postal'),
328
- "maxlength": "6",
329
- "placeholder": t('postal'),
330
- "errorMessage": errorInfo.postalCode,
331
- "onFocus": () => onFocus('postalCode')
332
- }, null), [[_vShow, !hideBottomFields.value]]), slots.default == null ? void 0 : slots.default()]), renderSetDefaultCell(), _withDirectives(_createVNode("div", {
333
- "class": bem('buttons')
334
- }, [_createVNode(Button, {
335
- "block": true,
336
- "round": true,
337
- "type": "danger",
338
- "text": props.saveButtonText || t('save'),
339
- "class": bem('button'),
340
- "loading": props.isSaving,
341
- "onClick": onSave
342
- }, null), props.showDelete && _createVNode(Button, {
343
- "block": true,
344
- "round": true,
345
- "class": bem('button'),
346
- "loading": props.isDeleting,
347
- "text": props.deleteButtonText || t('delete'),
348
- "onClick": onDelete
349
- }, null)]), [[_vShow, !hideBottomFields.value]]), _createVNode(Popup, {
350
- "show": state.showAreaPopup,
351
- "onUpdate:show": $event => state.showAreaPopup = $event,
352
- "round": true,
353
- "teleport": "body",
354
- "position": "bottom",
355
- "lazyRender": false
247
+ return _createVNode(Form, {
248
+ "class": bem(),
249
+ "onSubmit": onSave
356
250
  }, {
357
- default: () => [_createVNode(Area, {
358
- "ref": areaRef,
359
- "value": data.areaCode,
360
- "loading": !areaListLoaded.value,
361
- "areaList": props.areaList,
362
- "columnsPlaceholder": props.areaColumnsPlaceholder,
363
- "onConfirm": onAreaConfirm,
364
- "onCancel": () => {
365
- state.showAreaPopup = false;
251
+ default: () => [_createVNode("div", {
252
+ "class": bem('fields')
253
+ }, [_createVNode(Field, {
254
+ "modelValue": data.name,
255
+ "onUpdate:modelValue": $event => data.name = $event,
256
+ "clearable": true,
257
+ "label": t('name'),
258
+ "rules": rules.value.name,
259
+ "placeholder": t('name'),
260
+ "onFocus": () => onFocus('name')
261
+ }, null), _createVNode(Field, {
262
+ "modelValue": data.tel,
263
+ "onUpdate:modelValue": $event => data.tel = $event,
264
+ "clearable": true,
265
+ "type": "tel",
266
+ "label": t('tel'),
267
+ "rules": rules.value.tel,
268
+ "maxlength": props.telMaxlength,
269
+ "placeholder": t('tel'),
270
+ "onFocus": () => onFocus('tel')
271
+ }, null), _withDirectives(_createVNode(Field, {
272
+ "readonly": true,
273
+ "label": t('area'),
274
+ "is-link": !disableArea,
275
+ "modelValue": areaText.value,
276
+ "rules": rules.value.areaCode,
277
+ "placeholder": props.areaPlaceholder || t('area'),
278
+ "onFocus": () => onFocus('areaCode'),
279
+ "onClick": () => {
280
+ emit('click-area');
281
+ showAreaPopup.value = !disableArea;
366
282
  }
367
- }, null)]
368
- })]);
283
+ }, null), [[_vShow, props.showArea]]), _createVNode(AddressEditDetail, {
284
+ "show": props.showDetail,
285
+ "rows": props.detailRows,
286
+ "rules": rules.value.addressDetail,
287
+ "value": data.addressDetail,
288
+ "focused": detailFocused.value,
289
+ "maxlength": props.detailMaxlength,
290
+ "searchResult": props.searchResult,
291
+ "showSearchResult": props.showSearchResult,
292
+ "onBlur": onDetailBlur,
293
+ "onFocus": () => onFocus('addressDetail'),
294
+ "onInput": onChangeDetail,
295
+ "onSelect-search": event => emit('select-search', event)
296
+ }, null), props.showPostal && _withDirectives(_createVNode(Field, {
297
+ "modelValue": data.postalCode,
298
+ "onUpdate:modelValue": $event => data.postalCode = $event,
299
+ "type": "tel",
300
+ "rules": rules.value.postalCode,
301
+ "label": t('postal'),
302
+ "maxlength": "6",
303
+ "placeholder": t('postal'),
304
+ "onFocus": () => onFocus('postalCode')
305
+ }, null), [[_vShow, !hideBottomFields.value]]), slots.default == null ? void 0 : slots.default()]), renderSetDefaultCell(), _withDirectives(_createVNode("div", {
306
+ "class": bem('buttons')
307
+ }, [_createVNode(Button, {
308
+ "block": true,
309
+ "round": true,
310
+ "type": "danger",
311
+ "text": props.saveButtonText || t('save'),
312
+ "class": bem('button'),
313
+ "loading": props.isSaving,
314
+ "nativeType": "submit",
315
+ "onClick": onSave
316
+ }, null), props.showDelete && _createVNode(Button, {
317
+ "block": true,
318
+ "round": true,
319
+ "class": bem('button'),
320
+ "loading": props.isDeleting,
321
+ "text": props.deleteButtonText || t('delete'),
322
+ "onClick": onDelete
323
+ }, null)]), [[_vShow, !hideBottomFields.value]]), _createVNode(Popup, {
324
+ "show": showAreaPopup.value,
325
+ "onUpdate:show": $event => showAreaPopup.value = $event,
326
+ "round": true,
327
+ "teleport": "body",
328
+ "position": "bottom",
329
+ "lazyRender": false
330
+ }, {
331
+ default: () => [_createVNode(Area, {
332
+ "ref": areaRef,
333
+ "value": data.areaCode,
334
+ "loading": !areaListLoaded.value,
335
+ "areaList": props.areaList,
336
+ "columnsPlaceholder": props.areaColumnsPlaceholder,
337
+ "onConfirm": onAreaConfirm,
338
+ "onCancel": () => {
339
+ showAreaPopup.value = false;
340
+ }
341
+ }, null)]
342
+ })]
343
+ });
369
344
  };
370
345
  }
371
346
 
@@ -1,22 +1,23 @@
1
1
  import { PropType } from 'vue';
2
2
  import type { AddressEditSearchItem } from './types';
3
+ import type { FieldRule } from '../field/types';
3
4
  declare const _default: import("vue").DefineComponent<{
4
5
  show: BooleanConstructor;
6
+ rows: (NumberConstructor | StringConstructor)[];
5
7
  value: StringConstructor;
8
+ rules: PropType<FieldRule[]>;
6
9
  focused: BooleanConstructor;
7
- detailRows: (NumberConstructor | StringConstructor)[];
10
+ maxlength: (NumberConstructor | StringConstructor)[];
8
11
  searchResult: PropType<AddressEditSearchItem[]>;
9
- errorMessage: StringConstructor;
10
- detailMaxlength: (NumberConstructor | StringConstructor)[];
11
12
  showSearchResult: BooleanConstructor;
12
13
  }, () => JSX.Element | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("input" | "focus" | "blur" | "select-search")[], "input" | "focus" | "blur" | "select-search", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
13
14
  show?: unknown;
15
+ rows?: unknown;
14
16
  value?: unknown;
17
+ rules?: unknown;
15
18
  focused?: unknown;
16
- detailRows?: unknown;
19
+ maxlength?: unknown;
17
20
  searchResult?: unknown;
18
- errorMessage?: unknown;
19
- detailMaxlength?: unknown;
20
21
  showSearchResult?: unknown;
21
22
  } & {
22
23
  focused: boolean;
@@ -24,10 +25,10 @@ declare const _default: import("vue").DefineComponent<{
24
25
  showSearchResult: boolean;
25
26
  } & {
26
27
  value?: string | undefined;
27
- errorMessage?: string | undefined;
28
+ maxlength?: string | number | undefined;
29
+ rows?: string | number | undefined;
30
+ rules?: FieldRule[] | undefined;
28
31
  searchResult?: AddressEditSearchItem[] | undefined;
29
- detailRows?: string | number | undefined;
30
- detailMaxlength?: string | number | undefined;
31
32
  }> & {
32
33
  onFocus?: ((...args: any[]) => any) | undefined;
33
34
  onBlur?: ((...args: any[]) => any) | undefined;
@@ -11,12 +11,12 @@ export default defineComponent({
11
11
  name,
12
12
  props: {
13
13
  show: Boolean,
14
+ rows: numericProp,
14
15
  value: String,
16
+ rules: Array,
15
17
  focused: Boolean,
16
- detailRows: numericProp,
18
+ maxlength: numericProp,
17
19
  searchResult: Array,
18
- errorMessage: String,
19
- detailMaxlength: numericProp,
20
20
  showSearchResult: Boolean
21
21
  },
22
22
  emits: ['blur', 'focus', 'input', 'select-search'],
@@ -77,14 +77,14 @@ export default defineComponent({
77
77
  "clearable": true,
78
78
  "ref": field,
79
79
  "class": bem(),
80
- "rows": props.detailRows,
80
+ "rows": props.rows,
81
81
  "type": "textarea",
82
+ "rules": props.rules,
82
83
  "label": t('label'),
83
84
  "border": !showSearchResult(),
84
- "maxlength": props.detailMaxlength,
85
+ "maxlength": props.maxlength,
85
86
  "modelValue": props.value,
86
87
  "placeholder": t('placeholder'),
87
- "errorMessage": props.errorMessage,
88
88
  "onBlur": onBlur,
89
89
  "onFocus": onFocus,
90
90
  "onUpdate:modelValue": onInput
@@ -1,7 +1,7 @@
1
1
  import { createVNode as _createVNode } from "vue";
2
2
  import { defineComponent } from 'vue'; // Utils
3
3
 
4
- import { extend, numericProp, makeStringProp, createNamespace, BORDER_SURROUND } from '../utils';
4
+ import { extend, numericProp, preventDefault, makeStringProp, createNamespace, BORDER_SURROUND } from '../utils';
5
5
  import { useRoute, routeProps } from '../composables/use-route'; // Components
6
6
 
7
7
  import { Icon } from '../icon';
@@ -118,7 +118,7 @@ export default defineComponent({
118
118
 
119
119
  var onClick = event => {
120
120
  if (props.loading) {
121
- event.preventDefault();
121
+ preventDefault(event);
122
122
  } else if (!props.disabled) {
123
123
  emit('click', event);
124
124
  route();
@@ -30,9 +30,7 @@ export default defineComponent({
30
30
  }
31
31
  };
32
32
 
33
- var onClickSubtitle = event => {
34
- emit('click-subtitle', event);
35
- };
33
+ var onClickSubtitle = event => emit('click-subtitle', event);
36
34
 
37
35
  var renderSubtitle = () => {
38
36
  if (props.showSubtitle) {
@@ -164,20 +164,27 @@ export default defineComponent({
164
164
  }, null) : null]);
165
165
 
166
166
  var renderOption = (option, selectedOption, tabIndex) => {
167
- var selected = selectedOption && option[valueKey] === selectedOption[valueKey];
167
+ var {
168
+ disabled
169
+ } = option;
170
+ var selected = !!(selectedOption && option[valueKey] === selectedOption[valueKey]);
168
171
  var color = option.color || (selected ? props.activeColor : undefined);
169
172
  var Text = slots.option ? slots.option({
170
173
  option,
171
174
  selected
172
175
  }) : _createVNode("span", null, [option[textKey]]);
173
176
  return _createVNode("li", {
177
+ "role": "menuitemradio",
174
178
  "class": [bem('option', {
175
179
  selected,
176
- disabled: option.disabled
180
+ disabled
177
181
  }), option.className],
178
182
  "style": {
179
183
  color
180
184
  },
185
+ "tabindex": disabled ? undefined : selected ? 0 : -1,
186
+ "aria-checked": selected,
187
+ "aria-disabled": disabled || undefined,
181
188
  "onClick": () => onSelect(option, tabIndex)
182
189
  }, [Text, selected ? _createVNode(Icon, {
183
190
  "name": "success",
@@ -186,6 +193,7 @@ export default defineComponent({
186
193
  };
187
194
 
188
195
  var renderOptions = (options, selectedOption, tabIndex) => _createVNode("ul", {
196
+ "role": "menu",
189
197
  "class": bem('options')
190
198
  }, [options.map(option => renderOption(option, selectedOption, tabIndex))]);
191
199
 
@@ -105,7 +105,7 @@ export default defineComponent({
105
105
  disabled: disabled.value,
106
106
  'label-disabled': props.labelDisabled
107
107
  }, direction.value]),
108
- "tabindex": disabled.value ? -1 : 0,
108
+ "tabindex": disabled.value ? undefined : 0,
109
109
  "aria-checked": props.checked,
110
110
  "onClick": onClick
111
111
  }, [nodes]);
@@ -5,13 +5,9 @@ export declare type CheckboxShape = CheckerShape;
5
5
  export declare type CheckboxLabelPosition = CheckerLabelPosition;
6
6
  export declare type CheckboxExpose = {
7
7
  toggle: (newValue?: boolean) => void;
8
- /**
9
- * @private
10
- */
8
+ /** @private */
11
9
  props: CheckboxProps;
12
- /**
13
- * @private
14
- */
10
+ /** @private */
15
11
  checked: ComputedRef<boolean>;
16
12
  };
17
13
  export declare type CheckboxInstance = ComponentPublicInstance<CheckboxProps, CheckboxExpose>;
@@ -0,0 +1 @@
1
+ export declare function useId(): string;
@@ -0,0 +1,14 @@
1
+ import { getCurrentInstance } from 'vue';
2
+ var current = 0;
3
+ export function useId() {
4
+ var vm = getCurrentInstance();
5
+ var {
6
+ name = 'unknown'
7
+ } = (vm == null ? void 0 : vm.type) || {}; // keep jest snapshot stable
8
+
9
+ if (process.env.NODE_ENV === 'test') {
10
+ return name;
11
+ }
12
+
13
+ return name + "-" + ++current;
14
+ }
@@ -9,5 +9,5 @@ export declare const routeProps: {
9
9
  replace: BooleanConstructor;
10
10
  };
11
11
  export declare type RouteProps = ExtractPropTypes<typeof routeProps>;
12
- export declare function route(vm: ComponentPublicInstance<RouteProps>): void;
12
+ export declare function route({ to, url, replace, $router: router, }: ComponentPublicInstance<RouteProps>): void;
13
13
  export declare function useRoute(): () => void;
@@ -7,13 +7,13 @@ export var routeProps = {
7
7
  url: String,
8
8
  replace: Boolean
9
9
  };
10
- export function route(vm) {
11
- var router = vm.$router;
10
+ export function route(_ref) {
12
11
  var {
13
12
  to,
14
13
  url,
15
- replace
16
- } = vm;
14
+ replace,
15
+ $router: router
16
+ } = _ref;
17
17
 
18
18
  if (to && router) {
19
19
  router[replace ? 'replace' : 'push'](to);
@@ -53,6 +53,7 @@ export default defineComponent({
53
53
  reset: resetTime
54
54
  });
55
55
  return () => _createVNode("div", {
56
+ "role": "timer",
56
57
  "class": bem()
57
58
  }, [slots.default ? slots.default(current.value) : timeText.value]);
58
59
  }