amis 1.3.5-beta.6 → 1.4.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/README.md +1 -1
  2. package/lib/Schema.d.ts +17 -0
  3. package/lib/Schema.js.map +1 -1
  4. package/lib/components/Alert.js +3 -1
  5. package/lib/components/Alert.js.map +2 -2
  6. package/lib/components/Badge.d.ts +16 -3
  7. package/lib/components/Badge.js +53 -4
  8. package/lib/components/Badge.js.map +2 -2
  9. package/lib/components/Button.d.ts +24 -22
  10. package/lib/components/Button.js +13 -7
  11. package/lib/components/Button.js.map +2 -2
  12. package/lib/components/Checkbox.d.ts +1 -1
  13. package/lib/components/Checkbox.js +1 -1
  14. package/lib/components/Checkbox.js.map +2 -2
  15. package/lib/components/Collapse.js +1 -1
  16. package/lib/components/Collapse.js.map +2 -2
  17. package/lib/components/DatePicker.js +1 -1
  18. package/lib/components/DatePicker.js.map +2 -2
  19. package/lib/components/DateRangePicker.js +1 -1
  20. package/lib/components/DateRangePicker.js.map +2 -2
  21. package/lib/components/Drawer.js +1 -1
  22. package/lib/components/Drawer.js.map +2 -2
  23. package/lib/components/InputBox.js +1 -1
  24. package/lib/components/InputBox.js.map +2 -2
  25. package/lib/components/Link.d.ts +91 -0
  26. package/lib/components/Link.js +44 -0
  27. package/lib/components/Link.js.map +13 -0
  28. package/lib/components/Modal.js +1 -1
  29. package/lib/components/Modal.js.map +2 -2
  30. package/lib/components/MonthRangePicker.js +1 -1
  31. package/lib/components/MonthRangePicker.js.map +2 -2
  32. package/lib/components/RichText.d.ts +6 -1
  33. package/lib/components/RichText.js +207 -8
  34. package/lib/components/RichText.js.map +2 -2
  35. package/lib/components/Select.d.ts +7 -0
  36. package/lib/components/Select.js +3 -0
  37. package/lib/components/Select.js.map +2 -2
  38. package/lib/components/SparkLine.d.ts +85 -84
  39. package/lib/components/SparkLine.js +2 -2
  40. package/lib/components/SparkLine.js.map +2 -2
  41. package/lib/components/Steps.d.ts +3 -3
  42. package/lib/components/Steps.js.map +1 -1
  43. package/lib/components/Toast.js +2 -2
  44. package/lib/components/Toast.js.map +2 -2
  45. package/lib/components/Tree.js +5 -3
  46. package/lib/components/Tree.js.map +2 -2
  47. package/lib/components/WithRemoteConfig.d.ts +8 -0
  48. package/lib/components/WithRemoteConfig.js +28 -2
  49. package/lib/components/WithRemoteConfig.js.map +2 -2
  50. package/lib/components/calendar/DaysView.js +2 -2
  51. package/lib/components/calendar/DaysView.js.map +2 -2
  52. package/lib/components/condition-builder/Field.js +0 -1
  53. package/lib/components/condition-builder/Field.js.map +2 -2
  54. package/lib/components/condition-builder/Value.js +2 -1
  55. package/lib/components/condition-builder/Value.js.map +2 -2
  56. package/lib/components/condition-builder/types.d.ts +5 -0
  57. package/lib/components/condition-builder/types.js.map +1 -1
  58. package/lib/components/icons.js +14 -0
  59. package/lib/components/icons.js.map +2 -2
  60. package/lib/factory.d.ts +5 -1
  61. package/lib/factory.js +9 -4
  62. package/lib/factory.js.map +2 -2
  63. package/lib/helper.css.map +1 -1
  64. package/lib/icons/clock.js +10 -0
  65. package/lib/icons/loading-outline.js +7 -0
  66. package/lib/icons/status-close.js +11 -0
  67. package/lib/icons/status-fail.js +11 -0
  68. package/lib/icons/status-info.js +10 -0
  69. package/lib/icons/status-success.js +11 -0
  70. package/lib/icons/status-warning.js +10 -0
  71. package/lib/index.js +1 -1
  72. package/lib/locale/de-DE.js +3 -0
  73. package/lib/locale/de-DE.js.map +2 -2
  74. package/lib/locale/en-US.js +4 -1
  75. package/lib/locale/en-US.js.map +2 -2
  76. package/lib/locale/zh-CN.js +5 -2
  77. package/lib/locale/zh-CN.js.map +2 -2
  78. package/lib/renderers/Action.d.ts +16 -1
  79. package/lib/renderers/Action.js +5 -5
  80. package/lib/renderers/Action.js.map +2 -2
  81. package/lib/renderers/CRUD.d.ts +2 -2
  82. package/lib/renderers/CRUD.js +32 -26
  83. package/lib/renderers/CRUD.js.map +2 -2
  84. package/lib/renderers/Collapse.d.ts +1 -1
  85. package/lib/renderers/Collapse.js +7 -3
  86. package/lib/renderers/Collapse.js.map +2 -2
  87. package/lib/renderers/Dialog.d.ts +0 -252
  88. package/lib/renderers/Dialog.js +1 -4
  89. package/lib/renderers/Dialog.js.map +2 -2
  90. package/lib/renderers/Drawer.js +0 -3
  91. package/lib/renderers/Drawer.js.map +2 -2
  92. package/lib/renderers/DropDownButton.d.ts +13 -1
  93. package/lib/renderers/DropDownButton.js +9 -5
  94. package/lib/renderers/DropDownButton.js.map +2 -2
  95. package/lib/renderers/Form/ButtonGroupSelect.js +3 -0
  96. package/lib/renderers/Form/ButtonGroupSelect.js.map +2 -2
  97. package/lib/renderers/Form/Checkbox.d.ts +5 -0
  98. package/lib/renderers/Form/Checkbox.js +4 -0
  99. package/lib/renderers/Form/Checkbox.js.map +2 -2
  100. package/lib/renderers/Form/Combo.js +2 -2
  101. package/lib/renderers/Form/Combo.js.map +2 -2
  102. package/lib/renderers/Form/DiffEditor.d.ts +0 -2
  103. package/lib/renderers/Form/Editor.d.ts +0 -2
  104. package/lib/renderers/Form/Editor.js +1 -1
  105. package/lib/renderers/Form/Editor.js.map +2 -2
  106. package/lib/renderers/Form/InputExcel.d.ts +5 -0
  107. package/lib/renderers/Form/InputExcel.js +24 -3
  108. package/lib/renderers/Form/InputExcel.js.map +2 -2
  109. package/lib/renderers/Form/InputFile.js +2 -2
  110. package/lib/renderers/Form/InputFile.js.map +2 -2
  111. package/lib/renderers/Form/InputImage.d.ts +8 -0
  112. package/lib/renderers/Form/InputImage.js +7 -4
  113. package/lib/renderers/Form/InputImage.js.map +2 -2
  114. package/lib/renderers/Form/InputTable.d.ts +23 -5
  115. package/lib/renderers/Form/InputTable.js +32 -3
  116. package/lib/renderers/Form/InputTable.js.map +2 -2
  117. package/lib/renderers/Form/Options.js +6 -3
  118. package/lib/renderers/Form/Options.js.map +2 -2
  119. package/lib/renderers/Form/Picker.js +2 -2
  120. package/lib/renderers/Form/Picker.js.map +2 -2
  121. package/lib/renderers/Form/wrapControl.js +2 -2
  122. package/lib/renderers/Form/wrapControl.js.map +2 -2
  123. package/lib/renderers/IFrame.js +2 -2
  124. package/lib/renderers/IFrame.js.map +2 -2
  125. package/lib/renderers/Image.d.ts +1 -0
  126. package/lib/renderers/Image.js +15 -1
  127. package/lib/renderers/Image.js.map +2 -2
  128. package/lib/renderers/Json.js +5 -1
  129. package/lib/renderers/Json.js.map +2 -2
  130. package/lib/renderers/Link.d.ts +16 -3
  131. package/lib/renderers/Link.js +16 -13
  132. package/lib/renderers/Link.js.map +2 -2
  133. package/lib/renderers/Log.d.ts +2 -2
  134. package/lib/renderers/Log.js +7 -1
  135. package/lib/renderers/Log.js.map +2 -2
  136. package/lib/renderers/Nav.d.ts +81 -25
  137. package/lib/renderers/Nav.js +272 -29
  138. package/lib/renderers/Nav.js.map +2 -2
  139. package/lib/renderers/Page.js +4 -1
  140. package/lib/renderers/Page.js.map +2 -2
  141. package/lib/renderers/Service.d.ts +10 -1
  142. package/lib/renderers/Service.js +85 -3
  143. package/lib/renderers/Service.js.map +2 -2
  144. package/lib/renderers/SparkLine.d.ts +4 -0
  145. package/lib/renderers/SparkLine.js.map +2 -2
  146. package/lib/renderers/Steps.d.ts +4 -4
  147. package/lib/renderers/Steps.js +5 -2
  148. package/lib/renderers/Steps.js.map +2 -2
  149. package/lib/renderers/Table/ColumnToggler.d.ts +113 -0
  150. package/lib/renderers/Table/ColumnToggler.js +216 -0
  151. package/lib/renderers/Table/ColumnToggler.js.map +13 -0
  152. package/lib/renderers/Table/ItemActionsWrapper.d.ts +11 -0
  153. package/lib/renderers/Table/ItemActionsWrapper.js +31 -0
  154. package/lib/renderers/Table/ItemActionsWrapper.js.map +13 -0
  155. package/lib/renderers/Table/TableBody.d.ts +5 -1
  156. package/lib/renderers/Table/TableBody.js +5 -1
  157. package/lib/renderers/Table/TableBody.js.map +2 -2
  158. package/lib/renderers/Table/TableCell.js +3 -1
  159. package/lib/renderers/Table/TableCell.js.map +2 -2
  160. package/lib/renderers/Table/TableContent.d.ts +1 -1
  161. package/lib/renderers/Table/TableContent.js +4 -0
  162. package/lib/renderers/Table/TableContent.js.map +2 -2
  163. package/lib/renderers/Table/index.d.ts +22 -4
  164. package/lib/renderers/Table/index.js +196 -81
  165. package/lib/renderers/Table/index.js.map +2 -2
  166. package/lib/store/app.d.ts +0 -1
  167. package/lib/store/combo.d.ts +0 -2
  168. package/lib/store/crud.d.ts +3 -3
  169. package/lib/store/crud.js +41 -36
  170. package/lib/store/crud.js.map +2 -2
  171. package/lib/store/form.d.ts +0 -1
  172. package/lib/store/modal.d.ts +1 -1
  173. package/lib/store/modal.js +4 -0
  174. package/lib/store/modal.js.map +2 -2
  175. package/lib/store/root.d.ts +0 -1
  176. package/lib/store/service.d.ts +0 -1
  177. package/lib/store/service.js +0 -13
  178. package/lib/store/service.js.map +2 -2
  179. package/lib/store/table.d.ts +258 -3
  180. package/lib/store/table.js +83 -7
  181. package/lib/store/table.js.map +2 -2
  182. package/lib/themes/ang-ie11.css +941 -98
  183. package/lib/themes/ang.css +941 -98
  184. package/lib/themes/ang.css.map +1 -1
  185. package/lib/themes/antd-ie11.css +941 -98
  186. package/lib/themes/antd.css +941 -98
  187. package/lib/themes/antd.css.map +1 -1
  188. package/lib/themes/cxd-ie11.css +1580 -411
  189. package/lib/themes/cxd.css +1580 -411
  190. package/lib/themes/cxd.css.map +1 -1
  191. package/lib/themes/dark-ie11.css +941 -98
  192. package/lib/themes/dark.css +941 -98
  193. package/lib/themes/dark.css.map +1 -1
  194. package/lib/themes/default.css +1580 -411
  195. package/lib/themes/default.css.map +1 -1
  196. package/lib/utils/api.js +16 -4
  197. package/lib/utils/api.js.map +2 -2
  198. package/lib/utils/attachmentAdpator.d.ts +7 -0
  199. package/lib/utils/attachmentAdpator.js +82 -0
  200. package/lib/utils/attachmentAdpator.js.map +13 -0
  201. package/lib/utils/handleAction.d.ts +7 -0
  202. package/lib/utils/handleAction.js +30 -0
  203. package/lib/utils/handleAction.js.map +13 -0
  204. package/lib/utils/helper.d.ts +1 -1
  205. package/lib/utils/helper.js +3 -3
  206. package/lib/utils/helper.js.map +2 -2
  207. package/lib/utils/tpl-builtin.d.ts +1 -1
  208. package/lib/utils/tpl-builtin.js +25 -15
  209. package/lib/utils/tpl-builtin.js.map +2 -2
  210. package/lib/utils/validations.js +62 -5
  211. package/lib/utils/validations.js.map +2 -2
  212. package/package.json +1 -2
  213. package/schema.json +633 -273
  214. package/scss/_mixins.scss +29 -0
  215. package/scss/_properties.scss +64 -13
  216. package/scss/_utilities.scss +4 -0
  217. package/scss/components/_badge.scss +67 -2
  218. package/scss/components/_button.scss +34 -3
  219. package/scss/components/_collapse.scss +26 -8
  220. package/scss/components/_column-toggler.scss +234 -0
  221. package/scss/components/_dropdown.scss +2 -1
  222. package/scss/components/_image-gallery.scss +1 -1
  223. package/scss/components/_images.scss +2 -1
  224. package/scss/components/_link.scss +6 -0
  225. package/scss/components/_markdown.scss +266 -0
  226. package/scss/components/_nav.scss +236 -154
  227. package/scss/components/_page.scss +5 -4
  228. package/scss/components/_progress.scss +2 -0
  229. package/scss/components/_spinner.scss +6 -2
  230. package/scss/components/_steps.scss +1 -1
  231. package/scss/components/_table.scss +25 -1
  232. package/scss/components/form/_color.scss +1 -0
  233. package/scss/components/form/_date-range.scss +2 -0
  234. package/scss/components/form/_date.scss +2 -0
  235. package/scss/components/form/_fieldset.scss +1 -2
  236. package/scss/components/form/_file.scss +5 -4
  237. package/scss/components/form/_group.scss +4 -0
  238. package/scss/components/form/_image.scss +7 -2
  239. package/scss/components/form/_list.scss +1 -0
  240. package/scss/components/form/_location.scss +1 -1
  241. package/scss/components/form/_text.scss +13 -0
  242. package/scss/components/form/_textarea.scss +10 -0
  243. package/scss/components/form/_transfer.scss +2 -0
  244. package/scss/themes/_common.scss +3 -0
  245. package/scss/themes/_cxd-colors.scss +56 -0
  246. package/scss/themes/_cxd-variables.scss +217 -92
  247. package/scss/themes/cxd.scss +366 -0
  248. package/sdk/ang-ie11.css +1192 -176
  249. package/sdk/ang.css +1175 -118
  250. package/sdk/antd-ie11.css +1177 -163
  251. package/sdk/antd.css +1175 -118
  252. package/sdk/charts.js +13 -13
  253. package/sdk/color-picker.js +67 -67
  254. package/sdk/cropperjs.js +2 -2
  255. package/sdk/cxd-ie11.css +2538 -1222
  256. package/sdk/cxd.css +1825 -401
  257. package/sdk/dark-ie11.css +1192 -176
  258. package/sdk/dark.css +1175 -118
  259. package/sdk/exceljs.js +1 -1
  260. package/sdk/helper.css.map +1 -1
  261. package/sdk/ie11-patch.css +1 -0
  262. package/sdk/locale/de-DE.js +3 -0
  263. package/sdk/markdown.js +69 -69
  264. package/sdk/papaparse.js +1 -1
  265. package/sdk/renderers/Form/CityDB.js +1 -1
  266. package/sdk/rest.js +22 -24
  267. package/sdk/rich-text.js +62 -64
  268. package/sdk/sdk-ie11.css +2538 -1222
  269. package/sdk/sdk.css +1825 -401
  270. package/sdk/sdk.js +1139 -1113
  271. package/sdk/thirds/hls.js/hls.js +1 -1
  272. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  273. package/sdk/tinymce.js +57 -57
  274. package/src/Schema.ts +18 -0
  275. package/src/components/Alert.tsx +3 -1
  276. package/src/components/Badge.tsx +124 -21
  277. package/src/components/Button.tsx +23 -7
  278. package/src/components/Checkbox.tsx +5 -2
  279. package/src/components/Collapse.tsx +14 -9
  280. package/src/components/DatePicker.tsx +1 -1
  281. package/src/components/DateRangePicker.tsx +23 -11
  282. package/src/components/Drawer.tsx +3 -2
  283. package/src/components/InputBox.tsx +1 -1
  284. package/src/components/Link.tsx +94 -0
  285. package/src/components/Modal.tsx +3 -2
  286. package/src/components/MonthRangePicker.tsx +10 -2
  287. package/src/components/RichText.tsx +244 -3
  288. package/src/components/Select.tsx +4 -0
  289. package/src/components/SparkLine.tsx +4 -1
  290. package/src/components/Steps.tsx +3 -3
  291. package/src/components/Toast.tsx +5 -5
  292. package/src/components/Tree.tsx +6 -8
  293. package/src/components/WithRemoteConfig.tsx +37 -2
  294. package/src/components/calendar/DaysView.tsx +2 -2
  295. package/src/components/condition-builder/Field.tsx +1 -2
  296. package/src/components/condition-builder/Value.tsx +3 -0
  297. package/src/components/condition-builder/types.ts +6 -0
  298. package/src/components/icons.tsx +15 -0
  299. package/src/factory.tsx +13 -3
  300. package/src/icons/clock.svg +1 -0
  301. package/src/icons/loading-outline.svg +4 -0
  302. package/src/icons/status-close.svg +10 -0
  303. package/src/icons/status-fail.svg +10 -0
  304. package/src/icons/status-info.svg +8 -0
  305. package/src/icons/status-success.svg +10 -0
  306. package/src/icons/status-warning.svg +8 -0
  307. package/src/locale/de-DE.ts +3 -0
  308. package/src/locale/en-US.ts +4 -1
  309. package/src/locale/zh-CN.ts +5 -2
  310. package/src/renderers/Action.tsx +71 -13
  311. package/src/renderers/CRUD.tsx +44 -59
  312. package/src/renderers/Collapse.tsx +6 -2
  313. package/src/renderers/Dialog.tsx +1 -5
  314. package/src/renderers/Drawer.tsx +0 -4
  315. package/src/renderers/DropDownButton.tsx +34 -12
  316. package/src/renderers/Form/ButtonGroupSelect.tsx +3 -0
  317. package/src/renderers/Form/Checkbox.tsx +8 -0
  318. package/src/renderers/Form/Combo.tsx +2 -3
  319. package/src/renderers/Form/Editor.tsx +19 -20
  320. package/src/renderers/Form/InputExcel.tsx +28 -3
  321. package/src/renderers/Form/InputFile.tsx +2 -1
  322. package/src/renderers/Form/InputImage.tsx +28 -10
  323. package/src/renderers/Form/InputTable.tsx +88 -9
  324. package/src/renderers/Form/Options.tsx +16 -5
  325. package/src/renderers/Form/Picker.tsx +3 -2
  326. package/src/renderers/Form/wrapControl.tsx +2 -2
  327. package/src/renderers/IFrame.tsx +2 -1
  328. package/src/renderers/Image.tsx +10 -0
  329. package/src/renderers/Json.tsx +10 -1
  330. package/src/renderers/Link.tsx +36 -11
  331. package/src/renderers/Log.tsx +16 -3
  332. package/src/renderers/Nav.tsx +340 -56
  333. package/src/renderers/Page.tsx +3 -1
  334. package/src/renderers/Service.tsx +101 -3
  335. package/src/renderers/SparkLine.tsx +5 -0
  336. package/src/renderers/Steps.tsx +12 -9
  337. package/src/renderers/Table/ColumnToggler.tsx +544 -0
  338. package/src/renderers/Table/ItemActionsWrapper.tsx +44 -0
  339. package/src/renderers/Table/TableBody.tsx +3 -2
  340. package/src/renderers/Table/TableCell.tsx +16 -1
  341. package/src/renderers/Table/TableContent.tsx +3 -1
  342. package/src/renderers/Table/index.tsx +240 -60
  343. package/src/store/crud.ts +34 -38
  344. package/src/store/modal.ts +4 -0
  345. package/src/store/service.ts +0 -19
  346. package/src/store/table.ts +103 -4
  347. package/src/utils/api.ts +24 -4
  348. package/src/utils/attachmentAdpator.ts +90 -0
  349. package/src/utils/handleAction.ts +41 -0
  350. package/src/utils/helper.ts +4 -3
  351. package/src/utils/tpl-builtin.ts +48 -17
  352. package/src/utils/validations.ts +80 -12
package/src/Schema.ts CHANGED
@@ -492,6 +492,24 @@ export interface SchemaApiObject {
492
492
  [propName: string]: any;
493
493
  };
494
494
 
495
+ /**
496
+ * 默认数据映射中的key如果带点,或者带大括号,会转成对象比如:
497
+ *
498
+ * {
499
+ * 'a.b': '123'
500
+ * }
501
+ *
502
+ * 经过数据映射后变成
503
+ * {
504
+ * a: {
505
+ * b: '123
506
+ * }
507
+ * }
508
+ *
509
+ * 如果想要关闭此功能,请设置 convertKeyToPath 为 false
510
+ */
511
+ convertKeyToPath?: boolean;
512
+
495
513
  /**
496
514
  * 用来做接口返回的数据映射。
497
515
  */
@@ -113,7 +113,9 @@ export class Alert extends React.Component<AlertProps, AlertState> {
113
113
 
114
114
  this.setState(
115
115
  {
116
- show: false
116
+ show: false,
117
+ prompt: false,
118
+ confirm: false
117
119
  },
118
120
  isConfirm ? () => this._resolve(confirmed) /*this._reject()*/ : undefined
119
121
  );
@@ -13,11 +13,11 @@ import {ClassNamesFn} from '../theme';
13
13
  * Badge 角标。
14
14
  * 文档:https://baidu.gitee.io/amis/docs/components/badge
15
15
  */
16
- export interface BadgeSchema extends BaseSchema {
16
+ export interface BadgeSchema extends Omit<BaseSchema, 'type'> {
17
17
  /**
18
18
  * 文本内容
19
19
  */
20
- text?: string;
20
+ text?: string | number;
21
21
 
22
22
  /**
23
23
  * 大小
@@ -27,13 +27,23 @@ export interface BadgeSchema extends BaseSchema {
27
27
  /**
28
28
  * 角标类型
29
29
  */
30
- mode?: 'text' | 'dot';
30
+ mode?: 'text' | 'dot' | 'ribbon';
31
+
32
+ /**
33
+ * 角标位置,优先级大于position
34
+ */
35
+ offset?: [number | string, number | string];
31
36
 
32
37
  /**
33
38
  * 角标位置
34
39
  */
35
40
  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
36
41
 
42
+ /**
43
+ * 封顶的数字值
44
+ */
45
+ overflowCount?: number;
46
+
37
47
  /**
38
48
  * 动态控制是否显示
39
49
  */
@@ -50,6 +60,11 @@ export interface BadgeSchema extends BaseSchema {
50
60
  style?: {
51
61
  [propName: string]: any;
52
62
  };
63
+
64
+ /**
65
+ * 提示类型
66
+ */
67
+ level?: 'info' | 'warning' | 'success' | 'danger' | SchemaExpression;
53
68
  }
54
69
 
55
70
  export interface BadgeProps {
@@ -65,6 +80,70 @@ export class Badge extends React.Component<BadgeProps, object> {
65
80
  super(props);
66
81
  }
67
82
 
83
+ renderBadge(
84
+ text: any,
85
+ size: number,
86
+ position: any,
87
+ offsetStyle: any,
88
+ sizeStyle: any,
89
+ animationElement: any
90
+ ) {
91
+ const {classnames: cx, badge, data} = this.props;
92
+ let {mode = 'dot', level = 'danger', style} = badge as BadgeSchema;
93
+
94
+ if (typeof level === 'string' && level[0] === '$') {
95
+ level = resolveVariable(level, data);
96
+ }
97
+
98
+ switch (mode) {
99
+ case 'dot':
100
+ return (
101
+ <span
102
+ className={cx('Badge-dot', `Badge--${position}`, `Badge--${level}`)}
103
+ style={{...offsetStyle, ...sizeStyle, ...style}}
104
+ >
105
+ {animationElement}
106
+ </span>
107
+ );
108
+ case 'text':
109
+ return (
110
+ <span
111
+ className={cx(
112
+ 'Badge-text',
113
+ `Badge--${position}`,
114
+ `Badge--${level}`
115
+ )}
116
+ style={{...offsetStyle, ...sizeStyle, ...style}}
117
+ >
118
+ {text}
119
+ {animationElement}
120
+ </span>
121
+ );
122
+ case 'ribbon':
123
+ const outSize = size * Math.sqrt(2) + 5;
124
+ return (
125
+ <div
126
+ className={cx('Badge-ribbon-out', `Badge-ribbon-out--${position}`)}
127
+ style={{width: outSize, height: outSize}}
128
+ >
129
+ <span
130
+ className={cx(
131
+ 'Badge-ribbon',
132
+ `Badge-ribbon--${position}`,
133
+ `Badge--${level}`
134
+ )}
135
+ style={{...sizeStyle, ...style}}
136
+ >
137
+ {text}
138
+ {animationElement}
139
+ </span>
140
+ </div>
141
+ );
142
+ default:
143
+ return null;
144
+ }
145
+ }
146
+
68
147
  render() {
69
148
  const badge = this.props.badge;
70
149
  if (!badge) {
@@ -79,9 +158,12 @@ export class Badge extends React.Component<BadgeProps, object> {
79
158
  let {
80
159
  mode = 'dot',
81
160
  text,
161
+ level,
82
162
  size,
83
163
  style,
164
+ offset,
84
165
  position = 'top-right',
166
+ overflowCount = 99,
85
167
  visibleOn,
86
168
  className,
87
169
  animation
@@ -99,6 +181,8 @@ export class Badge extends React.Component<BadgeProps, object> {
99
181
  if (typeof size === 'undefined') {
100
182
  if (mode === 'dot') {
101
183
  size = 6;
184
+ } else if (mode === 'ribbon') {
185
+ size = 12;
102
186
  } else {
103
187
  size = 16;
104
188
  }
@@ -111,6 +195,14 @@ export class Badge extends React.Component<BadgeProps, object> {
111
195
  height: size,
112
196
  lineHeight: size + 'px'
113
197
  };
198
+ // 当text、overflowCount都为number类型时,进行封顶值处理
199
+ if (typeof text === 'number' && typeof overflowCount === 'number') {
200
+ text = (
201
+ (text as number) > (overflowCount as number)
202
+ ? `${overflowCount}+`
203
+ : text
204
+ ) as string | number;
205
+ }
114
206
 
115
207
  if (!text) {
116
208
  isDisplay = false;
@@ -121,6 +213,25 @@ export class Badge extends React.Component<BadgeProps, object> {
121
213
  sizeStyle = {width: size, height: size};
122
214
  }
123
215
 
216
+ if (mode === 'ribbon') {
217
+ sizeStyle = {
218
+ height: size,
219
+ lineHeight: size + 'px',
220
+ fontSize: size
221
+ };
222
+ }
223
+
224
+ let offsetStyle = {};
225
+ // 如果设置了offset属性,offset在position为'top-right'的基础上进行translate定位
226
+ if (offset && offset.length) {
227
+ position = 'top-right';
228
+ const left = `calc(50% + ${parseInt(offset[0] as string, 10)}px)`;
229
+ const right = `calc(-50% + ${parseInt(offset[1] as string, 10)}px)`;
230
+ offsetStyle = {
231
+ transform: `translate(${left}, ${right})`
232
+ };
233
+ }
234
+
124
235
  let animationBackground = 'var(--danger)';
125
236
 
126
237
  if (style && style.background) {
@@ -145,24 +256,16 @@ export class Badge extends React.Component<BadgeProps, object> {
145
256
  return (
146
257
  <div className={cx('Badge', className)}>
147
258
  {children}
148
- {isDisplay ? (
149
- mode === 'dot' ? (
150
- <span
151
- className={cx('Badge-dot', `Badge--${position}`)}
152
- style={{...sizeStyle, ...style}}
153
- >
154
- {animationElement}
155
- </span>
156
- ) : (
157
- <span
158
- className={cx('Badge-text', `Badge--${position}`)}
159
- style={{...sizeStyle, ...style}}
160
- >
161
- {text}
162
- {animationElement}
163
- </span>
164
- )
165
- ) : null}
259
+ {isDisplay
260
+ ? this.renderBadge(
261
+ text,
262
+ size,
263
+ position,
264
+ offsetStyle,
265
+ sizeStyle,
266
+ animationElement
267
+ )
268
+ : null}
166
269
  </div>
167
270
  );
168
271
  }
@@ -7,7 +7,7 @@ import React from 'react';
7
7
  import TooltipWrapper, {TooltipObject, Trigger} from './TooltipWrapper';
8
8
  import {pickEventsProps} from '../utils/helper';
9
9
  import {ClassNamesFn, themeable} from '../theme';
10
-
10
+ import {Icon} from './icons';
11
11
  interface ButtonProps extends React.DOMAttributes<HTMLButtonElement> {
12
12
  id?: string;
13
13
  className?: string;
@@ -16,7 +16,7 @@ interface ButtonProps extends React.DOMAttributes<HTMLButtonElement> {
16
16
  type: 'button' | 'reset' | 'submit';
17
17
  level: string; // 'link' | 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'light' | 'dark' | 'default';
18
18
  tooltip?: string | TooltipObject;
19
- placement: 'top' | 'right' | 'bottom' | 'left';
19
+ tooltipPlacement: 'top' | 'right' | 'bottom' | 'left';
20
20
  tooltipContainer?: any;
21
21
  tooltipTrigger: Trigger | Array<Trigger>;
22
22
  tooltipRootClose: boolean;
@@ -29,6 +29,8 @@ interface ButtonProps extends React.DOMAttributes<HTMLButtonElement> {
29
29
  classnames: ClassNamesFn;
30
30
  componentClass: React.ReactType;
31
31
  overrideClassName?: boolean;
32
+ loading?: boolean;
33
+ loadingClassName?: string;
32
34
  }
33
35
 
34
36
  export class Button extends React.Component<ButtonProps> {
@@ -37,14 +39,14 @@ export class Button extends React.Component<ButtonProps> {
37
39
  | 'componentClass'
38
40
  | 'level'
39
41
  | 'type'
40
- | 'placement'
42
+ | 'tooltipPlacement'
41
43
  | 'tooltipTrigger'
42
44
  | 'tooltipRootClose'
43
45
  > = {
44
46
  componentClass: 'button',
45
47
  level: 'default',
46
48
  type: 'button',
47
- placement: 'top',
49
+ tooltipPlacement: 'top',
48
50
  tooltipTrigger: ['hover', 'focus'],
49
51
  tooltipRootClose: false
50
52
  };
@@ -64,13 +66,15 @@ export class Button extends React.Component<ButtonProps> {
64
66
  active,
65
67
  iconOnly,
66
68
  href,
69
+ loading,
70
+ loadingClassName,
67
71
  overrideClassName,
68
72
  ...rest
69
73
  } = this.props;
70
74
 
71
75
  if (href) {
72
76
  Comp = 'a';
73
- } else if (Comp === 'button' && disabled) {
77
+ } else if ((Comp === 'button' && disabled) || loading) {
74
78
  Comp = 'div';
75
79
  }
76
80
 
@@ -95,6 +99,18 @@ export class Button extends React.Component<ButtonProps> {
95
99
  )}
96
100
  disabled={disabled}
97
101
  >
102
+ {loading && !disabled ? (
103
+ <span
104
+ className={cx(
105
+ overrideClassName
106
+ ? ''
107
+ : {[`Button--loading Button--loading--${level}`]: level},
108
+ loadingClassName
109
+ )}
110
+ >
111
+ <Icon icon="loading-outline" className="icon" />
112
+ </span>
113
+ ) : null}
98
114
  {children}
99
115
  </Comp>
100
116
  );
@@ -103,7 +119,7 @@ export class Button extends React.Component<ButtonProps> {
103
119
  render() {
104
120
  const {
105
121
  tooltip,
106
- placement,
122
+ tooltipPlacement,
107
123
  tooltipContainer,
108
124
  tooltipTrigger,
109
125
  tooltipRootClose,
@@ -114,7 +130,7 @@ export class Button extends React.Component<ButtonProps> {
114
130
 
115
131
  return (
116
132
  <TooltipWrapper
117
- placement={placement}
133
+ placement={tooltipPlacement}
118
134
  tooltip={disabled ? disabledTip : tooltip}
119
135
  container={tooltipContainer}
120
136
  trigger={tooltipTrigger}
@@ -15,7 +15,7 @@ interface CheckboxProps {
15
15
  label?: string;
16
16
  labelClassName?: string;
17
17
  className?: string;
18
- onChange?: (value: any) => void;
18
+ onChange?: (value: any, shift?: boolean) => void;
19
19
  value?: any;
20
20
  inline?: boolean;
21
21
  trueValue?: any;
@@ -48,7 +48,10 @@ export class Checkbox extends React.Component<CheckboxProps, any> {
48
48
  return;
49
49
  }
50
50
 
51
- onChange(e.currentTarget.checked ? trueValue : falseValue);
51
+ onChange(
52
+ e.currentTarget.checked ? trueValue : falseValue,
53
+ (e.nativeEvent as MouseEvent).shiftKey
54
+ );
52
55
  }
53
56
 
54
57
  render() {
@@ -100,15 +100,20 @@ export class Collapse extends React.Component<CollapseProps, any> {
100
100
  if (status === ENTERING) {
101
101
  this.contentDom.offsetWidth;
102
102
  }
103
- return React.cloneElement(children as any, {
104
- ...(children as React.ReactElement).props,
105
- ref: this.contentRef,
106
- className: cx(
107
- 'Collapse-content',
108
- (children as React.ReactElement).props.className,
109
- collapseStyles[status]
110
- )
111
- });
103
+ return (
104
+ <div
105
+ className={cx('Collapse-contentWrapper', collapseStyles[status])}
106
+ ref={this.contentRef}
107
+ >
108
+ {React.cloneElement(children as any, {
109
+ ...(children as React.ReactElement).props,
110
+ className: cx(
111
+ 'Collapse-content',
112
+ (children as React.ReactElement).props.className
113
+ )
114
+ })}
115
+ </div>
116
+ );
112
117
  }}
113
118
  </Transition>
114
119
  );
@@ -618,7 +618,7 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
618
618
  ) : null}
619
619
 
620
620
  <a className={cx(`DatePicker-toggler`)}>
621
- <Icon icon="calendar" className="icon" />
621
+ <Icon icon="clock" className="icon" />
622
622
  </a>
623
623
 
624
624
  {isOpened ? (
@@ -438,12 +438,17 @@ export class DateRangePicker extends React.Component<
438
438
  }
439
439
 
440
440
  if (minDate && newValue && newValue.isBefore(minDate, 'second')) {
441
- newValue = minDate
441
+ newValue = minDate;
442
442
  }
443
443
 
444
444
  this.setState(
445
445
  {
446
- startDate: this.filterDate(newValue, startDate || minDate, timeFormat, 'start')
446
+ startDate: this.filterDate(
447
+ newValue,
448
+ startDate || minDate,
449
+ timeFormat,
450
+ 'start'
451
+ )
447
452
  },
448
453
  () => {
449
454
  embed && this.confirm();
@@ -479,7 +484,12 @@ export class DateRangePicker extends React.Component<
479
484
 
480
485
  this.setState(
481
486
  {
482
- endDate: this.filterDate(newValue, endDate || maxDate, timeFormat, 'end')
487
+ endDate: this.filterDate(
488
+ newValue,
489
+ endDate || maxDate,
490
+ timeFormat,
491
+ 'end'
492
+ )
483
493
  },
484
494
  () => {
485
495
  embed && this.confirm();
@@ -492,12 +502,14 @@ export class DateRangePicker extends React.Component<
492
502
  const now = moment();
493
503
  this.setState(
494
504
  {
495
- startDate: minDate && minDate.isValid()
496
- ? moment.max(range.startDate(now.clone()), minDate)
497
- : range.startDate(now.clone()),
498
- endDate: maxDate && maxDate.isValid()
499
- ? moment.min(maxDate, range.endDate(now.clone()))
500
- : range.endDate(now.clone())
505
+ startDate:
506
+ minDate && minDate.isValid()
507
+ ? moment.max(range.startDate(now.clone()), minDate)
508
+ : range.startDate(now.clone()),
509
+ endDate:
510
+ maxDate && maxDate.isValid()
511
+ ? moment.min(maxDate, range.endDate(now.clone()))
512
+ : range.endDate(now.clone())
501
513
  },
502
514
  closeOnSelect ? this.confirm : noop
503
515
  );
@@ -797,7 +809,7 @@ export class DateRangePicker extends React.Component<
797
809
  {
798
810
  'is-disabled': disabled,
799
811
  'is-focused': isFocused,
800
- [`${ns}DateRangePicker--border${ucFirst(borderMode)}`]: borderMode,
812
+ [`${ns}DateRangePicker--border${ucFirst(borderMode)}`]: borderMode
801
813
  },
802
814
  className
803
815
  )}
@@ -821,7 +833,7 @@ export class DateRangePicker extends React.Component<
821
833
  ) : null}
822
834
 
823
835
  <a className={`${ns}DateRangePicker-toggler`}>
824
- <Icon icon="calendar" className="icon" />
836
+ <Icon icon="clock" className="icon" />
825
837
  </a>
826
838
 
827
839
  {isOpened ? (
@@ -8,7 +8,8 @@ import React from 'react';
8
8
  import Transition, {
9
9
  ENTERED,
10
10
  ENTERING,
11
- EXITING
11
+ EXITING,
12
+ EXITED
12
13
  } from 'react-transition-group/Transition';
13
14
  import Portal from 'react-overlays/Portal';
14
15
  import {Icon} from './icons';
@@ -230,7 +231,7 @@ export class Drawer extends React.Component<DrawerProps, DrawerState> {
230
231
  >
231
232
  <Icon icon="close" className="icon" />
232
233
  </a>
233
- {children}
234
+ {status === EXITED ? null : children}
234
235
  </div>
235
236
  </div>
236
237
  );
@@ -37,7 +37,7 @@ export class InputBox extends React.Component<InputBoxProps, InputBoxState> {
37
37
  clearValue(e: any) {
38
38
  e.preventDefault();
39
39
 
40
- const onClear = this.props.onChange;
40
+ const onClear = this.props.onClear;
41
41
  const onChange = this.props.onChange;
42
42
  onClear?.(e);
43
43
  onChange?.('');
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import {RendererProps} from '../factory';
3
+ import {BaseSchema, SchemaTpl} from '../Schema';
4
+ import {getPropValue} from '../utils/helper';
5
+ import {filter} from '../utils/tpl';
6
+ import {themeable} from '../theme';
7
+ import {autobind} from '../utils/helper';
8
+
9
+ export interface LinkSchema extends BaseSchema {
10
+ /**
11
+ * 是否新窗口打开。
12
+ */
13
+ blank?: boolean;
14
+
15
+ /**
16
+ * 链接内容,如果不配置将显示链接地址。
17
+ */
18
+ body?: SchemaTpl;
19
+
20
+ /**
21
+ * 禁用
22
+ */
23
+ disabled?: boolean;
24
+
25
+ /**
26
+ * 图标
27
+ */
28
+ icon?: string;
29
+
30
+ /**
31
+ * 图标位置
32
+ */
33
+ position?: string;
34
+ }
35
+
36
+ export interface LinkProps
37
+ extends RendererProps,
38
+ Omit<LinkSchema, 'type' | 'className'> {}
39
+
40
+ export class Link extends React.Component<LinkProps, object> {
41
+ constructor(props: LinkProps) {
42
+ super(props);
43
+ }
44
+
45
+ @autobind
46
+ aClick(e: React.MouseEvent<any>) {
47
+ const {disabled} = this.props;
48
+ if (disabled) {
49
+ e.preventDefault();
50
+ e.stopPropagation();
51
+ }
52
+ }
53
+
54
+ render() {
55
+ const {
56
+ className,
57
+ body,
58
+ href,
59
+ classnames: cx,
60
+ blank,
61
+ disabled,
62
+ htmlTarget,
63
+ data,
64
+ title,
65
+ icon,
66
+ position
67
+ } = this.props;
68
+
69
+ let value = getPropValue(this.props);
70
+ const finnalHref = href ? filter(href, data, '| raw') : '';
71
+
72
+ return (
73
+ <a
74
+ href={finnalHref || value}
75
+ target={htmlTarget || (blank ? '_blank' : '_self')}
76
+ className={cx(
77
+ `Link`,
78
+ {
79
+ 'is-disabled': disabled
80
+ },
81
+ className
82
+ )}
83
+ title={title}
84
+ onClick={this.aClick}
85
+ >
86
+ <i className={icon} style={{display: position !== 'right' ? 'inline-block' : 'none' }} />
87
+ {body}
88
+ <i className={icon} style={{display: position !== 'right' ? 'none' : 'inline-block' }} />
89
+ </a>
90
+ );
91
+ }
92
+ }
93
+
94
+ export default themeable(Link);
@@ -8,7 +8,8 @@ import React from 'react';
8
8
  import Transition, {
9
9
  ENTERED,
10
10
  ENTERING,
11
- EXITING
11
+ EXITING,
12
+ EXITED
12
13
  } from 'react-transition-group/Transition';
13
14
  import Portal from 'react-overlays/Portal';
14
15
  import {current, addModal, removeModal} from './ModalManager';
@@ -264,7 +265,7 @@ export class Modal extends React.Component<ModalProps, ModalState> {
264
265
  fadeStyles[status]
265
266
  )}
266
267
  >
267
- {children}
268
+ {status === EXITED ? null : children}
268
269
  </div>
269
270
  </div>
270
271
  </Portal>
@@ -440,7 +440,15 @@ export class MonthRangePicker extends React.Component<
440
440
  }
441
441
 
442
442
  renderCalendar() {
443
- const {classPrefix: ns, classnames: cx, locale, embed, ranges, inputFormat, timeFormat} = this.props;
443
+ const {
444
+ classPrefix: ns,
445
+ classnames: cx,
446
+ locale,
447
+ embed,
448
+ ranges,
449
+ inputFormat,
450
+ timeFormat
451
+ } = this.props;
444
452
  const __ = this.props.translate;
445
453
  const viewMode: 'months' = 'months';
446
454
  const dateFormat = 'YYYY-MM';
@@ -592,7 +600,7 @@ export class MonthRangePicker extends React.Component<
592
600
  ) : null}
593
601
 
594
602
  <a className={`${ns}DateRangePicker-toggler`}>
595
- <Icon icon="calendar" className="icon" />
603
+ <Icon icon="clock" className="icon" />
596
604
  </a>
597
605
 
598
606
  {isOpened ? (