amis-core 3.5.3 → 3.6.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 (267) hide show
  1. package/esm/Root.js +1 -1
  2. package/esm/RootRenderer.js +1 -1
  3. package/esm/SchemaRenderer.js +1 -1
  4. package/esm/Scoped.d.ts +2 -0
  5. package/esm/Scoped.js +48 -6
  6. package/esm/StatusScoped.js +1 -1
  7. package/esm/WithRootStore.js +1 -1
  8. package/esm/WithStore.js +27 -12
  9. package/esm/actions/Action.js +30 -22
  10. package/esm/actions/AjaxAction.js +2 -2
  11. package/esm/actions/BreakAction.js +1 -1
  12. package/esm/actions/BroadcastAction.js +1 -1
  13. package/esm/actions/CmptAction.js +3 -3
  14. package/esm/actions/ContinueAction.js +1 -1
  15. package/esm/actions/CopyAction.js +3 -3
  16. package/esm/actions/CustomAction.js +1 -1
  17. package/esm/actions/DialogAction.js +1 -1
  18. package/esm/actions/DrawerAction.js +1 -1
  19. package/esm/actions/EmailAction.js +1 -1
  20. package/esm/actions/LinkAction.js +5 -5
  21. package/esm/actions/LoopAction.js +1 -1
  22. package/esm/actions/PageAction.js +1 -1
  23. package/esm/actions/ParallelAction.js +1 -1
  24. package/esm/actions/StatusAction.js +1 -1
  25. package/esm/actions/SwitchAction.js +1 -1
  26. package/esm/actions/ToastAction.js +3 -3
  27. package/esm/components/CustomStyle.js +1 -1
  28. package/esm/components/ErrorBoundary.d.ts +20 -0
  29. package/esm/components/ErrorBoundary.js +41 -0
  30. package/esm/components/LazyComponent.js +1 -1
  31. package/esm/components/Overlay.js +1 -1
  32. package/esm/components/PopOver.d.ts +4 -0
  33. package/esm/components/PopOver.js +66 -3
  34. package/esm/env.js +1 -1
  35. package/esm/envOverwrite.js +1 -1
  36. package/esm/factory.js +1 -1
  37. package/esm/index.d.ts +2 -1
  38. package/esm/index.js +4 -3
  39. package/esm/locale.js +1 -1
  40. package/esm/polyfills.js +1 -1
  41. package/esm/renderers/Form.d.ts +1 -1
  42. package/esm/renderers/Form.js +15 -8
  43. package/esm/renderers/Item.d.ts +54 -0
  44. package/esm/renderers/Item.js +1 -1
  45. package/esm/renderers/Options.d.ts +4 -0
  46. package/esm/renderers/Options.js +5 -4
  47. package/esm/renderers/Placeholder.js +1 -1
  48. package/esm/renderers/builtin.js +1 -1
  49. package/esm/renderers/register.js +1 -1
  50. package/esm/renderers/wrapControl.js +4 -6
  51. package/esm/store/app.js +1 -1
  52. package/esm/store/combo.js +1 -1
  53. package/esm/store/crud.d.ts +9 -1
  54. package/esm/store/crud.js +29 -13
  55. package/esm/store/form.js +1 -1
  56. package/esm/store/formItem.js +16 -7
  57. package/esm/store/iRenderer.js +1 -1
  58. package/esm/store/index.js +1 -1
  59. package/esm/store/list.js +1 -1
  60. package/esm/store/manager.js +1 -1
  61. package/esm/store/modal.js +1 -1
  62. package/esm/store/node.js +1 -1
  63. package/esm/store/pagination.js +1 -1
  64. package/esm/store/root.js +1 -1
  65. package/esm/store/service.js +1 -1
  66. package/esm/store/status.js +1 -1
  67. package/esm/store/table.d.ts +1 -0
  68. package/esm/store/table.js +8 -12
  69. package/esm/store/table2.js +1 -1
  70. package/esm/theme.js +1 -1
  71. package/esm/utils/Animation.js +1 -1
  72. package/esm/utils/ColorScale.js +1 -1
  73. package/esm/utils/DataSchema.js +1 -1
  74. package/esm/utils/DataScope.js +1 -1
  75. package/esm/utils/RootClose.js +1 -1
  76. package/esm/utils/SimpleMap.js +1 -1
  77. package/esm/utils/api.js +1 -1
  78. package/esm/utils/arraySlice.js +1 -1
  79. package/esm/utils/attachmentAdpator.js +3 -1
  80. package/esm/utils/autobind.js +1 -1
  81. package/esm/utils/columnsSplit.js +1 -1
  82. package/esm/utils/dataMapping.js +1 -1
  83. package/esm/utils/date.js +1 -1
  84. package/esm/utils/debug.js +1 -1
  85. package/esm/utils/decodeEntity.js +1 -1
  86. package/esm/utils/dom.js +1 -1
  87. package/esm/utils/errors.js +1 -1
  88. package/esm/utils/escapeHtml.js +1 -1
  89. package/esm/utils/filter-schema.d.ts +2 -1
  90. package/esm/utils/filter-schema.js +14 -5
  91. package/esm/utils/filter.js +1 -1
  92. package/esm/utils/formatDuration.js +1 -1
  93. package/esm/utils/formula.js +1 -1
  94. package/esm/utils/getVariable.js +1 -1
  95. package/esm/utils/grammar.js +1 -1
  96. package/esm/utils/handleAction.js +1 -1
  97. package/esm/utils/helper.js +1 -1
  98. package/esm/utils/highlight.js +1 -1
  99. package/esm/utils/icon.js +1 -1
  100. package/esm/utils/image.js +1 -1
  101. package/esm/utils/isPureVariable.js +1 -1
  102. package/esm/utils/json-schema-2-amis-schema.js +1 -1
  103. package/esm/utils/keyToPath.js +1 -1
  104. package/esm/utils/makeSorter.js +1 -1
  105. package/esm/utils/math.js +1 -1
  106. package/esm/utils/memoryParse.js +1 -1
  107. package/esm/utils/normalizeLink.js +1 -1
  108. package/esm/utils/normalizeOptions.js +1 -1
  109. package/esm/utils/object.js +1 -1
  110. package/esm/utils/offset.js +1 -1
  111. package/esm/utils/offsetParent.js +1 -1
  112. package/esm/utils/optionValueCompare.js +1 -1
  113. package/esm/utils/position.js +1 -1
  114. package/esm/utils/prettyBytes.js +1 -1
  115. package/esm/utils/renderer-event.js +1 -1
  116. package/esm/utils/replaceText.js +1 -1
  117. package/esm/utils/resize-sensor.js +1 -1
  118. package/esm/utils/resolveCondition.js +1 -1
  119. package/esm/utils/resolveVariable.js +1 -1
  120. package/esm/utils/resolveVariableAndFilter.js +1 -1
  121. package/esm/utils/resolveVariableAndFilterForAsync.js +1 -1
  122. package/esm/utils/scrollPosition.js +1 -1
  123. package/esm/utils/string2regExp.js +1 -1
  124. package/esm/utils/stripNumber.js +1 -1
  125. package/esm/utils/style-helper.js +5 -3
  126. package/esm/utils/style.js +1 -1
  127. package/esm/utils/toNumber.js +1 -1
  128. package/esm/utils/tokenize.js +1 -1
  129. package/esm/utils/tpl-builtin.js +1 -1
  130. package/esm/utils/tpl-lodash.js +1 -1
  131. package/esm/utils/tpl.js +1 -1
  132. package/esm/utils/uncontrollable.js +1 -1
  133. package/esm/utils/validations.js +1 -1
  134. package/lib/Root.js +1 -1
  135. package/lib/RootRenderer.js +1 -1
  136. package/lib/SchemaRenderer.js +1 -1
  137. package/lib/Scoped.d.ts +2 -0
  138. package/lib/Scoped.js +47 -5
  139. package/lib/StatusScoped.js +1 -1
  140. package/lib/WithRootStore.js +1 -1
  141. package/lib/WithStore.js +26 -11
  142. package/lib/actions/Action.js +29 -21
  143. package/lib/actions/AjaxAction.js +2 -2
  144. package/lib/actions/BreakAction.js +1 -1
  145. package/lib/actions/BroadcastAction.js +1 -1
  146. package/lib/actions/CmptAction.js +3 -3
  147. package/lib/actions/ContinueAction.js +1 -1
  148. package/lib/actions/CopyAction.js +3 -3
  149. package/lib/actions/CustomAction.js +1 -1
  150. package/lib/actions/DialogAction.js +1 -1
  151. package/lib/actions/DrawerAction.js +1 -1
  152. package/lib/actions/EmailAction.js +1 -1
  153. package/lib/actions/LinkAction.js +5 -5
  154. package/lib/actions/LoopAction.js +1 -1
  155. package/lib/actions/PageAction.js +1 -1
  156. package/lib/actions/ParallelAction.js +1 -1
  157. package/lib/actions/StatusAction.js +1 -1
  158. package/lib/actions/SwitchAction.js +1 -1
  159. package/lib/actions/ToastAction.js +3 -3
  160. package/lib/components/CustomStyle.js +1 -1
  161. package/lib/components/ErrorBoundary.d.ts +20 -0
  162. package/lib/components/ErrorBoundary.js +52 -0
  163. package/lib/components/LazyComponent.js +1 -1
  164. package/lib/components/Overlay.js +1 -1
  165. package/lib/components/PopOver.d.ts +4 -0
  166. package/lib/components/PopOver.js +64 -1
  167. package/lib/env.js +1 -1
  168. package/lib/envOverwrite.js +1 -1
  169. package/lib/factory.js +1 -1
  170. package/lib/index.d.ts +2 -1
  171. package/lib/index.js +5 -2
  172. package/lib/locale.js +1 -1
  173. package/lib/polyfills.js +1 -1
  174. package/lib/renderers/Form.d.ts +1 -1
  175. package/lib/renderers/Form.js +15 -8
  176. package/lib/renderers/Item.d.ts +54 -0
  177. package/lib/renderers/Item.js +1 -1
  178. package/lib/renderers/Options.d.ts +4 -0
  179. package/lib/renderers/Options.js +5 -4
  180. package/lib/renderers/Placeholder.js +1 -1
  181. package/lib/renderers/builtin.js +1 -1
  182. package/lib/renderers/register.js +1 -1
  183. package/lib/renderers/wrapControl.js +4 -6
  184. package/lib/store/app.js +1 -1
  185. package/lib/store/combo.js +1 -1
  186. package/lib/store/crud.d.ts +9 -1
  187. package/lib/store/crud.js +29 -13
  188. package/lib/store/form.js +1 -1
  189. package/lib/store/formItem.js +16 -7
  190. package/lib/store/iRenderer.js +1 -1
  191. package/lib/store/index.js +1 -1
  192. package/lib/store/list.js +1 -1
  193. package/lib/store/manager.js +1 -1
  194. package/lib/store/modal.js +1 -1
  195. package/lib/store/node.js +1 -1
  196. package/lib/store/pagination.js +1 -1
  197. package/lib/store/root.js +1 -1
  198. package/lib/store/service.js +1 -1
  199. package/lib/store/status.js +1 -1
  200. package/lib/store/table.d.ts +1 -0
  201. package/lib/store/table.js +8 -12
  202. package/lib/store/table2.js +1 -1
  203. package/lib/theme.js +1 -1
  204. package/lib/utils/Animation.js +1 -1
  205. package/lib/utils/ColorScale.js +1 -1
  206. package/lib/utils/DataSchema.js +1 -1
  207. package/lib/utils/DataScope.js +1 -1
  208. package/lib/utils/RootClose.js +1 -1
  209. package/lib/utils/SimpleMap.js +1 -1
  210. package/lib/utils/api.js +1 -1
  211. package/lib/utils/arraySlice.js +1 -1
  212. package/lib/utils/attachmentAdpator.js +3 -1
  213. package/lib/utils/autobind.js +1 -1
  214. package/lib/utils/columnsSplit.js +1 -1
  215. package/lib/utils/dataMapping.js +1 -1
  216. package/lib/utils/date.js +1 -1
  217. package/lib/utils/debug.js +1 -1
  218. package/lib/utils/decodeEntity.js +1 -1
  219. package/lib/utils/dom.js +1 -1
  220. package/lib/utils/errors.js +1 -1
  221. package/lib/utils/escapeHtml.js +1 -1
  222. package/lib/utils/filter-schema.d.ts +2 -1
  223. package/lib/utils/filter-schema.js +14 -4
  224. package/lib/utils/filter.js +1 -1
  225. package/lib/utils/formatDuration.js +1 -1
  226. package/lib/utils/formula.js +1 -1
  227. package/lib/utils/getVariable.js +1 -1
  228. package/lib/utils/grammar.js +1 -1
  229. package/lib/utils/handleAction.js +1 -1
  230. package/lib/utils/helper.js +1 -1
  231. package/lib/utils/highlight.js +1 -1
  232. package/lib/utils/icon.js +1 -1
  233. package/lib/utils/image.js +1 -1
  234. package/lib/utils/isPureVariable.js +1 -1
  235. package/lib/utils/json-schema-2-amis-schema.js +1 -1
  236. package/lib/utils/keyToPath.js +1 -1
  237. package/lib/utils/makeSorter.js +1 -1
  238. package/lib/utils/math.js +1 -1
  239. package/lib/utils/memoryParse.js +1 -1
  240. package/lib/utils/normalizeLink.js +1 -1
  241. package/lib/utils/normalizeOptions.js +1 -1
  242. package/lib/utils/object.js +1 -1
  243. package/lib/utils/offset.js +1 -1
  244. package/lib/utils/offsetParent.js +1 -1
  245. package/lib/utils/optionValueCompare.js +1 -1
  246. package/lib/utils/position.js +1 -1
  247. package/lib/utils/prettyBytes.js +1 -1
  248. package/lib/utils/renderer-event.js +1 -1
  249. package/lib/utils/replaceText.js +1 -1
  250. package/lib/utils/resize-sensor.js +1 -1
  251. package/lib/utils/resolveCondition.js +1 -1
  252. package/lib/utils/resolveVariable.js +1 -1
  253. package/lib/utils/resolveVariableAndFilter.js +1 -1
  254. package/lib/utils/resolveVariableAndFilterForAsync.js +1 -1
  255. package/lib/utils/scrollPosition.js +1 -1
  256. package/lib/utils/string2regExp.js +1 -1
  257. package/lib/utils/stripNumber.js +1 -1
  258. package/lib/utils/style-helper.js +5 -3
  259. package/lib/utils/style.js +1 -1
  260. package/lib/utils/toNumber.js +1 -1
  261. package/lib/utils/tokenize.js +1 -1
  262. package/lib/utils/tpl-builtin.js +1 -1
  263. package/lib/utils/tpl-lodash.js +1 -1
  264. package/lib/utils/tpl.js +1 -1
  265. package/lib/utils/uncontrollable.js +1 -1
  266. package/lib/utils/validations.js +1 -1
  267. package/package.json +3 -3
@@ -46,9 +46,13 @@ export declare class PopOver extends React.PureComponent<PopOverProps, PopOverSt
46
46
  };
47
47
  parent: HTMLElement;
48
48
  wrapperRef: React.RefObject<HTMLDivElement>;
49
+ isRootClosed: boolean;
49
50
  componentDidMount(): void;
50
51
  componentDidUpdate(): void;
51
52
  componentWillUnmount(): void;
53
+ handleRootMouseDownCapture(e: MouseEvent): void;
54
+ handleRootMouseUpCapture(e: MouseEvent): void;
55
+ handleRootMouseUp(e: MouseEvent): void;
52
56
  mayUpdateOffset(): void;
53
57
  render(): React.JSX.Element;
54
58
  }
@@ -1,9 +1,9 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
6
- import { __extends, __rest, __assign } from 'tslib';
6
+ import { __extends, __rest, __assign, __decorate, __metadata } from 'tslib';
7
7
  import React from 'react';
8
8
  import { findDOMNode } from 'react-dom';
9
9
  import { themeable } from '../theme.js';
@@ -18,7 +18,7 @@ import 'moment';
18
18
  import '../utils/debug.js';
19
19
  import '../utils/errors.js';
20
20
  import '../utils/tpl.js';
21
- import { preventDefault, camel } from '../utils/helper.js';
21
+ import { preventDefault, camel, autobind } from '../utils/helper.js';
22
22
  import '../utils/filter.js';
23
23
  import 'lodash/isObject';
24
24
  import 'lodash/isString';
@@ -57,6 +57,7 @@ var PopOver = /** @class */ (function (_super) {
57
57
  yOffset: 0
58
58
  };
59
59
  _this.wrapperRef = React.createRef();
60
+ _this.isRootClosed = false;
60
61
  return _this;
61
62
  }
62
63
  PopOver.prototype.componentDidMount = function () {
@@ -71,6 +72,14 @@ var PopOver = /** @class */ (function (_super) {
71
72
  capture: false
72
73
  });
73
74
  }
75
+ // 从弹窗中处理复制过来的,如果要修改,请同步修改
76
+ // 因为 overlay 功能其实是用 postion: fixed 来实现的
77
+ // 目的是加一个蒙层监听蒙层点击然后关闭弹窗。意图就是 closeOnOutside
78
+ // 但是如果上层有个 translateZ 之类的样式就会影响 fixed 的定位,导致功能失效
79
+ // 所以这里兜底加了个 closeOnOutside 的功能
80
+ document.body.addEventListener('mousedown', this.handleRootMouseDownCapture, true);
81
+ document.body.addEventListener('mouseup', this.handleRootMouseUpCapture, true);
82
+ document.body.addEventListener('mouseup', this.handleRootMouseUp);
74
83
  };
75
84
  PopOver.prototype.componentDidUpdate = function () {
76
85
  this.mayUpdateOffset();
@@ -80,6 +89,42 @@ var PopOver = /** @class */ (function (_super) {
80
89
  if (this.wrapperRef && this.wrapperRef.current) {
81
90
  this.wrapperRef.current.removeEventListener('touchmove', preventDefault);
82
91
  }
92
+ document.body.removeEventListener('mouseup', this.handleRootMouseUp);
93
+ document.body.removeEventListener('mousedown', this.handleRootMouseDownCapture, true);
94
+ document.body.removeEventListener('mouseup', this.handleRootMouseUpCapture, true);
95
+ };
96
+ PopOver.prototype.handleRootMouseDownCapture = function (e) {
97
+ var target = e.target;
98
+ var _a = this.props, closeOnOutside = _a.overlay, ns = _a.classPrefix;
99
+ var isLeftButton = (e.button === 1 && window.event !== null) || e.button === 0;
100
+ this.isRootClosed = !!(isLeftButton &&
101
+ closeOnOutside &&
102
+ target &&
103
+ this.wrapperRef.current &&
104
+ ((!this.wrapperRef.current.contains(target) &&
105
+ !target.closest('[role=dialog]')) ||
106
+ (target.matches(".".concat(ns, "Modal")) && target === this.wrapperRef.current))); // 干脆过滤掉来自弹框里面的点击
107
+ };
108
+ PopOver.prototype.handleRootMouseUpCapture = function (e) {
109
+ // mousedown 的时候不在弹窗里面,则不需要判断了
110
+ if (!this.isRootClosed) {
111
+ return;
112
+ }
113
+ // 再判断 mouseup 的时候是不是在弹窗里面
114
+ this.handleRootMouseDownCapture(e);
115
+ };
116
+ PopOver.prototype.handleRootMouseUp = function (e) {
117
+ var onHide = this.props.onHide;
118
+ if (this.isRootClosed && !e.defaultPrevented) {
119
+ // 因为原来 overlay 是不会让别的部分还有点击事件的,所以这里要阻止默认事件
120
+ // 参考:https://stackoverflow.com/questions/8643739/cancel-click-event-in-the-mouseup-event-handler
121
+ var captureClick_1 = function (e) {
122
+ e.stopPropagation();
123
+ window.removeEventListener('click', captureClick_1, true);
124
+ };
125
+ window.addEventListener('click', captureClick_1, true);
126
+ onHide === null || onHide === void 0 ? void 0 : onHide();
127
+ }
83
128
  };
84
129
  PopOver.prototype.mayUpdateOffset = function () {
85
130
  var offset;
@@ -118,6 +163,24 @@ var PopOver = /** @class */ (function (_super) {
118
163
  overlay: false,
119
164
  placement: 'auto'
120
165
  };
166
+ __decorate([
167
+ autobind,
168
+ __metadata("design:type", Function),
169
+ __metadata("design:paramtypes", [MouseEvent]),
170
+ __metadata("design:returntype", void 0)
171
+ ], PopOver.prototype, "handleRootMouseDownCapture", null);
172
+ __decorate([
173
+ autobind,
174
+ __metadata("design:type", Function),
175
+ __metadata("design:paramtypes", [MouseEvent]),
176
+ __metadata("design:returntype", void 0)
177
+ ], PopOver.prototype, "handleRootMouseUpCapture", null);
178
+ __decorate([
179
+ autobind,
180
+ __metadata("design:type", Function),
181
+ __metadata("design:paramtypes", [MouseEvent]),
182
+ __metadata("design:returntype", void 0)
183
+ ], PopOver.prototype, "handleRootMouseUp", null);
121
184
  return PopOver;
122
185
  }(React.PureComponent));
123
186
  var PopOver$1 = themeable(PopOver);
package/esm/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
package/esm/factory.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
package/esm/index.d.ts CHANGED
@@ -39,6 +39,7 @@ import type { FilterContext } from 'amis-formula';
39
39
  import LazyComponent from './components/LazyComponent';
40
40
  import Overlay from './components/Overlay';
41
41
  import PopOver from './components/PopOver';
42
+ import ErrorBoundary from './components/ErrorBoundary';
42
43
  import { FormRenderer } from './renderers/Form';
43
44
  import type { FormHorizontal, FormSchemaBase } from './renderers/Form';
44
45
  import { enableDebug, disableDebug } from './utils/index';
@@ -49,5 +50,5 @@ import type { IItem } from './store/list';
49
50
  import CustomStyle from './components/CustomStyle';
50
51
  import { StatusScoped } from './StatusScoped';
51
52
  export declare const version = "__buildVersion";
52
- export { clearStoresCache, updateEnv, Renderer, RendererProps, RenderOptions, RendererEnv, EnvContext, RegisterStore, FormItem, FormItemWrap, FormItemProps, OptionsControl, FormRenderer, FormHorizontal, utils, getRendererByName, registerRenderer, unRegisterRenderer, getRenderers, registerFormItem, getFormItemByName, registerOptionsControl, resolveRenderer, filterSchema, Scoped, ScopedContext, IScopedContext, StatusScoped, setDefaultTheme, theme, themeable, ThemeProps, getTheme, classPrefix, getClassPrefix, classnames, makeClassnames, getDefaultLocale, setDefaultLocale, registerLocale, makeTranslator, extendLocale, removeLocaleData, localeable, LocaleProps, TranslateFn, ClassNamesFn, parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, extendsFilters, registerFunction, evaluate, evaluateForAsync, LazyComponent, Overlay, PopOver, addSchemaFilter, OptionsControlProps, FormOptionsControl, FormControlProps, FormBaseControl, extendDefaultEnv, addRootWrapper, RendererConfig, styleMap, RENDERER_TRANSMISSION_OMIT_PROPS, ScopedComponentType, IItem, IColumn, IRow, IColumn2, IRow2, OnEventProps, FormSchemaBase, filterTarget, CustomStyle, enableDebug, disableDebug };
53
+ export { clearStoresCache, updateEnv, Renderer, RendererProps, RenderOptions, RendererEnv, EnvContext, RegisterStore, FormItem, FormItemWrap, FormItemProps, OptionsControl, FormRenderer, FormHorizontal, utils, getRendererByName, registerRenderer, unRegisterRenderer, getRenderers, registerFormItem, getFormItemByName, registerOptionsControl, resolveRenderer, filterSchema, Scoped, ScopedContext, IScopedContext, StatusScoped, setDefaultTheme, theme, themeable, ThemeProps, getTheme, classPrefix, getClassPrefix, classnames, makeClassnames, getDefaultLocale, setDefaultLocale, registerLocale, makeTranslator, extendLocale, removeLocaleData, localeable, LocaleProps, TranslateFn, ClassNamesFn, parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, extendsFilters, registerFunction, evaluate, evaluateForAsync, LazyComponent, Overlay, PopOver, ErrorBoundary, addSchemaFilter, OptionsControlProps, FormOptionsControl, FormControlProps, FormBaseControl, extendDefaultEnv, addRootWrapper, RendererConfig, styleMap, RENDERER_TRANSMISSION_OMIT_PROPS, ScopedComponentType, IItem, IColumn, IRow, IColumn2, IRow2, OnEventProps, FormSchemaBase, filterTarget, CustomStyle, enableDebug, disableDebug };
53
54
  export declare function render(schema: Schema, props?: RootRenderProps, options?: RenderOptions, pathPrefix?: string): JSX.Element;
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -24,7 +24,7 @@ export { DebugWrapper, JsonView, debug, disableDebug, enableDebug, traceProps, w
24
24
  export { calculatePosition, getContainer, getStyleNumber, ownerDocument, renderTextByKeyword } from './utils/dom.js';
25
25
  export { ServerError } from './utils/errors.js';
26
26
  export { escapeHtml } from './utils/escapeHtml.js';
27
- export { filterClassNameObject, getExprProperties } from './utils/filter-schema.js';
27
+ export { filterClassNameObject, getExprProperties, hasExprPropertiesChanged } from './utils/filter-schema.js';
28
28
  import './utils/filter.js';
29
29
  export { formatDuration } from './utils/formatDuration.js';
30
30
  export { FormulaExec, formulaExec, isExpression, isNeedFormula, registerFormulaExec, replaceExpression } from './utils/formula.js';
@@ -112,6 +112,7 @@ export { AsyncEvaluator, Evaluator, evaluate, evaluateForAsync, extendsFilters,
112
112
  export { default as LazyComponent } from './components/LazyComponent.js';
113
113
  export { default as Overlay } from './components/Overlay.js';
114
114
  export { default as PopOver } from './components/PopOver.js';
115
+ export { default as ErrorBoundary } from './components/ErrorBoundary.js';
115
116
  export { FormRenderer } from './renderers/Form.js';
116
117
  export { RENDERER_TRANSMISSION_OMIT_PROPS } from './SchemaRenderer.js';
117
118
  export { default as CustomStyle } from './components/CustomStyle.js';
@@ -140,7 +141,7 @@ export { StoreNode } from './store/node.js';
140
141
  */
141
142
  var classPrefix = getClassPrefix();
142
143
  // @ts-ignore
143
- var version = '3.5.3';
144
+ var version = '3.6.0';
144
145
  function render(schema, props, options, pathPrefix) {
145
146
  if (props === void 0) { props = {}; }
146
147
  if (options === void 0) { options = {}; }
package/esm/locale.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
package/esm/polyfills.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -355,7 +355,7 @@ export default class Form extends React.Component<FormProps, object> {
355
355
  removeHook(fn: () => any, type?: string): void;
356
356
  handleChange(value: any, name: string, submit: boolean, changePristine?: boolean): void;
357
357
  formItemDispatchEvent(type: string, data: any): any;
358
- emitChange(submit: boolean): Promise<void>;
358
+ emitChange(submit: boolean, skipIfNothingChanges?: boolean): Promise<void>;
359
359
  handleBulkChange(values: Object, submit: boolean): void;
360
360
  handleFormSubmit(e: React.UIEvent<any>): any;
361
361
  handleReset(action: any): (data: any) => void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -101,6 +101,12 @@ var Form = /** @class */ (function (_super) {
101
101
  return form.items.forEach(function (item) { return item.unique && item.syncOptions(undefined, form.data); });
102
102
  });
103
103
  }
104
+ // withStore 里面与上层数据会做同步
105
+ // 这个时候变更的数据没有同步 onChange 出去,出现数据不一致的问题。
106
+ // https://github.com/baidu/amis/issues/8773
107
+ _this.toDispose.push(reaction(function () { return store.initedAt; }, function () {
108
+ store.inited && _this.emitChange(!!_this.props.submitOnChange, true);
109
+ }));
104
110
  return _this;
105
111
  }
106
112
  Form.prototype.componentDidMount = function () {
@@ -472,9 +478,10 @@ var Form = /** @class */ (function (_super) {
472
478
  var dispatchEvent = this.props.dispatchEvent;
473
479
  return dispatchEvent(type, data);
474
480
  };
475
- Form.prototype.emitChange = function (submit) {
481
+ Form.prototype.emitChange = function (submit, skipIfNothingChanges) {
482
+ if (skipIfNothingChanges === void 0) { skipIfNothingChanges = false; }
476
483
  return __awaiter(this, void 0, void 0, function () {
477
- var _a, onChange, store, submitOnChange, dispatchEvent, data, changeProps, dispatcher;
484
+ var _a, onChange, store, submitOnChange, dispatchEvent, data, diff, changeProps, dispatcher;
478
485
  return __generator(this, function (_b) {
479
486
  switch (_b.label) {
480
487
  case 0:
@@ -482,11 +489,11 @@ var Form = /** @class */ (function (_super) {
482
489
  if (!isAlive(store)) {
483
490
  return [2 /*return*/];
484
491
  }
485
- changeProps = [
486
- store.data,
487
- difference(store.data, store.pristine),
488
- this.props
489
- ];
492
+ diff = difference(store.data, store.pristine);
493
+ if (skipIfNothingChanges && !Object.keys(diff).length) {
494
+ return [2 /*return*/];
495
+ }
496
+ changeProps = [store.data, diff, this.props];
490
497
  return [4 /*yield*/, dispatchEvent('change', createObject(data, store.data))];
491
498
  case 1:
492
499
  dispatcher = _b.sent();
@@ -515,6 +515,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
515
515
  onChildStoreDispose(child: any): void;
516
516
  syncProps(props: any, prevProps: any, list?: string[]): void;
517
517
  dispose: (callback?: (() => void) | undefined) => void;
518
+ /**
519
+ * 配置当前表单项展示模式
520
+ */
518
521
  addChildId: (id: string) => void;
519
522
  removeChildId: (id: string) => void;
520
523
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -533,9 +536,15 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
533
536
  onChildStoreDispose(child: any): void;
534
537
  syncProps(props: any, prevProps: any, list?: string[]): void;
535
538
  dispose: (callback?: (() => void) | undefined) => void;
539
+ /**
540
+ * 配置当前表单项展示模式
541
+ */
536
542
  addChildId: (id: string) => void;
537
543
  removeChildId: (id: string) => void;
538
544
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
545
+ /**
546
+ * @deprecated 用 description 代替
547
+ */
539
548
  readonly stores: {
540
549
  [propName: string]: {
541
550
  id: string;
@@ -553,6 +562,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
553
562
  onChildStoreDispose(child: any): void;
554
563
  syncProps(props: any, prevProps: any, list?: string[]): void;
555
564
  dispose: (callback?: (() => void) | undefined) => void;
565
+ /**
566
+ * 配置当前表单项展示模式
567
+ */
556
568
  addChildId: (id: string) => void;
557
569
  removeChildId: (id: string) => void;
558
570
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -571,6 +583,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
571
583
  onChildStoreDispose(child: any): void;
572
584
  syncProps(props: any, prevProps: any, list?: string[]): void;
573
585
  dispose: (callback?: (() => void) | undefined) => void;
586
+ /**
587
+ * 配置当前表单项展示模式
588
+ */
574
589
  addChildId: (id: string) => void;
575
590
  removeChildId: (id: string) => void;
576
591
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
@@ -598,6 +613,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
598
613
  onChildStoreDispose(child: any): void;
599
614
  syncProps(props: any, prevProps: any, list?: string[]): void;
600
615
  dispose: (callback?: (() => void) | undefined) => void;
616
+ /**
617
+ * 配置当前表单项展示模式
618
+ */
601
619
  addChildId: (id: string) => void;
602
620
  removeChildId: (id: string) => void;
603
621
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -616,6 +634,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
616
634
  onChildStoreDispose(child: any): void;
617
635
  syncProps(props: any, prevProps: any, list?: string[]): void;
618
636
  dispose: (callback?: (() => void) | undefined) => void;
637
+ /**
638
+ * 配置当前表单项展示模式
639
+ */
619
640
  addChildId: (id: string) => void;
620
641
  removeChildId: (id: string) => void;
621
642
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
@@ -635,6 +656,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
635
656
  onChildStoreDispose(child: any): void;
636
657
  syncProps(props: any, prevProps: any, list?: string[]): void;
637
658
  dispose: (callback?: (() => void) | undefined) => void;
659
+ /**
660
+ * 配置当前表单项展示模式
661
+ */
638
662
  addChildId: (id: string) => void;
639
663
  removeChildId: (id: string) => void;
640
664
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -653,6 +677,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
653
677
  onChildStoreDispose(child: any): void;
654
678
  syncProps(props: any, prevProps: any, list?: string[]): void;
655
679
  dispose: (callback?: (() => void) | undefined) => void;
680
+ /**
681
+ * 配置当前表单项展示模式
682
+ */
656
683
  addChildId: (id: string) => void;
657
684
  removeChildId: (id: string) => void;
658
685
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>): void;
@@ -679,6 +706,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
679
706
  onChildStoreDispose(child: any): void;
680
707
  syncProps(props: any, prevProps: any, list?: string[]): void;
681
708
  dispose: (callback?: (() => void) | undefined) => void;
709
+ /**
710
+ * 配置当前表单项展示模式
711
+ */
682
712
  addChildId: (id: string) => void;
683
713
  removeChildId: (id: string) => void;
684
714
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -697,9 +727,15 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
697
727
  onChildStoreDispose(child: any): void;
698
728
  syncProps(props: any, prevProps: any, list?: string[]): void;
699
729
  dispose: (callback?: (() => void) | undefined) => void;
730
+ /**
731
+ * 配置当前表单项展示模式
732
+ */
700
733
  addChildId: (id: string) => void;
701
734
  removeChildId: (id: string) => void;
702
735
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
736
+ /**
737
+ * @deprecated 用 description 代替
738
+ */
703
739
  readonly stores: {
704
740
  [propName: string]: {
705
741
  id: string;
@@ -717,6 +753,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
717
753
  onChildStoreDispose(child: any): void;
718
754
  syncProps(props: any, prevProps: any, list?: string[]): void;
719
755
  dispose: (callback?: (() => void) | undefined) => void;
756
+ /**
757
+ * 配置当前表单项展示模式
758
+ */
720
759
  addChildId: (id: string) => void;
721
760
  removeChildId: (id: string) => void;
722
761
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -735,6 +774,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
735
774
  onChildStoreDispose(child: any): void;
736
775
  syncProps(props: any, prevProps: any, list?: string[]): void;
737
776
  dispose: (callback?: (() => void) | undefined) => void;
777
+ /**
778
+ * 配置当前表单项展示模式
779
+ */
738
780
  addChildId: (id: string) => void;
739
781
  removeChildId: (id: string) => void;
740
782
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
@@ -762,6 +804,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
762
804
  onChildStoreDispose(child: any): void;
763
805
  syncProps(props: any, prevProps: any, list?: string[]): void;
764
806
  dispose: (callback?: (() => void) | undefined) => void;
807
+ /**
808
+ * 配置当前表单项展示模式
809
+ */
765
810
  addChildId: (id: string) => void;
766
811
  removeChildId: (id: string) => void;
767
812
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -780,6 +825,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
780
825
  onChildStoreDispose(child: any): void;
781
826
  syncProps(props: any, prevProps: any, list?: string[]): void;
782
827
  dispose: (callback?: (() => void) | undefined) => void;
828
+ /**
829
+ * 配置当前表单项展示模式
830
+ */
783
831
  addChildId: (id: string) => void;
784
832
  removeChildId: (id: string) => void;
785
833
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
@@ -799,6 +847,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
799
847
  onChildStoreDispose(child: any): void;
800
848
  syncProps(props: any, prevProps: any, list?: string[]): void;
801
849
  dispose: (callback?: (() => void) | undefined) => void;
850
+ /**
851
+ * 配置当前表单项展示模式
852
+ */
802
853
  addChildId: (id: string) => void;
803
854
  removeChildId: (id: string) => void;
804
855
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
@@ -817,6 +868,9 @@ export declare function asFormItem(config: Omit<FormItemConfig, 'component'>): (
817
868
  onChildStoreDispose(child: any): void;
818
869
  syncProps(props: any, prevProps: any, list?: string[]): void;
819
870
  dispose: (callback?: (() => void) | undefined) => void;
871
+ /**
872
+ * 配置当前表单项展示模式
873
+ */
820
874
  addChildId: (id: string) => void;
821
875
  removeChildId: (id: string) => void;
822
876
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>): void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -64,6 +64,10 @@ export interface FormOptionsControl extends FormBaseControl {
64
64
  * @default ''
65
65
  */
66
66
  resetValue?: string;
67
+ /**
68
+ * 懒加载字段
69
+ */
70
+ deferField?: string;
67
71
  /**
68
72
  * 延时加载的 API,当选项中有 defer: true 的选项时,点开会通过此接口扩充。
69
73
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -517,12 +517,12 @@ function registerOptionsControl(config) {
517
517
  if (idx === void 0) { idx = -1; }
518
518
  if (skipForm === void 0) { skipForm = false; }
519
519
  return __awaiter(this, void 0, void 0, function () {
520
- var _c, addControls, addDialog, disabled, labelField, onOpenDialog, optionLabel, addApi, source, data, valueField, model, createBtnLabel, env, __, parent, ctx, result, _d, payload, e_1, isPrevented, options;
520
+ var _c, addControls, addDialog, disabled, labelField, onOpenDialog, optionLabel, addApi, source, data, valueField, deferField, model, createBtnLabel, env, __, parent, ctx, result, _d, payload, e_1, isPrevented, options;
521
521
  var _e;
522
522
  return __generator(this, function (_f) {
523
523
  switch (_f.label) {
524
524
  case 0:
525
- _c = this.props, addControls = _c.addControls, addDialog = _c.addDialog, disabled = _c.disabled, labelField = _c.labelField, onOpenDialog = _c.onOpenDialog, optionLabel = _c.optionLabel, addApi = _c.addApi, source = _c.source, data = _c.data, valueField = _c.valueField, model = _c.formItem, createBtnLabel = _c.createBtnLabel, env = _c.env, __ = _c.translate;
525
+ _c = this.props, addControls = _c.addControls, addDialog = _c.addDialog, disabled = _c.disabled, labelField = _c.labelField, onOpenDialog = _c.onOpenDialog, optionLabel = _c.optionLabel, addApi = _c.addApi, source = _c.source, data = _c.data, valueField = _c.valueField, deferField = _c.deferField, model = _c.formItem, createBtnLabel = _c.createBtnLabel, env = _c.env, __ = _c.translate;
526
526
  // 禁用或者没有配置 name
527
527
  if (disabled || !model) {
528
528
  return [2 /*return*/];
@@ -607,7 +607,8 @@ function registerOptionsControl(config) {
607
607
  if (isPrevented) {
608
608
  return [2 /*return*/];
609
609
  }
610
- if (!(parent === null || parent === void 0 ? void 0 : parent.defer)) return [3 /*break*/, 10];
610
+ if (!(((parent === null || parent === void 0 ? void 0 : parent.hasOwnProperty(deferField)) && parent[deferField]) ||
611
+ (parent === null || parent === void 0 ? void 0 : parent.defer))) return [3 /*break*/, 10];
611
612
  return [4 /*yield*/, this.deferLoad(parent)];
612
613
  case 9:
613
614
  _f.sent();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -549,9 +549,7 @@ function wrapControl(ComposedComponent) {
549
549
  formItem: this.model,
550
550
  formMode: control.mode || formMode,
551
551
  ref: this.controlRef,
552
- data: model
553
- ? model.getMergedData(data || (store === null || store === void 0 ? void 0 : store.data))
554
- : data || (store === null || store === void 0 ? void 0 : store.data),
552
+ data: data || (store === null || store === void 0 ? void 0 : store.data),
555
553
  name: (_c = model === null || model === void 0 ? void 0 : model.name) !== null && _c !== void 0 ? _c : control.name,
556
554
  value: value,
557
555
  changeMotivation: model === null || model === void 0 ? void 0 : model.changeMotivation,
@@ -564,8 +562,8 @@ function wrapControl(ComposedComponent) {
564
562
  prinstine: model ? model.prinstine : undefined,
565
563
  setPrinstineValue: this.setPrinstineValue,
566
564
  onValidate: this.validate,
567
- onFlushChange: this.flushChange,
568
- render: this.renderChild // 如果覆盖,那么用的就是 form 上的 render,这个里面用到的 data 是比较旧的。
565
+ onFlushChange: this.flushChange
566
+ // render: this.renderChild // 如果覆盖,那么用的就是 form 上的 render,这个里面用到的 data 是比较旧的。
569
567
  // !没了这个, tree 里的 options 渲染会出问题
570
568
  // todo 理论上不应该影响,待确认
571
569
  // _filteredOptions: this.model?.filteredOptions
package/esm/store/app.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v3.5.3
2
+ * amis-core v3.6.0
3
3
  * Copyright 2018-2023 fex
4
4
  */
5
5
 
@@ -1,11 +1,17 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
2
  import { Api, fetchOptions, ActionObject } from '../types';
3
+ import type { MatchSorterOptions } from 'match-sorter';
3
4
  interface MatchFunc {
4
5
  (items: any, itemsRaw: any,
5
6
  /** 相关配置 */
6
7
  options?: {
7
8
  query: Record<string, any>;
8
9
  columns: any;
10
+ /**
11
+ * match-sorter 匹配函数
12
+ * @doc https://github.com/kentcdodds/match-sorter
13
+ */
14
+ matchSorter: (items: any[], value: string, options?: MatchSorterOptions<any>) => any[];
9
15
  }): any;
10
16
  }
11
17
  export declare const CRUDStore: import("mobx-state-tree").IModelType<{
@@ -120,7 +126,7 @@ export declare const CRUDStore: import("mobx-state-tree").IModelType<{
120
126
  columns?: Array<any>;
121
127
  isTable2?: Boolean;
122
128
  }) => Promise<any>;
123
- changePage: (page: number, perPage?: number | string) => void;
129
+ changePage: (page: number | string, perPage?: number | string) => void;
124
130
  changePerPage: (perPage: number | string) => void;
125
131
  selectAction: (action: ActionObject) => void;
126
132
  saveRemote: (api: Api, data?: object, options?: fetchOptions) => Promise<any>;
@@ -138,6 +144,8 @@ export declare const CRUDStore: import("mobx-state-tree").IModelType<{
138
144
  api?: Api | undefined;
139
145
  data?: any;
140
146
  filename?: string | undefined;
147
+ pageField?: string | undefined;
148
+ perPageField?: string | undefined;
141
149
  }) => Promise<void>;
142
150
  updateColumns: (columns: Array<any>) => void;
143
151
  updateTotal: (total: number) => void;