@firecms/core 3.0.0-alpha.84 → 3.0.0-beta.10

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 (370) hide show
  1. package/README.md +6 -7
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +3 -4
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -18
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -13
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/index.d.ts +2 -4
  18. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  19. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +3 -3
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  24. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +26 -7
  26. package/dist/components/EntityView.d.ts +11 -0
  27. package/dist/components/ErrorView.d.ts +1 -1
  28. package/dist/components/FieldCaption.d.ts +5 -0
  29. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  30. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  31. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  32. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  33. package/dist/components/HomePage/index.d.ts +3 -1
  34. package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
  35. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  36. package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
  37. package/dist/components/ReferenceWidget.d.ts +6 -4
  38. package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
  39. package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
  40. package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
  41. package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
  42. package/dist/components/VirtualTable/types.d.ts +3 -3
  43. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  44. package/dist/components/common/index.d.ts +6 -0
  45. package/dist/components/common/table_height.d.ts +5 -0
  46. package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
  47. package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
  48. package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +4 -1
  49. package/dist/components/common/useTableSearchHelper.d.ts +12 -0
  50. package/dist/components/index.d.ts +14 -8
  51. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  52. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  53. package/dist/core/DefaultDrawer.d.ts +19 -0
  54. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  55. package/dist/core/EntityEditView.d.ts +36 -0
  56. package/dist/core/FireCMS.d.ts +1 -1
  57. package/dist/core/NavigationRoutes.d.ts +3 -3
  58. package/dist/core/index.d.ts +3 -6
  59. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  60. package/dist/form/components/CustomIdField.d.ts +2 -1
  61. package/dist/form/components/ErrorFocus.d.ts +1 -1
  62. package/dist/form/components/FieldHelperText.d.ts +3 -3
  63. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  64. package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
  65. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  66. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  67. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  68. package/dist/form/components/index.d.ts +2 -1
  69. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  70. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  71. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  73. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  75. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  76. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  79. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  80. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  81. package/dist/form/index.d.ts +4 -5
  82. package/dist/form/useClearRestoreValue.d.ts +2 -2
  83. package/dist/form/validation.d.ts +1 -1
  84. package/dist/hooks/data/delete.d.ts +2 -2
  85. package/dist/hooks/data/save.d.ts +2 -3
  86. package/dist/hooks/data/useDataSource.d.ts +2 -2
  87. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  88. package/dist/hooks/index.d.ts +5 -1
  89. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  90. package/dist/hooks/useBuildNavigationController.d.ts +23 -0
  91. package/dist/hooks/useProjectLog.d.ts +14 -0
  92. package/dist/hooks/useSnackbarController.d.ts +1 -0
  93. package/dist/hooks/useStorageSource.d.ts +2 -2
  94. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  95. package/dist/index.d.ts +1 -0
  96. package/dist/index.es.js +16297 -12643
  97. package/dist/index.es.js.map +1 -1
  98. package/dist/index.umd.js +20043 -587
  99. package/dist/index.umd.js.map +1 -1
  100. package/dist/internal/useBuildDataSource.d.ts +1 -12
  101. package/dist/preview/PropertyPreview.d.ts +1 -1
  102. package/dist/preview/PropertyPreviewProps.d.ts +7 -5
  103. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  104. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  105. package/dist/preview/components/ReferencePreview.d.ts +4 -9
  106. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  107. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  108. package/dist/types/analytics.d.ts +1 -1
  109. package/dist/types/auth.d.ts +38 -2
  110. package/dist/types/collections.d.ts +56 -9
  111. package/dist/types/datasource.d.ts +59 -39
  112. package/dist/types/entities.d.ts +7 -1
  113. package/dist/types/entity_actions.d.ts +14 -0
  114. package/dist/types/entity_callbacks.d.ts +3 -3
  115. package/dist/types/entity_overrides.d.ts +6 -0
  116. package/dist/types/fields.d.ts +47 -42
  117. package/dist/types/firecms.d.ts +8 -23
  118. package/dist/types/index.d.ts +2 -1
  119. package/dist/types/navigation.d.ts +18 -16
  120. package/dist/types/permissions.d.ts +5 -1
  121. package/dist/types/plugins.d.ts +31 -31
  122. package/dist/types/properties.d.ts +36 -23
  123. package/dist/types/property_config.d.ts +2 -2
  124. package/dist/types/roles.d.ts +31 -0
  125. package/dist/types/side_dialogs_controller.d.ts +10 -0
  126. package/dist/types/storage.d.ts +86 -3
  127. package/dist/types/user.d.ts +5 -0
  128. package/dist/util/collections.d.ts +9 -1
  129. package/dist/util/entities.d.ts +2 -2
  130. package/dist/util/icon_list.d.ts +5 -1
  131. package/dist/util/icon_synonyms.d.ts +1 -97
  132. package/dist/util/icons.d.ts +10 -3
  133. package/dist/util/index.d.ts +3 -1
  134. package/dist/util/navigation_utils.d.ts +2 -2
  135. package/dist/util/objects.d.ts +1 -1
  136. package/dist/util/permissions.d.ts +4 -4
  137. package/dist/util/plurals.d.ts +0 -2
  138. package/dist/util/property_utils.d.ts +1 -1
  139. package/dist/util/references.d.ts +4 -2
  140. package/dist/util/resolutions.d.ts +28 -14
  141. package/dist/util/storage.d.ts +23 -2
  142. package/dist/util/strings.d.ts +1 -1
  143. package/dist/util/useDebouncedCallback.d.ts +1 -0
  144. package/dist/util/useStorageUploadController.d.ts +3 -3
  145. package/dist/util/useTraceUpdate.d.ts +1 -0
  146. package/package.json +129 -112
  147. package/src/app/AppBar.tsx +18 -0
  148. package/src/app/Drawer.tsx +24 -0
  149. package/src/app/Scaffold.tsx +243 -0
  150. package/src/app/index.ts +4 -0
  151. package/src/app/useApp.tsx +32 -0
  152. package/src/components/ArrayContainer.tsx +45 -75
  153. package/src/components/CircularProgressCenter.tsx +1 -1
  154. package/src/components/ClearFilterSortButton.tsx +41 -0
  155. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  156. package/src/components/DeleteEntityDialog.tsx +4 -4
  157. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +47 -58
  158. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +253 -448
  159. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +11 -12
  160. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +54 -48
  161. package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -32
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +17 -9
  164. package/src/components/EntityCollectionTable/index.tsx +1 -9
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +145 -142
  169. package/src/components/EntityCollectionView/EntityCollectionView.tsx +184 -171
  170. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  171. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +42 -0
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityPreview.tsx +208 -71
  175. package/src/components/EntityView.tsx +84 -0
  176. package/src/components/ErrorView.tsx +1 -1
  177. package/src/components/FieldCaption.tsx +14 -0
  178. package/src/components/HomePage/DefaultHomePage.tsx +38 -28
  179. package/src/components/HomePage/NavigationCard.tsx +69 -0
  180. package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
  181. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  182. package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
  183. package/src/components/HomePage/index.tsx +3 -1
  184. package/src/components/PropertyConfigBadge.tsx +23 -0
  185. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  186. package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +37 -23
  187. package/src/components/ReferenceWidget.tsx +26 -16
  188. package/src/components/SearchIconsView.tsx +10 -7
  189. package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
  190. package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
  191. package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
  192. package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +22 -7
  193. package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +38 -24
  194. package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +88 -22
  195. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  196. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  197. package/src/components/VirtualTable/VirtualTableHeader.tsx +14 -8
  198. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  199. package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
  200. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  201. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  202. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +4 -3
  203. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
  204. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  205. package/src/components/VirtualTable/types.tsx +2 -3
  206. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +17 -9
  207. package/src/components/common/index.ts +6 -0
  208. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  209. package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
  210. package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
  211. package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +25 -14
  212. package/src/components/common/useTableSearchHelper.ts +88 -0
  213. package/src/components/index.tsx +15 -8
  214. package/src/contexts/AuthControllerContext.tsx +1 -1
  215. package/src/contexts/DialogsProvider.tsx +2 -2
  216. package/src/core/DefaultAppBar.tsx +176 -0
  217. package/src/core/DefaultDrawer.tsx +183 -0
  218. package/src/core/DrawerNavigationItem.tsx +66 -0
  219. package/src/core/EntityEditView.tsx +1127 -0
  220. package/src/core/EntitySidePanel.tsx +9 -8
  221. package/src/core/FireCMS.tsx +67 -59
  222. package/src/core/NavigationRoutes.tsx +25 -17
  223. package/src/core/SideDialogs.tsx +1 -0
  224. package/src/core/field_configs.tsx +18 -19
  225. package/src/core/index.tsx +3 -6
  226. package/src/form/PropertyFieldBinding.tsx +60 -33
  227. package/src/form/components/CustomIdField.tsx +51 -36
  228. package/src/form/components/ErrorFocus.tsx +3 -3
  229. package/src/form/components/FieldHelperText.tsx +4 -4
  230. package/src/form/components/FormikArrayContainer.tsx +4 -1
  231. package/src/form/components/LabelWithIcon.tsx +41 -0
  232. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  233. package/src/form/components/StorageItemPreview.tsx +22 -10
  234. package/src/form/components/StorageUploadProgress.tsx +8 -8
  235. package/src/form/components/index.tsx +2 -1
  236. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +28 -18
  237. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +37 -37
  238. package/src/form/field_bindings/BlockFieldBinding.tsx +29 -27
  239. package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
  240. package/src/form/field_bindings/KeyValueFieldBinding.tsx +66 -60
  241. package/src/form/field_bindings/MapFieldBinding.tsx +35 -33
  242. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  243. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
  244. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
  245. package/src/form/field_bindings/ReferenceFieldBinding.tsx +45 -33
  246. package/src/form/field_bindings/RepeatFieldBinding.tsx +36 -21
  247. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -16
  248. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +41 -42
  249. package/src/form/field_bindings/SwitchFieldBinding.tsx +11 -8
  250. package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
  251. package/src/form/index.tsx +5 -9
  252. package/src/form/useClearRestoreValue.tsx +2 -2
  253. package/src/form/validation.ts +4 -21
  254. package/src/hooks/data/delete.ts +5 -4
  255. package/src/hooks/data/save.ts +7 -2
  256. package/src/hooks/data/useCollectionFetch.tsx +1 -1
  257. package/src/hooks/data/useDataSource.tsx +15 -2
  258. package/src/hooks/data/useEntityFetch.tsx +4 -4
  259. package/src/hooks/index.tsx +7 -1
  260. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  261. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  262. package/src/{internal → hooks}/useBuildNavigationController.tsx +244 -99
  263. package/src/hooks/useFireCMSContext.tsx +51 -3
  264. package/src/hooks/useLargeLayout.tsx +10 -7
  265. package/src/hooks/useProjectLog.tsx +63 -0
  266. package/src/hooks/useReferenceDialog.tsx +3 -3
  267. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  268. package/src/hooks/useSnackbarController.tsx +1 -2
  269. package/src/hooks/useStorageSource.tsx +7 -2
  270. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  271. package/src/index.ts +1 -0
  272. package/src/internal/useBuildDataSource.ts +79 -84
  273. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  274. package/src/internal/useBuildSideEntityController.tsx +103 -23
  275. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  276. package/src/preview/PropertyPreview.tsx +12 -19
  277. package/src/preview/PropertyPreviewProps.tsx +6 -10
  278. package/src/preview/components/BooleanPreview.tsx +19 -4
  279. package/src/preview/components/EnumValuesChip.tsx +2 -2
  280. package/src/preview/components/ImagePreview.tsx +24 -34
  281. package/src/preview/components/ReferencePreview.tsx +73 -176
  282. package/src/preview/components/StorageThumbnail.tsx +5 -1
  283. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  284. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
  285. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
  286. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
  287. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  288. package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
  289. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
  290. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  291. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  292. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  293. package/src/preview/util.ts +2 -2
  294. package/src/types/analytics.ts +1 -0
  295. package/src/types/auth.tsx +51 -2
  296. package/src/types/collections.ts +65 -9
  297. package/src/types/customization_controller.tsx +0 -1
  298. package/src/types/datasource.ts +69 -47
  299. package/src/types/entities.ts +15 -1
  300. package/src/types/entity_actions.tsx +17 -0
  301. package/src/types/entity_callbacks.ts +4 -3
  302. package/src/types/entity_overrides.tsx +7 -0
  303. package/src/types/fields.tsx +51 -45
  304. package/src/types/firecms.tsx +9 -26
  305. package/src/types/index.ts +2 -1
  306. package/src/types/navigation.ts +20 -19
  307. package/src/types/permissions.ts +6 -1
  308. package/src/types/plugins.tsx +38 -40
  309. package/src/types/properties.ts +42 -24
  310. package/src/types/property_config.tsx +2 -2
  311. package/src/types/roles.ts +41 -0
  312. package/src/types/side_dialogs_controller.tsx +13 -0
  313. package/src/types/side_entity_controller.tsx +1 -0
  314. package/src/types/storage.ts +94 -3
  315. package/src/types/user.ts +7 -0
  316. package/src/util/collections.ts +22 -0
  317. package/src/util/entities.ts +6 -5
  318. package/src/util/enums.ts +1 -1
  319. package/src/util/icon_list.ts +15 -10
  320. package/src/util/icon_synonyms.ts +3 -99
  321. package/src/util/icons.tsx +18 -4
  322. package/src/util/index.ts +3 -1
  323. package/src/util/make_properties_editable.ts +13 -5
  324. package/src/util/navigation_utils.ts +6 -6
  325. package/src/util/objects.ts +25 -28
  326. package/src/util/permissions.ts +12 -8
  327. package/src/util/plurals.ts +0 -2
  328. package/src/util/property_utils.tsx +1 -1
  329. package/src/util/references.ts +39 -5
  330. package/src/util/resolutions.ts +75 -42
  331. package/src/util/storage.ts +79 -21
  332. package/src/util/strings.ts +4 -3
  333. package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
  334. package/src/util/useStorageUploadController.tsx +33 -7
  335. package/src/util/useTraceUpdate.tsx +2 -1
  336. package/dist/components/VirtualTable/common.d.ts +0 -2
  337. package/dist/core/Drawer.d.ts +0 -23
  338. package/dist/core/Scaffold.d.ts +0 -52
  339. package/dist/form/EntityForm.d.ts +0 -75
  340. package/dist/form/components/SubmitListener.d.ts +0 -1
  341. package/dist/form/components/SwitchControl.d.ts +0 -8
  342. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  343. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  344. package/dist/internal/EntityView.d.ts +0 -22
  345. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  346. package/dist/internal/useBuildNavigationController.d.ts +0 -14
  347. package/dist/internal/useLocaleConfig.d.ts +0 -1
  348. package/dist/types/appcheck.d.ts +0 -26
  349. package/dist/util/useDebounce.d.ts +0 -1
  350. package/src/components/FieldConfigBadge.tsx +0 -17
  351. package/src/components/FireCMSAppBar.tsx +0 -157
  352. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  353. package/src/components/LabelWithIcon.tsx +0 -33
  354. package/src/core/Drawer.tsx +0 -162
  355. package/src/core/Scaffold.tsx +0 -278
  356. package/src/form/EntityForm.tsx +0 -657
  357. package/src/form/components/SubmitListener.tsx +0 -32
  358. package/src/form/components/SwitchControl.tsx +0 -39
  359. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
  360. package/src/hooks/useVerifyLicense.tsx +0 -1
  361. package/src/internal/EntityView.tsx +0 -578
  362. package/src/internal/useBuildCustomizationController.tsx +0 -5
  363. package/src/internal/useLocaleConfig.tsx +0 -18
  364. package/src/types/appcheck.ts +0 -29
  365. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
  366. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
  367. /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
  368. /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
  369. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  370. /package/src/components/{EntityCollectionTable → common}/useDebouncedData.ts +0 -0
@@ -1,7 +1,17 @@
1
1
  import React, { useState } from "react";
2
2
  import { EnumValuesChip } from "../../../preview";
3
3
  import { VirtualTableWhereFilterOp } from "../../VirtualTable";
4
- import { ClearIcon, IconButton, Select, SelectItem, TextField } from "@firecms/ui";
4
+ import {
5
+ Checkbox,
6
+ ClearIcon,
7
+ IconButton,
8
+ Label,
9
+ MultiSelect,
10
+ MultiSelectItem,
11
+ Select,
12
+ SelectItem,
13
+ TextField
14
+ } from "@firecms/ui";
5
15
  import { EnumValueConfig } from "../../../types";
6
16
 
7
17
  interface StringNumberFilterFieldProps {
@@ -50,15 +60,15 @@ export function StringNumberFilterField({
50
60
 
51
61
  const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
52
62
  const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
53
- const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | undefined>(fieldValue);
63
+ const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | null | undefined>(fieldValue);
54
64
 
55
- function updateFilter(op: VirtualTableWhereFilterOp, val: string | number | string[] | number[] | undefined) {
65
+ function updateFilter(op: VirtualTableWhereFilterOp, val: string | number | string[] | number[] | null | undefined) {
56
66
  let newValue = val;
57
67
  const prevOpIsArray = multipleSelectOperations.includes(operation);
58
68
  const newOpIsArray = multipleSelectOperations.includes(op);
59
69
  if (prevOpIsArray !== newOpIsArray) {
60
70
  // @ts-ignore
61
- newValue = newOpIsArray ? (typeof val === "string" || typeof val === "number" ? [val] : []) : "";
71
+ newValue = newOpIsArray ? (typeof val === "string" || typeof val === "number" ? [val] : []) : undefined;
62
72
  }
63
73
 
64
74
  if (typeof newValue === "number" && isNaN(newValue))
@@ -82,9 +92,10 @@ export function StringNumberFilterField({
82
92
  }
83
93
 
84
94
  const multiple = multipleSelectOperations.includes(operation);
95
+
85
96
  return (
86
97
 
87
- <div className="flex w-[440px] items-center">
98
+ <div className="flex w-[440px]">
88
99
  <div className={"w-[80px]"}>
89
100
  <Select value={operation}
90
101
  position={"item-aligned"}
@@ -100,11 +111,11 @@ export function StringNumberFilterField({
100
111
  </Select>
101
112
  </div>
102
113
 
103
- <div className="flex-grow ml-2">
114
+ <div className="flex-grow ml-2 flex flex-col gap-2">
104
115
 
105
116
  {!enumValues && <TextField
106
117
  type={dataType === "number" ? "number" : undefined}
107
- value={internalValue !== undefined ? String(internalValue) : ""}
118
+ value={internalValue !== undefined && internalValue != null ? String(internalValue) : ""}
108
119
  onChange={(evt) => {
109
120
  const val = dataType === "number"
110
121
  ? parseFloat(evt.target.value)
@@ -112,35 +123,38 @@ export function StringNumberFilterField({
112
123
  updateFilter(operation, val);
113
124
  }}
114
125
  endAdornment={internalValue && <IconButton
115
- className="absolute right-3 top-2"
116
126
  onClick={(e) => updateFilter(operation, undefined)}>
117
127
  <ClearIcon/>
118
128
  </IconButton>}
119
129
  />}
120
130
 
121
- {enumValues &&
122
-
131
+ {enumValues && !multiple &&
123
132
  <Select
124
133
  position={"item-aligned"}
125
- value={internalValue !== undefined
126
- ? (Array.isArray(internalValue) ? internalValue.map(e => String(e)) : String(internalValue))
127
- : isArray ? [] : ""}
134
+ value={typeof internalValue === "string" ? internalValue : ""}
128
135
  onValueChange={(value) => {
129
- updateFilter(operation, dataType === "number" ? parseInt(value as string) : value as string)
136
+ if (value !== "")
137
+ updateFilter(operation, dataType === "number" ? parseInt(value as string) : value as string)
130
138
  }}
131
- multiple={multiple}
132
139
  endAdornment={internalValue && <IconButton
133
- className="absolute right-3 top-2"
140
+ className="absolute right-2 top-3"
134
141
  onClick={(e) => updateFilter(operation, undefined)}>
135
142
  <ClearIcon/>
136
143
  </IconButton>}
137
- renderValue={(enumKey) => <EnumValuesChip
138
- key={`select_value_${name}_${enumKey}`}
139
- enumKey={enumKey}
140
- enumValues={enumValues}
141
- size={"small"}/>}>
144
+ renderValue={(enumKey) => {
145
+ if (enumKey === null)
146
+ return "Filter for null values";
147
+ if (enumKey === undefined)
148
+ return null;
149
+
150
+ return <EnumValuesChip
151
+ key={`select_value_${name}_${enumKey}`}
152
+ enumKey={enumKey}
153
+ enumValues={enumValues}
154
+ size={"small"}/>;
155
+ }}>
142
156
  {enumValues.map((enumConfig) => (
143
- <SelectItem key={`select_value_${name}_${enumConfig.id}`}
157
+ <SelectItem key={`select_item_${name}_${enumConfig.id}`}
144
158
  value={String(enumConfig.id)}>
145
159
  <EnumValuesChip
146
160
  enumKey={String(enumConfig.id)}
@@ -151,6 +165,58 @@ export function StringNumberFilterField({
151
165
  </Select>
152
166
  }
153
167
 
168
+ {enumValues && multiple &&
169
+ <MultiSelect
170
+ position={"item-aligned"}
171
+ value={Array.isArray(internalValue) ? internalValue.map(e => String(e)) : []}
172
+ onValueChange={(value) => {
173
+ updateFilter(operation, dataType === "number" ? value.map(v => parseInt(v)) : value)
174
+ }}
175
+ multiple={multiple}
176
+ endAdornment={internalValue && <IconButton
177
+ className="absolute right-2 top-3"
178
+ onClick={(e) => updateFilter(operation, undefined)}>
179
+ <ClearIcon/>
180
+ </IconButton>}
181
+ // renderValues={(enumKeys) => {
182
+ // console.log("renderValues", enumKeys);
183
+ // if (enumKeys === null)
184
+ // return "Filter for null values";
185
+ //
186
+ // return enumKeys.map(key => <EnumValuesChip
187
+ // key={`select_value_${name}_${enumKeys}`}
188
+ // enumKey={key}
189
+ // enumValues={enumValues}
190
+ // size={"small"}/>);
191
+ // }}
192
+ >
193
+ {enumValues.map((enumConfig) => (
194
+ <MultiSelectItem key={`select_value_${name}_${enumConfig.id}`}
195
+ value={String(enumConfig.id)}>
196
+ <EnumValuesChip
197
+ enumKey={String(enumConfig.id)}
198
+ enumValues={enumValues}
199
+ size={"small"}/>
200
+ </MultiSelectItem>
201
+ ))}
202
+ </MultiSelect>
203
+ }
204
+
205
+ {!isArray && <Label
206
+ className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-gray-100 dark:[&:has(:checked)]:bg-gray-800"
207
+ htmlFor="null-filter"
208
+ >
209
+ <Checkbox id="null-filter"
210
+ checked={internalValue === null}
211
+ size={"small"}
212
+ onCheckedChange={(checked) => {
213
+ if (internalValue !== null)
214
+ updateFilter(operation, null);
215
+ else updateFilter(operation, undefined);
216
+ }}/>
217
+ Filter for null values
218
+ </Label>}
219
+
154
220
  </div>
155
221
 
156
222
  </div>
@@ -15,12 +15,11 @@ import {
15
15
  VirtualTableWhereFilterOp
16
16
  } from "./VirtualTableProps";
17
17
 
18
- import { getRowHeight } from "./common";
19
18
  import { VirtualTableContextProps } from "./types";
20
19
  import { VirtualTableHeaderRow } from "./VirtualTableHeaderRow";
21
20
  import { VirtualTableRow } from "./VirtualTableRow";
22
21
  import { VirtualTableCell } from "./VirtualTableCell";
23
- import { AssignmentIcon, cn, Markdown, Typography } from "@firecms/ui";
22
+ import { AssignmentIcon, CenteredView, cls, Typography } from "@firecms/ui";
24
23
 
25
24
  const VirtualListContext = createContext<VirtualTableContextProps<any>>({} as any);
26
25
  VirtualListContext.displayName = "VirtualListContext";
@@ -64,10 +63,10 @@ const innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({
64
63
 
65
64
  {customView && <div style={{
66
65
  position: "sticky",
67
- top: "56px",
66
+ top: "48px",
68
67
  flexGrow: 1,
69
- height: "calc(100% - 56px)",
70
- marginTop: "calc(56px - 100vh)",
68
+ height: "calc(100% - 48px)",
69
+ marginTop: "calc(48px - 100vh)",
71
70
  left: 0
72
71
  }}>{customView}</div>}
73
72
 
@@ -92,7 +91,8 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
92
91
  data,
93
92
  onResetPagination,
94
93
  onEndReached,
95
- size = "m",
94
+ endOffset = 600,
95
+ rowHeight = 54,
96
96
  columns: columnsProp,
97
97
  onRowClick,
98
98
  onColumnResize,
@@ -108,9 +108,11 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
108
108
  hoverRow,
109
109
  createFilterField,
110
110
  rowClassName,
111
+ style,
111
112
  className,
112
113
  endAdornment,
113
- AddColumnComponent
114
+ AddColumnComponent,
115
+ debug
114
116
  }: VirtualTableProps<T>) {
115
117
 
116
118
  const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;
@@ -128,10 +130,14 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
128
130
  const [measureRef, bounds] = useMeasure();
129
131
 
130
132
  const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
133
+ if (debug)
134
+ console.log("onColumnResizeInternal", params);
131
135
  setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
132
136
  }, [columns]);
133
137
 
134
138
  const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
139
+ if (debug)
140
+ console.log("onColumnResizeEndInternal", params);
135
141
  setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
136
142
  if (onColumnResize) {
137
143
  onColumnResize(params);
@@ -142,10 +148,14 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
142
148
  const filterRef = useRef<VirtualTableFilterValues<any> | undefined>();
143
149
 
144
150
  useEffect(() => {
151
+ if (debug)
152
+ console.log("Filter updated", filterInput);
145
153
  filterRef.current = filterInput;
146
154
  }, [filterInput]);
147
155
 
148
156
  const scrollToTop = useCallback(() => {
157
+ if (debug)
158
+ console.log("scrollToTop");
149
159
  endReachCallbackThreshold.current = 0;
150
160
  if (tableRef.current) {
151
161
  // scrollRef.current = [scrollRef.current[0], 0];
@@ -155,6 +165,9 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
155
165
 
156
166
  const onColumnSort = useCallback((key: string) => {
157
167
 
168
+ if (debug)
169
+ console.log("onColumnSort", key);
170
+
158
171
  const isDesc = sortByProperty === key && currentSort === "desc";
159
172
  const isAsc = sortByProperty === key && currentSort === "asc";
160
173
  const newSort = isAsc ? "desc" : (isDesc ? undefined : "asc");
@@ -181,21 +194,21 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
181
194
  scrollToTop();
182
195
  }, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);
183
196
 
184
- const resetSort = useCallback(() => {
185
- endReachCallbackThreshold.current = 0;
186
- if (onSortByUpdate)
187
- onSortByUpdate(undefined);
188
- }, [onSortByUpdate]);
197
+ const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
198
+ if (debug)
199
+ console.log("maxScroll", maxScroll);
189
200
 
190
- const maxScroll = Math.max((data?.length ?? 0) * getRowHeight(size) - bounds.height, 0);
191
201
  const onEndReachedInternal = useCallback((scrollOffset: number) => {
192
- if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + 600) {
202
+ if (debug)
203
+ console.log("onEndReachedInternal", scrollOffset, endReachCallbackThreshold.current + endOffset);
204
+ if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {
193
205
  endReachCallbackThreshold.current = scrollOffset;
194
206
  onEndReached();
195
207
  }
196
208
  }, [data?.length, onEndReached]);
197
209
 
198
210
  const onScroll = useCallback(({
211
+ scrollDirection,
199
212
  scrollOffset,
200
213
  scrollUpdateWasRequested
201
214
  }: {
@@ -203,11 +216,19 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
203
216
  scrollOffset: number,
204
217
  scrollUpdateWasRequested: boolean;
205
218
  }) => {
206
- if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - 600))
219
+ if (debug)
220
+ console.log("onScroll", {
221
+ scrollDirection,
222
+ scrollOffset,
223
+ scrollUpdateWasRequested
224
+ });
225
+ if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))
207
226
  onEndReachedInternal(scrollOffset);
208
227
  }, [maxScroll, onEndReachedInternal]);
209
228
 
210
229
  const onFilterUpdateInternal = useCallback((column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, any]) => {
230
+ if (debug)
231
+ console.log("onFilterUpdateInternal", column, filterForProperty);
211
232
 
212
233
  endReachCallbackThreshold.current = 0;
213
234
  const filter = filterRef.current;
@@ -225,41 +246,33 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
225
246
  }
226
247
 
227
248
  if (onFilterUpdate) onFilterUpdate(newFilterValue);
249
+ }, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);
228
250
 
229
- if (column.key !== sortByProperty) {
230
- resetSort();
231
- }
232
- }, [checkFilterCombination, currentSort, onFilterUpdate, resetSort, sortByProperty]);
233
-
234
- const buildErrorView = useCallback(() => (
235
- <div
236
- className="h-full flex flex-col items-center justify-center sticky left-0">
251
+ const empty = !loading && (data?.length ?? 0) === 0;
252
+ const customView = error
253
+ ? <CenteredView maxWidth={"2xl"}
254
+ className="flex flex-col gap-2">
237
255
 
238
256
  <Typography variant={"h6"}>
239
- {"Error fetching data from the data source"}
257
+ {"Error"}
240
258
  </Typography>
241
259
 
242
- {error?.message && <Markdown className={"px-4 break-all"} source={error.message}/>}
260
+ {error?.message && <SafeLinkRenderer text={error.message}/>}
243
261
 
244
- </div>
245
- ), [error?.message]);
246
-
247
- const buildEmptyView = useCallback(() => {
248
- if (loading)
249
- return <CircularProgressCenter/>;
250
- return <div
251
- className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
252
- <AssignmentIcon/>
253
- {emptyComponent}
254
- </div>;
255
- }, [emptyComponent, loading]);
256
-
257
- const empty = !loading && (data?.length ?? 0) === 0;
258
- const customView = error ? buildErrorView() : (empty ? buildEmptyView() : undefined);
262
+ </CenteredView>
263
+ : (empty
264
+ ? (loading
265
+ ? <CircularProgressCenter/>
266
+ : <div
267
+ className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
268
+ <AssignmentIcon/>
269
+ {emptyComponent}
270
+ </div>)
271
+ : undefined);
259
272
 
260
273
  const virtualListController = {
261
274
  data,
262
- size,
275
+ rowHeight: rowHeight,
263
276
  cellRenderer,
264
277
  columns,
265
278
  currentSort,
@@ -278,23 +291,27 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
278
291
  AddColumnComponent
279
292
  };
280
293
 
294
+ if (debug)
295
+ console.log("VirtualTable render", virtualListController);
296
+
281
297
  // useTraceUpdate(virtualListController);
282
298
  return (
283
299
  <div
284
300
  ref={measureRef}
285
- className={cn("h-full w-full", className)}>
301
+ style={style}
302
+ className={cls("h-full w-full", className)}>
286
303
  <VirtualListContext.Provider
287
304
  value={virtualListController}>
288
305
 
289
306
  <MemoizedList
290
307
  outerRef={tableRef}
291
- key={size}
308
+ key={rowHeight}
292
309
  width={bounds.width}
293
310
  height={bounds.height}
294
311
  itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}
295
312
  onScroll={onScroll}
296
313
  includeAddColumn={Boolean(AddColumnComponent)}
297
- itemSize={getRowHeight(size)}/>
314
+ itemSize={rowHeight}/>
298
315
 
299
316
  </VirtualListContext.Provider>
300
317
  </div>
@@ -334,7 +351,7 @@ function MemoizedList({
334
351
  onRowClick,
335
352
  data,
336
353
  columns,
337
- size = "m",
354
+ rowHeight = 54,
338
355
  cellRenderer,
339
356
  hoverRow,
340
357
  rowClassName,
@@ -367,7 +384,7 @@ function MemoizedList({
367
384
  ...style,
368
385
  top: `calc(${style.top}px + 48px)`
369
386
  }}
370
- size={size}>
387
+ rowHeight={rowHeight}>
371
388
 
372
389
  {columns.map((column: VirtualTableColumn, columnIndex: number) => {
373
390
  const cellData = rowData && rowData[column.key];
@@ -403,3 +420,17 @@ function MemoizedList({
403
420
  {Row}
404
421
  </List>;
405
422
  }
423
+
424
+ const SafeLinkRenderer: React.FC<{
425
+ text: string;
426
+ }> = ({ text }) => {
427
+ const urlRegex = /https?:\/\/[^\s]+/g;
428
+ const htmlContent = text.replace(urlRegex, (url) => {
429
+ // For each URL found, replace it with an HTML <a> tag
430
+ return `<a href="${url}" class="underline" target="_blank">Link</a><br/>`;
431
+ });
432
+
433
+ return (
434
+ <div className={"break-all"} dangerouslySetInnerHTML={{ __html: htmlContent }}/>
435
+ );
436
+ };
@@ -16,7 +16,7 @@ type VirtualTableCellProps<T extends any> = {
16
16
  };
17
17
 
18
18
  export const VirtualTableCell = React.memo<VirtualTableCellProps<any>>(
19
- function VirtualTableCell<T extends any>(props: VirtualTableCellProps<T>) {
19
+ function VirtualTableCell<T>(props: VirtualTableCellProps<T>) {
20
20
  // @ts-ignore
21
21
  return props.rowData && props.cellRenderer(
22
22
  {
@@ -30,14 +30,6 @@ export const VirtualTableCell = React.memo<VirtualTableCellProps<any>>(
30
30
  width: props.column.width
31
31
  } as CellRendererParams<T>
32
32
  );
33
- // return props.rowData && <props.cellRenderer
34
- // rowData={props.rowData}
35
- // rowIndex={props.rowIndex}
36
- // isScrolling={false}
37
- // column={props.column}
38
- // columns={props.columns}
39
- // columnIndex={props.columnIndex}
40
- // width={props.column.width}/>
41
33
  },
42
34
  (a, b) => {
43
35
  return equal(a.rowData, b.rowData) &&
@@ -7,7 +7,7 @@ import {
7
7
  ArrowUpwardIcon,
8
8
  Badge,
9
9
  Button,
10
- cn,
10
+ cls,
11
11
  defaultBorderMixin,
12
12
  FilterListIcon,
13
13
  IconButton,
@@ -85,7 +85,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
85
85
  return (
86
86
  <ErrorBoundary>
87
87
  <div
88
- className={cn("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-gray-50 dark:bg-gray-900",
88
+ className={cls("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-gray-50 dark:bg-gray-900",
89
89
  "text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200 ",
90
90
  "hover:bg-gray-100 dark:hover:bg-gray-800 hover:bg-opacity-50 dark:hover:bg-opacity-50",
91
91
  column.frozen ? "sticky left-0 z-10" : "relative z-0"
@@ -179,7 +179,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
179
179
 
180
180
  {column.resizable && <div
181
181
  ref={resizeHandleRef}
182
- className={cn(
182
+ className={cls(
183
183
  "absolute h-full w-[6px] top-0 right-0 cursor-col-resize",
184
184
  hovered && "bg-gray-300 dark:bg-gray-700"
185
185
  )}
@@ -198,7 +198,7 @@ function FilterForm<M>({
198
198
  onHover,
199
199
  createFilterField,
200
200
  hidden,
201
- setHidden,
201
+ setHidden
202
202
  }: FilterFormProps<M>) {
203
203
 
204
204
  const id = column.key;
@@ -232,9 +232,15 @@ function FilterForm<M>({
232
232
 
233
233
  if (!filterField) return null;
234
234
  return (
235
- <div className={"text-gray-900 dark:text-white"}>
235
+ <form noValidate={true}
236
+ onSubmit={(e) => {
237
+ e.stopPropagation();
238
+ e.preventDefault();
239
+ submit();
240
+ }}
241
+ className={"text-gray-900 dark:text-white"}>
236
242
  <div
237
- className={cn(defaultBorderMixin, "py-4 px-6 text-xs font-semibold uppercase border-b")}>
243
+ className={cls(defaultBorderMixin, "py-4 px-6 text-xs font-semibold uppercase border-b")}>
238
244
  {column.title ?? id}
239
245
  </div>
240
246
  {filterField && <div className="m-4">
@@ -252,9 +258,9 @@ function FilterForm<M>({
252
258
  <Button
253
259
  variant="outlined"
254
260
  color="primary"
255
- onClick={submit}>Filter</Button>
261
+ type="submit">Filter</Button>
256
262
  </div>
257
- </div>
263
+ </form>
258
264
  );
259
265
 
260
266
  }
@@ -4,7 +4,7 @@ import { VirtualTableColumn, VirtualTableWhereFilterOp } from "./VirtualTablePro
4
4
  import { ErrorBoundary } from "../ErrorBoundary";
5
5
  import { VirtualTableHeader } from "./VirtualTableHeader";
6
6
  import { VirtualTableContextProps } from "./types";
7
- import { cn, defaultBorderMixin } from "@firecms/ui";
7
+ import { cls, defaultBorderMixin } from "@firecms/ui";
8
8
 
9
9
  export const VirtualTableHeaderRow = ({
10
10
  columns,
@@ -100,7 +100,7 @@ export const VirtualTableHeaderRow = ({
100
100
 
101
101
  return (
102
102
  <div
103
- className={cn(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-gray-50 dark:bg-gray-900")}>
103
+ className={cls(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-gray-50 dark:bg-gray-900")}>
104
104
  {columns.map((c, columnIndex) => {
105
105
  const column = columns[columnIndex];
106
106
 
@@ -31,11 +31,6 @@ export interface VirtualTableProps<T extends Record<string, any>> {
31
31
  */
32
32
  cellRenderer: React.ComponentType<CellRendererParams<T>>;
33
33
 
34
- /**
35
- * If enabled, content is loaded in batch
36
- */
37
- paginationEnabled?: boolean;
38
-
39
34
  /**
40
35
  * Set this callback if you want to support some combinations
41
36
  * of filter combinations only.
@@ -50,6 +45,11 @@ export interface VirtualTableProps<T extends Record<string, any>> {
50
45
  */
51
46
  onEndReached?: () => void;
52
47
 
48
+ /**
49
+ * Offset in pixels where the onEndReached callback is triggered
50
+ */
51
+ endOffset?: number;
52
+
53
53
  /**
54
54
  * When the pagination should be reset. E.g. the filters or sorting
55
55
  * has been reset.
@@ -69,7 +69,7 @@ export interface VirtualTableProps<T extends Record<string, any>> {
69
69
  /**
70
70
  * Size of the table
71
71
  */
72
- size?: VirtualTableSize,
72
+ rowHeight?: number,
73
73
 
74
74
  /**
75
75
  * In case this table should have some filters set by default
@@ -131,6 +131,11 @@ export interface VirtualTableProps<T extends Record<string, any>> {
131
131
  */
132
132
  className?: string;
133
133
 
134
+ /**
135
+ * Style applied to the table
136
+ */
137
+ style?: React.CSSProperties;
138
+
134
139
  /**
135
140
  * Component rendered at the end of the table, after scroll
136
141
  */
@@ -142,9 +147,14 @@ export interface VirtualTableProps<T extends Record<string, any>> {
142
147
  */
143
148
  AddColumnComponent?: React.ComponentType;
144
149
 
150
+ /**
151
+ * Debug mode
152
+ */
153
+ debug?: boolean;
154
+
145
155
  }
146
156
 
147
- export type CellRendererParams<T extends any = any> = {
157
+ export type CellRendererParams<T = any> = {
148
158
  column: VirtualTableColumn;
149
159
  columns: VirtualTableColumn[];
150
160
  columnIndex: number;
@@ -158,7 +168,7 @@ export type CellRendererParams<T extends any = any> = {
158
168
  * @see Table
159
169
  * @group Components
160
170
  */
161
- export interface VirtualTableColumn<CustomProps extends any = any> {
171
+ export interface VirtualTableColumn<CustomProps = any> {
162
172
 
163
173
  /**
164
174
  * Data key for the cell value, could be "a.b.c"
@@ -232,12 +242,6 @@ export type OnVirtualTableColumnResizeParams = {
232
242
  column: VirtualTableColumn
233
243
  };
234
244
 
235
- /**
236
- * @see Table
237
- * @group Components
238
- */
239
- export type VirtualTableSize = "xs" | "s" | "m" | "l" | "xl";
240
-
241
245
  /**
242
246
  * @see Table
243
247
  * @group Components
@@ -252,7 +256,7 @@ export type VirtualTableFilterValues<Key extends string> = Partial<Record<Key, [
252
256
 
253
257
  /**
254
258
  * Filter conditions in a `Query.where()` clause are specified using the
255
- * strings '<', '<=', '==', '>=', '>', 'array-contains', 'in', 'not-in', and 'array-contains-any'.
259
+ * strings `<`, `<=`, `==`, `>=`, `>`, `array-contains`, `in`, and `array-contains-any`.
256
260
  * @see Table
257
261
  * @group Models
258
262
  */