@firecms/core 3.0.0-canary.27 → 3.0.0-canary.271

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 (408) hide show
  1. package/README.md +3 -3
  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 +34 -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 +31 -12
  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 +14 -13
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  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 +1 -1
  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 +7 -4
  21. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +20 -2
  22. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  23. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  24. package/dist/components/EntityJsonPreview.d.ts +3 -0
  25. package/dist/components/EntityPreview.d.ts +10 -7
  26. package/dist/components/ErrorView.d.ts +1 -1
  27. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  28. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  29. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  30. package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
  31. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  32. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  33. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  34. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  35. package/dist/components/ReferenceWidget.d.ts +3 -1
  36. package/dist/components/SelectableTable/SelectableTable.d.ts +14 -4
  37. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  38. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  39. package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
  40. package/dist/components/VirtualTable/types.d.ts +3 -3
  41. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
  42. package/dist/components/common/index.d.ts +2 -1
  43. package/dist/components/common/table_height.d.ts +5 -0
  44. package/dist/components/common/types.d.ts +4 -6
  45. package/dist/components/common/useColumnsIds.d.ts +3 -1
  46. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
  47. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  48. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  49. package/dist/components/index.d.ts +5 -2
  50. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  51. package/dist/core/DefaultAppBar.d.ts +29 -0
  52. package/dist/core/DefaultDrawer.d.ts +19 -0
  53. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  54. package/dist/core/EntityEditView.d.ts +43 -11
  55. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  56. package/dist/core/FireCMS.d.ts +3 -3
  57. package/dist/core/FireCMSRouter.d.ts +4 -0
  58. package/dist/core/NavigationRoutes.d.ts +2 -3
  59. package/dist/core/SideDialogs.d.ts +4 -2
  60. package/dist/core/field_configs.d.ts +1 -1
  61. package/dist/core/index.d.ts +4 -4
  62. package/dist/form/EntityForm.d.ts +37 -64
  63. package/dist/form/EntityFormActions.d.ts +21 -0
  64. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  65. package/dist/form/components/ErrorFocus.d.ts +1 -1
  66. package/dist/form/components/FieldHelperText.d.ts +3 -3
  67. package/dist/form/components/FormEntry.d.ts +6 -0
  68. package/dist/form/components/FormLayout.d.ts +5 -0
  69. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  70. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  71. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  72. package/dist/form/components/index.d.ts +3 -1
  73. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  74. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  75. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  76. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  77. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  78. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  79. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  80. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  81. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  82. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  83. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  84. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  85. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -13
  86. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  87. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  88. package/dist/form/index.d.ts +17 -18
  89. package/dist/form/useClearRestoreValue.d.ts +2 -2
  90. package/dist/hooks/data/delete.d.ts +4 -4
  91. package/dist/hooks/data/save.d.ts +4 -5
  92. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  93. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  94. package/dist/hooks/index.d.ts +2 -0
  95. package/dist/hooks/useAuthController.d.ts +1 -1
  96. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  97. package/dist/hooks/useBuildNavigationController.d.ts +57 -13
  98. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  99. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  100. package/dist/hooks/useModeController.d.ts +1 -2
  101. package/dist/hooks/useProjectLog.d.ts +8 -2
  102. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  103. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  104. package/dist/index.d.ts +1 -0
  105. package/dist/index.es.js +23154 -13912
  106. package/dist/index.es.js.map +1 -1
  107. package/dist/index.umd.js +25917 -588
  108. package/dist/index.umd.js.map +1 -1
  109. package/dist/internal/useBuildDataSource.d.ts +3 -17
  110. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  111. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  112. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  113. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  114. package/dist/preview/components/ReferencePreview.d.ts +4 -3
  115. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  116. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  117. package/dist/preview/util.d.ts +3 -3
  118. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  119. package/dist/routes/FireCMSRoute.d.ts +1 -0
  120. package/dist/routes/HomePageRoute.d.ts +3 -0
  121. package/dist/types/analytics.d.ts +1 -1
  122. package/dist/types/auth.d.ts +8 -10
  123. package/dist/types/collections.d.ts +112 -25
  124. package/dist/types/customization_controller.d.ts +8 -0
  125. package/dist/types/datasource.d.ts +52 -36
  126. package/dist/types/dialogs_controller.d.ts +7 -3
  127. package/dist/types/entities.d.ts +7 -2
  128. package/dist/types/entity_actions.d.ts +72 -8
  129. package/dist/types/entity_callbacks.d.ts +16 -16
  130. package/dist/types/entity_overrides.d.ts +2 -2
  131. package/dist/types/export_import.d.ts +4 -4
  132. package/dist/types/fields.d.ts +74 -42
  133. package/dist/types/firecms.d.ts +16 -3
  134. package/dist/types/firecms_context.d.ts +1 -1
  135. package/dist/types/index.d.ts +0 -1
  136. package/dist/types/navigation.d.ts +62 -19
  137. package/dist/types/permissions.d.ts +4 -4
  138. package/dist/types/plugins.d.ts +56 -13
  139. package/dist/types/properties.d.ts +81 -25
  140. package/dist/types/property_config.d.ts +1 -3
  141. package/dist/types/roles.d.ts +3 -0
  142. package/dist/types/side_dialogs_controller.d.ts +10 -0
  143. package/dist/types/side_entity_controller.d.ts +14 -1
  144. package/dist/types/storage.d.ts +75 -0
  145. package/dist/types/user.d.ts +1 -0
  146. package/dist/util/builders.d.ts +3 -3
  147. package/dist/util/callbacks.d.ts +2 -0
  148. package/dist/util/createFormexStub.d.ts +2 -0
  149. package/dist/util/entities.d.ts +3 -3
  150. package/dist/util/entity_actions.d.ts +2 -0
  151. package/dist/util/entity_cache.d.ts +23 -0
  152. package/dist/util/icon_list.d.ts +5 -1
  153. package/dist/util/icon_synonyms.d.ts +1 -98
  154. package/dist/util/icons.d.ts +7 -4
  155. package/dist/util/index.d.ts +3 -0
  156. package/dist/util/navigation_from_path.d.ts +10 -1
  157. package/dist/util/navigation_utils.d.ts +15 -3
  158. package/dist/util/objects.d.ts +2 -1
  159. package/dist/util/permissions.d.ts +4 -4
  160. package/dist/util/plurals.d.ts +0 -2
  161. package/dist/util/property_utils.d.ts +4 -4
  162. package/dist/util/references.d.ts +2 -2
  163. package/dist/util/resolutions.d.ts +42 -17
  164. package/dist/util/storage.d.ts +23 -2
  165. package/dist/util/useStorageUploadController.d.ts +3 -3
  166. package/package.json +69 -52
  167. package/src/app/AppBar.tsx +18 -0
  168. package/src/app/Drawer.tsx +24 -0
  169. package/src/app/Scaffold.tsx +253 -0
  170. package/src/app/index.ts +4 -0
  171. package/src/app/useApp.tsx +32 -0
  172. package/src/components/ArrayContainer.tsx +447 -229
  173. package/src/components/CircularProgressCenter.tsx +2 -2
  174. package/src/components/ClearFilterSortButton.tsx +41 -0
  175. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  176. package/src/components/DeleteEntityDialog.tsx +13 -20
  177. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
  178. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
  179. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
  180. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +72 -42
  181. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  182. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
  183. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
  184. package/src/components/EntityCollectionTable/index.tsx +1 -1
  185. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +34 -39
  186. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
  187. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  188. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
  189. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  190. package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
  191. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  192. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  193. package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
  194. package/src/components/EntityCollectionView/utils.ts +19 -0
  195. package/src/components/EntityJsonPreview.tsx +66 -0
  196. package/src/components/EntityPreview.tsx +83 -62
  197. package/src/components/EntityView.tsx +13 -10
  198. package/src/components/ErrorView.tsx +4 -4
  199. package/src/components/FireCMSLogo.tsx +7 -51
  200. package/src/components/HomePage/DefaultHomePage.tsx +512 -157
  201. package/src/components/HomePage/FavouritesView.tsx +9 -14
  202. package/src/components/HomePage/HomePageDnD.tsx +599 -0
  203. package/src/components/HomePage/NavigationCard.tsx +48 -39
  204. package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
  205. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  206. package/src/components/HomePage/RenameGroupDialog.tsx +117 -0
  207. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  208. package/src/components/NotFoundPage.tsx +2 -2
  209. package/src/components/PropertyConfigBadge.tsx +9 -3
  210. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  211. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +23 -13
  212. package/src/components/ReferenceWidget.tsx +21 -11
  213. package/src/components/SearchIconsView.tsx +10 -7
  214. package/src/components/SelectableTable/SelectableTable.tsx +157 -145
  215. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  216. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
  217. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
  218. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +93 -24
  219. package/src/components/UnsavedChangesDialog.tsx +46 -0
  220. package/src/components/VirtualTable/VirtualTable.tsx +105 -51
  221. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  222. package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
  223. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  224. package/src/components/VirtualTable/VirtualTableProps.tsx +28 -14
  225. package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
  226. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
  227. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  228. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  229. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  230. package/src/components/VirtualTable/types.tsx +2 -3
  231. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
  232. package/src/components/common/index.ts +2 -1
  233. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  234. package/src/components/common/types.tsx +4 -6
  235. package/src/components/common/useColumnsIds.tsx +24 -3
  236. package/src/components/common/useDataSourceTableController.tsx +420 -0
  237. package/src/components/common/useDebouncedCallback.tsx +20 -0
  238. package/src/components/common/useScrollRestoration.tsx +68 -0
  239. package/src/components/common/useTableSearchHelper.ts +53 -12
  240. package/src/components/index.tsx +6 -2
  241. package/src/contexts/BreacrumbsContext.tsx +38 -0
  242. package/src/contexts/DialogsProvider.tsx +5 -4
  243. package/src/contexts/ModeController.tsx +1 -3
  244. package/src/contexts/SnackbarProvider.tsx +2 -0
  245. package/src/core/DefaultAppBar.tsx +219 -0
  246. package/src/core/DefaultDrawer.tsx +185 -0
  247. package/src/core/DrawerNavigationItem.tsx +66 -0
  248. package/src/core/EntityEditView.tsx +435 -470
  249. package/src/core/EntityEditViewFormActions.tsx +329 -0
  250. package/src/core/EntitySidePanel.tsx +88 -21
  251. package/src/core/FireCMS.tsx +74 -58
  252. package/src/core/FireCMSRouter.tsx +17 -0
  253. package/src/core/NavigationRoutes.tsx +28 -38
  254. package/src/core/SideDialogs.tsx +22 -12
  255. package/src/core/field_configs.tsx +26 -13
  256. package/src/core/index.tsx +6 -5
  257. package/src/form/EntityForm.tsx +620 -534
  258. package/src/form/EntityFormActions.tsx +211 -0
  259. package/src/form/PropertyFieldBinding.tsx +88 -45
  260. package/src/form/components/CustomIdField.tsx +9 -3
  261. package/src/form/components/FieldHelperText.tsx +4 -4
  262. package/src/form/components/FormEntry.tsx +22 -0
  263. package/src/form/components/FormLayout.tsx +16 -0
  264. package/src/form/components/LabelWithIcon.tsx +30 -19
  265. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  266. package/src/form/components/StorageItemPreview.tsx +23 -13
  267. package/src/form/components/StorageUploadProgress.tsx +5 -6
  268. package/src/form/components/index.tsx +3 -1
  269. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
  270. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
  271. package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
  272. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  273. package/src/form/field_bindings/KeyValueFieldBinding.tsx +61 -52
  274. package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
  275. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  276. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  277. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  278. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  279. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  280. package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
  281. package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
  282. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
  283. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  284. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  285. package/src/form/index.tsx +17 -37
  286. package/src/form/useClearRestoreValue.tsx +2 -2
  287. package/src/form/validation.ts +13 -23
  288. package/src/hooks/data/delete.ts +6 -5
  289. package/src/hooks/data/save.ts +26 -33
  290. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  291. package/src/hooks/data/useDataSource.tsx +11 -3
  292. package/src/hooks/data/useEntityFetch.tsx +10 -6
  293. package/src/hooks/index.tsx +2 -0
  294. package/src/hooks/useAuthController.tsx +1 -1
  295. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  296. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  297. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  298. package/src/hooks/useBuildModeController.tsx +22 -29
  299. package/src/hooks/useBuildNavigationController.tsx +440 -119
  300. package/src/hooks/useCollapsedGroups.ts +64 -0
  301. package/src/hooks/useFireCMSContext.tsx +3 -33
  302. package/src/hooks/useLargeLayout.tsx +0 -35
  303. package/src/hooks/useModeController.tsx +1 -2
  304. package/src/hooks/useProjectLog.tsx +32 -10
  305. package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
  306. package/src/hooks/useValidateAuthenticator.tsx +17 -37
  307. package/src/index.ts +1 -0
  308. package/src/internal/useBuildDataSource.ts +79 -85
  309. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  310. package/src/internal/useBuildSideEntityController.tsx +204 -77
  311. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  312. package/src/preview/PropertyPreview.tsx +34 -25
  313. package/src/preview/PropertyPreviewProps.tsx +7 -1
  314. package/src/preview/components/BooleanPreview.tsx +2 -2
  315. package/src/preview/components/EmptyValue.tsx +1 -1
  316. package/src/preview/components/EnumValuesChip.tsx +2 -2
  317. package/src/preview/components/ImagePreview.tsx +26 -37
  318. package/src/preview/components/ReferencePreview.tsx +26 -36
  319. package/src/preview/components/StorageThumbnail.tsx +5 -1
  320. package/src/preview/components/UrlComponentPreview.tsx +60 -28
  321. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
  322. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
  323. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
  324. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
  325. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
  326. package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
  327. package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
  328. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  329. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  330. package/src/preview/util.ts +10 -10
  331. package/src/routes/CustomCMSRoute.tsx +21 -0
  332. package/src/routes/FireCMSRoute.tsx +246 -0
  333. package/src/routes/HomePageRoute.tsx +17 -0
  334. package/src/types/analytics.ts +3 -0
  335. package/src/types/auth.tsx +9 -13
  336. package/src/types/collections.ts +134 -30
  337. package/src/types/customization_controller.tsx +9 -1
  338. package/src/types/datasource.ts +61 -43
  339. package/src/types/dialogs_controller.tsx +7 -3
  340. package/src/types/entities.ts +12 -2
  341. package/src/types/entity_actions.tsx +86 -10
  342. package/src/types/entity_callbacks.ts +18 -18
  343. package/src/types/entity_overrides.tsx +2 -2
  344. package/src/types/export_import.ts +4 -4
  345. package/src/types/fields.tsx +85 -46
  346. package/src/types/firecms.tsx +18 -4
  347. package/src/types/firecms_context.tsx +1 -1
  348. package/src/types/index.ts +0 -1
  349. package/src/types/navigation.ts +77 -24
  350. package/src/types/permissions.ts +5 -5
  351. package/src/types/plugins.tsx +66 -15
  352. package/src/types/properties.ts +96 -27
  353. package/src/types/property_config.tsx +1 -2
  354. package/src/types/roles.ts +3 -0
  355. package/src/types/side_dialogs_controller.tsx +15 -0
  356. package/src/types/side_entity_controller.tsx +16 -1
  357. package/src/types/storage.ts +83 -1
  358. package/src/types/user.ts +2 -0
  359. package/src/util/builders.ts +10 -8
  360. package/src/util/callbacks.ts +119 -0
  361. package/src/util/createFormexStub.tsx +62 -0
  362. package/src/util/entities.ts +10 -7
  363. package/src/util/entity_actions.ts +28 -0
  364. package/src/util/entity_cache.ts +204 -0
  365. package/src/util/enums.ts +1 -1
  366. package/src/util/icon_list.ts +16 -10
  367. package/src/util/icon_synonyms.ts +3 -100
  368. package/src/util/icons.tsx +36 -11
  369. package/src/util/index.ts +3 -0
  370. package/src/util/join_collections.ts +9 -2
  371. package/src/util/make_properties_editable.ts +13 -5
  372. package/src/util/navigation_from_path.ts +33 -12
  373. package/src/util/navigation_utils.ts +141 -25
  374. package/src/util/objects.ts +90 -33
  375. package/src/util/parent_references_from_path.ts +3 -3
  376. package/src/util/permissions.ts +9 -8
  377. package/src/util/plurals.ts +0 -2
  378. package/src/util/property_utils.tsx +17 -6
  379. package/src/util/references.ts +19 -8
  380. package/src/util/resolutions.ts +122 -48
  381. package/src/util/storage.ts +79 -21
  382. package/src/util/strings.ts +2 -2
  383. package/src/util/useStorageUploadController.tsx +91 -28
  384. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  385. package/dist/components/FireCMSAppBar.d.ts +0 -26
  386. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  387. package/dist/components/VirtualTable/common.d.ts +0 -2
  388. package/dist/core/Drawer.d.ts +0 -23
  389. package/dist/core/Scaffold.d.ts +0 -55
  390. package/dist/core/SideEntityView.d.ts +0 -7
  391. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  392. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  393. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  394. package/dist/internal/useLocaleConfig.d.ts +0 -1
  395. package/dist/types/appcheck.d.ts +0 -26
  396. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  397. package/src/components/FireCMSAppBar.tsx +0 -165
  398. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  399. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
  400. package/src/core/Drawer.tsx +0 -191
  401. package/src/core/Scaffold.tsx +0 -281
  402. package/src/core/SideEntityView.tsx +0 -38
  403. package/src/form/components/FormikArrayContainer.tsx +0 -44
  404. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  405. package/src/internal/useBuildCustomizationController.tsx +0 -5
  406. package/src/internal/useLocaleConfig.tsx +0 -18
  407. package/src/types/appcheck.ts +0 -29
  408. /package/src/util/{common.tsx → common.ts} +0 -0
@@ -0,0 +1,211 @@
1
+ import React from "react";
2
+ import {
3
+ Entity,
4
+ EntityAction,
5
+ FireCMSContext,
6
+ FormContext,
7
+ ResolvedEntityCollection,
8
+ SideEntityController
9
+ } from "../types";
10
+ import { Button, cls, defaultBorderMixin, DialogActions, IconButton, LoadingButton, Typography } from "@firecms/ui";
11
+ import { FormexController } from "@firecms/formex";
12
+ import { useFireCMSContext, useSideEntityController } from "../hooks";
13
+
14
+ export interface EntityFormActionsProps {
15
+ fullPath: string;
16
+ fullIdPath?: string;
17
+ collection: ResolvedEntityCollection;
18
+ path: string;
19
+ entity?: Entity;
20
+ layout: "bottom" | "side";
21
+ savingError?: Error;
22
+ formex: FormexController<any>;
23
+ disabled: boolean;
24
+ status: "new" | "existing" | "copy";
25
+ pluginActions: React.ReactNode[];
26
+ openEntityMode: "side_panel" | "full_screen";
27
+ showDefaultActions?: boolean;
28
+ navigateBack: () => void;
29
+ formContext: FormContext
30
+ }
31
+
32
+ export function EntityFormActions({
33
+ fullPath,
34
+ fullIdPath,
35
+ collection,
36
+ entity,
37
+ layout,
38
+ savingError,
39
+ formex,
40
+ disabled,
41
+ status,
42
+ pluginActions,
43
+ openEntityMode,
44
+ navigateBack,
45
+ formContext
46
+ }: EntityFormActionsProps) {
47
+
48
+ const context = useFireCMSContext();
49
+ const sideEntityController = useSideEntityController();
50
+
51
+ return layout === "bottom"
52
+ ? buildBottomActions({
53
+ fullPath,
54
+ fullIdPath,
55
+ savingError,
56
+ entity,
57
+ collection,
58
+ context,
59
+ sideEntityController,
60
+ isSubmitting: formex.isSubmitting,
61
+ disabled,
62
+ status,
63
+ pluginActions,
64
+ openEntityMode,
65
+ navigateBack,
66
+ formContext
67
+ })
68
+ : buildSideActions({
69
+ fullPath,
70
+ fullIdPath,
71
+ savingError,
72
+ entity,
73
+ collection,
74
+ context,
75
+ sideEntityController,
76
+ isSubmitting: formex.isSubmitting,
77
+ disabled,
78
+ status,
79
+ pluginActions,
80
+ openEntityMode,
81
+ navigateBack,
82
+ formContext
83
+ });
84
+ }
85
+
86
+ type ActionsViewProps<M extends object> = {
87
+ fullPath: string,
88
+ fullIdPath?: string,
89
+ savingError: Error | undefined,
90
+ entity: Entity<M> | undefined,
91
+ formActions?: EntityAction[],
92
+ collection: ResolvedEntityCollection,
93
+ context: FireCMSContext,
94
+ sideEntityController: SideEntityController,
95
+ isSubmitting: boolean,
96
+ disabled: boolean,
97
+ status: "new" | "existing" | "copy",
98
+ pluginActions?: React.ReactNode[],
99
+ openEntityMode: "side_panel" | "full_screen";
100
+ navigateBack: () => void;
101
+ formContext: FormContext
102
+ };
103
+
104
+ function buildBottomActions<M extends object>({
105
+ savingError,
106
+ entity,
107
+ fullPath,
108
+ fullIdPath,
109
+ formActions,
110
+ collection,
111
+ context,
112
+ sideEntityController,
113
+ isSubmitting,
114
+ disabled,
115
+ status,
116
+ pluginActions,
117
+ openEntityMode,
118
+ navigateBack,
119
+ formContext
120
+ }: ActionsViewProps<M>) {
121
+
122
+ return <DialogActions position={"absolute"}>
123
+ {savingError &&
124
+ <div className="text-right">
125
+ <Typography color={"error"}>{savingError.message}</Typography>
126
+ </div>
127
+ }
128
+ {entity && (formActions ?? []).length > 0 && <div className="flex-grow flex overflow-auto no-scrollbar">
129
+ {(formActions ?? []).map(action => (
130
+ <IconButton
131
+ key={action.name}
132
+ color="primary"
133
+ onClick={(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
134
+ event.stopPropagation();
135
+ if (entity)
136
+ action.onClick({
137
+ view: "form",
138
+ entity,
139
+ fullPath: fullPath ?? collection.path,
140
+ fullIdPath: fullIdPath ?? collection.id,
141
+ collection: collection,
142
+ context,
143
+ sideEntityController,
144
+ openEntityMode: openEntityMode,
145
+ navigateBack,
146
+ formContext
147
+ });
148
+ }}>
149
+ {action.icon}
150
+ </IconButton>
151
+ ))}
152
+ </div>}
153
+ {pluginActions}
154
+ <Button variant="text" disabled={disabled || isSubmitting}
155
+ color={"primary"}
156
+ type="reset">
157
+ {status === "existing" ? "Discard" : "Clear"}
158
+ </Button>
159
+ <Button variant={"filled"}
160
+ color="primary"
161
+ type="submit"
162
+ disabled={disabled || isSubmitting}>
163
+ {status === "existing" && "Save"}
164
+ {status === "copy" && "Create copy"}
165
+ {status === "new" && "Create"}
166
+ </Button>
167
+
168
+ </DialogActions>;
169
+ }
170
+
171
+ function buildSideActions<M extends object>({
172
+ savingError,
173
+ entity,
174
+ formActions,
175
+ fullPath,
176
+ fullIdPath,
177
+ openEntityMode,
178
+ collection,
179
+ context,
180
+ sideEntityController,
181
+ isSubmitting,
182
+ disabled,
183
+ status,
184
+ pluginActions
185
+ }: ActionsViewProps<M>) {
186
+
187
+ return <div
188
+ className={cls("overflow-auto h-full flex flex-col gap-2 w-80 2xl:w-96 px-4 py-16 sticky top-0 border-l", defaultBorderMixin)}>
189
+ <LoadingButton fullWidth={true}
190
+ variant="filled"
191
+ color="primary"
192
+ type="submit"
193
+ size={"large"}
194
+ disabled={disabled || isSubmitting}>
195
+ {status === "existing" && "Save"}
196
+ {status === "copy" && "Create copy"}
197
+ {status === "new" && "Create"}
198
+ </LoadingButton>
199
+ <Button fullWidth={true} variant="text" disabled={disabled || isSubmitting} type="reset">
200
+ {status === "existing" ? "Discard" : "Clear"}
201
+ </Button>
202
+
203
+ {pluginActions}
204
+
205
+ {savingError &&
206
+ <div className="text-right">
207
+ <Typography color={"error"}>{savingError.message}</Typography>
208
+ </div>
209
+ }
210
+ </div>;
211
+ }
@@ -5,19 +5,19 @@ import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
5
5
 
6
6
  import {
7
7
  CMSType,
8
- EntityCollection,
9
8
  FieldProps,
10
9
  FireCMSPlugin,
11
10
  PluginFieldBuilderParams,
12
11
  Property,
13
12
  PropertyFieldBindingProps,
14
13
  PropertyOrBuilder,
14
+ ResolvedEntityCollection,
15
15
  ResolvedProperty
16
16
  } from "../types";
17
17
  import { ReadOnlyFieldBinding } from "./field_bindings/ReadOnlyFieldBinding";
18
18
 
19
19
  import { isHidden, isPropertyBuilder, isReadOnly, resolveProperty } from "../util";
20
- import { useCustomizationController } from "../hooks";
20
+ import { useAuthController, useCustomizationController } from "../hooks";
21
21
  import { Typography } from "@firecms/ui";
22
22
  import { getFieldConfig, getFieldId } from "../core";
23
23
  import { ErrorBoundary } from "../components";
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
51
51
  if (a.propertyKey !== b.propertyKey) {
52
52
  return false;
53
53
  }
54
+ if (a.index !== b.index) {
55
+ return false;
56
+ }
57
+
58
+ if (a.size !== b.size) {
59
+ return false;
60
+ }
54
61
  const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
55
62
  const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
56
63
 
@@ -67,24 +74,28 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
67
74
  return false;
68
75
  }) as typeof PropertyFieldBindingInternal;
69
76
 
70
- function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>>
77
+ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = any>
71
78
  ({
72
79
  propertyKey,
73
80
  property,
74
81
  context,
75
82
  includeDescription,
76
83
  underlyingValueHasChanged,
77
- disabled,
78
- tableMode,
84
+ disabled: disabledProp,
79
85
  partOfArray,
80
- partOfBlock,
86
+ minimalistView,
81
87
  autoFocus,
88
+ index,
89
+ size,
90
+ onPropertyChange,
82
91
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
83
92
 
93
+ const authController = useAuthController();
84
94
  const customizationController = useCustomizationController();
85
95
 
86
96
  return (
87
97
  <Field
98
+ key={propertyKey}
88
99
  name={propertyKey}
89
100
  >
90
101
  {(fieldProps) => {
@@ -92,14 +103,17 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
92
103
  let Component: ComponentType<FieldProps<T>> | undefined;
93
104
  const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
94
105
  propertyKey,
95
- propertyValue: fieldProps.field.value,
96
106
  propertyOrBuilder: property,
97
107
  values: fieldProps.form.values,
98
108
  path: context.path,
99
109
  entityId: context.entityId,
100
- fields: customizationController.propertyConfigs
110
+ propertyConfigs: customizationController.propertyConfigs,
111
+ index,
112
+ authController
101
113
  });
102
114
 
115
+ const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled) || context.disabled;
116
+
103
117
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
104
118
  return <></>;
105
119
  } else if (isReadOnly(resolvedProperty)) {
@@ -111,16 +125,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
111
125
  } else {
112
126
  const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
113
127
  if (!propertyConfig) {
114
- console.log("INTERNAL: Could not find field config for property", { propertyKey, resolvedProperty, fields: customizationController.propertyConfigs, propertyConfig });
128
+ console.log("INTERNAL: Could not find field config for property", {
129
+ propertyKey,
130
+ property,
131
+ resolvedProperty,
132
+ fields: customizationController.propertyConfigs,
133
+ propertyConfig
134
+ });
115
135
  throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
116
136
  }
117
137
  const configProperty = resolveProperty({
138
+ propertyKey,
118
139
  propertyOrBuilder: propertyConfig.property,
119
- propertyValue: fieldProps.field.value,
120
140
  values: fieldProps.form.values,
121
141
  path: context.path,
122
142
  entityId: context.entityId,
123
- fields: customizationController.propertyConfigs
143
+ propertyConfigs: customizationController.propertyConfigs,
144
+ index,
145
+ authController
124
146
  });
125
147
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
126
148
  }
@@ -128,7 +150,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
128
150
  console.warn(`No field component found for property ${propertyKey}`);
129
151
  console.warn("Property:", property);
130
152
  return (
131
- <div>{`Currently the field ${resolvedProperty.dataType} is not supported`}</div>
153
+ <div className={"w-full"}>
154
+ {`Currently the field ${resolvedProperty.dataType} is not supported`}
155
+ </div>
132
156
  );
133
157
  }
134
158
 
@@ -139,23 +163,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
139
163
  underlyingValueHasChanged,
140
164
  context,
141
165
  disabled,
142
- tableMode,
143
166
  partOfArray,
144
- partOfBlock,
145
- autoFocus
167
+ minimalistView,
168
+ autoFocus,
169
+ size,
170
+ onPropertyChange
146
171
  };
147
172
 
148
173
  return <FieldInternal
149
174
  Component={Component as ComponentType<FieldProps>}
150
175
  componentProps={componentProps}
151
- fieldProps={fieldProps}/>;
176
+ formexFieldProps={fieldProps}/>;
152
177
  }}
153
178
  </Field>
154
179
  );
155
180
 
156
181
  }
157
182
 
158
- type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>> =
183
+ type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
159
184
  Omit<PropertyFieldBindingProps<T, M>, "property">
160
185
  & {
161
186
  property: ResolvedProperty<T>
@@ -169,52 +194,58 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
169
194
  property,
170
195
  includeDescription,
171
196
  underlyingValueHasChanged,
172
- tableMode,
173
197
  partOfArray,
174
- partOfBlock,
198
+ minimalistView,
175
199
  autoFocus,
176
200
  context,
177
- disabled
201
+ disabled,
202
+ size,
203
+ onPropertyChange
178
204
  },
179
- fieldProps
205
+ formexFieldProps
180
206
  }:
181
- {
182
- Component: ComponentType<FieldProps<T, any, M>>,
183
- componentProps: ResolvedPropertyFieldBindingProps<T, M>,
184
- fieldProps: FormexFieldProps<T, any>
185
- }) {
207
+ {
208
+ Component: ComponentType<FieldProps<T, any, M>>,
209
+ componentProps: ResolvedPropertyFieldBindingProps<T, M>,
210
+ formexFieldProps: FormexFieldProps<T, any>
211
+ }) {
186
212
 
187
213
  const { plugins } = useCustomizationController();
188
214
 
189
215
  const customFieldProps: any = property.customProps;
190
- const value = fieldProps.field.value;
191
- // const initialValue = fieldProps.meta.initialValue;
192
- const error = getIn(fieldProps.form.errors, propertyKey);
193
- const touched = getIn(fieldProps.form.touched, propertyKey);
216
+ const value = formexFieldProps.field.value;
217
+ const error = getIn(formexFieldProps.form.errors, propertyKey);
218
+ const touched = getIn(formexFieldProps.form.touched, propertyKey);
194
219
 
195
220
  const showError: boolean = error &&
196
- (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
221
+ (formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
197
222
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
198
223
 
199
- const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
224
+ const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
225
+ path: context.path,
226
+ collection: context.collection,
227
+ propertyKey: propertyKey,
228
+ property: property,
229
+ Component: Component,
230
+ plugins: plugins
231
+ });
200
232
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
201
233
 
202
- const isSubmitting = fieldProps.form.isSubmitting;
234
+ const isSubmitting = formexFieldProps.form.isSubmitting;
203
235
 
204
236
  const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
205
- fieldProps.form.setFieldTouched(propertyKey, true, false);
206
- fieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
237
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
238
+ formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
207
239
  }, []);
208
240
 
209
241
  const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
210
- fieldProps.form.setFieldTouched(propertyKey, true, false);
211
- fieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
242
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
243
+ formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
212
244
  }, []);
213
245
 
214
246
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
215
247
  propertyKey,
216
248
  value: value as T,
217
- // initialValue,
218
249
  setValue,
219
250
  setFieldValue,
220
251
  error,
@@ -225,12 +256,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
225
256
  property: property as ResolvedProperty<T>,
226
257
  disabled: disabled ?? false,
227
258
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
228
- tableMode: tableMode ?? false,
229
259
  partOfArray: partOfArray ?? false,
230
- partOfBlock: partOfBlock ?? false,
260
+ minimalistView: minimalistView ?? false,
231
261
  autoFocus: autoFocus ?? false,
232
262
  customProps: customFieldProps,
233
- context
263
+ context,
264
+ size,
265
+ onPropertyChange
234
266
  };
235
267
 
236
268
  return (
@@ -266,13 +298,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
266
298
  }
267
299
  }
268
300
 
269
- function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
270
- path: string,
271
- collection: EntityCollection<M>,
301
+ interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
302
+ path?: string,
303
+ collection?: ResolvedEntityCollection<M>,
272
304
  propertyKey: string,
273
305
  property: ResolvedProperty<T>,
274
306
  Component: ComponentType<FieldProps<T, any, M>>,
275
307
  plugins?: FireCMSPlugin[]
308
+ }
309
+
310
+ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
311
+ {
312
+ path,
313
+ collection,
314
+ propertyKey,
315
+ property,
316
+ Component,
317
+ plugins
318
+ }: UseWrappedComponentParams<T, M>
276
319
  ): ComponentType<FieldProps<T, any, M>> | null {
277
320
 
278
321
  const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
@@ -288,7 +331,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
288
331
  Field: Component,
289
332
  plugin,
290
333
  path,
291
- collection
334
+ collection,
292
335
  };
293
336
  const enabled = plugin.form?.fieldBuilderEnabled?.(params);
294
337
  if (enabled === undefined || enabled)
@@ -68,7 +68,8 @@ export function CustomIdField<M extends Record<string, any>>({
68
68
  ? (
69
69
  <>
70
70
 
71
- <Tooltip title={"Copy"}>
71
+ <Tooltip title={"Copy"}
72
+ asChild={true}>
72
73
  <IconButton onClick={(e) => copy(entity.id)}
73
74
  aria-label="copy-id">
74
75
  <ContentCopyIcon size={"small"}/>
@@ -76,7 +77,8 @@ export function CustomIdField<M extends Record<string, any>>({
76
77
  </Tooltip>
77
78
 
78
79
  {customizationController?.entityLinkBuilder &&
79
- <Tooltip title={"Open in the console"}>
80
+ <Tooltip title={"Open in the console"}
81
+ asChild={true}>
80
82
  <IconButton component={"a"}
81
83
  href={customizationController.entityLinkBuilder({ entity })}
82
84
  rel="noopener noreferrer"
@@ -98,8 +100,12 @@ export function CustomIdField<M extends Record<string, any>>({
98
100
 
99
101
  {enumValues &&
100
102
  <Select
103
+ size={"large"}
101
104
  error={error}
102
- onValueChange={(v) => onChange(v as string)}
105
+ fullWidth={true}
106
+ onValueChange={(v) => {
107
+ onChange(v as string);
108
+ }}
103
109
  {...fieldProps}
104
110
  renderValue={(option) => {
105
111
  const enumConfig = enumValues.find(e => e.id === option);
@@ -1,4 +1,4 @@
1
- import { ResolvedProperty } from "../../types";
1
+ import { Property, ResolvedProperty } from "../../types";
2
2
  import { IconButton, InfoIcon, Tooltip, Typography } from "@firecms/ui";
3
3
 
4
4
  /**
@@ -13,8 +13,8 @@ export function FieldHelperText({
13
13
  disabled
14
14
  }: {
15
15
  error?: string,
16
- showError: boolean,
17
- property: ResolvedProperty,
16
+ showError?: boolean,
17
+ property: ResolvedProperty | Property,
18
18
  includeDescription?: boolean,
19
19
  disabled?: boolean,
20
20
  }
@@ -44,7 +44,7 @@ export function FieldHelperText({
44
44
  {property.longDescription &&
45
45
  <Tooltip title={property.longDescription}
46
46
  side="bottom"
47
- >
47
+ asChild={true}>
48
48
  <IconButton
49
49
  size={"small"}
50
50
  className="self-start">
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ import { ErrorBoundary } from "../../components";
3
+
4
+ export function FormEntry({
5
+ propertyKey,
6
+ widthPercentage = 100,
7
+ children
8
+ }: {
9
+ propertyKey: string;
10
+ widthPercentage?: number;
11
+ children: React.ReactNode;
12
+ }) {
13
+ return (
14
+ <div id={`form_field_${propertyKey}`}
15
+ className={"relative"}
16
+ style={{ width: widthPercentage === 100 ? "100%" : `calc(${widthPercentage}% - 8px)` }}>
17
+ <ErrorBoundary>
18
+ {children}
19
+ </ErrorBoundary>
20
+ </div>
21
+ );
22
+ }
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import { cls } from "@firecms/ui";
3
+
4
+ export function FormLayout({
5
+ children,
6
+ className
7
+ }: {
8
+ children: React.ReactNode;
9
+ className?: string;
10
+ }) {
11
+ return (
12
+ <div className={cls("flex flex-wrap gap-x-4 w-full space-y-8", className)}>
13
+ {children}
14
+ </div>
15
+ );
16
+ }
@@ -1,4 +1,5 @@
1
- import React from "react";
1
+ import React, { forwardRef } from "react";
2
+ import { cls } from "@firecms/ui";
2
3
 
3
4
  interface LabelWithIconProps {
4
5
  icon: React.ReactNode;
@@ -12,22 +13,32 @@ interface LabelWithIconProps {
12
13
  * Render the label of with an icon and the title of a property
13
14
  * @group Form custom fields
14
15
  */
15
- export function LabelWithIcon({
16
- icon,
17
- title,
18
- small,
19
- className,
20
- required
21
- }: LabelWithIconProps) {
22
- return (
23
- <span
24
- className={`inline-flex items-center my-0.5 ${small ? "gap-1" : "gap-2"} ${className ?? ""}`}>
25
-
26
- {icon}
27
-
28
- <span
29
- className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""}`}>{(title ?? "") + (required ? " *" : "")}</span>
30
-
16
+ export const LabelWithIcon = forwardRef<HTMLDivElement, LabelWithIconProps>(
17
+ ({
18
+ icon,
19
+ title,
20
+ small,
21
+ className,
22
+ required
23
+ }, ref) => {
24
+ return (
25
+ <div
26
+ ref={ref}
27
+ className={cls("align-middle inline-flex items-center my-0.5",
28
+ small ? "gap-1" : "gap-2",
29
+ className)}
30
+ >
31
+ {icon}
32
+ <span
33
+ className={`text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${
34
+ small ? "translate-x-2 scale-75" : ""
35
+ }`}
36
+ >
37
+ {(title ?? "") + (required ? " *" : "")}
31
38
  </span>
32
- );
33
- }
39
+ </div>
40
+ );
41
+ }
42
+ );
43
+
44
+ LabelWithIcon.displayName = "LabelWithIcon";