amis 1.4.2-beta.6 → 1.5.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 (488) hide show
  1. package/lib/Schema.d.ts +11 -3
  2. package/lib/Schema.js.map +1 -1
  3. package/lib/components/Alert2.d.ts +26 -21
  4. package/lib/components/Alert2.js +11 -4
  5. package/lib/components/Alert2.js.map +2 -2
  6. package/lib/components/AnchorNav.d.ts +22 -21
  7. package/lib/components/AnchorNav.js +7 -3
  8. package/lib/components/AnchorNav.js.map +2 -2
  9. package/lib/components/ArrayInput.d.ts +84 -84
  10. package/lib/components/AssociatedSelection.d.ts +930 -0
  11. package/lib/components/AssociatedSelection.js +89 -0
  12. package/lib/components/AssociatedSelection.js.map +13 -0
  13. package/lib/components/Badge.js +2 -2
  14. package/lib/components/Badge.js.map +2 -2
  15. package/lib/components/Button.js +1 -1
  16. package/lib/components/Button.js.map +2 -2
  17. package/lib/components/{ChainedCheckboxes.d.ts → ChainedSelection.d.ts} +267 -98
  18. package/lib/components/{ChainedCheckboxes.js → ChainedSelection.js} +30 -24
  19. package/lib/components/ChainedSelection.js.map +13 -0
  20. package/lib/components/Checkbox.d.ts +20 -20
  21. package/lib/components/Collapse.d.ts +51 -23
  22. package/lib/components/Collapse.js +70 -11
  23. package/lib/components/Collapse.js.map +2 -2
  24. package/lib/components/CollapseGroup.d.ts +88 -0
  25. package/lib/components/CollapseGroup.js +81 -0
  26. package/lib/components/CollapseGroup.js.map +13 -0
  27. package/lib/components/ColorPicker.d.ts +89 -85
  28. package/lib/components/ColorPicker.js +17 -4
  29. package/lib/components/ColorPicker.js.map +2 -2
  30. package/lib/components/DatePicker.d.ts +84 -84
  31. package/lib/components/DateRangePicker.d.ts +84 -84
  32. package/lib/components/Drawer.js +2 -2
  33. package/lib/components/Drawer.js.map +2 -2
  34. package/lib/components/Editor.d.ts +84 -84
  35. package/lib/components/GridNav.d.ts +52 -0
  36. package/lib/components/GridNav.js +123 -0
  37. package/lib/components/GridNav.js.map +13 -0
  38. package/lib/components/GroupedSelection.d.ts +907 -0
  39. package/lib/components/GroupedSelection.js +48 -0
  40. package/lib/components/GroupedSelection.js.map +13 -0
  41. package/lib/components/InputBox.d.ts +22 -21
  42. package/lib/components/InputBox.js +10 -2
  43. package/lib/components/InputBox.js.map +2 -2
  44. package/lib/components/Link.d.ts +29 -36
  45. package/lib/components/Link.js +14 -15
  46. package/lib/components/Link.js.map +2 -2
  47. package/lib/components/ListGroup.d.ts +21 -21
  48. package/lib/components/ModalManager.js +1 -1
  49. package/lib/components/ModalManager.js.map +2 -2
  50. package/lib/components/MonthRangePicker.d.ts +84 -84
  51. package/lib/components/NumberInput.d.ts +20 -20
  52. package/lib/components/Overlay.js +5 -0
  53. package/lib/components/Overlay.js.map +2 -2
  54. package/lib/components/PickerColumn.d.ts +514 -0
  55. package/lib/components/PickerColumn.js +279 -0
  56. package/lib/components/PickerColumn.js.map +13 -0
  57. package/lib/components/PickerContainer.d.ts +513 -0
  58. package/lib/components/PickerContainer.js +96 -0
  59. package/lib/components/PickerContainer.js.map +13 -0
  60. package/lib/components/PopOver.d.ts +1 -0
  61. package/lib/components/PopOver.js +12 -1
  62. package/lib/components/PopOver.js.map +2 -2
  63. package/lib/components/Progress.d.ts +85 -0
  64. package/lib/components/Progress.js +81 -0
  65. package/lib/components/Progress.js.map +13 -0
  66. package/lib/components/Radios.d.ts +22 -21
  67. package/lib/components/Radios.js +1 -0
  68. package/lib/components/Radios.js.map +2 -2
  69. package/lib/components/Rating.d.ts +21 -21
  70. package/lib/components/ResultBox.d.ts +84 -84
  71. package/lib/components/ResultBox.js +10 -2
  72. package/lib/components/ResultBox.js.map +2 -2
  73. package/lib/components/SearchBox.d.ts +84 -84
  74. package/lib/components/Select.d.ts +245 -237
  75. package/lib/components/Select.js +25 -4
  76. package/lib/components/Select.js.map +2 -2
  77. package/lib/components/{Checkboxes.d.ts → Selection.d.ts} +273 -98
  78. package/lib/components/Selection.js +134 -0
  79. package/lib/components/Selection.js.map +13 -0
  80. package/lib/components/{TableCheckboxes.d.ts → TableSelection.d.ts} +266 -96
  81. package/lib/components/{TableCheckboxes.js → TableSelection.js} +30 -30
  82. package/lib/components/TableSelection.js.map +13 -0
  83. package/lib/components/Tabs.d.ts +20 -20
  84. package/lib/components/TabsTransfer.d.ts +84 -84
  85. package/lib/components/TabsTransfer.js +9 -9
  86. package/lib/components/TabsTransfer.js.map +2 -2
  87. package/lib/components/TabsTransferPicker.d.ts +489 -0
  88. package/lib/components/TabsTransferPicker.js +60 -0
  89. package/lib/components/TabsTransferPicker.js.map +13 -0
  90. package/lib/components/Toast.d.ts +90 -87
  91. package/lib/components/Toast.js +15 -5
  92. package/lib/components/Toast.js.map +2 -2
  93. package/lib/components/Transfer.d.ts +908 -274
  94. package/lib/components/Transfer.js +31 -24
  95. package/lib/components/Transfer.js.map +2 -2
  96. package/lib/components/TransferDropDown.d.ts +488 -0
  97. package/lib/components/TransferDropDown.js +59 -0
  98. package/lib/components/TransferDropDown.js.map +13 -0
  99. package/lib/components/TransferPicker.d.ts +493 -0
  100. package/lib/components/TransferPicker.js +60 -0
  101. package/lib/components/TransferPicker.js.map +13 -0
  102. package/lib/components/Tree.d.ts +115 -84
  103. package/lib/components/Tree.js +183 -30
  104. package/lib/components/Tree.js.map +2 -2
  105. package/lib/components/{TreeCheckboxes.d.ts → TreeSelection.d.ts} +269 -99
  106. package/lib/components/{TreeCheckboxes.js → TreeSelection.js} +36 -32
  107. package/lib/components/TreeSelection.js.map +13 -0
  108. package/lib/components/condition-builder/Field.js +4 -2
  109. package/lib/components/condition-builder/Field.js.map +2 -2
  110. package/lib/components/condition-builder/Func.js +2 -2
  111. package/lib/components/condition-builder/Func.js.map +2 -2
  112. package/lib/components/condition-builder/InputSwitch.js +2 -2
  113. package/lib/components/condition-builder/InputSwitch.js.map +2 -2
  114. package/lib/components/condition-builder/Item.js +3 -3
  115. package/lib/components/condition-builder/Item.js.map +2 -2
  116. package/lib/components/icons.js +10 -0
  117. package/lib/components/icons.js.map +2 -2
  118. package/lib/components/index.d.ts +8 -8
  119. package/lib/components/index.js +16 -16
  120. package/lib/components/index.js.map +2 -2
  121. package/lib/envOverwrite.d.ts +1 -1
  122. package/lib/envOverwrite.js +24 -9
  123. package/lib/envOverwrite.js.map +2 -2
  124. package/lib/factory.d.ts +15 -1
  125. package/lib/factory.js +35 -6
  126. package/lib/factory.js.map +2 -2
  127. package/lib/helper.css.map +1 -1
  128. package/lib/hooks/index.d.ts +5 -0
  129. package/lib/hooks/index.js +14 -0
  130. package/lib/hooks/index.js.map +13 -0
  131. package/lib/hooks/use-set-state.d.ts +2 -0
  132. package/lib/hooks/use-set-state.js +15 -0
  133. package/lib/hooks/use-set-state.js.map +13 -0
  134. package/lib/hooks/use-touch.d.ts +16 -0
  135. package/lib/hooks/use-touch.js +73 -0
  136. package/lib/hooks/use-touch.js.map +13 -0
  137. package/lib/hooks/use-update-effect.d.ts +3 -0
  138. package/lib/hooks/use-update-effect.js +17 -0
  139. package/lib/hooks/use-update-effect.js.map +13 -0
  140. package/lib/icons/alert-danger.js +7 -0
  141. package/lib/icons/alert-info.js +7 -0
  142. package/lib/icons/alert-success.js +7 -0
  143. package/lib/icons/alert-warning.js +7 -0
  144. package/lib/icons/download.js +7 -0
  145. package/lib/icons/drag-bar.js +10 -3
  146. package/lib/index.d.ts +5 -0
  147. package/lib/index.js +6 -1
  148. package/lib/index.js.map +2 -2
  149. package/lib/locale/de-DE.js +2 -0
  150. package/lib/locale/de-DE.js.map +2 -2
  151. package/lib/locale/en-US.js +3 -0
  152. package/lib/locale/en-US.js.map +2 -2
  153. package/lib/locale/zh-CN.js +5 -2
  154. package/lib/locale/zh-CN.js.map +2 -2
  155. package/lib/renderers/Action.d.ts +10 -5
  156. package/lib/renderers/Action.js +23 -5
  157. package/lib/renderers/Action.js.map +2 -2
  158. package/lib/renderers/Alert.d.ts +21 -1
  159. package/lib/renderers/Alert.js.map +2 -2
  160. package/lib/renderers/AnchorNav.d.ts +1 -0
  161. package/lib/renderers/AnchorNav.js +2 -2
  162. package/lib/renderers/AnchorNav.js.map +2 -2
  163. package/lib/renderers/Avatar.js +3 -3
  164. package/lib/renderers/Avatar.js.map +2 -2
  165. package/lib/renderers/Breadcrumb.js +1 -1
  166. package/lib/renderers/Breadcrumb.js.map +2 -2
  167. package/lib/renderers/CRUD.d.ts +5 -0
  168. package/lib/renderers/CRUD.js +25 -4
  169. package/lib/renderers/CRUD.js.map +2 -2
  170. package/lib/renderers/Card.d.ts +5 -0
  171. package/lib/renderers/Card.js +34 -23
  172. package/lib/renderers/Card.js.map +2 -2
  173. package/lib/renderers/Collapse.d.ts +25 -20
  174. package/lib/renderers/Collapse.js +10 -72
  175. package/lib/renderers/Collapse.js.map +2 -2
  176. package/lib/renderers/CollapseGroup.d.ts +42 -0
  177. package/lib/renderers/CollapseGroup.js +33 -0
  178. package/lib/renderers/CollapseGroup.js.map +13 -0
  179. package/lib/renderers/Form/ConditionBuilder.js +2 -2
  180. package/lib/renderers/Form/ConditionBuilder.js.map +2 -2
  181. package/lib/renderers/Form/DiffEditor.d.ts +4 -3
  182. package/lib/renderers/Form/Editor.d.ts +3 -2
  183. package/lib/renderers/Form/InputCity.d.ts +84 -84
  184. package/lib/renderers/Form/InputCity.js +7 -6
  185. package/lib/renderers/Form/InputCity.js.map +2 -2
  186. package/lib/renderers/Form/InputColor.d.ts +86 -85
  187. package/lib/renderers/Form/InputColor.js +1 -1
  188. package/lib/renderers/Form/InputColor.js.map +2 -2
  189. package/lib/renderers/Form/InputFile.d.ts +6 -0
  190. package/lib/renderers/Form/InputFile.js +28 -8
  191. package/lib/renderers/Form/InputFile.js.map +2 -2
  192. package/lib/renderers/Form/InputImage.js +11 -4
  193. package/lib/renderers/Form/InputImage.js.map +2 -2
  194. package/lib/renderers/Form/Item.d.ts +1 -1
  195. package/lib/renderers/Form/Item.js +2 -1
  196. package/lib/renderers/Form/Item.js.map +2 -2
  197. package/lib/renderers/Form/Options.js +25 -4
  198. package/lib/renderers/Form/Options.js.map +2 -2
  199. package/lib/renderers/Form/Select.d.ts +42 -4
  200. package/lib/renderers/Form/Select.js +37 -3
  201. package/lib/renderers/Form/Select.js.map +2 -2
  202. package/lib/renderers/Form/TabsTransferPicker.d.ts +48 -0
  203. package/lib/renderers/Form/TabsTransferPicker.js +29 -0
  204. package/lib/renderers/Form/TabsTransferPicker.js.map +13 -0
  205. package/lib/renderers/Form/Transfer.js +18 -3
  206. package/lib/renderers/Form/Transfer.js.map +2 -2
  207. package/lib/renderers/Form/TransferPicker.d.ts +52 -0
  208. package/lib/renderers/Form/TransferPicker.js +43 -0
  209. package/lib/renderers/Form/TransferPicker.js.map +13 -0
  210. package/lib/renderers/Form/TreeSelect.js +2 -2
  211. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  212. package/lib/renderers/Form/index.d.ts +5 -0
  213. package/lib/renderers/Form/index.js +5 -3
  214. package/lib/renderers/Form/index.js.map +2 -2
  215. package/lib/renderers/Form/wrapControl.js +13 -1
  216. package/lib/renderers/Form/wrapControl.js.map +2 -2
  217. package/lib/renderers/GridNav.d.ts +99 -0
  218. package/lib/renderers/GridNav.js +82 -0
  219. package/lib/renderers/GridNav.js.map +13 -0
  220. package/lib/renderers/IFrame.js +1 -3
  221. package/lib/renderers/IFrame.js.map +2 -2
  222. package/lib/renderers/Image.js +7 -5
  223. package/lib/renderers/Image.js.map +2 -2
  224. package/lib/renderers/Json.d.ts +4 -0
  225. package/lib/renderers/Json.js +4 -13
  226. package/lib/renderers/Json.js.map +2 -2
  227. package/lib/renderers/Link.d.ts +4 -2
  228. package/lib/renderers/Link.js +15 -8
  229. package/lib/renderers/Link.js.map +2 -2
  230. package/lib/renderers/List.js +1 -1
  231. package/lib/renderers/List.js.map +2 -2
  232. package/lib/renderers/Nav.d.ts +21 -21
  233. package/lib/renderers/Nav.js +37 -19
  234. package/lib/renderers/Nav.js.map +2 -2
  235. package/lib/renderers/Page.d.ts +18 -0
  236. package/lib/renderers/Page.js +53 -9
  237. package/lib/renderers/Page.js.map +2 -2
  238. package/lib/renderers/Portlet.d.ts +125 -0
  239. package/lib/renderers/Portlet.js +156 -0
  240. package/lib/renderers/Portlet.js.map +13 -0
  241. package/lib/renderers/Progress.d.ts +23 -3
  242. package/lib/renderers/Progress.js +15 -19
  243. package/lib/renderers/Progress.js.map +2 -2
  244. package/lib/renderers/Property.js +1 -1
  245. package/lib/renderers/Property.js.map +2 -2
  246. package/lib/renderers/Table/ColumnToggler.js +1 -1
  247. package/lib/renderers/Table/ColumnToggler.js.map +2 -2
  248. package/lib/renderers/Table/TableContent.d.ts +4 -1
  249. package/lib/renderers/Table/TableContent.js +21 -1
  250. package/lib/renderers/Table/TableContent.js.map +2 -2
  251. package/lib/renderers/Table/index.d.ts +5 -1
  252. package/lib/renderers/Table/index.js +65 -30
  253. package/lib/renderers/Table/index.js.map +2 -2
  254. package/lib/renderers/Tabs.js +9 -1
  255. package/lib/renderers/Tabs.js.map +2 -2
  256. package/lib/renderers/WebComponent.js +1 -1
  257. package/lib/renderers/WebComponent.js.map +2 -2
  258. package/lib/store/combo.d.ts +2 -2
  259. package/lib/store/form.d.ts +1 -1
  260. package/lib/store/form.js +3 -5
  261. package/lib/store/form.js.map +2 -2
  262. package/lib/store/formItem.js +44 -4
  263. package/lib/store/formItem.js.map +2 -2
  264. package/lib/store/table.d.ts +3 -2
  265. package/lib/store/table.js +35 -12
  266. package/lib/store/table.js.map +2 -2
  267. package/lib/themes/ang-ie11.css +934 -222
  268. package/lib/themes/ang.css +934 -222
  269. package/lib/themes/ang.css.map +1 -1
  270. package/lib/themes/antd-ie11.css +934 -222
  271. package/lib/themes/antd.css +934 -222
  272. package/lib/themes/antd.css.map +1 -1
  273. package/lib/themes/cxd-ie11.css +970 -260
  274. package/lib/themes/cxd.css +970 -260
  275. package/lib/themes/cxd.css.map +1 -1
  276. package/lib/themes/dark-ie11.css +934 -222
  277. package/lib/themes/dark.css +934 -222
  278. package/lib/themes/dark.css.map +1 -1
  279. package/lib/themes/default.css +970 -260
  280. package/lib/themes/default.css.map +1 -1
  281. package/lib/types.d.ts +38 -1
  282. package/lib/types.js +0 -5
  283. package/lib/types.js.map +2 -2
  284. package/lib/utils/api.d.ts +3 -2
  285. package/lib/utils/api.js +90 -17
  286. package/lib/utils/api.js.map +2 -2
  287. package/lib/utils/dom.d.ts +4 -0
  288. package/lib/utils/dom.js +11 -1
  289. package/lib/utils/dom.js.map +2 -2
  290. package/lib/utils/helper.d.ts +12 -23
  291. package/lib/utils/helper.js +62 -166
  292. package/lib/utils/helper.js.map +2 -2
  293. package/lib/utils/tpl-builtin.d.ts +2 -20
  294. package/lib/utils/tpl-builtin.js +25 -743
  295. package/lib/utils/tpl-builtin.js.map +2 -2
  296. package/lib/utils/tpl.js +24 -0
  297. package/lib/utils/tpl.js.map +2 -2
  298. package/package.json +5 -2
  299. package/schema.json +3966 -1263
  300. package/scss/_mixins.scss +1 -3
  301. package/scss/_properties.scss +42 -13
  302. package/scss/base/_common.scss +3 -0
  303. package/scss/base/_normalize.scss +2 -0
  304. package/scss/components/_alert.scss +28 -5
  305. package/scss/components/_anchor-nav.scss +89 -29
  306. package/scss/components/_button.scss +12 -0
  307. package/scss/components/_card.scss +9 -15
  308. package/scss/components/_collapse-group.scss +15 -0
  309. package/scss/components/_collapse.scss +48 -23
  310. package/scss/components/_grid-nav.scss +128 -0
  311. package/scss/components/_images.scss +1 -0
  312. package/scss/components/_input-box.scss +1 -0
  313. package/scss/components/_nav.scss +2 -7
  314. package/scss/components/_page.scss +35 -2
  315. package/scss/components/_picker-columns.scss +124 -0
  316. package/scss/components/_popover.scss +13 -0
  317. package/scss/components/_portlet.scss +51 -0
  318. package/scss/components/_progress.scss +141 -33
  319. package/scss/components/_result-box.scss +1 -0
  320. package/scss/components/_spinner.scss +5 -4
  321. package/scss/components/_status.scss +1 -1
  322. package/scss/components/_table.scss +32 -0
  323. package/scss/components/_toast.scss +41 -11
  324. package/scss/components/form/_checks.scss +0 -351
  325. package/scss/components/form/_color.scss +32 -3
  326. package/scss/components/form/_combo.scss +4 -0
  327. package/scss/components/form/_fieldset.scss +6 -1
  328. package/scss/components/form/_file.scss +11 -0
  329. package/scss/components/form/_form.scss +48 -0
  330. package/scss/components/form/_selection.scss +354 -0
  331. package/scss/components/form/_transfer.scss +76 -18
  332. package/scss/components/form/_tree.scss +42 -0
  333. package/scss/themes/_common.scss +6 -0
  334. package/scss/themes/_cxd-variables.scss +13 -6
  335. package/scss/themes/cxd.scss +19 -20
  336. package/sdk/ang-ie11.css +1065 -246
  337. package/sdk/ang.css +1069 -230
  338. package/sdk/antd-ie11.css +1068 -249
  339. package/sdk/antd.css +1069 -230
  340. package/sdk/charts.js +17 -17
  341. package/sdk/color-picker.js +65 -69
  342. package/sdk/cropperjs.js +3 -3
  343. package/sdk/cxd-ie11.css +1081 -268
  344. package/sdk/cxd.css +1116 -279
  345. package/sdk/dark-ie11.css +1069 -250
  346. package/sdk/dark.css +1069 -230
  347. package/sdk/exceljs.js +1 -1
  348. package/sdk/helper.css.map +1 -1
  349. package/sdk/iconfont.svg +2513 -0
  350. package/sdk/iconfont.ttf +0 -0
  351. package/sdk/iconfont.woff +0 -0
  352. package/sdk/locale/de-DE.js +2 -0
  353. package/sdk/markdown.js +69 -69
  354. package/sdk/papaparse.js +1 -1
  355. package/sdk/renderers/Form/CityDB.js +1 -1
  356. package/sdk/rest.js +20 -28
  357. package/sdk/rich-text.js +62 -62
  358. package/sdk/sdk-ie11.css +1081 -268
  359. package/sdk/sdk.css +1116 -279
  360. package/sdk/sdk.js +1371 -1189
  361. package/sdk/thirds/hls.js/hls.js +18 -18
  362. package/sdk/thirds/mpegts.js/mpegts.js +2 -2
  363. package/sdk/tinymce.js +57 -57
  364. package/src/Schema.ts +19 -1
  365. package/src/components/Alert2.tsx +32 -4
  366. package/src/components/AnchorNav.tsx +15 -4
  367. package/src/components/{AssociatedCheckboxes.tsx → AssociatedSelection.tsx} +43 -37
  368. package/src/components/Badge.tsx +3 -3
  369. package/src/components/Button.tsx +1 -0
  370. package/src/components/{ChainedCheckboxes.tsx → ChainedSelection.tsx} +57 -40
  371. package/src/components/Collapse.tsx +139 -20
  372. package/src/components/CollapseGroup.tsx +130 -0
  373. package/src/components/ColorPicker.tsx +32 -10
  374. package/src/components/Drawer.tsx +8 -6
  375. package/src/components/GridNav.tsx +233 -0
  376. package/src/components/{ListCheckboxes.tsx → GroupedSelection.tsx} +26 -21
  377. package/src/components/InputBox.tsx +10 -9
  378. package/src/components/Link.tsx +28 -37
  379. package/src/components/ModalManager.ts +1 -1
  380. package/src/components/Overlay.tsx +6 -0
  381. package/src/components/PickerColumn.tsx +429 -0
  382. package/src/components/PickerContainer.tsx +128 -0
  383. package/src/components/PopOver.tsx +15 -1
  384. package/src/components/Progress.tsx +140 -0
  385. package/src/components/Radios.tsx +3 -8
  386. package/src/components/ResultBox.tsx +9 -9
  387. package/src/components/Select.tsx +57 -5
  388. package/src/components/{Checkboxes.tsx → Selection.tsx} +75 -21
  389. package/src/components/{TableCheckboxes.tsx → TableSelection.tsx} +46 -25
  390. package/src/components/TabsTransfer.tsx +13 -7
  391. package/src/components/TabsTransferPicker.tsx +85 -0
  392. package/src/components/Toast.tsx +48 -21
  393. package/src/components/Transfer.tsx +71 -50
  394. package/src/components/TransferDropDown.tsx +120 -0
  395. package/src/components/TransferPicker.tsx +91 -0
  396. package/src/components/Tree.tsx +194 -8
  397. package/src/components/{TreeCheckboxes.tsx → TreeSelection.tsx} +33 -26
  398. package/src/components/condition-builder/Field.tsx +7 -5
  399. package/src/components/condition-builder/Func.tsx +3 -3
  400. package/src/components/condition-builder/InputSwitch.tsx +3 -3
  401. package/src/components/condition-builder/Item.tsx +5 -12
  402. package/src/components/icons.tsx +10 -0
  403. package/src/components/index.tsx +13 -13
  404. package/src/envOverwrite.ts +20 -8
  405. package/src/factory.tsx +70 -9
  406. package/src/hooks/index.ts +5 -0
  407. package/src/hooks/use-set-state.ts +19 -0
  408. package/src/hooks/use-touch.ts +100 -0
  409. package/src/hooks/use-update-effect.ts +16 -0
  410. package/src/icons/alert-danger.svg +1 -0
  411. package/src/icons/alert-info.svg +1 -0
  412. package/src/icons/alert-success.svg +1 -0
  413. package/src/icons/alert-warning.svg +1 -0
  414. package/src/icons/download.svg +4 -0
  415. package/src/icons/drag-bar.svg +12 -6
  416. package/src/index.tsx +5 -0
  417. package/src/locale/de-DE.ts +2 -0
  418. package/src/locale/en-US.ts +3 -0
  419. package/src/locale/zh-CN.ts +5 -2
  420. package/src/renderers/Action.tsx +58 -3
  421. package/src/renderers/Alert.tsx +31 -1
  422. package/src/renderers/AnchorNav.tsx +4 -0
  423. package/src/renderers/Avatar.tsx +8 -4
  424. package/src/renderers/Breadcrumb.tsx +5 -1
  425. package/src/renderers/CRUD.tsx +29 -3
  426. package/src/renderers/Card.tsx +76 -36
  427. package/src/renderers/Collapse.tsx +70 -115
  428. package/src/renderers/CollapseGroup.tsx +80 -0
  429. package/src/renderers/Form/ConditionBuilder.tsx +2 -2
  430. package/src/renderers/Form/InputCity.tsx +4 -8
  431. package/src/renderers/Form/InputColor.tsx +4 -2
  432. package/src/renderers/Form/InputFile.tsx +65 -24
  433. package/src/renderers/Form/InputImage.tsx +11 -3
  434. package/src/renderers/Form/Item.tsx +3 -2
  435. package/src/renderers/Form/Options.tsx +29 -3
  436. package/src/renderers/Form/Select.tsx +162 -21
  437. package/src/renderers/Form/TabsTransferPicker.tsx +123 -0
  438. package/src/renderers/Form/Transfer.tsx +19 -4
  439. package/src/renderers/Form/TransferPicker.tsx +145 -0
  440. package/src/renderers/Form/TreeSelect.tsx +25 -0
  441. package/src/renderers/Form/index.tsx +15 -2
  442. package/src/renderers/Form/wrapControl.tsx +26 -1
  443. package/src/renderers/GridNav.tsx +204 -0
  444. package/src/renderers/IFrame.tsx +2 -4
  445. package/src/renderers/Image.tsx +19 -15
  446. package/src/renderers/Json.tsx +9 -9
  447. package/src/renderers/Link.tsx +29 -16
  448. package/src/renderers/List.tsx +1 -1
  449. package/src/renderers/Nav.tsx +105 -56
  450. package/src/renderers/Page.tsx +62 -1
  451. package/src/renderers/Portlet.tsx +423 -0
  452. package/src/renderers/Progress.tsx +56 -38
  453. package/src/renderers/Property.tsx +6 -4
  454. package/src/renderers/Table/ColumnToggler.tsx +1 -1
  455. package/src/renderers/Table/TableContent.tsx +40 -2
  456. package/src/renderers/Table/index.tsx +88 -43
  457. package/src/renderers/Tabs.tsx +9 -1
  458. package/src/renderers/WebComponent.tsx +2 -2
  459. package/src/store/form.ts +3 -9
  460. package/src/store/formItem.ts +94 -2
  461. package/src/store/table.ts +55 -14
  462. package/src/types.ts +58 -1
  463. package/src/utils/api.ts +120 -26
  464. package/src/utils/dom.tsx +12 -0
  465. package/src/utils/helper.ts +55 -185
  466. package/src/utils/tpl-builtin.ts +40 -866
  467. package/src/utils/tpl.ts +33 -0
  468. package/tsconfig-for-declaration.json +1 -1
  469. package/dump.rdb +0 -0
  470. package/lib/components/AssociatedCheckboxes.d.ts +0 -762
  471. package/lib/components/AssociatedCheckboxes.js +0 -90
  472. package/lib/components/AssociatedCheckboxes.js.map +0 -13
  473. package/lib/components/ChainedCheckboxes.js.map +0 -13
  474. package/lib/components/Checkboxes.js +0 -101
  475. package/lib/components/Checkboxes.js.map +0 -13
  476. package/lib/components/ListCheckboxes.d.ts +0 -739
  477. package/lib/components/ListCheckboxes.js +0 -48
  478. package/lib/components/ListCheckboxes.js.map +0 -13
  479. package/lib/components/ListRadios.d.ts +0 -763
  480. package/lib/components/ListRadios.js +0 -86
  481. package/lib/components/ListRadios.js.map +0 -13
  482. package/lib/components/TableCheckboxes.js.map +0 -13
  483. package/lib/components/TreeCheckboxes.js.map +0 -13
  484. package/lib/components/TreeRadios.d.ts +0 -838
  485. package/lib/components/TreeRadios.js +0 -116
  486. package/lib/components/TreeRadios.js.map +0 -13
  487. package/src/components/ListRadios.tsx +0 -159
  488. package/src/components/TreeRadios.tsx +0 -202
@@ -85,6 +85,7 @@ register('en-US', {
85
85
  'Excel.placeholder': `Drag 'n' drop excel here, or click to select`,
86
86
  'fetchFailed': 'Fetch api failed',
87
87
  'File.continueAdd': 'Continue add',
88
+ 'File.downloadTpl': 'Download template',
88
89
  'File.dragDrop': `Drag 'n' drop some files here`,
89
90
  'File.errorRetry': 'File upload failed, please try again',
90
91
  'File.failed': 'Failed files.',
@@ -182,6 +183,7 @@ register('en-US', {
182
183
  'Transfer.configError': 'Config error',
183
184
  'Transfer.refreshIcon': 'Click to refresh',
184
185
  'Transfer.searchKeyword': 'Enter keywords',
186
+ 'Transfer.available': 'Available',
185
187
  'Transfer.selectd': 'Selected',
186
188
  'Transfer.selectFromLeft': 'Select from the left',
187
189
  'Tree.addChild': 'Add child',
@@ -223,6 +225,7 @@ register('en-US', {
223
225
  'Wizard.saveAndNext': 'Save & Next',
224
226
  'year-to-year': '{{from}} - {{to}}',
225
227
  'Year.placeholder': 'Select a Year',
228
+ 'reload': 'Reload',
226
229
  'rotate': 'Rotate',
227
230
  'Editor.fullscreen': 'full screen',
228
231
  'Editor.exitFullscreen': 'exit fullscreen mode',
@@ -87,6 +87,7 @@ register('zh-CN', {
87
87
  'Excel.placeholder': '拖拽 Excel 到这,或点击上传',
88
88
  'fetchFailed': '初始化失败',
89
89
  'File.continueAdd': '继续添加',
90
+ 'File.downloadTpl': '下载模板',
90
91
  'File.dragDrop': '将文件拖拽到此处',
91
92
  'File.errorRetry': '文件上传失败请重试',
92
93
  'File.failed': '失败文件',
@@ -186,8 +187,9 @@ register('zh-CN', {
186
187
  'Transfer.configError': '配置错误,选项无法与左侧选项对应',
187
188
  'Transfer.refreshIcon': '点击刷新重新加载',
188
189
  'Transfer.searchKeyword': '请输入关键字',
189
- 'Transfer.selectd': '当前选择',
190
- 'Transfer.selectFromLeft': '请从左侧选择数据',
190
+ 'Transfer.available': '可选项',
191
+ 'Transfer.selectd': '已选项',
192
+ 'Transfer.selectFromLeft': '请选择左侧数据',
191
193
  'Tree.addChild': '添加子节点',
192
194
  'Tree.addRoot': '添加一级节点',
193
195
  'Tree.editNode': '编辑该节点',
@@ -227,6 +229,7 @@ register('zh-CN', {
227
229
  'Wizard.saveAndNext': '保存并下一步',
228
230
  'year-to-year': '{{from}} 年 - {{to}} 年',
229
231
  'Year.placeholder': '请选择年',
232
+ 'reload': '刷新',
230
233
  'rotate': '旋转',
231
234
  'Editor.fullscreen': '全屏',
232
235
  'Editor.exitFullscreen': '退出全屏',
@@ -4,8 +4,14 @@ import {Renderer, RendererProps} from '../factory';
4
4
  import {filter} from '../utils/tpl';
5
5
  import Button from '../components/Button';
6
6
  import pick from 'lodash/pick';
7
+ import omit from 'lodash/omit';
7
8
 
8
9
  export interface ButtonSchema extends BaseSchema {
10
+ /**
11
+ * 主要用于用户行为跟踪里区分是哪个按钮
12
+ */
13
+ id?: string;
14
+
9
15
  /**
10
16
  * 是否为块状展示,默认为内联。
11
17
  */
@@ -144,6 +150,11 @@ export interface ButtonSchema extends BaseSchema {
144
150
  * 自定义事件处理函数
145
151
  */
146
152
  onClick?: string | any;
153
+
154
+ /**
155
+ * 子内容
156
+ */
157
+ body?: SchemaCollection;
147
158
  }
148
159
 
149
160
  export interface AjaxActionSchema extends ButtonSchema {
@@ -332,6 +343,7 @@ export type ActionSchema =
332
343
  | VanillaAction;
333
344
 
334
345
  const ActionProps = [
346
+ 'id',
335
347
  'dialog',
336
348
  'drawer',
337
349
  'url',
@@ -380,6 +392,7 @@ import {
380
392
  FeedbackDialog,
381
393
  SchemaApi,
382
394
  SchemaClassName,
395
+ SchemaCollection,
383
396
  SchemaExpression,
384
397
  SchemaIcon,
385
398
  SchemaReload,
@@ -391,6 +404,7 @@ import {DrawerSchema, DrawerSchemaBase} from './Drawer';
391
404
  import {generateIcon} from '../utils/icon';
392
405
  import {BadgeSchema, withBadge} from '../components/Badge';
393
406
  import {normalizeApi, str2AsyncFunction} from '../utils/api';
407
+ import {TooltipWrapper} from '../components/TooltipWrapper';
394
408
 
395
409
  // 构造一个假的 React 事件避免可能的报错,主要用于快捷键功能
396
410
  // 来自 https://stackoverflow.com/questions/27062455/reactjs-can-i-create-my-own-syntheticevent
@@ -495,6 +509,7 @@ export interface ActionProps
495
509
  | 'iconClassName'
496
510
  | 'rightIconClassName'
497
511
  | 'loadingClassName'
512
+ | 'body'
498
513
  >,
499
514
  Omit<
500
515
  OtherActionSchema,
@@ -570,7 +585,8 @@ export class Action extends React.Component<ActionProps, ActionState> {
570
585
 
571
586
  @autobind
572
587
  async handleAction(e: React.MouseEvent<any>) {
573
- const {onAction, disabled, countDown} = this.props;
588
+ const {onAction, disabled, countDown, env} = this.props;
589
+
574
590
  // https://reactjs.org/docs/legacy-event-pooling.html
575
591
  e.persist();
576
592
  let onClick = this.props.onClick;
@@ -592,9 +608,26 @@ export class Action extends React.Component<ActionProps, ActionState> {
592
608
 
593
609
  e.preventDefault();
594
610
  const action = pick(this.props, ActionProps) as ActionSchema;
611
+ const actionType = action.actionType;
612
+
613
+ // ajax 会在 wrapFetcher 里记录,这里再处理就重复了,因此去掉
614
+ // add 一般是 input-table 之类的,会触发 formItemChange,为了避免重复也去掉
615
+ if (
616
+ actionType !== 'ajax' &&
617
+ actionType !== 'download' &&
618
+ actionType !== 'add'
619
+ ) {
620
+ env?.tracker(
621
+ {
622
+ eventType: actionType || this.props.type || 'click',
623
+ eventData: omit(action, ['type', 'actionType', 'tooltipPlacement'])
624
+ },
625
+ this.props
626
+ );
627
+ }
595
628
 
596
629
  // download 是一种 ajax 的简写
597
- if (action.actionType === 'download') {
630
+ if (actionType === 'download') {
598
631
  action.actionType = 'ajax';
599
632
  const api = normalizeApi((action as AjaxActionSchema).api);
600
633
  api.responseType = 'blob';
@@ -692,9 +725,30 @@ export class Action extends React.Component<ActionProps, ActionState> {
692
725
  tooltipContainer,
693
726
  tooltipRootClose,
694
727
  loading,
695
- classnames: cx
728
+ body,
729
+ render,
730
+ classnames: cx,
731
+ classPrefix: ns
696
732
  } = this.props;
697
733
 
734
+ if (actionType !== 'email' && body) {
735
+ return (
736
+ <TooltipWrapper
737
+ classPrefix={ns}
738
+ classnames={cx}
739
+ placement={tooltipPlacement}
740
+ tooltip={tooltip}
741
+ container={tooltipContainer}
742
+ trigger={tooltipTrigger}
743
+ rootClose={tooltipRootClose}
744
+ >
745
+ <div className={cx('Action', className)} onClick={this.handleAction}>
746
+ {render('body', body) as JSX.Element}
747
+ </div>
748
+ </TooltipWrapper>
749
+ );
750
+ }
751
+
698
752
  let label = this.props.label;
699
753
  let disabled = this.props.disabled;
700
754
  let isActive = !!active;
@@ -798,6 +852,7 @@ export class ActionRenderer extends React.Component<
798
852
  return (
799
853
  <Action
800
854
  {...(rest as any)}
855
+ env={env}
801
856
  disabled={disabled || btnDisabled}
802
857
  onAction={this.handleAction}
803
858
  loading={loading}
@@ -1,7 +1,12 @@
1
1
  import {Renderer, RendererProps} from '../factory';
2
2
  import React from 'react';
3
3
  import Alert, {AlertProps} from '../components/Alert2';
4
- import {BaseSchema, SchemaCollection} from '../Schema';
4
+ import {
5
+ BaseSchema,
6
+ SchemaObject,
7
+ SchemaCollection,
8
+ SchemaIcon
9
+ } from '../Schema';
5
10
 
6
11
  /**
7
12
  * Alert 提示渲染器。
@@ -13,6 +18,11 @@ export interface AlertSchema extends BaseSchema {
13
18
  */
14
19
  type: 'alert';
15
20
 
21
+ /**
22
+ * 提示框标题
23
+ */
24
+ title?: string;
25
+
16
26
  /**
17
27
  * 内容区域
18
28
  */
@@ -27,6 +37,26 @@ export interface AlertSchema extends BaseSchema {
27
37
  * 是否显示关闭按钮
28
38
  */
29
39
  showCloseButton?: boolean;
40
+
41
+ /**
42
+ * 关闭按钮CSS类名
43
+ */
44
+ closeButtonClassName?: string;
45
+
46
+ /**
47
+ * 是否显示ICON
48
+ */
49
+ showIcon?: boolean;
50
+
51
+ /**
52
+ * 左侧图标
53
+ */
54
+ icon?: SchemaIcon;
55
+
56
+ /**
57
+ * 图标CSS类名
58
+ */
59
+ iconClassName?: string;
30
60
  }
31
61
 
32
62
  @Renderer({
@@ -65,6 +65,8 @@ export interface AnchorNavSchema extends BaseSchema {
65
65
  * 楼层样式名
66
66
  */
67
67
  sectionClassName?: SchemaClassName;
68
+
69
+ direction?: 'vertical' | 'horizontal';
68
70
  }
69
71
 
70
72
  export interface AnchorNavProps
@@ -148,6 +150,7 @@ export default class AnchorNav extends React.Component<
148
150
  className,
149
151
  linkClassName,
150
152
  sectionClassName,
153
+ direction,
151
154
  sectionRender,
152
155
  render,
153
156
  data
@@ -187,6 +190,7 @@ export default class AnchorNav extends React.Component<
187
190
  sectionClassName={sectionClassName}
188
191
  onSelect={this.handleSelect}
189
192
  active={this.state.active}
193
+ direction={direction}
190
194
  >
191
195
  {children}
192
196
  </CAnchorNav>
@@ -10,7 +10,11 @@ import {
10
10
  SchemaUrlPath
11
11
  } from '../Schema';
12
12
  import {BadgeSchema, withBadge} from '../components/Badge';
13
- import {isPureVariable, resolveVariable, resolveVariableAndFilter} from '../utils/tpl-builtin';
13
+ import {
14
+ isPureVariable,
15
+ resolveVariable,
16
+ resolveVariableAndFilter
17
+ } from '../utils/tpl-builtin';
14
18
 
15
19
  /**
16
20
  * Avatar 用户头像显示
@@ -102,15 +106,15 @@ export class AvatarField extends React.Component<AvatarProps, object> {
102
106
  };
103
107
 
104
108
  if (isPureVariable(text)) {
105
- text = resolveVariable(text, data);
109
+ text = resolveVariableAndFilter(text, data);
106
110
  }
107
111
 
108
112
  if (isPureVariable(src)) {
109
- src = resolveVariable(src, data);
113
+ src = resolveVariableAndFilter(src, data, '| raw');
110
114
  }
111
115
 
112
116
  if (isPureVariable(icon)) {
113
- icon = resolveVariable(icon, data);
117
+ icon = resolveVariableAndFilter(icon, data);
114
118
  }
115
119
 
116
120
  let avatar = <i className={icon} />;
@@ -77,7 +77,11 @@ export class BreadcrumbField extends React.Component<BreadcrumbProps, object> {
77
77
 
78
78
  const crumbItems = items
79
79
  ? items
80
- : (resolveVariable(source, data) as Array<BreadcrumbItemSchema>);
80
+ : (resolveVariableAndFilter(
81
+ source,
82
+ data,
83
+ '| raw'
84
+ ) as Array<BreadcrumbItemSchema>);
81
85
 
82
86
  const crumbs = crumbItems
83
87
  .map<React.ReactNode>((item, index) => (
@@ -287,6 +287,11 @@ export interface CRUDCommonSchema extends BaseSchema {
287
287
  * 开启查询区域,会根据列元素的searchable属性值,自动生成查询条件表单
288
288
  */
289
289
  autoGenerateFilter?: boolean;
290
+
291
+ /**
292
+ * 内容区域占满屏幕剩余空间
293
+ */
294
+ autoFillHeight?: boolean;
290
295
  }
291
296
 
292
297
  export type CRUDCardsSchema = CRUDCommonSchema & {
@@ -366,7 +371,8 @@ export default class CRUD extends React.Component<CRUDProps, any> {
366
371
  'onInit',
367
372
  'onSaved',
368
373
  'onQuery',
369
- 'formStore'
374
+ 'formStore',
375
+ 'autoFillHeight'
370
376
  ];
371
377
  static defaultProps = {
372
378
  toolbarInline: true,
@@ -382,7 +388,8 @@ export default class CRUD extends React.Component<CRUDProps, any> {
382
388
  filterTogglable: false,
383
389
  filterDefaultVisible: true,
384
390
  loadDataOnce: false,
385
- loadDataOnceFetchOnFilter: true
391
+ loadDataOnceFetchOnFilter: true,
392
+ autoFillHeight: false
386
393
  };
387
394
 
388
395
  control: any;
@@ -1795,7 +1802,7 @@ export default class CRUD extends React.Component<CRUDProps, any> {
1795
1802
  return null;
1796
1803
  }
1797
1804
 
1798
- const {render, store} = this.props;
1805
+ const {render, store, translate: __} = this.props;
1799
1806
  const type = (toolbar as Schema).type || toolbar;
1800
1807
 
1801
1808
  if (type === 'bulkActions' || type === 'bulk-actions') {
@@ -1812,6 +1819,22 @@ export default class CRUD extends React.Component<CRUDProps, any> {
1812
1819
  return this.renderFilterToggler();
1813
1820
  } else if (type === 'export-csv') {
1814
1821
  return this.renderExportCSV(toolbar as Schema);
1822
+ } else if (type === 'reload') {
1823
+ let reloadButton = {
1824
+ label: '',
1825
+ icon: 'fa fa-sync',
1826
+ tooltip: __('reload'),
1827
+ tooltipPlacement: 'top',
1828
+ type: 'button'
1829
+ };
1830
+ if (typeof toolbar === 'object') {
1831
+ reloadButton = {...reloadButton, ...omit(toolbar, ['type', 'align'])};
1832
+ }
1833
+ return render(`toolbar/${index}`, reloadButton, {
1834
+ onAction: () => {
1835
+ this.reload();
1836
+ }
1837
+ });
1815
1838
  } else if (Array.isArray(toolbar)) {
1816
1839
  const children: Array<any> = toolbar
1817
1840
  .filter((toolbar: any) => isVisible(toolbar, store.filterData))
@@ -2000,6 +2023,7 @@ export default class CRUD extends React.Component<CRUDProps, any> {
2000
2023
  onQuery,
2001
2024
  autoGenerateFilter,
2002
2025
  onSelect,
2026
+ autoFillHeight,
2003
2027
  ...rest
2004
2028
  } = this.props;
2005
2029
 
@@ -2026,6 +2050,7 @@ export default class CRUD extends React.Component<CRUDProps, any> {
2026
2050
  'Crud-filter',
2027
2051
  filter.panelClassName || 'Panel--default'
2028
2052
  ),
2053
+ api: undefined,
2029
2054
  data: store.filterData,
2030
2055
  onReset: this.handleFilterReset,
2031
2056
  onSubmit: this.handleFilterSubmit,
@@ -2051,6 +2076,7 @@ export default class CRUD extends React.Component<CRUDProps, any> {
2051
2076
  className: cx('Crud-body', bodyClassName),
2052
2077
  ref: this.controlRef,
2053
2078
  autoGenerateFilter: !filter && autoGenerateFilter,
2079
+ autoFillHeight: autoFillHeight,
2054
2080
  selectable: !!(
2055
2081
  (this.hasBulkActionsToolbar() && this.hasBulkActions()) ||
2056
2082
  pickerMode
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import {findDOMNode} from 'react-dom';
3
3
  import {Renderer, RendererProps} from '../factory';
4
- import {SchemaNode, Schema, Action} from '../types';
4
+ import {SchemaNode, Schema, Action, PlainObject} from '../types';
5
5
  import {filter, evalExpression} from '../utils/tpl';
6
6
  import cx from 'classnames';
7
7
  import Checkbox from '../components/Checkbox';
@@ -11,7 +11,8 @@ import {
11
11
  isVisible,
12
12
  isDisabled,
13
13
  noop,
14
- isClickOnInput
14
+ isClickOnInput,
15
+ hashCode
15
16
  } from '../utils/helper';
16
17
  import {resolveVariable} from '../utils/tpl-builtin';
17
18
  import QuickEdit, {SchemaQuickEdit} from './QuickEdit';
@@ -128,6 +129,7 @@ export interface CardSchema extends BaseSchema {
128
129
  avatar?: SchemaUrlPath;
129
130
 
130
131
  avatarText?: SchemaTpl;
132
+ avatarTextBackground?: String[];
131
133
  avatarTextClassName?: SchemaClassName;
132
134
 
133
135
  /**
@@ -166,6 +168,11 @@ export interface CardSchema extends BaseSchema {
166
168
  * 底部按钮集合。
167
169
  */
168
170
  actions?: Array<ActionSchema>;
171
+
172
+ /**
173
+ * 工具栏按钮
174
+ */
175
+ toolbar?: Array<ActionSchema>;
169
176
  }
170
177
 
171
178
  export interface CardProps
@@ -273,30 +280,47 @@ export class Card extends React.Component<CardProps> {
273
280
  multiple,
274
281
  hideCheckToggler,
275
282
  classnames: cx,
276
- classPrefix: ns
283
+ classPrefix: ns,
284
+ toolbar,
285
+ render
277
286
  } = this.props;
278
-
279
- if (dragging) {
280
- return (
281
- <div className={cx('Card-dragBtn')}>
282
- <Icon icon="drag-bar" className="icon" />
283
- </div>
287
+ const toolbars: Array<JSX.Element> = [];
288
+
289
+ if (selectable && !hideCheckToggler) {
290
+ toolbars.push(
291
+ <Checkbox
292
+ key="check"
293
+ className={cx('Card-checkbox')}
294
+ type={multiple ? 'checkbox' : 'radio'}
295
+ disabled={!checkable}
296
+ checked={selected}
297
+ onChange={checkOnItemClick ? noop : this.handleCheck}
298
+ />
284
299
  );
285
- } else if (selectable && !hideCheckToggler) {
286
- return (
287
- <div className={cx('Card-checkBtn')}>
288
- <Checkbox
289
- classPrefix={ns}
290
- type={multiple ? 'checkbox' : 'radio'}
291
- disabled={!checkable}
292
- checked={selected}
293
- onChange={checkOnItemClick ? noop : this.handleCheck}
294
- />
295
- </div>
300
+ }
301
+
302
+ if (Array.isArray(toolbar)) {
303
+ toolbar.forEach((action, index) =>
304
+ toolbars.push(
305
+ render(
306
+ `toolbar/${index}`,
307
+ {
308
+ type: 'button',
309
+ level: 'link',
310
+ size: 'sm',
311
+ ...(action as any)
312
+ },
313
+ {
314
+ key: index
315
+ }
316
+ )
317
+ )
296
318
  );
297
319
  }
298
320
 
299
- return null;
321
+ return toolbars.length ? (
322
+ <div className={cx('Card-toolbar')}>{toolbars}</div>
323
+ ) : null;
300
324
  }
301
325
 
302
326
  renderActions() {
@@ -451,45 +475,55 @@ export class Card extends React.Component<CardProps> {
451
475
  imageClassName,
452
476
  avatarTextClassName,
453
477
  href,
454
- itemAction
478
+ itemAction,
479
+ dragging
455
480
  } = this.props;
456
481
 
482
+ const toolbar = this.renderToolbar();
457
483
  let heading = null;
458
484
 
459
- if (header) {
485
+ if (header || toolbar) {
460
486
  const {
461
487
  highlight: highlightTpl,
462
488
  avatar: avatarTpl,
463
489
  avatarText: avatarTextTpl,
490
+ avatarTextBackground,
464
491
  title: titleTpl,
465
492
  subTitle: subTitleTpl,
466
493
  subTitlePlaceholder,
467
494
  desc: descTpl
468
- } = header;
495
+ } = header || {};
469
496
 
470
497
  const descPlaceholder =
471
- header.descriptionPlaceholder || header.descPlaceholder;
498
+ header?.descriptionPlaceholder || header?.descPlaceholder;
472
499
 
473
500
  const highlight = !!evalExpression(highlightTpl!, data as object);
474
501
  const avatar = filter(avatarTpl, data, '| raw');
475
502
  const avatarText = filter(avatarTextTpl, data);
476
503
  const title = filter(titleTpl, data);
477
504
  const subTitle = filter(subTitleTpl, data);
478
- const desc = filter(header.description || descTpl, data);
505
+ const desc = filter(header?.description || descTpl, data);
506
+ const avatarTextStyle: PlainObject = {};
507
+ if (avatarText && avatarTextBackground && avatarTextBackground.length) {
508
+ avatarTextStyle['background'] =
509
+ avatarTextBackground[
510
+ Math.abs(hashCode(avatarText)) % avatarTextBackground.length
511
+ ];
512
+ }
479
513
 
480
514
  heading = (
481
- <div className={cx('Card-heading', header.className)}>
515
+ <div className={cx('Card-heading', header?.className)}>
482
516
  {avatar ? (
483
517
  <span
484
518
  className={cx(
485
519
  'Card-avtar',
486
- header.avatarClassName || avatarClassName
520
+ header?.avatarClassName || avatarClassName
487
521
  )}
488
522
  >
489
523
  <img
490
524
  className={cx(
491
525
  'Card-img',
492
- header.imageClassName || imageClassName
526
+ header?.imageClassName || imageClassName
493
527
  )}
494
528
  src={avatar}
495
529
  />
@@ -498,8 +532,9 @@ export class Card extends React.Component<CardProps> {
498
532
  <span
499
533
  className={cx(
500
534
  'Card-avtarText',
501
- header.avatarTextClassName || avatarTextClassName
535
+ header?.avatarTextClassName || avatarTextClassName
502
536
  )}
537
+ style={avatarTextStyle}
503
538
  >
504
539
  {avatarText}
505
540
  </span>
@@ -509,7 +544,7 @@ export class Card extends React.Component<CardProps> {
509
544
  <i
510
545
  className={cx(
511
546
  'Card-highlight',
512
- header.highlightClassName || highlightClassName
547
+ header?.highlightClassName || highlightClassName
513
548
  )}
514
549
  />
515
550
  ) : null}
@@ -518,7 +553,7 @@ export class Card extends React.Component<CardProps> {
518
553
  <div
519
554
  className={cx(
520
555
  'Card-title',
521
- header.titleClassName || titleClassName
556
+ header?.titleClassName || titleClassName
522
557
  )}
523
558
  >
524
559
  {render('title', title)}
@@ -529,7 +564,7 @@ export class Card extends React.Component<CardProps> {
529
564
  <div
530
565
  className={cx(
531
566
  'Card-subTitle',
532
- header.subTitleClassName || subTitleClassName
567
+ header?.subTitleClassName || subTitleClassName
533
568
  )}
534
569
  >
535
570
  {render('sub-title', subTitle || subTitlePlaceholder!, {
@@ -542,8 +577,8 @@ export class Card extends React.Component<CardProps> {
542
577
  <div
543
578
  className={cx(
544
579
  'Card-desc',
545
- header.descriptionClassName ||
546
- header.descClassName ||
580
+ header?.descriptionClassName ||
581
+ header?.descClassName ||
547
582
  descClassName
548
583
  )}
549
584
  >
@@ -553,6 +588,7 @@ export class Card extends React.Component<CardProps> {
553
588
  </div>
554
589
  ) : null}
555
590
  </div>
591
+ {toolbar}
556
592
  </div>
557
593
  );
558
594
  }
@@ -570,7 +606,11 @@ export class Card extends React.Component<CardProps> {
570
606
  'Card--link': href || itemAction
571
607
  })}
572
608
  >
573
- {this.renderToolbar()}
609
+ {dragging ? (
610
+ <div className={cx('Card-dragBtn')}>
611
+ <Icon icon="drag-bar" className="icon" />
612
+ </div>
613
+ ) : null}
574
614
  {heading}
575
615
  {body ? (
576
616
  <div className={cx('Card-body', bodyClassName)}>{body}</div>