@firecms/core 3.0.0 → 3.1.0-canary.02232f4

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 (340) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AIIcon.d.ts +16 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  5. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
  6. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
  7. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
  8. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
  9. package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
  10. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  11. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  12. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  13. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  14. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
  15. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  16. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  17. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  18. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  19. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
  20. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
  21. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  22. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
  23. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  24. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  25. package/dist/components/ErrorBoundary.d.ts +4 -2
  26. package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
  27. package/dist/components/LanguageToggle.d.ts +1 -0
  28. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
  29. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  30. package/dist/components/UnsavedChangesDialog.d.ts +1 -0
  31. package/dist/components/VirtualTable/VirtualTable.performance.test.d.ts +1 -0
  32. package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
  33. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +4 -1
  34. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  35. package/dist/components/VirtualTable/VirtualTableProps.d.ts +17 -1
  36. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  37. package/dist/components/VirtualTable/types.d.ts +3 -0
  38. package/dist/components/index.d.ts +4 -0
  39. package/dist/contexts/index.d.ts +10 -0
  40. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  41. package/dist/core/index.d.ts +1 -0
  42. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  43. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  44. package/dist/editor/components/editor-bubble.d.ts +8 -0
  45. package/dist/editor/components/image-bubble.d.ts +5 -0
  46. package/dist/editor/components/index.d.ts +16 -0
  47. package/dist/editor/components/table-bubble.d.ts +5 -0
  48. package/dist/editor/editor.d.ts +30 -0
  49. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  50. package/dist/editor/extensions/Image/index.d.ts +6 -0
  51. package/dist/editor/extensions/Image.d.ts +6 -0
  52. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  53. package/dist/editor/extensions/clipboard.d.ts +7 -0
  54. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  55. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  56. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  57. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  58. package/dist/editor/index.d.ts +2 -0
  59. package/dist/editor/markdown.d.ts +5 -0
  60. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  61. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  62. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  63. package/dist/editor/nodeViews/index.d.ts +6 -0
  64. package/dist/editor/plugins/index.d.ts +2 -0
  65. package/dist/editor/plugins/inputrules.d.ts +6 -0
  66. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  67. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  68. package/dist/editor/schema.d.ts +2 -0
  69. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  70. package/dist/editor/selectors/color-selector.d.ts +10 -0
  71. package/dist/editor/selectors/link-selector.d.ts +8 -0
  72. package/dist/editor/selectors/node-selector.d.ts +15 -0
  73. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  74. package/dist/editor/types.d.ts +5 -0
  75. package/dist/editor/useProseMirror.d.ts +16 -0
  76. package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
  77. package/dist/editor/utils/remove_classes.d.ts +1 -0
  78. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  79. package/dist/form/components/ErrorFocus.d.ts +1 -1
  80. package/dist/form/components/LocalChangesMenu.d.ts +2 -2
  81. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  82. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  83. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
  84. package/dist/form/validation.d.ts +3 -2
  85. package/dist/hooks/index.d.ts +1 -0
  86. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  87. package/dist/hooks/useBuildNavigationController.d.ts +0 -1
  88. package/dist/hooks/useCollapsedGroups.d.ts +6 -3
  89. package/dist/hooks/useTranslation.d.ts +17 -0
  90. package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
  91. package/dist/index.d.ts +5 -0
  92. package/dist/index.es.js +31028 -16080
  93. package/dist/index.es.js.map +1 -1
  94. package/dist/index.umd.js +29955 -15028
  95. package/dist/index.umd.js.map +1 -1
  96. package/dist/internal/useRestoreScroll.d.ts +1 -1
  97. package/dist/locales/de.d.ts +2 -0
  98. package/dist/locales/en.d.ts +10 -0
  99. package/dist/locales/es.d.ts +10 -0
  100. package/dist/locales/fr.d.ts +2 -0
  101. package/dist/locales/hi.d.ts +2 -0
  102. package/dist/locales/it.d.ts +2 -0
  103. package/dist/locales/pt.d.ts +7 -0
  104. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  105. package/dist/preview/components/DatePreview.d.ts +13 -3
  106. package/dist/preview/components/ImagePreview.d.ts +5 -1
  107. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  108. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  109. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  110. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  111. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  112. package/dist/types/analytics.d.ts +1 -1
  113. package/dist/types/collections.d.ts +88 -2
  114. package/dist/types/customization_controller.d.ts +2 -1
  115. package/dist/types/datasource.d.ts +0 -1
  116. package/dist/types/entities.d.ts +1 -0
  117. package/dist/types/firecms.d.ts +2 -1
  118. package/dist/types/index.d.ts +1 -0
  119. package/dist/types/navigation.d.ts +2 -2
  120. package/dist/types/plugins.d.ts +69 -1
  121. package/dist/types/properties.d.ts +277 -12
  122. package/dist/types/storage.d.ts +9 -0
  123. package/dist/types/translations.d.ts +669 -0
  124. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  125. package/dist/util/__tests__/objects.test.d.ts +1 -0
  126. package/dist/util/conditions.d.ts +26 -0
  127. package/dist/util/entities.d.ts +2 -3
  128. package/dist/util/index.d.ts +3 -1
  129. package/dist/util/lazy_eager.d.ts +7 -0
  130. package/dist/util/objects.d.ts +1 -0
  131. package/dist/util/property_utils.d.ts +2 -1
  132. package/dist/util/resolutions.d.ts +3 -3
  133. package/dist/util/useStorageUploadController.d.ts +11 -2
  134. package/package.json +52 -12
  135. package/src/app/Scaffold.tsx +20 -19
  136. package/src/components/AIIcon.tsx +41 -0
  137. package/src/components/ArrayContainer.tsx +7 -8
  138. package/src/components/ClearFilterSortButton.tsx +25 -19
  139. package/src/components/ConfirmationDialog.tsx +4 -4
  140. package/src/components/DeleteEntityDialog.tsx +12 -11
  141. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +82 -43
  142. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  143. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  144. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  145. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
  146. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +24 -44
  147. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  148. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
  149. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
  150. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
  151. package/src/components/EntityCollectionView/Board.tsx +324 -0
  152. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  153. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  154. package/src/components/EntityCollectionView/BoardSortableList.tsx +174 -0
  155. package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
  156. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  157. package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
  158. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +706 -0
  159. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +236 -0
  160. package/src/components/EntityCollectionView/EntityCollectionView.tsx +531 -209
  161. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +35 -22
  162. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +86 -15
  163. package/src/components/EntityCollectionView/FiltersDialog.tsx +252 -0
  164. package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
  165. package/src/components/EntityCollectionView/board_types.ts +113 -0
  166. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  167. package/src/components/EntityJsonPreview.tsx +2 -1
  168. package/src/components/EntityPreview.tsx +1 -1
  169. package/src/components/EntityView.tsx +3 -2
  170. package/src/components/ErrorBoundary.tsx +27 -15
  171. package/src/components/ErrorTooltip.tsx +2 -1
  172. package/src/components/HomePage/DefaultHomePage.tsx +65 -22
  173. package/src/components/HomePage/HomePageDnD.tsx +59 -42
  174. package/src/components/HomePage/NavigationCard.tsx +20 -18
  175. package/src/components/HomePage/NavigationGroup.tsx +20 -17
  176. package/src/components/HomePage/RenameGroupDialog.tsx +15 -15
  177. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  178. package/src/components/LanguageToggle.tsx +66 -0
  179. package/src/components/NotFoundPage.tsx +5 -3
  180. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +12 -17
  181. package/src/components/ReferenceWidget.tsx +5 -6
  182. package/src/components/SearchIconsView.tsx +3 -1
  183. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  184. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  185. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +50 -40
  186. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +53 -40
  187. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -58
  188. package/src/components/UnsavedChangesDialog.tsx +6 -6
  189. package/src/components/UserDisplay.tsx +4 -4
  190. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +387 -0
  191. package/src/components/VirtualTable/VirtualTable.tsx +277 -121
  192. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  193. package/src/components/VirtualTable/VirtualTableHeader.tsx +76 -64
  194. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +163 -42
  195. package/src/components/VirtualTable/VirtualTableProps.tsx +21 -2
  196. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  197. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  198. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
  199. package/src/components/VirtualTable/types.tsx +3 -0
  200. package/src/components/common/default_entity_actions.tsx +4 -0
  201. package/src/components/common/useColumnsIds.tsx +95 -3
  202. package/src/components/common/useDataSourceTableController.tsx +12 -4
  203. package/src/components/index.tsx +5 -0
  204. package/src/contexts/BreacrumbsContext.tsx +15 -8
  205. package/src/contexts/index.ts +10 -0
  206. package/src/core/DefaultAppBar.tsx +49 -32
  207. package/src/core/DefaultDrawer.tsx +49 -57
  208. package/src/core/DrawerNavigationGroup.tsx +120 -0
  209. package/src/core/DrawerNavigationItem.tsx +4 -3
  210. package/src/core/EntityEditView.tsx +94 -50
  211. package/src/core/EntityEditViewFormActions.tsx +24 -17
  212. package/src/core/EntitySidePanel.tsx +34 -30
  213. package/src/core/FireCMS.tsx +33 -6
  214. package/src/core/SideDialogs.tsx +4 -2
  215. package/src/core/field_configs.tsx +18 -11
  216. package/src/core/index.tsx +1 -0
  217. package/src/editor/components/SlashCommandMenu.tsx +516 -0
  218. package/src/editor/components/editor-bubble-item.tsx +32 -0
  219. package/src/editor/components/editor-bubble.tsx +118 -0
  220. package/src/editor/components/image-bubble.tsx +156 -0
  221. package/src/editor/components/index.ts +14 -0
  222. package/src/editor/components/table-bubble.tsx +165 -0
  223. package/src/editor/editor.tsx +455 -0
  224. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  225. package/src/editor/extensions/Image/index.ts +133 -0
  226. package/src/editor/extensions/Image.ts +159 -0
  227. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  228. package/src/editor/extensions/clipboard.ts +72 -0
  229. package/src/editor/extensions/custom-keymap.ts +24 -0
  230. package/src/editor/extensions/drag-and-drop.tsx +480 -0
  231. package/src/editor/hooks/useProseMirror.ts +124 -0
  232. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  233. package/src/editor/index.ts +2 -0
  234. package/src/editor/markdown.ts +172 -0
  235. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  236. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  237. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  238. package/src/editor/nodeViews/index.ts +35 -0
  239. package/src/editor/plugins/index.ts +58 -0
  240. package/src/editor/plugins/inputrules.ts +82 -0
  241. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  242. package/src/editor/plugins/slashCommandPlugin.ts +61 -0
  243. package/src/editor/schema.ts +240 -0
  244. package/src/editor/selectors/ai-selector.tsx +111 -0
  245. package/src/editor/selectors/color-selector.tsx +200 -0
  246. package/src/editor/selectors/link-selector.tsx +118 -0
  247. package/src/editor/selectors/node-selector.tsx +157 -0
  248. package/src/editor/selectors/text-buttons.tsx +86 -0
  249. package/src/editor/types.ts +6 -0
  250. package/src/editor/useProseMirror.ts +126 -0
  251. package/src/editor/utils/prosemirror-utils.ts +108 -0
  252. package/src/editor/utils/remove_classes.ts +17 -0
  253. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  254. package/src/form/EntityForm.tsx +150 -75
  255. package/src/form/EntityFormActions.tsx +19 -12
  256. package/src/form/PropertyFieldBinding.tsx +68 -51
  257. package/src/form/components/ErrorFocus.tsx +3 -3
  258. package/src/form/components/LocalChangesMenu.tsx +19 -19
  259. package/src/form/components/StorageItemPreview.tsx +5 -3
  260. package/src/form/components/StorageUploadProgress.tsx +22 -6
  261. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
  262. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -10
  263. package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
  264. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -17
  265. package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -25
  266. package/src/form/field_bindings/MapFieldBinding.tsx +88 -70
  267. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +93 -52
  268. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
  269. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
  270. package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
  271. package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
  272. package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
  273. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
  274. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
  275. package/src/form/field_bindings/TextFieldBinding.tsx +77 -38
  276. package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
  277. package/src/form/validation.ts +245 -160
  278. package/src/hooks/index.tsx +1 -0
  279. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  280. package/src/hooks/useBuildNavigationController.tsx +91 -41
  281. package/src/hooks/useCollapsedGroups.ts +18 -9
  282. package/src/hooks/useTranslation.ts +31 -0
  283. package/src/hooks/useValidateAuthenticator.tsx +1 -1
  284. package/src/i18n/FireCMSi18nProvider.tsx +160 -0
  285. package/src/index.ts +5 -0
  286. package/src/internal/useBuildDataSource.ts +68 -34
  287. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  288. package/src/internal/useBuildSideEntityController.tsx +24 -24
  289. package/src/internal/useRestoreScroll.tsx +26 -14
  290. package/src/locales/de.ts +718 -0
  291. package/src/locales/en.ts +730 -0
  292. package/src/locales/es.ts +730 -0
  293. package/src/locales/fr.ts +718 -0
  294. package/src/locales/hi.ts +718 -0
  295. package/src/locales/it.ts +718 -0
  296. package/src/locales/pt.ts +727 -0
  297. package/src/preview/PropertyPreview.tsx +43 -33
  298. package/src/preview/PropertyPreviewProps.tsx +6 -0
  299. package/src/preview/components/DatePreview.tsx +72 -4
  300. package/src/preview/components/EmptyValue.tsx +1 -1
  301. package/src/preview/components/ImagePreview.tsx +37 -21
  302. package/src/preview/components/ReferencePreview.tsx +8 -2
  303. package/src/preview/components/StorageThumbnail.tsx +16 -12
  304. package/src/preview/components/UrlComponentPreview.tsx +32 -27
  305. package/src/preview/components/UserPreview.tsx +3 -1
  306. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  307. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  308. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  309. package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
  310. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  311. package/src/routes/CustomCMSRoute.tsx +1 -0
  312. package/src/routes/FireCMSRoute.tsx +87 -65
  313. package/src/types/analytics.ts +10 -0
  314. package/src/types/collections.ts +97 -3
  315. package/src/types/customization_controller.tsx +2 -1
  316. package/src/types/datasource.ts +54 -56
  317. package/src/types/entities.ts +10 -0
  318. package/src/types/firecms.tsx +2 -1
  319. package/src/types/index.ts +1 -0
  320. package/src/types/navigation.ts +2 -2
  321. package/src/types/plugins.tsx +77 -1
  322. package/src/types/properties.ts +369 -37
  323. package/src/types/storage.ts +11 -1
  324. package/src/types/translations.ts +752 -0
  325. package/src/util/__tests__/conditions.test.ts +506 -0
  326. package/src/util/__tests__/objects.test.ts +196 -0
  327. package/src/util/callbacks.ts +6 -3
  328. package/src/util/collections.ts +51 -6
  329. package/src/util/conditions.ts +339 -0
  330. package/src/util/entities.ts +29 -30
  331. package/src/util/entity_cache.ts +2 -1
  332. package/src/util/index.ts +3 -1
  333. package/src/util/join_collections.ts +10 -8
  334. package/src/util/lazy_eager.tsx +33 -0
  335. package/src/util/objects.ts +46 -13
  336. package/src/util/{references.ts → previews.ts} +16 -2
  337. package/src/util/property_utils.tsx +37 -11
  338. package/src/util/resolutions.ts +62 -58
  339. package/src/util/useStorageUploadController.tsx +34 -30
  340. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -7,7 +7,7 @@ import { FieldProps, FormContext } from "./fields";
7
7
  import { CMSType, Property } from "./properties";
8
8
  import { EntityStatus } from "./entities";
9
9
  import { ResolvedProperty } from "./resolved_entities";
10
- import { NavigationGroupMapping } from "./navigation";
10
+ import { NavigationGroupMapping, CMSView } from "./navigation";
11
11
  import { InternalUserManagement } from "./internal_user_management";
12
12
 
13
13
  /**
@@ -28,6 +28,14 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
28
28
  */
29
29
  loading?: boolean;
30
30
 
31
+ /**
32
+ * Override any FireCMS UI string, or provide translations for additional
33
+ * locales, specific for this plugin.
34
+ * Keys can be existing `FireCMSTranslations` keys, or new keys if using
35
+ * module augmentation.
36
+ */
37
+ i18n?: Record<string, Record<string, string>>;
38
+
31
39
  /**
32
40
  * You can use this prop to add higher order components to the CMS.
33
41
  * The components will be added to the root of the CMS, so any component
@@ -46,6 +54,12 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
46
54
 
47
55
  userManagement?: InternalUserManagement
48
56
 
57
+ /**
58
+ * Views to be automatically added to the navigation.
59
+ * These views will be merged with the views provided to useBuildNavigationController.
60
+ */
61
+ views?: CMSView[];
62
+
49
63
  homePage?: {
50
64
 
51
65
  /**
@@ -106,6 +120,19 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
106
120
 
107
121
  collectionView?: {
108
122
 
123
+ /**
124
+ * Custom component to render when a collection loading error occurs.
125
+ * If provided, this replaces the default error view in all collection view modes
126
+ * (table, card, kanban).
127
+ * Return `null` from the component to fall back to the default error view.
128
+ */
129
+ CollectionError?: React.ComponentType<{
130
+ path: string;
131
+ collection: EC;
132
+ parentCollectionIds?: string[];
133
+ error: Error;
134
+ }>;
135
+
109
136
  /**
110
137
  * Use this component to add custom actions to the entity collections
111
138
  * toolbar.
@@ -161,6 +188,50 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
161
188
  collection: EC;
162
189
  tableController: EntityTableController;
163
190
  }>;
191
+
192
+ /**
193
+ * Callback called when columns are reordered via drag and drop.
194
+ * Used by plugins to persist the new column order.
195
+ */
196
+ onColumnsReorder?: (props: {
197
+ fullPath: string;
198
+ parentCollectionIds: string[];
199
+ collection: EC;
200
+ newPropertiesOrder: string[];
201
+ }) => void;
202
+
203
+ /**
204
+ * Callback called when Kanban board columns are reordered via drag and drop.
205
+ * Used by plugins to persist the new Kanban column order.
206
+ */
207
+ onKanbanColumnsReorder?: (props: {
208
+ fullPath: string;
209
+ parentCollectionIds: string[];
210
+ collection: EC;
211
+ kanbanColumnProperty: string;
212
+ newColumnsOrder: string[];
213
+ }) => void;
214
+
215
+ /**
216
+ * Component to render when Kanban view is missing configuration.
217
+ * Used to provide a CTA to open the collection editor to configure Kanban.
218
+ */
219
+ KanbanSetupComponent?: React.ComponentType<{
220
+ collection: EC;
221
+ fullPath: string;
222
+ parentCollectionIds: string[];
223
+ }>;
224
+
225
+ /**
226
+ * Component to render an "Add Column" button at the end of the Kanban board.
227
+ * Used to allow adding new enum values to the column property.
228
+ */
229
+ AddKanbanColumnComponent?: React.ComponentType<{
230
+ collection: EC;
231
+ fullPath: string;
232
+ parentCollectionIds: string[];
233
+ columnProperty: string;
234
+ }>;
164
235
  }
165
236
 
166
237
  form?: {
@@ -179,6 +250,11 @@ export type FireCMSPlugin<PROPS = any, FORM_PROPS = any, EC extends EntityCollec
179
250
  */
180
251
  ActionsTop?: React.ComponentType<PluginFormActionProps<any, EC>>;
181
252
 
253
+ /**
254
+ * Add custom content above the entity title in the form view
255
+ */
256
+ BeforeTitle?: React.ComponentType<PluginFormActionProps<any, EC>>;
257
+
182
258
  fieldBuilder?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T, any, EC>) => React.ComponentType<FieldProps<T>> | null;
183
259
 
184
260
  fieldBuilderEnabled?: <T extends CMSType = CMSType>(props: PluginFieldBuilderParams<T>) => boolean;
@@ -12,14 +12,14 @@ import { AuthController } from "./auth";
12
12
  */
13
13
  export type DataType<T extends CMSType = CMSType> =
14
14
  T extends string ? "string" :
15
- T extends number ? "number" :
16
- T extends boolean ? "boolean" :
17
- T extends Date ? "date" :
18
- T extends GeoPoint ? "geopoint" :
19
- T extends Vector ? "vector" :
20
- T extends EntityReference ? "reference" :
21
- T extends Array<any> ? "array" :
22
- T extends Record<string, any> ? "map" : never;
15
+ T extends number ? "number" :
16
+ T extends boolean ? "boolean" :
17
+ T extends Date ? "date" :
18
+ T extends GeoPoint ? "geopoint" :
19
+ T extends Vector ? "vector" :
20
+ T extends EntityReference ? "reference" :
21
+ T extends Array<any> ? "array" :
22
+ T extends Record<string, any> ? "map" : never;
23
23
 
24
24
  /**
25
25
  * @group Entity properties
@@ -52,13 +52,13 @@ export type AnyProperty =
52
52
  */
53
53
  export type Property<T extends CMSType = any> =
54
54
  T extends string ? StringProperty :
55
- T extends number ? NumberProperty :
56
- T extends boolean ? BooleanProperty :
57
- T extends Date ? DateProperty :
58
- T extends GeoPoint ? GeopointProperty :
59
- T extends EntityReference ? ReferenceProperty :
60
- T extends Array<CMSType> ? ArrayProperty<T> :
61
- T extends Record<string, any> ? MapProperty<T> : AnyProperty;
55
+ T extends number ? NumberProperty :
56
+ T extends boolean ? BooleanProperty :
57
+ T extends Date ? DateProperty :
58
+ T extends GeoPoint ? GeopointProperty :
59
+ T extends EntityReference ? ReferenceProperty :
60
+ T extends Array<CMSType> ? ArrayProperty<T> :
61
+ T extends Record<string, any> ? MapProperty<T> : AnyProperty;
62
62
 
63
63
  /**
64
64
  * Interface including all common properties of a CMS property
@@ -167,6 +167,30 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
167
167
  * It defaults to 100, but you can set it to 50 to have two fields in the same row.
168
168
  */
169
169
  widthPercentage?: number;
170
+
171
+ /**
172
+ * Declarative conditions for dynamic property behavior using JSON Logic.
173
+ *
174
+ * An alternative to PropertyBuilder functions that can be:
175
+ * - Stored in the database as JSON
176
+ * - Edited via the collection editor UI
177
+ * - Evaluated at runtime like property builders
178
+ *
179
+ * @see PropertyConditions for available condition options
180
+ * @see https://jsonlogic.com/ for JSON Logic syntax
181
+ */
182
+ conditions?: PropertyConditions;
183
+
184
+ /**
185
+ * Set this property to true to provide the UX to explicitly set the value to `null`.
186
+ * Defaults to `false`.
187
+ */
188
+ nullable?: boolean;
189
+
190
+ /**
191
+ * @deprecated Use `nullable` instead.
192
+ */
193
+ clearable?: boolean;
170
194
  }
171
195
 
172
196
  /**
@@ -195,6 +219,281 @@ export interface PropertyDisabledConfig {
195
219
  hidden?: boolean;
196
220
  }
197
221
 
222
+ /**
223
+ * A JSON Logic rule that gets evaluated at runtime.
224
+ * @see https://jsonlogic.com/
225
+ *
226
+ * Common operators:
227
+ * - Comparison: ==, !=, ===, !==, >, <, >=, <=
228
+ * - Logic: and, or, !, !!
229
+ * - Data access: var, missing, missing_some
230
+ * - Array: in, map, filter, reduce, all, some, none, merge
231
+ * - String: substr, cat
232
+ * - Numeric: +, -, *, /, %, min, max
233
+ *
234
+ * Custom operators:
235
+ * - hasRole(roleId) - check if user has role by ID
236
+ * - hasAnyRole([roleIds]) - check if user has any of the roles
237
+ * - isToday(timestamp) - check if timestamp is today
238
+ * - isPast(timestamp) - check if timestamp is in the past
239
+ * - isFuture(timestamp) - check if timestamp is in the future
240
+ *
241
+ * @group Entity properties
242
+ */
243
+ export type JsonLogicRule = Record<string, any>;
244
+
245
+ /**
246
+ * Conditions for individual enum values within a property.
247
+ * @group Entity properties
248
+ */
249
+ export interface EnumValueConditions {
250
+ /**
251
+ * Disable this enum option when condition is true.
252
+ * The option appears grayed out and cannot be selected.
253
+ */
254
+ disabled?: JsonLogicRule;
255
+
256
+ /**
257
+ * Message explaining why this option is disabled.
258
+ */
259
+ disabledMessage?: string;
260
+
261
+ /**
262
+ * Completely hide this enum option when condition is true.
263
+ * The option is removed from the dropdown/list.
264
+ */
265
+ hidden?: JsonLogicRule;
266
+ }
267
+
268
+ /**
269
+ * Declarative conditions for dynamic property behavior.
270
+ * All conditions are JSON Logic rules evaluated against ConditionContext.
271
+ *
272
+ * An alternative to PropertyBuilder functions that can be:
273
+ * - Stored in the database as JSON
274
+ * - Edited via the collection editor UI
275
+ * - Evaluated at runtime like property builders
276
+ *
277
+ * @see https://jsonlogic.com/ for JSON Logic syntax
278
+ * @group Entity properties
279
+ */
280
+ export interface PropertyConditions {
281
+
282
+ // ═══════════════════════════════════════════════════════════════════════
283
+ // FIELD STATE CONDITIONS
284
+ // ═══════════════════════════════════════════════════════════════════════
285
+
286
+ /**
287
+ * Disable the field when this condition evaluates to true.
288
+ * The field becomes non-editable but still visible (unless also hidden).
289
+ *
290
+ * @example Disable when another field has a specific value
291
+ * ```json
292
+ * { "==": [{ "var": "values.status" }, "archived"] }
293
+ * ```
294
+ */
295
+ disabled?: JsonLogicRule;
296
+
297
+ /**
298
+ * Message to display when the field is disabled by a condition.
299
+ */
300
+ disabledMessage?: string;
301
+
302
+ /**
303
+ * Clear the field's value when it becomes disabled.
304
+ * @default false
305
+ */
306
+ clearOnDisabled?: boolean;
307
+
308
+ /**
309
+ * Hide the field completely when this condition evaluates to true.
310
+ * The field is removed from the form (not just visually hidden).
311
+ */
312
+ hidden?: JsonLogicRule;
313
+
314
+ /**
315
+ * Make the field read-only when this condition evaluates to true.
316
+ * Renders as a preview instead of an input.
317
+ */
318
+ readOnly?: JsonLogicRule;
319
+
320
+ // ═══════════════════════════════════════════════════════════════════════
321
+ // VALIDATION CONDITIONS
322
+ // ═══════════════════════════════════════════════════════════════════════
323
+
324
+ /**
325
+ * Make the field required when this condition evaluates to true.
326
+ * Overrides the static `validation.required` setting.
327
+ */
328
+ required?: JsonLogicRule;
329
+
330
+ /**
331
+ * Custom message when conditional required validation fails.
332
+ */
333
+ requiredMessage?: string;
334
+
335
+ /**
336
+ * Dynamic minimum value for number/string length.
337
+ * Should evaluate to a number.
338
+ */
339
+ min?: JsonLogicRule;
340
+
341
+ /**
342
+ * Dynamic maximum value for number/string length.
343
+ * Should evaluate to a number.
344
+ */
345
+ max?: JsonLogicRule;
346
+
347
+ // ═══════════════════════════════════════════════════════════════════════
348
+ // VALUE CONDITIONS
349
+ // ═══════════════════════════════════════════════════════════════════════
350
+
351
+ /**
352
+ * Dynamic default value for new entities.
353
+ * Should evaluate to a value of the appropriate type for the field.
354
+ * Only applied when entityId is empty (new entity).
355
+ */
356
+ defaultValue?: JsonLogicRule;
357
+
358
+ // ═══════════════════════════════════════════════════════════════════════
359
+ // ENUM CONDITIONS (for string/number properties with enumValues)
360
+ // ═══════════════════════════════════════════════════════════════════════
361
+
362
+ /**
363
+ * Conditions for individual enum values.
364
+ * Keys are the enum value IDs, values are condition configs.
365
+ *
366
+ * @example Disable certain enum options based on user role
367
+ * ```json
368
+ * {
369
+ * "admin": {
370
+ * "disabled": { "!": { "hasRole": "admin" } },
371
+ * "disabledMessage": "Admin option requires admin role"
372
+ * }
373
+ * }
374
+ * ```
375
+ */
376
+ enumConditions?: Record<string | number, EnumValueConditions>;
377
+
378
+ /**
379
+ * Filter which enum values are available.
380
+ * Should evaluate to an array of allowed enum value IDs.
381
+ */
382
+ allowedEnumValues?: JsonLogicRule;
383
+
384
+ /**
385
+ * Exclude specific enum values.
386
+ * Should evaluate to an array of enum value IDs to exclude.
387
+ */
388
+ excludedEnumValues?: JsonLogicRule;
389
+
390
+ // ═══════════════════════════════════════════════════════════════════════
391
+ // REFERENCE CONDITIONS (for reference properties)
392
+ // ═══════════════════════════════════════════════════════════════════════
393
+
394
+ /**
395
+ * Dynamic path for reference properties.
396
+ * Should evaluate to a collection path string.
397
+ */
398
+ referencePath?: JsonLogicRule;
399
+
400
+ /**
401
+ * Dynamic filter for reference selection.
402
+ * Should evaluate to a FilterValues object.
403
+ */
404
+ referenceFilter?: JsonLogicRule;
405
+
406
+ // ═══════════════════════════════════════════════════════════════════════
407
+ // ARRAY CONDITIONS (for array properties)
408
+ // ═══════════════════════════════════════════════════════════════════════
409
+
410
+ /**
411
+ * Can elements be added to the array?
412
+ */
413
+ canAddElements?: JsonLogicRule;
414
+
415
+ /**
416
+ * Can elements be reordered in the array?
417
+ */
418
+ sortable?: JsonLogicRule;
419
+
420
+ // ═══════════════════════════════════════════════════════════════════════
421
+ // STORAGE CONDITIONS (for file upload properties)
422
+ // ═══════════════════════════════════════════════════════════════════════
423
+
424
+ /**
425
+ * Dynamic accepted file types.
426
+ * Should evaluate to an array of MIME types.
427
+ */
428
+ acceptedFiles?: JsonLogicRule;
429
+
430
+ /**
431
+ * Dynamic maximum file size in bytes.
432
+ * Should evaluate to a number.
433
+ */
434
+ maxFileSize?: JsonLogicRule;
435
+ }
436
+
437
+ /**
438
+ * Context available during JSON Logic condition evaluation.
439
+ * Mirrors PropertyBuilderProps but adapted for JSON serialization.
440
+ * @group Entity properties
441
+ */
442
+ export interface ConditionContext {
443
+ /**
444
+ * Current form/entity values.
445
+ * Date values are converted to Unix timestamps (milliseconds).
446
+ */
447
+ values: Record<string, any>;
448
+
449
+ /**
450
+ * Previous values before the current edit session.
451
+ */
452
+ previousValues: Record<string, any>;
453
+
454
+ /**
455
+ * Current value of this property specifically.
456
+ */
457
+ propertyValue: any;
458
+
459
+ /**
460
+ * Collection path (e.g., "products", "users/uid123/orders")
461
+ */
462
+ path: string;
463
+
464
+ /**
465
+ * Entity ID. Undefined for new entities.
466
+ */
467
+ entityId?: string;
468
+
469
+ /**
470
+ * Whether this is a new entity being created.
471
+ */
472
+ isNew: boolean;
473
+
474
+ /**
475
+ * Index of this property (only for array items).
476
+ */
477
+ index?: number;
478
+
479
+ /**
480
+ * Current authenticated user information.
481
+ */
482
+ user: {
483
+ uid: string;
484
+ email: string | null;
485
+ displayName: string | null;
486
+ photoURL: string | null;
487
+ /** Role IDs the user has (extracted from Role[].id) */
488
+ roles: string[];
489
+ };
490
+
491
+ /**
492
+ * Current timestamp as Unix milliseconds.
493
+ */
494
+ now: number;
495
+ }
496
+
198
497
  /**
199
498
  * @group Entity properties
200
499
  */
@@ -290,14 +589,14 @@ export type PropertyBuilderProps<M extends Record<string, any> = any> =
290
589
  */
291
590
  export type PropertyBuilder<T extends CMSType = any, M extends Record<string, any> = any> =
292
591
  ({
293
- values,
294
- previousValues,
295
- propertyValue,
296
- index,
297
- path,
298
- entityId,
299
- authController
300
- }: PropertyBuilderProps<M>) => Property<T> | null;
592
+ values,
593
+ previousValues,
594
+ propertyValue,
595
+ index,
596
+ path,
597
+ entityId,
598
+ authController
599
+ }: PropertyBuilderProps<M>) => Property<T> | null;
301
600
 
302
601
  /**
303
602
  * @group Entity properties
@@ -332,11 +631,6 @@ export interface NumberProperty extends BaseProperty<number> {
332
631
  * Rules for validating this property
333
632
  */
334
633
  validation?: NumberPropertyValidationSchema,
335
-
336
- /**
337
- * Add an icon to clear the value and set it to `null`. Defaults to `false`
338
- */
339
- clearable?: boolean;
340
634
  }
341
635
 
342
636
  /**
@@ -353,6 +647,27 @@ export interface BooleanProperty extends BaseProperty<boolean> {
353
647
 
354
648
  }
355
649
 
650
+ /**
651
+ * Configuration options for the markdown editor.
652
+ * @group Entity properties
653
+ */
654
+ export interface MarkdownConfig {
655
+ /**
656
+ * Allow HTML input/output. When set to false, HTML tags in pasted content
657
+ * will be stripped and only markdown-compatible formatting will be preserved.
658
+ * Defaults to true for backwards compatibility.
659
+ */
660
+ html?: boolean;
661
+
662
+ /**
663
+ * Convert pasted text to markdown format. When enabled, rich text pasted
664
+ * from external sources (like Google Docs or Word) will be converted to
665
+ * clean markdown instead of preserving HTML styles.
666
+ * Defaults to false.
667
+ */
668
+ transformPastedText?: boolean;
669
+ }
670
+
356
671
  /**
357
672
  * @group Entity properties
358
673
  */
@@ -369,10 +684,13 @@ export interface StringProperty extends BaseProperty<string> {
369
684
 
370
685
  /**
371
686
  * Should this string property be displayed as a markdown field. If true,
372
- * the field is rendered as a text editors that supports markdown highlight
687
+ * the field is rendered as a text editor that supports markdown highlight
373
688
  * syntax. It also includes a preview of the result.
689
+ *
690
+ * You can also pass a configuration object to customize the markdown editor
691
+ * behavior, particularly how HTML content is handled during paste operations.
374
692
  */
375
- markdown?: boolean;
693
+ markdown?: boolean | MarkdownConfig;
376
694
 
377
695
  /**
378
696
  * You can use the enum values providing a map of possible
@@ -423,11 +741,6 @@ export interface StringProperty extends BaseProperty<string> {
423
741
  */
424
742
  validation?: StringPropertyValidationSchema;
425
743
 
426
- /**
427
- * Add an icon to clear the value and set it to `null`. Defaults to `false`
428
- */
429
- clearable?: boolean;
430
-
431
744
  /**
432
745
  * You can use this property (a string) to behave as a reference to another
433
746
  * collection. The stored value is the ID of the entity in the
@@ -620,6 +933,14 @@ export interface DateProperty extends BaseProperty<Date> {
620
933
  * Add an icon to clear the value and set it to `null`. Defaults to `false`
621
934
  */
622
935
  clearable?: boolean;
936
+
937
+ /**
938
+ * IANA timezone string (e.g., "America/New_York", "Europe/London").
939
+ * Used to display and input dates in the specified timezone.
940
+ * The value stored will always be in UTC.
941
+ * If not provided, uses the user's local timezone.
942
+ */
943
+ timezone?: string;
623
944
  }
624
945
 
625
946
  /**
@@ -790,6 +1111,7 @@ export type StorageConfig = {
790
1111
  */
791
1112
  imageResize?: ImageResize;
792
1113
 
1114
+
793
1115
  /**
794
1116
  * Specific metadata set in your uploaded file.
795
1117
  * For the default Firebase implementation, the values passed here are of type
@@ -828,6 +1150,16 @@ export type StorageConfig = {
828
1150
  */
829
1151
  storagePath: string | ((context: UploadedFileContext) => string);
830
1152
 
1153
+ /**
1154
+ * When set to true, this flag indicates that the bucket name will be
1155
+ * included in the saved storage path.
1156
+ *
1157
+ * E.g. `gs://my-bucket/path/to/file.png` instead of just `path/to/file.png`
1158
+ *
1159
+ * Defaults to false.
1160
+ */
1161
+ includeBucketUrl?: boolean;
1162
+
831
1163
  /**
832
1164
  * When set to true, this flag indicates that the download URL of the file
833
1165
  * will be saved in the datasource, instead of the storage path.
@@ -941,7 +1273,7 @@ export interface ImageResize {
941
1273
  * - `contain`: Scale down to fit within bounds, preserving aspect ratio (default)
942
1274
  * - `cover`: Scale to fill bounds, preserving aspect ratio (may crop)
943
1275
  */
944
- mode?: 'contain' | 'cover';
1276
+ mode?: "contain" | "cover";
945
1277
 
946
1278
  /**
947
1279
  * Output format for the resized image.
@@ -950,7 +1282,7 @@ export interface ImageResize {
950
1282
  * - `png`: Convert to PNG
951
1283
  * - `webp`: Convert to WebP
952
1284
  */
953
- format?: 'original' | 'jpeg' | 'png' | 'webp';
1285
+ format?: "original" | "jpeg" | "png" | "webp";
954
1286
 
955
1287
  /**
956
1288
  * Quality for lossy formats (JPEG, WebP). Number between 0 and 100.
@@ -6,7 +6,8 @@ export interface UploadFileProps {
6
6
  fileName?: string,
7
7
  path?: string,
8
8
  metadata?: any,
9
- bucket?: string
9
+ bucket?: string,
10
+ onProgress?: (progress: number) => void
10
11
  }
11
12
 
12
13
  /**
@@ -21,6 +22,15 @@ export interface UploadFileResult {
21
22
  * Bucket where the file was uploaded
22
23
  */
23
24
  bucket: string;
25
+
26
+ /**
27
+ * Fully qualified storage URL for the uploaded file.
28
+ *
29
+ * For example: `gs://my-bucket/path/to/file.png`.
30
+ *
31
+ * This is optional for backwards compatibility.
32
+ */
33
+ storageUrl?: string;
24
34
  }
25
35
 
26
36
  /**