@firecms/core 3.0.0-canary.14 → 3.0.0-canary.141

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 (301) hide show
  1. package/README.md +3 -3
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +16 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/ArrayContainer.d.ts +16 -5
  8. package/dist/components/CircularProgressCenter.d.ts +1 -1
  9. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  10. package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
  11. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  12. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  13. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  14. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
  15. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  16. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
  17. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  18. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  19. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +7 -4
  20. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -2
  21. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  22. package/dist/components/EntityCollectionView/utils.d.ts +3 -0
  23. package/dist/components/EntityPreview.d.ts +7 -6
  24. package/dist/components/ErrorView.d.ts +1 -1
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
  27. package/dist/components/PropertyConfigBadge.d.ts +2 -1
  28. package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
  29. package/dist/components/ReferenceWidget.d.ts +3 -1
  30. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  31. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  32. package/dist/components/VirtualTable/VirtualTableProps.d.ts +15 -12
  33. package/dist/components/VirtualTable/types.d.ts +3 -3
  34. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  35. package/dist/components/common/index.d.ts +1 -0
  36. package/dist/components/common/table_height.d.ts +5 -0
  37. package/dist/components/common/types.d.ts +4 -6
  38. package/dist/components/common/useColumnsIds.d.ts +2 -1
  39. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  40. package/dist/components/index.d.ts +4 -2
  41. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  42. package/dist/core/DefaultDrawer.d.ts +19 -0
  43. package/dist/core/DrawerNavigationItem.d.ts +10 -0
  44. package/dist/core/EntityEditView.d.ts +18 -4
  45. package/dist/core/FireCMS.d.ts +1 -1
  46. package/dist/core/NavigationRoutes.d.ts +3 -3
  47. package/dist/core/index.d.ts +3 -4
  48. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  49. package/dist/form/components/ErrorFocus.d.ts +1 -1
  50. package/dist/form/components/FieldHelperText.d.ts +3 -3
  51. package/dist/form/components/LabelWithIcon.d.ts +1 -1
  52. package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
  53. package/dist/form/components/StorageItemPreview.d.ts +4 -4
  54. package/dist/form/components/index.d.ts +1 -1
  55. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
  56. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
  57. package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  60. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
  61. package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
  62. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
  63. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -2
  64. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
  65. package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
  66. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -5
  67. package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
  68. package/dist/form/index.d.ts +3 -5
  69. package/dist/form/useClearRestoreValue.d.ts +2 -2
  70. package/dist/hooks/data/save.d.ts +1 -2
  71. package/dist/hooks/index.d.ts +1 -0
  72. package/dist/hooks/useBuildNavigationController.d.ts +1 -2
  73. package/dist/hooks/useProjectLog.d.ts +8 -2
  74. package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
  75. package/dist/index.d.ts +1 -0
  76. package/dist/index.es.js +16760 -13321
  77. package/dist/index.es.js.map +1 -1
  78. package/dist/index.umd.js +20120 -587
  79. package/dist/index.umd.js.map +1 -1
  80. package/dist/internal/useBuildDataSource.d.ts +1 -16
  81. package/dist/preview/PropertyPreviewProps.d.ts +6 -1
  82. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  83. package/dist/preview/components/ReferencePreview.d.ts +3 -2
  84. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  85. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  86. package/dist/types/auth.d.ts +3 -3
  87. package/dist/types/collections.d.ts +41 -6
  88. package/dist/types/datasource.d.ts +55 -35
  89. package/dist/types/entities.d.ts +6 -1
  90. package/dist/types/entity_actions.d.ts +14 -0
  91. package/dist/types/entity_overrides.d.ts +2 -2
  92. package/dist/types/fields.d.ts +63 -41
  93. package/dist/types/firecms.d.ts +4 -0
  94. package/dist/types/index.d.ts +0 -1
  95. package/dist/types/navigation.d.ts +6 -5
  96. package/dist/types/plugins.d.ts +14 -4
  97. package/dist/types/properties.d.ts +34 -21
  98. package/dist/types/property_config.d.ts +0 -2
  99. package/dist/types/side_dialogs_controller.d.ts +10 -0
  100. package/dist/types/storage.d.ts +86 -3
  101. package/dist/util/entities.d.ts +2 -2
  102. package/dist/util/icon_list.d.ts +5 -1
  103. package/dist/util/icon_synonyms.d.ts +1 -97
  104. package/dist/util/icons.d.ts +3 -2
  105. package/dist/util/index.d.ts +1 -0
  106. package/dist/util/navigation_utils.d.ts +2 -2
  107. package/dist/util/objects.d.ts +2 -1
  108. package/dist/util/plurals.d.ts +0 -2
  109. package/dist/util/property_utils.d.ts +3 -3
  110. package/dist/util/resolutions.d.ts +30 -16
  111. package/dist/util/storage.d.ts +23 -2
  112. package/dist/util/useStorageUploadController.d.ts +3 -3
  113. package/package.json +128 -119
  114. package/src/app/AppBar.tsx +18 -0
  115. package/src/app/Drawer.tsx +24 -0
  116. package/src/app/Scaffold.tsx +243 -0
  117. package/src/app/index.ts +4 -0
  118. package/src/app/useApp.tsx +32 -0
  119. package/src/components/ArrayContainer.tsx +51 -24
  120. package/src/components/CircularProgressCenter.tsx +1 -1
  121. package/src/components/ClearFilterSortButton.tsx +41 -0
  122. package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
  123. package/src/components/DeleteEntityDialog.tsx +1 -1
  124. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +12 -19
  125. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +21 -20
  126. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +10 -6
  127. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
  128. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  129. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +31 -16
  130. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +14 -6
  131. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  132. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
  133. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
  134. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +72 -67
  135. package/src/components/EntityCollectionView/EntityCollectionView.tsx +138 -86
  136. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  137. package/src/components/EntityCollectionView/useSelectionController.tsx +19 -7
  138. package/src/components/EntityCollectionView/utils.ts +19 -0
  139. package/src/components/EntityPreview.tsx +43 -39
  140. package/src/components/EntityView.tsx +6 -6
  141. package/src/components/ErrorView.tsx +1 -1
  142. package/src/components/HomePage/DefaultHomePage.tsx +25 -19
  143. package/src/components/HomePage/NavigationCard.tsx +3 -3
  144. package/src/components/HomePage/NavigationCardBinding.tsx +1 -1
  145. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  146. package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
  147. package/src/components/PropertyConfigBadge.tsx +9 -3
  148. package/src/components/PropertyIdCopyTooltip.tsx +48 -0
  149. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +8 -7
  150. package/src/components/ReferenceWidget.tsx +22 -12
  151. package/src/components/SearchIconsView.tsx +10 -7
  152. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  153. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  154. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  155. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +28 -6
  156. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +88 -21
  157. package/src/components/VirtualTable/VirtualTable.tsx +77 -46
  158. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
  159. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  160. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  161. package/src/components/VirtualTable/VirtualTableProps.tsx +18 -14
  162. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  163. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
  164. package/src/components/VirtualTable/fields/VirtualTableInput.tsx +2 -1
  165. package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
  166. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
  167. package/src/components/VirtualTable/types.tsx +2 -3
  168. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +8 -4
  169. package/src/components/common/index.ts +1 -0
  170. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  171. package/src/components/common/types.tsx +4 -6
  172. package/src/components/common/useColumnsIds.tsx +23 -2
  173. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +23 -12
  174. package/src/components/common/useTableSearchHelper.ts +53 -12
  175. package/src/components/index.tsx +4 -2
  176. package/src/contexts/DialogsProvider.tsx +2 -2
  177. package/src/core/DefaultAppBar.tsx +176 -0
  178. package/src/core/DefaultDrawer.tsx +183 -0
  179. package/src/core/DrawerNavigationItem.tsx +66 -0
  180. package/src/core/EntityEditView.tsx +716 -153
  181. package/src/core/EntitySidePanel.tsx +1 -2
  182. package/src/core/FireCMS.tsx +53 -52
  183. package/src/core/NavigationRoutes.tsx +7 -8
  184. package/src/core/SideDialogs.tsx +1 -0
  185. package/src/core/field_configs.tsx +7 -8
  186. package/src/core/index.tsx +3 -4
  187. package/src/form/PropertyFieldBinding.tsx +74 -35
  188. package/src/form/components/CustomIdField.tsx +4 -2
  189. package/src/form/components/FieldHelperText.tsx +4 -4
  190. package/src/form/components/LabelWithIcon.tsx +27 -19
  191. package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
  192. package/src/form/components/StorageItemPreview.tsx +21 -11
  193. package/src/form/components/StorageUploadProgress.tsx +3 -4
  194. package/src/form/components/index.tsx +1 -1
  195. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +29 -17
  196. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +45 -35
  197. package/src/form/field_bindings/BlockFieldBinding.tsx +51 -32
  198. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -14
  199. package/src/form/field_bindings/KeyValueFieldBinding.tsx +54 -45
  200. package/src/form/field_bindings/MapFieldBinding.tsx +65 -48
  201. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
  202. package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
  203. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
  204. package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
  205. package/src/form/field_bindings/RepeatFieldBinding.tsx +52 -34
  206. package/src/form/field_bindings/SelectFieldBinding.tsx +20 -13
  207. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +36 -46
  208. package/src/form/field_bindings/SwitchFieldBinding.tsx +9 -5
  209. package/src/form/field_bindings/TextFieldBinding.tsx +26 -23
  210. package/src/form/index.tsx +4 -9
  211. package/src/form/useClearRestoreValue.tsx +2 -2
  212. package/src/form/validation.ts +1 -17
  213. package/src/hooks/data/delete.ts +2 -1
  214. package/src/hooks/data/save.ts +9 -5
  215. package/src/hooks/data/useDataSource.tsx +11 -3
  216. package/src/hooks/index.tsx +1 -0
  217. package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
  218. package/src/hooks/useBuildModeController.tsx +11 -5
  219. package/src/hooks/useBuildNavigationController.tsx +91 -31
  220. package/src/hooks/useProjectLog.tsx +32 -10
  221. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  222. package/src/hooks/useValidateAuthenticator.tsx +21 -41
  223. package/src/index.ts +1 -0
  224. package/src/internal/useBuildDataSource.ts +72 -82
  225. package/src/internal/useBuildSideDialogsController.tsx +1 -0
  226. package/src/internal/useBuildSideEntityController.tsx +102 -22
  227. package/src/internal/useUnsavedChangesDialog.tsx +3 -1
  228. package/src/preview/PropertyPreview.tsx +11 -18
  229. package/src/preview/PropertyPreviewProps.tsx +7 -1
  230. package/src/preview/components/BooleanPreview.tsx +2 -2
  231. package/src/preview/components/EnumValuesChip.tsx +2 -2
  232. package/src/preview/components/ImagePreview.tsx +25 -35
  233. package/src/preview/components/ReferencePreview.tsx +23 -34
  234. package/src/preview/components/StorageThumbnail.tsx +5 -1
  235. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  236. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
  237. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
  238. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
  239. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
  240. package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
  241. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
  242. package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
  243. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
  244. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  245. package/src/preview/util.ts +2 -2
  246. package/src/types/auth.tsx +3 -3
  247. package/src/types/collections.ts +50 -8
  248. package/src/types/customization_controller.tsx +0 -1
  249. package/src/types/datasource.ts +65 -43
  250. package/src/types/entities.ts +11 -1
  251. package/src/types/entity_actions.tsx +16 -3
  252. package/src/types/entity_overrides.tsx +2 -2
  253. package/src/types/fields.tsx +69 -45
  254. package/src/types/firecms.tsx +5 -0
  255. package/src/types/index.ts +0 -1
  256. package/src/types/navigation.ts +7 -7
  257. package/src/types/plugins.tsx +16 -6
  258. package/src/types/properties.ts +39 -22
  259. package/src/types/property_config.tsx +0 -2
  260. package/src/types/side_dialogs_controller.tsx +13 -0
  261. package/src/types/storage.ts +94 -3
  262. package/src/util/entities.ts +6 -5
  263. package/src/util/enums.ts +1 -1
  264. package/src/util/icon_list.ts +15 -10
  265. package/src/util/icon_synonyms.ts +3 -99
  266. package/src/util/icons.tsx +8 -2
  267. package/src/util/index.ts +1 -0
  268. package/src/util/make_properties_editable.ts +13 -5
  269. package/src/util/navigation_utils.ts +6 -6
  270. package/src/util/objects.ts +45 -28
  271. package/src/util/permissions.ts +1 -0
  272. package/src/util/plurals.ts +0 -2
  273. package/src/util/property_utils.tsx +11 -4
  274. package/src/util/references.ts +3 -0
  275. package/src/util/resolutions.ts +79 -46
  276. package/src/util/storage.ts +79 -21
  277. package/src/util/strings.ts +2 -2
  278. package/src/util/useStorageUploadController.tsx +33 -7
  279. package/src/util/useTraceUpdate.tsx +1 -0
  280. package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
  281. package/dist/components/VirtualTable/common.d.ts +0 -2
  282. package/dist/core/Drawer.d.ts +0 -23
  283. package/dist/core/Scaffold.d.ts +0 -55
  284. package/dist/core/SideEntityView.d.ts +0 -7
  285. package/dist/form/EntityForm.d.ts +0 -77
  286. package/dist/form/components/FormikArrayContainer.d.ts +0 -18
  287. package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  288. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  289. package/dist/internal/useLocaleConfig.d.ts +0 -1
  290. package/dist/types/appcheck.d.ts +0 -26
  291. package/src/components/FireCMSAppBar.tsx +0 -165
  292. package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
  293. package/src/core/Drawer.tsx +0 -191
  294. package/src/core/Scaffold.tsx +0 -281
  295. package/src/core/SideEntityView.tsx +0 -38
  296. package/src/form/EntityForm.tsx +0 -728
  297. package/src/form/components/FormikArrayContainer.tsx +0 -44
  298. package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
  299. package/src/internal/useBuildCustomizationController.tsx +0 -5
  300. package/src/internal/useLocaleConfig.tsx +0 -18
  301. package/src/types/appcheck.ts +0 -29
package/package.json CHANGED
@@ -1,122 +1,131 @@
1
1
  {
2
- "name": "@firecms/core",
3
- "type": "module",
4
- "version": "3.0.0-canary.14",
5
- "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
- "funding": {
7
- "url": "https://github.com/sponsors/firecmsco"
8
- },
9
- "author": "FireCMS",
10
- "license": "MIT",
11
- "repository": "git@github.com:FireCMSco/firecms.git",
12
- "main": "./dist/index.umd.js",
13
- "module": "./dist/index.es.js",
14
- "types": "./dist/index.d.ts",
15
- "source": "src/index.ts",
16
- "engines": {
17
- "node": ">=14"
18
- },
19
- "keywords": [
20
- "firebase",
21
- "cms",
22
- "admin",
23
- "admin panel",
24
- "firebase panel",
25
- "firestore",
26
- "headless",
27
- "headless cms",
28
- "content manager"
29
- ],
30
- "scripts": {
31
- "watch": "vite build --watch",
32
- "build": "vite build && tsc --emitDeclarationOnly -p tsconfig.prod.json",
33
- "prepublishOnly": "run-s build",
34
- "createTag": "PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]') && git tag v$PACKAGE_VERSION && git push --tags",
35
- "test:lint": "eslint \"src/**\" --quiet",
36
- "test": "jest",
37
- "clean": "rm -rf dist && find ./src -name '*.js' -type f | xargs rm -f",
38
- "generateIcons": "ts-node --esm src/icons/generateIcons.ts"
39
- },
40
- "exports": {
41
- ".": {
42
- "import": "./dist/index.es.js",
43
- "require": "./dist/index.umd.js",
44
- "types": "./dist/index.d.ts"
2
+ "name": "@firecms/core",
3
+ "type": "module",
4
+ "version": "3.0.0-canary.141",
5
+ "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
+ "funding": {
7
+ "url": "https://github.com/sponsors/firecmsco"
45
8
  },
46
- "./package.json": "./package.json"
47
- },
48
- "dependencies": {
49
- "@firecms/formex": "^3.0.0-canary.14",
50
- "@firecms/ui": "^3.0.0-canary.14",
51
- "@fontsource/ibm-plex-mono": "^5.0.12",
52
- "@fontsource/roboto": "^5.0.12",
53
- "@hello-pangea/dnd": "^16.5.0",
54
- "date-fns": "^3.6.0",
55
- "history": "^5.3.0",
56
- "js-search": "^2.0.1",
57
- "markdown-it": "^14.1.0",
58
- "notistack": "^3.0.1",
59
- "object-hash": "^3.0.0",
60
- "react-image-file-resizer": "^0.4.8",
61
- "react-markdown-editor-lite": "^1.3.4",
62
- "react-transition-group": "^4.4.5",
63
- "react-use-measure": "^2.1.1",
64
- "react-window": "^1.8.10",
65
- "typeface-rubik": "^1.1.13",
66
- "yup": "^0.32.11"
67
- },
68
- "peerDependencies": {
69
- "firebase": "^10.5.2",
70
- "react": "^18.2.0",
71
- "react-dom": "^18.2.0",
72
- "react-router": "^6.22.0",
73
- "react-router-dom": "^6.22.0"
74
- },
75
- "eslintConfig": {
76
- "extends": [
77
- "react-app",
78
- "react-app/jest"
79
- ]
80
- },
81
- "devDependencies": {
82
- "@jest/globals": "^29.7.0",
83
- "@testing-library/jest-dom": "^6.4.2",
84
- "@testing-library/react": "^14.2.1",
85
- "@testing-library/user-event": "^14.5.2",
86
- "@types/jest": "^29.5.12",
87
- "@types/node": "^20.11.30",
88
- "@types/object-hash": "^3.0.6",
89
- "@types/react": "^18.2.67",
90
- "@types/react-dom": "^18.2.22",
91
- "@types/react-measure": "^2.0.12",
92
- "@typescript-eslint/eslint-plugin": "^7.3.1",
93
- "@typescript-eslint/parser": "^7.3.1",
94
- "@vitejs/plugin-react": "^4.2.1",
95
- "cross-env": "^7.0.3",
96
- "eslint": "^8.57.0",
97
- "eslint-config-standard": "^17.1.0",
98
- "eslint-plugin-import": "^2.29.1",
99
- "eslint-plugin-n": "^16.6.2",
100
- "eslint-plugin-promise": "^6.1.1",
101
- "eslint-plugin-react": "^7.34.1",
102
- "eslint-plugin-react-hooks": "^4.6.0",
103
- "firebase": "^10.9.0",
104
- "jest": "^29.7.0",
105
- "npm-run-all": "^4.1.5",
106
- "react-router": "^6.22.0",
107
- "react-router-dom": "^6.22.0",
108
- "ts-jest": "^29.1.2",
109
- "ts-node": "^10.9.2",
110
- "tsd": "^0.30.7",
111
- "typescript": "^5.4.2",
112
- "vite": "^5.2.3"
113
- },
114
- "files": [
115
- "dist",
116
- "src"
117
- ],
118
- "gitHead": "42fe62aaa86f3330c79c7cbba551d9323299c141",
119
- "publishConfig": {
120
- "access": "public"
121
- }
9
+ "author": "FireCMS",
10
+ "license": "MIT",
11
+ "repository": "git@github.com:FireCMSco/firecms.git",
12
+ "main": "./dist/index.umd.js",
13
+ "module": "./dist/index.es.js",
14
+ "types": "./dist/index.d.ts",
15
+ "source": "src/index.ts",
16
+ "engines": {
17
+ "node": ">=14"
18
+ },
19
+ "keywords": [
20
+ "firebase",
21
+ "cms",
22
+ "admin",
23
+ "admin panel",
24
+ "firebase panel",
25
+ "firestore",
26
+ "headless",
27
+ "headless cms",
28
+ "content manager"
29
+ ],
30
+ "scripts": {
31
+ "watch": "vite build --watch",
32
+ "build": "vite build && tsc --emitDeclarationOnly -p tsconfig.prod.json",
33
+ "prepublishOnly": "run-s build",
34
+ "createTag": "PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g' | tr -d '[[:space:]]') && git tag v$PACKAGE_VERSION && git push --tags",
35
+ "test:lint": "eslint \"src/**\" --quiet",
36
+ "test": "jest",
37
+ "clean": "rm -rf dist && find ./src -name '*.js' -type f | xargs rm -f",
38
+ "generateIcons": "ts-node --esm src/icons/generateIcons.ts"
39
+ },
40
+ "exports": {
41
+ ".": {
42
+ "import": "./dist/index.es.js",
43
+ "require": "./dist/index.umd.js",
44
+ "types": "./dist/index.d.ts"
45
+ },
46
+ "./package.json": "./package.json"
47
+ },
48
+ "dependencies": {
49
+ "@firecms/editor": "^3.0.0-canary.141",
50
+ "@firecms/formex": "^3.0.0-canary.141",
51
+ "@firecms/ui": "^3.0.0-canary.141",
52
+ "@hello-pangea/dnd": "^17.0.0",
53
+ "@radix-ui/react-portal": "^1.1.2",
54
+ "clsx": "^2.1.1",
55
+ "date-fns": "^3.6.0",
56
+ "fuse.js": "^7.0.0",
57
+ "history": "^5.3.0",
58
+ "markdown-it": "^14.1.0",
59
+ "notistack": "^3.0.1",
60
+ "object-hash": "^3.0.0",
61
+ "react-dropzone": "^14.2.10",
62
+ "react-fast-compare": "^3.2.2",
63
+ "react-image-file-resizer": "^0.4.8",
64
+ "react-transition-group": "^4.4.5",
65
+ "react-use-measure": "^2.1.1",
66
+ "react-window": "^1.8.10",
67
+ "yup": "^0.32.11"
68
+ },
69
+ "peerDependencies": {
70
+ "firebase": "^10.5.2",
71
+ "react": "^18.3.1",
72
+ "react-dom": "^18.3.1",
73
+ "react-router": "^6.25.1",
74
+ "react-router-dom": "^6.25.1"
75
+ },
76
+ "devDependencies": {
77
+ "@jest/globals": "^29.7.0",
78
+ "@testing-library/react": "^16.0.1",
79
+ "@testing-library/user-event": "^14.5.2",
80
+ "@types/jest": "^29.5.14",
81
+ "@types/node": "^20.16.11",
82
+ "@types/object-hash": "^3.0.6",
83
+ "@types/react": "^18.3.12",
84
+ "@types/react-dom": "^18.3.1",
85
+ "@types/react-measure": "^2.0.12",
86
+ "@vitejs/plugin-react": "^4.3.3",
87
+ "cross-env": "^7.0.3",
88
+ "firebase": "^10.14.1",
89
+ "jest": "^29.7.0",
90
+ "npm-run-all": "^4.1.5",
91
+ "react-router": "^6.27.0",
92
+ "react-router-dom": "^6.27.0",
93
+ "ts-jest": "^29.2.5",
94
+ "ts-node": "^10.9.2",
95
+ "tsd": "^0.31.2",
96
+ "typescript": "^5.6.3",
97
+ "vite": "^5.4.10"
98
+ },
99
+ "files": [
100
+ "dist",
101
+ "src"
102
+ ],
103
+ "gitHead": "84beb9dab81946354e94b91d72a49889a2ca537c",
104
+ "publishConfig": {
105
+ "access": "public"
106
+ },
107
+ "eslintConfig": {
108
+ "extends": [
109
+ "react-app",
110
+ "react-app/jest"
111
+ ]
112
+ },
113
+ "jest": {
114
+ "transform": {
115
+ "^.+\\.tsx?$": "ts-jest"
116
+ },
117
+ "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
118
+ "moduleFileExtensions": [
119
+ "ts",
120
+ "tsx",
121
+ "js",
122
+ "jsx",
123
+ "json",
124
+ "node"
125
+ ],
126
+ "testEnvironment": "node",
127
+ "moduleNameMapper": {
128
+ "\\.(css|less)$": "<rootDir>/test/__mocks__/styleMock.js"
129
+ }
130
+ }
122
131
  }
@@ -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,24 @@
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
+ export function Drawer({
12
+ children,
13
+ className,
14
+ style
15
+ }: {
16
+ children?: React.ReactNode,
17
+ className?: string,
18
+ style?: React.CSSProperties
19
+ }) {
20
+ const usedChildren = children ?? <DefaultDrawer className={className} style={style}/>;
21
+ return <>{usedChildren}</>;
22
+ }
23
+
24
+ Drawer.componentType = "Drawer";
@@ -0,0 +1,243 @@
1
+ import React, { PropsWithChildren, useCallback } from "react";
2
+ import { ChevronLeftIcon, cls, defaultBorderMixin, IconButton, MenuIcon, Sheet, Tooltip } from "@firecms/ui";
3
+ import equal from "react-fast-compare"
4
+ import { useLargeLayout } from "../hooks";
5
+ import { ErrorBoundary } from "../components";
6
+ import { AppContext } from "./useApp";
7
+
8
+ export const DRAWER_WIDTH = 280;
9
+
10
+ /**
11
+ * @group Core
12
+ */
13
+ export interface ScaffoldProps {
14
+
15
+ /**
16
+ * Open the drawer on hover
17
+ */
18
+ autoOpenDrawer?: boolean;
19
+
20
+ /**
21
+ * Logo to be displayed in the top bar and drawer.
22
+ * Note that this has no effect if you are using a custom AppBar or Drawer.
23
+ */
24
+ logo?: string;
25
+
26
+ className?: string;
27
+
28
+ style?: React.CSSProperties;
29
+ }
30
+
31
+ /**
32
+ * This view acts as a scaffold for FireCMS.
33
+ *
34
+ * It is in charge of displaying the navigation drawer, top bar and main
35
+ * collection views.
36
+ * This component needs a parent {@link FireCMS}
37
+ *
38
+ * @param props
39
+
40
+ * @group Core
41
+ */
42
+ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
43
+ function Scaffold(props: PropsWithChildren<ScaffoldProps>) {
44
+
45
+ const {
46
+ children,
47
+ autoOpenDrawer,
48
+ logo,
49
+ className,
50
+ style
51
+ } = props;
52
+
53
+ const drawerChildren = React.Children.toArray(children).filter((child: any) => child.type.componentType === "Drawer");
54
+ if (drawerChildren.length > 1) {
55
+ throw Error("Only one Drawer component is allowed in Scaffold");
56
+ }
57
+ const appBarChildren = React.Children.toArray(children).filter((child: any) => child.type.componentType === "AppBar");
58
+ if (appBarChildren.length > 1) {
59
+ throw Error("Only one AppBar component is allowed in Scaffold");
60
+ }
61
+ const otherChildren = React.Children.toArray(children)
62
+ .filter((child: any) => child.type.componentType !== "Drawer" && child.type.componentType !== "AppBar");
63
+ const includeDrawer = drawerChildren.length > 0;
64
+ const largeLayout = useLargeLayout();
65
+
66
+ const [drawerOpen, setDrawerOpen] = React.useState(false);
67
+ const [onHover, setOnHover] = React.useState(false);
68
+
69
+ const setOnHoverTrue = useCallback(() => setOnHover(true), []);
70
+ const setOnHoverFalse = useCallback(() => setOnHover(false), []);
71
+
72
+ const handleDrawerOpen = useCallback(() => {
73
+ setDrawerOpen(true);
74
+ }, []);
75
+
76
+ const handleDrawerClose = useCallback(() => {
77
+ setDrawerOpen(false);
78
+ }, []);
79
+
80
+ const computedDrawerOpen: boolean = drawerOpen || Boolean(largeLayout && autoOpenDrawer && onHover);
81
+
82
+ const hasAppBar = Boolean(appBarChildren.length > 0);
83
+ return (
84
+ <AppContext.Provider value={{
85
+ logo,
86
+ hasDrawer: includeDrawer,
87
+ drawerHovered: onHover,
88
+ drawerOpen: computedDrawerOpen,
89
+ closeDrawer: handleDrawerClose,
90
+ openDrawer: handleDrawerOpen,
91
+ autoOpenDrawer
92
+ }}>
93
+ <div
94
+ className={cls("flex h-screen w-screen bg-gray-50 dark:bg-gray-900 text-gray-900 dark:text-white overflow-hidden", className)}
95
+ style={{
96
+ paddingTop: "env(safe-area-inset-top)",
97
+ paddingLeft: "env(safe-area-inset-left)",
98
+ paddingRight: "env(safe-area-inset-right)",
99
+ paddingBottom: "env(safe-area-inset-bottom)",
100
+ height: "100dvh",
101
+ ...style
102
+ }}>
103
+
104
+ {appBarChildren}
105
+
106
+ <DrawerWrapper
107
+ displayed={includeDrawer}
108
+ onMouseEnter={setOnHoverTrue}
109
+ onMouseMove={setOnHoverTrue}
110
+ onMouseLeave={setOnHoverFalse}
111
+ open={computedDrawerOpen}
112
+ hovered={onHover}
113
+ setDrawerOpen={setDrawerOpen}>
114
+ {includeDrawer && drawerChildren}
115
+ </DrawerWrapper>
116
+
117
+ <main
118
+ className="flex flex-col flex-grow overflow-auto">
119
+ {hasAppBar && <DrawerHeader/>}
120
+ <div
121
+ className={cls(defaultBorderMixin, "flex-grow overflow-auto lg:m-0 lg:mx-4 lg:mb-4 lg:rounded-lg lg:border lg:border-solid m-0 mt-1", {
122
+ "lg:mt-4": !hasAppBar
123
+ })}>
124
+
125
+ <ErrorBoundary>
126
+ {otherChildren}
127
+ </ErrorBoundary>
128
+
129
+ </div>
130
+ </main>
131
+ </div>
132
+ </AppContext.Provider>
133
+ );
134
+ },
135
+ equal
136
+ )
137
+
138
+ const DrawerHeader = () => {
139
+ return (
140
+ <div className="flex flex-col min-h-16"></div>
141
+ );
142
+ };
143
+
144
+ function DrawerWrapper(props: {
145
+ children: React.ReactNode,
146
+ displayed: boolean,
147
+ open: boolean,
148
+ logo?: string,
149
+ hovered: boolean,
150
+ setDrawerOpen: (open: boolean) => void,
151
+ onMouseEnter: () => void,
152
+ onMouseMove: () => void,
153
+ onMouseLeave: () => void
154
+ }) {
155
+
156
+ const width = !props.displayed ? 0 : (props.open ? DRAWER_WIDTH : 72);
157
+ const innerDrawer = <div
158
+ className={"relative h-full no-scrollbar overflow-y-auto overflow-x-hidden"}
159
+ style={{
160
+ width,
161
+ 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"
162
+ }}
163
+ >
164
+
165
+ {!props.open && props.displayed && (
166
+ <Tooltip title="Open menu"
167
+ side="right"
168
+ sideOffset={12}
169
+ asChild={true}>
170
+ <div
171
+ className="ml-2 fixed top-1 left-2 sm:top-2 sm:left-3 !bg-gray-50 dark:!bg-gray-900 rounded-full w-fit z-20">
172
+ <IconButton
173
+ color="inherit"
174
+ aria-label="Open menu"
175
+ onClick={() => props.setDrawerOpen(true)}
176
+ size="large"
177
+ >
178
+ <MenuIcon/>
179
+ </IconButton>
180
+ </div>
181
+ </Tooltip>
182
+ )}
183
+
184
+ <div
185
+ className={`z-20 absolute right-0 top-4 ${
186
+ props.open ? "opacity-100" : "opacity-0 invisible"
187
+ } transition-opacity duration-200 ease-in-out`}>
188
+ <IconButton
189
+ aria-label="Close drawer"
190
+ onClick={() => props.setDrawerOpen(false)}
191
+ >
192
+ <ChevronLeftIcon/>
193
+ </IconButton>
194
+ </div>
195
+
196
+ <div className={"flex flex-col h-full"}>
197
+ {props.children}
198
+ </div>
199
+
200
+ </div>;
201
+
202
+ const largeLayout = useLargeLayout();
203
+ if (!largeLayout) {
204
+ if (!props.displayed)
205
+ return null;
206
+ return <>
207
+ <IconButton
208
+ color="inherit"
209
+ aria-label="Open drawer"
210
+ onClick={() => props.setDrawerOpen(true)}
211
+ size="large"
212
+ className="absolute sm:top-2 sm:left-5 top-1 left-2"
213
+ >
214
+ <MenuIcon/>
215
+ </IconButton>
216
+ <Sheet side={"left"}
217
+ transparent={true}
218
+ open={props.open}
219
+ onOpenChange={props.setDrawerOpen}
220
+ title={"Navigaion drawer"}
221
+ overlayClassName={"bg-white bg-opacity-80"}
222
+ >
223
+ {innerDrawer}
224
+ </Sheet>
225
+ </>;
226
+ }
227
+
228
+ return (
229
+ <div
230
+ className="z-20 relative"
231
+ onMouseEnter={props.onMouseEnter}
232
+ onMouseMove={props.onMouseMove}
233
+ onMouseLeave={props.onMouseLeave}
234
+ style={{
235
+ width,
236
+ 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"
237
+ }}>
238
+
239
+ {innerDrawer}
240
+
241
+ </div>
242
+ );
243
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./Drawer";
2
+ export * from "./AppBar";
3
+ export * from "./Scaffold";
4
+ export * from "./useApp";
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+
3
+ /**
4
+ * This context represents the state of the app in terms of layout.
5
+ * @group Core
6
+ */
7
+ export type AppState = {
8
+ hasDrawer: boolean,
9
+ drawerHovered: boolean,
10
+ drawerOpen: boolean,
11
+ openDrawer: () => void,
12
+ closeDrawer: () => void,
13
+ autoOpenDrawer?: boolean,
14
+ logo?: string
15
+ }
16
+
17
+ export const AppContext = React.createContext<AppState>({
18
+ hasDrawer: false,
19
+ drawerHovered: false,
20
+ drawerOpen: false,
21
+ openDrawer: () => {
22
+ throw new Error("openDrawer not implemented");
23
+ },
24
+ closeDrawer: () => {
25
+ throw new Error("closeDrawer not implemented");
26
+ },
27
+ autoOpenDrawer: false
28
+ });
29
+
30
+ export function useApp() {
31
+ return React.useContext(AppContext);
32
+ }