antd-mobile 5.31.1 → 5.32.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 (170) hide show
  1. package/2x/bundle/antd-mobile.cjs.development.js +281 -252
  2. package/2x/bundle/antd-mobile.cjs.js +9 -9
  3. package/2x/bundle/antd-mobile.es.development.js +282 -253
  4. package/2x/bundle/antd-mobile.es.js +4494 -4468
  5. package/2x/bundle/antd-mobile.umd.development.js +281 -252
  6. package/2x/bundle/antd-mobile.umd.js +9 -9
  7. package/2x/bundle/style.css +1 -0
  8. package/2x/cjs/components/calendar/convert.js +1 -6
  9. package/2x/cjs/components/capsule-tabs/capsule-tabs.js +2 -4
  10. package/2x/cjs/components/cascader/cascader.d.ts +2 -0
  11. package/2x/cjs/components/cascader/index.d.ts +1 -0
  12. package/2x/cjs/components/checkbox/checkbox.d.ts +2 -0
  13. package/2x/cjs/components/checkbox/checkbox.js +1 -0
  14. package/2x/cjs/components/checkbox/index.d.ts +1 -0
  15. package/2x/cjs/components/collapse/collapse.js +1 -1
  16. package/2x/cjs/components/date-picker/date-picker-date-utils.js +24 -36
  17. package/2x/cjs/components/date-picker/date-picker-week-utils.js +12 -18
  18. package/2x/cjs/components/date-picker-view/date-picker-view.d.ts +7 -5
  19. package/2x/cjs/components/date-picker-view/date-picker-view.js +8 -2
  20. package/2x/cjs/components/dropdown/dropdown.js +1 -1
  21. package/2x/cjs/components/footer/footer.js +17 -21
  22. package/2x/cjs/components/image-uploader/image-uploader.js +1 -3
  23. package/2x/cjs/components/input/input.js +5 -1
  24. package/2x/cjs/components/jumbo-tabs/jumbo-tabs.js +1 -1
  25. package/2x/cjs/components/modal/modal.js +11 -13
  26. package/2x/cjs/components/popover/popover.js +5 -7
  27. package/2x/cjs/components/popup/popup.js +3 -3
  28. package/2x/cjs/components/radio/radio.d.ts +1 -0
  29. package/2x/cjs/components/radio/radio.js +1 -0
  30. package/2x/cjs/components/rate/star.d.ts +1 -1
  31. package/2x/cjs/components/result/result.js +2 -2
  32. package/2x/cjs/components/safe-area/safe-area.d.ts +1 -1
  33. package/2x/cjs/components/safe-area/safe-area.js +1 -1
  34. package/2x/cjs/components/side-bar/side-bar.d.ts +1 -2
  35. package/2x/cjs/components/side-bar/side-bar.js +4 -2
  36. package/2x/cjs/components/skeleton/skeleton.d.ts +1 -1
  37. package/2x/cjs/components/stepper/stepper.js +1 -5
  38. package/2x/cjs/components/tab-bar/tab-bar.d.ts +1 -2
  39. package/2x/cjs/components/tab-bar/tab-bar.js +4 -2
  40. package/2x/cjs/components/tabs/tabs.js +1 -1
  41. package/2x/cjs/components/text-area/text-area.css +1 -0
  42. package/2x/cjs/components/tree-select/multiple.js +2 -6
  43. package/2x/cjs/components/virtual-input/virtual-input.js +1 -1
  44. package/2x/cjs/locales/ru-RU.d.ts +134 -0
  45. package/2x/cjs/locales/ru-RU.js +144 -0
  46. package/2x/es/components/calendar/convert.js +1 -6
  47. package/2x/es/components/capsule-tabs/capsule-tabs.js +3 -5
  48. package/2x/es/components/cascader/cascader.d.ts +2 -0
  49. package/2x/es/components/cascader/index.d.ts +1 -0
  50. package/2x/es/components/checkbox/checkbox.d.ts +2 -0
  51. package/2x/es/components/checkbox/checkbox.js +1 -0
  52. package/2x/es/components/checkbox/index.d.ts +1 -0
  53. package/2x/es/components/collapse/collapse.js +2 -2
  54. package/2x/es/components/date-picker/date-picker-date-utils.js +24 -36
  55. package/2x/es/components/date-picker/date-picker-week-utils.js +12 -18
  56. package/2x/es/components/date-picker-view/date-picker-view.d.ts +7 -5
  57. package/2x/es/components/date-picker-view/date-picker-view.js +8 -2
  58. package/2x/es/components/dropdown/dropdown.js +2 -2
  59. package/2x/es/components/footer/footer.js +17 -21
  60. package/2x/es/components/image-uploader/image-uploader.js +1 -3
  61. package/2x/es/components/input/input.js +5 -1
  62. package/2x/es/components/jumbo-tabs/jumbo-tabs.js +2 -2
  63. package/2x/es/components/modal/modal.js +11 -13
  64. package/2x/es/components/popover/popover.js +5 -7
  65. package/2x/es/components/popup/popup.js +3 -3
  66. package/2x/es/components/radio/radio.d.ts +1 -0
  67. package/2x/es/components/radio/radio.js +1 -0
  68. package/2x/es/components/rate/star.d.ts +1 -1
  69. package/2x/es/components/result/result.js +2 -2
  70. package/2x/es/components/safe-area/safe-area.d.ts +1 -1
  71. package/2x/es/components/safe-area/safe-area.js +1 -1
  72. package/2x/es/components/side-bar/side-bar.d.ts +1 -2
  73. package/2x/es/components/side-bar/side-bar.js +2 -2
  74. package/2x/es/components/skeleton/skeleton.d.ts +1 -1
  75. package/2x/es/components/stepper/stepper.js +1 -5
  76. package/2x/es/components/tab-bar/tab-bar.d.ts +1 -2
  77. package/2x/es/components/tab-bar/tab-bar.js +2 -2
  78. package/2x/es/components/tabs/tabs.js +2 -2
  79. package/2x/es/components/text-area/text-area.css +1 -0
  80. package/2x/es/components/tree-select/multiple.js +2 -6
  81. package/2x/es/components/virtual-input/virtual-input.js +1 -1
  82. package/2x/es/locales/ru-RU.d.ts +134 -0
  83. package/2x/es/locales/ru-RU.js +137 -0
  84. package/2x/package.json +2 -2
  85. package/bundle/antd-mobile.cjs.development.js +281 -252
  86. package/bundle/antd-mobile.cjs.js +9 -9
  87. package/bundle/antd-mobile.compatible.umd.js +1 -1
  88. package/bundle/antd-mobile.es.development.js +282 -253
  89. package/bundle/antd-mobile.es.js +4494 -4468
  90. package/bundle/antd-mobile.umd.development.js +281 -252
  91. package/bundle/antd-mobile.umd.js +9 -9
  92. package/bundle/style.css +1 -1
  93. package/cjs/components/calendar/convert.js +1 -6
  94. package/cjs/components/capsule-tabs/capsule-tabs.js +2 -4
  95. package/cjs/components/cascader/cascader.d.ts +2 -0
  96. package/cjs/components/cascader/index.d.ts +1 -0
  97. package/cjs/components/checkbox/checkbox.d.ts +2 -0
  98. package/cjs/components/checkbox/checkbox.js +1 -0
  99. package/cjs/components/checkbox/index.d.ts +1 -0
  100. package/cjs/components/collapse/collapse.js +1 -1
  101. package/cjs/components/date-picker/date-picker-date-utils.js +24 -36
  102. package/cjs/components/date-picker/date-picker-week-utils.js +12 -18
  103. package/cjs/components/date-picker-view/date-picker-view.d.ts +7 -5
  104. package/cjs/components/date-picker-view/date-picker-view.js +8 -2
  105. package/cjs/components/dropdown/dropdown.js +1 -1
  106. package/cjs/components/footer/footer.js +17 -21
  107. package/cjs/components/image-uploader/image-uploader.js +1 -3
  108. package/cjs/components/input/input.js +5 -1
  109. package/cjs/components/jumbo-tabs/jumbo-tabs.js +1 -1
  110. package/cjs/components/modal/modal.js +11 -13
  111. package/cjs/components/popover/popover.js +5 -7
  112. package/cjs/components/popup/popup.js +3 -3
  113. package/cjs/components/radio/radio.d.ts +1 -0
  114. package/cjs/components/radio/radio.js +1 -0
  115. package/cjs/components/rate/star.d.ts +1 -1
  116. package/cjs/components/result/result.js +2 -2
  117. package/cjs/components/safe-area/safe-area.d.ts +1 -1
  118. package/cjs/components/safe-area/safe-area.js +1 -1
  119. package/cjs/components/side-bar/side-bar.d.ts +1 -2
  120. package/cjs/components/side-bar/side-bar.js +4 -2
  121. package/cjs/components/skeleton/skeleton.d.ts +1 -1
  122. package/cjs/components/stepper/stepper.js +1 -5
  123. package/cjs/components/tab-bar/tab-bar.d.ts +1 -2
  124. package/cjs/components/tab-bar/tab-bar.js +4 -2
  125. package/cjs/components/tabs/tabs.js +1 -1
  126. package/cjs/components/text-area/text-area.css +1 -0
  127. package/cjs/components/tree-select/multiple.js +2 -6
  128. package/cjs/components/virtual-input/virtual-input.js +1 -1
  129. package/cjs/locales/ru-RU.d.ts +134 -0
  130. package/cjs/locales/ru-RU.js +144 -0
  131. package/es/components/calendar/convert.js +1 -6
  132. package/es/components/capsule-tabs/capsule-tabs.js +3 -5
  133. package/es/components/cascader/cascader.d.ts +2 -0
  134. package/es/components/cascader/index.d.ts +1 -0
  135. package/es/components/checkbox/checkbox.d.ts +2 -0
  136. package/es/components/checkbox/checkbox.js +1 -0
  137. package/es/components/checkbox/index.d.ts +1 -0
  138. package/es/components/collapse/collapse.js +2 -2
  139. package/es/components/date-picker/date-picker-date-utils.js +24 -36
  140. package/es/components/date-picker/date-picker-week-utils.js +12 -18
  141. package/es/components/date-picker-view/date-picker-view.d.ts +7 -5
  142. package/es/components/date-picker-view/date-picker-view.js +8 -2
  143. package/es/components/dropdown/dropdown.js +2 -2
  144. package/es/components/footer/footer.js +17 -21
  145. package/es/components/image-uploader/image-uploader.js +1 -3
  146. package/es/components/input/input.js +5 -1
  147. package/es/components/jumbo-tabs/jumbo-tabs.js +2 -2
  148. package/es/components/modal/modal.js +11 -13
  149. package/es/components/popover/popover.js +5 -7
  150. package/es/components/popup/popup.js +3 -3
  151. package/es/components/radio/radio.d.ts +1 -0
  152. package/es/components/radio/radio.js +1 -0
  153. package/es/components/rate/star.d.ts +1 -1
  154. package/es/components/result/result.js +2 -2
  155. package/es/components/safe-area/safe-area.d.ts +1 -1
  156. package/es/components/safe-area/safe-area.js +1 -1
  157. package/es/components/side-bar/side-bar.d.ts +1 -2
  158. package/es/components/side-bar/side-bar.js +2 -2
  159. package/es/components/skeleton/skeleton.d.ts +1 -1
  160. package/es/components/stepper/stepper.js +1 -5
  161. package/es/components/tab-bar/tab-bar.d.ts +1 -2
  162. package/es/components/tab-bar/tab-bar.js +2 -2
  163. package/es/components/tabs/tabs.js +2 -2
  164. package/es/components/text-area/text-area.css +1 -0
  165. package/es/components/tree-select/multiple.js +2 -6
  166. package/es/components/virtual-input/virtual-input.js +1 -1
  167. package/es/locales/ru-RU.d.ts +134 -0
  168. package/es/locales/ru-RU.js +137 -0
  169. package/package.json +2 -2
  170. package/umd/antd-mobile.js +1 -1
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _mergeLocale = require("../utils/merge-locale");
8
+ var _base = require("./base");
9
+ const typeTemplate = '${label} не соответствует типу ${type}';
10
+ const ruRU = (0, _mergeLocale.mergeLocale)(_base.base, {
11
+ locale: 'ru',
12
+ common: {
13
+ confirm: 'Подтвердить',
14
+ cancel: 'Отменить',
15
+ loading: 'Загрузка',
16
+ close: 'Закрыть'
17
+ },
18
+ Calendar: {
19
+ markItems: ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'],
20
+ renderYearAndMonth: (year, month) => `${year}/${month}`
21
+ },
22
+ Cascader: {
23
+ placeholder: 'Выбор'
24
+ },
25
+ Dialog: {
26
+ ok: 'ОК'
27
+ },
28
+ DatePicker: {
29
+ tillNow: 'До настоящего времени'
30
+ },
31
+ ErrorBlock: {
32
+ default: {
33
+ title: 'Упс! Что-то пошло не так',
34
+ description: 'Пожалуйста, подождите минуту и повторите попытку'
35
+ },
36
+ busy: {
37
+ title: 'Упс, не загружается',
38
+ description: 'Попробуйте обновить страницу'
39
+ },
40
+ disconnected: {
41
+ title: 'Сеть занята',
42
+ description: 'Попробуйте обновить страницу'
43
+ },
44
+ empty: {
45
+ title: 'Хм, не могу найти...',
46
+ description: 'Хотите попробовать другой запрос?'
47
+ }
48
+ },
49
+ Form: {
50
+ required: 'Обязательное',
51
+ optional: 'Опциональное',
52
+ defaultValidateMessages: {
53
+ default: 'Ошибка валидации поля ${label}',
54
+ required: 'Пожалуйста, заполните поле ${label}',
55
+ enum: 'Значение ${label} должно быть одним из [${enum}]',
56
+ whitespace: '${label} не может быть пустым символом',
57
+ date: {
58
+ format: '${label} имеет некорректный формат даты',
59
+ parse: '${label} не может быть конвертировано в дату',
60
+ invalid: '${label} не является валидной датой'
61
+ },
62
+ types: {
63
+ string: typeTemplate,
64
+ method: typeTemplate,
65
+ array: typeTemplate,
66
+ object: typeTemplate,
67
+ number: typeTemplate,
68
+ date: typeTemplate,
69
+ boolean: typeTemplate,
70
+ integer: typeTemplate,
71
+ float: typeTemplate,
72
+ regexp: typeTemplate,
73
+ email: typeTemplate,
74
+ url: typeTemplate,
75
+ hex: typeTemplate
76
+ },
77
+ string: {
78
+ len: 'Длина ${label} должна быть ${len} символов(-а)',
79
+ min: 'Длина ${label} должна быть не меньше ${min} символов(-а)',
80
+ max: 'Длина ${label} должна быть не больше ${max} символов(-а)',
81
+ range: 'Длина ${label} должна быть в диапазоне от ${min} до ${max} символов(-а)'
82
+ },
83
+ number: {
84
+ len: '${label} должно быть равно ${len}',
85
+ min: '${label} должно быть значением не меньше ${min}',
86
+ max: '${label} должно быть значением не больше ${max}',
87
+ range: '${label} должно быть значением в диапазоне от ${min} до ${max}'
88
+ },
89
+ array: {
90
+ len: 'Размер ${label} должен быть ${len}',
91
+ min: 'Размер ${label} должен быть не меньше ${min}',
92
+ max: 'Размер ${label} должен быть не больше ${max}',
93
+ range: 'Размер ${label} должен быть в диапазоне от ${min} до ${max}'
94
+ },
95
+ pattern: {
96
+ mismatch: '${label} не соответствует шаблону ${pattern}'
97
+ }
98
+ }
99
+ },
100
+ ImageUploader: {
101
+ uploading: 'Выгружается...',
102
+ upload: 'Выгрузить'
103
+ },
104
+ InfiniteScroll: {
105
+ noMore: 'Больше нет',
106
+ failedToLoad: 'Ошибка загрузки',
107
+ retry: 'Повторить'
108
+ },
109
+ Input: {
110
+ clear: 'очистить'
111
+ },
112
+ Mask: {
113
+ name: 'Маска'
114
+ },
115
+ Modal: {
116
+ ok: 'ОК'
117
+ },
118
+ PasscodeInput: {
119
+ name: 'Ввод пароля'
120
+ },
121
+ PullToRefresh: {
122
+ pulling: 'Прокрутите вниз, чтобы обновления',
123
+ canRelease: 'Отпустите, чтобы немедленно обновить',
124
+ complete: 'Обновление успешно'
125
+ },
126
+ SearchBar: {
127
+ name: 'Панель поиска'
128
+ },
129
+ Slider: {
130
+ name: 'Слайдер'
131
+ },
132
+ Stepper: {
133
+ decrease: 'вычесть',
134
+ increase: 'прибавить'
135
+ },
136
+ Switch: {
137
+ name: 'Переключатель'
138
+ },
139
+ Selector: {
140
+ name: 'Селектор'
141
+ }
142
+ });
143
+ var _default = ruRU;
144
+ exports.default = _default;
@@ -1,11 +1,6 @@
1
1
  import dayjs from 'dayjs';
2
2
  export function convertValueToRange(selectionMode, value) {
3
- if (selectionMode === undefined) {
4
- return null;
5
- }
6
- if (value === null) {
7
- return null;
8
- }
3
+ if (selectionMode === undefined || value === null) return null;
9
4
  if (Array.isArray(value)) {
10
5
  return value;
11
6
  }
@@ -1,4 +1,4 @@
1
- import React, { useRef } from 'react';
1
+ import React, { isValidElement, useRef } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { animated } from '@react-spring/web';
4
4
  import { withNativeProps } from '../../utils/native-props';
@@ -9,9 +9,7 @@ import ScrollMask from '../scroll-mask';
9
9
  import { ShouldRender } from '../../utils/should-render';
10
10
  import { traverseReactNode } from '../../utils/traverse-react-node';
11
11
  const classPrefix = `adm-capsule-tabs`;
12
- export const CapsuleTab = () => {
13
- return null;
14
- };
12
+ export const CapsuleTab = () => null;
15
13
  export const CapsuleTabs = props => {
16
14
  var _a;
17
15
  const tabListContainerRef = useRef(null);
@@ -20,7 +18,7 @@ export const CapsuleTabs = props => {
20
18
  let firstActiveKey = null;
21
19
  const panes = [];
22
20
  traverseReactNode(props.children, (child, index) => {
23
- if (!React.isValidElement(child)) return;
21
+ if (!isValidElement(child)) return;
24
22
  const key = child.key;
25
23
  if (typeof key !== 'string') return;
26
24
  if (index === 0) {
@@ -21,6 +21,7 @@ export declare type CascaderProps = {
21
21
  title?: ReactNode;
22
22
  confirmText?: ReactNode;
23
23
  cancelText?: ReactNode;
24
+ loading?: boolean;
24
25
  children?: (items: (CascaderOption | null)[], actions: CascaderActions) => ReactNode;
25
26
  onTabsChange?: (index: number) => void;
26
27
  activeIcon?: ReactNode;
@@ -38,6 +39,7 @@ export declare const Cascader: React.ForwardRefExoticComponent<{
38
39
  title?: ReactNode;
39
40
  confirmText?: ReactNode;
40
41
  cancelText?: ReactNode;
42
+ loading?: boolean | undefined;
41
43
  children?: ((items: (CascaderOption | null)[], actions: CascaderActions) => ReactNode) | undefined;
42
44
  onTabsChange?: ((index: number) => void) | undefined;
43
45
  activeIcon?: ReactNode;
@@ -15,6 +15,7 @@ declare const _default: import("react").ForwardRefExoticComponent<{
15
15
  title?: import("react").ReactNode;
16
16
  confirmText?: import("react").ReactNode;
17
17
  cancelText?: import("react").ReactNode;
18
+ loading?: boolean | undefined;
18
19
  children?: ((items: (import("../cascader-view").CascaderOption | null)[], actions: import("./cascader").CascaderActions) => import("react").ReactNode) | undefined;
19
20
  onTabsChange?: ((index: number) => void) | undefined;
20
21
  activeIcon?: import("react").ReactNode;
@@ -12,6 +12,7 @@ export declare type CheckboxProps = {
12
12
  id?: string;
13
13
  icon?: (checked: boolean, indeterminate: boolean) => React.ReactNode;
14
14
  children?: React.ReactNode;
15
+ onClick?: (event: React.MouseEvent<HTMLLabelElement, MouseEvent>) => void;
15
16
  } & NativeProps<'--icon-size' | '--font-size' | '--gap'>;
16
17
  export declare type CheckboxRef = {
17
18
  check: () => void;
@@ -29,6 +30,7 @@ export declare const Checkbox: React.ForwardRefExoticComponent<{
29
30
  id?: string | undefined;
30
31
  icon?: ((checked: boolean, indeterminate: boolean) => React.ReactNode) | undefined;
31
32
  children?: React.ReactNode;
33
+ onClick?: ((event: React.MouseEvent<HTMLLabelElement, MouseEvent>) => void) | undefined;
32
34
  } & {
33
35
  className?: string | undefined;
34
36
  style?: (React.CSSProperties & Partial<Record<"--font-size" | "--icon-size" | "--gap", string>>) | undefined;
@@ -69,6 +69,7 @@ export const Checkbox = forwardRef((p, ref) => {
69
69
  }, props.indeterminate ? React.createElement(IndeterminateIcon, null) : checked && React.createElement(CheckIcon, null));
70
70
  };
71
71
  return withNativeProps(props, React.createElement("label", {
72
+ onClick: props.onClick,
72
73
  className: classNames(classPrefix, {
73
74
  [`${classPrefix}-checked`]: checked && !props.indeterminate,
74
75
  [`${classPrefix}-indeterminate`]: props.indeterminate,
@@ -12,6 +12,7 @@ declare const _default: import("react").ForwardRefExoticComponent<{
12
12
  id?: string | undefined;
13
13
  icon?: ((checked: boolean, indeterminate: boolean) => import("react").ReactNode) | undefined;
14
14
  children?: import("react").ReactNode;
15
+ onClick?: ((event: import("react").MouseEvent<HTMLLabelElement, MouseEvent>) => void) | undefined;
15
16
  } & {
16
17
  className?: string | undefined;
17
18
  style?: (import("react").CSSProperties & Partial<Record<"--font-size" | "--icon-size" | "--gap", string>>) | undefined;
@@ -1,4 +1,4 @@
1
- import React, { useRef } from 'react';
1
+ import React, { isValidElement, useRef } from 'react';
2
2
  import { withNativeProps } from '../../utils/native-props';
3
3
  import List from '../list';
4
4
  import { DownOutline } from 'antd-mobile-icons';
@@ -81,7 +81,7 @@ export const Collapse = props => {
81
81
  var _a;
82
82
  const panels = [];
83
83
  traverseReactNode(props.children, child => {
84
- if (!React.isValidElement(child)) return;
84
+ if (!isValidElement(child)) return;
85
85
  const key = child.key;
86
86
  if (typeof key !== 'string') return;
87
87
  panels.push(child);
@@ -66,67 +66,55 @@ export function generateDatePickerColumns(selected, min, max, precision, renderL
66
66
  const lower = minYear;
67
67
  const upper = maxYear;
68
68
  const years = generateColumn(lower, upper, 'year');
69
- ret.push(years.map(v => {
70
- return {
71
- label: renderLabel('year', v),
72
- value: v.toString()
73
- };
74
- }));
69
+ ret.push(years.map(v => ({
70
+ label: renderLabel('year', v),
71
+ value: v.toString()
72
+ })));
75
73
  }
76
74
  if (rank >= precisionRankRecord.month) {
77
75
  const lower = isInMinYear ? minMonth : 1;
78
76
  const upper = isInMaxYear ? maxMonth : 12;
79
77
  const months = generateColumn(lower, upper, 'month');
80
- ret.push(months.map(v => {
81
- return {
82
- label: renderLabel('month', v),
83
- value: v.toString()
84
- };
85
- }));
78
+ ret.push(months.map(v => ({
79
+ label: renderLabel('month', v),
80
+ value: v.toString()
81
+ })));
86
82
  }
87
83
  if (rank >= precisionRankRecord.day) {
88
84
  const lower = isInMinMonth ? minDay : 1;
89
85
  const upper = isInMaxMonth ? maxDay : firstDayInSelectedMonth.daysInMonth();
90
86
  const days = generateColumn(lower, upper, 'day');
91
- ret.push(days.map(v => {
92
- return {
93
- label: renderLabel('day', v),
94
- value: v.toString()
95
- };
96
- }));
87
+ ret.push(days.map(v => ({
88
+ label: renderLabel('day', v),
89
+ value: v.toString()
90
+ })));
97
91
  }
98
92
  if (rank >= precisionRankRecord.hour) {
99
93
  const lower = isInMinDay ? minHour : 0;
100
94
  const upper = isInMaxDay ? maxHour : 23;
101
95
  const hours = generateColumn(lower, upper, 'hour');
102
- ret.push(hours.map(v => {
103
- return {
104
- label: renderLabel('hour', v),
105
- value: v.toString()
106
- };
107
- }));
96
+ ret.push(hours.map(v => ({
97
+ label: renderLabel('hour', v),
98
+ value: v.toString()
99
+ })));
108
100
  }
109
101
  if (rank >= precisionRankRecord.minute) {
110
102
  const lower = isInMinHour ? minMinute : 0;
111
103
  const upper = isInMaxHour ? maxMinute : 59;
112
104
  const minutes = generateColumn(lower, upper, 'minute');
113
- ret.push(minutes.map(v => {
114
- return {
115
- label: renderLabel('minute', v),
116
- value: v.toString()
117
- };
118
- }));
105
+ ret.push(minutes.map(v => ({
106
+ label: renderLabel('minute', v),
107
+ value: v.toString()
108
+ })));
119
109
  }
120
110
  if (rank >= precisionRankRecord.second) {
121
111
  const lower = isInMinMinute ? minSecond : 0;
122
112
  const upper = isInMaxMinute ? maxSecond : 59;
123
113
  const seconds = generateColumn(lower, upper, 'second');
124
- ret.push(seconds.map(v => {
125
- return {
126
- label: renderLabel('second', v),
127
- value: v.toString()
128
- };
129
- }));
114
+ ret.push(seconds.map(v => ({
115
+ label: renderLabel('second', v),
116
+ value: v.toString()
117
+ })));
130
118
  }
131
119
  // Till Now
132
120
  if (tillNow) {
@@ -49,34 +49,28 @@ export function generateDatePickerColumns(selected, min, max, precision, renderL
49
49
  const lower = minYear;
50
50
  const upper = maxYear;
51
51
  const years = generateColumn(lower, upper, 'year');
52
- ret.push(years.map(v => {
53
- return {
54
- label: renderLabel('year', v),
55
- value: v.toString()
56
- };
57
- }));
52
+ ret.push(years.map(v => ({
53
+ label: renderLabel('year', v),
54
+ value: v.toString()
55
+ })));
58
56
  }
59
57
  if (rank >= precisionRankRecord.week) {
60
58
  const lower = isInMinYear ? minWeek : 1;
61
59
  const upper = isInMaxYear ? maxWeek : selectedYearWeeks;
62
60
  const weeks = generateColumn(lower, upper, 'week');
63
- ret.push(weeks.map(v => {
64
- return {
65
- label: renderLabel('week', v),
66
- value: v.toString()
67
- };
68
- }));
61
+ ret.push(weeks.map(v => ({
62
+ label: renderLabel('week', v),
63
+ value: v.toString()
64
+ })));
69
65
  }
70
66
  if (rank >= precisionRankRecord['week-day']) {
71
67
  const lower = isInMinWeek ? minWeekday : 1;
72
68
  const upper = isInMaxWeek ? maxWeekday : 7;
73
69
  const weeks = generateColumn(lower, upper, 'week-day');
74
- ret.push(weeks.map(v => {
75
- return {
76
- label: renderLabel('week-day', v),
77
- value: v.toString()
78
- };
79
- }));
70
+ ret.push(weeks.map(v => ({
71
+ label: renderLabel('week-day', v),
72
+ value: v.toString()
73
+ })));
80
74
  }
81
75
  return ret;
82
76
  }
@@ -2,15 +2,17 @@ import { FC, ReactNode } from 'react';
2
2
  import type { PickerViewProps } from '../picker-view';
3
3
  import { NativeProps } from '../../utils/native-props';
4
4
  import type { Precision, DatePickerFilter } from '../date-picker/date-picker-utils';
5
+ import type { PickerDate } from '../date-picker/util';
5
6
  export declare type RenderLabel = (type: Precision | 'now', data: number) => ReactNode;
6
7
  export declare type DatePickerViewProps = Pick<PickerViewProps, 'style' | 'mouseWheel' | 'loading' | 'loadingContent'> & {
7
- value?: Date;
8
- defaultValue?: Date;
9
- onChange?: (value: Date) => void;
10
- min?: Date;
11
- max?: Date;
8
+ value?: PickerDate;
9
+ defaultValue?: PickerDate;
10
+ onChange?: (value: PickerDate) => void;
11
+ min?: PickerDate;
12
+ max?: PickerDate;
12
13
  precision?: Precision;
13
14
  renderLabel?: RenderLabel;
14
15
  filter?: DatePickerFilter;
16
+ tillNow?: boolean;
15
17
  } & NativeProps;
16
18
  export declare const DatePickerView: FC<DatePickerViewProps>;
@@ -5,6 +5,7 @@ import { mergeProps } from '../../utils/with-default-props';
5
5
  import { usePropsValue } from '../../utils/use-props-value';
6
6
  import { generateDatePickerColumns, convertDateToStringArray, convertStringArrayToDate } from '../date-picker/date-picker-utils';
7
7
  import useRenderLabel from './useRenderLabel';
8
+ import { TILL_NOW } from '../date-picker/util';
8
9
  const thisYear = new Date().getFullYear();
9
10
  const defaultProps = {
10
11
  min: new Date(new Date().setFullYear(thisYear - 10)),
@@ -22,7 +23,12 @@ export const DatePickerView = p => {
22
23
  defaultValue: (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null
23
24
  });
24
25
  const mergedRenderLabel = useRenderLabel(renderLabel);
25
- const pickerValue = useMemo(() => convertDateToStringArray(value, props.precision), [value, props.precision]);
26
+ const pickerValue = useMemo(() => {
27
+ if (value === null || value === void 0 ? void 0 : value.tillNow) {
28
+ return [TILL_NOW, null, null];
29
+ }
30
+ return convertDateToStringArray(value, props.precision);
31
+ }, [value, props.precision]);
26
32
  const onChange = useCallback(val => {
27
33
  var _a;
28
34
  const date = convertStringArrayToDate(val, props.precision);
@@ -32,7 +38,7 @@ export const DatePickerView = p => {
32
38
  }
33
39
  }, [props.onChange, props.precision]);
34
40
  return withNativeProps(props, React.createElement(PickerView, {
35
- columns: selected => generateDatePickerColumns(selected, props.min, props.max, props.precision, mergedRenderLabel, props.filter),
41
+ columns: selected => generateDatePickerColumns(selected, props.min, props.max, props.precision, mergedRenderLabel, props.filter, props.tillNow),
36
42
  loading: props.loading,
37
43
  loadingContent: props.loadingContent,
38
44
  value: pickerValue,
@@ -1,6 +1,6 @@
1
1
  import { useClickAway } from 'ahooks';
2
2
  import classNames from 'classnames';
3
- import React, { cloneElement, useEffect, useRef, useState, forwardRef, useImperativeHandle } from 'react';
3
+ import React, { cloneElement, useEffect, useRef, useState, forwardRef, useImperativeHandle, isValidElement } from 'react';
4
4
  import Popup from '../popup';
5
5
  import { ItemChildrenWrap } from './item';
6
6
  import { withNativeProps } from '../../utils/native-props';
@@ -49,7 +49,7 @@ const Dropdown = forwardRef((p, ref) => {
49
49
  let popupForceRender = false;
50
50
  const items = [];
51
51
  const navs = React.Children.map(props.children, child => {
52
- if (React.isValidElement(child)) {
52
+ if (isValidElement(child)) {
53
53
  const childProps = Object.assign(Object.assign({}, child.props), {
54
54
  onClick: () => {
55
55
  changeActive(child.key);
@@ -35,29 +35,25 @@ export const Footer = p => {
35
35
  className: classNames(classPrefix)
36
36
  }, label && React.createElement("div", {
37
37
  className: `${classPrefix}-label`
38
- }, React.createElement(Divider, null, label)), links && links.length > 0 && React.createElement("div", {
38
+ }, React.createElement(Divider, null, label)), !!(links === null || links === void 0 ? void 0 : links.length) && React.createElement("div", {
39
39
  className: `${classPrefix}-links`
40
- }, links.map((link, index) => {
41
- return React.createElement(React.Fragment, {
42
- key: index
43
- }, React.createElement("a", {
44
- href: link.href,
45
- rel: 'noopener noreferrer',
46
- onClick: event => clickLinkItem(link, index, event)
47
- }, link.text), index !== links.length - 1 && React.createElement(Divider, {
48
- direction: 'vertical'
49
- }));
50
- })), content && React.createElement("div", {
40
+ }, links.map((link, index) => React.createElement(React.Fragment, {
41
+ key: index
42
+ }, React.createElement("a", {
43
+ href: link.href,
44
+ rel: 'noopener noreferrer',
45
+ onClick: event => clickLinkItem(link, index, event)
46
+ }, link.text), index !== links.length - 1 && React.createElement(Divider, {
47
+ direction: 'vertical'
48
+ })))), content && React.createElement("div", {
51
49
  className: `${classPrefix}-content`
52
50
  }, content), chips && chips.length > 0 && React.createElement("div", {
53
51
  className: `${classPrefix}-chips`
54
- }, chips.map((chip, index) => {
55
- return React.createElement("div", {
56
- key: index,
57
- onClick: () => clickChipItem(chip, index),
58
- className: classNames(`${classPrefix}-chip`, {
59
- [`${classPrefix}-chip-link`]: chip.type === 'link'
60
- })
61
- }, chip.text);
62
- }))));
52
+ }, chips.map((chip, index) => React.createElement("div", {
53
+ key: index,
54
+ onClick: () => clickChipItem(chip, index),
55
+ className: classNames(`${classPrefix}-chip`, {
56
+ [`${classPrefix}-chip-link`]: chip.type === 'link'
57
+ })
58
+ }, chip.text)))));
63
59
  };
@@ -95,9 +95,7 @@ export const ImageUploader = p => {
95
95
  let files = [].slice.call(rawFiles);
96
96
  e.target.value = ''; // HACK: fix the same file doesn't trigger onChange
97
97
  if (props.beforeUpload) {
98
- const postFiles = files.map(file => {
99
- return processFile(file, files);
100
- });
98
+ const postFiles = files.map(file => processFile(file, files));
101
99
  yield Promise.all(postFiles).then(filesList => {
102
100
  files = filesList.filter(Boolean);
103
101
  });
@@ -57,7 +57,11 @@ export const Input = forwardRef((p, ref) => {
57
57
  function checkValue() {
58
58
  let nextValue = value;
59
59
  if (props.type === 'number') {
60
- nextValue = nextValue && bound(parseFloat(nextValue), props.min, props.max).toString();
60
+ const boundValue = nextValue && bound(parseFloat(nextValue), props.min, props.max).toString();
61
+ // fix the display issue of numbers starting with 0
62
+ if (Number(nextValue) !== Number(boundValue)) {
63
+ nextValue = boundValue;
64
+ }
61
65
  }
62
66
  if (nextValue !== value) {
63
67
  setValue(nextValue);
@@ -1,4 +1,4 @@
1
- import React, { useRef } from 'react';
1
+ import React, { isValidElement, useRef } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { animated } from '@react-spring/web';
4
4
  import { withNativeProps } from '../../utils/native-props';
@@ -20,7 +20,7 @@ export const JumboTabs = props => {
20
20
  let firstActiveKey = null;
21
21
  const panes = [];
22
22
  traverseReactNode(props.children, (child, index) => {
23
- if (!React.isValidElement(child)) return;
23
+ if (!isValidElement(child)) return;
24
24
  const key = child.key;
25
25
  if (typeof key !== 'string') return;
26
26
  if (index === 0) {
@@ -31,19 +31,17 @@ export const Modal = p => {
31
31
  direction: 'vertical',
32
32
  block: true,
33
33
  className: classNames(cls('footer'), props.actions.length === 0 && cls('footer-empty'))
34
- }, props.actions.map((action, index) => {
35
- return React.createElement(ModalActionButton, {
36
- key: action.key,
37
- action: action,
38
- onAction: () => __awaiter(void 0, void 0, void 0, function* () {
39
- var _a, _b, _c;
40
- yield Promise.all([(_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action), (_b = props.onAction) === null || _b === void 0 ? void 0 : _b.call(props, action, index)]);
41
- if (props.closeOnAction) {
42
- (_c = props.onClose) === null || _c === void 0 ? void 0 : _c.call(props);
43
- }
44
- })
45
- });
46
- })));
34
+ }, props.actions.map((action, index) => React.createElement(ModalActionButton, {
35
+ key: action.key,
36
+ action: action,
37
+ onAction: () => __awaiter(void 0, void 0, void 0, function* () {
38
+ var _a, _b, _c;
39
+ yield Promise.all([(_a = action.onClick) === null || _a === void 0 ? void 0 : _a.call(action), (_b = props.onAction) === null || _b === void 0 ? void 0 : _b.call(props, action, index)]);
40
+ if (props.closeOnAction) {
41
+ (_c = props.onClose) === null || _c === void 0 ? void 0 : _c.call(props);
42
+ }
43
+ })
44
+ }))));
47
45
  return React.createElement(CenterPopup, {
48
46
  className: classNames(cls(), props.className),
49
47
  style: props.style,
@@ -31,13 +31,11 @@ export const Popover = forwardRef((p, ref) => {
31
31
  defaultValue: props.defaultVisible,
32
32
  onChange: props.onVisibleChange
33
33
  });
34
- useImperativeHandle(ref, () => {
35
- return {
36
- show: () => setVisible(true),
37
- hide: () => setVisible(false),
38
- visible
39
- };
40
- }, [visible]);
34
+ useImperativeHandle(ref, () => ({
35
+ show: () => setVisible(true),
36
+ hide: () => setVisible(false),
37
+ visible
38
+ }), [visible]);
41
39
  const targetRef = useRef(null);
42
40
  const floatingRef = useRef(null);
43
41
  const arrowRef = useRef(null);
@@ -21,18 +21,18 @@ const defaultProps = Object.assign(Object.assign({}, defaultPopupBaseProps), {
21
21
  });
22
22
  export const Popup = p => {
23
23
  const props = mergeProps(defaultProps, p);
24
+ const bodyCls = classNames(`${classPrefix}-body`, props.bodyClassName, `${classPrefix}-body-position-${props.position}`);
24
25
  const {
25
26
  locale
26
27
  } = useConfig();
27
- const bodyCls = classNames(`${classPrefix}-body`, props.bodyClassName, `${classPrefix}-body-position-${props.position}`);
28
28
  const [active, setActive] = useState(props.visible);
29
+ const ref = useRef(null);
30
+ useLockScroll(ref, props.disableBodyScroll && active ? 'strict' : false);
29
31
  useIsomorphicLayoutEffect(() => {
30
32
  if (props.visible) {
31
33
  setActive(true);
32
34
  }
33
35
  }, [props.visible]);
34
- const ref = useRef(null);
35
- useLockScroll(ref, props.disableBodyScroll && active ? 'strict' : false);
36
36
  const unmountedRef = useUnmountedRef();
37
37
  const {
38
38
  percent
@@ -11,5 +11,6 @@ export declare type RadioProps = {
11
11
  id?: string;
12
12
  icon?: (checked: boolean) => React.ReactNode;
13
13
  children?: React.ReactNode;
14
+ onClick?: (event: React.MouseEvent<HTMLLabelElement, MouseEvent>) => void;
14
15
  } & NativeProps<'--icon-size' | '--font-size' | '--gap'>;
15
16
  export declare const Radio: FC<RadioProps>;
@@ -56,6 +56,7 @@ export const Radio = p => {
56
56
  }, checked && React.createElement(CheckIcon, null));
57
57
  };
58
58
  return withNativeProps(props, React.createElement("label", {
59
+ onClick: props.onClick,
59
60
  className: classNames(classPrefix, {
60
61
  [`${classPrefix}-checked`]: checked,
61
62
  [`${classPrefix}-disabled`]: disabled,