antd-mobile 5.10.3 → 5.11.1

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 (134) hide show
  1. package/2x/cjs/components/button/button.d.ts +6 -4
  2. package/2x/cjs/components/button/button.js +31 -7
  3. package/2x/cjs/components/calendar/calendar.css +2 -2
  4. package/2x/cjs/components/calendar/calendar.d.ts +2 -0
  5. package/2x/cjs/components/calendar/calendar.js +6 -1
  6. package/2x/cjs/components/cascade-picker/cascade-picker-utils.d.ts +2 -2
  7. package/2x/cjs/components/cascade-picker/cascade-picker-utils.js +37 -16
  8. package/2x/cjs/components/cascade-picker/cascade-picker.js +2 -7
  9. package/2x/cjs/components/cascade-picker-view/cascade-picker-view.js +2 -7
  10. package/2x/cjs/components/date-picker/date-picker.js +1 -0
  11. package/2x/cjs/components/dialog/dialog-action-button.js +3 -26
  12. package/2x/cjs/components/floating-panel/floating-panel.js +1 -1
  13. package/2x/cjs/components/form/context.d.ts +1 -0
  14. package/2x/cjs/components/form/context.js +2 -1
  15. package/2x/cjs/components/form/form-item.css +2 -2
  16. package/2x/cjs/components/form/form-item.js +5 -2
  17. package/2x/cjs/components/form/form.d.ts +0 -3
  18. package/2x/cjs/components/form/form.js +4 -2
  19. package/2x/cjs/components/form/index.css +2 -2
  20. package/2x/cjs/components/form/index.d.ts +2 -2
  21. package/2x/cjs/components/form/index.js +2 -1
  22. package/2x/cjs/components/index-bar/panel.d.ts +1 -0
  23. package/2x/cjs/components/input/input.css +4 -0
  24. package/2x/cjs/components/input/input.d.ts +2 -0
  25. package/2x/cjs/components/input/input.js +13 -2
  26. package/2x/cjs/components/modal/modal-action-button.js +3 -26
  27. package/2x/cjs/components/search-bar/search-bar.d.ts +2 -0
  28. package/2x/cjs/components/search-bar/search-bar.js +2 -0
  29. package/2x/cjs/global/index.js +2 -0
  30. package/2x/cjs/utils/get-scroll-parent.js +7 -4
  31. package/2x/es/components/button/button.d.ts +6 -4
  32. package/2x/es/components/button/button.js +30 -8
  33. package/2x/es/components/calendar/calendar.css +2 -2
  34. package/2x/es/components/calendar/calendar.d.ts +2 -0
  35. package/2x/es/components/calendar/calendar.js +6 -2
  36. package/2x/es/components/cascade-picker/cascade-picker-utils.d.ts +2 -2
  37. package/2x/es/components/cascade-picker/cascade-picker-utils.js +35 -15
  38. package/2x/es/components/cascade-picker/cascade-picker.js +3 -7
  39. package/2x/es/components/cascade-picker-view/cascade-picker-view.js +3 -7
  40. package/2x/es/components/date-picker/date-picker.js +1 -0
  41. package/2x/es/components/dialog/dialog-action-button.js +3 -21
  42. package/2x/es/components/floating-panel/floating-panel.js +1 -1
  43. package/2x/es/components/form/context.d.ts +1 -0
  44. package/2x/es/components/form/context.js +2 -1
  45. package/2x/es/components/form/form-item.css +2 -2
  46. package/2x/es/components/form/form-item.js +5 -2
  47. package/2x/es/components/form/form.d.ts +0 -3
  48. package/2x/es/components/form/form.js +4 -2
  49. package/2x/es/components/form/index.css +2 -2
  50. package/2x/es/components/form/index.d.ts +2 -2
  51. package/2x/es/components/form/index.js +3 -2
  52. package/2x/es/components/index-bar/panel.d.ts +1 -0
  53. package/2x/es/components/input/input.css +4 -0
  54. package/2x/es/components/input/input.d.ts +2 -0
  55. package/2x/es/components/input/input.js +13 -2
  56. package/2x/es/components/modal/modal-action-button.js +3 -21
  57. package/2x/es/components/search-bar/search-bar.d.ts +2 -0
  58. package/2x/es/components/search-bar/search-bar.js +2 -0
  59. package/2x/es/global/index.js +2 -0
  60. package/2x/es/utils/get-scroll-parent.js +7 -4
  61. package/2x/package.json +2 -2
  62. package/bundle/antd-mobile.cjs.js +107 -98
  63. package/bundle/antd-mobile.es.js +108 -99
  64. package/bundle/style.css +7 -4
  65. package/cjs/components/button/button.d.ts +6 -4
  66. package/cjs/components/button/button.js +31 -7
  67. package/cjs/components/calendar/calendar.css +2 -2
  68. package/cjs/components/calendar/calendar.d.ts +2 -0
  69. package/cjs/components/calendar/calendar.js +6 -1
  70. package/cjs/components/cascade-picker/cascade-picker-utils.d.ts +2 -2
  71. package/cjs/components/cascade-picker/cascade-picker-utils.js +37 -16
  72. package/cjs/components/cascade-picker/cascade-picker.js +2 -7
  73. package/cjs/components/cascade-picker-view/cascade-picker-view.js +2 -7
  74. package/cjs/components/date-picker/date-picker.js +1 -0
  75. package/cjs/components/dialog/dialog-action-button.js +3 -26
  76. package/cjs/components/floating-panel/floating-panel.js +1 -1
  77. package/cjs/components/form/context.d.ts +1 -0
  78. package/cjs/components/form/context.js +2 -1
  79. package/cjs/components/form/form-item.css +2 -2
  80. package/cjs/components/form/form-item.js +5 -2
  81. package/cjs/components/form/form.d.ts +0 -3
  82. package/cjs/components/form/form.js +4 -2
  83. package/cjs/components/form/index.css +2 -2
  84. package/cjs/components/form/index.d.ts +2 -2
  85. package/cjs/components/form/index.js +2 -1
  86. package/cjs/components/index-bar/panel.d.ts +1 -0
  87. package/cjs/components/input/input.css +3 -0
  88. package/cjs/components/input/input.d.ts +2 -0
  89. package/cjs/components/input/input.js +13 -2
  90. package/cjs/components/modal/modal-action-button.js +3 -26
  91. package/cjs/components/search-bar/search-bar.d.ts +2 -0
  92. package/cjs/components/search-bar/search-bar.js +2 -0
  93. package/cjs/global/index.js +2 -0
  94. package/cjs/utils/get-scroll-parent.js +7 -4
  95. package/es/components/button/button.d.ts +6 -4
  96. package/es/components/button/button.js +30 -8
  97. package/es/components/calendar/calendar.css +2 -2
  98. package/es/components/calendar/calendar.d.ts +2 -0
  99. package/es/components/calendar/calendar.js +6 -2
  100. package/es/components/cascade-picker/cascade-picker-utils.d.ts +2 -2
  101. package/es/components/cascade-picker/cascade-picker-utils.js +35 -15
  102. package/es/components/cascade-picker/cascade-picker.js +3 -7
  103. package/es/components/cascade-picker-view/cascade-picker-view.js +3 -7
  104. package/es/components/date-picker/date-picker.js +1 -0
  105. package/es/components/dialog/dialog-action-button.js +3 -21
  106. package/es/components/floating-panel/floating-panel.js +1 -1
  107. package/es/components/form/context.d.ts +1 -0
  108. package/es/components/form/context.js +2 -1
  109. package/es/components/form/form-item.css +2 -2
  110. package/es/components/form/form-item.js +5 -2
  111. package/es/components/form/form.d.ts +0 -3
  112. package/es/components/form/form.js +4 -2
  113. package/es/components/form/index.css +2 -2
  114. package/es/components/form/index.d.ts +2 -2
  115. package/es/components/form/index.js +3 -2
  116. package/es/components/index-bar/panel.d.ts +1 -0
  117. package/es/components/input/input.css +3 -0
  118. package/es/components/input/input.d.ts +2 -0
  119. package/es/components/input/input.js +13 -2
  120. package/es/components/modal/modal-action-button.js +3 -21
  121. package/es/components/search-bar/search-bar.d.ts +2 -0
  122. package/es/components/search-bar/search-bar.js +2 -0
  123. package/es/global/index.js +2 -0
  124. package/es/utils/get-scroll-parent.js +7 -4
  125. package/package.json +2 -2
  126. package/umd/antd-mobile.js +1 -1
  127. package/2x/cjs/components/cascade-picker/use-cascade-picker-options.d.ts +0 -5
  128. package/2x/cjs/components/cascade-picker/use-cascade-picker-options.js +0 -40
  129. package/2x/es/components/cascade-picker/use-cascade-picker-options.d.ts +0 -5
  130. package/2x/es/components/cascade-picker/use-cascade-picker-options.js +0 -32
  131. package/cjs/components/cascade-picker/use-cascade-picker-options.d.ts +0 -5
  132. package/cjs/components/cascade-picker/use-cascade-picker-options.js +0 -40
  133. package/es/components/cascade-picker/use-cascade-picker-options.d.ts +0 -5
  134. package/es/components/cascade-picker/use-cascade-picker-options.js +0 -32
@@ -5,9 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ModalActionButton = void 0;
7
7
 
8
- var _tslib = require("tslib");
9
-
10
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = _interopRequireDefault(require("react"));
11
9
 
12
10
  var _classnames = _interopRequireDefault(require("classnames"));
13
11
 
@@ -17,34 +15,13 @@ var _nativeProps = require("../../utils/native-props");
17
15
 
18
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
17
 
20
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
-
22
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
-
24
18
  const ModalActionButton = props => {
25
19
  const {
26
20
  action
27
21
  } = props;
28
- const [loading, setLoading] = (0, _react.useState)(false);
29
-
30
- function handleClick() {
31
- return (0, _tslib.__awaiter)(this, void 0, void 0, function* () {
32
- setLoading(true);
33
-
34
- try {
35
- const promise = props.onAction();
36
- yield promise;
37
- setLoading(false);
38
- } catch (e) {
39
- setLoading(false);
40
- throw e;
41
- }
42
- });
43
- }
44
-
45
22
  return (0, _nativeProps.withNativeProps)(props.action, _react.default.createElement(_button.default, {
46
23
  key: action.key,
47
- onClick: handleClick,
24
+ onClick: props.onAction,
48
25
  className: (0, _classnames.default)('adm-modal-button', {
49
26
  'adm-modal-button-primary': props.action.primary
50
27
  }),
@@ -52,7 +29,7 @@ const ModalActionButton = props => {
52
29
  size: props.action.primary ? 'large' : 'middle',
53
30
  block: true,
54
31
  color: action.danger ? 'danger' : 'primary',
55
- loading: loading,
32
+ loading: 'auto',
56
33
  disabled: action.disabled
57
34
  }, action.text));
58
35
  };
@@ -8,6 +8,7 @@ export declare type SearchBarProps = Pick<InputProps, 'onFocus' | 'onBlur' | 'on
8
8
  maxLength?: number;
9
9
  placeholder?: string;
10
10
  clearable?: boolean;
11
+ onlyShowClearWhenFocus?: boolean;
11
12
  showCancelButton?: boolean | ((focus: boolean, value: string) => boolean);
12
13
  cancelText?: string;
13
14
  icon?: ReactNode;
@@ -22,6 +23,7 @@ export declare const SearchBar: React.ForwardRefExoticComponent<Pick<InputProps,
22
23
  maxLength?: number | undefined;
23
24
  placeholder?: string | undefined;
24
25
  clearable?: boolean | undefined;
26
+ onlyShowClearWhenFocus?: boolean | undefined;
25
27
  showCancelButton?: boolean | ((focus: boolean, value: string) => boolean) | undefined;
26
28
  cancelText?: string | undefined;
27
29
  icon?: ReactNode;
@@ -32,6 +32,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
32
32
  const classPrefix = `adm-search-bar`;
33
33
  const defaultProps = {
34
34
  clearable: true,
35
+ onlyShowClearWhenFocus: false,
35
36
  showCancelButton: false,
36
37
  defaultValue: '',
37
38
  clearOnCancel: true,
@@ -123,6 +124,7 @@ const SearchBar = (0, _react.forwardRef)((p, ref) => {
123
124
  maxLength: props.maxLength,
124
125
  placeholder: props.placeholder,
125
126
  clearable: props.clearable,
127
+ onlyShowClearWhenFocus: props.onlyShowClearWhenFocus,
126
128
  onFocus: e => {
127
129
  var _a;
128
130
 
@@ -5,5 +5,7 @@ require("./global.css");
5
5
  var _canUseDom = require("../utils/can-use-dom");
6
6
 
7
7
  if (_canUseDom.canUseDom) {
8
+ // Make sure the `:active` CSS selector of `button` and `a` take effect
9
+ // See: https://stackoverflow.com/questions/3885018/active-pseudo-class-doesnt-work-in-mobile-safari
8
10
  document.addEventListener('touchstart', () => {}, true);
9
11
  }
@@ -7,24 +7,27 @@ exports.getScrollParent = getScrollParent;
7
7
 
8
8
  var _canUseDom = require("./can-use-dom");
9
9
 
10
- const overflowScrollReg = /scroll|auto|overlay/i;
11
10
  const defaultRoot = _canUseDom.canUseDom ? window : undefined;
11
+ const overflowStylePatterns = ['scroll', 'auto', 'overlay'];
12
12
 
13
13
  function isElement(node) {
14
14
  const ELEMENT_NODE_TYPE = 1;
15
15
  return node.nodeType === ELEMENT_NODE_TYPE;
16
- } // https://github.com/youzan/vant/issues/3823
17
-
16
+ }
18
17
 
19
18
  function getScrollParent(el, root = defaultRoot) {
20
19
  let node = el;
21
20
 
22
21
  while (node && node !== root && isElement(node)) {
22
+ if (node === document.body) {
23
+ return root;
24
+ }
25
+
23
26
  const {
24
27
  overflowY
25
28
  } = window.getComputedStyle(node);
26
29
 
27
- if (overflowScrollReg.test(overflowY)) {
30
+ if (overflowStylePatterns.includes(overflowY)) {
28
31
  return node;
29
32
  }
30
33
 
@@ -5,10 +5,11 @@ export declare type ButtonProps = {
5
5
  fill?: 'solid' | 'outline' | 'none';
6
6
  size?: 'mini' | 'small' | 'middle' | 'large';
7
7
  block?: boolean;
8
- loading?: boolean;
8
+ loading?: boolean | 'auto';
9
9
  loadingText?: string;
10
+ loadingIcon?: React.ReactNode;
10
11
  disabled?: boolean;
11
- onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
12
+ onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void | Promise<void>;
12
13
  type?: 'submit' | 'reset' | 'button';
13
14
  shape?: 'default' | 'rounded' | 'rectangular';
14
15
  children?: React.ReactNode;
@@ -21,10 +22,11 @@ export declare const Button: React.ForwardRefExoticComponent<{
21
22
  fill?: "none" | "solid" | "outline" | undefined;
22
23
  size?: "small" | "large" | "middle" | "mini" | undefined;
23
24
  block?: boolean | undefined;
24
- loading?: boolean | undefined;
25
+ loading?: boolean | "auto" | undefined;
25
26
  loadingText?: string | undefined;
27
+ loadingIcon?: React.ReactNode;
26
28
  disabled?: boolean | undefined;
27
- onClick?: ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void) | undefined;
29
+ onClick?: ((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void | Promise<void>) | undefined;
28
30
  type?: "reset" | "submit" | "button" | undefined;
29
31
  shape?: "default" | "rounded" | "rectangular" | undefined;
30
32
  children?: React.ReactNode;
@@ -1,32 +1,56 @@
1
- import React, { forwardRef, useImperativeHandle, useRef } from 'react';
1
+ import { __awaiter } from "tslib";
2
+ import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
2
3
  import classNames from 'classnames';
3
4
  import DotLoading from '../dot-loading';
4
5
  import { mergeProps } from '../../utils/with-default-props';
5
6
  import { withNativeProps } from '../../utils/native-props';
7
+ import { isPromise } from '../../utils/validate';
6
8
  const classPrefix = `adm-button`;
7
9
  const defaultProps = {
8
10
  color: 'default',
9
11
  fill: 'solid',
10
12
  block: false,
11
13
  loading: false,
14
+ loadingIcon: React.createElement(DotLoading, {
15
+ color: 'currentColor'
16
+ }),
12
17
  type: 'button',
13
18
  shape: 'default',
14
19
  size: 'middle'
15
20
  };
16
21
  export const Button = forwardRef((p, ref) => {
17
22
  const props = mergeProps(defaultProps, p);
18
- const disabled = props.disabled || props.loading;
23
+ const [innerLoading, setInnerLoading] = useState(false);
19
24
  const nativeButtonRef = useRef(null);
25
+ const loading = props.loading === 'auto' ? innerLoading : props.loading;
26
+ const disabled = props.disabled || loading;
20
27
  useImperativeHandle(ref, () => ({
21
28
  get nativeElement() {
22
29
  return nativeButtonRef.current;
23
30
  }
24
31
 
25
32
  }));
33
+
34
+ const handleClick = e => __awaiter(void 0, void 0, void 0, function* () {
35
+ if (!props.onClick) return;
36
+ const promise = props.onClick(e);
37
+
38
+ if (isPromise(promise)) {
39
+ try {
40
+ setInnerLoading(true);
41
+ yield promise;
42
+ setInnerLoading(false);
43
+ } catch (e) {
44
+ setInnerLoading(false);
45
+ throw e;
46
+ }
47
+ }
48
+ });
49
+
26
50
  return withNativeProps(props, React.createElement("button", {
27
51
  ref: nativeButtonRef,
28
52
  type: props.type,
29
- onClick: props.onClick,
53
+ onClick: handleClick,
30
54
  className: classNames(classPrefix, props.color ? `${classPrefix}-${props.color}` : null, {
31
55
  [`${classPrefix}-block`]: props.block,
32
56
  [`${classPrefix}-disabled`]: disabled,
@@ -35,12 +59,10 @@ export const Button = forwardRef((p, ref) => {
35
59
  [`${classPrefix}-mini`]: props.size === 'mini',
36
60
  [`${classPrefix}-small`]: props.size === 'small',
37
61
  [`${classPrefix}-large`]: props.size === 'large',
38
- [`${classPrefix}-loading`]: props.loading
62
+ [`${classPrefix}-loading`]: loading
39
63
  }, `${classPrefix}-shape-${props.shape}`),
40
64
  disabled: disabled
41
- }, props.loading ? React.createElement("div", {
65
+ }, loading ? React.createElement("div", {
42
66
  className: `${classPrefix}-loading-wrapper`
43
- }, React.createElement(DotLoading, {
44
- color: 'currentColor'
45
- }), props.loadingText) : props.children));
67
+ }, props.loadingIcon, props.loadingText) : props.children));
46
68
  });
@@ -59,11 +59,11 @@
59
59
  color: var(--adm-color-primary);
60
60
  }
61
61
 
62
- .adm-calendar-cell.adm-calendar-cell-out {
62
+ .adm-calendar-cell.adm-calendar-cell-disabled {
63
63
  color: var(--adm-color-light);
64
64
  }
65
65
 
66
- .adm-calendar-cell.adm-calendar-cell-out .adm-calendar-cell-bottom {
66
+ .adm-calendar-cell.adm-calendar-cell-disabled .adm-calendar-cell-bottom {
67
67
  color: var(--adm-color-light);
68
68
  }
69
69
 
@@ -13,6 +13,8 @@ export declare type CalendarProps = {
13
13
  weekStartsOn?: 'Monday' | 'Sunday';
14
14
  renderLabel?: (date: Date) => string | null | undefined;
15
15
  allowClear?: boolean;
16
+ max?: Date;
17
+ min?: Date;
16
18
  } & ({
17
19
  selectionMode?: undefined;
18
20
  value?: undefined;
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useState, useImperativeHandle } from 'react';
1
+ import React, { forwardRef, useState, useImperativeHandle, useMemo } from 'react';
2
2
  import { withNativeProps } from '../../utils/native-props';
3
3
  import dayjs from 'dayjs';
4
4
  import classNames from 'classnames';
@@ -94,6 +94,8 @@ export const Calendar = forwardRef((p, ref) => {
94
94
  setCurrent(current.add(1, 'year'));
95
95
  }
96
96
  }, React.createElement(ArrowLeftDouble, null)));
97
+ const maxDay = useMemo(() => props.max && dayjs(props.max), [props.max]);
98
+ const minDay = useMemo(() => props.min && dayjs(props.min), [props.min]);
97
99
 
98
100
  function renderCells() {
99
101
  var _a;
@@ -119,9 +121,10 @@ export const Calendar = forwardRef((p, ref) => {
119
121
  }
120
122
 
121
123
  const inThisMonth = d.month() === current.month();
124
+ const disabled = !inThisMonth || maxDay && d.isAfter(maxDay, 'day') || minDay && d.isBefore(minDay, 'day');
122
125
  cells.push(React.createElement("div", {
123
126
  key: d.valueOf(),
124
- className: classNames(`${classPrefix}-cell`, inThisMonth ? `${classPrefix}-cell-in` : `${classPrefix}-cell-out`, inThisMonth && {
127
+ className: classNames(`${classPrefix}-cell`, disabled && `${classPrefix}-cell-disabled`, inThisMonth && {
125
128
  [`${classPrefix}-cell-today`]: d.isSame(today, 'day'),
126
129
  [`${classPrefix}-cell-selected`]: isSelect,
127
130
  [`${classPrefix}-cell-selected-begin`]: isBegin,
@@ -129,6 +132,7 @@ export const Calendar = forwardRef((p, ref) => {
129
132
  }),
130
133
  onClick: () => {
131
134
  if (!props.selectionMode) return;
135
+ if (disabled) return;
132
136
  const date = d.toDate();
133
137
 
134
138
  if (!inThisMonth) {
@@ -1,3 +1,3 @@
1
- import { PickerColumn } from '../picker-view';
1
+ import { PickerColumn, PickerValue } from '../picker-view';
2
2
  import { CascadePickerOption } from './cascade-picker';
3
- export declare function generateCascadePickerColumns(value: string[], options: CascadePickerOption[], depth: number, subOptionsRecord: Record<string, CascadePickerOption[]>): PickerColumn[];
3
+ export declare function useColumnsFn(options: CascadePickerOption[]): (selected: PickerValue[]) => PickerColumn[];
@@ -1,23 +1,43 @@
1
- export function generateCascadePickerColumns(value, options, depth, subOptionsRecord) {
2
- const columns = [];
3
- columns.push(options.map(option => ({
4
- label: option.label,
5
- value: option.value
6
- })));
1
+ import { useMemo } from 'react';
2
+ export function useColumnsFn(options) {
3
+ const depth = useMemo(() => {
4
+ let depth = 0;
7
5
 
8
- for (let i = 0; i < depth - 1; i++) {
9
- const x = value[i];
10
- const subOptions = subOptionsRecord[x];
6
+ function traverse(options, currentDepth) {
7
+ if (currentDepth > depth) depth = currentDepth;
8
+ const nextDepth = currentDepth + 1;
9
+ options.forEach(option => {
10
+ if (option.children) {
11
+ traverse(option.children, nextDepth);
12
+ }
13
+ });
14
+ }
11
15
 
12
- if (!subOptions) {
13
- columns.push([]);
14
- } else {
15
- columns.push(subOptions.map(option => ({
16
+ traverse(options, 1);
17
+ return depth;
18
+ }, [options]);
19
+ return selected => {
20
+ const columns = [];
21
+ let currentOptions = options;
22
+ let i = 0;
23
+
24
+ while (true) {
25
+ columns.push(currentOptions.map(option => ({
16
26
  label: option.label,
17
27
  value: option.value
18
28
  })));
29
+ const x = selected[i];
30
+ const targetOptions = currentOptions.find(option => option.value === x);
31
+ if (!targetOptions || !targetOptions.children) break;
32
+ currentOptions = targetOptions.children;
33
+ i++;
34
+ }
35
+
36
+ while (i < depth - 1) {
37
+ columns.push([]);
38
+ i++;
19
39
  }
20
- }
21
40
 
22
- return columns;
41
+ return columns;
42
+ };
23
43
  }
@@ -1,19 +1,15 @@
1
1
  import { __rest } from "tslib";
2
2
  import React from 'react';
3
3
  import Picker from '../picker';
4
- import { useCascadePickerOptions } from './use-cascade-picker-options';
5
- import { generateCascadePickerColumns } from './cascade-picker-utils';
4
+ import { useColumnsFn } from './cascade-picker-utils';
6
5
  export const CascadePicker = props => {
7
6
  const {
8
7
  options
9
8
  } = props,
10
9
  pickerProps = __rest(props, ["options"]);
11
10
 
12
- const {
13
- depth,
14
- subOptionsRecord
15
- } = useCascadePickerOptions(options);
11
+ const columnsFn = useColumnsFn(options);
16
12
  return React.createElement(Picker, Object.assign({}, pickerProps, {
17
- columns: selected => generateCascadePickerColumns(selected, options, depth, subOptionsRecord)
13
+ columns: columnsFn
18
14
  }));
19
15
  };
@@ -1,19 +1,15 @@
1
1
  import { __rest } from "tslib";
2
2
  import React from 'react';
3
3
  import PickerView from '../picker-view';
4
- import { useCascadePickerOptions } from '../cascade-picker/use-cascade-picker-options';
5
- import { generateCascadePickerColumns } from '../cascade-picker/cascade-picker-utils';
4
+ import { useColumnsFn } from '../cascade-picker/cascade-picker-utils';
6
5
  export const CascadePickerView = props => {
7
6
  const {
8
7
  options
9
8
  } = props,
10
9
  pickerProps = __rest(props, ["options"]);
11
10
 
12
- const {
13
- depth,
14
- subOptionsRecord
15
- } = useCascadePickerOptions(options);
11
+ const columnsFn = useColumnsFn(options);
16
12
  return React.createElement(PickerView, Object.assign({}, pickerProps, {
17
- columns: selected => generateCascadePickerColumns(selected, options, depth, subOptionsRecord)
13
+ columns: columnsFn
18
14
  }));
19
15
  };
@@ -47,6 +47,7 @@ export const DatePicker = p => {
47
47
  value: pickerValue,
48
48
  onCancel: props.onCancel,
49
49
  onClose: props.onClose,
50
+ closeOnMaskClick: props.closeOnMaskClick,
50
51
  visible: props.visible,
51
52
  confirmText: props.confirmText,
52
53
  cancelText: props.cancelText,
@@ -1,5 +1,4 @@
1
- import { __awaiter } from "tslib";
2
- import React, { useState } from 'react';
1
+ import React from 'react';
3
2
  import classNames from 'classnames';
4
3
  import Button from '../button';
5
4
  import { withNativeProps } from '../../utils/native-props';
@@ -7,26 +6,9 @@ export const DialogActionButton = props => {
7
6
  const {
8
7
  action
9
8
  } = props;
10
- const [loading, setLoading] = useState(false);
11
-
12
- function handleClick() {
13
- return __awaiter(this, void 0, void 0, function* () {
14
- setLoading(true);
15
-
16
- try {
17
- const promise = props.onAction();
18
- yield promise;
19
- setLoading(false);
20
- } catch (e) {
21
- setLoading(false);
22
- throw e;
23
- }
24
- });
25
- }
26
-
27
9
  return withNativeProps(props.action, React.createElement(Button, {
28
10
  key: action.key,
29
- onClick: handleClick,
11
+ onClick: props.onAction,
30
12
  className: classNames('adm-dialog-button', {
31
13
  'adm-dialog-button-bold': action.bold
32
14
  }),
@@ -34,7 +16,7 @@ export const DialogActionButton = props => {
34
16
  shape: 'rectangular',
35
17
  block: true,
36
18
  color: action.danger ? 'danger' : 'primary',
37
- loading: loading,
19
+ loading: 'auto',
38
20
  disabled: action.disabled
39
21
  }, action.text));
40
22
  };
@@ -37,7 +37,7 @@ export const FloatingPanel = forwardRef((p, ref) => {
37
37
  tension: 300
38
38
  },
39
39
  onChange: result => {
40
- onHeightChange(result.value.y, y.isAnimating);
40
+ onHeightChange(-result.value.y, y.isAnimating);
41
41
  }
42
42
  }));
43
43
  useDrag(state => {
@@ -6,6 +6,7 @@ export declare type FormContextType = {
6
6
  hasFeedback: boolean;
7
7
  layout: FormLayout;
8
8
  requiredMarkStyle: 'asterisk' | 'text-required' | 'text-optional';
9
+ disabled: boolean;
9
10
  };
10
11
  export declare const defaultFormContext: FormContextType;
11
12
  export declare const FormContext: React.Context<FormContextType>;
@@ -3,7 +3,8 @@ export const defaultFormContext = {
3
3
  name: undefined,
4
4
  hasFeedback: true,
5
5
  layout: 'vertical',
6
- requiredMarkStyle: 'asterisk'
6
+ requiredMarkStyle: 'asterisk',
7
+ disabled: false
7
8
  };
8
9
  export const FormContext = React.createContext(defaultFormContext);
9
10
  export const NoStyleItemContext = React.createContext(null);
@@ -43,7 +43,7 @@
43
43
  }
44
44
 
45
45
  .adm-form-item-child-position-right {
46
- justify-content: right;
46
+ justify-content: flex-end;
47
47
  }
48
48
 
49
49
  .adm-form-item-child-position-right > * {
@@ -66,7 +66,7 @@
66
66
 
67
67
  .adm-form-item.adm-form-item-horizontal.adm-list-item {
68
68
  --align-items: stretch;
69
- --prefix-width: 6em;
69
+ --prefix-width: 6.8em;
70
70
  }
71
71
 
72
72
  .adm-form-item.adm-form-item-horizontal .adm-list-item-content-prefix {
@@ -18,6 +18,8 @@ const MemoInput = React.memo(({
18
18
  }) => children, (prev, next) => prev.value === next.value && prev.update === next.update);
19
19
 
20
20
  const FormItemLayout = props => {
21
+ var _a;
22
+
21
23
  const {
22
24
  className,
23
25
  style,
@@ -25,7 +27,6 @@ const FormItemLayout = props => {
25
27
  label,
26
28
  help,
27
29
  required,
28
- disabled,
29
30
  children,
30
31
  htmlFor,
31
32
  hidden,
@@ -38,6 +39,7 @@ const FormItemLayout = props => {
38
39
  } = useConfig();
39
40
  const hasFeedback = props.hasFeedback !== undefined ? props.hasFeedback : context.hasFeedback;
40
41
  const layout = props.layout || context.layout;
42
+ const disabled = (_a = props.disabled) !== null && _a !== void 0 ? _a : context.disabled;
41
43
 
42
44
  const requiredMark = (() => {
43
45
  const {
@@ -92,7 +94,8 @@ const FormItemLayout = props => {
92
94
  extra: extra,
93
95
  description: description,
94
96
  className: classNames(classPrefix, className, `${classPrefix}-${layout}`, {
95
- [`${classPrefix}-hidden`]: hidden
97
+ [`${classPrefix}-hidden`]: hidden,
98
+ [`${classPrefix}-has-error`]: props.errors.length
96
99
  }),
97
100
  disabled: disabled,
98
101
  onClick: props.onClick,
@@ -3,15 +3,12 @@ import { NativeProps } from '../../utils/native-props';
3
3
  import { ListProps } from '../list';
4
4
  import type { FormProps as RcFormProps, FormInstance as RCFormInstance } from 'rc-field-form';
5
5
  import { FormContextType } from './context';
6
- import type { FormLayout } from '.';
7
6
  export declare type FormInstance = Pick<RCFormInstance, 'getFieldValue' | 'getFieldsValue' | 'getFieldError' | 'getFieldsError' | 'isFieldTouched' | 'isFieldsTouched' | 'resetFields' | 'setFields' | 'setFieldsValue' | 'submit' | 'validateFields'>;
8
7
  export declare type FormProps = Pick<RcFormProps, 'form' | 'initialValues' | 'name' | 'preserve' | 'validateMessages' | 'validateTrigger' | 'onFieldsChange' | 'onFinish' | 'onFinishFailed' | 'onValuesChange' | 'children'> & NativeProps<'--border-inner' | '--border-top' | '--border-bottom'> & Partial<FormContextType> & {
9
8
  footer?: ReactNode;
10
- layout?: FormLayout;
11
9
  mode?: ListProps['mode'];
12
10
  };
13
11
  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
12
  footer?: ReactNode;
15
- layout?: FormLayout | undefined;
16
13
  mode?: ListProps['mode'];
17
14
  } & React.RefAttributes<FormInstance>>;
@@ -23,9 +23,10 @@ export const Form = forwardRef((p, ref) => {
23
23
  layout,
24
24
  footer,
25
25
  mode,
26
+ disabled,
26
27
  requiredMarkStyle
27
28
  } = props,
28
- formProps = __rest(props, ["className", "style", "hasFeedback", "children", "layout", "footer", "mode", "requiredMarkStyle"]);
29
+ formProps = __rest(props, ["className", "style", "hasFeedback", "children", "layout", "footer", "mode", "disabled", "requiredMarkStyle"]);
29
30
 
30
31
  const {
31
32
  locale
@@ -76,7 +77,8 @@ export const Form = forwardRef((p, ref) => {
76
77
  name: formProps.name,
77
78
  hasFeedback,
78
79
  layout,
79
- requiredMarkStyle
80
+ requiredMarkStyle,
81
+ disabled: disabled
80
82
  }
81
83
  }, lists), footer && React.createElement("div", {
82
84
  className: `${classPrefix}-footer`
@@ -69,7 +69,7 @@
69
69
  }
70
70
 
71
71
  .adm-form-item-child-position-right {
72
- justify-content: right;
72
+ justify-content: flex-end;
73
73
  }
74
74
 
75
75
  .adm-form-item-child-position-right > * {
@@ -92,7 +92,7 @@
92
92
 
93
93
  .adm-form-item.adm-form-item-horizontal.adm-list-item {
94
94
  --align-items: stretch;
95
- --prefix-width: 6em;
95
+ --prefix-width: 6.8em;
96
96
  }
97
97
 
98
98
  .adm-form-item.adm-form-item-horizontal .adm-list-item-content-prefix {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import './index.less';
3
- import { useForm } from 'rc-field-form';
3
+ import { useWatch, useForm } from 'rc-field-form';
4
4
  export declare type FormLayout = 'vertical' | 'horizontal';
5
5
  export type { FormProps, FormInstance } from './form';
6
6
  export type { FormItemProps } from './form-item';
@@ -9,7 +9,6 @@ export type { ValidateMessages, FieldData, NamePath, } from 'rc-field-form/es/in
9
9
  export type { FormArrayField, FormArrayOperation, FormArrayProps, } from './form-array';
10
10
  declare const _default: import("react").ForwardRefExoticComponent<Pick<import("rc-field-form").FormProps<any>, "children" | "form" | "name" | "initialValues" | "preserve" | "validateMessages" | "validateTrigger" | "onFieldsChange" | "onFinish" | "onFinishFailed" | "onValuesChange"> & import("../../utils/native-props").NativeProps<"--border-inner" | "--border-top" | "--border-bottom"> & Partial<import("./context").FormContextType> & {
11
11
  footer?: import("react").ReactNode;
12
- layout?: FormLayout | undefined;
13
12
  mode?: "default" | "card" | undefined;
14
13
  } & import("react").RefAttributes<import("./form").FormInstance>> & {
15
14
  Item: import("react").FC<import("./form-item").FormItemProps>;
@@ -19,5 +18,6 @@ declare const _default: import("react").ForwardRefExoticComponent<Pick<import("r
19
18
  }>;
20
19
  Array: import("react").FC<import("./form-array").FormArrayProps>;
21
20
  useForm: typeof useForm;
21
+ useWatch: typeof useWatch;
22
22
  };
23
23
  export default _default;
@@ -3,7 +3,7 @@ import { Form } from './form';
3
3
  import { attachPropertiesToComponent } from '../../utils/attach-properties-to-component';
4
4
  import { FormItem } from './form-item';
5
5
  import { Header } from './header';
6
- import { useForm } from 'rc-field-form';
6
+ import { useWatch, useForm } from 'rc-field-form';
7
7
  import { FormSubscribe } from './form-subscribe';
8
8
  import { FormArray } from './form-array';
9
9
  export default attachPropertiesToComponent(Form, {
@@ -11,5 +11,6 @@ export default attachPropertiesToComponent(Form, {
11
11
  Subscribe: FormSubscribe,
12
12
  Header,
13
13
  Array: FormArray,
14
- useForm
14
+ useForm,
15
+ useWatch
15
16
  });
@@ -4,5 +4,6 @@ export declare type IndexBarPanelProps = {
4
4
  index: string;
5
5
  title?: ReactNode;
6
6
  brief?: ReactNode;
7
+ children?: ReactNode;
7
8
  } & NativeProps;
8
9
  export declare const Panel: FC<IndexBarPanelProps>;