@firecms/core 3.0.0-beta.7 → 3.0.0-beta.9

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 (216) hide show
  1. package/dist/app/AppBar.d.ts +12 -0
  2. package/dist/app/Drawer.d.ts +17 -0
  3. package/dist/app/Scaffold.d.ts +30 -0
  4. package/dist/app/index.d.ts +4 -0
  5. package/dist/app/useApp.d.ts +16 -0
  6. package/dist/components/ArrayContainer.d.ts +2 -1
  7. package/dist/components/CircularProgressCenter.d.ts +1 -1
  8. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +0 -1
  9. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  10. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
  11. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +1 -1
  12. package/dist/components/EntityPreview.d.ts +1 -1
  13. package/dist/components/ErrorView.d.ts +1 -1
  14. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  15. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  16. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  17. package/dist/components/VirtualTable/VirtualTableProps.d.ts +14 -6
  18. package/dist/components/common/useColumnsIds.d.ts +2 -1
  19. package/dist/components/index.d.ts +2 -1
  20. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +3 -8
  21. package/dist/core/DefaultDrawer.d.ts +19 -0
  22. package/dist/core/DrawerNavigationItem.d.ts +2 -1
  23. package/dist/core/EntityEditView.d.ts +18 -4
  24. package/dist/core/FireCMS.d.ts +1 -1
  25. package/dist/core/NavigationRoutes.d.ts +2 -2
  26. package/dist/core/index.d.ts +2 -2
  27. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  28. package/dist/form/components/FieldHelperText.d.ts +3 -3
  29. package/dist/form/components/FormikArrayContainer.d.ts +2 -1
  30. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  31. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  32. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  33. package/dist/form/components/index.d.ts +1 -0
  34. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  35. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  36. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  37. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  38. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  39. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  40. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  41. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  42. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  43. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  44. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  45. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  46. package/dist/form/index.d.ts +3 -5
  47. package/dist/form/useClearRestoreValue.d.ts +2 -2
  48. package/dist/hooks/useProjectLog.d.ts +2 -2
  49. package/dist/index.d.ts +1 -0
  50. package/dist/index.es.js +14434 -11300
  51. package/dist/index.es.js.map +1 -1
  52. package/dist/index.umd.js +19987 -587
  53. package/dist/index.umd.js.map +1 -1
  54. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  55. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  56. package/dist/preview/components/ReferencePreview.d.ts +1 -1
  57. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  58. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  59. package/dist/types/auth.d.ts +2 -2
  60. package/dist/types/collections.d.ts +26 -3
  61. package/dist/types/datasource.d.ts +53 -30
  62. package/dist/types/entities.d.ts +1 -0
  63. package/dist/types/entity_overrides.d.ts +2 -2
  64. package/dist/types/fields.d.ts +47 -41
  65. package/dist/types/navigation.d.ts +1 -0
  66. package/dist/types/plugins.d.ts +11 -3
  67. package/dist/types/properties.d.ts +25 -20
  68. package/dist/types/side_dialogs_controller.d.ts +10 -0
  69. package/dist/types/storage.d.ts +75 -0
  70. package/dist/util/entities.d.ts +1 -1
  71. package/dist/util/icon_list.d.ts +5 -1
  72. package/dist/util/icons.d.ts +3 -2
  73. package/dist/util/index.d.ts +1 -0
  74. package/dist/util/plurals.d.ts +0 -2
  75. package/dist/util/property_utils.d.ts +1 -1
  76. package/dist/util/resolutions.d.ts +15 -1
  77. package/dist/util/storage.d.ts +23 -2
  78. package/dist/util/useStorageUploadController.d.ts +3 -3
  79. package/package.json +18 -29
  80. package/src/app/AppBar.tsx +18 -0
  81. package/src/app/Drawer.tsx +25 -0
  82. package/src/{core → app}/Scaffold.tsx +71 -122
  83. package/src/app/index.ts +4 -0
  84. package/src/app/useApp.tsx +32 -0
  85. package/src/components/ArrayContainer.tsx +15 -10
  86. package/src/components/CircularProgressCenter.tsx +1 -1
  87. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +11 -18
  88. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +2 -2
  89. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +4 -2
  90. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +21 -14
  91. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +12 -4
  92. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +17 -19
  93. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  94. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +5 -6
  95. package/src/components/EntityCollectionView/EntityCollectionView.tsx +33 -29
  96. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  97. package/src/components/EntityPreview.tsx +30 -31
  98. package/src/components/ErrorView.tsx +1 -1
  99. package/src/components/HomePage/DefaultHomePage.tsx +24 -18
  100. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  101. package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
  102. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  103. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +7 -6
  104. package/src/components/SearchIconsView.tsx +5 -2
  105. package/src/components/SelectableTable/SelectableTable.tsx +2 -4
  106. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +1 -1
  107. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +54 -7
  108. package/src/components/VirtualTable/VirtualTable.tsx +36 -10
  109. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  110. package/src/components/VirtualTable/VirtualTableProps.tsx +17 -8
  111. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -3
  112. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  113. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  114. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  115. package/src/components/common/useColumnsIds.tsx +13 -0
  116. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +12 -12
  117. package/src/components/common/useTableSearchHelper.ts +53 -12
  118. package/src/components/index.tsx +2 -1
  119. package/src/contexts/DialogsProvider.tsx +2 -2
  120. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +28 -30
  121. package/src/core/DefaultDrawer.tsx +183 -0
  122. package/src/core/DrawerNavigationItem.tsx +31 -27
  123. package/src/core/EntityEditView.tsx +712 -145
  124. package/src/core/EntitySidePanel.tsx +0 -1
  125. package/src/core/FireCMS.tsx +2 -2
  126. package/src/core/NavigationRoutes.tsx +4 -4
  127. package/src/core/SideDialogs.tsx +1 -0
  128. package/src/core/field_configs.tsx +5 -5
  129. package/src/core/index.tsx +2 -2
  130. package/src/form/PropertyFieldBinding.tsx +53 -19
  131. package/src/form/components/CustomIdField.tsx +4 -2
  132. package/src/form/components/FieldHelperText.tsx +4 -4
  133. package/src/form/components/FormikArrayContainer.tsx +4 -1
  134. package/src/form/components/LabelWithIcon.tsx +27 -19
  135. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  136. package/src/form/components/StorageItemPreview.tsx +20 -10
  137. package/src/form/components/StorageUploadProgress.tsx +0 -1
  138. package/src/form/components/index.tsx +1 -0
  139. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +26 -15
  140. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +28 -25
  141. package/src/form/field_bindings/BlockFieldBinding.tsx +13 -11
  142. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  143. package/src/form/field_bindings/KeyValueFieldBinding.tsx +48 -42
  144. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  145. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  146. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  147. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +9 -14
  148. package/src/form/field_bindings/ReferenceFieldBinding.tsx +27 -18
  149. package/src/form/field_bindings/RepeatFieldBinding.tsx +32 -19
  150. package/src/form/field_bindings/SelectFieldBinding.tsx +17 -10
  151. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +33 -43
  152. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  153. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  154. package/src/form/index.tsx +4 -9
  155. package/src/form/useClearRestoreValue.tsx +2 -2
  156. package/src/form/validation.ts +1 -17
  157. package/src/hooks/data/delete.ts +2 -1
  158. package/src/hooks/data/save.ts +5 -2
  159. package/src/hooks/data/useDataSource.tsx +11 -3
  160. package/src/hooks/useBuildNavigationController.tsx +10 -3
  161. package/src/hooks/useProjectLog.tsx +18 -7
  162. package/src/index.ts +1 -0
  163. package/src/internal/useBuildDataSource.ts +69 -74
  164. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  165. package/src/internal/useBuildSideEntityController.tsx +17 -4
  166. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  167. package/src/preview/PropertyPreview.tsx +7 -4
  168. package/src/preview/PropertyPreviewProps.tsx +7 -1
  169. package/src/preview/components/BooleanPreview.tsx +1 -1
  170. package/src/preview/components/EnumValuesChip.tsx +1 -1
  171. package/src/preview/components/ImagePreview.tsx +24 -34
  172. package/src/preview/components/ReferencePreview.tsx +2 -12
  173. package/src/preview/components/StorageThumbnail.tsx +5 -1
  174. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  175. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -1
  176. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +1 -1
  177. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
  178. package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -2
  179. package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
  180. package/src/preview/property_previews/MapPropertyPreview.tsx +1 -1
  181. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  182. package/src/preview/property_previews/StringPropertyPreview.tsx +2 -2
  183. package/src/preview/util.ts +2 -2
  184. package/src/types/auth.tsx +2 -2
  185. package/src/types/collections.ts +29 -4
  186. package/src/types/customization_controller.tsx +0 -1
  187. package/src/types/datasource.ts +62 -43
  188. package/src/types/entities.ts +2 -0
  189. package/src/types/entity_overrides.tsx +2 -2
  190. package/src/types/fields.tsx +51 -45
  191. package/src/types/navigation.ts +1 -0
  192. package/src/types/plugins.tsx +12 -3
  193. package/src/types/properties.ts +25 -19
  194. package/src/types/side_dialogs_controller.tsx +13 -0
  195. package/src/types/storage.ts +82 -0
  196. package/src/util/entities.ts +5 -4
  197. package/src/util/icon_list.ts +14 -9
  198. package/src/util/icons.tsx +8 -2
  199. package/src/util/index.ts +1 -0
  200. package/src/util/objects.ts +17 -7
  201. package/src/util/permissions.ts +1 -0
  202. package/src/util/plurals.ts +0 -2
  203. package/src/util/property_utils.tsx +1 -1
  204. package/src/util/references.ts +3 -0
  205. package/src/util/resolutions.ts +43 -11
  206. package/src/util/storage.ts +79 -21
  207. package/src/util/useStorageUploadController.tsx +33 -7
  208. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  209. package/dist/core/Drawer.d.ts +0 -16
  210. package/dist/core/Scaffold.d.ts +0 -51
  211. package/dist/form/EntityForm.d.ts +0 -77
  212. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  213. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -27
  214. package/src/core/Drawer.tsx +0 -139
  215. package/src/form/EntityForm.tsx +0 -736
  216. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
@@ -8,7 +8,7 @@ import { ChipColorKey, ChipColorScheme } from "@firecms/ui";
8
8
  /**
9
9
  * @group Entity properties
10
10
  */
11
- export type DataType<T extends CMSType = CMSType> = T extends string ? "string" : T extends number ? "number" : T extends boolean ? "boolean" : T extends Date ? "date" : T extends GeoPoint ? "geopoint" : T extends Vector ? "vector" : T extends EntityReference ? "reference" : T extends Array<CMSType> ? "array" : T extends Record<string, any> ? "map" : never;
11
+ export type DataType<T extends CMSType = CMSType> = T extends string ? "string" : T extends number ? "number" : T extends boolean ? "boolean" : T extends Date ? "date" : T extends GeoPoint ? "geopoint" : T extends Vector ? "vector" : T extends EntityReference ? "reference" : T extends Array<any> ? "array" : T extends Record<string, any> ? "map" : never;
12
12
  /**
13
13
  * @group Entity properties
14
14
  */
@@ -20,7 +20,7 @@ export type AnyProperty = StringProperty | NumberProperty | BooleanProperty | Da
20
20
  /**
21
21
  * @group Entity properties
22
22
  */
23
- export type Property<T extends CMSType = CMSType> = T extends string ? StringProperty : T extends number ? NumberProperty : T extends boolean ? BooleanProperty : T extends Date ? DateProperty : T extends GeoPoint ? GeopointProperty : T extends EntityReference ? ReferenceProperty : T extends Array<CMSType> ? ArrayProperty<T> : T extends Record<string, any> ? MapProperty<T> : AnyProperty;
23
+ export type Property<T extends CMSType = any> = T extends string ? StringProperty : T extends number ? NumberProperty : T extends boolean ? BooleanProperty : T extends Date ? DateProperty : T extends GeoPoint ? GeopointProperty : T extends EntityReference ? ReferenceProperty : T extends Array<CMSType> ? ArrayProperty<T> : T extends Record<string, any> ? MapProperty<T> : AnyProperty;
24
24
  /**
25
25
  * Interface including all common properties of a CMS property
26
26
  * @group Entity properties
@@ -97,7 +97,7 @@ export interface BaseProperty<T extends CMSType, CustomProps = any> {
97
97
  /**
98
98
  * This value will be set by default for new entities.
99
99
  */
100
- defaultValue?: T;
100
+ defaultValue?: T | null;
101
101
  /**
102
102
  * Should this property be editable. If set to true, the user will be able to modify the property and
103
103
  * save the new config. The saved config will then become the source of truth.
@@ -207,7 +207,7 @@ export type PropertyBuilderProps<M extends Record<string, any> = any> = {
207
207
  * current value of the property, as well as the path and entity ID.
208
208
  * @group Entity properties
209
209
  */
210
- export type PropertyBuilder<T extends CMSType = any, M extends Record<string, any> = any> = ({ values, previousValues, propertyValue, path, entityId }: PropertyBuilderProps<M>) => Property<T> | null;
210
+ export type PropertyBuilder<T extends CMSType = any, M extends Record<string, any> = any> = ({ values, previousValues, propertyValue, index, path, entityId }: PropertyBuilderProps<M>) => Property<T> | null;
211
211
  /**
212
212
  * @group Entity properties
213
213
  */
@@ -306,7 +306,7 @@ export interface StringProperty extends BaseProperty<string> {
306
306
  /**
307
307
  * @group Entity properties
308
308
  */
309
- export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = CMSType> extends BaseProperty<T> {
309
+ export interface ArrayProperty<T extends ArrayT[] = any[], ArrayT extends CMSType = any> extends BaseProperty<T> {
310
310
  dataType: "array";
311
311
  /**
312
312
  * The property of this array.
@@ -583,13 +583,13 @@ export type StorageConfig = {
583
583
  * You can use this prop to customize the uploaded filename.
584
584
  * You can use a function as a callback or a string where you
585
585
  * specify some placeholders that get replaced with the corresponding values.
586
- * - {file} - Full file name
587
- * - {file.name} - Name of the file without extension
588
- * - {file.ext} - Extension of the file
589
- * - {rand} - Random value used to avoid name collisions
590
- * - {entityId} - ID of the entity
591
- * - {propertyKey} - ID of this property
592
- * - {path} - Path of this entity
586
+ * - `{file}` - Full file name
587
+ * - `{file.name}` - Name of the file without extension
588
+ * - `{file.ext}` - Extension of the file
589
+ * - `{rand}` - Random value used to avoid name collisions
590
+ * - `{entityId}` - ID of the entity
591
+ * - `{propertyKey}` - ID of this property
592
+ * - `{path}` - Path of this entity
593
593
  *
594
594
  * @param context
595
595
  */
@@ -599,13 +599,13 @@ export type StorageConfig = {
599
599
  *
600
600
  * You can use a function as a callback or a string where you
601
601
  * specify some placeholders that get replaced with the corresponding values.
602
- * - {file} - Full file name
603
- * - {file.name} - Name of the file without extension
604
- * - {file.ext} - Extension of the file
605
- * - {rand} - Random value used to avoid name collisions
606
- * - {entityId} - ID of the entity
607
- * - {propertyKey} - ID of this property
608
- * - {path} - Path of this entity
602
+ * - `{file}` - Full file name
603
+ * - `{file.name}` - Name of the file without extension
604
+ * - `{file.ext}` - Extension of the file
605
+ * - `{rand}` - Random value used to avoid name collisions
606
+ * - `{entityId}` - ID of the entity
607
+ * - `{propertyKey}` - ID of this property
608
+ * - `{path}` - Path of this entity
609
609
  */
610
610
  storagePath: string | ((context: UploadedFileContext) => string);
611
611
  /**
@@ -628,6 +628,11 @@ export type StorageConfig = {
628
628
  * after it has been resolved.
629
629
  */
630
630
  postProcess?: (pathOrUrl: string) => Promise<string>;
631
+ /**
632
+ * You can use this prop in order to provide a custom preview URL.
633
+ * Useful when the file's path is different from the original field value
634
+ */
635
+ previewUrl?: (fileName: string) => string;
631
636
  };
632
637
  /**
633
638
  * @group Entity properties
@@ -652,7 +657,7 @@ export interface UploadedFileContext {
652
657
  /**
653
658
  * Entity path. E.g. `products/PID/locales`
654
659
  */
655
- path: string;
660
+ path?: string;
656
661
  /**
657
662
  * Values of the current entity
658
663
  */
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  /**
2
3
  * Controller to open the side dialog
3
4
  * @group Hooks and utilities
@@ -11,6 +12,11 @@ export interface SideDialogsController {
11
12
  * List of side panels currently open
12
13
  */
13
14
  sidePanels: SideDialogPanelProps[];
15
+ /**
16
+ * Override the current side panels
17
+ * @param panels
18
+ */
19
+ setSidePanels: (panels: SideDialogPanelProps[]) => void;
14
20
  /**
15
21
  * Open one or multiple side panels
16
22
  * @param props
@@ -54,4 +60,8 @@ export interface SideDialogPanelProps {
54
60
  * Callback when the panel is closed
55
61
  */
56
62
  onClose?: () => void;
63
+ /**
64
+ * Use this prop to store additional data in the panel
65
+ */
66
+ additional?: any;
57
67
  }
@@ -87,4 +87,79 @@ export interface StorageSource {
87
87
  * @param bucket
88
88
  */
89
89
  getFile: (path: string, bucket?: string) => Promise<File | null>;
90
+ /**
91
+ * Delete a file.
92
+ * @param path
93
+ * @param bucket
94
+ */
95
+ deleteFile: (path: string, bucket?: string) => Promise<void>;
96
+ /**
97
+ * List the contents of a path.
98
+ * @param path
99
+ * @param options
100
+ */
101
+ list: (path: string, options?: {
102
+ bucket?: string;
103
+ maxResults?: number;
104
+ pageToken?: string;
105
+ }) => Promise<StorageListResult>;
106
+ }
107
+ /**
108
+ * Result returned by list().
109
+ * @public
110
+ */
111
+ export declare interface StorageListResult {
112
+ /**
113
+ * References to prefixes (sub-folders). You can call list() on them to
114
+ * get its contents.
115
+ *
116
+ * Folders are implicit based on '/' in the object paths.
117
+ * For example, if a bucket has two objects '/a/b/1' and '/a/b/2', list('/a')
118
+ * will return '/a/b' as a prefix.
119
+ */
120
+ prefixes: StorageReference[];
121
+ /**
122
+ * Objects in this directory.
123
+ * You can call getMetadata() and getDownloadUrl() on them.
124
+ */
125
+ items: StorageReference[];
126
+ /**
127
+ * If set, there might be more results for this list. Use this token to resume the list.
128
+ */
129
+ nextPageToken?: string;
130
+ }
131
+ /**
132
+ * Represents a reference to a Google Cloud Storage object. Developers can
133
+ * upload, download, and delete objects, as well as get/set object metadata.
134
+ * @public
135
+ */
136
+ export declare interface StorageReference {
137
+ /**
138
+ * Returns a gs:// URL for this object in the form
139
+ * `gs://<bucket>/<path>/<to>/<object>`
140
+ * @returns The gs:// URL.
141
+ */
142
+ toString(): string;
143
+ /**
144
+ * A reference to the root of this object's bucket.
145
+ */
146
+ root: StorageReference;
147
+ /**
148
+ * The name of the bucket containing this reference's object.
149
+ */
150
+ bucket: string;
151
+ /**
152
+ * The full path of this object.
153
+ */
154
+ fullPath: string;
155
+ /**
156
+ * The short name of this object, which is the last component of the full path.
157
+ * For example, if fullPath is 'full/path/image.png', name is 'image.png'.
158
+ */
159
+ name: string;
160
+ /**
161
+ * A reference pointing to the parent location of this reference, or null if
162
+ * this reference is the root.
163
+ */
164
+ parent: StorageReference | null;
90
165
  }
@@ -1,5 +1,5 @@
1
1
  import { CMSType, DataType, Entity, EntityReference, EntityStatus, EntityValues, PropertiesOrBuilders, Property, PropertyBuilder, PropertyOrBuilder, ResolvedProperties, ResolvedProperty } from "../types";
2
- export declare function isReadOnly(property: Property | ResolvedProperty): boolean;
2
+ export declare function isReadOnly(property: Property<any> | ResolvedProperty<any>): boolean;
3
3
  export declare function isHidden(property: Property | ResolvedProperty): boolean;
4
4
  export declare function isPropertyBuilder<T extends CMSType, M extends Record<string, any>>(propertyOrBuilder?: PropertyOrBuilder<T, M> | Property<T> | ResolvedProperty<T>): propertyOrBuilder is PropertyBuilder<T, M>;
5
5
  export declare function getDefaultValuesFor<M extends Record<string, any>>(properties: PropertiesOrBuilders<M> | ResolvedProperties<M>): Partial<EntityValues<M>>;
@@ -1 +1,5 @@
1
- export declare const iconsSearch: any;
1
+ import Fuse from "fuse.js";
2
+ export declare const iconsSearch: Fuse<{
3
+ key: string;
4
+ synonyms: any;
5
+ }>;
@@ -8,6 +8,7 @@ export type IconViewProps = {
8
8
  icon?: string;
9
9
  };
10
10
  export declare const IconForView: React.NamedExoticComponent<{
11
- collectionOrView?: IconViewProps | undefined;
12
- className?: string | undefined;
11
+ collectionOrView?: IconViewProps;
12
+ className?: string;
13
+ size?: "smallest" | "small" | "medium" | "large" | number;
13
14
  }>;
@@ -21,3 +21,4 @@ export * from "./make_properties_editable";
21
21
  export * from "./join_collections";
22
22
  export * from "./builders";
23
23
  export * from "./useTraceUpdate";
24
+ export * from "./storage";
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Returns the plural of an English word.
3
3
  *
4
- * @export
5
4
  * @param {string} word
6
5
  * @param {number} [amount]
7
6
  * @returns {string}
@@ -10,7 +9,6 @@ export declare function plural(word: string, amount?: number): string;
10
9
  /**
11
10
  * Returns the singular of an English word.
12
11
  *
13
- * @export
14
12
  * @param {string} word
15
13
  * @param {number} [amount]
16
14
  * @returns {string}
@@ -3,7 +3,7 @@ import { EntityCollection, PropertiesOrBuilders, PropertyConfig, PropertyOrBuild
3
3
  export declare function isReferenceProperty(propertyOrBuilder: PropertyOrBuilder, fields: Record<string, PropertyConfig>): boolean | null;
4
4
  export declare function getIdIcon(size: "small" | "medium" | "large"): React.ReactNode;
5
5
  export declare function getIconForWidget(widget: PropertyConfig | undefined, size: "small" | "medium" | "large"): import("react/jsx-runtime").JSX.Element;
6
- export declare function getIconForProperty(property: PropertyOrBuilder | ResolvedProperty, size?: "small" | "medium" | "large", fields?: Record<string, PropertyConfig>): React.ReactNode;
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
  /**
9
9
  * Get a property in a property tree from a path like
@@ -26,6 +26,19 @@ export declare function resolveProperty<T extends CMSType = CMSType, M extends R
26
26
  fields?: Record<string, PropertyConfig<any>>;
27
27
  ignoreMissingFields?: boolean;
28
28
  }): ResolvedProperty<T> | null;
29
+ export declare function getArrayResolvedProperties<M>({ propertyKey, propertyValue, property, ...props }: {
30
+ propertyValue: any;
31
+ propertyKey?: string;
32
+ property: ArrayProperty<any> | ResolvedArrayProperty<any>;
33
+ ignoreMissingFields: boolean;
34
+ values?: Partial<M>;
35
+ previousValues?: Partial<M>;
36
+ path?: string;
37
+ entityId?: string;
38
+ index?: number;
39
+ fromBuilder?: boolean;
40
+ fields?: Record<string, PropertyConfig>;
41
+ }): ResolvedProperty[];
29
42
  export declare function resolveArrayProperty<T extends any[], M>({ propertyKey, property, ignoreMissingFields, ...props }: {
30
43
  propertyKey?: string;
31
44
  property: ArrayProperty<T> | ResolvedArrayProperty<T>;
@@ -43,7 +56,8 @@ export declare function resolveArrayProperty<T extends any[], M>({ propertyKey,
43
56
  * @param properties
44
57
  * @param value
45
58
  */
46
- export declare function resolveProperties<M extends Record<string, any>>({ properties, ignoreMissingFields, ...props }: {
59
+ export declare function resolveProperties<M extends Record<string, any>>({ propertyKey, properties, ignoreMissingFields, ...props }: {
60
+ propertyKey?: string;
47
61
  properties: PropertiesOrBuilders<M>;
48
62
  values?: Partial<M>;
49
63
  previousValues?: Partial<M>;
@@ -1,3 +1,24 @@
1
1
  import { EntityValues, ResolvedArrayProperty, ResolvedStringProperty, StorageConfig, UploadedFileContext } from "../types";
2
- export declare function resolveFilenameString<M extends object>(input: string | ((context: UploadedFileContext) => Promise<string> | string), storage: StorageConfig, values: EntityValues<M>, entityId: string, path: string, property: ResolvedStringProperty | ResolvedArrayProperty<string[]>, file: File, propertyKey: string): Promise<string>;
3
- export declare function resolveStoragePathString<M extends object>(input: string | ((context: UploadedFileContext) => string), storage: StorageConfig, values: EntityValues<M>, entityId: string, path: string, property: ResolvedStringProperty | ResolvedArrayProperty<string[]>, file: File, propertyKey: string): string;
2
+ interface ResolveFilenameStringParams<M extends object> {
3
+ input: string | ((context: UploadedFileContext) => (Promise<string> | string));
4
+ storage: StorageConfig;
5
+ values: EntityValues<M>;
6
+ entityId: string;
7
+ path?: string;
8
+ property: ResolvedStringProperty | ResolvedArrayProperty<string[]>;
9
+ file: File;
10
+ propertyKey: string;
11
+ }
12
+ export declare function resolveStorageFilenameString<M extends object>({ input, storage, values, entityId, path, property, file, propertyKey }: ResolveFilenameStringParams<M>): Promise<string>;
13
+ interface ResolveStoragePathStringParams<M extends object> {
14
+ input: string | ((context: UploadedFileContext) => string);
15
+ storage: StorageConfig;
16
+ values: EntityValues<M>;
17
+ entityId: string;
18
+ path?: string;
19
+ property: ResolvedStringProperty | ResolvedArrayProperty<string[]>;
20
+ file: File;
21
+ propertyKey: string;
22
+ }
23
+ export declare function resolveStoragePathString<M extends object>({ input, storage, values, entityId, path, property, file, propertyKey }: ResolveStoragePathStringParams<M>): string;
24
+ export {};
@@ -1,4 +1,4 @@
1
- import { EntityValues, ResolvedArrayProperty, ResolvedStringProperty, StorageConfig, StorageSource } from "../types";
1
+ import { ArrayProperty, EntityValues, ResolvedArrayProperty, ResolvedStringProperty, StorageConfig, StorageSource, StringProperty } from "../types";
2
2
  import { PreviewSize } from "../preview";
3
3
  /**
4
4
  * Internal representation of an item in the storage
@@ -18,9 +18,9 @@ export declare function useStorageUploadController<M extends object>({ entityId,
18
18
  entityId: string;
19
19
  entityValues: EntityValues<M>;
20
20
  value: string | string[] | null;
21
- path: string;
21
+ path?: string;
22
22
  propertyKey: string;
23
- property: ResolvedStringProperty | ResolvedArrayProperty<string[]>;
23
+ property: StringProperty | ArrayProperty<string[]> | ResolvedStringProperty | ResolvedArrayProperty<string[]>;
24
24
  storageSource: StorageSource;
25
25
  disabled: boolean;
26
26
  onChange: (value: string | string[] | null) => void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/core",
3
3
  "type": "module",
4
- "version": "3.0.0-beta.7",
4
+ "version": "3.0.0-beta.9",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -46,72 +46,61 @@
46
46
  "./package.json": "./package.json"
47
47
  },
48
48
  "dependencies": {
49
- "@firecms/formex": "^3.0.0-beta.7",
50
- "@firecms/ui": "^3.0.0-beta.7",
51
- "@fontsource/jetbrains-mono": "^5.0.20",
49
+ "@firecms/editor": "^3.0.0-beta.9",
50
+ "@firecms/formex": "^3.0.0-beta.9",
51
+ "@firecms/ui": "^3.0.0-beta.9",
52
52
  "@hello-pangea/dnd": "^16.6.0",
53
- "@radix-ui/react-portal": "^1.0.4",
53
+ "@radix-ui/react-portal": "^1.1.1",
54
54
  "clsx": "^2.1.1",
55
55
  "date-fns": "^3.6.0",
56
+ "fuse.js": "^7.0.0",
56
57
  "history": "^5.3.0",
57
- "js-search": "^2.0.1",
58
58
  "markdown-it": "^14.1.0",
59
59
  "notistack": "^3.0.1",
60
60
  "object-hash": "^3.0.0",
61
61
  "react-dropzone": "^14.2.3",
62
62
  "react-fast-compare": "^3.2.2",
63
63
  "react-image-file-resizer": "^0.4.8",
64
- "react-markdown-editor-lite": "^1.3.4",
65
64
  "react-transition-group": "^4.4.5",
66
65
  "react-use-measure": "^2.1.1",
67
66
  "react-window": "^1.8.10",
68
- "typeface-rubik": "^1.1.13",
69
67
  "yup": "^0.32.11"
70
68
  },
71
69
  "peerDependencies": {
72
70
  "firebase": "^10.5.2",
73
71
  "react": "^18.3.1",
74
72
  "react-dom": "^18.3.1",
75
- "react-router": "^6.22.0",
76
- "react-router-dom": "^6.22.0"
73
+ "react-router": "^6.25.1",
74
+ "react-router-dom": "^6.25.1"
77
75
  },
78
76
  "devDependencies": {
79
77
  "@jest/globals": "^29.7.0",
80
78
  "@testing-library/react": "^15.0.7",
81
79
  "@testing-library/user-event": "^14.5.2",
82
80
  "@types/jest": "^29.5.12",
83
- "@types/node": "^20.12.13",
81
+ "@types/node": "^20.14.12",
84
82
  "@types/object-hash": "^3.0.6",
85
83
  "@types/react": "^18.3.3",
86
84
  "@types/react-dom": "^18.3.0",
87
85
  "@types/react-measure": "^2.0.12",
88
- "@typescript-eslint/eslint-plugin": "^7.11.0",
89
- "@typescript-eslint/parser": "^7.11.0",
90
- "@vitejs/plugin-react": "^4.3.0",
86
+ "@vitejs/plugin-react": "^4.3.1",
91
87
  "cross-env": "^7.0.3",
92
- "eslint": "^8.57.0",
93
- "eslint-config-standard": "^17.1.0",
94
- "eslint-plugin-import": "^2.29.1",
95
- "eslint-plugin-n": "^16.6.2",
96
- "eslint-plugin-promise": "^6.2.0",
97
- "eslint-plugin-react": "^7.34.2",
98
- "eslint-plugin-react-hooks": "^4.6.2",
99
- "firebase": "^10.12.2",
88
+ "firebase": "^10.12.4",
100
89
  "jest": "^29.7.0",
101
90
  "npm-run-all": "^4.1.5",
102
- "react-router": "^6.23.1",
103
- "react-router-dom": "^6.23.1",
104
- "ts-jest": "^29.1.4",
91
+ "react-router": "^6.25.1",
92
+ "react-router-dom": "^6.25.1",
93
+ "ts-jest": "^29.2.3",
105
94
  "ts-node": "^10.9.2",
106
- "tsd": "^0.31.0",
107
- "typescript": "^5.4.5",
108
- "vite": "^5.2.12"
95
+ "tsd": "^0.31.1",
96
+ "typescript": "^5.5.4",
97
+ "vite": "^5.3.4"
109
98
  },
110
99
  "files": [
111
100
  "dist",
112
101
  "src"
113
102
  ],
114
- "gitHead": "b1f5dbd89d66bd75e8d214a4a6c40e07e371a1d1",
103
+ "gitHead": "a2fffa74049d185e674aae9f70b462f011edd1c2",
115
104
  "publishConfig": {
116
105
  "access": "public"
117
106
  },
@@ -0,0 +1,18 @@
1
+ import { DefaultAppBar, DefaultAppBarProps } from "../core/DefaultAppBar";
2
+
3
+ /**
4
+ * This component renders the main app bar of FireCMS.
5
+ */
6
+ export function AppBar({
7
+ children,
8
+ ...props
9
+ }: {
10
+ children?: React.ReactNode,
11
+ className?: string,
12
+ style?: React.CSSProperties
13
+ } & DefaultAppBarProps) {
14
+ const usedChildren = children ?? <DefaultAppBar {...props}/>;
15
+ return <>{usedChildren}</>;
16
+ }
17
+
18
+ AppBar.componentType = "AppBar";
@@ -0,0 +1,25 @@
1
+ import { DefaultDrawer } from "../core";
2
+
3
+ /**
4
+ * This component is in charge of rendering the drawer.
5
+ * If you add this component under your {@link Scaffold}, it will be rendered
6
+ * as a drawer, and the open and close functionality will be handled automatically.
7
+ * If you want to customise the drawer, you can create your own component and pass it as a child.
8
+ * For custom drawers, you can use the {@link useApp} to open and close the drawer.
9
+ *
10
+
11
+ */
12
+ export function Drawer({
13
+ children,
14
+ className,
15
+ style
16
+ }: {
17
+ children?: React.ReactNode,
18
+ className?: string,
19
+ style?: React.CSSProperties
20
+ }) {
21
+ const usedChildren = children ?? <DefaultDrawer className={className} style={style}/>;
22
+ return <>{usedChildren}</>;
23
+ }
24
+
25
+ Drawer.componentType = "Drawer";