@firecms/core 3.0.1 → 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 (334) 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/VirtualTableCell.d.ts +6 -0
  32. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +4 -1
  33. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  34. package/dist/components/VirtualTable/VirtualTableProps.d.ts +17 -1
  35. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  36. package/dist/components/VirtualTable/types.d.ts +3 -0
  37. package/dist/components/index.d.ts +4 -0
  38. package/dist/contexts/index.d.ts +10 -0
  39. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  40. package/dist/core/index.d.ts +1 -0
  41. package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
  42. package/dist/editor/components/editor-bubble-item.d.ts +8 -0
  43. package/dist/editor/components/editor-bubble.d.ts +8 -0
  44. package/dist/editor/components/image-bubble.d.ts +5 -0
  45. package/dist/editor/components/index.d.ts +16 -0
  46. package/dist/editor/components/table-bubble.d.ts +5 -0
  47. package/dist/editor/editor.d.ts +30 -0
  48. package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
  49. package/dist/editor/extensions/Image/index.d.ts +6 -0
  50. package/dist/editor/extensions/Image.d.ts +6 -0
  51. package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
  52. package/dist/editor/extensions/clipboard.d.ts +7 -0
  53. package/dist/editor/extensions/custom-keymap.d.ts +1 -0
  54. package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
  55. package/dist/editor/hooks/useProseMirror.d.ts +13 -0
  56. package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
  57. package/dist/editor/index.d.ts +2 -0
  58. package/dist/editor/markdown.d.ts +5 -0
  59. package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
  60. package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
  61. package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
  62. package/dist/editor/nodeViews/index.d.ts +6 -0
  63. package/dist/editor/plugins/index.d.ts +2 -0
  64. package/dist/editor/plugins/inputrules.d.ts +6 -0
  65. package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
  66. package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
  67. package/dist/editor/schema.d.ts +2 -0
  68. package/dist/editor/selectors/ai-selector.d.ts +0 -0
  69. package/dist/editor/selectors/color-selector.d.ts +10 -0
  70. package/dist/editor/selectors/link-selector.d.ts +8 -0
  71. package/dist/editor/selectors/node-selector.d.ts +15 -0
  72. package/dist/editor/selectors/text-buttons.d.ts +1 -0
  73. package/dist/editor/types.d.ts +5 -0
  74. package/dist/editor/useProseMirror.d.ts +16 -0
  75. package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
  76. package/dist/editor/utils/remove_classes.d.ts +1 -0
  77. package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
  78. package/dist/form/components/ErrorFocus.d.ts +1 -1
  79. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  80. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
  81. package/dist/form/validation.d.ts +3 -2
  82. package/dist/hooks/index.d.ts +1 -0
  83. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  84. package/dist/hooks/useBuildNavigationController.d.ts +0 -1
  85. package/dist/hooks/useCollapsedGroups.d.ts +6 -3
  86. package/dist/hooks/useTranslation.d.ts +17 -0
  87. package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
  88. package/dist/index.d.ts +5 -0
  89. package/dist/index.es.js +30146 -15178
  90. package/dist/index.es.js.map +1 -1
  91. package/dist/index.umd.js +30032 -15085
  92. package/dist/index.umd.js.map +1 -1
  93. package/dist/internal/useRestoreScroll.d.ts +1 -1
  94. package/dist/locales/de.d.ts +2 -0
  95. package/dist/locales/en.d.ts +10 -0
  96. package/dist/locales/es.d.ts +10 -0
  97. package/dist/locales/fr.d.ts +2 -0
  98. package/dist/locales/hi.d.ts +2 -0
  99. package/dist/locales/it.d.ts +2 -0
  100. package/dist/locales/pt.d.ts +7 -0
  101. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  102. package/dist/preview/components/DatePreview.d.ts +13 -3
  103. package/dist/preview/components/ImagePreview.d.ts +5 -1
  104. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  105. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  106. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  107. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  108. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  109. package/dist/types/analytics.d.ts +1 -1
  110. package/dist/types/collections.d.ts +88 -2
  111. package/dist/types/customization_controller.d.ts +2 -1
  112. package/dist/types/datasource.d.ts +0 -1
  113. package/dist/types/firecms.d.ts +2 -1
  114. package/dist/types/index.d.ts +1 -0
  115. package/dist/types/navigation.d.ts +2 -2
  116. package/dist/types/plugins.d.ts +69 -1
  117. package/dist/types/properties.d.ts +268 -12
  118. package/dist/types/storage.d.ts +1 -0
  119. package/dist/types/translations.d.ts +669 -0
  120. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  121. package/dist/util/__tests__/objects.test.d.ts +1 -0
  122. package/dist/util/conditions.d.ts +26 -0
  123. package/dist/util/entities.d.ts +2 -3
  124. package/dist/util/index.d.ts +3 -1
  125. package/dist/util/lazy_eager.d.ts +7 -0
  126. package/dist/util/objects.d.ts +1 -0
  127. package/dist/util/property_utils.d.ts +2 -1
  128. package/dist/util/resolutions.d.ts +3 -3
  129. package/dist/util/useStorageUploadController.d.ts +10 -1
  130. package/package.json +51 -12
  131. package/src/app/Scaffold.tsx +20 -19
  132. package/src/components/AIIcon.tsx +41 -0
  133. package/src/components/ArrayContainer.tsx +7 -8
  134. package/src/components/ClearFilterSortButton.tsx +25 -19
  135. package/src/components/ConfirmationDialog.tsx +4 -4
  136. package/src/components/DeleteEntityDialog.tsx +12 -11
  137. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +82 -43
  138. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  139. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  140. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  141. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
  142. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +24 -44
  143. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  144. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
  145. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
  146. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
  147. package/src/components/EntityCollectionView/Board.tsx +324 -0
  148. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  149. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  150. package/src/components/EntityCollectionView/BoardSortableList.tsx +174 -0
  151. package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
  152. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  153. package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
  154. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +706 -0
  155. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +236 -0
  156. package/src/components/EntityCollectionView/EntityCollectionView.tsx +531 -209
  157. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +35 -22
  158. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +86 -15
  159. package/src/components/EntityCollectionView/FiltersDialog.tsx +252 -0
  160. package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
  161. package/src/components/EntityCollectionView/board_types.ts +113 -0
  162. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  163. package/src/components/EntityJsonPreview.tsx +2 -1
  164. package/src/components/EntityView.tsx +3 -2
  165. package/src/components/ErrorBoundary.tsx +27 -15
  166. package/src/components/ErrorTooltip.tsx +2 -1
  167. package/src/components/HomePage/DefaultHomePage.tsx +65 -22
  168. package/src/components/HomePage/HomePageDnD.tsx +59 -42
  169. package/src/components/HomePage/NavigationCard.tsx +20 -18
  170. package/src/components/HomePage/NavigationGroup.tsx +20 -17
  171. package/src/components/HomePage/RenameGroupDialog.tsx +15 -15
  172. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  173. package/src/components/LanguageToggle.tsx +66 -0
  174. package/src/components/NotFoundPage.tsx +5 -3
  175. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +12 -17
  176. package/src/components/ReferenceWidget.tsx +5 -6
  177. package/src/components/SearchIconsView.tsx +3 -1
  178. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  179. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  180. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +50 -40
  181. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +53 -40
  182. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -58
  183. package/src/components/UnsavedChangesDialog.tsx +6 -6
  184. package/src/components/UserDisplay.tsx +4 -4
  185. package/src/components/VirtualTable/VirtualTable.performance.test.tsx +1 -0
  186. package/src/components/VirtualTable/VirtualTable.tsx +275 -119
  187. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  188. package/src/components/VirtualTable/VirtualTableHeader.tsx +76 -64
  189. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +163 -42
  190. package/src/components/VirtualTable/VirtualTableProps.tsx +21 -2
  191. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  192. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  193. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
  194. package/src/components/VirtualTable/types.tsx +3 -0
  195. package/src/components/common/default_entity_actions.tsx +4 -0
  196. package/src/components/common/useColumnsIds.tsx +95 -3
  197. package/src/components/common/useDataSourceTableController.tsx +12 -4
  198. package/src/components/index.tsx +5 -0
  199. package/src/contexts/BreacrumbsContext.tsx +15 -8
  200. package/src/contexts/index.ts +10 -0
  201. package/src/core/DefaultAppBar.tsx +49 -32
  202. package/src/core/DefaultDrawer.tsx +49 -57
  203. package/src/core/DrawerNavigationGroup.tsx +120 -0
  204. package/src/core/DrawerNavigationItem.tsx +4 -3
  205. package/src/core/EntityEditView.tsx +94 -50
  206. package/src/core/EntityEditViewFormActions.tsx +24 -17
  207. package/src/core/EntitySidePanel.tsx +34 -30
  208. package/src/core/FireCMS.tsx +33 -6
  209. package/src/core/SideDialogs.tsx +4 -2
  210. package/src/core/field_configs.tsx +18 -11
  211. package/src/core/index.tsx +1 -0
  212. package/src/editor/components/SlashCommandMenu.tsx +516 -0
  213. package/src/editor/components/editor-bubble-item.tsx +32 -0
  214. package/src/editor/components/editor-bubble.tsx +118 -0
  215. package/src/editor/components/image-bubble.tsx +156 -0
  216. package/src/editor/components/index.ts +14 -0
  217. package/src/editor/components/table-bubble.tsx +165 -0
  218. package/src/editor/editor.tsx +455 -0
  219. package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
  220. package/src/editor/extensions/Image/index.ts +133 -0
  221. package/src/editor/extensions/Image.ts +159 -0
  222. package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
  223. package/src/editor/extensions/clipboard.ts +72 -0
  224. package/src/editor/extensions/custom-keymap.ts +24 -0
  225. package/src/editor/extensions/drag-and-drop.tsx +480 -0
  226. package/src/editor/hooks/useProseMirror.ts +124 -0
  227. package/src/editor/hooks/useProseMirrorContext.ts +15 -0
  228. package/src/editor/index.ts +2 -0
  229. package/src/editor/markdown.ts +172 -0
  230. package/src/editor/nodeViews/ImageComponent.tsx +20 -0
  231. package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
  232. package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
  233. package/src/editor/nodeViews/index.ts +35 -0
  234. package/src/editor/plugins/index.ts +58 -0
  235. package/src/editor/plugins/inputrules.ts +82 -0
  236. package/src/editor/plugins/placeholderPlugin.ts +55 -0
  237. package/src/editor/plugins/slashCommandPlugin.ts +61 -0
  238. package/src/editor/schema.ts +240 -0
  239. package/src/editor/selectors/ai-selector.tsx +111 -0
  240. package/src/editor/selectors/color-selector.tsx +200 -0
  241. package/src/editor/selectors/link-selector.tsx +118 -0
  242. package/src/editor/selectors/node-selector.tsx +157 -0
  243. package/src/editor/selectors/text-buttons.tsx +86 -0
  244. package/src/editor/types.ts +6 -0
  245. package/src/editor/useProseMirror.ts +126 -0
  246. package/src/editor/utils/prosemirror-utils.ts +108 -0
  247. package/src/editor/utils/remove_classes.ts +17 -0
  248. package/src/editor/utils/useDebouncedCallback.ts +25 -0
  249. package/src/form/EntityForm.tsx +149 -67
  250. package/src/form/EntityFormActions.tsx +19 -12
  251. package/src/form/PropertyFieldBinding.tsx +68 -51
  252. package/src/form/components/ErrorFocus.tsx +3 -3
  253. package/src/form/components/LocalChangesMenu.tsx +13 -13
  254. package/src/form/components/StorageItemPreview.tsx +5 -3
  255. package/src/form/components/StorageUploadProgress.tsx +18 -3
  256. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
  257. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -10
  258. package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
  259. package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -17
  260. package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -25
  261. package/src/form/field_bindings/MapFieldBinding.tsx +88 -70
  262. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +93 -52
  263. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
  264. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
  265. package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
  266. package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
  267. package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
  268. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
  269. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
  270. package/src/form/field_bindings/TextFieldBinding.tsx +77 -38
  271. package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
  272. package/src/form/validation.ts +245 -160
  273. package/src/hooks/index.tsx +1 -0
  274. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  275. package/src/hooks/useBuildNavigationController.tsx +91 -41
  276. package/src/hooks/useCollapsedGroups.ts +18 -9
  277. package/src/hooks/useTranslation.ts +31 -0
  278. package/src/hooks/useValidateAuthenticator.tsx +1 -1
  279. package/src/i18n/FireCMSi18nProvider.tsx +160 -0
  280. package/src/index.ts +5 -0
  281. package/src/internal/useBuildDataSource.ts +68 -34
  282. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  283. package/src/internal/useBuildSideEntityController.tsx +24 -24
  284. package/src/internal/useRestoreScroll.tsx +26 -14
  285. package/src/locales/de.ts +718 -0
  286. package/src/locales/en.ts +730 -0
  287. package/src/locales/es.ts +730 -0
  288. package/src/locales/fr.ts +718 -0
  289. package/src/locales/hi.ts +718 -0
  290. package/src/locales/it.ts +718 -0
  291. package/src/locales/pt.ts +727 -0
  292. package/src/preview/PropertyPreview.tsx +43 -33
  293. package/src/preview/PropertyPreviewProps.tsx +6 -0
  294. package/src/preview/components/DatePreview.tsx +72 -4
  295. package/src/preview/components/EmptyValue.tsx +1 -1
  296. package/src/preview/components/ImagePreview.tsx +37 -21
  297. package/src/preview/components/ReferencePreview.tsx +2 -1
  298. package/src/preview/components/StorageThumbnail.tsx +16 -12
  299. package/src/preview/components/UrlComponentPreview.tsx +32 -27
  300. package/src/preview/components/UserPreview.tsx +3 -1
  301. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  302. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  303. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  304. package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
  305. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  306. package/src/routes/CustomCMSRoute.tsx +1 -0
  307. package/src/routes/FireCMSRoute.tsx +87 -65
  308. package/src/types/analytics.ts +10 -0
  309. package/src/types/collections.ts +97 -3
  310. package/src/types/customization_controller.tsx +2 -1
  311. package/src/types/datasource.ts +54 -56
  312. package/src/types/firecms.tsx +2 -1
  313. package/src/types/index.ts +1 -0
  314. package/src/types/navigation.ts +2 -2
  315. package/src/types/plugins.tsx +77 -1
  316. package/src/types/properties.ts +359 -37
  317. package/src/types/storage.ts +2 -1
  318. package/src/types/translations.ts +752 -0
  319. package/src/util/__tests__/conditions.test.ts +506 -0
  320. package/src/util/__tests__/objects.test.ts +196 -0
  321. package/src/util/callbacks.ts +6 -3
  322. package/src/util/collections.ts +51 -6
  323. package/src/util/conditions.ts +339 -0
  324. package/src/util/entities.ts +29 -30
  325. package/src/util/entity_cache.ts +2 -1
  326. package/src/util/index.ts +3 -1
  327. package/src/util/join_collections.ts +10 -8
  328. package/src/util/lazy_eager.tsx +33 -0
  329. package/src/util/objects.ts +46 -13
  330. package/src/util/{references.ts → previews.ts} +16 -2
  331. package/src/util/property_utils.tsx +37 -11
  332. package/src/util/resolutions.ts +62 -58
  333. package/src/util/useStorageUploadController.tsx +23 -29
  334. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -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
@@ -951,7 +1273,7 @@ export interface ImageResize {
951
1273
  * - `contain`: Scale down to fit within bounds, preserving aspect ratio (default)
952
1274
  * - `cover`: Scale to fill bounds, preserving aspect ratio (may crop)
953
1275
  */
954
- mode?: 'contain' | 'cover';
1276
+ mode?: "contain" | "cover";
955
1277
 
956
1278
  /**
957
1279
  * Output format for the resized image.
@@ -960,7 +1282,7 @@ export interface ImageResize {
960
1282
  * - `png`: Convert to PNG
961
1283
  * - `webp`: Convert to WebP
962
1284
  */
963
- format?: 'original' | 'jpeg' | 'png' | 'webp';
1285
+ format?: "original" | "jpeg" | "png" | "webp";
964
1286
 
965
1287
  /**
966
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
  /**