@canlooks/can-ui 0.0.70 → 0.0.71

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 (328) hide show
  1. package/dist/cjs/components/actionSheet/actionSheet.js +9 -4
  2. package/dist/cjs/components/alert/alert.style.d.ts +2 -2
  3. package/dist/cjs/components/app/appDialog.js +28 -24
  4. package/dist/cjs/components/autocomplete/autocomplete.js +21 -27
  5. package/dist/cjs/components/avatar/avatar.d.ts +2 -2
  6. package/dist/cjs/components/avatar/avatar.js +6 -5
  7. package/dist/cjs/components/avatar/avatarGroup.js +1 -1
  8. package/dist/cjs/components/bubbleConfirm/bubbleConfirm.js +9 -2
  9. package/dist/cjs/components/bubbleConfirm/bubbleConfirm.style.d.ts +1 -1
  10. package/dist/cjs/components/cascade/cascade.d.ts +2 -2
  11. package/dist/cjs/components/cascade/cascade.js +33 -21
  12. package/dist/cjs/components/cascade/cascadePanel.js +23 -13
  13. package/dist/cjs/components/checkboxBase/checkboxBase.d.ts +2 -2
  14. package/dist/cjs/components/checkboxBase/checkboxBase.js +9 -2
  15. package/dist/cjs/components/checkboxBase/checkboxBase.style.d.ts +1 -1
  16. package/dist/cjs/components/checkboxBaseGroup/checkboxBaseGroup.js +2 -2
  17. package/dist/cjs/components/clickAway/clickAway.d.ts +27 -27
  18. package/dist/cjs/components/colorPicker/colorPicker.d.ts +2 -2
  19. package/dist/cjs/components/colorPicker/colorPicker.js +2 -2
  20. package/dist/cjs/components/counter/counter.js +9 -10
  21. package/dist/cjs/components/curd/curd.d.ts +10 -12
  22. package/dist/cjs/components/curd/curd.js +38 -33
  23. package/dist/cjs/components/curd/curd.style.d.ts +2 -1
  24. package/dist/cjs/components/curd/curd.style.js +14 -4
  25. package/dist/cjs/components/curd/curdDialog.js +2 -1
  26. package/dist/cjs/components/curd/curdFilterable.d.ts +21 -0
  27. package/dist/cjs/components/curd/{curdFilter.js → curdFilterable.js} +19 -24
  28. package/dist/cjs/components/curd/index.d.ts +1 -1
  29. package/dist/cjs/components/curd/index.js +1 -1
  30. package/dist/cjs/components/dataGrid/columnResize.js +2 -2
  31. package/dist/cjs/components/dataGrid/dataGrid.d.ts +29 -12
  32. package/dist/cjs/components/dataGrid/dataGrid.js +46 -20
  33. package/dist/cjs/components/dataGrid/dataGrid.style.d.ts +5 -3
  34. package/dist/cjs/components/dataGrid/dataGrid.style.js +38 -33
  35. package/dist/cjs/components/dataGrid/dataGridHead.d.ts +4 -1
  36. package/dist/cjs/components/dataGrid/dataGridHead.js +28 -19
  37. package/dist/cjs/components/dataGrid/dataGridRows.js +1 -1
  38. package/dist/cjs/components/dataGrid/filterBubbleContent.d.ts +19 -0
  39. package/dist/cjs/components/dataGrid/filterBubbleContent.js +42 -0
  40. package/dist/cjs/components/dateTimePicker/dateTimePicker.d.ts +2 -2
  41. package/dist/cjs/components/dateTimePicker/dateTimePicker.js +27 -9
  42. package/dist/cjs/components/dateTimePicker/dateTimePicker.style.d.ts +1 -1
  43. package/dist/cjs/components/dateTimeRangePicker/dateTimeRangePicker.d.ts +4 -3
  44. package/dist/cjs/components/dateTimeRangePicker/dateTimeRangePicker.js +45 -23
  45. package/dist/cjs/components/descriptions/descriptions.js +2 -0
  46. package/dist/cjs/components/descriptions/descriptions.style.d.ts +1 -1
  47. package/dist/cjs/components/dialog/dialog.d.ts +1 -1
  48. package/dist/cjs/components/dialog/dialog.js +2 -2
  49. package/dist/cjs/components/dialog/dialog.style.d.ts +2 -2
  50. package/dist/cjs/components/draggable/draggable.d.ts +12 -2
  51. package/dist/cjs/components/draggable/draggable.js +34 -4
  52. package/dist/cjs/components/flex/flex.d.ts +7 -4
  53. package/dist/cjs/components/flex/flex.js +3 -3
  54. package/dist/cjs/components/form/form.d.ts +10 -5
  55. package/dist/cjs/components/form/form.js +45 -9
  56. package/dist/cjs/components/form/formItem.d.ts +12 -7
  57. package/dist/cjs/components/form/formItem.js +47 -33
  58. package/dist/cjs/components/form/formRelatable.js +2 -1
  59. package/dist/cjs/components/gallery/gallery.style.d.ts +1 -1
  60. package/dist/cjs/components/gallery/imageItem.js +1 -1
  61. package/dist/cjs/components/grid/grid.d.ts +5 -5
  62. package/dist/cjs/components/grid/gridItem.d.ts +8 -7
  63. package/dist/cjs/components/grid/gridItem.js +2 -3
  64. package/dist/cjs/components/image/image.d.ts +4 -4
  65. package/dist/cjs/components/input/input.d.ts +2 -2
  66. package/dist/cjs/components/input/input.js +9 -2
  67. package/dist/cjs/components/inputBase/inputBase.d.ts +16 -11
  68. package/dist/cjs/components/inputBase/inputBase.js +23 -12
  69. package/dist/cjs/components/loading/loading.d.ts +3 -1
  70. package/dist/cjs/components/loading/loading.js +2 -2
  71. package/dist/cjs/components/loading/loading.style.js +4 -3
  72. package/dist/cjs/components/loadingIndicator/loadingIndicator.d.ts +4 -2
  73. package/dist/cjs/components/loadingIndicator/loadingIndicator.js +2 -2
  74. package/dist/cjs/components/loadingIndicator/loadingIndicator.style.d.ts +1 -1
  75. package/dist/cjs/components/loadingIndicator/loadingIndicator.style.js +1 -2
  76. package/dist/cjs/components/loadingMask/loadingMask.js +1 -1
  77. package/dist/cjs/components/menu/menu.js +1 -1
  78. package/dist/cjs/components/menuItem/menuItem.d.ts +2 -2
  79. package/dist/cjs/components/optionsBase/optionsBase.js +1 -0
  80. package/dist/cjs/components/overlayBase/overlayBase.js +9 -6
  81. package/dist/cjs/components/overlayBase/overlayBase.style.js +0 -3
  82. package/dist/cjs/components/palette/palette.style.d.ts +1 -1
  83. package/dist/cjs/components/pickerDialog/pickerDialog.js +20 -7
  84. package/dist/cjs/components/pickerDialog/pickerDialog.style.d.ts +1 -1
  85. package/dist/cjs/components/popper/popper.d.ts +5 -2
  86. package/dist/cjs/components/popper/popper.js +31 -12
  87. package/dist/cjs/components/popper/popper.style.js +1 -2
  88. package/dist/cjs/components/progress/progress.js +1 -1
  89. package/dist/cjs/components/resizable/resizable.style.d.ts +1 -1
  90. package/dist/cjs/components/segmented/segmented.style.d.ts +1 -1
  91. package/dist/cjs/components/select/select.d.ts +2 -2
  92. package/dist/cjs/components/select/select.js +44 -20
  93. package/dist/cjs/components/selectedList/selectedItem.d.ts +1 -1
  94. package/dist/cjs/components/selectedList/selectedItem.js +2 -2
  95. package/dist/cjs/components/selectionContext/selectionContext.d.ts +0 -1
  96. package/dist/cjs/components/selectionContext/selectionHook.d.ts +1 -1
  97. package/dist/cjs/components/selectionContext/selectionHook.js +2 -2
  98. package/dist/cjs/components/serialInput/index.d.ts +1 -0
  99. package/dist/cjs/components/serialInput/index.js +4 -0
  100. package/dist/cjs/components/serialInput/serialInput.d.ts +21 -0
  101. package/dist/cjs/components/serialInput/serialInput.js +58 -0
  102. package/dist/cjs/components/serialInput/serialInput.style.d.ts +6 -0
  103. package/dist/cjs/components/serialInput/serialInput.style.js +13 -0
  104. package/dist/cjs/components/skeleton/skeleton.d.ts +2 -2
  105. package/dist/cjs/components/slidableActions/slidableActionsAction.js +15 -6
  106. package/dist/cjs/components/slider/slider.d.ts +2 -2
  107. package/dist/cjs/components/slider/slider.js +15 -21
  108. package/dist/cjs/components/snackbarBase/snackbarBase.style.d.ts +1 -1
  109. package/dist/cjs/components/snackbarBase/snackbarBase.style.js +1 -3
  110. package/dist/cjs/components/sortableItem/sortableItem.js +9 -10
  111. package/dist/cjs/components/switch/switch.d.ts +2 -2
  112. package/dist/cjs/components/table/table.d.ts +3 -3
  113. package/dist/cjs/components/table/table.style.d.ts +1 -1
  114. package/dist/cjs/components/table/tableSticky.d.ts +5 -5
  115. package/dist/cjs/components/table/tableSticky.js +4 -4
  116. package/dist/cjs/components/tabs/tabs.style.d.ts +3 -3
  117. package/dist/cjs/components/tag/tag.d.ts +1 -1
  118. package/dist/cjs/components/tag/tag.js +2 -1
  119. package/dist/cjs/components/tag/tag.style.d.ts +1 -1
  120. package/dist/cjs/components/textarea/textarea.d.ts +2 -2
  121. package/dist/cjs/components/textarea/textarea.js +5 -1
  122. package/dist/cjs/components/toggleButton/toggleButton.js +1 -1
  123. package/dist/cjs/components/transfer/transfer.style.d.ts +2 -2
  124. package/dist/cjs/components/transitionBase/collapse.js +36 -14
  125. package/dist/cjs/components/transitionBase/transitionBase.js +1 -1
  126. package/dist/cjs/components/transitionBase/transitionBase.style.js +1 -1
  127. package/dist/cjs/components/transportStyle/transportStyle.d.ts +1 -1
  128. package/dist/cjs/components/transportStyle/transportStyle.js +2 -3
  129. package/dist/cjs/components/tree/tree.d.ts +17 -4
  130. package/dist/cjs/components/tree/tree.js +15 -14
  131. package/dist/cjs/components/tree/tree.style.d.ts +9 -3
  132. package/dist/cjs/components/tree/tree.style.js +135 -4
  133. package/dist/cjs/components/tree/treeDnd.d.ts +25 -0
  134. package/dist/cjs/components/tree/treeDnd.js +23 -0
  135. package/dist/cjs/components/tree/treeNode.d.ts +2 -2
  136. package/dist/cjs/components/tree/treeNode.js +94 -16
  137. package/dist/cjs/components/treeSelect/treeSelect.d.ts +2 -2
  138. package/dist/cjs/components/treeSelect/treeSelect.js +3 -3
  139. package/dist/cjs/components/upload/upload.d.ts +2 -2
  140. package/dist/cjs/components/upload/upload.js +5 -2
  141. package/dist/cjs/components/upload/upload.style.d.ts +2 -2
  142. package/dist/cjs/extensions/curd/curd.d.ts +20 -0
  143. package/dist/cjs/extensions/curd/curd.js +20 -0
  144. package/dist/cjs/extensions/documentViewer/pdfViewer.d.ts +2 -2
  145. package/dist/cjs/extensions/reactiveForm/index.d.ts +2 -0
  146. package/dist/cjs/extensions/reactiveForm/index.js +5 -0
  147. package/dist/cjs/extensions/reactiveForm/reactiveForm.d.ts +19 -0
  148. package/dist/cjs/extensions/reactiveForm/reactiveForm.js +29 -0
  149. package/dist/cjs/extensions/reactiveForm/reactiveFormItem.d.ts +7 -0
  150. package/dist/cjs/extensions/reactiveForm/reactiveFormItem.js +39 -0
  151. package/dist/cjs/index.d.ts +1 -0
  152. package/dist/cjs/index.js +1 -0
  153. package/dist/cjs/types.d.ts +2 -2
  154. package/dist/cjs/utils/curd.js +5 -2
  155. package/dist/cjs/utils/dataGrid.d.ts +3 -2
  156. package/dist/cjs/utils/hooks.js +3 -3
  157. package/dist/cjs/utils/index.d.ts +2 -2
  158. package/dist/cjs/utils/index.js +2 -2
  159. package/dist/cjs/utils/utils.d.ts +17 -9
  160. package/dist/cjs/utils/utils.js +59 -16
  161. package/dist/esm/components/actionSheet/actionSheet.js +10 -5
  162. package/dist/esm/components/alert/alert.style.d.ts +2 -2
  163. package/dist/esm/components/app/appDialog.js +28 -24
  164. package/dist/esm/components/autocomplete/autocomplete.js +22 -28
  165. package/dist/esm/components/avatar/avatar.d.ts +2 -2
  166. package/dist/esm/components/avatar/avatar.js +7 -6
  167. package/dist/esm/components/avatar/avatarGroup.js +1 -1
  168. package/dist/esm/components/bubbleConfirm/bubbleConfirm.js +10 -3
  169. package/dist/esm/components/bubbleConfirm/bubbleConfirm.style.d.ts +1 -1
  170. package/dist/esm/components/cascade/cascade.d.ts +2 -2
  171. package/dist/esm/components/cascade/cascade.js +34 -22
  172. package/dist/esm/components/cascade/cascadePanel.js +24 -14
  173. package/dist/esm/components/checkboxBase/checkboxBase.d.ts +2 -2
  174. package/dist/esm/components/checkboxBase/checkboxBase.js +10 -3
  175. package/dist/esm/components/checkboxBase/checkboxBase.style.d.ts +1 -1
  176. package/dist/esm/components/checkboxBaseGroup/checkboxBaseGroup.js +3 -3
  177. package/dist/esm/components/clickAway/clickAway.d.ts +27 -27
  178. package/dist/esm/components/colorPicker/colorPicker.d.ts +2 -2
  179. package/dist/esm/components/colorPicker/colorPicker.js +3 -3
  180. package/dist/esm/components/counter/counter.js +10 -11
  181. package/dist/esm/components/curd/curd.d.ts +10 -12
  182. package/dist/esm/components/curd/curd.js +39 -34
  183. package/dist/esm/components/curd/curd.style.d.ts +2 -1
  184. package/dist/esm/components/curd/curd.style.js +14 -4
  185. package/dist/esm/components/curd/curdDialog.js +2 -1
  186. package/dist/esm/components/curd/curdFilterable.d.ts +21 -0
  187. package/dist/esm/components/curd/{curdFilter.js → curdFilterable.js} +20 -25
  188. package/dist/esm/components/curd/index.d.ts +1 -1
  189. package/dist/esm/components/curd/index.js +1 -1
  190. package/dist/esm/components/dataGrid/columnResize.js +3 -3
  191. package/dist/esm/components/dataGrid/dataGrid.d.ts +29 -12
  192. package/dist/esm/components/dataGrid/dataGrid.js +48 -22
  193. package/dist/esm/components/dataGrid/dataGrid.style.d.ts +5 -3
  194. package/dist/esm/components/dataGrid/dataGrid.style.js +38 -33
  195. package/dist/esm/components/dataGrid/dataGridHead.d.ts +4 -1
  196. package/dist/esm/components/dataGrid/dataGridHead.js +29 -20
  197. package/dist/esm/components/dataGrid/dataGridRows.js +1 -1
  198. package/dist/esm/components/dataGrid/filterBubbleContent.d.ts +19 -0
  199. package/dist/esm/components/dataGrid/filterBubbleContent.js +39 -0
  200. package/dist/esm/components/dateTimePicker/dateTimePicker.d.ts +2 -2
  201. package/dist/esm/components/dateTimePicker/dateTimePicker.js +28 -10
  202. package/dist/esm/components/dateTimePicker/dateTimePicker.style.d.ts +1 -1
  203. package/dist/esm/components/dateTimeRangePicker/dateTimeRangePicker.d.ts +4 -3
  204. package/dist/esm/components/dateTimeRangePicker/dateTimeRangePicker.js +46 -24
  205. package/dist/esm/components/descriptions/descriptions.js +2 -0
  206. package/dist/esm/components/descriptions/descriptions.style.d.ts +1 -1
  207. package/dist/esm/components/dialog/dialog.d.ts +1 -1
  208. package/dist/esm/components/dialog/dialog.js +2 -2
  209. package/dist/esm/components/dialog/dialog.style.d.ts +2 -2
  210. package/dist/esm/components/draggable/draggable.d.ts +12 -2
  211. package/dist/esm/components/draggable/draggable.js +35 -5
  212. package/dist/esm/components/flex/flex.d.ts +7 -4
  213. package/dist/esm/components/flex/flex.js +2 -2
  214. package/dist/esm/components/form/form.d.ts +10 -5
  215. package/dist/esm/components/form/form.js +43 -9
  216. package/dist/esm/components/form/formItem.d.ts +12 -7
  217. package/dist/esm/components/form/formItem.js +49 -35
  218. package/dist/esm/components/form/formRelatable.js +3 -2
  219. package/dist/esm/components/gallery/gallery.style.d.ts +1 -1
  220. package/dist/esm/components/gallery/imageItem.js +1 -1
  221. package/dist/esm/components/grid/grid.d.ts +5 -5
  222. package/dist/esm/components/grid/gridItem.d.ts +8 -7
  223. package/dist/esm/components/grid/gridItem.js +2 -2
  224. package/dist/esm/components/image/image.d.ts +4 -4
  225. package/dist/esm/components/input/input.d.ts +2 -2
  226. package/dist/esm/components/input/input.js +10 -3
  227. package/dist/esm/components/inputBase/inputBase.d.ts +16 -11
  228. package/dist/esm/components/inputBase/inputBase.js +25 -14
  229. package/dist/esm/components/loading/loading.d.ts +3 -1
  230. package/dist/esm/components/loading/loading.js +2 -2
  231. package/dist/esm/components/loading/loading.style.js +4 -3
  232. package/dist/esm/components/loadingIndicator/loadingIndicator.d.ts +4 -2
  233. package/dist/esm/components/loadingIndicator/loadingIndicator.js +2 -2
  234. package/dist/esm/components/loadingIndicator/loadingIndicator.style.d.ts +1 -1
  235. package/dist/esm/components/loadingIndicator/loadingIndicator.style.js +1 -2
  236. package/dist/esm/components/loadingMask/loadingMask.js +1 -1
  237. package/dist/esm/components/menu/menu.js +2 -2
  238. package/dist/esm/components/menuItem/menuItem.d.ts +2 -2
  239. package/dist/esm/components/optionsBase/optionsBase.js +1 -0
  240. package/dist/esm/components/overlayBase/overlayBase.js +10 -7
  241. package/dist/esm/components/overlayBase/overlayBase.style.js +0 -3
  242. package/dist/esm/components/palette/palette.style.d.ts +1 -1
  243. package/dist/esm/components/pickerDialog/pickerDialog.js +21 -8
  244. package/dist/esm/components/pickerDialog/pickerDialog.style.d.ts +1 -1
  245. package/dist/esm/components/popper/popper.d.ts +5 -2
  246. package/dist/esm/components/popper/popper.js +31 -12
  247. package/dist/esm/components/popper/popper.style.js +1 -2
  248. package/dist/esm/components/progress/progress.js +1 -1
  249. package/dist/esm/components/resizable/resizable.style.d.ts +1 -1
  250. package/dist/esm/components/segmented/segmented.style.d.ts +1 -1
  251. package/dist/esm/components/select/select.d.ts +2 -2
  252. package/dist/esm/components/select/select.js +46 -22
  253. package/dist/esm/components/selectedList/selectedItem.d.ts +1 -1
  254. package/dist/esm/components/selectedList/selectedItem.js +2 -2
  255. package/dist/esm/components/selectionContext/selectionContext.d.ts +0 -1
  256. package/dist/esm/components/selectionContext/selectionHook.d.ts +1 -1
  257. package/dist/esm/components/selectionContext/selectionHook.js +1 -1
  258. package/dist/esm/components/serialInput/index.d.ts +1 -0
  259. package/dist/esm/components/serialInput/index.js +1 -0
  260. package/dist/esm/components/serialInput/serialInput.d.ts +21 -0
  261. package/dist/esm/components/serialInput/serialInput.js +55 -0
  262. package/dist/esm/components/serialInput/serialInput.style.d.ts +6 -0
  263. package/dist/esm/components/serialInput/serialInput.style.js +10 -0
  264. package/dist/esm/components/skeleton/skeleton.d.ts +2 -2
  265. package/dist/esm/components/slidableActions/slidableActionsAction.js +16 -7
  266. package/dist/esm/components/slider/slider.d.ts +2 -2
  267. package/dist/esm/components/slider/slider.js +16 -22
  268. package/dist/esm/components/snackbarBase/snackbarBase.style.d.ts +1 -1
  269. package/dist/esm/components/snackbarBase/snackbarBase.style.js +1 -3
  270. package/dist/esm/components/sortableItem/sortableItem.js +10 -11
  271. package/dist/esm/components/switch/switch.d.ts +2 -2
  272. package/dist/esm/components/table/table.d.ts +3 -3
  273. package/dist/esm/components/table/table.style.d.ts +1 -1
  274. package/dist/esm/components/table/tableSticky.d.ts +5 -5
  275. package/dist/esm/components/table/tableSticky.js +3 -3
  276. package/dist/esm/components/tabs/tabs.style.d.ts +3 -3
  277. package/dist/esm/components/tag/tag.d.ts +1 -1
  278. package/dist/esm/components/tag/tag.js +2 -1
  279. package/dist/esm/components/tag/tag.style.d.ts +1 -1
  280. package/dist/esm/components/textarea/textarea.d.ts +2 -2
  281. package/dist/esm/components/textarea/textarea.js +6 -2
  282. package/dist/esm/components/toggleButton/toggleButton.js +2 -2
  283. package/dist/esm/components/transfer/transfer.style.d.ts +2 -2
  284. package/dist/esm/components/transitionBase/collapse.js +38 -16
  285. package/dist/esm/components/transitionBase/transitionBase.js +1 -1
  286. package/dist/esm/components/transitionBase/transitionBase.style.js +1 -1
  287. package/dist/esm/components/transportStyle/transportStyle.d.ts +1 -1
  288. package/dist/esm/components/transportStyle/transportStyle.js +2 -2
  289. package/dist/esm/components/tree/tree.d.ts +17 -4
  290. package/dist/esm/components/tree/tree.js +17 -16
  291. package/dist/esm/components/tree/tree.style.d.ts +9 -3
  292. package/dist/esm/components/tree/tree.style.js +135 -4
  293. package/dist/esm/components/tree/treeDnd.d.ts +25 -0
  294. package/dist/esm/components/tree/treeDnd.js +19 -0
  295. package/dist/esm/components/tree/treeNode.d.ts +2 -2
  296. package/dist/esm/components/tree/treeNode.js +96 -18
  297. package/dist/esm/components/treeSelect/treeSelect.d.ts +2 -2
  298. package/dist/esm/components/treeSelect/treeSelect.js +4 -4
  299. package/dist/esm/components/upload/upload.d.ts +2 -2
  300. package/dist/esm/components/upload/upload.js +6 -3
  301. package/dist/esm/components/upload/upload.style.d.ts +2 -2
  302. package/dist/esm/extensions/curd/curd.d.ts +20 -0
  303. package/dist/esm/extensions/curd/curd.js +20 -0
  304. package/dist/esm/extensions/documentViewer/pdfViewer.d.ts +2 -2
  305. package/dist/esm/extensions/reactiveForm/index.d.ts +2 -0
  306. package/dist/esm/extensions/reactiveForm/index.js +2 -0
  307. package/dist/esm/extensions/reactiveForm/reactiveForm.d.ts +19 -0
  308. package/dist/esm/extensions/reactiveForm/reactiveForm.js +25 -0
  309. package/dist/esm/extensions/reactiveForm/reactiveFormItem.d.ts +7 -0
  310. package/dist/esm/extensions/reactiveForm/reactiveFormItem.js +36 -0
  311. package/dist/esm/index.d.ts +1 -0
  312. package/dist/esm/index.js +1 -0
  313. package/dist/esm/types.d.ts +2 -2
  314. package/dist/esm/utils/curd.js +5 -2
  315. package/dist/esm/utils/dataGrid.d.ts +3 -2
  316. package/dist/esm/utils/hooks.js +3 -3
  317. package/dist/esm/utils/index.d.ts +2 -2
  318. package/dist/esm/utils/index.js +2 -2
  319. package/dist/esm/utils/utils.d.ts +17 -9
  320. package/dist/esm/utils/utils.js +58 -16
  321. package/extensions/reactiveForm.cjs +5 -0
  322. package/extensions/reactiveForm.d.ts +1 -0
  323. package/extensions/reactiveForm.js +1 -0
  324. package/package.json +2 -1
  325. package/dist/cjs/components/curd/curdFilter.d.ts +0 -16
  326. package/dist/esm/components/curd/curdFilter.d.ts +0 -16
  327. package/documentation/bootstrap.mjs +0 -8
  328. package/documentation/vite.config.mjs +0 -18
@@ -1,4 +1,4 @@
1
- import { JSX, ReactElement, ReactNode } from 'react';
1
+ import React, { ComponentProps, ReactElement, ReactNode } from 'react';
2
2
  import { DivProps, Id, Obj, ToRequired } from '../../types';
3
3
  import { SelectionContextProps } from '../selectionContext';
4
4
  import { PaginationProps } from '../pagination';
@@ -6,9 +6,10 @@ import { TableProps } from '../table';
6
6
  import { CheckboxProps } from '../checkbox';
7
7
  import { RadioProps } from '../radio';
8
8
  import { FieldPath } from '../../utils';
9
+ import { FormProps, FormValue } from '../form';
10
+ import { FilterControlProps, FilterOptionsProps } from './filterBubbleContent';
9
11
  export type RowType = Obj;
10
- export type OrderType = 'ascend' | 'descend';
11
- export interface ColumnType<R extends RowType = RowType> extends Omit<JSX.IntrinsicElements['td'], 'key' | 'ref' | 'title' | 'children'>, Omit<JSX.IntrinsicElements['th'], 'key' | 'ref' | 'title' | 'children'> {
12
+ export interface ColumnType<R extends RowType = RowType> extends Omit<ComponentProps<'td'>, 'key' | 'ref' | 'title' | 'children'>, Omit<ComponentProps<'th'>, 'key' | 'ref' | 'title' | 'children'> {
12
13
  title?: ReactNode;
13
14
  /** 若不指定key,默认使用{@link field}作为key */
14
15
  key?: string | number;
@@ -18,15 +19,24 @@ export interface ColumnType<R extends RowType = RowType> extends Omit<JSX.Intrin
18
19
  /** 指定children后,下列属性均不生效 */
19
20
  field?: FieldPath;
20
21
  render?(row: R, index?: number, rows?: R[]): ReactNode;
21
- /** 指定为true时表示使用服务端排序,组件只做样式处理,不做数据排序处理;本地排序需指定 “正序” 的排序方法,倒序会自动处理 */
22
+ /**
23
+ * @enum true 使用服务端排序,组件只做样式处理,不做数据排序处理;
24
+ * @enum function 本地排序需指定 `正序` 的排序方法,倒序会自动处理
25
+ */
22
26
  sorter?: boolean | ((a: R, b: R) => number);
27
+ /**
28
+ * @enum true 不会弹出气泡框,需配合{@link DataGridBaseProps.onFilterClick}实现筛选逻辑
29
+ * @enum FilterOptionsProps 传递至`OptionsBase`组件
30
+ * @enum FilterControlProps 自定义渲染气泡内容
31
+ */
32
+ filter?: boolean | FilterOptionsProps | FilterControlProps;
23
33
  /** @private 内部使用,在{@link useDataGridColumns}内赋值 */
24
- _key?: string | number;
34
+ _key?: Id;
25
35
  /** @private 内部使用,在{@link DataGridHead}内计算 */
26
36
  _negativeRowSpan?: number;
27
37
  }
28
- type DataGridSharedProps<R extends RowType> = {
29
- rowProps?(row: R, index: number, rows: R[]): JSX.IntrinsicElements['tr'];
38
+ type DataGridSharedProps<R extends RowType = RowType> = {
39
+ rowProps?(row: R, index: number, rows: R[]): ComponentProps<'tr'>;
30
40
  /** 数据的主键名,默认为`id` */
31
41
  primaryKey?: keyof R;
32
42
  /**
@@ -41,9 +51,16 @@ type DataGridSharedProps<R extends RowType> = {
41
51
  indent?: number;
42
52
  renderExpandIcon?(key: Id, isExpand: boolean, expanded: Id[]): ReactNode;
43
53
  };
44
- export interface DataGridBaseProps<R extends RowType> extends DataGridSharedProps<R>, Omit<DivProps, 'defaultValue' | 'onChange'> {
54
+ export type OrderType = 'ascend' | 'descend';
55
+ export interface DataGridBaseProps<R extends RowType = RowType> extends DataGridSharedProps<R>, Omit<DivProps, 'defaultValue' | 'onChange'> {
45
56
  columns?: (ColumnType<R> | symbol)[];
46
57
  rows?: R[];
58
+ filterProps?: FormProps;
59
+ initialFilterValue?: FormValue;
60
+ onFilter?(filterValue: FormValue): void;
61
+ onFilterClick?(column: Id, e: React.MouseEvent<HTMLButtonElement>): void;
62
+ /** 若需要本地筛选,必须指定该方法 */
63
+ filterPredicate?(row: R, index: number, filterValue: FormValue): any;
47
64
  defaultOrderColumn?: Id;
48
65
  orderColumn?: Id;
49
66
  defaultOrderType?: OrderType;
@@ -78,20 +95,20 @@ export interface DataGridBaseProps<R extends RowType> extends DataGridSharedProp
78
95
  striped?: TableProps['striped'];
79
96
  tableProps?: TableProps;
80
97
  }
81
- export interface DataGridSingleProps<R extends RowType, V extends Id = Id> extends DataGridBaseProps<R> {
98
+ export interface DataGridSingleProps<R extends RowType = RowType, V extends Id = Id> extends DataGridBaseProps<R> {
82
99
  multiple?: false;
83
100
  defaultValue?: V;
84
101
  value?: V;
85
102
  onChange?(value: V): void;
86
103
  }
87
- export interface DataGridMultipleProps<R extends RowType, V extends Id = Id> extends DataGridBaseProps<R> {
104
+ export interface DataGridMultipleProps<R extends RowType = RowType, V extends Id = Id> extends DataGridBaseProps<R> {
88
105
  multiple: true;
89
106
  defaultValue?: V[];
90
107
  value?: V[];
91
108
  onChange?(value: V[]): void;
92
109
  }
93
- export type DataGridProps<R extends RowType, V extends Id = Id> = DataGridSingleProps<R, V> | DataGridMultipleProps<R, V>;
94
- interface IDataGridContext<R extends RowType> extends ToRequired<DataGridSharedProps<R>, 'primaryKey' | 'childrenKey' | 'clickRowToSelect' | 'indent'> {
110
+ export type DataGridProps<R extends RowType = RowType, V extends Id = Id> = DataGridSingleProps<R, V> | DataGridMultipleProps<R, V>;
111
+ interface IDataGridContext<R extends RowType = RowType> extends ToRequired<DataGridSharedProps<R>, 'primaryKey' | 'childrenKey' | 'clickRowToSelect' | 'indent'> {
95
112
  expandedSet: Set<Id>;
96
113
  flattedColumns: (symbol | ColumnType<R>)[] | undefined;
97
114
  toggleExpanded(key: Id): void;
@@ -1,20 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
- import { createContext, memo, useContext, useMemo } from 'react';
2
+ import { createContext, memo, useCallback, useContext, useMemo, useState } from 'react';
3
3
  import { classes, style } from './dataGrid.style';
4
4
  import { SelectionContext, useSelectionContext } from '../selectionContext';
5
5
  import { Pagination } from '../pagination';
6
6
  import { Table, TableContainer } from '../table';
7
- import { clsx, cloneRef, useControlled, useDataGridColumns } from '../../utils';
7
+ import { clsx, cloneRef, useControlled, useDataGridColumns, useSync, mergeComponentProps } from '../../utils';
8
8
  import { Loading } from '../loading';
9
9
  import { DataGridHead } from './dataGridHead';
10
10
  import { Placeholder } from '../placeholder';
11
11
  import { DataGridRows } from './dataGridRows';
12
12
  import { ColumnResizeContext } from './columnResize';
13
+ import { Form } from '../form';
13
14
  const DataGridContext = createContext({});
14
15
  export function useDataGridContext() {
15
16
  return useContext(DataGridContext);
16
17
  }
17
- export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', childrenKey = null, defaultOrderColumn, orderColumn, defaultOrderType = 'descend', orderType, onOrderChange, selectable, relation = 'dependent', integration = 'shallowest', allowSelectAll = true, clickRowToSelect = true, selectorProps, indent = 24, renderExpandIcon, defaultExpanded, expanded, onExpandedChange, paginatable = true, paginationProps, renderPagination, loading, emptyPlaceholder, columnResizable = false, size, bordered, striped, tableProps, multiple, defaultValue, value, onChange, ...props }) => {
18
+ export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', childrenKey = null, filterProps, initialFilterValue, onFilter, onFilterClick, filterPredicate, defaultOrderColumn, orderColumn, defaultOrderType = 'descend', orderType, onOrderChange, selectable, relation = 'dependent', integration = 'shallowest', allowSelectAll = true, clickRowToSelect = true, selectorProps, indent = 24, renderExpandIcon, defaultExpanded, expanded, onExpandedChange, paginatable = true, paginationProps, renderPagination, loading, emptyPlaceholder, columnResizable = false, size, bordered, striped, tableProps, multiple, defaultValue, value, onChange, ...props }) => {
18
19
  /**
19
20
  * ---------------------------------------------------------------
20
21
  * 选择行
@@ -31,7 +32,24 @@ export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', chil
31
32
  });
32
33
  /**
33
34
  * ---------------------------------------------------------------
34
- * 行排序
35
+ * 筛选
36
+ */
37
+ const [innerFilterValue, setInnerFilterValue] = useState(initialFilterValue || {});
38
+ const filterHandler = (value) => {
39
+ onFilter?.(value);
40
+ filterPredicate && setInnerFilterValue(value);
41
+ };
42
+ const filteredRows = useMemo(() => {
43
+ if (!filterPredicate) {
44
+ return rows;
45
+ }
46
+ return rows?.filter((row, index) => {
47
+ return filterPredicate(row, index, innerFilterValue);
48
+ });
49
+ }, [rows, innerFilterValue, filterPredicate]);
50
+ /**
51
+ * ---------------------------------------------------------------
52
+ * 排序
35
53
  */
36
54
  const [innerOrderColumn, setInnerOrderColumn] = useControlled(() => {
37
55
  return defaultOrderColumn ?? flattedColumns
@@ -39,24 +57,25 @@ export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', chil
39
57
  ?._key;
40
58
  }, orderColumn);
41
59
  const [innerOrderType, setInnerOrderType] = useControlled(defaultOrderType, orderType);
42
- const orderChangeHandler = (orderColumn, orderType) => {
43
- onOrderChange?.(orderColumn, orderType);
60
+ const syncOnOrderChange = useSync(onOrderChange);
61
+ const orderChangeHandler = useCallback((orderColumn, orderType) => {
62
+ syncOnOrderChange.current?.(orderColumn, orderType);
44
63
  setInnerOrderColumn(orderColumn);
45
64
  setInnerOrderType(orderType);
46
- };
65
+ }, []);
47
66
  const orderedRows = useMemo(() => {
48
67
  if (!innerOrderColumn.current) {
49
- return rows;
68
+ return filteredRows;
50
69
  }
51
70
  const orderingColumn = columnMapByKey.get(innerOrderColumn.current);
52
71
  if (!orderingColumn?.sorter || typeof orderingColumn.sorter !== 'function') {
53
- return rows;
72
+ return filteredRows;
54
73
  }
55
- return rows?.toSorted((a, b) => {
74
+ return filteredRows?.toSorted((a, b) => {
56
75
  const ret = orderingColumn.sorter(a, b);
57
76
  return innerOrderType.current === 'ascend' ? ret : -ret;
58
77
  });
59
- }, [rows, innerOrderColumn.current, innerOrderType.current]);
78
+ }, [filteredRows, innerOrderColumn.current, innerOrderType.current, columnMapByKey]);
60
79
  /**
61
80
  * ---------------------------------------------------------------
62
81
  * 展开行
@@ -65,16 +84,17 @@ export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', chil
65
84
  const expandedSet = useMemo(() => {
66
85
  return new Set(innerExpanded.current);
67
86
  }, [innerExpanded.current]);
68
- const toggleExpanded = (key) => {
87
+ const syncOnExpandedChange = useSync(onExpandedChange);
88
+ const toggleExpanded = useCallback((key) => {
69
89
  const currentExpanded = expandedSet.has(key);
70
90
  setInnerExpanded(o => {
71
91
  const newExpanded = currentExpanded
72
92
  ? o.filter(v => v !== key)
73
93
  : [...o, key];
74
- onExpandedChange?.(newExpanded, key, !currentExpanded);
94
+ syncOnExpandedChange.current?.(newExpanded, key, !currentExpanded);
75
95
  return newExpanded;
76
96
  });
77
- };
97
+ }, []);
78
98
  /**
79
99
  * ---------------------------------------------------------------
80
100
  * 分页
@@ -106,14 +126,20 @@ export const DataGrid = memo(({ columns, rows, rowProps, primaryKey = 'id', chil
106
126
  const { page, pageSize } = _paginationProps;
107
127
  return orderedRows?.slice((page - 1) * pageSize, page * pageSize);
108
128
  }, [orderedRows, _paginationProps.page, _paginationProps.pageSize, paginatable]);
109
- return (_jsxs(Loading, { ...props, css: style, className: clsx(classes.root, props.className), open: loading, "data-column-resizable": columnResizable, children: [_jsx(ColumnResizeContext, { columnResizable: columnResizable, children: ({ scrollerRef, tableRef }) => _jsxs(TableContainer, { ref: scrollerRef, className: classes.container, children: [_jsx(Table, { size: size, bordered: bordered, striped: striped, ...tableProps, ref: cloneRef(tableProps?.ref, tableRef), children: _jsxs(SelectionContext, { options: rows, primaryKey: primaryKey, childrenKey: childrenKey !== null ? childrenKey : void 0, relation: relation, integration: integration, disabled: !selectable, multiple: multiple, defaultValue: defaultValue, value: value, onChange: onChange, children: [_jsx(DataGridHead, { flattedColumns: flattedColumns, completedColumns: completedColumns, rows: rows, primaryKey: primaryKey, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, allowSelectAll: allowSelectAll, columnResizable: columnResizable }), _jsx("tbody", { children: _jsx(DataGridContext, { value: useMemo(() => ({
110
- rowProps, primaryKey, childrenKey, clickRowToSelect, indent, renderExpandIcon,
111
- expandedSet, flattedColumns, toggleExpanded
112
- }), [
113
- rowProps, primaryKey, childrenKey, clickRowToSelect, indent, renderExpandIcon,
114
- expandedSet, flattedColumns
115
- ]), children: !!paginatedRows?.length &&
116
- _jsx(DataGridRows, { rows: paginatedRows }) }) })] }) }), !paginatedRows?.length && (emptyPlaceholder ?? _jsx(Placeholder, { className: classes.empty }))] }) }), renderPaginationFn()] }));
129
+ return (_jsxs(Loading, { fill: false, ...props, css: style, className: clsx(classes.root, props.className), open: loading, "data-column-resizable": columnResizable, children: [_jsx(Form, { ...mergeComponentProps({
130
+ variant: 'plain',
131
+ initialValue: innerFilterValue
132
+ }, filterProps, {
133
+ className: classes.filterForm,
134
+ onFinish: filterHandler
135
+ }), children: _jsx(ColumnResizeContext, { columnResizable: columnResizable, children: ({ scrollerRef, tableRef }) => _jsxs(TableContainer, { ref: scrollerRef, className: classes.container, children: [_jsx(Table, { size: size, bordered: bordered, striped: striped, ...tableProps, ref: cloneRef(tableProps?.ref, tableRef), children: _jsxs(SelectionContext, { options: rows, primaryKey: primaryKey, childrenKey: childrenKey !== null ? childrenKey : void 0, relation: relation, integration: integration, disabled: !selectable, multiple: multiple, defaultValue: defaultValue, value: value, onChange: onChange, children: [_jsx(DataGridHead, { rows: rows, flattedColumns: flattedColumns, completedColumns: completedColumns, primaryKey: primaryKey, allowSelectAll: allowSelectAll, columnResizable: columnResizable, orderColumn: innerOrderColumn.current, orderType: innerOrderType.current, onOrderChange: orderChangeHandler, onFilterClick: onFilterClick }), _jsx("tbody", { children: _jsx(DataGridContext, { value: useMemo(() => ({
136
+ rowProps, primaryKey, childrenKey, clickRowToSelect, indent, renderExpandIcon,
137
+ expandedSet, flattedColumns, toggleExpanded
138
+ }), [
139
+ rowProps, primaryKey, childrenKey, clickRowToSelect, indent, renderExpandIcon,
140
+ expandedSet, flattedColumns
141
+ ]), children: !!paginatedRows?.length &&
142
+ _jsx(DataGridRows, { rows: paginatedRows }) }) })] }) }), !paginatedRows?.length && (emptyPlaceholder ?? _jsx(Placeholder, { className: classes.empty }))] }) }) }), renderPaginationFn()] }));
117
143
  });
118
144
  DataGrid.EXPAND_COLUMN = Symbol('expand-column');
119
145
  DataGrid.SELECT_COLUMN = Symbol('select-column');
@@ -1,14 +1,16 @@
1
1
  export declare const classes: {
2
2
  sub: string;
3
3
  title: string;
4
+ children: string;
4
5
  container: string;
5
- sorter: string;
6
- icon: string;
6
+ filterForm: string;
7
+ functionalCell: string;
8
+ sortIcon: string;
9
+ filterButton: string;
7
10
  expandable: string;
8
11
  expandableWrap: string;
9
12
  selectable: string;
10
13
  subTd: string;
11
- children: string;
12
14
  empty: string;
13
15
  resizeHandle: string;
14
16
  } & {
@@ -2,10 +2,12 @@ import { css } from '@emotion/react';
2
2
  import { defineInnerClasses, defineCss } from '../../utils';
3
3
  import { classes as loadingClasses } from '../loading/loading.style';
4
4
  export const classes = defineInnerClasses('data-grid', [
5
+ 'filterForm',
5
6
  'container',
6
7
  'title',
7
- 'sorter',
8
- 'icon',
8
+ 'functionalCell',
9
+ 'sortIcon',
10
+ 'filterButton',
9
11
  'expandable',
10
12
  'expandableWrap',
11
13
  'selectable',
@@ -16,20 +18,37 @@ export const classes = defineInnerClasses('data-grid', [
16
18
  'resizeHandle'
17
19
  ]);
18
20
  export const style = defineCss(({ spacing, mode, gray, text, colors, easing }) => css `
19
- max-height: 100%;
20
- min-height: 0;
21
-
22
21
  .${loadingClasses.container} {
23
- height: auto;
24
22
  display: flex;
25
23
  flex-direction: column;
24
+ gap: ${spacing[5]}px;
25
+ }
26
+
27
+ .${classes.filterForm} {
28
+ min-height: 0;
26
29
  }
27
30
 
28
31
  .${classes.container} {
29
- flex: 1;
30
-
31
- &:not(:last-of-type) {
32
- margin-bottom: ${spacing[5]}px;
32
+ height: 100%;
33
+ }
34
+
35
+ .${classes.functionalCell} {
36
+ display: flex;
37
+ align-items: center;
38
+
39
+ .${classes.title} {
40
+ flex: 1;
41
+ }
42
+
43
+ .${classes.sortIcon} {
44
+ color: ${text.placeholder};
45
+ transition: translate .25s ${easing.swing};
46
+ }
47
+
48
+ .${classes.filterButton} {
49
+ width: ${20 / 14}em;
50
+ height: ${20 / 14}em;
51
+ margin-left: ${spacing[2]}px;
33
52
  }
34
53
  }
35
54
 
@@ -47,35 +66,21 @@ export const style = defineCss(({ spacing, mode, gray, text, colors, easing }) =
47
66
  background-color: ${gray(mode === 'light' ? .01 : .22)};
48
67
  }
49
68
 
50
- .${classes.sorter} {
51
- display: flex;
52
- align-items: center;
53
-
54
- .${classes.title} {
55
- flex: 1;
56
- }
57
-
58
- .${classes.icon} {
59
- color: ${text.placeholder};
60
- transition: translate .25s ${easing.swing};
61
- }
62
- }
63
-
64
69
  &[data-ordering=true] {
65
- .${classes.icon} {
70
+ .${classes.sortIcon} {
66
71
  color: ${colors.primary.main};
67
72
  }
68
73
  }
69
74
 
70
75
  &[data-order-type=ascend] {
71
- .${classes.icon} {
76
+ .${classes.sortIcon} {
72
77
  translate: 0 -3px;
73
78
  rotate: 180deg;
74
79
  }
75
80
  }
76
81
 
77
82
  &[data-order-type=descend] {
78
- .${classes.icon} {
83
+ .${classes.sortIcon} {
79
84
  translate: 0 3px;
80
85
  rotate: 0deg;
81
86
  }
@@ -90,7 +95,7 @@ export const style = defineCss(({ spacing, mode, gray, text, colors, easing }) =
90
95
  .${classes.subTd} {
91
96
  padding: 0;
92
97
  border: none;
93
-
98
+
94
99
  .${classes.children} {
95
100
  padding: ${spacing[4]}px ${spacing[5]}px;
96
101
  border-bottom: 1px solid ${gray(mode === 'light' ? .12 : .32)};
@@ -122,19 +127,19 @@ export const style = defineCss(({ spacing, mode, gray, text, colors, easing }) =
122
127
  padding-top: 0;
123
128
  padding-bottom: 0;
124
129
  padding-left: 0;
125
-
130
+
126
131
  .${classes.expandableWrap} {
127
132
  display: flex;
128
133
  align-items: center;
129
134
  gap: ${spacing[1]}px;
130
135
  }
131
136
  }
132
-
137
+
133
138
  .${classes.empty} {
134
139
  position: sticky;
135
140
  left: 0;
136
141
  }
137
-
142
+
138
143
  .${classes.resizeHandle} {
139
144
  width: 8px;
140
145
  height: 100%;
@@ -145,12 +150,12 @@ export const style = defineCss(({ spacing, mode, gray, text, colors, easing }) =
145
150
  right: -4px;
146
151
  z-index: 1;
147
152
  }
148
-
153
+
149
154
  &[data-column-resizable=true] table {
150
155
  width: max-content;
151
156
  table-layout: fixed;
152
157
  }
153
-
158
+
154
159
  th:last-of-type {
155
160
  .${classes.resizeHandle} {
156
161
  width: 4px;
@@ -1,9 +1,12 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { ColumnType, DataGridProps, RowType } from './dataGrid';
3
3
  import { Id } from '../../types';
4
- interface DataGridHeadProps<R extends RowType, V extends Id = Id> extends Required<Pick<DataGridProps<R, V>, 'primaryKey' | 'orderType' | 'onOrderChange' | 'allowSelectAll' | 'columnResizable'>>, Pick<DataGridProps<R, V>, 'rows' | 'orderColumn'> {
4
+ interface DataGridHeadProps<R extends RowType, V extends Id = Id> extends Required<Pick<DataGridProps<R, V>, 'primaryKey' | 'orderType' | 'onOrderChange' | 'allowSelectAll' | 'columnResizable'>> {
5
+ rows: R[] | undefined;
6
+ orderColumn: Id | undefined;
5
7
  flattedColumns: (symbol | ColumnType<R>)[] | undefined;
6
8
  completedColumns: (symbol | ColumnType<R>)[] | undefined;
9
+ onFilterClick: DataGridProps<R, V>['onFilterClick'];
7
10
  }
8
11
  export declare const DataGridHead: <R extends RowType, V extends Id = Id>(props: DataGridHeadProps<R, V>) => ReactElement;
9
12
  export {};
@@ -1,16 +1,19 @@
1
1
  import { createElement as _createElement } from "@emotion/react";
2
- import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
3
3
  import { memo, useMemo } from 'react';
4
4
  import { classes } from './dataGrid.style';
5
5
  import { DataGrid } from './dataGrid';
6
6
  import { useRenderHead } from './columnResize';
7
7
  import { Checkbox } from '../checkbox';
8
- import { isUnset } from '../../utils';
9
8
  import { Icon } from '../icon';
10
9
  import { useSelectionContext } from '../selectionContext';
11
10
  import { Tooltip } from '../tooltip';
12
11
  import { faCaretDown } from '@fortawesome/free-solid-svg-icons/faCaretDown';
13
- export const DataGridHead = memo(({ flattedColumns, completedColumns, rows, primaryKey, orderColumn, orderType, onOrderChange, allowSelectAll, columnResizable }) => {
12
+ import { Button } from '../button';
13
+ import { faFilter } from '@fortawesome/free-solid-svg-icons/faFilter';
14
+ import { Bubble } from '../bubble';
15
+ import { FilterBubbleContent } from './filterBubbleContent';
16
+ export const DataGridHead = memo(({ allowSelectAll, columnResizable, flattedColumns, completedColumns, rows, primaryKey, orderColumn, orderType, onOrderChange, onFilterClick }) => {
14
17
  const { multiple, setValue, selectionStatus } = useSelectionContext();
15
18
  const allSelectionStatus = useMemo(() => {
16
19
  if (multiple && allowSelectAll) {
@@ -66,29 +69,35 @@ export const DataGridHead = memo(({ flattedColumns, completedColumns, rows, prim
66
69
  return [];
67
70
  }
68
71
  // col === DataGrid.SELECT_COLUMN
69
- return (_jsx(Column, { className: classes.selectable, rowSpan: headRows.length, sticky: j === 0 ? 'left' : void 0, children: multiple && allowSelectAll &&
70
- _jsx(Checkbox, { checked: allSelectionStatus === 2, indeterminate: allSelectionStatus === 1, onChange: selectAllChangeHandler }) }, j + '_selectable'));
72
+ return [
73
+ _jsx(Column, { className: classes.selectable, rowSpan: headRows.length, sticky: j === 0 ? 'left' : void 0, children: multiple && allowSelectAll &&
74
+ _jsx(Checkbox, { checked: allSelectionStatus === 2, indeterminate: allSelectionStatus === 1, onChange: selectAllChangeHandler }) }, j + '_selectable')
75
+ ];
71
76
  }
72
77
  const {
73
78
  // 排除无需加入dom节点的属性
74
- title, key, children, sticky, field, render, sorter, _key, _negativeRowSpan = 0, ...colProps } = col;
75
- const sortable = sorter && children?.length;
79
+ title, key, children, sticky, field, render, sorter, filter, _key, _negativeRowSpan = 0, ...colProps } = col;
80
+ const sortable = sorter && !children?.length;
76
81
  const isOrderingColumn = orderColumn === _key;
77
82
  const currentOrderType = isOrderingColumn ? orderType : 'descend';
78
- const renderedTh = (_createElement(Column, { rowSpan: headRows.length - _negativeRowSpan, ...colProps, key: _key, sticky: sticky, "data-sortable": !!sortable, "data-ordering": isOrderingColumn, "data-order-type": currentOrderType, onClick: e => {
79
- colProps.onClick?.(e);
80
- if (sortable && !isUnset(_key)) {
81
- onOrderChange?.(_key, currentOrderType === 'descend' ? 'ascend' : 'descend');
82
- }
83
- } }, sorter
84
- ? _jsxs("div", { className: classes.sorter, children: [_jsx("div", { className: classes.title, children: title }), _jsx(Icon, { icon: faCaretDown, className: classes.icon })] })
85
- : title));
83
+ const filterButton = (_jsx(Button, { className: classes.filterButton, variant: "plain", color: "text.placeholder", onClick: e => {
84
+ e.stopPropagation();
85
+ onFilterClick?.(_key, e);
86
+ }, children: _jsx(Icon, { icon: faFilter }) }));
86
87
  return [
87
- sortable
88
- ? _jsx(Tooltip, { title: currentOrderType === 'descend'
89
- ? '点击升序'
90
- : '点击降序', children: renderedTh }, _key)
91
- : renderedTh
88
+ _createElement(Column, { rowSpan: headRows.length - _negativeRowSpan, ...colProps, key: _key, sticky: sticky, "data-sortable": !!sortable, "data-ordering": isOrderingColumn, "data-order-type": currentOrderType, onClick: e => {
89
+ colProps.onClick?.(e);
90
+ sortable && onOrderChange?.(_key, currentOrderType === 'descend' ? 'ascend' : 'descend');
91
+ } }, sortable || filter
92
+ ? _jsxs("div", { className: classes.functionalCell, children: [sortable
93
+ ? _jsxs(_Fragment, { children: [_jsx(Tooltip, { title: currentOrderType === 'descend'
94
+ ? '点击升序'
95
+ : '点击降序', children: _jsx("div", { className: classes.title, children: title }) }), _jsx(Icon, { icon: faCaretDown, className: classes.sortIcon })] })
96
+ : _jsx("div", { className: classes.title, children: title }), filter &&
97
+ _jsx(Tooltip, { title: "\u7B5B\u9009", placement: "top", clickToClose: true, children: filter === true
98
+ ? filterButton
99
+ : _jsx(Bubble, { style: { maxWidth: 360 }, trigger: "click", placement: "bottomRight", autoClose: false, content: _jsx(FilterBubbleContent, { columnKey: _key, columnFilterProps: filter }), onClick: e => e.stopPropagation(), children: filterButton }) })] })
100
+ : title)
92
101
  ];
93
102
  }) }, i));
94
103
  });
@@ -51,7 +51,7 @@ export const DataGridRows = memo(({ rows, _level = 0 }) => {
51
51
  // 排除无需加入dom节点的属性
52
52
  // width属性只需加入thead列中,普通列需排除
53
53
  // rowSpan与colSpan需排除
54
- title, key, children, sticky, field, render, sorter, width, _key, _negativeRowSpan, rowSpan, colSpan, ..._colProps } = col;
54
+ title, key, children, sticky, field, render, sorter, filter, width, _key, _negativeRowSpan, rowSpan, colSpan, ..._colProps } = col;
55
55
  const renderedContent = renderCell({ render, field }, row, i, arr);
56
56
  const shouldRenderExpand = expandableIndex === j - 1;
57
57
  return (_createElement(TdCell, { ..._colProps, key: _key, className: shouldRenderExpand ? classes.expandable : void 0, sticky: sticky }, shouldRenderExpand
@@ -0,0 +1,19 @@
1
+ import { MenuOptionType, OptionsBaseProps } from '../optionsBase';
2
+ import { Id } from '../../types';
3
+ import { FormItemChildren } from '../form';
4
+ type FilterSharedProps = {
5
+ /** 是否显示`重置`与`确定`按钮,默认为`true` */
6
+ showButton?: boolean;
7
+ };
8
+ export interface FilterOptionsProps extends FilterSharedProps, OptionsBaseProps<MenuOptionType> {
9
+ /** 默认为`true` */
10
+ multiple?: boolean;
11
+ }
12
+ export interface FilterControlProps extends FilterSharedProps {
13
+ control: FormItemChildren;
14
+ }
15
+ export declare const FilterBubbleContent: import("react").MemoExoticComponent<({ columnKey, columnFilterProps }: {
16
+ columnKey: Id;
17
+ columnFilterProps: FilterOptionsProps | FilterControlProps;
18
+ }) => import("@emotion/react/jsx-runtime").JSX.Element>;
19
+ export {};
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
2
+ import { OptionsBase } from '../optionsBase';
3
+ import { useFlatSelection } from '../selectionContext';
4
+ import { Flex } from '../flex';
5
+ import { Button } from '../button';
6
+ import { usePopperContext } from '../popper';
7
+ import { memo, useEffect } from 'react';
8
+ import { FormItem, useFormContext, useFormValueContext } from '../form';
9
+ export const FilterBubbleContent = memo(({ columnKey, columnFilterProps }) => {
10
+ const { formRef } = useFormContext();
11
+ /**
12
+ * ------------------------------------------------------------------------------------
13
+ * 弹框关闭时触发筛选
14
+ */
15
+ const { open, setOpen } = usePopperContext();
16
+ useEffect(() => {
17
+ !open && formRef.current.submit().then();
18
+ }, [open]);
19
+ return (_jsxs(_Fragment, { children: [_jsx(FormItem, { field: columnKey, children: 'control' in columnFilterProps
20
+ ? columnFilterProps.control
21
+ : _jsx(FilterOptions, { ...columnFilterProps }) }), columnFilterProps.showButton !== false
22
+ ? _jsxs(Flex, { gap: 6, justifyContent: "flex-end", marginTop: 6, children: [_jsx(Button, { variant: "text", onClick: () => {
23
+ formRef.current.setFieldValue(columnKey, null);
24
+ setOpen(false);
25
+ }, children: "\u91CD\u7F6E" }), _jsx(Button, { onClick: () => setOpen(false), children: "\u786E\u5B9A" })] })
26
+ : _jsx(TriggerFilterOnChange, {})] }));
27
+ });
28
+ const FilterOptions = memo(({ multiple = true, showButton = true, value, onChange, ...props }) => {
29
+ const [selectedValue, toggleSelect] = useFlatSelection({ multiple, value, onChange });
30
+ return (_jsx(OptionsBase, { showCheckbox: multiple, ...props, selectedValue: selectedValue, onToggleSelected: toggleSelect }));
31
+ });
32
+ const TriggerFilterOnChange = memo(() => {
33
+ const { formRef } = useFormContext();
34
+ const { formValue } = useFormValueContext();
35
+ useEffect(() => {
36
+ formRef.current.submit().then();
37
+ }, [formValue]);
38
+ return null;
39
+ });
@@ -1,4 +1,4 @@
1
- import React, { JSX } from 'react';
1
+ import React, { ComponentProps } from 'react';
2
2
  import { PopperProps } from '../popper';
3
3
  import { InputBaseProps } from '../inputBase';
4
4
  import { Dayjs } from 'dayjs';
@@ -10,7 +10,7 @@ export type DatePickerSharedProps = {
10
10
  disabledSeconds?: (date: Dayjs, seconds: number) => any;
11
11
  };
12
12
  export interface DateTimePickerProps extends DatePickerSharedProps, Omit<InputBaseProps<'input'>, 'children' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max'> {
13
- inputProps?: JSX.IntrinsicElements['input'];
13
+ inputProps?: ComponentProps<'input'>;
14
14
  popperProps?: PopperProps;
15
15
  defaultOpen?: boolean;
16
16
  open?: boolean;
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/reac
2
2
  import { createContext, memo, useContext, useEffect, useMemo, useRef } from 'react';
3
3
  import { Popper } from '../popper';
4
4
  import { InputBase } from '../inputBase';
5
- import { clsx, cloneRef, useControlled } from '../../utils';
5
+ import { useControlled, mergeComponentProps } from '../../utils';
6
6
  import { classes, datePickerPopperStyle, style } from './dateTimePicker.style';
7
7
  import dayjs from 'dayjs';
8
8
  import customParseFormat from 'dayjs/plugin/customParseFormat';
@@ -22,7 +22,6 @@ export const DateTimePicker = memo(({ inputProps, popperProps, min, max, disable
22
22
  const focused = useRef(false);
23
23
  const [innerOpen, _setInnerOpen] = useControlled(defaultOpen, open, onOpenChange);
24
24
  const setInnerOpen = (open) => {
25
- popperProps?.onOpenChange?.(open);
26
25
  // 如果仍聚焦在输入框,则不用关闭弹框
27
26
  (open || !focused.current) && _setInnerOpen(open);
28
27
  };
@@ -209,14 +208,33 @@ export const DateTimePicker = memo(({ inputProps, popperProps, min, max, disable
209
208
  const showCalendar = /[YMD]/.test(format);
210
209
  const showTimer = /[Hms]/.test(format);
211
210
  const _dateVal = dateValue.current || dayjs();
212
- return (_jsx(Popper, { css: datePickerPopperStyle, open: innerOpen.current, placement: "bottomLeft", trigger: ['click', 'enter'], disabled: props.disabled || props.readOnly, content: _jsxs(_Fragment, { children: [showCalendar &&
213
- _jsx(Calendar, { viewLevel: format.includes('D') ? 'date'
214
- : format.includes('M') ? 'month'
215
- : 'year', _defaultNull: !dateValue.current, value: _dateVal, onChange: setDateValue, min: min, max: max, disabledDates: disabledDates }), showTimer &&
216
- _jsx(DateTimePickerContext, { value: contextValue, children: _jsx(Timer, { showHours: format.includes('H'), showMinutes: format.includes('m'), showSeconds: format.includes('s'), value: _dateVal, onChange: setDateValue }) })] }), ...popperProps, onOpenChange: setInnerOpen, onPointerDown: e => {
217
- popperProps?.onPointerDown?.(e);
218
- e.preventDefault();
219
- }, children: _jsx(InputBase, { ...props, css: style, className: clsx(classes.root, props.className), "data-focused": innerOpen.current, value: dateValue.current, onClear: clearHandler, onSelect: selectHandler, onFocus: focusHandler, onBlur: blurHandler, onKeyDown: keydownHandler, children: ({ ref, value, onChange, ...rest }) => _jsxs("div", { className: classes.container, children: [_jsx("input", { ...rest, ...inputProps, ref: cloneRef(ref, inputProps?.ref, innerInputRef), className: clsx(classes.input, inputProps?.className) }), _jsx("div", { className: classes.dateTimeIcon, children: showTimer && !showCalendar
211
+ return (_jsx(Popper, { ...mergeComponentProps({
212
+ css: datePickerPopperStyle,
213
+ open: innerOpen.current,
214
+ placement: 'bottomLeft',
215
+ trigger: ['click', 'enter'],
216
+ disabled: props.disabled || props.readOnly,
217
+ content: (_jsxs(_Fragment, { children: [showCalendar &&
218
+ _jsx(Calendar, { viewLevel: format.includes('D') ? 'date'
219
+ : format.includes('M') ? 'month'
220
+ : 'year', _defaultNull: !dateValue.current, value: _dateVal, onChange: setDateValue, min: min, max: max, disabledDates: disabledDates }), showTimer &&
221
+ _jsx(DateTimePickerContext, { value: contextValue, children: _jsx(Timer, { showHours: format.includes('H'), showMinutes: format.includes('m'), showSeconds: format.includes('s'), value: _dateVal, onChange: setDateValue }) })] })),
222
+ }, popperProps, {
223
+ onOpenChange: setInnerOpen,
224
+ onPointerDown: e => e.preventDefault()
225
+ }), children: _jsx(InputBase, { ...mergeComponentProps(props, {
226
+ css: style,
227
+ className: classes.root,
228
+ value: dateValue.current,
229
+ onClear: clearHandler,
230
+ onSelect: selectHandler,
231
+ onFocus: focusHandler,
232
+ onBlur: blurHandler,
233
+ onKeyDown: keydownHandler
234
+ }), "data-focused": innerOpen.current, children: inputBaseProps => _jsxs("div", { className: classes.container, children: [_jsx("input", { ...mergeComponentProps(inputBaseProps, inputProps, {
235
+ ref: innerInputRef,
236
+ className: classes.input
237
+ }) }), _jsx("div", { className: classes.dateTimeIcon, children: showTimer && !showCalendar
220
238
  ? _jsx(Icon, { icon: faClock })
221
239
  : _jsx(Icon, { icon: faCalendar }) })] }) }) }));
222
240
  });