@firecms/core 3.2.0 → 3.3.0-canary.2064433

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 (193) hide show
  1. package/dist/app/AppBar.d.ts +1 -1
  2. package/dist/app/Drawer.d.ts +1 -1
  3. package/dist/components/AIIcon.d.ts +3 -2
  4. package/dist/components/ArrayContainer.d.ts +3 -3
  5. package/dist/components/CircularProgressCenter.d.ts +2 -1
  6. package/dist/components/ClearFilterSortButton.d.ts +1 -1
  7. package/dist/components/ConfirmationDialog.d.ts +1 -1
  8. package/dist/components/DeleteEntityDialog.d.ts +2 -1
  9. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -1
  11. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  12. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
  13. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -1
  14. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +1 -1
  15. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +4 -3
  16. package/dist/components/EntityCollectionView/Board.d.ts +2 -1
  17. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +1 -1
  18. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +1 -1
  19. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +2 -1
  20. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +1 -1
  21. package/dist/components/EntityCollectionView/EntityCard.d.ts +2 -1
  22. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +1 -1
  23. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +1 -1
  24. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -1
  25. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
  26. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +2 -1
  27. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +2 -1
  28. package/dist/components/EntityJsonPreview.d.ts +2 -1
  29. package/dist/components/EntityPreview.d.ts +1 -1
  30. package/dist/components/EntityView.d.ts +2 -1
  31. package/dist/components/ErrorBoundary.d.ts +1 -1
  32. package/dist/components/ErrorTooltip.d.ts +2 -1
  33. package/dist/components/FieldCaption.d.ts +1 -1
  34. package/dist/components/FireCMSLogo.d.ts +1 -1
  35. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  36. package/dist/components/HomePage/FavouritesView.d.ts +1 -1
  37. package/dist/components/HomePage/HomePageDnD.d.ts +4 -4
  38. package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
  39. package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
  40. package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
  41. package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
  42. package/dist/components/LanguageToggle.d.ts +2 -1
  43. package/dist/components/NotFoundPage.d.ts +2 -1
  44. package/dist/components/PropertyCollectionView.d.ts +2 -1
  45. package/dist/components/PropertyIdCopyTooltip.d.ts +2 -2
  46. package/dist/components/ReferenceTable/ReferenceSelectionTable.d.ts +1 -1
  47. package/dist/components/ReferenceWidget.d.ts +2 -1
  48. package/dist/components/SearchIconsView.d.ts +2 -1
  49. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  50. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -1
  51. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  52. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  53. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -1
  54. package/dist/components/UnsavedChangesDialog.d.ts +1 -1
  55. package/dist/components/UserDisplay.d.ts +1 -1
  56. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +1 -0
  57. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -1
  58. package/dist/components/VirtualTable/VirtualTableProps.d.ts +6 -1
  59. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -1
  60. package/dist/components/VirtualTable/fields/VirtualTableInput.d.ts +2 -1
  61. package/dist/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +2 -1
  62. package/dist/components/VirtualTable/fields/VirtualTableSelect.d.ts +1 -1
  63. package/dist/components/VirtualTable/fields/VirtualTableSwitch.d.ts +2 -1
  64. package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +1 -1
  65. package/dist/components/VirtualTable/types.d.ts +1 -0
  66. package/dist/core/DefaultAppBar.d.ts +1 -1
  67. package/dist/core/DefaultDrawer.d.ts +2 -2
  68. package/dist/core/DrawerNavigationGroup.d.ts +1 -1
  69. package/dist/core/DrawerNavigationItem.d.ts +1 -1
  70. package/dist/core/EntityEditView.d.ts +2 -2
  71. package/dist/core/EntityEditViewFormActions.d.ts +2 -1
  72. package/dist/core/EntitySidePanel.d.ts +2 -1
  73. package/dist/core/FireCMS.d.ts +2 -1
  74. package/dist/core/FireCMSRouter.d.ts +1 -1
  75. package/dist/core/SideDialogs.d.ts +1 -1
  76. package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
  77. package/dist/editor/editor.d.ts +1 -1
  78. package/dist/editor/selectors/color-selector.d.ts +1 -1
  79. package/dist/editor/selectors/link-selector.d.ts +1 -1
  80. package/dist/editor/selectors/node-selector.d.ts +1 -1
  81. package/dist/editor/selectors/text-buttons.d.ts +1 -1
  82. package/dist/form/EntityForm.d.ts +1 -1
  83. package/dist/form/EntityFormActions.d.ts +1 -1
  84. package/dist/form/components/CustomIdField.d.ts +2 -1
  85. package/dist/form/components/FieldHelperText.d.ts +1 -1
  86. package/dist/form/components/FormEntry.d.ts +1 -1
  87. package/dist/form/components/FormLayout.d.ts +1 -1
  88. package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
  89. package/dist/form/components/LocalChangesMenu.d.ts +2 -1
  90. package/dist/form/components/StorageItemPreview.d.ts +2 -1
  91. package/dist/form/components/StorageUploadProgress.d.ts +2 -1
  92. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
  93. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
  94. package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
  95. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
  96. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
  97. package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
  98. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +3 -2
  99. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
  100. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
  101. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +2 -1
  102. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
  103. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
  104. package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
  105. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -2
  106. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
  107. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
  108. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
  109. package/dist/i18n/FireCMSi18nProvider.d.ts +2 -2
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.es.js +24457 -23726
  112. package/dist/index.es.js.map +1 -1
  113. package/dist/index.umd.js +22959 -22228
  114. package/dist/index.umd.js.map +1 -1
  115. package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
  116. package/dist/preview/components/AsyncPreviewComponent.d.ts +1 -1
  117. package/dist/preview/components/EmptyValue.d.ts +2 -1
  118. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  119. package/dist/preview/components/ImagePreview.d.ts +2 -1
  120. package/dist/preview/components/ReferencePreview.d.ts +1 -1
  121. package/dist/preview/components/StorageThumbnail.d.ts +1 -1
  122. package/dist/preview/components/UserPreview.d.ts +2 -1
  123. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
  124. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
  125. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
  126. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
  127. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
  128. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
  129. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
  130. package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
  131. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
  132. package/dist/routes/FireCMSRoute.d.ts +2 -1
  133. package/dist/types/collections.d.ts +38 -0
  134. package/dist/types/properties.d.ts +9 -8
  135. package/dist/types/translations.d.ts +23 -0
  136. package/dist/util/index.d.ts +1 -0
  137. package/dist/util/lazy_eager.d.ts +7 -0
  138. package/dist/util/objects.d.ts +1 -0
  139. package/dist/util/property_utils.d.ts +1 -1
  140. package/package.json +5 -5
  141. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +9 -3
  142. package/src/components/EntityCollectionTable/internal/common.tsx +2 -2
  143. package/src/components/EntityCollectionView/EntityCollectionView.tsx +3 -5
  144. package/src/components/EntityJsonPreview.tsx +2 -1
  145. package/src/components/ErrorBoundary.tsx +3 -3
  146. package/src/components/VirtualTable/VirtualTable.tsx +5 -3
  147. package/src/components/VirtualTable/VirtualTableHeader.tsx +9 -8
  148. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +8 -3
  149. package/src/components/VirtualTable/VirtualTableProps.tsx +7 -1
  150. package/src/components/VirtualTable/types.tsx +1 -0
  151. package/src/core/DrawerNavigationGroup.tsx +1 -1
  152. package/src/core/EntityEditView.tsx +50 -5
  153. package/src/core/EntitySidePanel.tsx +2 -1
  154. package/src/core/field_configs.tsx +4 -2
  155. package/src/editor/editor.tsx +20 -1
  156. package/src/editor/markdown.ts +89 -1
  157. package/src/form/EntityForm.tsx +64 -4
  158. package/src/form/PropertyFieldBinding.tsx +4 -3
  159. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
  160. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +18 -5
  161. package/src/form/field_bindings/BlockFieldBinding.tsx +21 -7
  162. package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
  163. package/src/form/field_bindings/KeyValueFieldBinding.tsx +23 -6
  164. package/src/form/field_bindings/MapFieldBinding.tsx +23 -8
  165. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +43 -20
  166. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
  167. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
  168. package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
  169. package/src/form/field_bindings/RepeatFieldBinding.tsx +18 -5
  170. package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
  171. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +24 -7
  172. package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
  173. package/src/form/field_bindings/TextFieldBinding.tsx +10 -7
  174. package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
  175. package/src/index.ts +1 -0
  176. package/src/internal/useBuildSideEntityController.tsx +1 -1
  177. package/src/locales/de.ts +28 -1
  178. package/src/locales/en.ts +27 -0
  179. package/src/locales/es.ts +28 -1
  180. package/src/locales/fr.ts +28 -1
  181. package/src/locales/hi.ts +28 -1
  182. package/src/locales/it.ts +28 -1
  183. package/src/locales/pt.ts +28 -1
  184. package/src/preview/PropertyPreview.tsx +6 -5
  185. package/src/preview/components/ReferencePreview.tsx +2 -1
  186. package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
  187. package/src/routes/FireCMSRoute.tsx +63 -54
  188. package/src/types/collections.ts +40 -0
  189. package/src/types/properties.ts +11 -10
  190. package/src/types/translations.ts +27 -0
  191. package/src/util/index.ts +1 -0
  192. package/src/util/lazy_eager.tsx +33 -0
  193. package/src/util/objects.ts +15 -0
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { EnumValueConfig } from "../../types";
2
3
  import { PreviewSize } from "../PropertyPreviewProps";
3
4
  /**
@@ -8,4 +9,4 @@ export declare function ArrayEnumPreview({ name, value, enumValues, size }: {
8
9
  name: string | undefined;
9
10
  enumValues: EnumValueConfig[];
10
11
  size: PreviewSize;
11
- }): import("react/jsx-runtime").JSX.Element;
12
+ }): React.JSX.Element;
@@ -8,4 +8,4 @@ export interface AsyncPreviewComponentProps {
8
8
  *
9
9
  * @group Preview components
10
10
  */
11
- export declare const AsyncPreviewComponent: React.MemoExoticComponent<(<M extends Record<string, any>>({ builder }: AsyncPreviewComponentProps) => import("react/jsx-runtime").JSX.Element)>;
11
+ export declare const AsyncPreviewComponent: React.MemoExoticComponent<(<M extends Record<string, any>>({ builder }: AsyncPreviewComponentProps) => React.JSX.Element)>;
@@ -1,4 +1,5 @@
1
+ import React from "react";
1
2
  /**
2
3
  * @group Preview components
3
4
  */
4
- export declare function EmptyValue(): import("react/jsx-runtime").JSX.Element;
5
+ export declare function EmptyValue(): React.JSX.Element;
@@ -10,4 +10,4 @@ export interface EnumValuesChipProps {
10
10
  /**
11
11
  * @group Preview components
12
12
  */
13
- export declare function EnumValuesChip({ enumValues, enumKey, size, className, children }: EnumValuesChipProps): import("react/jsx-runtime").JSX.Element | null;
13
+ export declare function EnumValuesChip({ enumValues, enumKey, size, className, children }: EnumValuesChipProps): React.JSX.Element | null;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { PreviewSize } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
@@ -13,4 +14,4 @@ export interface ImagePreviewProps {
13
14
  /**
14
15
  * @group Preview components
15
16
  */
16
- export declare function ImagePreview({ size, url, fill }: ImagePreviewProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function ImagePreview({ size, url, fill }: ImagePreviewProps): React.JSX.Element;
@@ -14,4 +14,4 @@ export type ReferencePreviewProps = {
14
14
  /**
15
15
  * @group Preview components
16
16
  */
17
- export declare const ReferencePreview: (props: ReferencePreviewProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const ReferencePreview: (props: ReferencePreviewProps) => React.JSX.Element;
@@ -11,5 +11,5 @@ type StorageThumbnailProps = {
11
11
  * @group Preview components
12
12
  */
13
13
  export declare const StorageThumbnail: React.FunctionComponent<StorageThumbnailProps>;
14
- export declare function StorageThumbnailInternal({ storeUrl, interactive, storagePathOrDownloadUrl, size, fill }: StorageThumbnailProps): import("react/jsx-runtime").JSX.Element | null;
14
+ export declare function StorageThumbnailInternal({ storeUrl, interactive, storagePathOrDownloadUrl, size, fill }: StorageThumbnailProps): React.JSX.Element | null;
15
15
  export {};
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * Preview component for displaying user information.
@@ -5,4 +6,4 @@ import { PropertyPreviewProps } from "../PropertyPreviewProps";
5
6
  *
6
7
  * @group Preview components
7
8
  */
8
- export declare function UserPreview({ value }: PropertyPreviewProps<string>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function UserPreview({ value }: PropertyPreviewProps<string>): React.JSX.Element;
@@ -1,5 +1,6 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function ArrayOfMapsPreview({ propertyKey, value, property: inputProperty, size, }: PropertyPreviewProps<Record<string, any>[]>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function ArrayOfMapsPreview({ propertyKey, value, property: inputProperty, size, }: PropertyPreviewProps<Record<string, any>[]>): React.JSX.Element | null;
@@ -2,4 +2,4 @@ import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
2
  /**
3
3
  * @group Preview components
4
4
  */
5
- export declare function ArrayOfReferencesPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): import("react/jsx-runtime").JSX.Element;
5
+ export declare function ArrayOfReferencesPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): import("react").JSX.Element;
@@ -1,5 +1,6 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function ArrayOfStorageComponentsPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function ArrayOfStorageComponentsPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): React.JSX.Element | null;
@@ -1,5 +1,6 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../../preview";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function ArrayOfStringsPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<string[]>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function ArrayOfStringsPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<string[]>): React.JSX.Element | null;
@@ -1,5 +1,6 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function ArrayOneOfPreview({ propertyKey, value, property: inputProperty, size, }: PropertyPreviewProps<any[]>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function ArrayOneOfPreview({ propertyKey, value, property: inputProperty, size, }: PropertyPreviewProps<any[]>): React.JSX.Element | null;
@@ -2,4 +2,4 @@ import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
2
  /**
3
3
  * @group Preview components
4
4
  */
5
- export declare function ArrayPropertyEnumPreview({ propertyKey, value, property, size }: PropertyPreviewProps<string[] | number[]>): import("react/jsx-runtime").JSX.Element | null;
5
+ export declare function ArrayPropertyEnumPreview({ propertyKey, value, property, size }: PropertyPreviewProps<string[] | number[]>): import("react").JSX.Element | null;
@@ -1,5 +1,6 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function ArrayPropertyPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function ArrayPropertyPreview({ propertyKey, value, property: inputProperty, size }: PropertyPreviewProps<any[]>): React.JSX.Element | null;
@@ -1,8 +1,9 @@
1
+ import React from "react";
1
2
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
2
3
  /**
3
4
  * @group Preview components
4
5
  */
5
- export declare function MapPropertyPreview<T extends Record<string, any> = Record<string, any>>({ propertyKey, value, property, size }: PropertyPreviewProps<T>): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function MapPropertyPreview<T extends Record<string, any> = Record<string, any>>({ propertyKey, value, property, size }: PropertyPreviewProps<T>): React.JSX.Element | null;
6
7
  export declare function KeyValuePreview({ value }: {
7
8
  value: any;
8
- }): import("react/jsx-runtime").JSX.Element | null;
9
+ }): React.JSX.Element | null;
@@ -1,4 +1,5 @@
1
1
  import { ResolvedProperty } from "../../types";
2
+ import React from "react";
2
3
  import { PreviewSize } from "../PropertyPreviewProps";
3
4
  export interface SkeletonPropertyComponentProps {
4
5
  property: ResolvedProperty;
@@ -8,7 +9,7 @@ export interface SkeletonPropertyComponentProps {
8
9
  * @group Preview components
9
10
  */
10
11
  export declare function SkeletonPropertyComponent({ property, size }: SkeletonPropertyComponentProps): any;
11
- export declare function renderSkeletonImageThumbnail(size: PreviewSize, fill?: boolean): import("react/jsx-runtime").JSX.Element;
12
- export declare function renderSkeletonText(index?: number, width?: number): import("react/jsx-runtime").JSX.Element;
13
- export declare function renderSkeletonCaptionText(index?: number): import("react/jsx-runtime").JSX.Element;
14
- export declare function renderSkeletonIcon(): import("react/jsx-runtime").JSX.Element;
12
+ export declare function renderSkeletonImageThumbnail(size: PreviewSize, fill?: boolean): React.JSX.Element;
13
+ export declare function renderSkeletonText(index?: number, width?: number): React.JSX.Element;
14
+ export declare function renderSkeletonCaptionText(index?: number): React.JSX.Element;
15
+ export declare function renderSkeletonIcon(): React.JSX.Element;
@@ -1 +1,2 @@
1
- export declare function FireCMSRoute(): import("react/jsx-runtime").JSX.Element | null;
1
+ import React from "react";
2
+ export declare function FireCMSRoute(): React.JSX.Element | null;
@@ -142,6 +142,30 @@ export interface EntityCollection<M extends Record<string, any> = any, USER exte
142
142
  * the side dialog of an entity.
143
143
  */
144
144
  subcollections?: EntityCollection<any, any>[];
145
+ /**
146
+ * You can group subcollections and custom views into dropdown menus
147
+ * in the entity view tabs. Views listed in a group will be removed
148
+ * from the top-level tabs and shown under a single dropdown instead.
149
+ *
150
+ * @example
151
+ * ```tsx
152
+ * const productsCollection = buildCollection({
153
+ * id: "products",
154
+ * path: "products",
155
+ * name: "Products",
156
+ * properties: { ... },
157
+ * subcollections: [localesCollection, reviewsCollection],
158
+ * entityViews: [sampleView],
159
+ * viewGroups: [
160
+ * {
161
+ * name: "Related data",
162
+ * views: ["locales", "reviews", "sample_view"]
163
+ * }
164
+ * ]
165
+ * });
166
+ * ```
167
+ */
168
+ viewGroups?: ViewGroup[];
145
169
  /**
146
170
  * This interface defines all the callbacks that can be used when an entity
147
171
  * is being created, updated or deleted.
@@ -361,6 +385,20 @@ export interface KanbanConfig<M extends Record<string, any> = any> {
361
385
  */
362
386
  columnProperty: Extract<keyof M, string>;
363
387
  }
388
+ /**
389
+ * You can group subcollections and custom views into dropdown menus in the entity view tabs.
390
+ * @group Collections
391
+ */
392
+ export interface ViewGroup {
393
+ /**
394
+ * Name of the group
395
+ */
396
+ name: string;
397
+ /**
398
+ * Array of subcollection paths/ids or custom view keys
399
+ */
400
+ views: string[];
401
+ }
364
402
  /**
365
403
  * View mode for displaying a collection.
366
404
  * @group Collections
@@ -125,6 +125,15 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
125
125
  * @see https://jsonlogic.com/ for JSON Logic syntax
126
126
  */
127
127
  conditions?: PropertyConditions;
128
+ /**
129
+ * Set this property to true to provide the UX to explicitly set the value to `null`.
130
+ * Defaults to `false`.
131
+ */
132
+ nullable?: boolean;
133
+ /**
134
+ * @deprecated Use `nullable` instead.
135
+ */
136
+ clearable?: boolean;
128
137
  }
129
138
  /**
130
139
  * @group Entity properties
@@ -473,10 +482,6 @@ export interface NumberProperty extends BaseProperty<number> {
473
482
  * Rules for validating this property
474
483
  */
475
484
  validation?: NumberPropertyValidationSchema;
476
- /**
477
- * Add an icon to clear the value and set it to `null`. Defaults to `false`
478
- */
479
- clearable?: boolean;
480
485
  }
481
486
  /**
482
487
  * @group Entity properties
@@ -569,10 +574,6 @@ export interface StringProperty extends BaseProperty<string> {
569
574
  * Rules for validating this property
570
575
  */
571
576
  validation?: StringPropertyValidationSchema;
572
- /**
573
- * Add an icon to clear the value and set it to `null`. Defaults to `false`
574
- */
575
- clearable?: boolean;
576
577
  /**
577
578
  * You can use this property (a string) to behave as a reference to another
578
579
  * collection. The stored value is the ID of the entity in the
@@ -412,6 +412,8 @@ export interface FireCMSTranslations {
412
412
  cms_users: string;
413
413
  roles_menu: string;
414
414
  project_settings: string;
415
+ firestore_explorer: string;
416
+ explore_your_firestore_data: string;
415
417
  build_admin_panel_in_minutes: string;
416
418
  go_live_instantly: string;
417
419
  create_production_ready_back_offices: string;
@@ -643,4 +645,25 @@ export interface FireCMSTranslations {
643
645
  settings_appcheck_refresh_note: string;
644
646
  settings_appcheck_updated: string;
645
647
  settings_appcheck_error: string;
648
+ missing_firestore_security_rules: string;
649
+ firecms_cloud_requires_security_rule: string;
650
+ cannot_be_accessed_without_it: string;
651
+ required_security_rule: string;
652
+ fix_automatically: string;
653
+ open_firebase_rules: string;
654
+ security_rules_updated_successfully: string;
655
+ sec_rules_fixing: string;
656
+ sec_rules_fixed: string;
657
+ marketplace_managed_by_gcp: string;
658
+ marketplace_billing_note: string;
659
+ marketplace_manage_in_gcp_console: string;
660
+ marketplace_plan_changes_note: string;
661
+ marketplace_welcome_title: string;
662
+ marketplace_welcome_subtitle: string;
663
+ marketplace_select_or_create_project: string;
664
+ marketplace_link_project: string;
665
+ marketplace_linking: string;
666
+ marketplace_link_success: string;
667
+ marketplace_link_error: string;
668
+ marketplace_no_account_id: string;
646
669
  }
@@ -25,3 +25,4 @@ export * from "./useTraceUpdate";
25
25
  export * from "./storage";
26
26
  export * from "./callbacks";
27
27
  export * from "./conditions";
28
+ export * from "./lazy_eager";
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ /**
3
+ * Returns a React.lazy component that is also preloaded immediately using
4
+ * requestIdleCallback or setTimeout.
5
+ * This ensures that chunks are split, but fetched in the background before they are actually needed.
6
+ */
7
+ export declare function lazyEager<T extends React.ComponentType<any>>(factory: () => Promise<any>, exportName?: string): React.LazyExoticComponent<T>;
@@ -10,3 +10,4 @@ export declare function removeUndefined(value: any, removeEmptyStrings?: boolean
10
10
  export declare function removeNulls(value: any): any;
11
11
  export declare function isEmptyObject(obj: object): boolean;
12
12
  export declare function removePropsIfExisting(source: any, comparison: any): any;
13
+ export declare function jsonStringifyReplacer(key: string, value: any): any;
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { AuthController, EntityCollection, PropertiesOrBuilders, PropertyConfig, PropertyOrBuilder, ResolvedProperties, ResolvedProperty } from "../types";
3
3
  export declare function isReferenceProperty(authController: AuthController, propertyOrBuilder: PropertyOrBuilder, fields: Record<string, PropertyConfig>): boolean | null;
4
4
  export declare function getIdIcon(size: "small" | "medium" | "large"): React.ReactNode;
5
- export declare function getIconForWidget(widget: PropertyConfig | undefined, size: "small" | "medium" | "large"): import("react/jsx-runtime").JSX.Element;
5
+ export declare function getIconForWidget(widget: PropertyConfig | undefined, size: "small" | "medium" | "large"): React.JSX.Element;
6
6
  export declare function getIconForProperty(property: PropertyOrBuilder<any> | ResolvedProperty<any>, size?: "small" | "medium" | "large", fields?: Record<string, PropertyConfig>): React.ReactNode;
7
7
  export declare function getColorForProperty(property: PropertyOrBuilder, fields: Record<string, PropertyConfig>): string;
8
8
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/core",
3
3
  "type": "module",
4
- "version": "3.2.0",
4
+ "version": "3.3.0-canary.2064433",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -10,7 +10,7 @@
10
10
  "license": "MIT",
11
11
  "repository": {
12
12
  "type": "git",
13
- "url": "https://github.com/firecmsco/firecms.git",
13
+ "url": "https://github.com/FireCMSco/firecms.git",
14
14
  "directory": "packages/firecms_core"
15
15
  },
16
16
  "main": "./dist/index.umd.js",
@@ -53,8 +53,8 @@
53
53
  "@dnd-kit/core": "^6.3.1",
54
54
  "@dnd-kit/modifiers": "^9.0.0",
55
55
  "@dnd-kit/sortable": "^10.0.0",
56
- "@firecms/formex": "3.2.0",
57
- "@firecms/ui": "3.2.0",
56
+ "@firecms/formex": "^3.3.0-canary.2064433",
57
+ "@firecms/ui": "^3.3.0-canary.2064433",
58
58
  "@floating-ui/dom": "^1.7.4",
59
59
  "@radix-ui/react-portal": "^1.1.10",
60
60
  "@radix-ui/react-slot": "^1.2.4",
@@ -136,7 +136,7 @@
136
136
  "dist",
137
137
  "src"
138
138
  ],
139
- "gitHead": "4c3b8f2c16265fcdd6bf443cf5b420a7a7332d9d",
139
+ "gitHead": "9ecf37abf793bd2f2daaaed6f517ee5ee19b01ae",
140
140
  "publishConfig": {
141
141
  "access": "public"
142
142
  },
@@ -5,6 +5,7 @@ import { Badge, Checkbox, cls, IconButton, Menu, MenuItem, MoreVertIcon, Skeleto
5
5
  import { useFireCMSContext, useLargeLayout } from "../../hooks";
6
6
  import { getEntityFromCache } from "../../util/entity_cache";
7
7
  import { getLocalChangesBackup } from "../../util";
8
+ import { getChanges } from "../../form/EntityForm";
8
9
 
9
10
  /**
10
11
  *
@@ -81,13 +82,18 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
81
82
  const collapsedActions = actions.filter(a => a.collapsed || a.collapsed === undefined);
82
83
  const uncollapsedActions = actions.filter(a => a.collapsed === false);
83
84
  const enableLocalChangesBackup = collection ? getLocalChangesBackup(collection) : false;
84
- const hasDraft = enableLocalChangesBackup ? getEntityFromCache(fullPath + "/" + entity.id) : false;
85
+ const cachedData = enableLocalChangesBackup ? getEntityFromCache(fullPath + "/" + entity.id) : undefined;
86
+ const hasDraft = (() => {
87
+ if (!cachedData || typeof cachedData !== "object" || Object.keys(cachedData).length === 0) return false;
88
+ const realChanges = getChanges(cachedData as any, (entity?.values ?? {}) as any);
89
+ return Object.keys(realChanges).length > 0;
90
+ })();
85
91
  const iconSize = largeLayout && (size === "m" || size === "l" || size == "xl") ? "medium" : "small";
86
92
 
87
93
  const content = (
88
94
  <div
89
95
  className={cls(
90
- "h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-900 bg-opacity-90 bg-surface-50/90 dark:bg-opacity-90 dark:bg-surface-900/90 z-10",
96
+ "h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-900 bg-opacity-90 bg-surface-50/90 dark:bg-opacity-90 dark:bg-surface-900/90 z-10 shrink-0",
91
97
  frozen ? "sticky left-0" : ""
92
98
  )}
93
99
  onClick={useCallback((event: any) => {
@@ -101,7 +107,7 @@ export const EntityCollectionRowActions = function EntityCollectionRowActions({
101
107
  }}>
102
108
 
103
109
  {(hasActions || selectionEnabled) &&
104
- <div className="w-34 flex justify-center">
110
+ <div className="w-full flex justify-center">
105
111
 
106
112
  {uncollapsedActions.map((action, index) => {
107
113
  const isEditAction = action.key === "edit";
@@ -23,14 +23,14 @@ export function getTablePropertyColumnWidth(property: ResolvedProperty): number
23
23
  if (property.dataType === "string") {
24
24
  if (property.url) {
25
25
  return 280;
26
+ } else if (property.markdown) {
27
+ return 300;
26
28
  } else if (property.storage) {
27
29
  return 160;
28
30
  } else if (property.enumValues) {
29
31
  return 200;
30
32
  } else if (property.multiline) {
31
33
  return 300;
32
- } else if (property.markdown) {
33
- return 300;
34
34
  } else if (property.email) {
35
35
  return 200;
36
36
  } else {
@@ -904,11 +904,9 @@ export const EntityCollectionView = React.memo(
904
904
  />
905
905
 
906
906
  {/* View content - only the view-specific content changes */}
907
- {tableController.dataLoadingError && pluginErrorView}
908
- {tableController.dataLoadingError && !pluginErrorView && (
909
- <CollectionDataErrorBanner error={tableController.dataLoadingError} />
910
- )}
911
- {viewMode === "kanban" && enabledViews.includes("kanban") ? (
907
+ {tableController.dataLoadingError ? (
908
+ pluginErrorView ?? <CollectionDataErrorBanner error={tableController.dataLoadingError} />
909
+ ) : viewMode === "kanban" && enabledViews.includes("kanban") ? (
912
910
  <EntityCollectionBoardView
913
911
  key={`kanban-view-${fullPath}-${selectedKanbanProperty}`}
914
912
  collection={collection}
@@ -1,9 +1,10 @@
1
1
  import React, { useRef } from "react";
2
2
  import { Highlight, themes } from "prism-react-renderer";
3
3
  import { useModeController } from "../hooks";
4
+ import { jsonStringifyReplacer } from "../util/objects";
4
5
 
5
6
  export function EntityJsonPreview({ values }: { values: object }) {
6
- const code = JSON.stringify(values, null, "\t");
7
+ const code = JSON.stringify(values, jsonStringifyReplacer, "\t");
7
8
  const { mode } = useModeController();
8
9
  const preRef = useRef<HTMLPreElement>(null);
9
10
 
@@ -35,10 +35,10 @@ export class ErrorBoundary extends React.Component<PropsWithChildren<Record<stri
35
35
  function FallbackView({ message }: { message?: string }) {
36
36
  const { t } = useTranslation();
37
37
  return (
38
- <div className="h-full w-full bg-slate-100 flex items-center justify-center p-4">
38
+ <div className="h-full w-full bg-slate-100 dark:bg-surface-900 flex items-center justify-center p-4">
39
39
  <div
40
- className="flex flex-col items-center justify-center m-4 bg-white dark:bg-gray-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700">
41
- <div className="flex items-center mb-4 text-red-500">
40
+ className="flex flex-col items-center justify-center m-4 bg-white dark:bg-surface-800 p-8 rounded-lg shadow-sm border border-gray-200 dark:border-surface-700">
41
+ <div className="flex items-center mb-4 text-red-500 dark:text-red-400">
42
42
  <ErrorIcon/>
43
43
  <div className="ml-4">{t("error")}</div>
44
44
  </div>
@@ -126,6 +126,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
126
126
  AddColumnComponent,
127
127
  initialScroll = 0,
128
128
  onColumnsOrderChange,
129
+ headerIconSize,
129
130
  }: VirtualTableProps<T>) {
130
131
 
131
132
  const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;
@@ -211,7 +212,7 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
211
212
  }, [tableRef]);
212
213
 
213
214
  const [measureRef, bounds] = useMeasure({
214
- debounce: 50,
215
+ debounce: 0,
215
216
  polyfill: ResizeObserver,
216
217
  scroll: true,
217
218
  // This is important for handling zooming in react-flow
@@ -369,8 +370,9 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
369
370
  setColumns(newColumns);
370
371
  onColumnsOrderChange(newColumns);
371
372
  } : undefined,
372
- draggingColumnId
373
- }), [data, rowHeight, cellRenderer, columns, currentSort, onRowClick, customView, onColumnResizeInternal, onColumnResizeEndInternal, filterInput, onColumnSort, onFilterUpdateInternal, sortByProperty, hoverRow, createFilterField, rowClassName, endAdornment, AddColumnComponent, onColumnsOrderChange, draggingColumnId]);
373
+ draggingColumnId,
374
+ headerIconSize,
375
+ }), [data, rowHeight, cellRenderer, columns, currentSort, onRowClick, customView, onColumnResizeInternal, onColumnResizeEndInternal, filterInput, onColumnSort, onFilterUpdateInternal, sortByProperty, hoverRow, createFilterField, rowClassName, endAdornment, AddColumnComponent, onColumnsOrderChange, draggingColumnId, headerIconSize]);
374
376
 
375
377
  // Get sortable column keys (excluding frozen columns)
376
378
  const sortableColumnKeys = columns
@@ -48,6 +48,7 @@ type VirtualTableHeaderProps<M extends Record<string, any>> = {
48
48
  AdditionalHeaderWidget?: (props: { onHover: boolean }) => React.ReactNode;
49
49
  isDragging?: boolean;
50
50
  isDraggable?: boolean;
51
+ headerIconSize?: "small" | "smallest";
51
52
  };
52
53
 
53
54
  export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
@@ -64,7 +65,8 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
64
65
  createFilterField,
65
66
  AdditionalHeaderWidget,
66
67
  isDragging,
67
- isDraggable
68
+ isDraggable,
69
+ headerIconSize = "small",
68
70
  }: VirtualTableHeaderProps<M>) {
69
71
 
70
72
  const [onHover, setOnHover] = useState(false);
@@ -136,18 +138,17 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
136
138
  <Badge color="secondary"
137
139
  invisible={!sort}>
138
140
  <IconButton
139
- size={"small"}
141
+ size={headerIconSize}
140
142
  className={onHover || openFilter ? "bg-white dark:bg-surface-950" : undefined}
141
143
  onClick={() => {
142
144
  onColumnSort(column.key as Extract<keyof M, string>);
143
145
  }}
144
146
  >
145
- {!sort &&
146
- <ArrowUpwardIcon />}
147
- {sort === "asc" &&
148
- <ArrowUpwardIcon />}
149
- {sort === "desc" &&
150
- <ArrowUpwardIcon className={"rotate-180"} />}
147
+ <ArrowUpwardIcon size={headerIconSize}
148
+ className={cls(
149
+ "transition-transform duration-200",
150
+ sort === "desc" ? "rotate-180" : "rotate-0"
151
+ )} />
151
152
  </IconButton>
152
153
  </Badge>
153
154
  }
@@ -22,7 +22,8 @@ const SortableColumnHeader = ({
22
22
  onClickResizeColumn,
23
23
  createFilterField,
24
24
  isDragging,
25
- isDraggable
25
+ isDraggable,
26
+ headerIconSize
26
27
  }: {
27
28
  column: VirtualTableColumn;
28
29
  columnIndex: number;
@@ -37,6 +38,7 @@ const SortableColumnHeader = ({
37
38
  createFilterField: any;
38
39
  isDragging: boolean;
39
40
  isDraggable: boolean;
41
+ headerIconSize?: "small" | "smallest";
40
42
  }) => {
41
43
  const [isPressing, setIsPressing] = useState(false);
42
44
 
@@ -103,7 +105,8 @@ const SortableColumnHeader = ({
103
105
  createFilterField={createFilterField}
104
106
  AdditionalHeaderWidget={column.AdditionalHeaderWidget}
105
107
  isDragging={isDragging || isPressing}
106
- isDraggable={isDraggable} />
108
+ isDraggable={isDraggable}
109
+ headerIconSize={headerIconSize} />
107
110
  </div>
108
111
  );
109
112
  };
@@ -123,7 +126,8 @@ export const VirtualTableHeaderRow = ({
123
126
  data,
124
127
  cellRenderer: CellRenderer,
125
128
  rowHeight = 54,
126
- draggingColumnId
129
+ draggingColumnId,
130
+ headerIconSize,
127
131
  }: VirtualTableContextProps<any>) => {
128
132
 
129
133
  const columnRefs = useMemo(() => columns.map(() => createRef<HTMLDivElement>()), [columns.length]);
@@ -234,6 +238,7 @@ export const VirtualTableHeaderRow = ({
234
238
  createFilterField={createFilterField}
235
239
  isDragging={isDragging}
236
240
  isDraggable={isDraggable}
241
+ headerIconSize={headerIconSize}
237
242
  />
238
243
  </ErrorBoundary>
239
244
  );
@@ -168,6 +168,12 @@ export interface VirtualTableProps<T extends Record<string, any>> {
168
168
  */
169
169
  onColumnsOrderChange?: (columns: VirtualTableColumn[]) => void;
170
170
 
171
+ /**
172
+ * Size of icons in column headers (sort, filter).
173
+ * @default "small"
174
+ */
175
+ headerIconSize?: "small" | "smallest";
176
+
171
177
  }
172
178
 
173
179
  export type CellRendererParams<T = any> = {
@@ -206,7 +212,7 @@ export interface VirtualTableColumn<CustomProps = any> {
206
212
  /**
207
213
  * Label displayed in the header
208
214
  */
209
- title?: string;
215
+ title?: React.ReactNode;
210
216
 
211
217
  /**
212
218
  * This column is frozen to the left
@@ -42,4 +42,5 @@ export type VirtualTableContextProps<T extends any> = {
42
42
  AddColumnComponent?: React.ComponentType;
43
43
  onColumnsOrderChange?: (columns: VirtualTableColumn[]) => void;
44
44
  draggingColumnId?: string | null;
45
+ headerIconSize?: "small" | "smallest";
45
46
  };
@@ -83,7 +83,7 @@ export function DrawerNavigationGroup({
83
83
  color={"secondary"}
84
84
  className="font-medium flex-grow line-clamp-1"
85
85
  >
86
- {(group || t("views_group")).toUpperCase()}
86
+ {(group && group !== "__default__" ? group : t("views_group")).toUpperCase()}
87
87
  </Typography>
88
88
  {headerActions && (
89
89
  <div onClick={(e) => e.stopPropagation()}>