vant 3.3.6 → 3.3.7

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 (51) hide show
  1. package/es/badge/Badge.d.ts +12 -0
  2. package/es/badge/Badge.js +4 -3
  3. package/es/badge/index.css +1 -1
  4. package/es/badge/index.d.ts +8 -1
  5. package/es/badge/index.less +22 -1
  6. package/es/calendar/Calendar.d.ts +2 -2
  7. package/es/calendar/index.d.ts +2 -2
  8. package/es/datetime-picker/DatePicker.js +2 -2
  9. package/es/datetime-picker/TimePicker.js +2 -2
  10. package/es/datetime-picker/utils.d.ts +2 -0
  11. package/es/datetime-picker/utils.js +17 -1
  12. package/es/field/Field.js +5 -5
  13. package/es/field/utils.d.ts +2 -0
  14. package/es/field/utils.js +9 -0
  15. package/es/index.d.ts +1 -1
  16. package/es/index.js +1 -1
  17. package/es/pagination/Pagination.js +3 -3
  18. package/es/popup/Popup.d.ts +2 -2
  19. package/es/popup/index.d.ts +2 -2
  20. package/es/toast/Toast.d.ts +2 -2
  21. package/lib/badge/Badge.d.ts +12 -0
  22. package/lib/badge/Badge.js +4 -3
  23. package/lib/badge/index.css +1 -1
  24. package/lib/badge/index.d.ts +8 -1
  25. package/lib/badge/index.less +22 -1
  26. package/lib/calendar/Calendar.d.ts +2 -2
  27. package/lib/calendar/index.d.ts +2 -2
  28. package/lib/datetime-picker/DatePicker.js +1 -1
  29. package/lib/datetime-picker/TimePicker.js +1 -1
  30. package/lib/datetime-picker/utils.d.ts +2 -0
  31. package/lib/datetime-picker/utils.js +22 -3
  32. package/lib/field/Field.js +4 -4
  33. package/lib/field/utils.d.ts +2 -0
  34. package/lib/field/utils.js +13 -0
  35. package/lib/index.css +1 -1
  36. package/lib/index.d.ts +1 -1
  37. package/lib/index.js +1 -1
  38. package/lib/pagination/Pagination.js +3 -3
  39. package/lib/popup/Popup.d.ts +2 -2
  40. package/lib/popup/index.d.ts +2 -2
  41. package/lib/toast/Toast.d.ts +2 -2
  42. package/lib/vant.cjs.js +34 -13
  43. package/lib/vant.cjs.min.js +1 -1
  44. package/lib/vant.es.js +34 -13
  45. package/lib/vant.es.min.js +34 -13
  46. package/lib/vant.js +202 -55
  47. package/lib/vant.min.js +1 -1
  48. package/package.json +14 -12
  49. package/vetur/attributes.json +89 -85
  50. package/vetur/tags.json +26 -25
  51. package/vetur/web-types.json +217 -207
@@ -1,4 +1,5 @@
1
1
  import { PropType, ExtractPropTypes } from 'vue';
2
+ export declare type BadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
2
3
  declare const badgeProps: {
3
4
  dot: BooleanConstructor;
4
5
  max: (NumberConstructor | StringConstructor)[];
@@ -13,6 +14,10 @@ declare const badgeProps: {
13
14
  type: BooleanConstructor;
14
15
  default: true;
15
16
  };
17
+ position: {
18
+ type: PropType<BadgePosition>;
19
+ default: BadgePosition;
20
+ };
16
21
  };
17
22
  export declare type BadgeProps = ExtractPropTypes<typeof badgeProps>;
18
23
  declare const _default: import("vue").DefineComponent<{
@@ -29,6 +34,10 @@ declare const _default: import("vue").DefineComponent<{
29
34
  type: BooleanConstructor;
30
35
  default: true;
31
36
  };
37
+ position: {
38
+ type: PropType<BadgePosition>;
39
+ default: BadgePosition;
40
+ };
32
41
  }, () => JSX.Element | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
33
42
  dot?: unknown;
34
43
  max?: unknown;
@@ -37,10 +46,12 @@ declare const _default: import("vue").DefineComponent<{
37
46
  offset?: unknown;
38
47
  content?: unknown;
39
48
  showZero?: unknown;
49
+ position?: unknown;
40
50
  } & {
41
51
  dot: boolean;
42
52
  tag: keyof HTMLElementTagNameMap;
43
53
  showZero: boolean;
54
+ position: BadgePosition;
44
55
  } & {
45
56
  max?: string | number | undefined;
46
57
  color?: string | undefined;
@@ -50,5 +61,6 @@ declare const _default: import("vue").DefineComponent<{
50
61
  dot: boolean;
51
62
  tag: keyof HTMLElementTagNameMap;
52
63
  showZero: boolean;
64
+ position: BadgePosition;
53
65
  }>;
54
66
  export default _default;
package/es/badge/Badge.js CHANGED
@@ -9,7 +9,8 @@ var badgeProps = {
9
9
  color: String,
10
10
  offset: Array,
11
11
  content: numericProp,
12
- showZero: truthProp
12
+ showZero: truthProp,
13
+ position: makeStringProp('top-right')
13
14
  };
14
15
  export default defineComponent({
15
16
  name,
@@ -80,10 +81,10 @@ export default defineComponent({
80
81
  var renderBadge = () => {
81
82
  if (hasContent() || props.dot) {
82
83
  return _createVNode("div", {
83
- "class": bem({
84
+ "class": bem([props.position, {
84
85
  dot: props.dot,
85
86
  fixed: !!slots.default
86
- }),
87
+ }]),
87
88
  "style": style.value
88
89
  }, [renderContent()]);
89
90
  }
@@ -1 +1 @@
1
- :root{--van-badge-size:16px;--van-badge-color:var(--van-white);--van-badge-padding:0 3px;--van-badge-font-size:var(--van-font-size-sm);--van-badge-font-weight:var(--van-font-weight-bold);--van-badge-border-width:var(--van-border-width-base);--van-badge-background-color:var(--van-danger-color);--van-badge-dot-color:var(--van-danger-color);--van-badge-dot-size:8px;--van-badge-font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font-family);line-height:1.2;text-align:center;background:var(--van-badge-background-color);border:var(--van-badge-border-width) solid var(--van-background-color-light);border-radius:var(--van-border-radius-max)}.van-badge--fixed{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100%}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}
1
+ :root{--van-badge-size:16px;--van-badge-color:var(--van-white);--van-badge-padding:0 3px;--van-badge-font-size:var(--van-font-size-sm);--van-badge-font-weight:var(--van-font-weight-bold);--van-badge-border-width:var(--van-border-width-base);--van-badge-background-color:var(--van-danger-color);--van-badge-dot-color:var(--van-danger-color);--van-badge-dot-size:8px;--van-badge-font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font-family);line-height:1.2;text-align:center;background:var(--van-badge-background-color);border:var(--van-badge-border-width) solid var(--van-background-color-light);border-radius:var(--van-border-radius-max)}.van-badge--fixed{position:absolute;transform-origin:100%}.van-badge--top-left{top:0;left:0;transform:translate(-50%,-50%)}.van-badge--top-right{top:0;right:0;transform:translate(50%,-50%)}.van-badge--bottom-left{bottom:0;left:0;transform:translate(-50%,50%)}.van-badge--bottom-right{bottom:0;right:0;transform:translate(50%,50%)}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}
@@ -12,6 +12,10 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
12
12
  type: BooleanConstructor;
13
13
  default: true;
14
14
  };
15
+ position: {
16
+ type: import("vue").PropType<import("./Badge").BadgePosition>;
17
+ default: import("./Badge").BadgePosition;
18
+ };
15
19
  }, () => JSX.Element | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
16
20
  dot?: unknown;
17
21
  max?: unknown;
@@ -20,10 +24,12 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
20
24
  offset?: unknown;
21
25
  content?: unknown;
22
26
  showZero?: unknown;
27
+ position?: unknown;
23
28
  } & {
24
29
  dot: boolean;
25
30
  tag: keyof HTMLElementTagNameMap;
26
31
  showZero: boolean;
32
+ position: import("./Badge").BadgePosition;
27
33
  } & {
28
34
  max?: string | number | undefined;
29
35
  color?: string | undefined;
@@ -33,6 +39,7 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
33
39
  dot: boolean;
34
40
  tag: keyof HTMLElementTagNameMap;
35
41
  showZero: boolean;
42
+ position: import("./Badge").BadgePosition;
36
43
  }>>;
37
44
  export default Badge;
38
- export type { BadgeProps } from './Badge';
45
+ export type { BadgeProps, BadgePosition } from './Badge';
@@ -30,10 +30,31 @@
30
30
 
31
31
  &--fixed {
32
32
  position: absolute;
33
+ transform-origin: 100%;
34
+ }
35
+
36
+ &--top-left {
37
+ top: 0;
38
+ left: 0;
39
+ transform: translate(-50%, -50%);
40
+ }
41
+
42
+ &--top-right {
33
43
  top: 0;
34
44
  right: 0;
35
45
  transform: translate(50%, -50%);
36
- transform-origin: 100%;
46
+ }
47
+
48
+ &--bottom-left {
49
+ bottom: 0;
50
+ left: 0;
51
+ transform: translate(-50%, 50%);
52
+ }
53
+
54
+ &--bottom-right {
55
+ bottom: 0;
56
+ right: 0;
57
+ transform: translate(50%, 50%);
37
58
  }
38
59
 
39
60
  &--dot {
@@ -203,13 +203,13 @@ declare const _default: import("vue").DefineComponent<{
203
203
  firstDayOfWeek?: unknown;
204
204
  } & {
205
205
  type: CalendarType;
206
+ position: PopupPosition;
206
207
  round: boolean;
207
208
  readonly: boolean;
208
209
  safeAreaInsetBottom: boolean;
209
210
  show: boolean;
210
211
  lazyRender: boolean;
211
212
  closeOnClickOverlay: boolean;
212
- position: PopupPosition;
213
213
  closeOnPopstate: boolean;
214
214
  minDate: Date;
215
215
  maxDate: Date;
@@ -242,13 +242,13 @@ declare const _default: import("vue").DefineComponent<{
242
242
  "onOver-range"?: ((...args: any[]) => any) | undefined;
243
243
  }, {
244
244
  type: CalendarType;
245
+ position: PopupPosition;
245
246
  round: boolean;
246
247
  readonly: boolean;
247
248
  safeAreaInsetBottom: boolean;
248
249
  show: boolean;
249
250
  lazyRender: boolean;
250
251
  closeOnClickOverlay: boolean;
251
- position: PopupPosition;
252
252
  closeOnPopstate: boolean;
253
253
  minDate: Date;
254
254
  maxDate: Date;
@@ -114,13 +114,13 @@ export declare const Calendar: import("../utils").WithInstall<import("vue").Defi
114
114
  firstDayOfWeek?: unknown;
115
115
  } & {
116
116
  type: import("./types").CalendarType;
117
+ position: import("..").PopupPosition;
117
118
  round: boolean;
118
119
  readonly: boolean;
119
120
  safeAreaInsetBottom: boolean;
120
121
  show: boolean;
121
122
  lazyRender: boolean;
122
123
  closeOnClickOverlay: boolean;
123
- position: import("..").PopupPosition;
124
124
  closeOnPopstate: boolean;
125
125
  minDate: Date;
126
126
  maxDate: Date;
@@ -153,13 +153,13 @@ export declare const Calendar: import("../utils").WithInstall<import("vue").Defi
153
153
  "onOver-range"?: ((...args: any[]) => any) | undefined;
154
154
  }, {
155
155
  type: import("./types").CalendarType;
156
+ position: import("..").PopupPosition;
156
157
  round: boolean;
157
158
  readonly: boolean;
158
159
  safeAreaInsetBottom: boolean;
159
160
  show: boolean;
160
161
  lazyRender: boolean;
161
162
  closeOnClickOverlay: boolean;
162
- position: import("..").PopupPosition;
163
163
  closeOnPopstate: boolean;
164
164
  minDate: Date;
165
165
  maxDate: Date;
@@ -2,7 +2,7 @@ import { createVNode as _createVNode, mergeProps as _mergeProps, resolveDirectiv
2
2
  import { ref, watch, computed, nextTick, onMounted, defineComponent } from 'vue'; // Utils
3
3
 
4
4
  import { pick, clamp, extend, isDate, padZero, makeStringProp, createNamespace } from '../utils';
5
- import { times, sharedProps, getTrueValue, getMonthEndDay, pickerInheritKeys } from './utils'; // Composables
5
+ import { times, sharedProps, getTrueValue, getMonthEndDay, pickerInheritKeys, proxyPickerMethods } from './utils'; // Composables
6
6
 
7
7
  import { useExpose } from '../composables/use-expose'; // Components
8
8
 
@@ -281,7 +281,7 @@ export default defineComponent({
281
281
  }
282
282
  });
283
283
  useExpose({
284
- getPicker: () => picker.value
284
+ getPicker: () => picker.value && proxyPickerMethods(picker.value, updateInnerValue)
285
285
  });
286
286
  return () => _createVNode(Picker, _mergeProps({
287
287
  "ref": picker,
@@ -2,7 +2,7 @@ import { createVNode as _createVNode, mergeProps as _mergeProps, resolveDirectiv
2
2
  import { ref, watch, computed, nextTick, onMounted, defineComponent } from 'vue'; // Utils
3
3
 
4
4
  import { pick, clamp, extend, padZero, createNamespace, makeNumericProp } from '../utils';
5
- import { times, sharedProps, pickerInheritKeys } from './utils'; // Composables
5
+ import { times, sharedProps, pickerInheritKeys, proxyPickerMethods } from './utils'; // Composables
6
6
 
7
7
  import { useExpose } from '../composables/use-expose'; // Components
8
8
 
@@ -121,7 +121,7 @@ export default defineComponent({
121
121
  }
122
122
  });
123
123
  useExpose({
124
- getPicker: () => picker.value
124
+ getPicker: () => picker.value && proxyPickerMethods(picker.value, updateInnerValue)
125
125
  });
126
126
  return () => _createVNode(Picker, _mergeProps({
127
127
  "ref": picker,
@@ -1,4 +1,5 @@
1
1
  import { PropType } from 'vue';
2
+ import type { PickerInstance } from '../picker';
2
3
  import type { DatetimePickerColumnType } from './types';
3
4
  export declare const sharedProps: {
4
5
  title: StringConstructor;
@@ -35,3 +36,4 @@ export declare const pickerInheritKeys: ("title" | "readonly" | "loading" | "all
35
36
  export declare function times<T>(n: number, iteratee: (index: number) => T): T[];
36
37
  export declare function getTrueValue(value: string | undefined): number;
37
38
  export declare const getMonthEndDay: (year: number, month: number) => number;
39
+ export declare const proxyPickerMethods: (picker: PickerInstance, callback: () => void) => PickerInstance;
@@ -34,4 +34,20 @@ export function getTrueValue(value) {
34
34
 
35
35
  return parseInt(value, 10);
36
36
  }
37
- export var getMonthEndDay = (year, month) => 32 - new Date(year, month - 1, 32).getDate();
37
+ export var getMonthEndDay = (year, month) => 32 - new Date(year, month - 1, 32).getDate(); // https://github.com/youzan/vant/issues/10013
38
+
39
+ export var proxyPickerMethods = (picker, callback) => {
40
+ var methods = ['setValues', 'setIndexes', 'setColumnIndex', 'setColumnValue'];
41
+ return new Proxy(picker, {
42
+ get: (target, prop) => {
43
+ if (methods.includes(prop)) {
44
+ return function () {
45
+ target[prop](...arguments);
46
+ callback();
47
+ };
48
+ }
49
+
50
+ return target[prop];
51
+ }
52
+ });
53
+ };
package/es/field/Field.js CHANGED
@@ -2,7 +2,7 @@ import { resolveDirective as _resolveDirective, createTextVNode as _createTextVN
2
2
  import { ref, watch, provide, computed, nextTick, reactive, onMounted, defineComponent } from 'vue'; // Utils
3
3
 
4
4
  import { isDef, extend, addUnit, FORM_KEY, numericProp, unknownProp, resetScroll, formatNumber, preventDefault, makeStringProp, makeNumericProp, createNamespace } from '../utils';
5
- import { runSyncRule, endComposing, mapInputType, startComposing, getRuleMessage, resizeTextarea, runRuleValidator } from './utils';
5
+ import { cutString, runSyncRule, endComposing, mapInputType, startComposing, getRuleMessage, resizeTextarea, getStringLength, runRuleValidator } from './utils';
6
6
  import { cellSharedProps } from '../cell/Cell'; // Composables
7
7
 
8
8
  import { CUSTOM_FIELD_INJECTION_KEY, useParent } from '@vant/use';
@@ -204,14 +204,14 @@ export default defineComponent({
204
204
  maxlength
205
205
  } = props;
206
206
 
207
- if (isDef(maxlength) && value.length > maxlength) {
207
+ if (isDef(maxlength) && getStringLength(value) > maxlength) {
208
208
  var modelValue = getModelValue();
209
209
 
210
- if (modelValue && modelValue.length === +maxlength) {
210
+ if (modelValue && getStringLength(modelValue) === +maxlength) {
211
211
  return modelValue;
212
212
  }
213
213
 
214
- return value.slice(0, +maxlength);
214
+ return cutString(value, +maxlength);
215
215
  }
216
216
 
217
217
  return value;
@@ -418,7 +418,7 @@ export default defineComponent({
418
418
 
419
419
  var renderWordLimit = () => {
420
420
  if (props.showWordLimit && props.maxlength) {
421
- var count = getModelValue().length;
421
+ var count = getStringLength(getModelValue());
422
422
  return _createVNode("div", {
423
423
  "class": bem('word-limit')
424
424
  }, [_createVNode("span", {
@@ -10,3 +10,5 @@ export declare function mapInputType(type: FieldType): {
10
10
  type: InputHTMLAttributes['type'];
11
11
  inputmode?: HTMLAttributes['inputmode'];
12
12
  };
13
+ export declare function getStringLength(str: string): number;
14
+ export declare function cutString(str: string, maxlength: number): string;
package/es/field/utils.js CHANGED
@@ -107,4 +107,13 @@ export function mapInputType(type) {
107
107
  return {
108
108
  type
109
109
  };
110
+ } // get correct length of emoji
111
+ // https://github.com/youzan/vant/issues/10032
112
+
113
+ export function getStringLength(str) {
114
+ return [...str].length;
115
+ } // cut string with emoji
116
+
117
+ export function cutString(str, maxlength) {
118
+ return [...str].slice(0, maxlength).join('');
110
119
  }
package/es/index.d.ts CHANGED
@@ -90,4 +90,4 @@ declare namespace _default {
90
90
  }
91
91
  export default _default;
92
92
  export function install(app: any): void;
93
- export const version: "3.3.6";
93
+ export const version: "3.3.7";
package/es/index.js CHANGED
@@ -84,7 +84,7 @@ import { Tag } from './tag';
84
84
  import { Toast } from './toast';
85
85
  import { TreeSelect } from './tree-select';
86
86
  import { Uploader } from './uploader';
87
- var version = '3.3.6';
87
+ var version = '3.3.7';
88
88
 
89
89
  function install(app) {
90
90
  var components = [ActionBar, ActionBarButton, ActionBarIcon, ActionSheet, AddressEdit, AddressList, Area, Badge, Button, Calendar, Card, Cascader, Cell, CellGroup, Checkbox, CheckboxGroup, Circle, Col, Collapse, CollapseItem, ConfigProvider, ContactCard, ContactEdit, ContactList, CountDown, Coupon, CouponCell, CouponList, DatetimePicker, Dialog, Divider, DropdownItem, DropdownMenu, Empty, Field, Form, Grid, GridItem, Icon, Image, ImagePreview, IndexAnchor, IndexBar, List, Loading, Locale, NavBar, NoticeBar, Notify, NumberKeyboard, Overlay, Pagination, PasswordInput, Picker, Popover, Popup, Progress, PullRefresh, Radio, RadioGroup, Rate, Row, Search, ShareSheet, Sidebar, SidebarItem, Skeleton, Slider, Step, Stepper, Steps, Sticky, SubmitBar, Swipe, SwipeCell, SwipeItem, Switch, Tab, Tabbar, TabbarItem, Tabs, Tag, Toast, TreeSelect, Uploader];
@@ -120,7 +120,7 @@ export default defineComponent({
120
120
  }, [_createVNode("button", {
121
121
  "type": "button",
122
122
  "disabled": disabled,
123
- "onClick": () => updateModelValue(modelValue - 1)
123
+ "onClick": () => updateModelValue(modelValue - 1, true)
124
124
  }, [slot ? slot() : props.prevText || t('prev')])]);
125
125
  };
126
126
 
@@ -140,7 +140,7 @@ export default defineComponent({
140
140
  }, [_createVNode("button", {
141
141
  "type": "button",
142
142
  "disabled": disabled,
143
- "onClick": () => updateModelValue(modelValue + 1)
143
+ "onClick": () => updateModelValue(modelValue + 1, true)
144
144
  }, [slot ? slot() : props.nextText || t('next')])]);
145
145
  };
146
146
 
@@ -152,7 +152,7 @@ export default defineComponent({
152
152
  }, [_createVNode("button", {
153
153
  "type": "button",
154
154
  "aria-current": page.active || undefined,
155
- "onClick": () => updateModelValue(page.number)
155
+ "onClick": () => updateModelValue(page.number, true)
156
156
  }, [slots.page ? slots.page(page) : page.text])]));
157
157
 
158
158
  return () => _createVNode("nav", {
@@ -114,6 +114,7 @@ declare const _default: import("vue").DefineComponent<{
114
114
  closeIconPosition?: unknown;
115
115
  safeAreaInsetBottom?: unknown;
116
116
  } & {
117
+ position: PopupPosition;
117
118
  round: boolean;
118
119
  safeAreaInsetBottom: boolean;
119
120
  overlay: boolean;
@@ -122,7 +123,6 @@ declare const _default: import("vue").DefineComponent<{
122
123
  lazyRender: boolean;
123
124
  transitionAppear: boolean;
124
125
  closeOnClickOverlay: boolean;
125
- position: PopupPosition;
126
126
  closeIcon: string;
127
127
  closeable: boolean;
128
128
  closeOnPopstate: boolean;
@@ -145,6 +145,7 @@ declare const _default: import("vue").DefineComponent<{
145
145
  "onClick-overlay"?: ((...args: any[]) => any) | undefined;
146
146
  "onClick-close-icon"?: ((...args: any[]) => any) | undefined;
147
147
  }, {
148
+ position: PopupPosition;
148
149
  round: boolean;
149
150
  safeAreaInsetBottom: boolean;
150
151
  overlay: boolean;
@@ -153,7 +154,6 @@ declare const _default: import("vue").DefineComponent<{
153
154
  lazyRender: boolean;
154
155
  transitionAppear: boolean;
155
156
  closeOnClickOverlay: boolean;
156
- position: PopupPosition;
157
157
  closeIcon: string;
158
158
  closeable: boolean;
159
159
  closeOnPopstate: boolean;
@@ -65,6 +65,7 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
65
65
  closeIconPosition?: unknown;
66
66
  safeAreaInsetBottom?: unknown;
67
67
  } & {
68
+ position: import("./Popup").PopupPosition;
68
69
  round: boolean;
69
70
  safeAreaInsetBottom: boolean;
70
71
  overlay: boolean;
@@ -73,7 +74,6 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
73
74
  lazyRender: boolean;
74
75
  transitionAppear: boolean;
75
76
  closeOnClickOverlay: boolean;
76
- position: import("./Popup").PopupPosition;
77
77
  closeIcon: string;
78
78
  closeable: boolean;
79
79
  closeOnPopstate: boolean;
@@ -96,6 +96,7 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
96
96
  "onClick-overlay"?: ((...args: any[]) => any) | undefined;
97
97
  "onClick-close-icon"?: ((...args: any[]) => any) | undefined;
98
98
  }, {
99
+ position: import("./Popup").PopupPosition;
99
100
  round: boolean;
100
101
  safeAreaInsetBottom: boolean;
101
102
  overlay: boolean;
@@ -104,7 +105,6 @@ export declare const Popup: import("../utils").WithInstall<import("vue").DefineC
104
105
  lazyRender: boolean;
105
106
  transitionAppear: boolean;
106
107
  closeOnClickOverlay: boolean;
107
- position: import("./Popup").PopupPosition;
108
108
  closeIcon: string;
109
109
  closeable: boolean;
110
110
  closeOnPopstate: boolean;
@@ -83,11 +83,11 @@ declare const _default: import("vue").DefineComponent<{
83
83
  closeOnClickOverlay?: unknown;
84
84
  } & {
85
85
  type: ToastType;
86
+ position: ToastPosition;
86
87
  overlay: boolean;
87
88
  show: boolean;
88
89
  duration: number;
89
90
  closeOnClickOverlay: boolean;
90
- position: ToastPosition;
91
91
  transition: string;
92
92
  forbidClick: boolean;
93
93
  closeOnClick: boolean;
@@ -104,11 +104,11 @@ declare const _default: import("vue").DefineComponent<{
104
104
  "onUpdate:show"?: ((...args: any[]) => any) | undefined;
105
105
  }, {
106
106
  type: ToastType;
107
+ position: ToastPosition;
107
108
  overlay: boolean;
108
109
  show: boolean;
109
110
  duration: number;
110
111
  closeOnClickOverlay: boolean;
111
- position: ToastPosition;
112
112
  transition: string;
113
113
  forbidClick: boolean;
114
114
  closeOnClick: boolean;
@@ -1,4 +1,5 @@
1
1
  import { PropType, ExtractPropTypes } from 'vue';
2
+ export declare type BadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
2
3
  declare const badgeProps: {
3
4
  dot: BooleanConstructor;
4
5
  max: (NumberConstructor | StringConstructor)[];
@@ -13,6 +14,10 @@ declare const badgeProps: {
13
14
  type: BooleanConstructor;
14
15
  default: true;
15
16
  };
17
+ position: {
18
+ type: PropType<BadgePosition>;
19
+ default: BadgePosition;
20
+ };
16
21
  };
17
22
  export declare type BadgeProps = ExtractPropTypes<typeof badgeProps>;
18
23
  declare const _default: import("vue").DefineComponent<{
@@ -29,6 +34,10 @@ declare const _default: import("vue").DefineComponent<{
29
34
  type: BooleanConstructor;
30
35
  default: true;
31
36
  };
37
+ position: {
38
+ type: PropType<BadgePosition>;
39
+ default: BadgePosition;
40
+ };
32
41
  }, () => JSX.Element | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
33
42
  dot?: unknown;
34
43
  max?: unknown;
@@ -37,10 +46,12 @@ declare const _default: import("vue").DefineComponent<{
37
46
  offset?: unknown;
38
47
  content?: unknown;
39
48
  showZero?: unknown;
49
+ position?: unknown;
40
50
  } & {
41
51
  dot: boolean;
42
52
  tag: keyof HTMLElementTagNameMap;
43
53
  showZero: boolean;
54
+ position: BadgePosition;
44
55
  } & {
45
56
  max?: string | number | undefined;
46
57
  color?: string | undefined;
@@ -50,5 +61,6 @@ declare const _default: import("vue").DefineComponent<{
50
61
  dot: boolean;
51
62
  tag: keyof HTMLElementTagNameMap;
52
63
  showZero: boolean;
64
+ position: BadgePosition;
53
65
  }>;
54
66
  export default _default;
@@ -15,7 +15,8 @@ var badgeProps = {
15
15
  color: String,
16
16
  offset: Array,
17
17
  content: _utils.numericProp,
18
- showZero: _utils.truthProp
18
+ showZero: _utils.truthProp,
19
+ position: (0, _utils.makeStringProp)('top-right')
19
20
  };
20
21
 
21
22
  var _default = (0, _vue.defineComponent)({
@@ -87,10 +88,10 @@ var _default = (0, _vue.defineComponent)({
87
88
  var renderBadge = () => {
88
89
  if (hasContent() || props.dot) {
89
90
  return (0, _vue.createVNode)("div", {
90
- "class": bem({
91
+ "class": bem([props.position, {
91
92
  dot: props.dot,
92
93
  fixed: !!slots.default
93
- }),
94
+ }]),
94
95
  "style": style.value
95
96
  }, [renderContent()]);
96
97
  }
@@ -1 +1 @@
1
- :root{--van-badge-size:16px;--van-badge-color:var(--van-white);--van-badge-padding:0 3px;--van-badge-font-size:var(--van-font-size-sm);--van-badge-font-weight:var(--van-font-weight-bold);--van-badge-border-width:var(--van-border-width-base);--van-badge-background-color:var(--van-danger-color);--van-badge-dot-color:var(--van-danger-color);--van-badge-dot-size:8px;--van-badge-font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font-family);line-height:1.2;text-align:center;background:var(--van-badge-background-color);border:var(--van-badge-border-width) solid var(--van-background-color-light);border-radius:var(--van-border-radius-max)}.van-badge--fixed{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100%}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}
1
+ :root{--van-badge-size:16px;--van-badge-color:var(--van-white);--van-badge-padding:0 3px;--van-badge-font-size:var(--van-font-size-sm);--van-badge-font-weight:var(--van-font-weight-bold);--van-badge-border-width:var(--van-border-width-base);--van-badge-background-color:var(--van-danger-color);--van-badge-dot-color:var(--van-danger-color);--van-badge-dot-size:8px;--van-badge-font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif}.van-badge{display:inline-block;box-sizing:border-box;min-width:var(--van-badge-size);padding:var(--van-badge-padding);color:var(--van-badge-color);font-weight:var(--van-badge-font-weight);font-size:var(--van-badge-font-size);font-family:var(--van-badge-font-family);line-height:1.2;text-align:center;background:var(--van-badge-background-color);border:var(--van-badge-border-width) solid var(--van-background-color-light);border-radius:var(--van-border-radius-max)}.van-badge--fixed{position:absolute;transform-origin:100%}.van-badge--top-left{top:0;left:0;transform:translate(-50%,-50%)}.van-badge--top-right{top:0;right:0;transform:translate(50%,-50%)}.van-badge--bottom-left{bottom:0;left:0;transform:translate(-50%,50%)}.van-badge--bottom-right{bottom:0;right:0;transform:translate(50%,50%)}.van-badge--dot{width:var(--van-badge-dot-size);min-width:0;height:var(--van-badge-dot-size);background:var(--van-badge-dot-color);border-radius:100%;border:none;padding:0}.van-badge__wrapper{position:relative;display:inline-block}
@@ -12,6 +12,10 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
12
12
  type: BooleanConstructor;
13
13
  default: true;
14
14
  };
15
+ position: {
16
+ type: import("vue").PropType<import("./Badge").BadgePosition>;
17
+ default: import("./Badge").BadgePosition;
18
+ };
15
19
  }, () => JSX.Element | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("@vue/runtime-core").ComponentCustomProps, Readonly<{
16
20
  dot?: unknown;
17
21
  max?: unknown;
@@ -20,10 +24,12 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
20
24
  offset?: unknown;
21
25
  content?: unknown;
22
26
  showZero?: unknown;
27
+ position?: unknown;
23
28
  } & {
24
29
  dot: boolean;
25
30
  tag: keyof HTMLElementTagNameMap;
26
31
  showZero: boolean;
32
+ position: import("./Badge").BadgePosition;
27
33
  } & {
28
34
  max?: string | number | undefined;
29
35
  color?: string | undefined;
@@ -33,6 +39,7 @@ export declare const Badge: import("../utils").WithInstall<import("vue").DefineC
33
39
  dot: boolean;
34
40
  tag: keyof HTMLElementTagNameMap;
35
41
  showZero: boolean;
42
+ position: import("./Badge").BadgePosition;
36
43
  }>>;
37
44
  export default Badge;
38
- export type { BadgeProps } from './Badge';
45
+ export type { BadgeProps, BadgePosition } from './Badge';
@@ -30,10 +30,31 @@
30
30
 
31
31
  &--fixed {
32
32
  position: absolute;
33
+ transform-origin: 100%;
34
+ }
35
+
36
+ &--top-left {
37
+ top: 0;
38
+ left: 0;
39
+ transform: translate(-50%, -50%);
40
+ }
41
+
42
+ &--top-right {
33
43
  top: 0;
34
44
  right: 0;
35
45
  transform: translate(50%, -50%);
36
- transform-origin: 100%;
46
+ }
47
+
48
+ &--bottom-left {
49
+ bottom: 0;
50
+ left: 0;
51
+ transform: translate(-50%, 50%);
52
+ }
53
+
54
+ &--bottom-right {
55
+ bottom: 0;
56
+ right: 0;
57
+ transform: translate(50%, 50%);
37
58
  }
38
59
 
39
60
  &--dot {
@@ -203,13 +203,13 @@ declare const _default: import("vue").DefineComponent<{
203
203
  firstDayOfWeek?: unknown;
204
204
  } & {
205
205
  type: CalendarType;
206
+ position: PopupPosition;
206
207
  round: boolean;
207
208
  readonly: boolean;
208
209
  safeAreaInsetBottom: boolean;
209
210
  show: boolean;
210
211
  lazyRender: boolean;
211
212
  closeOnClickOverlay: boolean;
212
- position: PopupPosition;
213
213
  closeOnPopstate: boolean;
214
214
  minDate: Date;
215
215
  maxDate: Date;
@@ -242,13 +242,13 @@ declare const _default: import("vue").DefineComponent<{
242
242
  "onOver-range"?: ((...args: any[]) => any) | undefined;
243
243
  }, {
244
244
  type: CalendarType;
245
+ position: PopupPosition;
245
246
  round: boolean;
246
247
  readonly: boolean;
247
248
  safeAreaInsetBottom: boolean;
248
249
  show: boolean;
249
250
  lazyRender: boolean;
250
251
  closeOnClickOverlay: boolean;
251
- position: PopupPosition;
252
252
  closeOnPopstate: boolean;
253
253
  minDate: Date;
254
254
  maxDate: Date;