antd-mobile 5.2.0 → 5.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 (281) hide show
  1. package/2x/cjs/components/calendar/calendar.d.ts +1 -28
  2. package/2x/cjs/components/capsule-tabs/capsule-tabs.d.ts +1 -0
  3. package/2x/cjs/components/capsule-tabs/capsule-tabs.js +14 -17
  4. package/2x/cjs/components/cascade-picker/prompt.d.ts +2 -1
  5. package/2x/cjs/components/collapse/collapse.js +5 -3
  6. package/2x/cjs/components/date-picker/date-picker.js +7 -1
  7. package/2x/cjs/components/dialog/dialog.css +27 -18
  8. package/2x/cjs/components/dialog/dialog.js +39 -42
  9. package/2x/cjs/components/dropdown/dropdown.css +2 -1
  10. package/2x/cjs/components/dropdown/item.js +2 -2
  11. package/2x/cjs/components/ellipsis/ellipsis.d.ts +2 -0
  12. package/2x/cjs/components/ellipsis/ellipsis.js +8 -5
  13. package/2x/cjs/components/form/context.d.ts +2 -1
  14. package/2x/cjs/components/form/context.js +6 -5
  15. package/2x/cjs/components/form/form-item.css +27 -1
  16. package/2x/cjs/components/form/form-item.d.ts +1 -0
  17. package/2x/cjs/components/form/form-item.js +44 -13
  18. package/2x/cjs/components/form/form.d.ts +2 -2
  19. package/2x/cjs/components/form/form.js +18 -9
  20. package/2x/cjs/components/form/index.css +27 -1
  21. package/2x/cjs/components/form/index.d.ts +2 -2
  22. package/2x/cjs/components/image-viewer/image-viewer.d.ts +1 -1
  23. package/2x/cjs/components/image-viewer/index.d.ts +1 -1
  24. package/2x/cjs/components/input/input.d.ts +2 -2
  25. package/2x/cjs/components/input/input.js +2 -2
  26. package/2x/cjs/components/jumbo-tabs/jumbo-tabs.d.ts +1 -0
  27. package/2x/cjs/components/jumbo-tabs/jumbo-tabs.js +14 -17
  28. package/2x/cjs/components/mask/mask.js +2 -2
  29. package/2x/cjs/components/modal/modal.css +27 -21
  30. package/2x/cjs/components/modal/modal.js +39 -36
  31. package/2x/cjs/components/passcode-input/passcode-input.d.ts +1 -1
  32. package/2x/cjs/components/picker/prompt.d.ts +2 -2
  33. package/2x/cjs/components/popover/arrow.js +1 -2
  34. package/2x/cjs/components/popover/index.d.ts +3 -3
  35. package/2x/cjs/components/popover/popover-menu.d.ts +1 -1
  36. package/2x/cjs/components/popover/popover.d.ts +1 -1
  37. package/2x/cjs/components/popup/popup.js +2 -2
  38. package/2x/cjs/components/pull-to-refresh/pull-to-refresh.js +1 -1
  39. package/2x/cjs/components/search-bar/search-bar.js +1 -0
  40. package/2x/cjs/components/selector/selector.d.ts +3 -1
  41. package/2x/cjs/components/stepper/stepper.d.ts +11 -2
  42. package/2x/cjs/components/swiper/index.d.ts +3 -3
  43. package/2x/cjs/components/swiper/swiper.d.ts +3 -3
  44. package/2x/cjs/components/switch/spin-icon.d.ts +3 -0
  45. package/2x/cjs/components/switch/spin-icon.js +37 -0
  46. package/2x/cjs/components/switch/switch.css +1 -1
  47. package/2x/cjs/components/switch/switch.js +4 -6
  48. package/2x/cjs/components/tabs/tabs.d.ts +1 -0
  49. package/2x/cjs/components/tabs/tabs.js +17 -19
  50. package/2x/cjs/components/virtual-input/virtual-input.d.ts +2 -2
  51. package/2x/cjs/locales/base.d.ts +51 -0
  52. package/2x/cjs/locales/base.js +52 -0
  53. package/2x/cjs/locales/en-US.d.ts +51 -0
  54. package/2x/cjs/locales/zh-CN.d.ts +51 -0
  55. package/2x/cjs/locales/zh-CN.js +52 -0
  56. package/2x/cjs/utils/measure-css-length.js +3 -1
  57. package/2x/cjs/utils/native-props.d.ts +1 -1
  58. package/2x/cjs/utils/render-to-container.d.ts +1 -1
  59. package/2x/cjs/utils/should-render.d.ts +10 -0
  60. package/{cjs/utils/use-should-render.js → 2x/cjs/utils/should-render.js} +8 -0
  61. package/2x/cjs/utils/use-drag-and-pinch.d.ts +1 -2
  62. package/2x/cjs/utils/use-isomorphic-update-layout-effect.js +1 -3
  63. package/2x/cjs/utils/use-props-value.d.ts +1 -1
  64. package/2x/cjs/utils/use-tab-list-scroll.js +3 -1
  65. package/2x/cjs/utils/use-touch.d.ts +0 -1
  66. package/2x/cjs/utils/validate.js +1 -1
  67. package/2x/cjs/utils/with-stop-propagation.d.ts +1 -1
  68. package/2x/es/components/calendar/calendar.d.ts +1 -28
  69. package/2x/es/components/capsule-tabs/capsule-tabs.d.ts +1 -0
  70. package/2x/es/components/capsule-tabs/capsule-tabs.js +13 -17
  71. package/2x/es/components/cascade-picker/prompt.d.ts +2 -1
  72. package/2x/es/components/collapse/collapse.js +4 -3
  73. package/2x/es/components/date-picker/date-picker.js +6 -1
  74. package/2x/es/components/dialog/dialog.css +27 -18
  75. package/2x/es/components/dialog/dialog.js +37 -41
  76. package/2x/es/components/dropdown/dropdown.css +2 -1
  77. package/2x/es/components/dropdown/item.js +1 -1
  78. package/2x/es/components/ellipsis/ellipsis.d.ts +2 -0
  79. package/2x/es/components/ellipsis/ellipsis.js +7 -5
  80. package/2x/es/components/form/context.d.ts +2 -1
  81. package/2x/es/components/form/context.js +4 -3
  82. package/2x/es/components/form/form-item.css +27 -1
  83. package/2x/es/components/form/form-item.d.ts +1 -0
  84. package/2x/es/components/form/form-item.js +43 -13
  85. package/2x/es/components/form/form.d.ts +2 -2
  86. package/2x/es/components/form/form.js +18 -11
  87. package/2x/es/components/form/index.css +27 -1
  88. package/2x/es/components/form/index.d.ts +2 -2
  89. package/2x/es/components/image-viewer/image-viewer.d.ts +1 -1
  90. package/2x/es/components/image-viewer/index.d.ts +1 -1
  91. package/2x/es/components/input/input.d.ts +2 -2
  92. package/2x/es/components/input/input.js +2 -2
  93. package/2x/es/components/jumbo-tabs/jumbo-tabs.d.ts +1 -0
  94. package/2x/es/components/jumbo-tabs/jumbo-tabs.js +13 -17
  95. package/2x/es/components/mask/mask.js +1 -1
  96. package/2x/es/components/modal/modal.css +27 -21
  97. package/2x/es/components/modal/modal.js +37 -36
  98. package/2x/es/components/passcode-input/passcode-input.d.ts +1 -1
  99. package/2x/es/components/picker/prompt.d.ts +2 -2
  100. package/2x/es/components/popover/arrow.js +1 -2
  101. package/2x/es/components/popover/index.d.ts +3 -3
  102. package/2x/es/components/popover/popover-menu.d.ts +1 -1
  103. package/2x/es/components/popover/popover.d.ts +1 -1
  104. package/2x/es/components/popup/popup.js +1 -1
  105. package/2x/es/components/pull-to-refresh/pull-to-refresh.js +1 -1
  106. package/2x/es/components/search-bar/search-bar.js +1 -0
  107. package/2x/es/components/selector/selector.d.ts +3 -1
  108. package/2x/es/components/stepper/stepper.d.ts +11 -2
  109. package/2x/es/components/swiper/index.d.ts +3 -3
  110. package/2x/es/components/swiper/swiper.d.ts +3 -3
  111. package/2x/es/components/switch/spin-icon.d.ts +3 -0
  112. package/2x/es/components/switch/spin-icon.js +23 -0
  113. package/2x/es/components/switch/switch.css +1 -1
  114. package/2x/es/components/switch/switch.js +3 -5
  115. package/2x/es/components/tabs/tabs.d.ts +1 -0
  116. package/2x/es/components/tabs/tabs.js +16 -20
  117. package/2x/es/components/virtual-input/virtual-input.d.ts +2 -2
  118. package/2x/es/locales/base.d.ts +51 -0
  119. package/2x/es/locales/base.js +52 -0
  120. package/2x/es/locales/en-US.d.ts +51 -0
  121. package/2x/es/locales/zh-CN.d.ts +51 -0
  122. package/2x/es/locales/zh-CN.js +52 -0
  123. package/2x/es/utils/measure-css-length.js +3 -1
  124. package/2x/es/utils/native-props.d.ts +1 -1
  125. package/2x/es/utils/render-to-container.d.ts +1 -1
  126. package/2x/es/utils/should-render.d.ts +10 -0
  127. package/2x/es/utils/{use-should-render.js → should-render.js} +4 -0
  128. package/2x/es/utils/use-drag-and-pinch.d.ts +1 -2
  129. package/2x/es/utils/use-isomorphic-update-layout-effect.js +1 -2
  130. package/2x/es/utils/use-props-value.d.ts +1 -1
  131. package/2x/es/utils/use-tab-list-scroll.js +3 -2
  132. package/2x/es/utils/use-touch.d.ts +0 -1
  133. package/2x/es/utils/validate.js +1 -1
  134. package/2x/es/utils/with-stop-propagation.d.ts +1 -1
  135. package/2x/package.json +6 -6
  136. package/cjs/components/calendar/calendar.d.ts +1 -28
  137. package/cjs/components/capsule-tabs/capsule-tabs.d.ts +1 -0
  138. package/cjs/components/capsule-tabs/capsule-tabs.js +14 -17
  139. package/cjs/components/cascade-picker/prompt.d.ts +2 -1
  140. package/cjs/components/collapse/collapse.js +5 -3
  141. package/cjs/components/date-picker/date-picker.js +7 -1
  142. package/cjs/components/dialog/dialog.css +26 -18
  143. package/cjs/components/dialog/dialog.js +39 -42
  144. package/cjs/components/dropdown/dropdown.css +2 -1
  145. package/cjs/components/dropdown/item.js +2 -2
  146. package/cjs/components/ellipsis/ellipsis.d.ts +2 -0
  147. package/cjs/components/ellipsis/ellipsis.js +8 -5
  148. package/cjs/components/form/context.d.ts +2 -1
  149. package/cjs/components/form/context.js +6 -5
  150. package/cjs/components/form/form-item.css +21 -1
  151. package/cjs/components/form/form-item.d.ts +1 -0
  152. package/cjs/components/form/form-item.js +44 -13
  153. package/cjs/components/form/form.d.ts +2 -2
  154. package/cjs/components/form/form.js +18 -9
  155. package/cjs/components/form/index.css +21 -1
  156. package/cjs/components/form/index.d.ts +2 -2
  157. package/cjs/components/image-viewer/image-viewer.d.ts +1 -1
  158. package/cjs/components/image-viewer/index.d.ts +1 -1
  159. package/cjs/components/input/input.d.ts +2 -2
  160. package/cjs/components/input/input.js +2 -2
  161. package/cjs/components/jumbo-tabs/jumbo-tabs.d.ts +1 -0
  162. package/cjs/components/jumbo-tabs/jumbo-tabs.js +14 -17
  163. package/cjs/components/mask/mask.js +2 -2
  164. package/cjs/components/modal/modal.css +26 -20
  165. package/cjs/components/modal/modal.js +39 -36
  166. package/cjs/components/passcode-input/passcode-input.d.ts +1 -1
  167. package/cjs/components/picker/prompt.d.ts +2 -2
  168. package/cjs/components/popover/arrow.js +1 -2
  169. package/cjs/components/popover/index.d.ts +3 -3
  170. package/cjs/components/popover/popover-menu.d.ts +1 -1
  171. package/cjs/components/popover/popover.d.ts +1 -1
  172. package/cjs/components/popup/popup.js +2 -2
  173. package/cjs/components/pull-to-refresh/pull-to-refresh.js +1 -1
  174. package/cjs/components/search-bar/search-bar.js +1 -0
  175. package/cjs/components/selector/selector.d.ts +3 -1
  176. package/cjs/components/stepper/stepper.d.ts +11 -2
  177. package/cjs/components/swiper/index.d.ts +3 -3
  178. package/cjs/components/swiper/swiper.d.ts +3 -3
  179. package/cjs/components/switch/spin-icon.d.ts +3 -0
  180. package/cjs/components/switch/spin-icon.js +37 -0
  181. package/cjs/components/switch/switch.css +1 -1
  182. package/cjs/components/switch/switch.js +4 -6
  183. package/cjs/components/tabs/tabs.d.ts +1 -0
  184. package/cjs/components/tabs/tabs.js +17 -19
  185. package/cjs/components/virtual-input/virtual-input.d.ts +2 -2
  186. package/cjs/locales/base.d.ts +51 -0
  187. package/cjs/locales/base.js +52 -0
  188. package/cjs/locales/en-US.d.ts +51 -0
  189. package/cjs/locales/zh-CN.d.ts +51 -0
  190. package/cjs/locales/zh-CN.js +52 -0
  191. package/cjs/utils/measure-css-length.js +3 -1
  192. package/cjs/utils/native-props.d.ts +1 -1
  193. package/cjs/utils/render-to-container.d.ts +1 -1
  194. package/cjs/utils/should-render.d.ts +10 -0
  195. package/{2x/cjs/utils/use-should-render.js → cjs/utils/should-render.js} +8 -0
  196. package/cjs/utils/use-drag-and-pinch.d.ts +1 -2
  197. package/cjs/utils/use-isomorphic-update-layout-effect.js +1 -3
  198. package/cjs/utils/use-props-value.d.ts +1 -1
  199. package/cjs/utils/use-tab-list-scroll.js +3 -1
  200. package/cjs/utils/use-touch.d.ts +0 -1
  201. package/cjs/utils/validate.js +1 -1
  202. package/cjs/utils/with-stop-propagation.d.ts +1 -1
  203. package/es/components/calendar/calendar.d.ts +1 -28
  204. package/es/components/capsule-tabs/capsule-tabs.d.ts +1 -0
  205. package/es/components/capsule-tabs/capsule-tabs.js +13 -17
  206. package/es/components/cascade-picker/prompt.d.ts +2 -1
  207. package/es/components/collapse/collapse.js +4 -3
  208. package/es/components/date-picker/date-picker.js +6 -1
  209. package/es/components/dialog/dialog.css +26 -18
  210. package/es/components/dialog/dialog.js +37 -41
  211. package/es/components/dropdown/dropdown.css +2 -1
  212. package/es/components/dropdown/item.js +1 -1
  213. package/es/components/ellipsis/ellipsis.d.ts +2 -0
  214. package/es/components/ellipsis/ellipsis.js +7 -5
  215. package/es/components/form/context.d.ts +2 -1
  216. package/es/components/form/context.js +4 -3
  217. package/es/components/form/form-item.css +21 -1
  218. package/es/components/form/form-item.d.ts +1 -0
  219. package/es/components/form/form-item.js +43 -13
  220. package/es/components/form/form.d.ts +2 -2
  221. package/es/components/form/form.js +18 -11
  222. package/es/components/form/index.css +21 -1
  223. package/es/components/form/index.d.ts +2 -2
  224. package/es/components/image-viewer/image-viewer.d.ts +1 -1
  225. package/es/components/image-viewer/index.d.ts +1 -1
  226. package/es/components/input/input.d.ts +2 -2
  227. package/es/components/input/input.js +2 -2
  228. package/es/components/jumbo-tabs/jumbo-tabs.d.ts +1 -0
  229. package/es/components/jumbo-tabs/jumbo-tabs.js +13 -17
  230. package/es/components/mask/mask.js +1 -1
  231. package/es/components/modal/modal.css +26 -20
  232. package/es/components/modal/modal.js +37 -36
  233. package/es/components/passcode-input/passcode-input.d.ts +1 -1
  234. package/es/components/picker/prompt.d.ts +2 -2
  235. package/es/components/popover/arrow.js +1 -2
  236. package/es/components/popover/index.d.ts +3 -3
  237. package/es/components/popover/popover-menu.d.ts +1 -1
  238. package/es/components/popover/popover.d.ts +1 -1
  239. package/es/components/popup/popup.js +1 -1
  240. package/es/components/pull-to-refresh/pull-to-refresh.js +1 -1
  241. package/es/components/search-bar/search-bar.js +1 -0
  242. package/es/components/selector/selector.d.ts +3 -1
  243. package/es/components/stepper/stepper.d.ts +11 -2
  244. package/es/components/swiper/index.d.ts +3 -3
  245. package/es/components/swiper/swiper.d.ts +3 -3
  246. package/es/components/switch/spin-icon.d.ts +3 -0
  247. package/es/components/switch/spin-icon.js +23 -0
  248. package/es/components/switch/switch.css +1 -1
  249. package/es/components/switch/switch.js +3 -5
  250. package/es/components/tabs/tabs.d.ts +1 -0
  251. package/es/components/tabs/tabs.js +16 -20
  252. package/es/components/virtual-input/virtual-input.d.ts +2 -2
  253. package/es/locales/base.d.ts +51 -0
  254. package/es/locales/base.js +52 -0
  255. package/es/locales/en-US.d.ts +51 -0
  256. package/es/locales/zh-CN.d.ts +51 -0
  257. package/es/locales/zh-CN.js +52 -0
  258. package/es/utils/measure-css-length.js +3 -1
  259. package/es/utils/native-props.d.ts +1 -1
  260. package/es/utils/render-to-container.d.ts +1 -1
  261. package/es/utils/should-render.d.ts +10 -0
  262. package/es/utils/{use-should-render.js → should-render.js} +4 -0
  263. package/es/utils/use-drag-and-pinch.d.ts +1 -2
  264. package/es/utils/use-isomorphic-update-layout-effect.js +1 -2
  265. package/es/utils/use-props-value.d.ts +1 -1
  266. package/es/utils/use-tab-list-scroll.js +3 -2
  267. package/es/utils/use-touch.d.ts +0 -1
  268. package/es/utils/validate.js +1 -1
  269. package/es/utils/with-stop-propagation.d.ts +1 -1
  270. package/package.json +6 -6
  271. package/umd/antd-mobile.js +1 -1
  272. package/2x/assets/spin.svg +0 -12
  273. package/2x/cjs/assets/spin.svg +0 -12
  274. package/2x/cjs/utils/use-should-render.d.ts +0 -1
  275. package/2x/es/assets/spin.svg +0 -12
  276. package/2x/es/utils/use-should-render.d.ts +0 -1
  277. package/assets/spin.svg +0 -12
  278. package/cjs/assets/spin.svg +0 -12
  279. package/cjs/utils/use-should-render.d.ts +0 -1
  280. package/es/assets/spin.svg +0 -12
  281. package/es/utils/use-should-render.d.ts +0 -1
@@ -6,6 +6,7 @@ import { usePropsValue } from '../../utils/use-props-value';
6
6
  import { useResizeEffect } from '../../utils/use-resize-effect';
7
7
  import { useTabListScroll } from '../../utils/use-tab-list-scroll';
8
8
  import ScrollMask from '../scroll-mask';
9
+ import { ShouldRender } from '../../utils/should-render';
9
10
  const classPrefix = `adm-capsule-tabs`;
10
11
  export const CapsuleTab = () => {
11
12
  return null;
@@ -83,22 +84,17 @@ export const CapsuleTabs = props => {
83
84
  return null;
84
85
  }
85
86
 
86
- if (pane.key === activeKey) {
87
- return React.createElement("div", {
88
- key: pane.key,
89
- className: `${classPrefix}-content`
90
- }, pane.props.children);
91
- }
92
-
93
- if (pane.props.forceRender) {
94
- return React.createElement("div", {
95
- key: pane.key,
96
- style: {
97
- display: 'none'
98
- }
99
- }, pane.props.children);
100
- }
101
-
102
- return null;
87
+ const active = pane.key === activeKey;
88
+ return React.createElement(ShouldRender, {
89
+ key: pane.key,
90
+ active: active,
91
+ forceRender: pane.props.forceRender,
92
+ destroyOnClose: pane.props.destroyOnClose
93
+ }, React.createElement("div", {
94
+ className: `${classPrefix}-content`,
95
+ style: {
96
+ display: active ? 'block' : 'none'
97
+ }
98
+ }, pane.props.children));
103
99
  })));
104
100
  };
@@ -1,2 +1,3 @@
1
1
  import { CascadePickerProps } from './cascade-picker';
2
- export declare function prompt(props: Omit<CascadePickerProps, 'value' | 'visible' | 'children'>): Promise<(string | null)[] | null>;
2
+ import type { PickerValue } from '../picker';
3
+ export declare function prompt(props: Omit<CascadePickerProps, 'value' | 'visible' | 'children'>): Promise<PickerValue[] | null>;
@@ -5,8 +5,9 @@ import { DownOutline } from 'antd-mobile-icons';
5
5
  import classNames from 'classnames';
6
6
  import { useSpring, animated } from '@react-spring/web';
7
7
  import { usePropsValue } from '../../utils/use-props-value';
8
- import { useMount, useUpdateLayoutEffect } from 'ahooks';
9
- import { useShouldRender } from '../../utils/use-should-render';
8
+ import { useMount } from 'ahooks';
9
+ import { useShouldRender } from '../../utils/should-render';
10
+ import { useIsomorphicUpdateLayoutEffect } from '../../utils/use-isomorphic-update-layout-effect';
10
11
  const classPrefix = `adm-collapse`;
11
12
  export const CollapsePanel = () => {
12
13
  return null;
@@ -34,7 +35,7 @@ const CollapsePanelContent = props => {
34
35
  immediate: true
35
36
  });
36
37
  });
37
- useUpdateLayoutEffect(() => {
38
+ useIsomorphicUpdateLayoutEffect(() => {
38
39
  const inner = innerRef.current;
39
40
  if (!inner) return;
40
41
 
@@ -5,6 +5,7 @@ import { withNativeProps } from '../../utils/native-props';
5
5
  import { mergeProps } from '../../utils/with-default-props';
6
6
  import { usePropsValue } from '../../utils/use-props-value';
7
7
  import { convertDateToStringArray, convertStringArrayToDate, generateDatePickerColumns, defaultRenderLabel } from './date-picker-utils';
8
+ import { bound } from '../../utils/bound';
8
9
  const thisYear = new Date().getFullYear();
9
10
  const defaultProps = {
10
11
  min: new Date(new Date().setFullYear(thisYear - 10)),
@@ -26,7 +27,11 @@ export const DatePicker = p => {
26
27
  }
27
28
  });
28
29
  const now = useMemo(() => new Date(), []);
29
- const pickerValue = useMemo(() => convertDateToStringArray(value !== null && value !== void 0 ? value : now, props.precision), [value, props.precision]);
30
+ const pickerValue = useMemo(() => {
31
+ let date = value !== null && value !== void 0 ? value : now;
32
+ date = new Date(bound(date.getTime(), props.min.getTime(), props.max.getTime()));
33
+ return convertDateToStringArray(date, props.precision);
34
+ }, [value, props.precision, props.min, props.max]);
30
35
  const onConfirm = useCallback(val => {
31
36
  setValue(convertStringArrayToDate(val, props.precision));
32
37
  }, [setValue, props.precision]);
@@ -15,7 +15,7 @@
15
15
  max-width: 500px;
16
16
  transform: translate(-50%, -50%);
17
17
  }
18
- .adm-dialog-main {
18
+ .adm-dialog-body {
19
19
  width: 100%;
20
20
  max-height: 70vh;
21
21
  font-size: 14px;
@@ -25,29 +25,33 @@
25
25
  display: flex;
26
26
  flex-direction: column;
27
27
  }
28
- .adm-dialog-main > * {
28
+ .adm-dialog-body > * {
29
29
  flex: none;
30
30
  }
31
- .adm-dialog-main > .adm-dialog-image-container {
31
+ .adm-dialog-body > .adm-dialog-content {
32
32
  flex: auto;
33
33
  }
34
- .adm-dialog-main > .adm-dialog-image-container + .adm-dialog-body {
35
- padding-top: 12px;
34
+ .adm-dialog-body:not(.adm-dialog-with-image) {
35
+ padding-top: 20px;
36
36
  }
37
- .adm-dialog-main .adm-dialog-body {
38
- padding: 20px 12px;
37
+ .adm-dialog-body .adm-dialog-image-container {
38
+ margin-bottom: 12px;
39
+ max-height: 40vh;
39
40
  }
40
- .adm-dialog-main .adm-dialog-body-header-wrapper {
41
- display: flex;
42
- justify-content: center;
41
+ .adm-dialog-body .adm-dialog-header {
42
+ margin-bottom: 8px;
43
+ padding: 0 12px;
43
44
  }
44
- .adm-dialog-main .adm-dialog-body-title {
45
+ .adm-dialog-body .adm-dialog-title {
46
+ margin-bottom: 8px;
47
+ padding: 0 12px;
45
48
  font-weight: bold;
46
49
  font-size: 18px;
47
50
  line-height: 25px;
48
51
  text-align: center;
49
52
  }
50
- .adm-dialog-main .adm-dialog-body-content {
53
+ .adm-dialog-body .adm-dialog-content {
54
+ padding: 0 12px 20px;
51
55
  max-height: 70vh;
52
56
  overflow-x: hidden;
53
57
  overflow-y: auto;
@@ -55,28 +59,32 @@
55
59
  line-height: 1.4;
56
60
  color: #333;
57
61
  }
58
- .adm-dialog-main .adm-dialog-footer {
62
+ .adm-dialog-body .adm-dialog-content-empty {
63
+ padding: 0;
64
+ height: 12px;
65
+ }
66
+ .adm-dialog-body .adm-dialog-footer {
59
67
  user-select: none;
60
68
  }
61
- .adm-dialog-main .adm-dialog-footer .adm-dialog-action-row {
69
+ .adm-dialog-body .adm-dialog-footer .adm-dialog-action-row {
62
70
  display: flex;
63
71
  align-items: stretch;
64
72
  border-top: 0.5px solid var(--adm-border-color);
65
73
  }
66
- .adm-dialog-main .adm-dialog-footer .adm-dialog-action-row > * {
74
+ .adm-dialog-body .adm-dialog-footer .adm-dialog-action-row > * {
67
75
  flex: 1;
68
76
  }
69
- .adm-dialog-main .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button {
77
+ .adm-dialog-body .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button {
70
78
  padding: 10px;
71
79
  font-size: 18px;
72
80
  line-height: 25px;
73
81
  border-radius: 0;
74
82
  border-right: solid 0.5px var(--adm-border-color);
75
83
  }
76
- .adm-dialog-main .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button-bold {
84
+ .adm-dialog-body .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button-bold {
77
85
  font-weight: bold;
78
86
  }
79
- .adm-dialog-main .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button:last-child {
87
+ .adm-dialog-body .adm-dialog-footer .adm-dialog-action-row > .adm-dialog-button:last-child {
80
88
  border-right: none;
81
89
  }
82
90
  .adm-dialog-image-container {
@@ -6,13 +6,11 @@ import { useUnmountedRef } from 'ahooks';
6
6
  import Mask from '../mask';
7
7
  import { DialogActionButton } from './dialog-action-button';
8
8
  import Image from '../image';
9
- import Space from '../space';
10
9
  import { renderToContainer } from '../../utils/render-to-container';
11
10
  import { withStopPropagation } from '../../utils/with-stop-propagation';
12
11
  import AutoCenter from '../auto-center';
13
12
  import { useSpring, animated } from '@react-spring/web';
14
13
  import { withNativeProps } from '../../utils/native-props';
15
- const classPrefix = `adm-dialog`;
16
14
  const defaultProps = {
17
15
  visible: false,
18
16
  actions: [],
@@ -50,51 +48,27 @@ export const Dialog = p => {
50
48
  }
51
49
  });
52
50
  const [active, setActive] = useState(props.visible);
53
- const node = withNativeProps(props, React.createElement("div", {
54
- className: classPrefix,
55
- style: {
56
- display: active ? 'unset' : 'none'
57
- }
58
- }, React.createElement(Mask, {
59
- visible: props.visible,
60
- onMaskClick: props.closeOnMaskClick ? props.onClose : undefined,
61
- style: props.maskStyle,
62
- className: classNames(`${classPrefix}-mask`, props.maskClassName)
63
- }), React.createElement("div", {
64
- className: `${classPrefix}-wrap`,
65
- style: {
66
- pointerEvents: props.visible ? 'unset' : 'none'
67
- }
68
- }, React.createElement(animated.div, {
69
- style: Object.assign({}, style),
70
- onClick: e => e.stopPropagation(),
71
- className: `${classPrefix}-main`
51
+ const body = React.createElement("div", {
52
+ className: classNames(cls('body'), props.image && cls('with-image'), props.bodyClassName),
53
+ style: props.bodyStyle
72
54
  }, !!props.image && React.createElement("div", {
73
- className: `${classPrefix}-image-container`
55
+ className: cls('image-container')
74
56
  }, React.createElement(Image, {
75
57
  src: props.image,
76
58
  alt: 'dialog header image',
77
59
  width: '100%'
78
- })), React.createElement("div", {
79
- style: props.bodyStyle,
80
- className: classNames(`${classPrefix}-body`, props.bodyClassName)
81
- }, React.createElement(Space, {
82
- direction: 'vertical',
83
- block: true
84
- }, !!props.header && React.createElement("div", {
85
- className: `${classPrefix}-body-header-wrapper`
86
- }, React.createElement("div", {
87
- className: `${classPrefix}-body-header`
88
- }, props.header)), !!props.title && React.createElement("div", {
89
- className: `${classPrefix}-body-title`
90
- }, props.title), !!props.content && React.createElement("div", {
91
- className: `${classPrefix}-body-content`
92
- }, typeof props.content === 'string' ? React.createElement(AutoCenter, null, props.content) : props.content))), React.createElement("div", {
93
- className: `${classPrefix}-footer`
60
+ })), !!props.header && React.createElement("div", {
61
+ className: cls('header')
62
+ }, React.createElement(AutoCenter, null, props.header)), !!props.title && React.createElement("div", {
63
+ className: cls('title')
64
+ }, props.title), React.createElement("div", {
65
+ className: classNames(cls('content'), !props.content && cls('content-empty'))
66
+ }, typeof props.content === 'string' ? React.createElement(AutoCenter, null, props.content) : props.content), React.createElement("div", {
67
+ className: cls('footer')
94
68
  }, props.actions.map((row, index) => {
95
69
  const actions = Array.isArray(row) ? row : [row];
96
70
  return React.createElement("div", {
97
- className: `${classPrefix}-action-row`,
71
+ className: cls('action-row'),
98
72
  key: index
99
73
  }, actions.map((action, index) => React.createElement(DialogActionButton, {
100
74
  key: action.key,
@@ -109,6 +83,28 @@ export const Dialog = p => {
109
83
  }
110
84
  })
111
85
  })));
112
- }))))));
86
+ })));
87
+ const node = withNativeProps(props, React.createElement("div", {
88
+ className: cls(),
89
+ style: {
90
+ display: active ? 'unset' : 'none'
91
+ }
92
+ }, React.createElement(Mask, {
93
+ visible: props.visible,
94
+ onMaskClick: props.closeOnMaskClick ? props.onClose : undefined,
95
+ style: props.maskStyle,
96
+ className: classNames(cls('mask'), props.maskClassName)
97
+ }), React.createElement("div", {
98
+ className: cls('wrap'),
99
+ style: {
100
+ pointerEvents: props.visible ? 'unset' : 'none'
101
+ }
102
+ }, React.createElement(animated.div, {
103
+ style: style
104
+ }, body))));
113
105
  return renderToContainer(props.getContainer, withStopPropagation(props.stopPropagation, node));
114
- };
106
+ };
107
+
108
+ function cls(name = '') {
109
+ return 'adm-dialog' + (name && '-') + name;
110
+ }
@@ -3,9 +3,10 @@
3
3
  }
4
4
  .adm-dropdown .adm-dropdown-nav {
5
5
  display: flex;
6
+ border-bottom: 1px solid transparent;
6
7
  }
7
8
  .adm-dropdown-open .adm-dropdown-nav {
8
- border-bottom: 1px solid var(--adm-border-color);
9
+ border-bottom-color: var(--adm-border-color);
9
10
  }
10
11
  .adm-dropdown-item {
11
12
  display: flex;
@@ -1,7 +1,7 @@
1
1
  import classNames from 'classnames';
2
2
  import React from 'react';
3
3
  import { withNativeProps } from '../../utils/native-props';
4
- import { useShouldRender } from '../../utils/use-should-render';
4
+ import { useShouldRender } from '../../utils/should-render';
5
5
  import { DownFill } from 'antd-mobile-icons';
6
6
  const classPrefix = `adm-dropdown-item`;
7
7
 
@@ -1,10 +1,12 @@
1
1
  import { FC } from 'react';
2
2
  import { NativeProps } from '../../utils/native-props';
3
+ import { PropagationEvent } from '../../utils/with-stop-propagation';
3
4
  export declare type EllipsisProps = {
4
5
  content: string;
5
6
  direction?: 'start' | 'end' | 'middle';
6
7
  rows?: number;
7
8
  expandText?: string;
8
9
  collapseText?: string;
10
+ stopPropagationForActionButtons?: PropagationEvent[];
9
11
  } & NativeProps;
10
12
  export declare const Ellipsis: FC<EllipsisProps>;
@@ -3,12 +3,14 @@ import { mergeProps } from '../../utils/with-default-props';
3
3
  import { withNativeProps } from '../../utils/native-props';
4
4
  import { useResizeEffect } from '../../utils/use-resize-effect';
5
5
  import { useIsomorphicLayoutEffect } from 'ahooks';
6
+ import { withStopPropagation } from '../../utils/with-stop-propagation';
6
7
  const classPrefix = `adm-ellipsis`;
7
8
  const defaultProps = {
8
9
  direction: 'end',
9
10
  rows: 1,
10
11
  expandText: '',
11
- collapseText: ''
12
+ collapseText: '',
13
+ stopPropagationForActionButtons: []
12
14
  };
13
15
  export const Ellipsis = p => {
14
16
  const props = mergeProps(defaultProps, p);
@@ -117,16 +119,16 @@ export const Ellipsis = p => {
117
119
  useIsomorphicLayoutEffect(() => {
118
120
  calcEllipsised();
119
121
  }, [props.content, props.direction, props.rows, props.expandText, props.collapseText]);
120
- const expandActionElement = exceeded && props.expandText ? React.createElement("a", {
122
+ const expandActionElement = exceeded && props.expandText ? withStopPropagation(props.stopPropagationForActionButtons, React.createElement("a", {
121
123
  onClick: () => {
122
124
  setExpanded(true);
123
125
  }
124
- }, props.expandText) : null;
125
- const collapseActionElement = exceeded && props.expandText ? React.createElement("a", {
126
+ }, props.expandText)) : null;
127
+ const collapseActionElement = exceeded && props.expandText ? withStopPropagation(props.stopPropagationForActionButtons, React.createElement("a", {
126
128
  onClick: () => {
127
129
  setExpanded(false);
128
130
  }
129
- }, props.collapseText) : null;
131
+ }, props.collapseText)) : null;
130
132
 
131
133
  const renderContent = () => {
132
134
  if (!exceeded) {
@@ -4,8 +4,9 @@ import type { Meta, InternalNamePath } from 'rc-field-form/lib/interface';
4
4
  export declare type FormContextType = {
5
5
  hasFeedback: boolean;
6
6
  layout: FormLayout;
7
+ requiredMarkStyle: 'asterisk' | 'text-required' | 'text-optional';
7
8
  };
8
- export declare const DEFAULT_FORM_CONTEXT: FormContextType;
9
+ export declare const defaultFormContext: FormContextType;
9
10
  export declare const FormContext: React.Context<FormContextType>;
10
11
  export declare type OnSubMetaChange = (meta: Meta & {
11
12
  destroy?: boolean;
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
- export const DEFAULT_FORM_CONTEXT = {
2
+ export const defaultFormContext = {
3
3
  hasFeedback: true,
4
- layout: 'vertical'
4
+ layout: 'vertical',
5
+ requiredMarkStyle: 'asterisk'
5
6
  };
6
- export const FormContext = React.createContext(DEFAULT_FORM_CONTEXT);
7
+ export const FormContext = React.createContext(defaultFormContext);
7
8
  export const NoStyleItemContext = React.createContext(null);
@@ -9,7 +9,7 @@
9
9
  position: relative;
10
10
  color: #666666;
11
11
  }
12
- .adm-form-item-label-required {
12
+ .adm-form-item-label .adm-form-item-required-asterisk {
13
13
  position: absolute;
14
14
  left: -0.6em;
15
15
  top: 0;
@@ -17,8 +17,28 @@
17
17
  color: var(--adm-color-danger);
18
18
  user-select: none;
19
19
  }
20
+ .adm-form-item-label .adm-form-item-required-text {
21
+ margin-left: 4px;
22
+ color: var(--adm-color-weak);
23
+ }
20
24
  .adm-form-item-label-help {
21
25
  margin-left: 4px;
26
+ cursor: pointer;
27
+ }
28
+ .adm-form-item-child {
29
+ display: flex;
30
+ }
31
+ .adm-form-item-child-position-normal {
32
+ justify-content: normal;
33
+ }
34
+ .adm-form-item-child-position-normal > * {
35
+ flex: auto;
36
+ }
37
+ .adm-form-item-child-position-right {
38
+ justify-content: right;
39
+ }
40
+ .adm-form-item-child-position-right > * {
41
+ flex: none;
22
42
  }
23
43
  .adm-form-item-footer {
24
44
  color: var(--adm-color-danger);
@@ -16,6 +16,7 @@ export declare type FormItemProps = Pick<RcFieldProps, 'dependencies' | 'valuePr
16
16
  disabled?: boolean;
17
17
  hidden?: boolean;
18
18
  layout?: FormLayout;
19
+ childElementPosition?: 'normal' | 'right';
19
20
  children: ChildrenType;
20
21
  } & NativeProps;
21
22
  export declare const FormItem: FC<FormItemProps>;
@@ -9,6 +9,7 @@ import { toArray } from './utils';
9
9
  import List from '../list';
10
10
  import Popover from '../popover';
11
11
  import { QuestionCircleOutline } from 'antd-mobile-icons';
12
+ import { useConfig } from '../config-provider';
12
13
  const NAME_SPLIT = '__SPLIT__';
13
14
  const classPrefix = `adm-form-item`;
14
15
  const MemoInput = React.memo(({
@@ -29,18 +30,47 @@ const FormItemLayout = props => {
29
30
  hidden,
30
31
  errors,
31
32
  arrow,
32
- description
33
+ description,
34
+ childElementPosition = 'normal'
33
35
  } = props;
34
36
  const context = useContext(FormContext);
37
+ const {
38
+ locale
39
+ } = useConfig();
35
40
  const hasFeedback = props.hasFeedback !== undefined ? props.hasFeedback : context.hasFeedback;
36
41
  const layout = props.layout || context.layout;
37
42
  const feedback = hasFeedback && errors && errors.length > 0 ? errors[0] : null;
43
+
44
+ const requiredMark = (() => {
45
+ const {
46
+ requiredMarkStyle
47
+ } = context;
48
+
49
+ switch (requiredMarkStyle) {
50
+ case 'asterisk':
51
+ return required && React.createElement("span", {
52
+ className: `${classPrefix}-required-asterisk`
53
+ }, "*");
54
+
55
+ case 'text-required':
56
+ return required && React.createElement("span", {
57
+ className: `${classPrefix}-required-text`
58
+ }, "(", locale.Form.required, ")");
59
+
60
+ case 'text-optional':
61
+ return !required && React.createElement("span", {
62
+ className: `${classPrefix}-required-text`
63
+ }, "(", locale.Form.optional, ")");
64
+
65
+ default:
66
+ return null;
67
+ }
68
+ })();
69
+
38
70
  const labelElement = label ? React.createElement("label", {
39
71
  className: `${classPrefix}-label`,
40
72
  htmlFor: htmlFor
41
- }, label, required && React.createElement("span", {
42
- className: `${classPrefix}-label-required`
43
- }, "*"), help && React.createElement("span", {
73
+ }, label, requiredMark, help && React.createElement("span", {
44
74
  className: `${classPrefix}-label-help`
45
75
  }, React.createElement(Popover, {
46
76
  content: help,
@@ -62,7 +92,11 @@ const FormItemLayout = props => {
62
92
  disabled: disabled,
63
93
  onClick: props.onClick,
64
94
  arrow: arrow
65
- }, children);
95
+ }, React.createElement("div", {
96
+ className: classNames(`${classPrefix}-child`, `${classPrefix}-child-position-${childElementPosition}`)
97
+ }, React.createElement("div", {
98
+ className: classNames(`${classPrefix}-child-inner`)
99
+ }, children)));
66
100
  };
67
101
 
68
102
  export const FormItem = props => {
@@ -80,6 +114,7 @@ export const FormItem = props => {
80
114
  noStyle,
81
115
  hidden,
82
116
  layout,
117
+ childElementPosition,
83
118
  description,
84
119
  // Field 相关
85
120
  disabled,
@@ -93,7 +128,7 @@ export const FormItem = props => {
93
128
  dependencies,
94
129
  arrow
95
130
  } = props,
96
- fieldProps = __rest(props, ["className", "style", "label", "help", "extra", "hasFeedback", "name", "required", "noStyle", "hidden", "layout", "description", "disabled", "rules", "children", "messageVariables", "trigger", "validateTrigger", "onClick", "shouldUpdate", "dependencies", "arrow"]);
131
+ fieldProps = __rest(props, ["className", "style", "label", "help", "extra", "hasFeedback", "name", "required", "noStyle", "hidden", "layout", "childElementPosition", "description", "disabled", "rules", "children", "messageVariables", "trigger", "validateTrigger", "onClick", "shouldUpdate", "dependencies", "arrow"]);
97
132
 
98
133
  const {
99
134
  validateTrigger: contextValidateTrigger
@@ -151,6 +186,7 @@ export const FormItem = props => {
151
186
  onClick: onClick,
152
187
  hidden: hidden,
153
188
  layout: layout,
189
+ childElementPosition: childElementPosition,
154
190
  arrow: arrow
155
191
  }, React.createElement(NoStyleItemContext.Provider, {
156
192
  value: onSubMetaChange
@@ -193,13 +229,7 @@ export const FormItem = props => {
193
229
  messageVariables: Variables
194
230
  }), (control, meta, context) => {
195
231
  let childNode = null;
196
- const isRequired = required !== undefined ? required : !!(rules && rules.some(rule => {
197
- if (rule && typeof rule === 'object' && rule.required) {
198
- return true;
199
- }
200
-
201
- return false;
202
- }));
232
+ const isRequired = required !== undefined ? required : rules && rules.some(rule => !!(rule && typeof rule === 'object' && rule.required));
203
233
  const fieldId = (toArray(name).length && meta ? meta.name : []).join('_');
204
234
 
205
235
  if (shouldUpdate && dependencies) {
@@ -12,6 +12,6 @@ export declare type FormProps = Pick<RcFormProps, 'form' | 'initialValues' | 'na
12
12
  };
13
13
  export declare const Form: React.ForwardRefExoticComponent<Pick<RcFormProps<any>, "children" | "form" | "name" | "initialValues" | "preserve" | "validateMessages" | "validateTrigger" | "onFieldsChange" | "onFinish" | "onFinishFailed" | "onValuesChange"> & NativeProps<"--border-inner" | "--border-top" | "--border-bottom"> & Partial<FormContextType> & {
14
14
  footer?: ReactNode;
15
- layout?: "horizontal" | "vertical" | undefined;
15
+ layout?: FormLayout | undefined;
16
16
  mode?: ListProps['mode'];
17
- } & React.RefAttributes<Pick<RCFormInstance<any>, "submit" | "getFieldValue" | "getFieldsValue" | "getFieldError" | "getFieldsError" | "isFieldTouched" | "isFieldsTouched" | "resetFields" | "setFields" | "setFieldsValue" | "validateFields">>>;
17
+ } & React.RefAttributes<FormInstance>>;
@@ -1,16 +1,15 @@
1
1
  import { __rest } from "tslib";
2
- import React, { forwardRef } from 'react';
2
+ import React, { forwardRef, useMemo } from 'react';
3
3
  import classNames from 'classnames';
4
4
  import List from '../list';
5
5
  import RcForm from 'rc-field-form';
6
- import { FormContext } from './context';
6
+ import { defaultFormContext, FormContext } from './context';
7
7
  import { mergeProps } from '../../utils/with-default-props';
8
8
  import { Header } from './header';
9
+ import { useConfig } from '../config-provider';
10
+ import merge from 'lodash/merge';
9
11
  const classPrefix = 'adm-form';
10
- const defaultProps = {
11
- hasFeedback: true,
12
- layout: 'vertical'
13
- };
12
+ const defaultProps = defaultFormContext;
14
13
  export const Form = forwardRef((p, ref) => {
15
14
  const props = mergeProps(defaultProps, p);
16
15
 
@@ -21,10 +20,15 @@ export const Form = forwardRef((p, ref) => {
21
20
  children,
22
21
  layout,
23
22
  footer,
24
- mode
23
+ mode,
24
+ requiredMarkStyle
25
25
  } = props,
26
- formProps = __rest(props, ["className", "style", "hasFeedback", "children", "layout", "footer", "mode"]);
26
+ formProps = __rest(props, ["className", "style", "hasFeedback", "children", "layout", "footer", "mode", "requiredMarkStyle"]);
27
27
 
28
+ const {
29
+ locale
30
+ } = useConfig();
31
+ const validateMessages = useMemo(() => merge({}, locale.Form.defaultValidateMessages, formProps.validateMessages), [locale.Form.defaultValidateMessages, formProps.validateMessages]);
28
32
  const lists = [];
29
33
  let currentHeader = null;
30
34
  let items = [];
@@ -54,10 +58,13 @@ export const Form = forwardRef((p, ref) => {
54
58
  className: classNames(classPrefix, className),
55
59
  style: style,
56
60
  ref: ref
57
- }, formProps), React.createElement(FormContext.Provider, {
61
+ }, formProps, {
62
+ validateMessages: validateMessages
63
+ }), React.createElement(FormContext.Provider, {
58
64
  value: {
59
- hasFeedback: hasFeedback,
60
- layout
65
+ hasFeedback,
66
+ layout,
67
+ requiredMarkStyle
61
68
  }
62
69
  }, lists), footer && React.createElement("div", {
63
70
  className: `${classPrefix}-footer`
@@ -27,7 +27,7 @@
27
27
  position: relative;
28
28
  color: #666666;
29
29
  }
30
- .adm-form-item-label-required {
30
+ .adm-form-item-label .adm-form-item-required-asterisk {
31
31
  position: absolute;
32
32
  left: -0.6em;
33
33
  top: 0;
@@ -35,8 +35,28 @@
35
35
  color: var(--adm-color-danger);
36
36
  user-select: none;
37
37
  }
38
+ .adm-form-item-label .adm-form-item-required-text {
39
+ margin-left: 4px;
40
+ color: var(--adm-color-weak);
41
+ }
38
42
  .adm-form-item-label-help {
39
43
  margin-left: 4px;
44
+ cursor: pointer;
45
+ }
46
+ .adm-form-item-child {
47
+ display: flex;
48
+ }
49
+ .adm-form-item-child-position-normal {
50
+ justify-content: normal;
51
+ }
52
+ .adm-form-item-child-position-normal > * {
53
+ flex: auto;
54
+ }
55
+ .adm-form-item-child-position-right {
56
+ justify-content: right;
57
+ }
58
+ .adm-form-item-child-position-right > * {
59
+ flex: none;
40
60
  }
41
61
  .adm-form-item-footer {
42
62
  color: var(--adm-color-danger);