@firecms/core 3.3.0-canary.451aa49 → 3.3.0-canary.5906216

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 (196) hide show
  1. package/dist/app/AppBar.d.ts +1 -1
  2. package/dist/app/Drawer.d.ts +1 -1
  3. package/dist/app/useApp.d.ts +1 -0
  4. package/dist/components/AIIcon.d.ts +3 -2
  5. package/dist/components/ArrayContainer.d.ts +3 -3
  6. package/dist/components/CircularProgressCenter.d.ts +2 -1
  7. package/dist/components/ClearFilterSortButton.d.ts +1 -1
  8. package/dist/components/ConfirmationDialog.d.ts +1 -1
  9. package/dist/components/DeleteEntityDialog.d.ts +2 -1
  10. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -1
  12. package/dist/components/EntityCollectionTable/column_utils.d.ts +4 -3
  13. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  14. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
  15. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -1
  16. package/dist/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +1 -1
  17. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +4 -3
  18. package/dist/components/EntityCollectionView/Board.d.ts +2 -1
  19. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +1 -1
  20. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +1 -1
  21. package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +2 -1
  22. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +1 -1
  23. package/dist/components/EntityCollectionView/EntityCard.d.ts +2 -1
  24. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +1 -1
  25. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +1 -1
  26. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -1
  27. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
  28. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +3 -1
  29. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +2 -1
  30. package/dist/components/EntityJsonPreview.d.ts +2 -1
  31. package/dist/components/EntityPreview.d.ts +4 -2
  32. package/dist/components/EntityView.d.ts +2 -1
  33. package/dist/components/ErrorBoundary.d.ts +1 -1
  34. package/dist/components/ErrorTooltip.d.ts +2 -1
  35. package/dist/components/FieldCaption.d.ts +1 -1
  36. package/dist/components/FireCMSLogo.d.ts +1 -1
  37. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  38. package/dist/components/HomePage/FavouritesView.d.ts +1 -1
  39. package/dist/components/HomePage/HomePageDnD.d.ts +4 -4
  40. package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
  41. package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
  42. package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
  43. package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
  44. package/dist/components/LanguageToggle.d.ts +2 -1
  45. package/dist/components/NotFoundPage.d.ts +2 -1
  46. package/dist/components/PropertyCollectionView.d.ts +2 -1
  47. package/dist/components/PropertyIdCopyTooltip.d.ts +2 -2
  48. package/dist/components/ReferenceTable/ReferenceSelectionTable.d.ts +1 -1
  49. package/dist/components/ReferenceWidget.d.ts +2 -1
  50. package/dist/components/SearchIconsView.d.ts +2 -1
  51. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  52. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -1
  53. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  54. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  55. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -1
  56. package/dist/components/UnsavedChangesDialog.d.ts +1 -1
  57. package/dist/components/UserDisplay.d.ts +1 -1
  58. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -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/core/DefaultAppBar.d.ts +1 -1
  66. package/dist/core/DefaultDrawer.d.ts +12 -5
  67. package/dist/core/DrawerNavigationGroup.d.ts +1 -1
  68. package/dist/core/DrawerNavigationItem.d.ts +1 -1
  69. package/dist/core/EntityEditView.d.ts +2 -2
  70. package/dist/core/EntityEditViewFormActions.d.ts +2 -1
  71. package/dist/core/EntitySidePanel.d.ts +2 -1
  72. package/dist/core/FireCMS.d.ts +2 -1
  73. package/dist/core/FireCMSRouter.d.ts +1 -1
  74. package/dist/core/SideDialogs.d.ts +1 -1
  75. package/dist/core/field_configs.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/GeopointFieldBinding.d.ts +5 -0
  97. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
  98. package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
  99. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +2 -1
  100. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
  101. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
  102. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +2 -1
  103. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
  104. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
  105. package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
  106. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -2
  107. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
  108. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
  109. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
  110. package/dist/form/index.d.ts +1 -0
  111. package/dist/i18n/FireCMSi18nProvider.d.ts +2 -2
  112. package/dist/index.es.js +2409 -965
  113. package/dist/index.es.js.map +1 -1
  114. package/dist/index.umd.js +2408 -964
  115. package/dist/index.umd.js.map +1 -1
  116. package/dist/locales/pl.d.ts +2 -0
  117. package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
  118. package/dist/preview/components/AsyncPreviewComponent.d.ts +1 -1
  119. package/dist/preview/components/EmptyValue.d.ts +2 -1
  120. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  121. package/dist/preview/components/ImagePreview.d.ts +2 -1
  122. package/dist/preview/components/ReferencePreview.d.ts +1 -1
  123. package/dist/preview/components/StorageThumbnail.d.ts +1 -1
  124. package/dist/preview/components/UserPreview.d.ts +2 -1
  125. package/dist/preview/index.d.ts +1 -0
  126. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
  127. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
  128. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
  129. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
  130. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
  131. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
  132. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
  133. package/dist/preview/property_previews/GeopointPropertyPreview.d.ts +4 -0
  134. package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
  135. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
  136. package/dist/routes/FireCMSRoute.d.ts +2 -1
  137. package/dist/types/collections.d.ts +17 -0
  138. package/dist/types/translations.d.ts +11 -3
  139. package/dist/util/entities.d.ts +1 -0
  140. package/dist/util/geopoint.d.ts +22 -0
  141. package/dist/util/index.d.ts +1 -0
  142. package/dist/util/navigation_blocking.d.ts +22 -0
  143. package/dist/util/navigation_from_path.d.ts +10 -0
  144. package/dist/util/navigation_utils.d.ts +20 -0
  145. package/dist/util/property_utils.d.ts +1 -1
  146. package/package.json +18 -11
  147. package/src/app/Scaffold.tsx +47 -45
  148. package/src/app/useApp.tsx +1 -0
  149. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +2 -1
  150. package/src/components/EntityCollectionTable/column_utils.tsx +11 -19
  151. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +1 -1
  152. package/src/components/EntityCollectionTable/internal/common.tsx +2 -2
  153. package/src/components/EntityCollectionView/EntityCollectionView.tsx +5 -2
  154. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +4 -1
  155. package/src/components/EntityCollectionView/FiltersDialog.tsx +39 -28
  156. package/src/components/EntityPreview.tsx +41 -40
  157. package/src/components/HomePage/NavigationCardBinding.tsx +6 -3
  158. package/src/components/ReferenceWidget.tsx +1 -1
  159. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +2 -2
  160. package/src/components/VirtualTable/VirtualTable.tsx +19 -8
  161. package/src/components/common/useDataSourceTableController.tsx +66 -10
  162. package/src/core/DefaultDrawer.tsx +151 -65
  163. package/src/core/DrawerNavigationGroup.tsx +27 -29
  164. package/src/core/DrawerNavigationItem.tsx +10 -12
  165. package/src/core/EntityEditView.tsx +57 -32
  166. package/src/core/field_configs.tsx +15 -0
  167. package/src/editor/editor.tsx +20 -1
  168. package/src/editor/markdown.ts +89 -1
  169. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +1 -1
  170. package/src/form/field_bindings/GeopointFieldBinding.tsx +139 -0
  171. package/src/form/index.tsx +1 -0
  172. package/src/hooks/useBuildNavigationController.tsx +5 -1
  173. package/src/i18n/FireCMSi18nProvider.tsx +2 -0
  174. package/src/internal/useBuildSideEntityController.tsx +3 -2
  175. package/src/locales/de.ts +13 -5
  176. package/src/locales/en.ts +13 -5
  177. package/src/locales/es.ts +13 -5
  178. package/src/locales/fr.ts +13 -5
  179. package/src/locales/hi.ts +13 -5
  180. package/src/locales/it.ts +13 -5
  181. package/src/locales/pl.ts +730 -0
  182. package/src/locales/pt.ts +13 -5
  183. package/src/preview/PropertyPreview.tsx +15 -3
  184. package/src/preview/index.ts +1 -0
  185. package/src/preview/property_previews/GeopointPropertyPreview.tsx +23 -0
  186. package/src/routes/FireCMSRoute.tsx +44 -25
  187. package/src/types/collections.ts +18 -0
  188. package/src/types/translations.ts +11 -3
  189. package/src/util/entities.ts +13 -0
  190. package/src/util/geopoint.ts +81 -0
  191. package/src/util/index.ts +1 -0
  192. package/src/util/navigation_blocking.ts +45 -0
  193. package/src/util/navigation_from_path.ts +23 -6
  194. package/src/util/navigation_utils.ts +36 -2
  195. package/src/util/parent_references_from_path.ts +4 -2
  196. package/src/util/resolutions.ts +3 -0
@@ -0,0 +1,2 @@
1
+ import { FireCMSTranslations } from "../types/translations";
2
+ export declare const pl: FireCMSTranslations;
@@ -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;
@@ -4,6 +4,7 @@ export * from "./property_previews/ArrayOfStringsPreview";
4
4
  export * from "./property_previews/ArrayPropertyEnumPreview";
5
5
  export * from "./property_previews/ArrayOfMapsPreview";
6
6
  export * from "./property_previews/NumberPropertyPreview";
7
+ export * from "./property_previews/GeopointPropertyPreview";
7
8
  export * from "./property_previews/StringPropertyPreview";
8
9
  export * from "./property_previews/ArrayOfStorageComponentsPreview";
9
10
  export * from "./property_previews/ArrayOfReferencesPreview";
@@ -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;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { GeoPoint } from "../../types";
3
+ import { PropertyPreviewProps } from "../PropertyPreviewProps";
4
+ export declare function GeopointPropertyPreview({ value, size }: PropertyPreviewProps<GeoPoint>): React.ReactElement;
@@ -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;
@@ -232,6 +232,21 @@ export interface EntityCollection<M extends Record<string, any> = any, USER exte
232
232
  * e.g. `initialFilter: { related_user: ["==", new EntityReference("sdc43dsw2", "users")] }`
233
233
  */
234
234
  initialFilter?: FilterValues<Extract<keyof M, string>>;
235
+ /**
236
+ * Array of property keys that are allowed for filtering. Allowed filters will be displayed in the collection view, table row headers
237
+ * and will be used to filter data.
238
+ *
239
+ * If not specified, all properties that are filterable will be allowed.
240
+ *
241
+ * If you specify this prop, the filters will be displayed in the collection view if they are filterable.
242
+ *
243
+ * If you set it as an empty array, no filters will be displayed.
244
+ *
245
+ * e.g. `allowedFilters: ["name", "category"]`
246
+ *
247
+ * e.g. `allowedFilters: []`
248
+ */
249
+ allowedFilters?: (keyof M)[];
235
250
  /**
236
251
  * Default sort applied to this collection.
237
252
  * When setting this prop, entities will have a default order
@@ -621,6 +636,8 @@ export type EntityTableController<M extends Record<string, any> = any> = {
621
636
  dataLoadingError?: Error;
622
637
  filterValues?: FilterValues<Extract<keyof M, string>>;
623
638
  setFilterValues?: (filterValues: FilterValues<Extract<keyof M, string>>) => void;
639
+ allowedFilters?: (keyof M)[];
640
+ forcedFilters?: (keyof M)[];
624
641
  sortBy?: [Extract<keyof M, string>, "asc" | "desc"];
625
642
  setSortBy?: (sortBy?: [Extract<keyof M, string>, "asc" | "desc"]) => void;
626
643
  searchString?: string;
@@ -412,8 +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
+ firestore_manager: string;
416
+ manage_your_firestore_data: string;
417
417
  build_admin_panel_in_minutes: string;
418
418
  go_live_instantly: string;
419
419
  create_production_ready_back_offices: string;
@@ -481,10 +481,18 @@ export interface FireCMSTranslations {
481
481
  auto_setup_collections_button: string;
482
482
  auto_setup_collections_title: string;
483
483
  auto_setup_collections_desc: string;
484
- this_can_take_a_minute: string;
484
+ setting_up_collections: string;
485
+ setting_up_collection: string;
485
486
  no_collections_found_to_setup: string;
486
487
  collections_have_been_setup: string;
487
488
  error_setting_up_collections: string;
489
+ setup_collections_title: string;
490
+ setup_collections_select_desc: string;
491
+ select_all: string;
492
+ deselect_all: string;
493
+ setup_collections_confirm: string;
494
+ collection_setup_success: string;
495
+ go_to_collection: string;
488
496
  add_your: string;
489
497
  database_collections: string;
490
498
  to_firecms: string;
@@ -25,3 +25,4 @@ export declare function sanitizeData<M extends Record<string, any>>(values: Enti
25
25
  export declare function getReferenceFrom<M extends Record<string, any>>(entity: Entity<M>): EntityReference;
26
26
  export declare function traverseValuesProperties<M extends Record<string, any>>(inputValues: Partial<EntityValues<M>>, properties: ResolvedProperties<M>, operation: (value: any, property: Property) => any): EntityValues<M> | undefined;
27
27
  export declare function traverseValueProperty(inputValue: any, property: Property, operation: (value: any, property: Property) => any): any;
28
+ export declare function isDataTypeFilterable(dataType: DataType, isPartOfArray?: boolean): boolean;
@@ -0,0 +1,22 @@
1
+ import { GeoPoint } from "../types";
2
+ export type GeoPointLike = GeoPoint | {
3
+ latitude?: number;
4
+ longitude?: number;
5
+ lat?: number;
6
+ lng?: number;
7
+ _lat?: number;
8
+ _long?: number;
9
+ } | null | undefined;
10
+ export interface GeoPointCoordinates {
11
+ latitude: number;
12
+ longitude: number;
13
+ }
14
+ export declare function getGeoPointCoordinates(value: GeoPointLike): GeoPointCoordinates | undefined;
15
+ export declare function normalizeGeoPoint(value: GeoPointLike): GeoPoint | undefined;
16
+ export declare function formatGeoPoint(value: GeoPointLike, options?: {
17
+ maximumFractionDigits?: number;
18
+ }): string;
19
+ export declare function parseGeoPoint(input: string): {
20
+ point: GeoPoint | null;
21
+ error?: string;
22
+ };
@@ -12,6 +12,7 @@ export * from "./useDebouncedCallback";
12
12
  export * from "./property_utils";
13
13
  export * from "./resolutions";
14
14
  export * from "./permissions";
15
+ export * from "./geopoint";
15
16
  export * from "./icon_list";
16
17
  export * from "./icon_synonyms";
17
18
  export * from "./icons";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Pure predicate deciding whether an in-progress navigation away from an open
3
+ * entity form should be blocked (to warn about unsaved changes).
4
+ *
5
+ * Extracted from FireCMSRoute so the branching can be unit-tested without
6
+ * mounting the router. This is an internal helper — it is intentionally not
7
+ * re-exported from the package index.
8
+ */
9
+ export interface NavigationBlockLocation {
10
+ pathname: string;
11
+ hash: string;
12
+ }
13
+ export declare function shouldBlockEntityNavigation(params: {
14
+ currentLocation: NavigationBlockLocation;
15
+ nextLocation: NavigationBlockLocation;
16
+ /** Path of the currently open entity (basePath + "/" + entityId). */
17
+ entityPath: string;
18
+ /** Collection path the entity form lives under. */
19
+ basePath: string;
20
+ /** Whether the form currently has unsaved modifications. */
21
+ blocked: boolean;
22
+ }): boolean;
@@ -24,10 +24,20 @@ export interface NavigationViewEntityCustomInternal<M extends Record<string, any
24
24
  entityId: string;
25
25
  view: EntityCustomView<M>;
26
26
  }
27
+ /**
28
+ * Note on encoding: `path` arrives from the URL, so any entity id in it is escaped (see
29
+ * `encodeEntityId`). Two chains are threaded through the recursion:
30
+ *
31
+ * - `currentFullPath` carries RAW ids and feeds the `path` / `fullPath` used to address
32
+ * the datasource.
33
+ * - `currentFullUrlPath` carries ESCAPED ids and feeds `fullPath`, which is handed back
34
+ * to `buildUrlCollectionPath` for breadcrumbs and links.
35
+ */
27
36
  export declare function getNavigationEntriesFromPath(props: {
28
37
  path: string;
29
38
  collections: EntityCollection[] | undefined;
30
39
  currentFullPath?: string;
31
40
  currentFullIdPath?: string;
41
+ currentFullUrlPath?: string;
32
42
  contextEntityViews?: EntityCustomView<any>[];
33
43
  }): NavigationViewInternal[];
@@ -3,6 +3,26 @@ export declare function removeInitialAndTrailingSlashes(s: string): string;
3
3
  export declare function removeInitialSlash(s: string): string;
4
4
  export declare function removeTrailingSlash(s: string): string;
5
5
  export declare function addInitialSlash(s: string): string;
6
+ /**
7
+ * Characters that would otherwise be read as structure once an entity id is joined into a
8
+ * path: "/" separates segments, "?" and "#" start the query and hash in a URL, and "%"
9
+ * has to be escaped first so that no escape sequence we introduce can be misread as one
10
+ * that was already part of the id.
11
+ *
12
+ * Entity ids are escaped ONLY inside URL-facing strings — anything handed to
13
+ * `buildUrlCollectionPath` or `navigate`. Every other path string (the `path` field of a
14
+ * navigation entry, datasource paths, `EntityReference.path`) carries raw ids.
15
+ *
16
+ * @group Hooks and utilities
17
+ */
18
+ export declare function encodeEntityId(entityId: string): string;
19
+ /**
20
+ * Inverse of {@link encodeEntityId}. "%25" is undone last, mirroring the encoder, so an id
21
+ * that legitimately contains the text "%2F" survives the round trip.
22
+ *
23
+ * @group Hooks and utilities
24
+ */
25
+ export declare function decodeEntityId(encodedEntityId: string): string;
6
26
  export declare function getLastSegment(path: string): string;
7
27
  export declare function resolveCollectionPathIds(path: string, allCollections: EntityCollection[]): string;
8
28
  /**
@@ -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.3.0-canary.451aa49",
4
+ "version": "3.3.0-canary.5906216",
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.3.0-canary.451aa49",
57
- "@firecms/ui": "^3.3.0-canary.451aa49",
56
+ "@firecms/formex": "^3.3.0-canary.5906216",
57
+ "@firecms/ui": "^3.3.0-canary.5906216",
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",
@@ -63,9 +63,9 @@
63
63
  "date-fns": "^3.6.0",
64
64
  "fuse.js": "^7.1.0",
65
65
  "history": "^5.3.0",
66
- "i18next": "^23.16.4",
66
+ "i18next": "^26.3.3",
67
67
  "json-logic-js": "^2.0.5",
68
- "markdown-it": "^14.1.0",
68
+ "markdown-it": "^14.2.0",
69
69
  "markdown-it-ins": "^4.0.0",
70
70
  "markdown-it-mark": "^4.0.0",
71
71
  "markdown-it-task-lists": "^2.1.1",
@@ -96,7 +96,7 @@
96
96
  "react-transition-group": "^4.4.5",
97
97
  "react-use-measure": "^2.1.7",
98
98
  "react-window": "^1.8.11",
99
- "vite-plugin-static-copy": "3.1.4",
99
+ "vite-plugin-static-copy": "4.1.1",
100
100
  "yup": "^1.7.1"
101
101
  },
102
102
  "peerDependencies": {
@@ -111,7 +111,7 @@
111
111
  "@testing-library/user-event": "^14.6.1",
112
112
  "@types/jest": "^29.5.14",
113
113
  "@types/json-logic-js": "^2.0.8",
114
- "@types/node": "^20.19.17",
114
+ "@types/node": "^26.1.1",
115
115
  "@types/object-hash": "^3.0.6",
116
116
  "@types/react": "^19.2.3",
117
117
  "@types/react-dom": "^19.2.3",
@@ -123,12 +123,12 @@
123
123
  "eslint-plugin-react-compiler": "^19.1.0-rc.2",
124
124
  "jest": "^29.7.0",
125
125
  "jest-environment-jsdom": "^30.2.0",
126
- "npm-run-all": "^4.1.5",
126
+ "npm-run-all2": "^6.2.6",
127
127
  "react-router": "^6.30.2",
128
128
  "react-router-dom": "^6.30.2",
129
129
  "ts-jest": "^29.4.5",
130
130
  "ts-node": "^10.9.2",
131
- "tsd": "^0.31.2",
131
+ "tsd": "^0.33.0",
132
132
  "typescript": "^5.9.3",
133
133
  "vite": "^7.2.4"
134
134
  },
@@ -136,7 +136,7 @@
136
136
  "dist",
137
137
  "src"
138
138
  ],
139
- "gitHead": "772b4a7f64893038f0cc13669d6bc66ec858fc49",
139
+ "gitHead": "9ecf37abf793bd2f2daaaed6f517ee5ee19b01ae",
140
140
  "publishConfig": {
141
141
  "access": "public"
142
142
  },
@@ -163,6 +163,10 @@
163
163
  "^.+\\.tsx?$": "ts-jest"
164
164
  },
165
165
  "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
166
+ "testPathIgnorePatterns": [
167
+ "/node_modules/",
168
+ "/dist/"
169
+ ],
166
170
  "moduleFileExtensions": [
167
171
  "ts",
168
172
  "tsx",
@@ -172,6 +176,9 @@
172
176
  "node"
173
177
  ],
174
178
  "testEnvironment": "node",
179
+ "setupFiles": [
180
+ "<rootDir>/test/setup_jsdom.js"
181
+ ],
175
182
  "moduleNameMapper": {
176
183
  "\\.(css|less)$": "<rootDir>/test/__mocks__/styleMock.js"
177
184
  }
@@ -1,5 +1,5 @@
1
1
  import React, { PropsWithChildren, useCallback } from "react";
2
- import { ChevronLeftIcon, cls, defaultBorderMixin, IconButton, MenuIcon, Sheet, Tooltip } from "@firecms/ui";
2
+ import { cls, defaultBorderMixin, IconButton, MenuIcon, Sheet } from "@firecms/ui";
3
3
  import equal from "react-fast-compare"
4
4
  import { useLargeLayout } from "../hooks";
5
5
  import { ErrorBoundary } from "../components";
@@ -70,31 +70,51 @@ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
70
70
  const includeDrawer = drawerChildren.length > 0;
71
71
  const largeLayout = useLargeLayout();
72
72
 
73
- const [drawerOpen, setDrawerOpen] = React.useState(false);
73
+ const [drawerOpen, setDrawerOpen] = React.useState(() => {
74
+ try {
75
+ return localStorage.getItem("firecms_drawer_open") === "true";
76
+ } catch {
77
+ return false;
78
+ }
79
+ });
74
80
  const [onHover, setOnHover] = React.useState(false);
75
81
 
76
82
  const setOnHoverTrue = useCallback(() => setOnHover(true), []);
77
- const setOnHoverFalse = useCallback(() => setOnHover(false), []);
83
+ const setOnHoverFalse = useCallback(() => {
84
+ // Don't collapse the drawer while a popover/dropdown is open
85
+ if (typeof document !== "undefined" && document.querySelector("[data-radix-popper-content-wrapper]")) return;
86
+ setOnHover(false);
87
+ }, []);
78
88
 
79
89
  const handleDrawerOpen = useCallback(() => {
80
90
  setDrawerOpen(true);
91
+ try {
92
+ localStorage.setItem("firecms_drawer_open", "true");
93
+ } catch { /* ignore */ }
81
94
  }, []);
82
95
 
83
96
  const handleDrawerClose = useCallback(() => {
84
97
  setDrawerOpen(false);
98
+ try {
99
+ localStorage.setItem("firecms_drawer_open", "false");
100
+ } catch { /* ignore */ }
85
101
  }, []);
86
102
 
87
- const computedDrawerOpen: boolean = drawerOpen || Boolean(largeLayout && autoOpenDrawer && onHover);
103
+ // Pinned-open state only; hover is tracked separately so it can *float*
104
+ // over the content instead of pushing it.
105
+ const computedDrawerOpen: boolean = drawerOpen;
106
+ const computedDrawerHovered: boolean = Boolean(largeLayout && onHover);
88
107
 
89
108
  const hasAppBar = Boolean(appBarChildren.length > 0);
90
109
  return (
91
110
  <AppContext.Provider value={{
92
111
  logo,
93
112
  hasDrawer: includeDrawer,
94
- drawerHovered: onHover,
113
+ drawerHovered: computedDrawerHovered,
95
114
  drawerOpen: computedDrawerOpen,
96
115
  closeDrawer: handleDrawerClose,
97
116
  openDrawer: handleDrawerOpen,
117
+ closeHover: setOnHoverFalse,
98
118
  autoOpenDrawer
99
119
  }}>
100
120
  <div
@@ -116,7 +136,7 @@ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
116
136
  onMouseMove={setOnHoverTrue}
117
137
  onMouseLeave={setOnHoverFalse}
118
138
  open={computedDrawerOpen}
119
- hovered={onHover}
139
+ hovered={computedDrawerHovered}
120
140
  setDrawerOpen={setDrawerOpen}>
121
141
  {includeDrawer && drawerChildren}
122
142
  </DrawerWrapper>
@@ -165,49 +185,30 @@ function DrawerWrapper(props: {
165
185
  }) {
166
186
 
167
187
  const { t } = useTranslation();
168
- const width = !props.displayed ? 0 : (props.open ? DRAWER_WIDTH : 72);
188
+
189
+ // Layout width is the space the drawer occupies in the flex row; the visual
190
+ // width is how wide the drawer actually renders. When hovered (but not
191
+ // pinned open) the layout width stays collapsed while the visual width
192
+ // expands, so the drawer *floats* over the content instead of pushing it.
193
+ const layoutWidth = !props.displayed ? 0 : (props.open ? DRAWER_WIDTH : 72);
194
+ const visualWidth = !props.displayed ? 0 : ((props.open || props.hovered) ? DRAWER_WIDTH : 72);
195
+ const isFloating = props.hovered && !props.open;
196
+
197
+ const transition = "left 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 75ms cubic-bezier(0.4, 0, 0.6, 1) 0ms";
198
+
169
199
  const innerDrawer = <div
170
- className={"relative h-full no-scrollbar overflow-y-auto overflow-x-hidden"}
200
+ className={cls("h-full overflow-hidden", defaultBorderMixin,
201
+ isFloating
202
+ ? "absolute top-0 left-0 bottom-0 z-30 bg-surface-50 dark:bg-surface-900 shadow-lg border-r"
203
+ : "relative bg-surface-50 dark:bg-surface-900")}
171
204
  style={{
172
- width,
173
- transition: "left 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
205
+ width: visualWidth,
206
+ transition
174
207
  }}
175
208
  >
176
-
177
- {!props.open && props.displayed && (
178
- <Tooltip title={t("open_menu")}
179
- side="right"
180
- sideOffset={12}
181
- asChild={true}>
182
- <div
183
- className="ml-2 fixed top-1 left-2 sm:top-2 sm:left-2 !bg-surface-50 dark:!bg-surface-900 rounded-full w-fit z-20">
184
- <IconButton
185
- color="inherit"
186
- aria-label={t("open_menu")}
187
- onClick={() => props.setDrawerOpen(true)}
188
- size="large"
189
- >
190
- <MenuIcon size="small" />
191
- </IconButton>
192
- </div>
193
- </Tooltip>
194
- )}
195
-
196
- <div
197
- className={`z-20 absolute right-0 top-4 ${props.open ? "opacity-100" : "opacity-0 invisible"
198
- } transition-opacity duration-200 ease-in-out`}>
199
- <IconButton
200
- aria-label={t("close_drawer")}
201
- onClick={() => props.setDrawerOpen(false)}
202
- >
203
- <ChevronLeftIcon />
204
- </IconButton>
205
- </div>
206
-
207
209
  <div className={"flex flex-col h-full"}>
208
210
  {props.children}
209
211
  </div>
210
-
211
212
  </div>;
212
213
 
213
214
  const largeLayout = useLargeLayout();
@@ -238,13 +239,14 @@ function DrawerWrapper(props: {
238
239
 
239
240
  return (
240
241
  <div
241
- className="z-20 relative"
242
+ className="z-20 relative flex-shrink-0 overflow-visible"
242
243
  onMouseEnter={props.onMouseEnter}
243
244
  onMouseMove={props.onMouseMove}
244
245
  onMouseLeave={props.onMouseLeave}
245
246
  style={{
246
- width,
247
- transition: "left 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, opacity 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms, width 100ms cubic-bezier(0.4, 0, 0.6, 1) 0ms"
247
+ width: layoutWidth,
248
+ minWidth: layoutWidth,
249
+ transition
248
250
  }}>
249
251
 
250
252
  {innerDrawer}