@firecms/core 3.0.0-canary.99 → 3.0.0-rc.2

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 (371) hide show
  1. package/README.md +2 -2
  2. package/dist/app/Drawer.d.ts +0 -1
  3. package/dist/app/Scaffold.d.ts +4 -0
  4. package/dist/components/ArrayContainer.d.ts +31 -12
  5. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  6. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +3 -1
  7. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  8. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +17 -3
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +6 -3
  12. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +8 -0
  13. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  14. package/dist/components/EntityJsonPreview.d.ts +3 -0
  15. package/dist/components/EntityPreview.d.ts +8 -6
  16. package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
  17. package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
  18. package/dist/components/HomePage/NavigationCard.d.ts +3 -1
  19. package/dist/components/HomePage/NavigationCardBinding.d.ts +3 -2
  20. package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
  21. package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
  22. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  23. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  24. package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
  25. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +1 -1
  26. package/dist/components/UnsavedChangesDialog.d.ts +8 -0
  27. package/dist/components/UserDisplay.d.ts +7 -0
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -2
  29. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
  30. package/dist/components/common/default_entity_actions.d.ts +0 -2
  31. package/dist/components/common/index.d.ts +1 -1
  32. package/dist/components/common/useColumnsIds.d.ts +1 -0
  33. package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +10 -2
  34. package/dist/components/common/useDebouncedCallback.d.ts +1 -0
  35. package/dist/components/common/useScrollRestoration.d.ts +14 -0
  36. package/dist/components/index.d.ts +3 -1
  37. package/dist/contexts/BreacrumbsContext.d.ts +8 -0
  38. package/dist/contexts/InternalUserManagementContext.d.ts +3 -0
  39. package/dist/core/DefaultAppBar.d.ts +8 -2
  40. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  41. package/dist/core/EntityEditView.d.ts +40 -22
  42. package/dist/core/EntityEditViewFormActions.d.ts +2 -0
  43. package/dist/core/FireCMS.d.ts +2 -3
  44. package/dist/core/FireCMSRouter.d.ts +4 -0
  45. package/dist/core/NavigationRoutes.d.ts +0 -1
  46. package/dist/core/SideDialogs.d.ts +4 -2
  47. package/dist/core/field_configs.d.ts +1 -1
  48. package/dist/core/index.d.ts +2 -1
  49. package/dist/form/EntityForm.d.ts +50 -0
  50. package/dist/form/EntityFormActions.d.ts +21 -0
  51. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  52. package/dist/form/components/FormEntry.d.ts +6 -0
  53. package/dist/form/components/FormLayout.d.ts +5 -0
  54. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  55. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  56. package/dist/form/components/index.d.ts +3 -1
  57. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  61. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  62. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  63. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  64. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +9 -0
  66. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  67. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  68. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  69. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -10
  70. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
  71. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  72. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
  73. package/dist/form/index.d.ts +17 -16
  74. package/dist/form/useClearRestoreValue.d.ts +2 -2
  75. package/dist/hooks/data/delete.d.ts +4 -4
  76. package/dist/hooks/data/save.d.ts +3 -3
  77. package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
  78. package/dist/hooks/data/useEntityFetch.d.ts +4 -3
  79. package/dist/hooks/index.d.ts +2 -0
  80. package/dist/hooks/useAuthController.d.ts +1 -1
  81. package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
  82. package/dist/hooks/useBuildNavigationController.d.ts +57 -12
  83. package/dist/hooks/useCollapsedGroups.d.ts +9 -0
  84. package/dist/hooks/useFireCMSContext.d.ts +1 -1
  85. package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
  86. package/dist/hooks/useModeController.d.ts +1 -2
  87. package/dist/hooks/useProjectLog.d.ts +7 -1
  88. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  89. package/dist/hooks/useValidateAuthenticator.d.ts +3 -3
  90. package/dist/index.es.js +20480 -14434
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.umd.js +20250 -14209
  93. package/dist/index.umd.js.map +1 -1
  94. package/dist/internal/useBuildDataSource.d.ts +3 -2
  95. package/dist/internal/useBuildSideEntityController.d.ts +3 -3
  96. package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
  97. package/dist/preview/PropertyPreviewProps.d.ts +1 -1
  98. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  99. package/dist/preview/components/ReferencePreview.d.ts +2 -2
  100. package/dist/preview/components/UserPreview.d.ts +8 -0
  101. package/dist/preview/index.d.ts +1 -0
  102. package/dist/preview/util.d.ts +3 -3
  103. package/dist/routes/CustomCMSRoute.d.ts +4 -0
  104. package/dist/routes/FireCMSRoute.d.ts +1 -0
  105. package/dist/routes/HomePageRoute.d.ts +3 -0
  106. package/dist/types/analytics.d.ts +1 -1
  107. package/dist/types/auth.d.ts +7 -9
  108. package/dist/types/collections.d.ts +88 -25
  109. package/dist/types/customization_controller.d.ts +8 -0
  110. package/dist/types/datasource.d.ts +19 -17
  111. package/dist/types/dialogs_controller.d.ts +7 -3
  112. package/dist/types/entities.d.ts +7 -2
  113. package/dist/types/entity_actions.d.ts +58 -8
  114. package/dist/types/entity_callbacks.d.ts +16 -16
  115. package/dist/types/entity_overrides.d.ts +2 -2
  116. package/dist/types/export_import.d.ts +4 -4
  117. package/dist/types/fields.d.ts +43 -17
  118. package/dist/types/firecms.d.ts +31 -3
  119. package/dist/types/firecms_context.d.ts +17 -1
  120. package/dist/types/index.d.ts +1 -0
  121. package/dist/types/internal_user_management.d.ts +20 -0
  122. package/dist/types/navigation.d.ts +60 -17
  123. package/dist/types/permissions.d.ts +4 -4
  124. package/dist/types/plugins.d.ts +44 -9
  125. package/dist/types/properties.d.ts +74 -22
  126. package/dist/types/property_config.d.ts +1 -3
  127. package/dist/types/roles.d.ts +3 -0
  128. package/dist/types/side_dialogs_controller.d.ts +10 -0
  129. package/dist/types/side_entity_controller.d.ts +14 -1
  130. package/dist/types/storage.d.ts +75 -0
  131. package/dist/types/user.d.ts +2 -1
  132. package/dist/util/builders.d.ts +3 -3
  133. package/dist/util/callbacks.d.ts +2 -0
  134. package/dist/util/createFormexStub.d.ts +2 -0
  135. package/dist/util/entities.d.ts +2 -2
  136. package/dist/util/entity_actions.d.ts +2 -0
  137. package/dist/util/entity_cache.d.ts +23 -0
  138. package/dist/util/icon_synonyms.d.ts +0 -1
  139. package/dist/util/icons.d.ts +5 -2
  140. package/dist/util/index.d.ts +3 -0
  141. package/dist/util/navigation_from_path.d.ts +10 -1
  142. package/dist/util/navigation_utils.d.ts +13 -1
  143. package/dist/util/objects.d.ts +2 -1
  144. package/dist/util/permissions.d.ts +4 -4
  145. package/dist/util/property_utils.d.ts +4 -4
  146. package/dist/util/references.d.ts +2 -2
  147. package/dist/util/resolutions.d.ts +30 -6
  148. package/dist/util/storage.d.ts +1 -1
  149. package/dist/util/useStorageUploadController.d.ts +2 -2
  150. package/package.json +133 -125
  151. package/src/app/Drawer.tsx +0 -1
  152. package/src/app/Scaffold.tsx +33 -29
  153. package/src/components/ArrayContainer.tsx +447 -229
  154. package/src/components/CircularProgressCenter.tsx +1 -1
  155. package/src/components/ClearFilterSortButton.tsx +1 -1
  156. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
  157. package/src/components/DeleteEntityDialog.tsx +13 -20
  158. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +59 -25
  159. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +23 -17
  160. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +20 -3
  161. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -9
  162. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -16
  163. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +6 -12
  164. package/src/components/EntityCollectionTable/index.tsx +1 -1
  165. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +6 -6
  166. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +35 -26
  167. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
  168. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +132 -101
  169. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
  170. package/src/components/EntityCollectionView/EntityCollectionView.tsx +178 -85
  171. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
  172. package/src/components/EntityCollectionView/useSelectionController.tsx +5 -4
  173. package/src/components/EntityCollectionView/utils.ts +19 -0
  174. package/src/components/EntityJsonPreview.tsx +66 -0
  175. package/src/components/EntityPreview.tsx +75 -57
  176. package/src/components/EntityView.tsx +8 -5
  177. package/src/components/ErrorView.tsx +3 -3
  178. package/src/components/FireCMSLogo.tsx +7 -51
  179. package/src/components/HomePage/DefaultHomePage.tsx +506 -161
  180. package/src/components/HomePage/FavouritesView.tsx +9 -14
  181. package/src/components/HomePage/HomePageDnD.tsx +600 -0
  182. package/src/components/HomePage/NavigationCard.tsx +47 -38
  183. package/src/components/HomePage/NavigationCardBinding.tsx +16 -15
  184. package/src/components/HomePage/NavigationGroup.tsx +144 -30
  185. package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
  186. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  187. package/src/components/NotFoundPage.tsx +2 -2
  188. package/src/components/PropertyConfigBadge.tsx +10 -4
  189. package/src/components/PropertyIdCopyTooltip.tsx +47 -0
  190. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +22 -13
  191. package/src/components/SearchIconsView.tsx +2 -2
  192. package/src/components/SelectableTable/SelectableTable.tsx +154 -142
  193. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +4 -2
  194. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +10 -8
  195. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -11
  196. package/src/components/UnsavedChangesDialog.tsx +46 -0
  197. package/src/components/UserDisplay.tsx +55 -0
  198. package/src/components/VirtualTable/VirtualTable.tsx +65 -44
  199. package/src/components/VirtualTable/VirtualTableCell.tsx +0 -8
  200. package/src/components/VirtualTable/VirtualTableHeader.tsx +8 -8
  201. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +1 -1
  202. package/src/components/VirtualTable/VirtualTableProps.tsx +12 -2
  203. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  204. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  205. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -2
  206. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  207. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
  208. package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
  209. package/src/components/common/default_entity_actions.tsx +62 -42
  210. package/src/components/common/index.ts +1 -1
  211. package/src/components/common/useColumnsIds.tsx +2 -9
  212. package/src/components/common/useDataSourceTableController.tsx +420 -0
  213. package/src/components/common/useDebouncedCallback.tsx +20 -0
  214. package/src/components/common/useScrollRestoration.tsx +68 -0
  215. package/src/components/common/useTableSearchHelper.ts +1 -0
  216. package/src/components/index.tsx +4 -1
  217. package/src/contexts/BreacrumbsContext.tsx +38 -0
  218. package/src/contexts/DialogsProvider.tsx +3 -2
  219. package/src/contexts/InternalUserManagementContext.tsx +4 -0
  220. package/src/contexts/ModeController.tsx +1 -3
  221. package/src/contexts/SnackbarProvider.tsx +2 -0
  222. package/src/core/DefaultAppBar.tsx +124 -85
  223. package/src/core/DefaultDrawer.tsx +30 -22
  224. package/src/core/DrawerNavigationItem.tsx +32 -28
  225. package/src/core/EntityEditView.tsx +388 -995
  226. package/src/core/EntityEditViewFormActions.tsx +329 -0
  227. package/src/core/EntitySidePanel.tsx +88 -20
  228. package/src/core/FireCMS.tsx +58 -28
  229. package/src/core/FireCMSRouter.tsx +17 -0
  230. package/src/core/NavigationRoutes.tsx +23 -32
  231. package/src/core/SideDialogs.tsx +22 -12
  232. package/src/core/field_configs.tsx +39 -11
  233. package/src/core/index.tsx +4 -2
  234. package/src/form/EntityForm.tsx +814 -0
  235. package/src/form/EntityFormActions.tsx +211 -0
  236. package/src/form/PropertyFieldBinding.tsx +59 -41
  237. package/src/form/components/CustomIdField.tsx +9 -3
  238. package/src/form/components/FieldHelperText.tsx +1 -1
  239. package/src/form/components/FormEntry.tsx +22 -0
  240. package/src/form/components/FormLayout.tsx +16 -0
  241. package/src/form/components/LabelWithIcon.tsx +30 -19
  242. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  243. package/src/form/components/StorageItemPreview.tsx +5 -4
  244. package/src/form/components/StorageUploadProgress.tsx +2 -3
  245. package/src/form/components/index.tsx +3 -1
  246. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -18
  247. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -36
  248. package/src/form/field_bindings/BlockFieldBinding.tsx +55 -33
  249. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
  250. package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -15
  251. package/src/form/field_bindings/MapFieldBinding.tsx +72 -62
  252. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
  253. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
  254. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +10 -8
  255. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
  256. package/src/form/field_bindings/ReferenceFieldBinding.tsx +28 -19
  257. package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -32
  258. package/src/form/field_bindings/SelectFieldBinding.tsx +22 -13
  259. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +247 -168
  260. package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
  261. package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
  262. package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
  263. package/src/form/index.tsx +17 -37
  264. package/src/form/useClearRestoreValue.tsx +2 -2
  265. package/src/form/validation.ts +12 -6
  266. package/src/hooks/data/delete.ts +6 -5
  267. package/src/hooks/data/save.ts +26 -35
  268. package/src/hooks/data/useCollectionFetch.tsx +3 -3
  269. package/src/hooks/data/useDataSource.tsx +10 -2
  270. package/src/hooks/data/useEntityFetch.tsx +10 -6
  271. package/src/hooks/index.tsx +3 -0
  272. package/src/hooks/useAuthController.tsx +1 -1
  273. package/src/hooks/useBreadcrumbsController.tsx +31 -0
  274. package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
  275. package/src/hooks/useBuildModeController.tsx +15 -28
  276. package/src/hooks/useBuildNavigationController.tsx +386 -124
  277. package/src/hooks/useCollapsedGroups.ts +64 -0
  278. package/src/hooks/useFireCMSContext.tsx +9 -35
  279. package/src/hooks/useInternalUserManagementController.tsx +16 -0
  280. package/src/hooks/useLargeLayout.tsx +0 -35
  281. package/src/hooks/useModeController.tsx +1 -2
  282. package/src/hooks/useProjectLog.tsx +16 -5
  283. package/src/hooks/useResolvedNavigationFrom.tsx +9 -11
  284. package/src/hooks/useValidateAuthenticator.tsx +3 -3
  285. package/src/internal/useBuildDataSource.ts +67 -80
  286. package/src/internal/useBuildSideDialogsController.tsx +4 -2
  287. package/src/internal/useBuildSideEntityController.tsx +149 -86
  288. package/src/internal/useUnsavedChangesDialog.tsx +127 -91
  289. package/src/preview/PropertyPreview.tsx +36 -12
  290. package/src/preview/PropertyPreviewProps.tsx +1 -1
  291. package/src/preview/components/BooleanPreview.tsx +1 -1
  292. package/src/preview/components/EmptyValue.tsx +1 -1
  293. package/src/preview/components/EnumValuesChip.tsx +1 -1
  294. package/src/preview/components/ImagePreview.tsx +10 -9
  295. package/src/preview/components/ReferencePreview.tsx +10 -18
  296. package/src/preview/components/UrlComponentPreview.tsx +20 -21
  297. package/src/preview/components/UserPreview.tsx +27 -0
  298. package/src/preview/index.ts +1 -0
  299. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -5
  300. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -4
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -3
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -3
  303. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -4
  304. package/src/preview/property_previews/ArrayPropertyPreview.tsx +6 -4
  305. package/src/preview/property_previews/MapPropertyPreview.tsx +7 -6
  306. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
  307. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  308. package/src/preview/util.ts +10 -10
  309. package/src/routes/CustomCMSRoute.tsx +21 -0
  310. package/src/routes/FireCMSRoute.tsx +246 -0
  311. package/src/routes/HomePageRoute.tsx +17 -0
  312. package/src/types/analytics.ts +3 -0
  313. package/src/types/auth.tsx +8 -12
  314. package/src/types/collections.ts +103 -28
  315. package/src/types/customization_controller.tsx +9 -0
  316. package/src/types/datasource.ts +21 -20
  317. package/src/types/dialogs_controller.tsx +7 -3
  318. package/src/types/entities.ts +10 -2
  319. package/src/types/entity_actions.tsx +71 -8
  320. package/src/types/entity_callbacks.ts +18 -18
  321. package/src/types/entity_overrides.tsx +2 -2
  322. package/src/types/export_import.ts +4 -4
  323. package/src/types/fields.tsx +52 -19
  324. package/src/types/firecms.tsx +34 -4
  325. package/src/types/firecms_context.tsx +18 -1
  326. package/src/types/index.ts +1 -0
  327. package/src/types/internal_user_management.ts +24 -0
  328. package/src/types/navigation.ts +76 -22
  329. package/src/types/permissions.ts +5 -5
  330. package/src/types/plugins.tsx +53 -9
  331. package/src/types/properties.ts +84 -22
  332. package/src/types/property_config.tsx +2 -2
  333. package/src/types/roles.ts +3 -0
  334. package/src/types/side_dialogs_controller.tsx +15 -0
  335. package/src/types/side_entity_controller.tsx +16 -1
  336. package/src/types/storage.ts +82 -0
  337. package/src/types/user.ts +3 -1
  338. package/src/util/builders.ts +10 -8
  339. package/src/util/callbacks.ts +119 -0
  340. package/src/util/createFormexStub.tsx +62 -0
  341. package/src/util/entities.ts +6 -4
  342. package/src/util/entity_actions.ts +28 -0
  343. package/src/util/entity_cache.ts +204 -0
  344. package/src/util/icon_list.ts +1 -1
  345. package/src/util/icon_synonyms.ts +0 -1
  346. package/src/util/icons.tsx +36 -11
  347. package/src/util/index.ts +3 -0
  348. package/src/util/join_collections.ts +9 -2
  349. package/src/util/make_properties_editable.ts +13 -5
  350. package/src/util/navigation_from_path.ts +33 -12
  351. package/src/util/navigation_utils.ts +135 -19
  352. package/src/util/objects.ts +74 -14
  353. package/src/util/parent_references_from_path.ts +3 -3
  354. package/src/util/permissions.ts +8 -8
  355. package/src/util/property_utils.tsx +17 -6
  356. package/src/util/references.ts +19 -8
  357. package/src/util/resolutions.ts +93 -24
  358. package/src/util/storage.ts +6 -2
  359. package/src/util/useStorageUploadController.tsx +74 -29
  360. package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  361. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  362. package/dist/form/PropertiesForm.d.ts +0 -8
  363. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  364. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  365. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
  366. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  367. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -236
  368. package/src/form/PropertiesForm.tsx +0 -81
  369. package/src/form/components/FormikArrayContainer.tsx +0 -44
  370. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  371. /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";
@@ -54,6 +54,10 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
54
54
  if (a.index !== b.index) {
55
55
  return false;
56
56
  }
57
+
58
+ if (a.size !== b.size) {
59
+ return false;
60
+ }
57
61
  const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
58
62
  const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
59
63
 
@@ -70,23 +74,29 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
70
74
  return false;
71
75
  }) as typeof PropertyFieldBindingInternal;
72
76
 
73
- 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>
74
78
  ({
75
79
  propertyKey,
76
80
  property,
77
81
  context,
78
82
  includeDescription,
79
83
  underlyingValueHasChanged,
80
- disabled,
81
- tableMode,
84
+ disabled: disabledProp,
82
85
  partOfArray,
83
- partOfBlock,
86
+ minimalistView,
84
87
  autoFocus,
85
88
  index,
89
+ size,
90
+ onPropertyChange,
86
91
  }: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
87
92
 
93
+ const authController = useAuthController();
88
94
  const customizationController = useCustomizationController();
89
95
 
96
+ if(propertyKey === "created_by"){
97
+ console.log("Rendering field for created_by", {propertyKey, property, context});
98
+ }
99
+
90
100
  return (
91
101
  <Field
92
102
  key={propertyKey}
@@ -101,10 +111,13 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
101
111
  values: fieldProps.form.values,
102
112
  path: context.path,
103
113
  entityId: context.entityId,
104
- fields: customizationController.propertyConfigs,
105
- index
114
+ propertyConfigs: customizationController.propertyConfigs,
115
+ index,
116
+ authController
106
117
  });
107
118
 
119
+ const disabled = disabledProp || isReadOnly(resolvedProperty) || Boolean(resolvedProperty?.disabled) || context.disabled;
120
+
108
121
  if (resolvedProperty === null || isHidden(resolvedProperty)) {
109
122
  return <></>;
110
123
  } else if (isReadOnly(resolvedProperty)) {
@@ -118,6 +131,7 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
118
131
  if (!propertyConfig) {
119
132
  console.log("INTERNAL: Could not find field config for property", {
120
133
  propertyKey,
134
+ property,
121
135
  resolvedProperty,
122
136
  fields: customizationController.propertyConfigs,
123
137
  propertyConfig
@@ -130,8 +144,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
130
144
  values: fieldProps.form.values,
131
145
  path: context.path,
132
146
  entityId: context.entityId,
133
- fields: customizationController.propertyConfigs,
134
- index
147
+ propertyConfigs: customizationController.propertyConfigs,
148
+ index,
149
+ authController
135
150
  });
136
151
  Component = configProperty.Field as ComponentType<FieldProps<T>>;
137
152
  }
@@ -139,7 +154,9 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
139
154
  console.warn(`No field component found for property ${propertyKey}`);
140
155
  console.warn("Property:", property);
141
156
  return (
142
- <div>{`Currently the field ${resolvedProperty.dataType} is not supported`}</div>
157
+ <div className={"w-full"}>
158
+ {`Currently the field ${resolvedProperty.dataType} is not supported`}
159
+ </div>
143
160
  );
144
161
  }
145
162
 
@@ -150,23 +167,24 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Rec
150
167
  underlyingValueHasChanged,
151
168
  context,
152
169
  disabled,
153
- tableMode,
154
170
  partOfArray,
155
- partOfBlock,
156
- autoFocus
171
+ minimalistView,
172
+ autoFocus,
173
+ size,
174
+ onPropertyChange
157
175
  };
158
176
 
159
177
  return <FieldInternal
160
178
  Component={Component as ComponentType<FieldProps>}
161
179
  componentProps={componentProps}
162
- fieldProps={fieldProps}/>;
180
+ formexFieldProps={fieldProps}/>;
163
181
  }}
164
182
  </Field>
165
183
  );
166
184
 
167
185
  }
168
186
 
169
- type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>> =
187
+ type ResolvedPropertyFieldBindingProps<T extends CMSType = CMSType, M extends Record<string, any> = any> =
170
188
  Omit<PropertyFieldBindingProps<T, M>, "property">
171
189
  & {
172
190
  property: ResolvedProperty<T>
@@ -180,31 +198,31 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
180
198
  property,
181
199
  includeDescription,
182
200
  underlyingValueHasChanged,
183
- tableMode,
184
201
  partOfArray,
185
- partOfBlock,
202
+ minimalistView,
186
203
  autoFocus,
187
204
  context,
188
- disabled
205
+ disabled,
206
+ size,
207
+ onPropertyChange
189
208
  },
190
- fieldProps
209
+ formexFieldProps
191
210
  }:
192
- {
193
- Component: ComponentType<FieldProps<T, any, M>>,
194
- componentProps: ResolvedPropertyFieldBindingProps<T, M>,
195
- fieldProps: FormexFieldProps<T, any>
196
- }) {
211
+ {
212
+ Component: ComponentType<FieldProps<T, any, M>>,
213
+ componentProps: ResolvedPropertyFieldBindingProps<T, M>,
214
+ formexFieldProps: FormexFieldProps<T, any>
215
+ }) {
197
216
 
198
217
  const { plugins } = useCustomizationController();
199
218
 
200
219
  const customFieldProps: any = property.customProps;
201
- const value = fieldProps.field.value;
202
- // const initialValue = fieldProps.meta.initialValue;
203
- const error = getIn(fieldProps.form.errors, propertyKey);
204
- const touched = getIn(fieldProps.form.touched, propertyKey);
220
+ const value = formexFieldProps.field.value;
221
+ const error = getIn(formexFieldProps.form.errors, propertyKey);
222
+ const touched = getIn(formexFieldProps.form.touched, propertyKey);
205
223
 
206
224
  const showError: boolean = error &&
207
- (fieldProps.form.submitCount > 0 || property.validation?.unique) &&
225
+ (formexFieldProps.form.submitCount > 0 || property.validation?.unique) &&
208
226
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
209
227
 
210
228
  const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
@@ -217,22 +235,21 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
217
235
  });
218
236
  const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
219
237
 
220
- const isSubmitting = fieldProps.form.isSubmitting;
238
+ const isSubmitting = formexFieldProps.form.isSubmitting;
221
239
 
222
240
  const setValue = useCallback((value: T | null, shouldValidate?: boolean) => {
223
- fieldProps.form.setFieldTouched(propertyKey, true, false);
224
- fieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
241
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
242
+ formexFieldProps.form.setFieldValue(propertyKey, value, shouldValidate);
225
243
  }, []);
226
244
 
227
245
  const setFieldValue = useCallback((otherPropertyKey: string, value: CMSType | null, shouldValidate?: boolean) => {
228
- fieldProps.form.setFieldTouched(propertyKey, true, false);
229
- fieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
246
+ formexFieldProps.form.setFieldTouched(propertyKey, true, false);
247
+ formexFieldProps.form.setFieldValue(otherPropertyKey, value, shouldValidate);
230
248
  }, []);
231
249
 
232
250
  const cmsFieldProps: FieldProps<T, CustomProps, M> = {
233
251
  propertyKey,
234
252
  value: value as T,
235
- // initialValue,
236
253
  setValue,
237
254
  setFieldValue,
238
255
  error,
@@ -243,12 +260,13 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
243
260
  property: property as ResolvedProperty<T>,
244
261
  disabled: disabled ?? false,
245
262
  underlyingValueHasChanged: underlyingValueHasChanged ?? false,
246
- tableMode: tableMode ?? false,
247
263
  partOfArray: partOfArray ?? false,
248
- partOfBlock: partOfBlock ?? false,
264
+ minimalistView: minimalistView ?? false,
249
265
  autoFocus: autoFocus ?? false,
250
266
  customProps: customFieldProps,
251
- context
267
+ context,
268
+ size,
269
+ onPropertyChange
252
270
  };
253
271
 
254
272
  return (
@@ -286,7 +304,7 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
286
304
 
287
305
  interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
288
306
  path?: string,
289
- collection?: EntityCollection<M>,
307
+ collection?: ResolvedEntityCollection<M>,
290
308
  propertyKey: string,
291
309
  property: ResolvedProperty<T>,
292
310
  Component: ComponentType<FieldProps<T, any, M>>,
@@ -317,7 +335,7 @@ function useWrappedComponent<T extends CMSType = CMSType, M extends Record<strin
317
335
  Field: Component,
318
336
  plugin,
319
337
  path,
320
- collection
338
+ collection,
321
339
  };
322
340
  const enabled = plugin.form?.fieldBuilderEnabled?.(params);
323
341
  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);
@@ -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";
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { LabelWithIcon } from "./LabelWithIcon";
3
+ import { PropertyIdCopyTooltip } from "../../components/PropertyIdCopyTooltip";
4
+
5
+ interface LabelWithIconAndTooltip {
6
+ icon: React.ReactNode;
7
+ title?: string;
8
+ small?: boolean;
9
+ className?: string;
10
+ required?: boolean;
11
+ propertyKey: string
12
+ }
13
+
14
+ /**
15
+ * Render the label of with an icon and the title of a property
16
+ * @group Form custom fields
17
+ */
18
+ export function LabelWithIconAndTooltip({
19
+ propertyKey,
20
+ className,
21
+ ...props
22
+ }: LabelWithIconAndTooltip) {
23
+ return (
24
+ <PropertyIdCopyTooltip propertyKey={propertyKey} className={className}>
25
+ <LabelWithIcon {...props}/>
26
+ </PropertyIdCopyTooltip>
27
+ );
28
+ }
@@ -30,15 +30,16 @@ export function StorageItemPreview({
30
30
 
31
31
  return (
32
32
  <div className={cls(paperMixin,
33
- "relative m-4 border-box flex items-center justify-center",
34
- size === "medium" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
33
+ "relative border-box flex items-center justify-center",
34
+ size === "large" ? "min-w-[220px] min-h-[220px] max-w-[220px]" : "min-w-[118px] min-h-[118px] max-w-[118px]",
35
35
  className)}>
36
36
 
37
37
  {!placeholder && !disabled &&
38
38
  <div
39
- className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-gray-900">
39
+ className="absolute rounded-full -top-2 -right-2 z-10 bg-white dark:bg-surface-900">
40
40
 
41
41
  <Tooltip
42
+ asChild={true}
42
43
  title="Remove">
43
44
  <IconButton
44
45
  size={"small"}
@@ -66,7 +67,7 @@ export function StorageItemPreview({
66
67
  <div
67
68
  onClick={(e) => e.stopPropagation()}
68
69
  className="flex flex-col items-center justify-center w-full h-full">
69
- <DescriptionIcon className="text-gray-700 dark:text-gray-300"/>
70
+ <DescriptionIcon className="text-surface-700 dark:text-surface-300"/>
70
71
  </div>
71
72
  }
72
73