amis-core 6.7.0 → 6.9.0-beta.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 (332) hide show
  1. package/esm/Root.js +1 -1
  2. package/esm/RootRenderer.d.ts +1 -1
  3. package/esm/RootRenderer.js +24 -2
  4. package/esm/SchemaRenderer.d.ts +0 -1
  5. package/esm/SchemaRenderer.js +44 -20
  6. package/esm/Scoped.d.ts +1 -1
  7. package/esm/Scoped.js +2 -1
  8. package/esm/StatusScoped.js +1 -1
  9. package/esm/WithRootStore.js +1 -1
  10. package/esm/WithStore.js +14 -14
  11. package/esm/actions/Action.js +2 -1
  12. package/esm/actions/AjaxAction.js +1 -1
  13. package/esm/actions/BreakAction.js +1 -1
  14. package/esm/actions/BroadcastAction.js +1 -1
  15. package/esm/actions/CmptAction.js +57 -50
  16. package/esm/actions/ContinueAction.js +1 -1
  17. package/esm/actions/CopyAction.js +1 -1
  18. package/esm/actions/CustomAction.js +2 -1
  19. package/esm/actions/DialogAction.js +3 -1
  20. package/esm/actions/DrawerAction.js +2 -1
  21. package/esm/actions/EmailAction.js +1 -1
  22. package/esm/actions/EventAction.js +2 -1
  23. package/esm/actions/LinkAction.js +1 -1
  24. package/esm/actions/LoopAction.js +2 -1
  25. package/esm/actions/PageAction.js +1 -1
  26. package/esm/actions/ParallelAction.js +1 -1
  27. package/esm/actions/PrintAction.js +1 -1
  28. package/esm/actions/StatusAction.js +1 -1
  29. package/esm/actions/SwitchAction.js +1 -1
  30. package/esm/actions/ToastAction.js +3 -3
  31. package/esm/actions/WaitAction.js +1 -1
  32. package/esm/components/CustomStyle.js +1 -1
  33. package/esm/components/ErrorBoundary.js +1 -1
  34. package/esm/components/LazyComponent.d.ts +40 -2
  35. package/esm/components/LazyComponent.js +13 -7
  36. package/esm/components/Overlay.js +2 -1
  37. package/esm/components/PopOver.d.ts +1 -1
  38. package/esm/components/PopOver.js +2 -1
  39. package/esm/env.d.ts +0 -4
  40. package/esm/env.js +1 -1
  41. package/esm/envOverwrite.js +1 -1
  42. package/esm/factory.d.ts +19 -2
  43. package/esm/factory.js +205 -45
  44. package/esm/index.d.ts +4 -4
  45. package/esm/index.js +9 -5
  46. package/esm/locale.d.ts +1 -1
  47. package/esm/locale.js +14 -2
  48. package/esm/polyfills.js +1 -1
  49. package/esm/renderers/Form.d.ts +5 -5
  50. package/esm/renderers/Form.js +68 -29
  51. package/esm/renderers/Item.d.ts +109 -18
  52. package/esm/renderers/Item.js +164 -126
  53. package/esm/renderers/Options.d.ts +3 -3
  54. package/esm/renderers/Options.js +43 -19
  55. package/esm/renderers/Placeholder.js +1 -1
  56. package/esm/renderers/builtin.js +1 -1
  57. package/esm/renderers/register.js +1 -1
  58. package/esm/renderers/wrapControl.d.ts +3 -3
  59. package/esm/renderers/wrapControl.js +25 -10
  60. package/esm/store/app.d.ts +3 -3
  61. package/esm/store/app.js +2 -1
  62. package/esm/store/combo.d.ts +425 -15
  63. package/esm/store/combo.js +1 -1
  64. package/esm/store/crud.d.ts +3 -3
  65. package/esm/store/crud.js +2 -1
  66. package/esm/store/form.d.ts +178 -7
  67. package/esm/store/form.js +29 -6
  68. package/esm/store/formItem.d.ts +5 -0
  69. package/esm/store/formItem.js +32 -10
  70. package/esm/store/iRenderer.d.ts +4 -3
  71. package/esm/store/iRenderer.js +29 -4
  72. package/esm/store/index.d.ts +1 -0
  73. package/esm/store/index.js +3 -2
  74. package/esm/store/list.d.ts +3 -3
  75. package/esm/store/list.js +1 -1
  76. package/esm/store/manager.js +1 -1
  77. package/esm/store/modal.d.ts +3 -3
  78. package/esm/store/modal.js +1 -1
  79. package/esm/store/node.js +1 -1
  80. package/esm/store/pagination.d.ts +3 -3
  81. package/esm/store/pagination.js +2 -1
  82. package/esm/store/root.d.ts +5 -3
  83. package/esm/store/root.js +46 -21
  84. package/esm/store/service.d.ts +3 -3
  85. package/esm/store/service.js +11 -4
  86. package/esm/store/status.js +1 -1
  87. package/esm/store/table.d.ts +396 -36
  88. package/esm/store/table.js +84 -54
  89. package/esm/store/table2.d.ts +3 -3
  90. package/esm/store/table2.js +1 -1
  91. package/esm/theme.d.ts +1 -1
  92. package/esm/theme.js +13 -2
  93. package/esm/types.d.ts +19 -2
  94. package/esm/utils/Animation.js +1 -1
  95. package/esm/utils/ColorScale.js +1 -1
  96. package/esm/utils/DataSchema.js +1 -1
  97. package/esm/utils/DataScope.js +1 -1
  98. package/esm/utils/RootClose.js +1 -1
  99. package/esm/utils/SimpleMap.js +1 -1
  100. package/esm/utils/api.d.ts +21 -1
  101. package/esm/utils/api.js +138 -41
  102. package/esm/utils/arraySlice.js +1 -1
  103. package/esm/utils/attachmentAdpator.js +1 -1
  104. package/esm/utils/autobind.js +1 -1
  105. package/esm/utils/browser.js +1 -1
  106. package/esm/utils/columnsSplit.js +1 -1
  107. package/esm/utils/concatData.js +1 -1
  108. package/esm/utils/dataMapping.js +1 -1
  109. package/esm/utils/date.js +1 -1
  110. package/esm/utils/debug.js +17 -3
  111. package/esm/utils/decodeEntity.js +1 -1
  112. package/esm/utils/dom.js +1 -1
  113. package/esm/utils/errors.js +1 -1
  114. package/esm/utils/escapeHtml.js +1 -1
  115. package/esm/utils/filter-schema.js +1 -1
  116. package/esm/utils/filter.js +1 -1
  117. package/esm/utils/formatDuration.js +1 -1
  118. package/esm/utils/formula.js +2 -1
  119. package/esm/utils/getVariable.js +1 -1
  120. package/esm/utils/grammar.js +1 -1
  121. package/esm/utils/handleAction.js +1 -1
  122. package/esm/utils/helper.d.ts +4 -1
  123. package/esm/utils/helper.js +20 -4
  124. package/esm/utils/highlight.js +1 -1
  125. package/esm/utils/icon.js +1 -1
  126. package/esm/utils/image.js +1 -1
  127. package/esm/utils/isPureVariable.js +2 -2
  128. package/esm/utils/json-schema-2-amis-schema.js +1 -1
  129. package/esm/utils/keyToPath.js +1 -1
  130. package/esm/utils/labelToString.js +4 -1
  131. package/esm/utils/makeSorter.js +1 -1
  132. package/esm/utils/math.js +1 -1
  133. package/esm/utils/memoryParse.d.ts +2 -1
  134. package/esm/utils/memoryParse.js +10 -6
  135. package/esm/utils/normalizeLink.js +1 -1
  136. package/esm/utils/normalizeOptions.js +1 -1
  137. package/esm/utils/object.d.ts +2 -4
  138. package/esm/utils/object.js +1 -1
  139. package/esm/utils/offset.js +1 -1
  140. package/esm/utils/offsetParent.js +1 -1
  141. package/esm/utils/optionValueCompare.js +1 -1
  142. package/esm/utils/position.js +1 -1
  143. package/esm/utils/prettyBytes.js +1 -1
  144. package/esm/utils/printElement.js +1 -1
  145. package/esm/utils/renderer-event.js +1 -1
  146. package/esm/utils/replaceText.js +1 -1
  147. package/esm/utils/resize-sensor.js +30 -1
  148. package/esm/utils/resolveCondition.js +2 -1
  149. package/esm/utils/resolveVariable.js +1 -1
  150. package/esm/utils/resolveVariableAndFilter.js +1 -1
  151. package/esm/utils/resolveVariableAndFilterForAsync.js +1 -1
  152. package/esm/utils/scrollPosition.js +1 -1
  153. package/esm/utils/string2regExp.js +1 -1
  154. package/esm/utils/stripNumber.js +1 -1
  155. package/esm/utils/style-helper.js +1 -1
  156. package/esm/utils/style.js +2 -1
  157. package/esm/utils/toNumber.js +1 -1
  158. package/esm/utils/tokenize.js +1 -1
  159. package/esm/utils/tpl-builtin.js +2 -1
  160. package/esm/utils/tpl-lodash.js +2 -1
  161. package/esm/utils/tpl.js +1 -1
  162. package/esm/utils/uncontrollable.js +1 -1
  163. package/esm/utils/validateId.js +1 -1
  164. package/esm/utils/validations.js +2 -1
  165. package/esm/utils/visitedCache.d.ts +46 -0
  166. package/esm/utils/visitedCache.js +124 -0
  167. package/lib/Root.js +1 -1
  168. package/lib/RootRenderer.js +23 -1
  169. package/lib/SchemaRenderer.d.ts +0 -1
  170. package/lib/SchemaRenderer.js +42 -18
  171. package/lib/Scoped.d.ts +1 -1
  172. package/lib/Scoped.js +2 -1
  173. package/lib/StatusScoped.js +1 -1
  174. package/lib/WithRootStore.js +1 -1
  175. package/lib/WithStore.js +14 -14
  176. package/lib/actions/Action.js +2 -1
  177. package/lib/actions/AjaxAction.js +1 -1
  178. package/lib/actions/BreakAction.js +1 -1
  179. package/lib/actions/BroadcastAction.js +1 -1
  180. package/lib/actions/CmptAction.js +56 -49
  181. package/lib/actions/ContinueAction.js +1 -1
  182. package/lib/actions/CopyAction.js +1 -1
  183. package/lib/actions/CustomAction.js +2 -1
  184. package/lib/actions/DialogAction.js +3 -1
  185. package/lib/actions/DrawerAction.js +2 -1
  186. package/lib/actions/EmailAction.js +1 -1
  187. package/lib/actions/EventAction.js +2 -1
  188. package/lib/actions/LinkAction.js +1 -1
  189. package/lib/actions/LoopAction.js +2 -1
  190. package/lib/actions/PageAction.js +1 -1
  191. package/lib/actions/ParallelAction.js +1 -1
  192. package/lib/actions/PrintAction.js +1 -1
  193. package/lib/actions/StatusAction.js +1 -1
  194. package/lib/actions/SwitchAction.js +1 -1
  195. package/lib/actions/ToastAction.js +2 -2
  196. package/lib/actions/WaitAction.js +1 -1
  197. package/lib/components/CustomStyle.js +1 -1
  198. package/lib/components/ErrorBoundary.js +1 -1
  199. package/lib/components/LazyComponent.d.ts +40 -2
  200. package/lib/components/LazyComponent.js +14 -7
  201. package/lib/components/Overlay.js +2 -1
  202. package/lib/components/PopOver.d.ts +1 -1
  203. package/lib/components/PopOver.js +2 -1
  204. package/lib/env.d.ts +0 -4
  205. package/lib/env.js +1 -1
  206. package/lib/envOverwrite.js +1 -1
  207. package/lib/factory.d.ts +19 -2
  208. package/lib/factory.js +211 -44
  209. package/lib/index.d.ts +4 -4
  210. package/lib/index.js +16 -2
  211. package/lib/locale.d.ts +1 -1
  212. package/lib/locale.js +14 -2
  213. package/lib/polyfills.js +1 -1
  214. package/lib/renderers/Form.d.ts +5 -5
  215. package/lib/renderers/Form.js +65 -26
  216. package/lib/renderers/Item.d.ts +110 -19
  217. package/lib/renderers/Item.js +163 -125
  218. package/lib/renderers/Options.d.ts +3 -3
  219. package/lib/renderers/Options.js +43 -19
  220. package/lib/renderers/Placeholder.js +1 -1
  221. package/lib/renderers/builtin.js +1 -1
  222. package/lib/renderers/register.js +1 -1
  223. package/lib/renderers/wrapControl.d.ts +3 -3
  224. package/lib/renderers/wrapControl.js +25 -10
  225. package/lib/store/app.d.ts +3 -3
  226. package/lib/store/app.js +2 -1
  227. package/lib/store/combo.d.ts +449 -40
  228. package/lib/store/combo.js +1 -1
  229. package/lib/store/crud.d.ts +3 -3
  230. package/lib/store/crud.js +3 -2
  231. package/lib/store/form.d.ts +188 -18
  232. package/lib/store/form.js +29 -6
  233. package/lib/store/formItem.d.ts +5 -0
  234. package/lib/store/formItem.js +32 -10
  235. package/lib/store/iRenderer.d.ts +4 -3
  236. package/lib/store/iRenderer.js +29 -4
  237. package/lib/store/index.d.ts +1 -0
  238. package/lib/store/index.js +3 -1
  239. package/lib/store/list.d.ts +3 -3
  240. package/lib/store/list.js +1 -1
  241. package/lib/store/manager.js +1 -1
  242. package/lib/store/modal.d.ts +3 -3
  243. package/lib/store/modal.js +1 -1
  244. package/lib/store/node.js +1 -1
  245. package/lib/store/pagination.d.ts +3 -3
  246. package/lib/store/pagination.js +2 -1
  247. package/lib/store/root.d.ts +5 -3
  248. package/lib/store/root.js +44 -19
  249. package/lib/store/service.d.ts +3 -3
  250. package/lib/store/service.js +11 -4
  251. package/lib/store/status.js +1 -1
  252. package/lib/store/table.d.ts +416 -57
  253. package/lib/store/table.js +84 -54
  254. package/lib/store/table2.d.ts +3 -3
  255. package/lib/store/table2.js +1 -1
  256. package/lib/theme.d.ts +1 -1
  257. package/lib/theme.js +13 -2
  258. package/lib/types.d.ts +19 -2
  259. package/lib/utils/Animation.js +1 -1
  260. package/lib/utils/ColorScale.js +1 -1
  261. package/lib/utils/DataSchema.js +1 -1
  262. package/lib/utils/DataScope.js +1 -1
  263. package/lib/utils/RootClose.js +1 -1
  264. package/lib/utils/SimpleMap.js +1 -1
  265. package/lib/utils/api.d.ts +21 -1
  266. package/lib/utils/api.js +141 -40
  267. package/lib/utils/arraySlice.js +1 -1
  268. package/lib/utils/attachmentAdpator.js +1 -1
  269. package/lib/utils/autobind.js +1 -1
  270. package/lib/utils/browser.js +1 -1
  271. package/lib/utils/columnsSplit.js +1 -1
  272. package/lib/utils/concatData.js +1 -1
  273. package/lib/utils/dataMapping.js +1 -1
  274. package/lib/utils/date.js +1 -1
  275. package/lib/utils/debug.js +18 -4
  276. package/lib/utils/decodeEntity.js +1 -1
  277. package/lib/utils/dom.js +1 -1
  278. package/lib/utils/errors.js +1 -1
  279. package/lib/utils/escapeHtml.js +1 -1
  280. package/lib/utils/filter-schema.js +1 -1
  281. package/lib/utils/filter.js +1 -1
  282. package/lib/utils/formatDuration.js +1 -1
  283. package/lib/utils/formula.js +2 -1
  284. package/lib/utils/getVariable.js +1 -1
  285. package/lib/utils/grammar.js +1 -1
  286. package/lib/utils/handleAction.js +1 -1
  287. package/lib/utils/helper.d.ts +4 -1
  288. package/lib/utils/helper.js +19 -3
  289. package/lib/utils/highlight.js +1 -1
  290. package/lib/utils/icon.js +1 -1
  291. package/lib/utils/image.js +1 -1
  292. package/lib/utils/isPureVariable.js +2 -2
  293. package/lib/utils/json-schema-2-amis-schema.js +1 -1
  294. package/lib/utils/keyToPath.js +1 -1
  295. package/lib/utils/labelToString.js +4 -1
  296. package/lib/utils/makeSorter.js +1 -1
  297. package/lib/utils/math.js +1 -1
  298. package/lib/utils/memoryParse.d.ts +2 -1
  299. package/lib/utils/memoryParse.js +10 -6
  300. package/lib/utils/normalizeLink.js +1 -1
  301. package/lib/utils/normalizeOptions.js +1 -1
  302. package/lib/utils/object.d.ts +2 -4
  303. package/lib/utils/object.js +1 -1
  304. package/lib/utils/offset.js +1 -1
  305. package/lib/utils/offsetParent.js +1 -1
  306. package/lib/utils/optionValueCompare.js +1 -1
  307. package/lib/utils/position.js +1 -1
  308. package/lib/utils/prettyBytes.js +1 -1
  309. package/lib/utils/printElement.js +1 -1
  310. package/lib/utils/renderer-event.js +1 -1
  311. package/lib/utils/replaceText.js +1 -1
  312. package/lib/utils/resize-sensor.js +30 -1
  313. package/lib/utils/resolveCondition.js +2 -1
  314. package/lib/utils/resolveVariable.js +1 -1
  315. package/lib/utils/resolveVariableAndFilter.js +1 -1
  316. package/lib/utils/resolveVariableAndFilterForAsync.js +1 -1
  317. package/lib/utils/scrollPosition.js +1 -1
  318. package/lib/utils/string2regExp.js +1 -1
  319. package/lib/utils/stripNumber.js +1 -1
  320. package/lib/utils/style-helper.js +1 -1
  321. package/lib/utils/style.js +2 -1
  322. package/lib/utils/toNumber.js +1 -1
  323. package/lib/utils/tokenize.js +1 -1
  324. package/lib/utils/tpl-builtin.js +2 -1
  325. package/lib/utils/tpl-lodash.js +2 -1
  326. package/lib/utils/tpl.js +1 -1
  327. package/lib/utils/uncontrollable.js +1 -1
  328. package/lib/utils/validateId.js +1 -1
  329. package/lib/utils/validations.js +2 -1
  330. package/lib/utils/visitedCache.d.ts +46 -0
  331. package/lib/utils/visitedCache.js +128 -0
  332. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-core v6.7.0
2
+ * amis-core v6.9.0-beta.0
3
3
  * Copyright 2018-2024 fex
4
4
  */
5
5
 
@@ -20,7 +20,7 @@ import '../utils/browser.js';
20
20
  import '../utils/ColorScale.js';
21
21
  import 'lodash/chunk';
22
22
  import { getVariable } from '../utils/getVariable.js';
23
- import { setVariable, createObject } from '../utils/object.js';
23
+ import { createObject, setVariable, createObjectFromChain } from '../utils/object.js';
24
24
  import { dataMapping } from '../utils/dataMapping.js';
25
25
  import '../utils/DataSchema.js';
26
26
  import '../utils/DataScope.js';
@@ -34,6 +34,7 @@ import '../utils/filter.js';
34
34
  import 'lodash/isObject';
35
35
  import 'lodash/isString';
36
36
  import 'lodash/isBoolean';
37
+ import '../utils/memoryParse.js';
37
38
  import '@rc-component/mini-decimal';
38
39
  import '../utils/image.js';
39
40
  import { keyToPath } from '../utils/keyToPath.js';
@@ -78,8 +79,7 @@ var FormItemWrap = /** @class */ (function (_super) {
78
79
  if (skipIfExits === void 0) { skipIfExits = false; }
79
80
  return __awaiter(_this, void 0, void 0, function () {
80
81
  var _a, autoFill, onBulkChange, formItem, data_1, itemName, ctx, result, e_1;
81
- var _b;
82
- var _c, _d;
82
+ var _b, _c, _d;
83
83
  return __generator(this, function (_e) {
84
84
  switch (_e.label) {
85
85
  case 0:
@@ -103,29 +103,22 @@ var FormItemWrap = /** @class */ (function (_super) {
103
103
  return [3 /*break*/, 3];
104
104
  case 1:
105
105
  itemName = formItem.name;
106
- ctx = createObject(data_1, (_b = {},
107
- _b[itemName || ''] = term,
108
- _b.__term = term,
109
- _b));
106
+ ctx = createObject(data_1, {
107
+ __term: term
108
+ });
109
+ setVariable(ctx, itemName, term);
110
110
  if (!(forceLoad ||
111
111
  (isEffectiveApi(autoFill.api, ctx) && this.lastSearchTerm !== term))) return [3 /*break*/, 3];
112
- return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_c = autoFill.api) === null || _c === void 0 ? void 0 : _c.silent))];
112
+ return [4 /*yield*/, formItem.loadAutoUpdateData(autoFill.api, ctx, !!((_b = autoFill.api) === null || _b === void 0 ? void 0 : _b.silent))];
113
113
  case 2:
114
114
  result = _e.sent();
115
115
  this.lastSearchTerm =
116
- (_d = (result && getVariable(result, itemName))) !== null && _d !== void 0 ? _d : term;
116
+ (_c = (result && getVariable(result, itemName))) !== null && _c !== void 0 ? _c : term;
117
117
  // 如果没有返回不应该处理
118
118
  if (!result) {
119
119
  return [2 /*return*/];
120
120
  }
121
- if (autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) {
122
- result = dataMapping(autoFill.fillMapping, result);
123
- }
124
- if (result) {
125
- // 不能把自己给清了吧
126
- setVariable(result, itemName, getVariable(result, itemName) || formItem.tmpValue);
127
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(result);
128
- }
121
+ this.applyMapping((_d = autoFill === null || autoFill === void 0 ? void 0 : autoFill.fillMapping) !== null && _d !== void 0 ? _d : { '&': '$$' }, result, false);
129
122
  _e.label = 3;
130
123
  case 3: return [3 /*break*/, 5];
131
124
  case 4:
@@ -140,15 +133,12 @@ var FormItemWrap = /** @class */ (function (_super) {
140
133
  trailing: true,
141
134
  leading: false
142
135
  });
143
- _this.state = {
144
- isOpened: false
145
- };
146
136
  var model = props.formItem, formInited = props.formInited, addHook = props.addHook, initAutoFill = props.initAutoFill;
147
137
  if (!model) {
148
138
  return _this;
149
139
  }
150
140
  _this.toDispose.push(reaction(function () {
151
- return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions));
141
+ return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen).concat(JSON.stringify(model.filteredOptions)).concat(model.popOverOpen);
152
142
  }, function () { return _this.forceUpdate(); }));
153
143
  var onInit = function () {
154
144
  var _a;
@@ -206,18 +196,26 @@ var FormItemWrap = /** @class */ (function (_super) {
206
196
  this.handleAutoFill('focus');
207
197
  };
208
198
  FormItemWrap.prototype.handleBlur = function (e) {
209
- var model = this.props.formItem;
199
+ var _a = this.props, model = _a.formItem, autoFill = _a.autoFill;
210
200
  model && model.blur();
211
201
  this.props.onBlur && this.props.onBlur(e);
202
+ if (!autoFill ||
203
+ (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('showSuggestion')))) {
204
+ return;
205
+ }
206
+ this.handleAutoFill('blur');
212
207
  };
213
208
  FormItemWrap.prototype.handleAutoFill = function (type) {
214
209
  var _this = this;
215
- var _a = this.props, autoFill = _a.autoFill; _a.onBulkChange; var formItem = _a.formItem, data = _a.data;
210
+ var _a = this.props, autoFill = _a.autoFill, formItem = _a.formItem, data = _a.data;
216
211
  var trigger = autoFill.trigger, mode = autoFill.mode;
217
212
  if (trigger === type && mode === 'popOver') {
218
213
  // 参照录入 popOver形式
219
- this.setState({
220
- isOpened: true
214
+ formItem === null || formItem === void 0 ? void 0 : formItem.openPopOver(this.buildAutoFillSchema(), data, function (confirmed, result) {
215
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
216
+ return;
217
+ }
218
+ _this.updateAutoFillData(result.selectedItems);
221
219
  });
222
220
  }
223
221
  else if (
@@ -225,7 +223,7 @@ var FormItemWrap = /** @class */ (function (_super) {
225
223
  trigger === type &&
226
224
  (mode === 'dialog' || mode === 'drawer')) {
227
225
  formItem === null || formItem === void 0 ? void 0 : formItem.openDialog(this.buildAutoFillSchema(), data, function (confirmed, result) {
228
- if (!(result === null || result === void 0 ? void 0 : result.selectedItems)) {
226
+ if (!confirmed || !(result === null || result === void 0 ? void 0 : result.selectedItems)) {
229
227
  return;
230
228
  }
231
229
  _this.updateAutoFillData(result.selectedItems);
@@ -233,17 +231,21 @@ var FormItemWrap = /** @class */ (function (_super) {
233
231
  }
234
232
  };
235
233
  FormItemWrap.prototype.updateAutoFillData = function (context) {
236
- var _a = this.props, formStore = _a.formStore, autoFill = _a.autoFill, onBulkChange = _a.onBulkChange;
237
- var fillMapping = autoFill.fillMapping, multiple = autoFill.multiple;
234
+ var _a = this.props, data = _a.data, autoFill = _a.autoFill; _a.onBulkChange;
235
+ var fillMapping = autoFill.fillMapping; autoFill.multiple;
238
236
  // form原始数据
239
- var data = formStore === null || formStore === void 0 ? void 0 : formStore.data;
240
- var contextData = createObject(__assign({ items: !multiple ? [context] : context }, data), __assign({}, context));
241
- var responseData = {};
242
- responseData = dataMapping(fillMapping, contextData);
243
- if (!multiple && !fillMapping) {
244
- responseData = context;
245
- }
246
- onBulkChange === null || onBulkChange === void 0 ? void 0 : onBulkChange(responseData);
237
+ var contextData = Array.isArray(context)
238
+ ? createObject(data, {
239
+ items: context
240
+ })
241
+ : createObjectFromChain([
242
+ data,
243
+ {
244
+ items: [context]
245
+ },
246
+ context
247
+ ]);
248
+ this.applyMapping(fillMapping !== null && fillMapping !== void 0 ? fillMapping : {}, contextData, false);
247
249
  };
248
250
  FormItemWrap.prototype.syncOptionAutoFill = function (selectedOptions, skipIfExits) {
249
251
  if (skipIfExits === void 0) { skipIfExits = false; }
@@ -257,83 +259,106 @@ var FormItemWrap = /** @class */ (function (_super) {
257
259
  autoFill &&
258
260
  !isEmpty(autoFill) &&
259
261
  formItem.filteredOptions.length) {
260
- var toSync_1 = dataMapping(autoFill, multiple
262
+ this.applyMapping(autoFill, multiple
261
263
  ? {
262
264
  items: selectedOptions.map(function (item) {
263
265
  return createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, item, true) }), item);
264
266
  })
265
267
  }
266
- : createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]));
267
- var tmpData_1 = __assign({}, data);
268
- var result_1 = __assign({}, toSync_1);
269
- Object.keys(autoFill).forEach(function (key) {
270
- var keys = keyToPath(key);
271
- var value = getVariable(toSync_1, key);
272
- if (skipIfExits) {
273
- var originValue = getVariable(data, key);
274
- if (typeof originValue !== 'undefined') {
275
- value = originValue;
276
- }
277
- }
278
- setVariable(result_1, key, value);
279
- // 如果左边的 key 是一个路径
280
- // 这里不希望直接把原始对象都给覆盖没了
281
- // 而是保留原始的对象,只修改指定的属性
282
- if (keys.length > 1 && isPlainObject(tmpData_1[keys[0]])) {
283
- // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 和 a.b.c2,所以需要同步更新data
284
- setVariable(tmpData_1, key, value);
285
- result_1[keys[0]] = tmpData_1[keys[0]];
286
- }
287
- });
288
- onBulkChange(result_1);
268
+ : createObject(__assign(__assign({}, data), { ancestors: getTreeAncestors(formItem.filteredOptions, selectedOptions[0], true) }), selectedOptions[0]), skipIfExits);
289
269
  }
290
270
  };
271
+ /**
272
+ * 应用映射函数,根据给定的映射关系,更新数据对象
273
+ *
274
+ * @param mapping 映射关系,类型为任意类型
275
+ * @param ctx 上下文对象,类型为任意类型
276
+ * @param skipIfExits 是否跳过已存在的属性,默认为 false
277
+ */
278
+ FormItemWrap.prototype.applyMapping = function (mapping, ctx, skipIfExits) {
279
+ if (skipIfExits === void 0) { skipIfExits = false; }
280
+ var _a = this.props, onBulkChange = _a.onBulkChange, data = _a.data; _a.formItem;
281
+ var toSync = dataMapping(mapping, ctx);
282
+ var tmpData = __assign({}, data);
283
+ var result = __assign({}, toSync);
284
+ Object.keys(mapping).forEach(function (key) {
285
+ if (key === '&') {
286
+ return;
287
+ }
288
+ var keys = keyToPath(key);
289
+ var value = getVariable(toSync, key);
290
+ if (skipIfExits) {
291
+ var originValue = getVariable(data, key);
292
+ if (typeof originValue !== 'undefined') {
293
+ value = originValue;
294
+ }
295
+ }
296
+ setVariable(result, key, value);
297
+ // 如果左边的 key 是一个路径
298
+ // 这里不希望直接把原始对象都给覆盖没了
299
+ // 而是保留原始的对象,只修改指定的属性
300
+ if (keys.length > 1 && isPlainObject(tmpData[keys[0]])) {
301
+ // 存在情况:依次更新同一子路径的多个key,eg: a.b.c1 和 a.b.c2,所以需要同步更新data
302
+ setVariable(tmpData, key, value);
303
+ result[keys[0]] = tmpData[keys[0]];
304
+ }
305
+ });
306
+ // 是否忽略自己的设置
307
+ // if (ignoreSelf && formItem?.name) {
308
+ // deleteVariable(result, formItem.name);
309
+ // }
310
+ onBulkChange(result);
311
+ };
291
312
  FormItemWrap.prototype.buildAutoFillSchema = function () {
292
- var _this = this;
293
- var _a = this.props, render = _a.render, autoFill = _a.autoFill, ns = _a.classPrefix, cx = _a.classnames, __ = _a.translate;
313
+ var _a = this.props; _a.formItem; var autoFill = _a.autoFill, __ = _a.translate;
294
314
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
295
315
  return;
296
316
  }
297
- var api = autoFill.api, mode = autoFill.mode, size = autoFill.size, offset = autoFill.offset, position = autoFill.position, multiple = autoFill.multiple, filter = autoFill.filter, columns = autoFill.columns, labelField = autoFill.labelField, popOverContainer = autoFill.popOverContainer, popOverClassName = autoFill.popOverClassName, valueField = autoFill.valueField;
317
+ var api = autoFill.api, mode = autoFill.mode, size = autoFill.size, offset = autoFill.offset, position = autoFill.position, placement = autoFill.placement, multiple = autoFill.multiple, filter = autoFill.filter, columns = autoFill.columns, labelField = autoFill.labelField, popOverContainer = autoFill.popOverContainer, popOverClassName = autoFill.popOverClassName, valueField = autoFill.valueField, defaultSelection = autoFill.defaultSelection;
298
318
  var form = {
299
319
  type: 'form',
300
320
  // debug: true,
301
321
  title: '',
302
322
  className: 'suggestion-form',
303
- body: {
304
- type: 'picker',
305
- embed: true,
306
- joinValues: false,
307
- label: false,
308
- labelField: labelField,
309
- valueField: valueField || 'value',
310
- multiple: multiple,
311
- name: 'selectedItems',
312
- options: [],
313
- required: true,
314
- source: api,
315
- pickerSchema: {
316
- type: 'crud',
317
- affixHeader: false,
318
- alwaysShowPagination: true,
319
- keepItemSelectionOnPageChange: true,
320
- headerToolbar: [],
321
- footerToolbar: [
322
- {
323
- type: 'pagination',
324
- align: 'left'
325
- },
326
- {
327
- type: 'bulkActions',
328
- align: 'right',
329
- className: 'ml-2'
330
- }
331
- ],
323
+ body: [
324
+ {
325
+ type: 'picker',
326
+ embed: true,
327
+ joinValues: false,
328
+ strictMode: false,
329
+ label: false,
330
+ labelField: labelField,
331
+ valueField: valueField || 'value',
332
332
  multiple: multiple,
333
- filter: filter,
334
- columns: columns || []
333
+ name: 'selectedItems',
334
+ value: defaultSelection || [],
335
+ options: [],
336
+ required: true,
337
+ source: api,
338
+ pickerSchema: {
339
+ type: 'crud',
340
+ bodyClassName: 'mb-0',
341
+ affixHeader: false,
342
+ alwaysShowPagination: true,
343
+ keepItemSelectionOnPageChange: true,
344
+ headerToolbar: [],
345
+ footerToolbar: [
346
+ {
347
+ type: 'pagination',
348
+ align: 'left'
349
+ },
350
+ {
351
+ type: 'bulkActions',
352
+ align: 'right',
353
+ className: 'ml-2'
354
+ }
355
+ ],
356
+ multiple: multiple,
357
+ filter: filter,
358
+ columns: columns || []
359
+ }
335
360
  }
336
- },
361
+ ],
337
362
  actions: [
338
363
  {
339
364
  type: 'button',
@@ -349,13 +374,13 @@ var FormItemWrap = /** @class */ (function (_super) {
349
374
  ]
350
375
  };
351
376
  if (mode === 'popOver') {
352
- return (React.createElement(Overlay, { container: popOverContainer || this.target, target: function () { return _this.target; }, placement: position || 'left-bottom-left-top', show: true },
353
- React.createElement(PopOver, { classPrefix: ns, className: cx("".concat(ns, "Autofill-popOver"), popOverClassName), style: {
354
- minWidth: this.target ? this.target.offsetWidth : undefined
355
- }, offset: offset, onHide: this.handleClose, overlay: true }, render('popOver-auto-fill-form', form, {
356
- onAction: this.handleAction,
357
- onSubmit: this.handleSubmit
358
- }))));
377
+ return {
378
+ popOverContainer: popOverContainer,
379
+ popOverClassName: popOverClassName,
380
+ placement: placement !== null && placement !== void 0 ? placement : position,
381
+ offset: offset,
382
+ body: form
383
+ };
359
384
  }
360
385
  else {
361
386
  return {
@@ -381,23 +406,28 @@ var FormItemWrap = /** @class */ (function (_super) {
381
406
  }
382
407
  };
383
408
  // 参照录入popOver提交
384
- FormItemWrap.prototype.handleSubmit = function (values) {
409
+ FormItemWrap.prototype.handlePopOverConfirm = function (values) {
385
410
  var _a = this.props; _a.onBulkChange; var autoFill = _a.autoFill;
386
411
  if (!autoFill || (autoFill && !(autoFill === null || autoFill === void 0 ? void 0 : autoFill.hasOwnProperty('api')))) {
387
412
  return;
388
413
  }
389
414
  this.updateAutoFillData(values.selectedItems);
390
- this.handleClose();
415
+ this.closePopOver();
391
416
  };
392
- FormItemWrap.prototype.handleAction = function (e, action, data) {
417
+ FormItemWrap.prototype.handlePopOverAction = function (e, action, data, throwErrors, delegate) {
418
+ if (throwErrors === void 0) { throwErrors = false; }
419
+ var onAction = this.props.onAction;
393
420
  if (action.actionType === 'cancel') {
394
- this.handleClose();
421
+ this.closePopOver();
422
+ }
423
+ else if (onAction) {
424
+ // 不识别的丢给上层去处理。
425
+ return onAction(e, action, data, throwErrors, delegate);
395
426
  }
396
427
  };
397
- FormItemWrap.prototype.handleClose = function () {
398
- this.setState({
399
- isOpened: false
400
- });
428
+ FormItemWrap.prototype.closePopOver = function () {
429
+ var _a;
430
+ (_a = this.props.formItem) === null || _a === void 0 ? void 0 : _a.closePopOver();
401
431
  };
402
432
  FormItemWrap.prototype.handleOpenDialog = function (schema, data) {
403
433
  return __awaiter(this, void 0, void 0, function () {
@@ -452,7 +482,9 @@ var FormItemWrap = /** @class */ (function (_super) {
452
482
  return null;
453
483
  };
454
484
  FormItemWrap.prototype.render = function () {
455
- var _a = this.props, formMode = _a.formMode, inputOnly = _a.inputOnly, wrap = _a.wrap, render = _a.render, model = _a.formItem, css = _a.css, themeCss = _a.themeCss, id = _a.id, wrapperCustomStyle = _a.wrapperCustomStyle, env = _a.env, cx = _a.classnames;
485
+ var _this = this;
486
+ var _a, _b, _c, _d;
487
+ var _e = this.props, formMode = _e.formMode, inputOnly = _e.inputOnly, wrap = _e.wrap, render = _e.render, model = _e.formItem, css = _e.css, themeCss = _e.themeCss, id = _e.id, wrapperCustomStyle = _e.wrapperCustomStyle, env = _e.env, cx = _e.classnames, popOverContainer = _e.popOverContainer; _e.data;
456
488
  var mode = this.props.mode || formMode;
457
489
  if (wrap === false || inputOnly) {
458
490
  return this.renderControl();
@@ -470,6 +502,14 @@ var FormItemWrap = /** @class */ (function (_super) {
470
502
  formStore: undefined
471
503
  })
472
504
  : null,
505
+ model ? (React.createElement(Overlay, { container: popOverContainer || this.target, target: function () { return _this.target; }, placement: ((_a = model.popOverSchema) === null || _a === void 0 ? void 0 : _a.placement) || 'left-bottom-left-top', show: model.popOverOpen },
506
+ React.createElement(PopOver, { className: cx("Autofill-popOver", (_b = model.popOverSchema) === null || _b === void 0 ? void 0 : _b.popOverClassName), style: {
507
+ minWidth: this.target ? this.target.offsetWidth : undefined
508
+ }, offset: (_c = model.popOverSchema) === null || _c === void 0 ? void 0 : _c.offset, onHide: this.closePopOver }, render('popOver-auto-fill-form', (_d = model.popOverSchema) === null || _d === void 0 ? void 0 : _d.body, {
509
+ // data: model.popOverData,
510
+ onAction: this.handlePopOverAction,
511
+ onSubmit: this.handlePopOverConfirm
512
+ })))) : null,
473
513
  React.createElement(CustomStyle, __assign({}, this.props, { config: {
474
514
  themeCss: themeCss || css,
475
515
  classNames: [
@@ -508,7 +548,7 @@ var FormItemWrap = /** @class */ (function (_super) {
508
548
  var labelAlign = (props.labelAlign !== 'inherit' && props.labelAlign) ||
509
549
  props.formLabelAlign;
510
550
  var labelWidth = props.labelWidth || props.formLabelWidth;
511
- return (React.createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--horizontal", isStatic && staticClassName ? staticClassName : className, (_a = {
551
+ return (React.createElement("div", { "data-role": "form-item", "data-amis-name": props.name, className: cx("Form-item Form-item--horizontal", isStatic && staticClassName ? staticClassName : className, (_a = {
512
552
  'Form-item--horizontal-justify': horizontal.justify
513
553
  },
514
554
  _a["is-error"] = model && !model.valid,
@@ -574,7 +614,7 @@ var FormItemWrap = /** @class */ (function (_super) {
574
614
  var _a;
575
615
  var className = props.className, style = props.style, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, render = props.render, required = props.required, caption = props.caption, remark = props.remark, labelRemark = props.labelRemark, env = props.env, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, renderLabel = props.renderLabel, renderDescription = props.renderDescription, hint = props.hint; props.data; var showErrorMsg = props.showErrorMsg, mobileUI = props.mobileUI; props.translate; var isStatic = props.static, staticClassName = props.staticClassName, themeCss = props.themeCss, wrapperCustomStyle = props.wrapperCustomStyle, id = props.id;
576
616
  description = description || desc;
577
- return (React.createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--normal", isStatic && staticClassName ? staticClassName : className, (_a = {
617
+ return (React.createElement("div", { "data-role": "form-item", "data-amis-name": props.name, className: cx("Form-item Form-item--normal", isStatic && staticClassName ? staticClassName : className, (_a = {
578
618
  'is-error': model && !model.valid
579
619
  },
580
620
  _a["is-required"] = required,
@@ -660,7 +700,7 @@ var FormItemWrap = /** @class */ (function (_super) {
660
700
  var className = props.className, style = props.style, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, render = props.render, required = props.required, caption = props.caption, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, remark = props.remark, labelRemark = props.labelRemark, env = props.env, hint = props.hint, renderLabel = props.renderLabel, renderDescription = props.renderDescription; props.data; var showErrorMsg = props.showErrorMsg, mobileUI = props.mobileUI; props.translate; var isStatic = props.static, staticClassName = props.staticClassName, themeCss = props.themeCss, wrapperCustomStyle = props.wrapperCustomStyle, id = props.id;
661
701
  var labelWidth = props.labelWidth || props.formLabelWidth;
662
702
  description = description || desc;
663
- return (React.createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--inline", isStatic && staticClassName ? staticClassName : className, (_a = {
703
+ return (React.createElement("div", { "data-role": "form-item", "data-amis-name": props.name, className: cx("Form-item Form-item--inline", isStatic && staticClassName ? staticClassName : className, (_a = {
664
704
  'is-error': model && !model.valid
665
705
  },
666
706
  _a["is-required"] = required,
@@ -716,7 +756,7 @@ var FormItemWrap = /** @class */ (function (_super) {
716
756
  var className = props.className, style = props.style, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, render = props.render, required = props.required, caption = props.caption, remark = props.remark, labelRemark = props.labelRemark, env = props.env, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, renderLabel = props.renderLabel, renderDescription = props.renderDescription, hint = props.hint; props.data; var showErrorMsg = props.showErrorMsg, mobileUI = props.mobileUI; props.translate; var isStatic = props.static, staticClassName = props.staticClassName, wrapperCustomStyle = props.wrapperCustomStyle, themeCss = props.themeCss, id = props.id;
717
757
  description = description || desc;
718
758
  var labelWidth = props.labelWidth || props.formLabelWidth;
719
- return (React.createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--row", isStatic && staticClassName ? staticClassName : className, (_a = {
759
+ return (React.createElement("div", { "data-role": "form-item", "data-amis-name": props.name, className: cx("Form-item Form-item--row", isStatic && staticClassName ? staticClassName : className, (_a = {
720
760
  'is-error': model && !model.valid
721
761
  },
722
762
  _a["is-required"] = required,
@@ -773,7 +813,7 @@ var FormItemWrap = /** @class */ (function (_super) {
773
813
  props.formLabelAlign;
774
814
  var labelWidth = props.labelWidth || props.formLabelWidth;
775
815
  description = description || desc;
776
- return (React.createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--flex", isStatic && staticClassName ? staticClassName : className, (_a = {
816
+ return (React.createElement("div", { "data-role": "form-item", "data-amis-name": props.name, className: cx("Form-item Form-item--flex", isStatic && staticClassName ? staticClassName : className, (_a = {
777
817
  'is-error': model && !model.valid
778
818
  },
779
819
  _a["is-required"] = required,
@@ -844,19 +884,19 @@ var FormItemWrap = /** @class */ (function (_super) {
844
884
  __metadata("design:type", Function),
845
885
  __metadata("design:paramtypes", [Object]),
846
886
  __metadata("design:returntype", void 0)
847
- ], FormItemWrap.prototype, "handleSubmit", null);
887
+ ], FormItemWrap.prototype, "handlePopOverConfirm", null);
848
888
  __decorate([
849
889
  autobind,
850
890
  __metadata("design:type", Function),
851
- __metadata("design:paramtypes", [Object, Object, Object]),
891
+ __metadata("design:paramtypes", [Object, Object, Object, Boolean, Object]),
852
892
  __metadata("design:returntype", void 0)
853
- ], FormItemWrap.prototype, "handleAction", null);
893
+ ], FormItemWrap.prototype, "handlePopOverAction", null);
854
894
  __decorate([
855
895
  autobind,
856
896
  __metadata("design:type", Function),
857
897
  __metadata("design:paramtypes", []),
858
898
  __metadata("design:returntype", void 0)
859
- ], FormItemWrap.prototype, "handleClose", null);
899
+ ], FormItemWrap.prototype, "closePopOver", null);
860
900
  __decorate([
861
901
  autobind,
862
902
  __metadata("design:type", Function),
@@ -1023,8 +1063,6 @@ function asFormItem(config) {
1023
1063
  _b.inputClassName; var model = _b.formItem, cx = _b.classnames; _b.children; var type = _b.type, size = _b.size, defaultSize = _b.defaultSize, mobileUI = _b.mobileUI, rest = __rest(_b, ["inputClassName", "formItem", "classnames", "children", "type", "size", "defaultSize", "mobileUI"]);
1024
1064
  var isRuleSize = size && ['xs', 'sm', 'md', 'lg', 'full'].includes(size);
1025
1065
  var controlSize = isRuleSize ? size : defaultSize;
1026
- //@ts-ignore
1027
- var isOpened = this.state.isOpened;
1028
1066
  return (React.createElement(React.Fragment, null,
1029
1067
  React.createElement(Control, __assign({}, rest, {
1030
1068
  // 因为 formItem 内部可能不会更新到最新的 data,所以暴露个方法可以获取到最新的
@@ -1034,14 +1072,14 @@ function asFormItem(config) {
1034
1072
  }, className: cx("Form-control", (_a = {
1035
1073
  'is-inline': !!rest.inline && !mobileUI,
1036
1074
  'is-error': model && !model.valid,
1037
- 'is-full': size === 'full'
1075
+ 'is-full': size === 'full',
1076
+ 'is-thin': config.thin
1038
1077
  },
1039
1078
  _a["Form-control--withSize Form-control--size".concat(ucFirst(controlSize))] = config.sizeMutable !== false &&
1040
1079
  typeof controlSize === 'string' &&
1041
1080
  !!controlSize &&
1042
1081
  controlSize !== 'full',
1043
- _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) })),
1044
- isOpened ? this.buildAutoFillSchema() : null));
1082
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames, getItemInputClassName(this.props)) }))));
1045
1083
  };
1046
1084
  return class_1;
1047
1085
  }(FormItemWrap)),
@@ -138,9 +138,9 @@ export interface OptionsControlProps extends FormControlProps, Omit<FormOptionsC
138
138
  deferLoad: (option: Option) => void;
139
139
  leftDeferLoad: (option: Option, leftOptions: Option) => void;
140
140
  expandTreeOptions: (nodePathArr: any[]) => void;
141
- onAdd?: (idx?: number | Array<number>, value?: any, skipForm?: boolean) => void;
142
- onEdit?: (value: Option, origin?: Option, skipForm?: boolean) => void;
143
- onDelete?: (value: Option) => void;
141
+ onAdd?: (idx?: number | Array<number>, value?: any, skipForm?: boolean, callback?: (value: any) => any) => void;
142
+ onEdit?: (value: Option, origin?: Option, skipForm?: boolean, callback?: (value: any) => any) => void;
143
+ onDelete?: (value: Option, callback?: (value: any) => any) => void;
144
144
  }
145
145
  export interface OptionsProps extends FormControlProps, Omit<OptionProps, 'className'> {
146
146
  source?: Api;