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
@@ -12,6 +12,8 @@ import Transition, {
12
12
  EXITING
13
13
  } from 'react-transition-group/Transition';
14
14
  import {autobind} from '../utils/helper';
15
+ import {isClickOnInput} from '../utils/helper';
16
+ import {TranslateFn} from '../locale';
15
17
 
16
18
  const collapseStyles: {
17
19
  [propName: string]: string;
@@ -22,24 +24,87 @@ const collapseStyles: {
22
24
  };
23
25
 
24
26
  export interface CollapseProps {
25
- show?: boolean;
27
+ key?: string;
28
+ id?: string;
26
29
  mountOnEnter?: boolean;
27
30
  unmountOnExit?: boolean;
28
31
  className?: string;
29
32
  classPrefix: string;
30
33
  classnames: ClassNamesFn;
34
+ headerPosition?: 'top' | 'bottom';
35
+ header?: React.ReactElement;
36
+ body: any;
37
+ bodyClassName?: string;
38
+ disabled?: boolean;
39
+ collapsable?: boolean;
40
+ collapsed?: boolean;
41
+ showArrow?: boolean;
42
+ expandIcon?: React.ReactElement | null;
43
+ headingClassName?: string;
44
+ collapseHeader?: React.ReactElement | null;
45
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'base';
46
+ onCollapse?: (item: any, collapsed: boolean) => void;
47
+ wrapperComponent?: any;
48
+ headingComponent?: any;
49
+ translate?: TranslateFn;
50
+ propsUpdate?: boolean;
31
51
  }
32
52
 
33
- export class Collapse extends React.Component<CollapseProps, any> {
34
- static defaultProps: Pick<
35
- CollapseProps,
36
- 'show' | 'mountOnEnter' | 'unmountOnExit'
37
- > = {
38
- show: false,
53
+ export interface CollapseState {
54
+ collapsed: boolean;
55
+ }
56
+
57
+ export class Collapse extends React.Component<CollapseProps, CollapseState> {
58
+
59
+ static defaultProps: Partial<CollapseProps> = {
39
60
  mountOnEnter: false,
40
- unmountOnExit: false
61
+ unmountOnExit: false,
62
+ headerPosition: 'top',
63
+ wrapperComponent: 'div',
64
+ headingComponent: 'div',
65
+ className: '',
66
+ headingClassName: '',
67
+ bodyClassName: '',
68
+ collapsable: true,
69
+ disabled: false,
70
+ showArrow: true,
71
+ propsUpdate: false
72
+ };
73
+
74
+ state: CollapseState = {
75
+ collapsed: false
41
76
  };
42
77
 
78
+ constructor(props: CollapseProps) {
79
+ super(props);
80
+
81
+ this.toggleCollapsed = this.toggleCollapsed.bind(this);
82
+ this.state.collapsed = !!props.collapsed;
83
+ }
84
+
85
+ static getDerivedStateFromProps(nextProps: CollapseProps, preState: CollapseState) {
86
+ if (nextProps.propsUpdate && nextProps.collapsed !== preState.collapsed) {
87
+ return {
88
+ collapsed: !!nextProps.collapsed
89
+ };
90
+ }
91
+ return null;
92
+ }
93
+
94
+ toggleCollapsed(e: React.MouseEvent<HTMLElement>) {
95
+ if (isClickOnInput(e)) {
96
+ return;
97
+ }
98
+ const props = this.props;
99
+ if (props.disabled || props.collapsable === false) {
100
+ return;
101
+ }
102
+ props.onCollapse && props.onCollapse(props, !this.state.collapsed);
103
+ this.setState({
104
+ collapsed: !this.state.collapsed
105
+ });
106
+ }
107
+
43
108
  contentDom: any;
44
109
  contentRef = (ref: any) => (this.contentDom = ref);
45
110
 
@@ -77,18 +142,54 @@ export class Collapse extends React.Component<CollapseProps, any> {
77
142
 
78
143
  render() {
79
144
  const {
80
- show,
81
- children,
82
145
  classnames: cx,
83
146
  mountOnEnter,
84
- unmountOnExit
147
+ unmountOnExit,
148
+ classPrefix: ns,
149
+ size,
150
+ wrapperComponent: WrapperComponent,
151
+ headingComponent: HeadingComponent,
152
+ className,
153
+ headingClassName,
154
+ headerPosition,
155
+ collapseHeader,
156
+ header,
157
+ body,
158
+ bodyClassName,
159
+ collapsable,
160
+ translate: __,
161
+ showArrow,
162
+ expandIcon,
163
+ disabled,
164
+ children
85
165
  } = this.props;
86
166
 
87
- return (
167
+ const finalHeader = this.state.collapsed ? header : collapseHeader || header;
168
+
169
+ let dom = [
170
+ finalHeader ? (
171
+ <HeadingComponent
172
+ key="header"
173
+ onClick={this.toggleCollapsed}
174
+ className={cx(`Collapse-header`, headingClassName)}
175
+ >
176
+ {showArrow && collapsable
177
+ ? expandIcon
178
+ ? React.cloneElement(expandIcon, {
179
+ ...expandIcon.props,
180
+ className: cx('Collapse-icon-tranform')
181
+ })
182
+ : <span className={cx('Collapse-arrow')} />
183
+ : ''}
184
+ {finalHeader}
185
+ </HeadingComponent>
186
+ ) : null,
187
+
88
188
  <Transition
189
+ key="body"
89
190
  mountOnEnter={mountOnEnter}
90
191
  unmountOnExit={unmountOnExit}
91
- in={show}
192
+ in={!this.state.collapsed}
92
193
  timeout={300}
93
194
  onEnter={this.handleEnter}
94
195
  onEntering={this.handleEntering}
@@ -105,17 +206,35 @@ export class Collapse extends React.Component<CollapseProps, any> {
105
206
  className={cx('Collapse-contentWrapper', collapseStyles[status])}
106
207
  ref={this.contentRef}
107
208
  >
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
- })}
209
+ <div className={cx('Collapse-body', bodyClassName)}>
210
+ <div className={cx('Collapse-content')}>{body || children}</div>
211
+ </div>
115
212
  </div>
116
213
  );
117
214
  }}
118
215
  </Transition>
216
+
217
+ ];
218
+
219
+ if (headerPosition === 'bottom') {
220
+ dom.reverse();
221
+ }
222
+
223
+ return (
224
+ <WrapperComponent
225
+ className={cx(
226
+ `Collapse`,
227
+ {
228
+ 'is-active': !this.state.collapsed,
229
+ [`Collapse--${size}`]: size,
230
+ 'Collapse--disabled': disabled || collapsable === false,
231
+ 'Collapse--title-bottom': headerPosition === 'bottom'
232
+ },
233
+ className
234
+ )}
235
+ >
236
+ {dom}
237
+ </WrapperComponent>
119
238
  );
120
239
  }
121
240
  }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @file CollapseGroup
3
+ * @description 折叠面板group
4
+ * @author hongyang03
5
+ */
6
+
7
+ import React from 'react';
8
+ import {CollapseProps} from '../renderers/Collapse';
9
+ import {SchemaNode} from '../types';
10
+ import {ClassNamesFn, themeable} from '../theme';
11
+
12
+ export interface CollapseGroupProps {
13
+ defaultActiveKey?: Array<string | number | never> | string | number;
14
+ accordion?: boolean;
15
+ expandIcon?: SchemaNode;
16
+ expandIconPosition?: 'left' | 'right';
17
+ body?: Array<React.ReactElement>;
18
+ className?: string;
19
+ classnames: ClassNamesFn;
20
+ classPrefix: string;
21
+ }
22
+
23
+ export interface CollapseGroupState {
24
+ activeKey: Array<string | number | never>;
25
+ }
26
+
27
+ class CollapseGroup extends React.Component<
28
+ CollapseGroupProps,
29
+ CollapseGroupState
30
+ > {
31
+
32
+ static defaultProps: Partial<CollapseGroupProps> = {
33
+ className: '',
34
+ accordion: false,
35
+ expandIconPosition: 'left'
36
+ };
37
+
38
+ constructor(props: CollapseGroupProps) {
39
+ super(props);
40
+
41
+ // 传入的activeKey会被自动转换为defaultActiveKey
42
+ let activeKey = props.defaultActiveKey;
43
+ if (!Array.isArray(activeKey)) {
44
+ activeKey = activeKey ? [activeKey] : [];
45
+ }
46
+ if (props.accordion) {
47
+ // 手风琴模式下只展开第一个元素
48
+ activeKey = activeKey.length ? [activeKey[0]] : [];
49
+ }
50
+
51
+ this.state = {
52
+ activeKey: activeKey.map((key: number | string) => String(key))
53
+ };
54
+ }
55
+
56
+ collapseChange(item: CollapseProps, collapsed: boolean) {
57
+ let activeKey = this.state.activeKey;
58
+ if (collapsed) {
59
+ if (this.props.accordion) {
60
+ activeKey = [];
61
+ }
62
+ else {
63
+ for(let i = 0; i < activeKey.length; i++) {
64
+ if (activeKey[i] === item.id) {
65
+ activeKey.splice(i, 1);
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ else {
72
+ if (this.props.accordion) {
73
+ activeKey = [item.id];
74
+ }
75
+ else {
76
+ activeKey.push(item.id);
77
+ }
78
+ }
79
+ this.setState({
80
+ activeKey
81
+ });
82
+ }
83
+
84
+ getItems = (children: React.ReactNode) => {
85
+ if (!Array.isArray(children)) {
86
+ return children;
87
+ }
88
+
89
+ return children.map((child: React.ReactElement, index: number) => {
90
+ let props = child.props;
91
+ const id = props.schema.key || String(index);
92
+ const collapsed = this.state.activeKey.indexOf(id) === -1;
93
+
94
+ return React.cloneElement(child as any, {
95
+ ...props,
96
+ key: id,
97
+ id,
98
+ collapsed,
99
+ expandIcon: this.props.expandIcon,
100
+ propsUpdate: true,
101
+ onCollapse: (item: CollapseProps, collapsed: boolean) => this.collapseChange(item, collapsed)
102
+ });
103
+ });
104
+ };
105
+
106
+ render() {
107
+ const {
108
+ classnames: cx,
109
+ className,
110
+ expandIconPosition,
111
+ children
112
+ } = this.props;
113
+
114
+ return (
115
+ <div
116
+ className={cx(
117
+ `CollapseGroup`,
118
+ {
119
+ 'icon-position-right': expandIconPosition === 'right',
120
+ },
121
+ className
122
+ )}
123
+ >
124
+ {this.getItems(children)}
125
+ </div>
126
+ );
127
+ }
128
+ }
129
+
130
+ export default themeable(CollapseGroup);
@@ -12,9 +12,11 @@ import Overlay from './Overlay';
12
12
  import {uncontrollable} from 'uncontrollable';
13
13
  import PopOver from './PopOver';
14
14
  import {ClassNamesFn, themeable, ThemeProps} from '../theme';
15
- import {autobind} from '../utils/helper';
15
+ import {autobind, isObject} from '../utils/helper';
16
16
  import {localeable, LocaleProps} from '../locale';
17
17
 
18
+ export type PresetColor = {color: string; title: string} | string;
19
+
18
20
  export interface ColorProps extends LocaleProps, ThemeProps {
19
21
  placeholder?: string;
20
22
  format: string;
@@ -27,7 +29,7 @@ export interface ColorProps extends LocaleProps, ThemeProps {
27
29
  placement?: string;
28
30
  value?: any;
29
31
  onChange: (value: any) => void;
30
- presetColors?: string[];
32
+ presetColors?: PresetColor[];
31
33
  resetValue?: string;
32
34
  allowCustomColor?: boolean;
33
35
  }
@@ -229,11 +231,20 @@ export class ColorControl extends React.PureComponent<
229
231
  `ColorPicker`,
230
232
  {
231
233
  'is-disabled': disabled,
232
- 'is-focused': isFocused
234
+ 'is-focused': isFocused,
235
+ 'is-opened': isOpened
233
236
  },
234
237
  className
235
238
  )}
236
239
  >
240
+ <span onClick={this.handleClick} className={cx('ColorPicker-preview')}>
241
+ <i
242
+ ref={this.preview}
243
+ className={`${ns}ColorPicker-previewIcon`}
244
+ style={{background: this.state.inputValue || '#ccc'}}
245
+ />
246
+ </span>
247
+
237
248
  <input
238
249
  ref={this.input}
239
250
  type="text"
@@ -255,12 +266,8 @@ export class ColorControl extends React.PureComponent<
255
266
  </a>
256
267
  ) : null}
257
268
 
258
- <span onClick={this.handleClick} className={cx('ColorPicker-preview')}>
259
- <i
260
- ref={this.preview}
261
- className={`${ns}ColorPicker-previewIcon`}
262
- style={{background: this.state.inputValue || '#ccc'}}
263
- />
269
+ <span className={cx('ColorPicker-arrow')}>
270
+ <Icon icon="caret" className="icon" onClick={this.handleClick} />
264
271
  </span>
265
272
 
266
273
  {isOpened ? (
@@ -280,6 +287,7 @@ export class ColorControl extends React.PureComponent<
280
287
  >
281
288
  {allowCustomColor ? (
282
289
  <SketchPicker
290
+ styles={{}}
283
291
  disableAlpha={!!~['rgb', 'hex'].indexOf(format as string)}
284
292
  color={value}
285
293
  presetColors={presetColors}
@@ -288,7 +296,21 @@ export class ColorControl extends React.PureComponent<
288
296
  ) : (
289
297
  <GithubPicker
290
298
  color={value}
291
- colors={presetColors}
299
+ colors={
300
+ Array.isArray(presetColors)
301
+ ? (presetColors
302
+ .filter(
303
+ item => typeof item === 'string' || isObject(item)
304
+ )
305
+ .map(item =>
306
+ typeof item === 'string'
307
+ ? item
308
+ : isObject(item)
309
+ ? item?.color
310
+ : item
311
+ ) as string[])
312
+ : undefined
313
+ }
292
314
  onChangeComplete={this.handleChange}
293
315
  />
294
316
  )}
@@ -225,12 +225,14 @@ export class Drawer extends React.Component<DrawerProps, DrawerState> {
225
225
  fadeStyles[status]
226
226
  )}
227
227
  >
228
- <a
229
- onClick={disabled ? undefined : onHide}
230
- className={`${ns}Drawer-close`}
231
- >
232
- <Icon icon="close" className="icon" />
233
- </a>
228
+ {show ? (
229
+ <a
230
+ onClick={disabled ? undefined : onHide}
231
+ className={`${ns}Drawer-close`}
232
+ >
233
+ <Icon icon="close" className="icon" />
234
+ </a>
235
+ ) : null}
234
236
  {status === EXITED ? null : children}
235
237
  </div>
236
238
  </div>
@@ -0,0 +1,233 @@
1
+ /**
2
+ * @file GridNav
3
+ * @description 金刚位宫格导航 参考react-vant
4
+ */
5
+
6
+ import React, {useMemo} from 'react';
7
+ import {ClassNamesFn} from '../theme';
8
+ import {Badge, BadgeProps} from './Badge';
9
+
10
+ export type GridNavDirection = 'horizontal' | 'vertical';
11
+
12
+ export interface GridNavProps {
13
+ /** 是否将格子固定为正方形 */
14
+ square?: boolean;
15
+ /** 是否将格子内容居中显示 */
16
+ center?: boolean;
17
+ /** 是否显示边框 */
18
+ border?: boolean;
19
+ /** 格子之间的间距,默认单位为`px` */
20
+ gutter?: number;
21
+ /** 是否调换图标和文本的位置 */
22
+ reverse?: boolean;
23
+ /** 图标占比,默认单位为`%` */
24
+ iconRatio?: number;
25
+ /** 格子内容排列的方向,可选值为 `horizontal` */
26
+ direction?: GridNavDirection;
27
+ /** 列数 */
28
+ columnNum?: number;
29
+ className?: string;
30
+ itemClassName?: string;
31
+ classnames: ClassNamesFn;
32
+ style?: React.CSSProperties;
33
+ }
34
+
35
+ export interface GridNavItemProps {
36
+ /** 图标右上角徽标 */
37
+ badge?: BadgeProps;
38
+ /** 文字 */
39
+ text?: string | React.ReactNode;
40
+ /** 图标名称或图片链接 */
41
+ icon?: string | React.ReactNode;
42
+ className?: string;
43
+ style?: React.CSSProperties;
44
+ contentClassName?: string;
45
+ contentStyle?: React.CSSProperties;
46
+ children?: React.ReactNode;
47
+ classnames: ClassNamesFn;
48
+ onClick?: (event: React.MouseEvent) => void;
49
+ }
50
+
51
+ type InternalProps = {
52
+ parent?: GridNavProps;
53
+ index?: number;
54
+ };
55
+
56
+ function addUnit(value?: string | number): string | undefined {
57
+ if (value === undefined || value === null) {
58
+ return undefined;
59
+ }
60
+ value = String(value);
61
+ return /^\d+(\.\d+)?$/.test(value) ? `${value}px` : value;
62
+ }
63
+
64
+ export const GridNavItem: React.FC<GridNavItemProps & InternalProps> = ({
65
+ children,
66
+ classnames: cx,
67
+ className,
68
+ style,
69
+ ...props
70
+ }) => {
71
+ const {index = 0, parent} = props;
72
+ if (!parent) {
73
+ if (process.env.NODE_ENV !== 'production') {
74
+ // eslint-disable-next-line no-console
75
+ console.error(
76
+ '[React Vant] <GridNavItem> must be a child component of <GridNav>.'
77
+ );
78
+ }
79
+ return null;
80
+ }
81
+
82
+ const rootStyle = useMemo(() => {
83
+ const {square, gutter, columnNum = 4} = parent;
84
+ const percent = `${100 / +columnNum}%`;
85
+ const internalStyle: React.CSSProperties = {
86
+ ...style,
87
+ flexBasis: percent
88
+ };
89
+
90
+ if (square) {
91
+ internalStyle.paddingTop = percent;
92
+ } else if (gutter) {
93
+ const gutterValue = addUnit(gutter);
94
+ internalStyle.paddingRight = gutterValue;
95
+
96
+ if (index >= columnNum) {
97
+ internalStyle.marginTop = gutterValue;
98
+ }
99
+ }
100
+
101
+ return internalStyle;
102
+ }, [parent.style, parent.gutter, parent.columnNum]);
103
+
104
+ const contentStyle = useMemo(() => {
105
+ const {square, gutter} = parent;
106
+
107
+ if (square && gutter) {
108
+ const gutterValue = addUnit(gutter);
109
+ return {
110
+ ...props.contentStyle,
111
+ right: gutterValue,
112
+ bottom: gutterValue,
113
+ height: 'auto'
114
+ };
115
+ }
116
+ return props.contentStyle;
117
+ }, [parent.gutter, parent.columnNum, props.contentStyle]);
118
+
119
+ const renderIcon = () => {
120
+ const ratio = parent.iconRatio || 60;
121
+ if (typeof props.icon === 'string') {
122
+ if (props.badge) {
123
+ return (
124
+ <Badge {...props.badge}>
125
+ <div className={cx('GridNavItem-image')}>
126
+ <img src={props.icon} style={{width: ratio + '%'}} />
127
+ </div>
128
+ </Badge>
129
+ );
130
+ }
131
+ return (
132
+ <div className={cx('GridNavItem-image')}>
133
+ <img src={props.icon} style={{width: ratio + '%'}} />
134
+ </div>
135
+ );
136
+ }
137
+
138
+ if (React.isValidElement(props.icon)) {
139
+ return <Badge {...(props.badge as BadgeProps)}>{props.icon}</Badge>;
140
+ }
141
+
142
+ return null;
143
+ };
144
+
145
+ const renderText = () => {
146
+ if (React.isValidElement(props.text)) {
147
+ return props.text;
148
+ }
149
+ if (props.text) {
150
+ return <span className={cx('GridNavItem-text')}>{props.text}</span>;
151
+ }
152
+ return null;
153
+ };
154
+
155
+ const renderContent = () => {
156
+ if (children) {
157
+ return children;
158
+ }
159
+ return (
160
+ <>
161
+ {renderIcon()}
162
+ {renderText()}
163
+ </>
164
+ );
165
+ };
166
+
167
+ const {center, border, square, gutter, reverse, direction} = parent;
168
+
169
+ const prefix = 'GridNavItem-content';
170
+ const classes = cx(`${prefix} ${props.contentClassName || ''}`, {
171
+ [`${prefix}--${direction}`]: !!direction,
172
+ [`${prefix}--center`]: center,
173
+ [`${prefix}--square`]: square,
174
+ [`${prefix}--reverse`]: reverse,
175
+ [`${prefix}--clickable`]: !!props.onClick,
176
+ [`${prefix}--surround`]: border && gutter,
177
+ [`${prefix}--border u-hairline`]: border
178
+ });
179
+
180
+ return (
181
+ <div
182
+ className={cx(className, {'GridNavItem--square': square})}
183
+ style={rootStyle}
184
+ >
185
+ <div
186
+ role={props.onClick ? 'button' : undefined}
187
+ className={classes}
188
+ style={contentStyle}
189
+ onClick={props.onClick}
190
+ >
191
+ {renderContent()}
192
+ </div>
193
+ </div>
194
+ );
195
+ };
196
+
197
+ const GridNav: React.FC<GridNavProps> = ({
198
+ children,
199
+ className,
200
+ classnames: cx,
201
+ itemClassName,
202
+ style,
203
+ ...props
204
+ }) => {
205
+ return (
206
+ <div
207
+ style={{paddingLeft: addUnit(props.gutter), ...style}}
208
+ className={cx(`GridNav ${className || ''}`, {
209
+ 'GridNav-top u-hairline': props.border && !props.gutter
210
+ })}
211
+ >
212
+ {React.Children.toArray(children)
213
+ .filter(Boolean)
214
+ .map((child: React.ReactElement, index: number) =>
215
+ React.cloneElement(child, {
216
+ index,
217
+ parent: props,
218
+ className: itemClassName,
219
+ classnames: cx
220
+ })
221
+ )}
222
+ </div>
223
+ );
224
+ };
225
+
226
+ GridNav.defaultProps = {
227
+ direction: 'vertical',
228
+ center: true,
229
+ border: true,
230
+ columnNum: 4
231
+ };
232
+
233
+ export default GridNav;