@rebasepro/admin 0.0.1-canary.f81da60 → 0.1.0
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.
- package/dist/{CollectionEditorDialog-D509-IMx.js → CollectionEditorDialog-MbvXGzEq.js} +18 -18
- package/dist/CollectionEditorDialog-MbvXGzEq.js.map +1 -0
- package/dist/{CollectionsStudioView-B549BDpU.js → CollectionsStudioView-D9X6aiAr.js} +4 -4
- package/dist/{CollectionsStudioView-B549BDpU.js.map → CollectionsStudioView-D9X6aiAr.js.map} +1 -1
- package/dist/{ContentHomePage--Bl1FXk7.js → ContentHomePage-CfVB1eUo.js} +26 -26
- package/dist/ContentHomePage-CfVB1eUo.js.map +1 -0
- package/dist/{ExportCollectionAction-CttNAdM1.js → ExportCollectionAction-CUwJg4F9.js} +2 -2
- package/dist/{ExportCollectionAction-CttNAdM1.js.map → ExportCollectionAction-CUwJg4F9.js.map} +1 -1
- package/dist/{ImportCollectionAction-BB33kxAN.js → ImportCollectionAction-DGa_SF_8.js} +2 -2
- package/dist/{ImportCollectionAction-BB33kxAN.js.map → ImportCollectionAction-DGa_SF_8.js.map} +1 -1
- package/dist/{PropertyEditView-UtDO8g0A.js → PropertyEditView-C4nlYmAc.js} +79 -101
- package/dist/PropertyEditView-C4nlYmAc.js.map +1 -0
- package/dist/{RolesView-B0E7L0hE.js → RolesView-CNWxnR8e.js} +2 -2
- package/dist/{RolesView-B0E7L0hE.js.map → RolesView-CNWxnR8e.js.map} +1 -1
- package/dist/{UsersView-BM2_7VPV.js → UsersView-YiTIcXkA.js} +6 -28
- package/dist/UsersView-YiTIcXkA.js.map +1 -0
- package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -4
- package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +1 -3
- package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +0 -2
- package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -2
- package/dist/collection_editor_ui.js +3 -3
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -1
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -1
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
- package/dist/components/EntityEditView.d.ts +6 -0
- package/dist/components/RebaseCMS.d.ts +1 -1
- package/dist/{index-CNDetux9.js → index-CtzpHzMQ.js} +2 -2
- package/dist/{index-CNDetux9.js.map → index-CtzpHzMQ.js.map} +1 -1
- package/dist/{index-C9YDsMC9.js → index-DKlrVD1m.js} +3 -3
- package/dist/index-DKlrVD1m.js.map +1 -0
- package/dist/{index-DO7lMeNB.js → index-kHJXfLNI.js} +3 -3
- package/dist/index-kHJXfLNI.js.map +1 -0
- package/dist/index.js +18 -14
- package/dist/index.js.map +1 -1
- package/dist/util/navigation_utils.d.ts +10 -1
- package/dist/{util-DK1O3uM0.js → util-CwLmSpGp.js} +708 -598
- package/dist/util-CwLmSpGp.js.map +1 -0
- package/package.json +8 -8
- package/src/collection_editor/ConfigControllerProvider.tsx +1 -10
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -47
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +2 -10
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +1 -3
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -1
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +6 -6
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +15 -49
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +2 -3
- package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +1 -1
- package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
- package/src/components/DefaultAppBar.tsx +2 -2
- package/src/components/DefaultDrawer.tsx +25 -17
- package/src/components/DrawerNavigationGroup.tsx +4 -4
- package/src/components/DrawerNavigationItem.tsx +6 -6
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +8 -2
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
- package/src/components/EntityCollectionTable/table_bindings.tsx +37 -27
- package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +4 -3
- package/src/components/EntityCollectionView/EntityCollectionListView.tsx +5 -4
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +50 -7
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +17 -8
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +8 -4
- package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +33 -5
- package/src/components/EntityEditView.tsx +80 -81
- package/src/components/EntitySidePanel.tsx +11 -7
- package/src/components/HomePage/ContentHomePage.tsx +24 -15
- package/src/components/HomePage/NavigationCard.tsx +4 -4
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/RebaseAuthGate.tsx +2 -0
- package/src/components/RebaseCMS.tsx +4 -3
- package/src/components/RebaseNavigation.tsx +7 -4
- package/src/components/RelationSelector.tsx +30 -2
- package/src/components/SelectableTable/SelectableTable.tsx +1 -1
- package/src/components/UserSelector.tsx +1 -1
- package/src/components/admin/UsersView.tsx +2 -17
- package/src/components/app/Scaffold.tsx +3 -3
- package/src/components/field_configs.tsx +3 -3
- package/src/form/PropertyFieldBinding.tsx +10 -6
- package/src/hooks/navigation/useResolvedViews.tsx +1 -3
- package/src/hooks/navigation/useTopLevelNavigation.ts +1 -1
- package/src/hooks/navigation/utils.ts +1 -1
- package/src/preview/PropertyPreview.tsx +17 -13
- package/src/routes/RebaseRoute.tsx +27 -2
- package/src/util/navigation_utils.ts +16 -2
- package/src/util/previews.ts +14 -5
- package/dist/CollectionEditorDialog-D509-IMx.js.map +0 -1
- package/dist/ContentHomePage--Bl1FXk7.js.map +0 -1
- package/dist/PropertyEditView-UtDO8g0A.js.map +0 -1
- package/dist/UsersView-BM2_7VPV.js.map +0 -1
- package/dist/index-C9YDsMC9.js.map +0 -1
- package/dist/index-DO7lMeNB.js.map +0 -1
- package/dist/util-DK1O3uM0.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CNDetux9.js","sources":["../src/components/history/UserChip.tsx","../src/components/history/EntityHistoryEntry.tsx","../src/components/history/EntityHistoryView.tsx"],"sourcesContent":["import { User } from \"@rebasepro/types\";\nimport { Chip, Tooltip } from \"@rebasepro/ui\";\n\nexport function UserChip({ user }: { user: User }) {\n return (\n <Tooltip title={user.email ?? user.uid}>\n <Chip size={\"small\"} className={\"flex items-center\"}>\n {user.photoURL && <img\n className={\"rounded-full w-6 h-6 mr-2\"}\n src={user.photoURL} alt={user.displayName ?? \"User picture\"}/>}\n <span>{user.displayName ?? user.email ?? user.uid}</span>\n </Chip>\n </Tooltip>\n );\n}\n","import type { EntityCollection } from \"@rebasepro/types\";\nimport type { Property } from \"@rebasepro/types\";\nimport * as React from \"react\";\n\nimport { Chip, cls, defaultBorderMixin, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { ArrowLeftIcon } from \"lucide-react\";\nimport { PreviewSize } from \"../../types/components/PropertyPreviewProps\";\nimport { getPropertyInPath } from \"../../util/property_utils\";\nimport { PropertyPreview } from \"../../preview/PropertyPreview\";\nimport { SkeletonPropertyComponent } from \"../../preview/property_previews/SkeletonPropertyComponent\";\nimport { useAuthController } from \"@rebasepro/core\";\nimport { UserChip } from \"./UserChip\";\nimport { HistoryEntryData } from \"../../hooks\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\n/**\n * Recursive deep equality for primitives, arrays and plain objects.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\") return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== (b as unknown[]).length) return false;\n return a.every((item, i) => deepEqual(item, (b as unknown[])[i]));\n }\n\n if (Array.isArray(b)) return false;\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(key => key in bObj && deepEqual(aObj[key], bObj[key]));\n}\n\nexport type EntityHistoryEntryProps = {\n size: PreviewSize;\n actions?: React.ReactNode;\n collection?: EntityCollection;\n hover?: boolean;\n entry: HistoryEntryData;\n onClick?: (e: React.SyntheticEvent) => void;\n};\n\nfunction PreviousValueView({\n previousValueInPath,\n childProperty,\n propertyKey\n}: {\n previousValueInPath: unknown;\n childProperty: Property;\n propertyKey: string;\n}) {\n if (typeof previousValueInPath === \"string\" || typeof previousValueInPath === \"number\") {\n return <Typography variant={\"caption\"} color={\"secondary\"} className=\"line-through\">\n {previousValueInPath}\n </Typography>;\n } else if (typeof previousValueInPath === \"boolean\") {\n return <Typography variant={\"caption\"} color={\"secondary\"} className=\"line-through\">\n {previousValueInPath ? \"true\" : \"false\"}\n </Typography>;\n } else {\n return <Tooltip\n side={\"left\"}\n title={<div className={\"flex flex-col gap-2\"}>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n Previous value\n </Typography>\n <PropertyPreview\n propertyKey={propertyKey as string}\n value={previousValueInPath as never}\n property={childProperty as Property}\n size={\"small\"}/>\n </div>}>\n <ArrowLeftIcon size={iconSize.smallest} color={\"disabled\"} className={\"mb-1\"}/>\n </Tooltip>\n }\n}\n\n/**\n * Displays a single entity history revision entry.\n * Adapted from the entity_history plugin — now reads from backend API data.\n */\nexport function EntityHistoryEntry({\n actions,\n hover,\n collection,\n size,\n entry\n}: EntityHistoryEntryProps) {\n\n const authController = useAuthController();\n\n const changedFields = entry.changed_fields;\n const previousValues = entry.previous_values;\n const updatedOn = new Date(entry.updated_at);\n const updatedBy = entry.updated_by;\n\n // Resolve user display\n const currentUser = authController.user;\n const userDisplay = updatedBy === currentUser?.uid\n ? currentUser\n : undefined;\n\n return <div className={\"w-full flex flex-col gap-2 mt-4\"}>\n <div className={\"ml-4 flex items-center gap-4\"}>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n {updatedOn.toLocaleString()}\n </Typography>\n <Chip size={\"small\"}>\n {entry.action}\n </Chip>\n {!userDisplay && updatedBy && <Chip size={\"small\"}>{updatedBy}</Chip>}\n {userDisplay && <UserChip user={userDisplay}/>}\n </div>\n <div\n className={cls(\n \"bg-white dark:bg-surface-900\",\n \"min-h-[44px]\",\n \"w-full\",\n \"items-center\",\n hover ? \"hover:bg-surface-accent-50 dark:hover:bg-surface-800\" : \"\",\n size === \"small\" ? \"p-1\" : \"px-2 py-1\",\n \"flex border rounded-lg\",\n defaultBorderMixin\n )}>\n\n {actions}\n\n <div className={\"flex flex-col grow w-full m-1 shrink min-w-0\"}>\n\n {changedFields && collection && changedFields.map((key: string) => {\n const childProperty = getPropertyInPath(collection.properties, key);\n const valueInPath = entry.values ? getValueInPath(entry.values, key) : undefined;\n const previousValueInPath = previousValues ? getValueInPath(previousValues, key) : undefined;\n\n const element = childProperty\n ? <PropertyPreview\n propertyKey={key}\n value={valueInPath as never}\n property={childProperty as Property}\n size={\"small\"}/>\n : <Typography variant={\"body2\"}>\n {typeof valueInPath === \"string\" ? valueInPath : JSON.stringify(valueInPath)}\n </Typography>;\n\n return (\n <div key={\"ref_prev_\" + key}\n className=\"flex w-full my-1 items-center\">\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className=\"min-w-[140px] md:min-w-[200px] w-1/5 pr-8 overflow-hidden text-ellipsis text-right\">\n {key}\n </Typography>\n <div className=\"w-4/5\">\n {previousValueInPath !== undefined && !deepEqual(previousValueInPath, valueInPath) &&\n <PreviousValueView previousValueInPath={previousValueInPath}\n childProperty={childProperty as Property}\n propertyKey={key}/>\n }\n {element}\n </div>\n </div>\n );\n })}\n\n {(!changedFields || changedFields.length === 0) && (\n <Typography variant={\"caption\"} color={\"secondary\"} className=\"ml-4\">\n {entry.action === \"create\" ? \"Entity created\" :\n entry.action === \"delete\" ? \"Entity deleted\" : \"No field changes recorded\"}\n </Typography>\n )}\n\n </div>\n\n </div>\n </div>;\n}\n","\nimport type { EntityCustomViewParams } from \"@rebasepro/types\";\nimport { useRef, useEffect } from \"react\";\nimport { cls, IconButton, Label, Tooltip, Typography } from \"@rebasepro/ui\";\nimport { HistoryIcon } from \"lucide-react\";\nimport { EntityHistoryEntry } from \"./EntityHistoryEntry\";\nimport { useSnackbarController, useAuthController } from \"@rebasepro/core\";\nimport { ConfirmationDialog } from \"@rebasepro/core\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport { useState } from \"react\";\nimport { useEntityHistory } from \"../../index\";\n\n/**\n * Entity history tab view. Shows a paginated list of entity revisions\n * fetched from the backend API. Supports infinite scroll and revert.\n */\nexport function EntityHistoryView<M extends Record<string, unknown>>({\n entity,\n collection,\n formContext\n}: EntityCustomViewParams<M>) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const dirty = formContext?.formex.dirty;\n\n const slug = collection.slug;\n const entityId = entity?.id;\n\n const {\n entries,\n isLoading,\n hasMore,\n loadMore,\n revert\n } = useEntityHistory({\n slug,\n entityId,\n enabled: !!entityId,\n pageSize: 10\n });\n\n const [revertHistoryId, setRevertHistoryId] = useState<string | undefined>();\n const [isReverting, setIsReverting] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const loadMoreRef = useRef<HTMLDivElement>(null);\n\n // Intersection observer for infinite scroll\n useEffect(() => {\n const currentContainer = containerRef.current;\n const currentLoadMore = loadMoreRef.current;\n\n if (!currentContainer || !currentLoadMore || !hasMore || isLoading) return;\n\n const observer = new IntersectionObserver(\n (observerEntries) => {\n if (observerEntries[0].isIntersecting && hasMore && !isLoading) {\n loadMore();\n }\n },\n {\n root: currentContainer,\n rootMargin: \"0px 0px 200px 0px\",\n threshold: 0.01\n }\n );\n\n observer.observe(currentLoadMore);\n\n return () => observer.disconnect();\n }, [hasMore, isLoading, entries.length, loadMore]);\n\n if (!entity) {\n return <div className=\"flex items-center justify-center h-full\">\n <Label>HistoryIcon is only available for existing entities</Label>\n </div>;\n }\n\n async function doRevert(historyId: string) {\n setIsReverting(true);\n try {\n const revertedValues = await revert(historyId);\n setRevertHistoryId(undefined);\n\n // Reset the form with the reverted values so the UI updates\n // immediately without requiring a page refresh.\n if (formContext?.formex?.resetForm && revertedValues) {\n formContext.formex.resetForm({\n values: revertedValues as M,\n submitCount: 0,\n touched: {}\n });\n }\n\n snackbarController.open({\n message: \"Reverted to selected version\",\n type: \"info\"\n });\n } catch (error) {\n console.error(\"Error reverting entity:\", error);\n snackbarController.open({\n message: \"Error reverting entity\",\n type: \"error\"\n });\n } finally {\n setIsReverting(false);\n }\n }\n\n const revertEntry = revertHistoryId\n ? entries.find(e => e.id === revertHistoryId)\n : undefined;\n\n return <div\n ref={containerRef}\n className={cls(\"relative flex-1 h-full overflow-auto w-full flex flex-col gap-4 p-8\")}>\n <div className=\"flex flex-col gap-2 max-w-6xl mx-auto w-full\">\n\n <Typography variant={\"h5\"} className={\"mt-24 ml-4\"}>\n HistoryIcon\n </Typography>\n\n {isLoading && entries.length === 0 && (\n <div className=\"flex flex-col gap-4 mt-8 ml-4\">\n {[1, 2, 3].map(i => (\n <div key={i} className=\"flex flex-col gap-2 animate-pulse\">\n <div className=\"h-4 w-48 bg-surface-200 dark:bg-surface-700 rounded\"/>\n <div className=\"h-12 w-full bg-surface-100 dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700\"/>\n </div>\n ))}\n </div>\n )}\n\n {!isLoading && entries.length === 0 && <>\n <Label className={\"ml-4 mt-8\"}>\n No history available\n </Label>\n <Typography variant={\"caption\"} className={\"ml-4\"}>\n When you save an entity, a new version is created and stored in the history.\n </Typography>\n </>}\n\n {entries.map((entry) => (\n <div key={entry.id} className=\"flex flex-cols gap-2 w-full\">\n <EntityHistoryEntry\n entry={entry}\n collection={collection}\n size={\"medium\"}\n actions={\n <Tooltip title={\"Revert to this version\"}\n className={\"m-2 grow-0 self-start\"}>\n <IconButton\n onClick={() => {\n if (dirty) {\n snackbarController.open({\n message: \"Please save or discard your changes before reverting\",\n type: \"warning\"\n });\n } else {\n setRevertHistoryId(entry.id);\n }\n }}>\n <HistoryIcon/>\n </IconButton>\n </Tooltip>\n }\n />\n </div>\n ))}\n\n {/* Load more sentinel */}\n {entries.length > 0 && (\n <div ref={loadMoreRef} className=\"py-4 text-center\">\n {isLoading && <Label>Loading more...</Label>}\n {!hasMore && entries.length > 10 && <Label>No more history available</Label>}\n </div>\n )}\n </div>\n\n <ErrorBoundary>\n <ConfirmationDialog\n open={Boolean(revertHistoryId)}\n onAccept={() => {\n if (revertHistoryId) doRevert(revertHistoryId);\n }}\n onCancel={() => setRevertHistoryId(undefined)}\n title={<Typography variant={\"subtitle2\"}>Revert data to this version?</Typography>}\n body={revertEntry\n ? <div className=\"p-4\">\n <Typography variant={\"caption\"} color={\"secondary\"}>\n This will save the entity with the values from{\" \"}\n {new Date(revertEntry.updated_at).toLocaleString()}.\n A new history entry will be created for the revert.\n </Typography>\n </div>\n : null\n }\n />\n </ErrorBoundary>\n </div>;\n}\n"],"names":["UserChip","t0","$","_c","user","t1","email","uid","t2","displayName","photoURL","t3","t4","t5","t6","deepEqual","a","b","Array","isArray","length","every","item","i","aObj","bObj","aKeys","Object","keys","bKeys","key","PreviousValueView","previousValueInPath","childProperty","propertyKey","Symbol","for","iconSize","smallest","t7","EntityHistoryEntry","actions","hover","collection","size","entry","authController","useAuthController","changedFields","changed_fields","previousValues","previous_values","T0","updatedBy","userDisplay","updated_at","updated_by","updatedOn","Date","currentUser","undefined","Typography","toLocaleString","action","t8","t9","t10","t11","t12","t13","cls","defaultBorderMixin","t14","values","map","getPropertyInPath","properties","valueInPath","getValueInPath","element","JSON","stringify","t15","t16","t17","t18","EntityHistoryView","entity","formContext","snackbarController","useSnackbarController","dirty","formex","slug","entityId","id","entries","isLoading","hasMore","loadMore","revert","useEntityHistory","enabled","pageSize","revertHistoryId","setRevertHistoryId","useState","isReverting","setIsReverting","containerRef","useRef","loadMoreRef","useEffect","currentContainer","current","currentLoadMore","observer","IntersectionObserver","observerEntries","isIntersecting","root","rootMargin","threshold","observe","disconnect","doRevert","historyId","revertedValues","resetForm","submitCount","touched","open","message","type","error","console","revertEntry","find","e","Boolean"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-CtzpHzMQ.js","sources":["../src/components/history/UserChip.tsx","../src/components/history/EntityHistoryEntry.tsx","../src/components/history/EntityHistoryView.tsx"],"sourcesContent":["import { User } from \"@rebasepro/types\";\nimport { Chip, Tooltip } from \"@rebasepro/ui\";\n\nexport function UserChip({ user }: { user: User }) {\n return (\n <Tooltip title={user.email ?? user.uid}>\n <Chip size={\"small\"} className={\"flex items-center\"}>\n {user.photoURL && <img\n className={\"rounded-full w-6 h-6 mr-2\"}\n src={user.photoURL} alt={user.displayName ?? \"User picture\"}/>}\n <span>{user.displayName ?? user.email ?? user.uid}</span>\n </Chip>\n </Tooltip>\n );\n}\n","import type { EntityCollection } from \"@rebasepro/types\";\nimport type { Property } from \"@rebasepro/types\";\nimport * as React from \"react\";\n\nimport { Chip, cls, defaultBorderMixin, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { ArrowLeftIcon } from \"lucide-react\";\nimport { PreviewSize } from \"../../types/components/PropertyPreviewProps\";\nimport { getPropertyInPath } from \"../../util/property_utils\";\nimport { PropertyPreview } from \"../../preview/PropertyPreview\";\nimport { SkeletonPropertyComponent } from \"../../preview/property_previews/SkeletonPropertyComponent\";\nimport { useAuthController } from \"@rebasepro/core\";\nimport { UserChip } from \"./UserChip\";\nimport { HistoryEntryData } from \"../../hooks\";\nimport { getValueInPath } from \"@rebasepro/utils\";\n\n/**\n * Recursive deep equality for primitives, arrays and plain objects.\n */\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== \"object\") return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== (b as unknown[]).length) return false;\n return a.every((item, i) => deepEqual(item, (b as unknown[])[i]));\n }\n\n if (Array.isArray(b)) return false;\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj);\n const bKeys = Object.keys(bObj);\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(key => key in bObj && deepEqual(aObj[key], bObj[key]));\n}\n\nexport type EntityHistoryEntryProps = {\n size: PreviewSize;\n actions?: React.ReactNode;\n collection?: EntityCollection;\n hover?: boolean;\n entry: HistoryEntryData;\n onClick?: (e: React.SyntheticEvent) => void;\n};\n\nfunction PreviousValueView({\n previousValueInPath,\n childProperty,\n propertyKey\n}: {\n previousValueInPath: unknown;\n childProperty: Property;\n propertyKey: string;\n}) {\n if (typeof previousValueInPath === \"string\" || typeof previousValueInPath === \"number\") {\n return <Typography variant={\"caption\"} color={\"secondary\"} className=\"line-through\">\n {previousValueInPath}\n </Typography>;\n } else if (typeof previousValueInPath === \"boolean\") {\n return <Typography variant={\"caption\"} color={\"secondary\"} className=\"line-through\">\n {previousValueInPath ? \"true\" : \"false\"}\n </Typography>;\n } else {\n return <Tooltip\n side={\"left\"}\n title={<div className={\"flex flex-col gap-2\"}>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n Previous value\n </Typography>\n <PropertyPreview\n propertyKey={propertyKey as string}\n value={previousValueInPath as never}\n property={childProperty as Property}\n size={\"small\"}/>\n </div>}>\n <ArrowLeftIcon size={iconSize.smallest} color={\"disabled\"} className={\"mb-1\"}/>\n </Tooltip>\n }\n}\n\n/**\n * Displays a single entity history revision entry.\n * Adapted from the entity_history plugin — now reads from backend API data.\n */\nexport function EntityHistoryEntry({\n actions,\n hover,\n collection,\n size,\n entry\n}: EntityHistoryEntryProps) {\n\n const authController = useAuthController();\n\n const changedFields = entry.changed_fields;\n const previousValues = entry.previous_values;\n const updatedOn = new Date(entry.updated_at);\n const updatedBy = entry.updated_by;\n\n // Resolve user display\n const currentUser = authController.user;\n const userDisplay = updatedBy === currentUser?.uid\n ? currentUser\n : undefined;\n\n return <div className={\"w-full flex flex-col gap-2 mt-4\"}>\n <div className={\"ml-4 flex items-center gap-4\"}>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n {updatedOn.toLocaleString()}\n </Typography>\n <Chip size={\"small\"}>\n {entry.action}\n </Chip>\n {!userDisplay && updatedBy && <Chip size={\"small\"}>{updatedBy}</Chip>}\n {userDisplay && <UserChip user={userDisplay}/>}\n </div>\n <div\n className={cls(\n \"bg-white dark:bg-surface-900\",\n \"min-h-[44px]\",\n \"w-full\",\n \"items-center\",\n hover ? \"hover:bg-surface-accent-50 dark:hover:bg-surface-800\" : \"\",\n size === \"small\" ? \"p-1\" : \"px-2 py-1\",\n \"flex border rounded-lg\",\n defaultBorderMixin\n )}>\n\n {actions}\n\n <div className={\"flex flex-col grow w-full m-1 shrink min-w-0\"}>\n\n {changedFields && collection && changedFields.map((key: string) => {\n const childProperty = getPropertyInPath(collection.properties, key);\n const valueInPath = entry.values ? getValueInPath(entry.values, key) : undefined;\n const previousValueInPath = previousValues ? getValueInPath(previousValues, key) : undefined;\n\n const element = childProperty\n ? <PropertyPreview\n propertyKey={key}\n value={valueInPath as never}\n property={childProperty as Property}\n size={\"small\"}/>\n : <Typography variant={\"body2\"}>\n {typeof valueInPath === \"string\" ? valueInPath : JSON.stringify(valueInPath)}\n </Typography>;\n\n return (\n <div key={\"ref_prev_\" + key}\n className=\"flex w-full my-1 items-center\">\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className=\"min-w-[140px] md:min-w-[200px] w-1/5 pr-8 overflow-hidden text-ellipsis text-right\">\n {key}\n </Typography>\n <div className=\"w-4/5\">\n {previousValueInPath !== undefined && !deepEqual(previousValueInPath, valueInPath) &&\n <PreviousValueView previousValueInPath={previousValueInPath}\n childProperty={childProperty as Property}\n propertyKey={key}/>\n }\n {element}\n </div>\n </div>\n );\n })}\n\n {(!changedFields || changedFields.length === 0) && (\n <Typography variant={\"caption\"} color={\"secondary\"} className=\"ml-4\">\n {entry.action === \"create\" ? \"Entity created\" :\n entry.action === \"delete\" ? \"Entity deleted\" : \"No field changes recorded\"}\n </Typography>\n )}\n\n </div>\n\n </div>\n </div>;\n}\n","\nimport type { EntityCustomViewParams } from \"@rebasepro/types\";\nimport { useRef, useEffect } from \"react\";\nimport { cls, IconButton, Label, Tooltip, Typography } from \"@rebasepro/ui\";\nimport { HistoryIcon } from \"lucide-react\";\nimport { EntityHistoryEntry } from \"./EntityHistoryEntry\";\nimport { useSnackbarController, useAuthController } from \"@rebasepro/core\";\nimport { ConfirmationDialog } from \"@rebasepro/core\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport { useState } from \"react\";\nimport { useEntityHistory } from \"../../index\";\n\n/**\n * Entity history tab view. Shows a paginated list of entity revisions\n * fetched from the backend API. Supports infinite scroll and revert.\n */\nexport function EntityHistoryView<M extends Record<string, unknown>>({\n entity,\n collection,\n formContext\n}: EntityCustomViewParams<M>) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const dirty = formContext?.formex.dirty;\n\n const slug = collection.slug;\n const entityId = entity?.id;\n\n const {\n entries,\n isLoading,\n hasMore,\n loadMore,\n revert\n } = useEntityHistory({\n slug,\n entityId,\n enabled: !!entityId,\n pageSize: 10\n });\n\n const [revertHistoryId, setRevertHistoryId] = useState<string | undefined>();\n const [isReverting, setIsReverting] = useState(false);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const loadMoreRef = useRef<HTMLDivElement>(null);\n\n // Intersection observer for infinite scroll\n useEffect(() => {\n const currentContainer = containerRef.current;\n const currentLoadMore = loadMoreRef.current;\n\n if (!currentContainer || !currentLoadMore || !hasMore || isLoading) return;\n\n const observer = new IntersectionObserver(\n (observerEntries) => {\n if (observerEntries[0].isIntersecting && hasMore && !isLoading) {\n loadMore();\n }\n },\n {\n root: currentContainer,\n rootMargin: \"0px 0px 200px 0px\",\n threshold: 0.01\n }\n );\n\n observer.observe(currentLoadMore);\n\n return () => observer.disconnect();\n }, [hasMore, isLoading, entries.length, loadMore]);\n\n if (!entity) {\n return <div className=\"flex items-center justify-center h-full\">\n <Label>HistoryIcon is only available for existing entities</Label>\n </div>;\n }\n\n async function doRevert(historyId: string) {\n setIsReverting(true);\n try {\n const revertedValues = await revert(historyId);\n setRevertHistoryId(undefined);\n\n // Reset the form with the reverted values so the UI updates\n // immediately without requiring a page refresh.\n if (formContext?.formex?.resetForm && revertedValues) {\n formContext.formex.resetForm({\n values: revertedValues as M,\n submitCount: 0,\n touched: {}\n });\n }\n\n snackbarController.open({\n message: \"Reverted to selected version\",\n type: \"info\"\n });\n } catch (error) {\n console.error(\"Error reverting entity:\", error);\n snackbarController.open({\n message: \"Error reverting entity\",\n type: \"error\"\n });\n } finally {\n setIsReverting(false);\n }\n }\n\n const revertEntry = revertHistoryId\n ? entries.find(e => e.id === revertHistoryId)\n : undefined;\n\n return <div\n ref={containerRef}\n className={cls(\"relative flex-1 h-full overflow-auto w-full flex flex-col gap-4 p-8\")}>\n <div className=\"flex flex-col gap-2 max-w-6xl mx-auto w-full\">\n\n <Typography variant={\"h5\"} className={\"mt-24 ml-4\"}>\n HistoryIcon\n </Typography>\n\n {isLoading && entries.length === 0 && (\n <div className=\"flex flex-col gap-4 mt-8 ml-4\">\n {[1, 2, 3].map(i => (\n <div key={i} className=\"flex flex-col gap-2 animate-pulse\">\n <div className=\"h-4 w-48 bg-surface-200 dark:bg-surface-700 rounded\"/>\n <div className=\"h-12 w-full bg-surface-100 dark:bg-surface-900 rounded-lg border border-surface-200 dark:border-surface-700\"/>\n </div>\n ))}\n </div>\n )}\n\n {!isLoading && entries.length === 0 && <>\n <Label className={\"ml-4 mt-8\"}>\n No history available\n </Label>\n <Typography variant={\"caption\"} className={\"ml-4\"}>\n When you save an entity, a new version is created and stored in the history.\n </Typography>\n </>}\n\n {entries.map((entry) => (\n <div key={entry.id} className=\"flex flex-cols gap-2 w-full\">\n <EntityHistoryEntry\n entry={entry}\n collection={collection}\n size={\"medium\"}\n actions={\n <Tooltip title={\"Revert to this version\"}\n className={\"m-2 grow-0 self-start\"}>\n <IconButton\n onClick={() => {\n if (dirty) {\n snackbarController.open({\n message: \"Please save or discard your changes before reverting\",\n type: \"warning\"\n });\n } else {\n setRevertHistoryId(entry.id);\n }\n }}>\n <HistoryIcon/>\n </IconButton>\n </Tooltip>\n }\n />\n </div>\n ))}\n\n {/* Load more sentinel */}\n {entries.length > 0 && (\n <div ref={loadMoreRef} className=\"py-4 text-center\">\n {isLoading && <Label>Loading more...</Label>}\n {!hasMore && entries.length > 10 && <Label>No more history available</Label>}\n </div>\n )}\n </div>\n\n <ErrorBoundary>\n <ConfirmationDialog\n open={Boolean(revertHistoryId)}\n onAccept={() => {\n if (revertHistoryId) doRevert(revertHistoryId);\n }}\n onCancel={() => setRevertHistoryId(undefined)}\n title={<Typography variant={\"subtitle2\"}>Revert data to this version?</Typography>}\n body={revertEntry\n ? <div className=\"p-4\">\n <Typography variant={\"caption\"} color={\"secondary\"}>\n This will save the entity with the values from{\" \"}\n {new Date(revertEntry.updated_at).toLocaleString()}.\n A new history entry will be created for the revert.\n </Typography>\n </div>\n : null\n }\n />\n </ErrorBoundary>\n </div>;\n}\n"],"names":["UserChip","t0","$","_c","user","t1","email","uid","t2","displayName","photoURL","t3","t4","t5","t6","deepEqual","a","b","Array","isArray","length","every","item","i","aObj","bObj","aKeys","Object","keys","bKeys","key","PreviousValueView","previousValueInPath","childProperty","propertyKey","Symbol","for","iconSize","smallest","t7","EntityHistoryEntry","actions","hover","collection","size","entry","authController","useAuthController","changedFields","changed_fields","previousValues","previous_values","T0","updatedBy","userDisplay","updated_at","updated_by","updatedOn","Date","currentUser","undefined","Typography","toLocaleString","action","t8","t9","t10","t11","t12","t13","cls","defaultBorderMixin","t14","values","map","getPropertyInPath","properties","valueInPath","getValueInPath","element","JSON","stringify","t15","t16","t17","t18","EntityHistoryView","entity","formContext","snackbarController","useSnackbarController","dirty","formex","slug","entityId","id","entries","isLoading","hasMore","loadMore","revert","useEntityHistory","enabled","pageSize","revertHistoryId","setRevertHistoryId","useState","isReverting","setIsReverting","containerRef","useRef","loadMoreRef","useEffect","currentContainer","current","currentLoadMore","observer","IntersectionObserver","observerEntries","isIntersecting","root","rootMargin","threshold","observe","disconnect","doRevert","historyId","revertedValues","resetForm","submitCount","touched","open","message","type","error","console","revertEntry","find","e","Boolean"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { I as ImportCollectionAction } from "./ImportCollectionAction-
|
|
2
|
-
import { a, P } from "./ImportCollectionAction-
|
|
1
|
+
import { I as ImportCollectionAction } from "./ImportCollectionAction-DGa_SF_8.js";
|
|
2
|
+
import { a, P } from "./ImportCollectionAction-DGa_SF_8.js";
|
|
3
3
|
export {
|
|
4
4
|
ImportCollectionAction,
|
|
5
5
|
a as ImportDataPreview,
|
|
6
6
|
P as PropertySelectEntry
|
|
7
7
|
};
|
|
8
|
-
//# sourceMappingURL=index-
|
|
8
|
+
//# sourceMappingURL=index-DKlrVD1m.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DKlrVD1m.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as ExportCollectionAction } from "./ExportCollectionAction-
|
|
2
|
-
import { B, d, a, b, g, c } from "./ExportCollectionAction-
|
|
1
|
+
import { E as ExportCollectionAction } from "./ExportCollectionAction-CUwJg4F9.js";
|
|
2
|
+
import { B, d, a, b, g, c } from "./ExportCollectionAction-CUwJg4F9.js";
|
|
3
3
|
export {
|
|
4
4
|
B as BasicExportAction,
|
|
5
5
|
ExportCollectionAction,
|
|
@@ -9,4 +9,4 @@ export {
|
|
|
9
9
|
g as getEntityCSVExportableData,
|
|
10
10
|
c as getEntityJsonExportableData
|
|
11
11
|
};
|
|
12
|
-
//# sourceMappingURL=index-
|
|
12
|
+
//# sourceMappingURL=index-kHJXfLNI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-kHJXfLNI.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { k as useCMSContext, e as useCollectionRegistryController, n as useEntitySelectionDialog, R as ReferencePreview, j as useUrlController, o as Drawer, A as AppBar, S as SideDialogs, p as Scaffold, q as RebaseNavigation, r as RebaseRouteDefs, l as PropertyPreview, s as useCollectionEditorController } from "./util-
|
|
2
|
-
import { t, v, w, x, y, z, B, C, F, G, H, J, K, L, M, N, O, D, Q, T, U, V, W, X, E, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, I, a8, b, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, P, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, h, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, d, aW, aX, aY, aZ, a_, a, g, c, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, i, bf, bg, bh, bi, bj, bk, u, bl, m, bm, bn, f, bo, bp, bq, br, bs } from "./util-
|
|
1
|
+
import { k as useCMSContext, e as useCollectionRegistryController, n as useEntitySelectionDialog, R as ReferencePreview, j as useUrlController, o as Drawer, A as AppBar, S as SideDialogs, p as Scaffold, q as RebaseNavigation, r as RebaseRouteDefs, l as PropertyPreview, s as useCollectionEditorController } from "./util-CwLmSpGp.js";
|
|
2
|
+
import { t, v, w, x, y, z, B, C, F, G, H, J, K, L, M, N, O, D, Q, T, U, V, W, X, E, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, I, a8, b, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, P, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, h, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, d, aW, aX, aY, aZ, a_, a, g, c, a$, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, i, bf, bg, bh, bi, bj, bk, u, bl, m, bm, bn, f, bo, bp, bq, br, bs } from "./util-CwLmSpGp.js";
|
|
3
3
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
4
4
|
import { c as c2 } from "react-compiler-runtime";
|
|
5
5
|
import { Button, cls, CircularProgressCenter, ErrorBoundary } from "@rebasepro/ui";
|
|
@@ -25,8 +25,8 @@ import { useLocation, Outlet } from "react-router-dom";
|
|
|
25
25
|
import "xlsx";
|
|
26
26
|
import "@rebasepro/schema-inference";
|
|
27
27
|
import { u as u2 } from "./useEntityHistory-UVsSclfZ.js";
|
|
28
|
-
import { I as I2, a as a10, P as P2 } from "./ImportCollectionAction-
|
|
29
|
-
import { B as B2, E as E2, d as d2, a as a11, b as b10, g as g2, c as c3 } from "./ExportCollectionAction-
|
|
28
|
+
import { I as I2, a as a10, P as P2 } from "./ImportCollectionAction-DGa_SF_8.js";
|
|
29
|
+
import { B as B2, E as E2, d as d2, a as a11, b as b10, g as g2, c as c3 } from "./ExportCollectionAction-CUwJg4F9.js";
|
|
30
30
|
function resolveNavigationFrom({
|
|
31
31
|
path,
|
|
32
32
|
context
|
|
@@ -244,19 +244,20 @@ function AdminModeSyncer({
|
|
|
244
244
|
return null;
|
|
245
245
|
}
|
|
246
246
|
function RebaseCMS(t0) {
|
|
247
|
-
const $2 = c2(
|
|
247
|
+
const $2 = c2(10);
|
|
248
248
|
const {
|
|
249
249
|
collections,
|
|
250
250
|
homePage,
|
|
251
251
|
entityViews,
|
|
252
252
|
entityActions,
|
|
253
253
|
plugins,
|
|
254
|
-
collectionEditor
|
|
254
|
+
collectionEditor,
|
|
255
|
+
navigationGroupMappings
|
|
255
256
|
} = t0;
|
|
256
257
|
const dispatch = useRebaseRegistryDispatch();
|
|
257
258
|
let t1;
|
|
258
259
|
let t2;
|
|
259
|
-
if ($2[0] !== collectionEditor || $2[1] !== collections || $2[2] !== dispatch || $2[3] !== entityActions || $2[4] !== entityViews || $2[5] !== homePage || $2[6] !== plugins) {
|
|
260
|
+
if ($2[0] !== collectionEditor || $2[1] !== collections || $2[2] !== dispatch || $2[3] !== entityActions || $2[4] !== entityViews || $2[5] !== homePage || $2[6] !== navigationGroupMappings || $2[7] !== plugins) {
|
|
260
261
|
t1 = () => {
|
|
261
262
|
dispatch.registerCMS({
|
|
262
263
|
collections,
|
|
@@ -264,23 +265,25 @@ function RebaseCMS(t0) {
|
|
|
264
265
|
entityViews,
|
|
265
266
|
entityActions,
|
|
266
267
|
plugins,
|
|
267
|
-
collectionEditor
|
|
268
|
+
collectionEditor,
|
|
269
|
+
navigationGroupMappings
|
|
268
270
|
});
|
|
269
271
|
return () => dispatch.unregisterCMS();
|
|
270
272
|
};
|
|
271
|
-
t2 = [dispatch, collections, homePage, entityViews, entityActions, plugins, collectionEditor];
|
|
273
|
+
t2 = [dispatch, collections, homePage, entityViews, entityActions, plugins, collectionEditor, navigationGroupMappings];
|
|
272
274
|
$2[0] = collectionEditor;
|
|
273
275
|
$2[1] = collections;
|
|
274
276
|
$2[2] = dispatch;
|
|
275
277
|
$2[3] = entityActions;
|
|
276
278
|
$2[4] = entityViews;
|
|
277
279
|
$2[5] = homePage;
|
|
278
|
-
$2[6] =
|
|
279
|
-
$2[7] =
|
|
280
|
-
$2[8] =
|
|
280
|
+
$2[6] = navigationGroupMappings;
|
|
281
|
+
$2[7] = plugins;
|
|
282
|
+
$2[8] = t1;
|
|
283
|
+
$2[9] = t2;
|
|
281
284
|
} else {
|
|
282
|
-
t1 = $2[
|
|
283
|
-
t2 = $2[
|
|
285
|
+
t1 = $2[8];
|
|
286
|
+
t2 = $2[9];
|
|
284
287
|
}
|
|
285
288
|
useLayoutEffect(t1, t2);
|
|
286
289
|
return null;
|
|
@@ -292,6 +295,7 @@ function RebaseAuthGate(t0) {
|
|
|
292
295
|
} = t0;
|
|
293
296
|
const registry = useRebaseRegistry();
|
|
294
297
|
const authController = useAuthController();
|
|
298
|
+
console.log("[AuthGate] initialLoading:", authController?.initialLoading, "user:", authController?.user?.email ?? null);
|
|
295
299
|
if (authController?.initialLoading) {
|
|
296
300
|
let t12;
|
|
297
301
|
if ($2[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/hooks/useResolvedNavigationFrom.tsx","../src/components/ReferenceWidget.tsx","../src/components/AdminModeSyncer.tsx","../src/components/RebaseCMS.tsx","../src/components/RebaseAuthGate.tsx","../src/components/RebaseLayout.tsx","../src/components/RebaseShell.tsx","../src/preview/property_previews/ArrayOfMapsPreview.tsx","../src/collection_editor/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import type { EntityCollection, EntityCustomView } from \"@rebasepro/types\";\nimport { Entity, RebaseContext, User } from \"@rebasepro/types\";\nimport { useEffect, useState, useMemo } from \"react\";\nimport { getNavigationEntriesFromPath } from \"@rebasepro/common\";\nimport { useCMSContext } from \"./useCMSContext\";\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport type ResolvedNavigationEntry<M extends Record<string, unknown>> =\n | ResolvedNavigationEntity<M>\n | ResolvedNavigationCollection<M>\n | ResolvedNavigationEntityCustom<M>;\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport interface ResolvedNavigationEntity<M extends Record<string, unknown>> {\n type: \"entity\";\n entity: Entity<M>;\n entityId: string | number;\n path: string;\n parentCollection: EntityCollection<M>;\n}\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport interface ResolvedNavigationCollection<M extends Record<string, unknown>> {\n type: \"collection\";\n path: string;\n collection: EntityCollection<M>;\n}\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\ninterface ResolvedNavigationEntityCustom<M extends Record<string, unknown>> {\n type: \"custom_view\";\n path: string;\n view: EntityCustomView<M>;\n}\n\n/**\n * Use this function to retrieve an array of navigation entries (resolved\n * collection, entity or entity custom_view) for the given path. You need to pass the app context\n * that you receive in different callbacks, such as the save hooks.\n *\n * It will take into account the `navigation` provided at the `Rebase` level.\n *\n * @param path\n * @param context\n * @group Hooks and utilities\n */\nexport function resolveNavigationFrom<M extends Record<string, unknown>, USER extends User>({\n path,\n context\n}: {\n path: string,\n context: RebaseContext<USER>\n}): Promise<ResolvedNavigationEntry<M>[]> {\n\n const data = context.data;\n const { navigationStateController, collectionRegistryController } = context;\n\n if (!navigationStateController || !collectionRegistryController) {\n throw Error(\"Calling resolveNavigationFrom, but main navigation has not yet been initialised\");\n }\n\n const navigationEntries = getNavigationEntriesFromPath({\n path,\n collections: collectionRegistryController.collections ?? []\n });\n\n const resultPromises: Promise<ResolvedNavigationEntry<any>>[] = navigationEntries\n .map((entry) => {\n if (entry.type === \"collection\") {\n return Promise.resolve(entry);\n } else if (entry.type === \"entity\") {\n const collection = collectionRegistryController.getCollection(entry.slug);\n if (!collection) {\n throw Error(`No collection defined in the navigation for the entity with path ${entry.slug}`);\n }\n return data.collection(entry.slug).findById(entry.entityId)\n .then((entity) => {\n if (!entity) return undefined;\n return { ...entry,\nentity };\n });\n } else if (entry.type === \"custom_view\") {\n return Promise.resolve(entry);\n } else {\n throw Error(\"Unmapped element in useEntitiesFromPath\");\n }\n })\n .filter(v => Boolean(v)) as Promise<ResolvedNavigationEntry<any>>[];\n\n return Promise.all(resultPromises);\n}\n\n/**\n * @group Hooks and utilities\n */\nexport interface NavigationFromProps {\n path: string;\n}\n\n/**\n * @group Hooks and utilities\n */\nexport interface NavigationFrom<M extends Record<string, unknown>> {\n data?: ResolvedNavigationEntry<M>[]\n dataLoading: boolean,\n dataLoadingError?: Error\n}\n\n/**\n * Use this hook to retrieve an array of navigation entries (resolved\n * collection or entity) for the given path. You can use this hook\n * in any React component that lives under `Rebase`\n * @group Hooks and utilities\n */\nexport function useResolvedNavigationFrom<M extends Record<string, unknown>>(\n {\n path\n }: NavigationFromProps): NavigationFrom<M> {\n\n const context = useCMSContext();\n const { navigationStateController, collectionRegistryController } = context;\n\n const [data, setData] = useState<ResolvedNavigationEntry<M>[] | undefined>();\n const [dataLoading, setDataLoading] = useState<boolean>(false);\n const [dataLoadingError, setDataLoadingError] = useState<Error | undefined>();\n\n useEffect(() => {\n if (navigationStateController && collectionRegistryController) {\n setDataLoading(true);\n setDataLoadingError(undefined);\n resolveNavigationFrom<M, User>({ path,\ncontext })\n .then(setData)\n .catch((e) => setDataLoadingError(e))\n .finally(() => setDataLoading(false));\n }\n\n }, [path, context]);\n\n return useMemo(() => {\n if (!navigationStateController) {\n return { dataLoading: true };\n }\n return { data,\ndataLoading,\ndataLoadingError };\n }, [navigationStateController, data, dataLoading, dataLoadingError]);\n}\n","import { useEntitySelectionDialog } from \"../hooks/useEntitySelectionDialog\";\nimport type { EntityCollection } from \"@rebasepro/types\";\nimport React, { useCallback, useMemo } from \"react\";\n\nimport { Entity, EntityReference, FilterValues } from \"@rebasepro/types\";\nimport type { PreviewSize } from \"../types/components/PropertyPreviewProps\";\nimport { getReferenceFrom } from \"@rebasepro/common\";\nimport { ReferencePreview } from \"../preview\";\nimport { Button, cls } from \"@rebasepro/ui\";\nimport { useCollectionRegistryController } from \"../index\";\n\nexport type ReferenceWidgetProps<M extends Record<string, unknown>> = {\n name?: string,\n multiselect?: boolean,\n value: EntityReference | EntityReference[] | null,\n onReferenceSelected?: (params: {\n reference: EntityReference | null,\n entity: Entity<M> | null\n }) => void,\n onMultipleReferenceSelected?: (params: {\n references: EntityReference[] | null,\n entities: Entity<M>[] | null\n }) => void,\n path: string,\n disabled?: boolean,\n previewProperties?: string[];\n /**\n * Allow selection of entities that pass the given filter only.\n */\n fixedFilter?: FilterValues<string>;\n size: PreviewSize;\n className?: string;\n includeId?: boolean;\n includeEntityLink?: boolean;\n};\n\n/**\n * This field allows selecting reference/s.\n */\nexport function ReferenceWidget<M extends Record<string, unknown>>({\n name,\n multiselect = false,\n path,\n disabled,\n value,\n onReferenceSelected,\n onMultipleReferenceSelected,\n previewProperties,\n fixedFilter,\n size,\n className,\n includeId,\n includeEntityLink\n}: ReferenceWidgetProps<M>) {\n\n const collectionRegistryController = useCollectionRegistryController();\n\n const collection: EntityCollection | undefined = useMemo(() => {\n return collectionRegistryController.getCollection(path);\n }, [path, collectionRegistryController.getCollection]);\n\n const onSingleEntitySelected = useCallback((entity: Entity<M> | null) => {\n if (disabled)\n return;\n if (onReferenceSelected) {\n const reference = entity ? getReferenceFrom(entity) : null;\n onReferenceSelected?.({\n reference,\n entity\n });\n }\n }, [disabled, onReferenceSelected]);\n\n const onMultipleEntitiesSelected = useCallback((entities: Entity<M>[]) => {\n if (disabled)\n return;\n if (onMultipleReferenceSelected) {\n const references = entities ? entities.map(e => getReferenceFrom(e)) : null;\n onMultipleReferenceSelected({\n references,\n entities\n });\n }\n }, [disabled, onReferenceSelected]);\n\n const referenceDialogController = useEntitySelectionDialog({\n multiselect,\n path,\n collection,\n onSingleEntitySelected,\n onMultipleEntitiesSelected,\n fixedFilter\n }\n );\n\n const clearValue = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (multiselect) {\n onMultipleEntitiesSelected([]);\n } else {\n onSingleEntitySelected(null);\n }\n }, [onReferenceSelected]);\n\n let child: React.ReactNode;\n\n const onEntryClick = () => {\n if (disabled)\n return;\n referenceDialogController.open();\n };\n\n if (Array.isArray(value)) {\n child = <div className={\"flex flex-col gap-4\"}>\n {value.map((ref, index) => {\n return <ReferencePreview\n key={`reference_preview_${index}`}\n onClick={onEntryClick}\n reference={ref}\n disabled={disabled}\n previewProperties={previewProperties}\n size={size}\n includeId={includeId}\n includeEntityLink={includeEntityLink}/>\n })}\n </div>\n } else if (value?.isEntityReference && value?.isEntityReference()) {\n child = <ReferencePreview\n reference={value}\n onClick={onEntryClick}\n disabled={disabled}\n previewProperties={previewProperties}\n size={size}\n includeId={includeId}\n includeEntityLink={includeEntityLink}/>\n\n }\n return <div className={cls(\"text-sm font-medium\",\n \"min-w-80 flex flex-col gap-4\",\n \"relative transition-colors duration-200 ease-in rounded-xs font-medium\",\n disabled ? \"bg-opacity-50\" : \"hover:bg-opacity-75\",\n \"dark:text-white/50 text-text-primary/50 dark:text-text-primary-dark/50 dark:text-white/50\",\n className\n )}>\n\n {child}\n {!value && <div className=\"justify-center text-left\">\n <Button disabled={disabled}\n onClick={onEntryClick}>\n Edit {name}\n </Button>\n </div>}\n\n </div>;\n}\n","import type { AppView } from \"@rebasepro/types\";\nimport React, { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n;\nimport { useUrlController } from \"../hooks\";\nimport { useAdminModeController } from \"@rebasepro/core\";\nexport interface AdminModeSyncerProps {\n /**\n * Map of views designated as 'Studio' views.\n * Navigating to any of these views will automatically flag the admin mode as \"studio\".\n */\n devViews?: AppView[];\n}\n\n/**\n * A highly customizable utility component that observes react-router routes and\n * actively shifts the internal Rebase `adminModeController` context to match\n * the user's active window segment (e.g., Content vs Studio mode).\n *\n * Placing this anywhere safely inside the Rebase layout automatically triggers\n * UI mode synchronization.\n */\nexport function AdminModeSyncer({ devViews }: AdminModeSyncerProps) {\n const location = useLocation();\n const urlController = useUrlController();\n const adminModeController = useAdminModeController();\n\n // Keep track of the current mode using a ref to avoid adding it to the dependency array\n const currentModeRef = React.useRef(adminModeController.mode);\n currentModeRef.current = adminModeController.mode;\n\n // Stable ref for setMode so it doesn't trigger the effect\n const setModeRef = React.useRef(adminModeController.setMode);\n setModeRef.current = adminModeController.setMode;\n\n useEffect(() => {\n const path = location.pathname;\n const isContentRoute = urlController.isUrlCollectionPath(path) || path === urlController.basePath;\n\n // Check both devViews slugs AND the studio home path (/s or basePath/s)\n const studioHomePath = urlController.basePath === \"/\" ? \"/s\" : `${urlController.basePath}/s`;\n const isStudioRoute = path === studioHomePath || path.startsWith(studioHomePath + \"/\") || devViews?.some(view => {\n const viewPath = urlController.buildAppUrlPath(view.slug);\n return path.startsWith(`${viewPath}/`) || path === viewPath;\n });\n\n if (isStudioRoute && currentModeRef.current !== \"studio\") {\n setModeRef.current(\"studio\");\n } else if (isContentRoute && currentModeRef.current !== \"content\") {\n setModeRef.current(\"content\");\n }\n }, [location.pathname, urlController, devViews]);\n\n return null;\n}\n\n","import React, { useLayoutEffect } from \"react\";\nimport { useRebaseRegistryDispatch } from \"@rebasepro/core\";\nimport type { RebaseCMSConfig } from \"@rebasepro/types\";\n\n/**\n * Declarative component to configure the CMS in Rebase.\n * Renders nothing — purely registers config into the RebaseRegistry.\n *\n * When `collectionEditor` is provided, the built-in visual schema editor\n * is auto-wired as a native feature (slots, provider, Studio view) without\n * needing any external plugin.\n */\nexport function RebaseCMS({ collections, homePage, entityViews, entityActions, plugins, collectionEditor }: RebaseCMSConfig) {\n const dispatch = useRebaseRegistryDispatch();\n\n useLayoutEffect(() => {\n dispatch.registerCMS({ collections,\nhomePage,\nentityViews,\nentityActions,\nplugins,\ncollectionEditor });\n return () => dispatch.unregisterCMS();\n }, [dispatch, collections, homePage, entityViews, entityActions, plugins, collectionEditor]);\n\n return null;\n}\n","import React from \"react\";\nimport {\n useRebaseRegistry,\n useAuthController\n} from \"@rebasepro/core\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { LoginView } from \"@rebasepro/core\";\n\n/**\n * Auth gate component that handles the authentication flow.\n *\n * - Shows a loading spinner while `authController.initialLoading` is true.\n * - Shows the login view when no user is authenticated.\n * - Renders `children` when a user is authenticated.\n *\n * **Independently usable**: Use this alone when you want auth gating\n * without the full CMS layout or navigation.\n *\n * @example\n * ```tsx\n * <RebaseAuthGate>\n * <MyCustomApp />\n * </RebaseAuthGate>\n * ```\n */\nexport function RebaseAuthGate({ children }: { children: React.ReactNode }) {\n const registry = useRebaseRegistry();\n const authController = useAuthController();\n\n if (authController?.initialLoading) {\n return <CircularProgressCenter size={\"large\"}/>;\n }\n\n if (!authController?.user) {\n const ActiveLoginView = registry.authConfig?.loginView ?? (\n <LoginView authController={authController as any}/>\n );\n return <>{ActiveLoginView}</>;\n }\n\n return <>{children}</>;\n}\n","import React from \"react\";\nimport { Outlet } from \"react-router-dom\";\nimport {\n useAdminModeController,\n useRebaseRegistry\n} from \"@rebasepro/core\";\n\nimport { Scaffold } from \"./app/Scaffold\";\nimport { AppBar } from \"./app/AppBar\";\nimport { Drawer } from \"./app/Drawer\";\nimport { SideDialogs } from \"./SideDialogs\";\nimport { AdminModeSyncer } from \"./AdminModeSyncer\";\nimport type { AppView } from \"@rebasepro/types\";\n\nexport interface RebaseLayoutProps {\n /** Title shown in the drawer. */\n title?: string;\n /** Custom AppBar to override the default. */\n appBar?: React.ReactNode;\n /** Custom Drawer to override the default. */\n drawer?: React.ReactNode;\n /** Whether to auto-open the drawer on load. */\n autoOpenDrawer?: boolean;\n /** Dev views passed to AdminModeSyncer (resolved from RebaseNavigation). */\n devViews?: AppView[];\n}\n\n/**\n * Layout layer — provides the Scaffold, AppBar, Drawer, and SideDialogs.\n *\n * Wraps the route outlet with the standard Rebase admin layout.\n * Override individual pieces (appBar, drawer) via props.\n *\n * **Independently usable**: Use this when you want the Rebase layout\n * without its default route definitions.\n *\n * @example\n * ```tsx\n * <RebaseLayout title=\"My Admin\">\n * <Route path=\"/\" element={<MyHomePage />} />\n * <Route path=\"/custom\" element={<CustomView />} />\n * </RebaseLayout>\n * ```\n */\nexport function RebaseLayout(props: RebaseLayoutProps) {\n const {\n title = \"Rebase\",\n appBar,\n drawer,\n autoOpenDrawer = false,\n devViews = []\n } = props;\n\n const adminModeController = useAdminModeController();\n\n const ActiveAppBar = appBar ?? <AppBar/>;\n const ActiveDrawer = drawer ?? (\n <Drawer\n title={title}\n logoDestination={adminModeController.mode === \"studio\" ? \"/s\" : \"/\"}\n />\n );\n\n return (\n <Scaffold autoOpenDrawer={autoOpenDrawer}>\n <AdminModeSyncer devViews={devViews}/>\n {ActiveAppBar}\n {ActiveDrawer}\n <Outlet/>\n <SideDialogs/>\n </Scaffold>\n );\n}\n","import React, { useMemo } from \"react\";\nimport {\n useRebaseRegistry\n} from \"@rebasepro/core\";\n\nimport { RebaseAuthGate } from \"./RebaseAuthGate\";\nimport { RebaseNavigation } from \"./RebaseNavigation\";\nimport { RebaseLayout } from \"./RebaseLayout\";\nimport { RebaseRouteDefs } from \"./RebaseRouteDefs\";\n\nexport interface RebaseShellProps {\n title?: string;\n appBar?: React.ReactNode;\n drawer?: React.ReactNode;\n autoOpenDrawer?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * Convenience component that composes all four CMS layers:\n *\n * ```\n * <RebaseAuthGate>\n * <RebaseNavigation>\n * <RebaseRouteDefs layout={<RebaseLayout>}>\n * {children}\n * </RebaseRouteDefs>\n * </RebaseNavigation>\n * </RebaseAuthGate>\n * ```\n *\n * Each layer is independently usable — see their individual docs.\n * RebaseShell is sugar that composes them all with sensible defaults.\n */\nexport function RebaseShell(props: RebaseShellProps) {\n const {\n title = \"Rebase\",\n appBar,\n drawer,\n autoOpenDrawer = false,\n children\n } = props;\n\n const registry = useRebaseRegistry();\n\n // Compute devViews for the layout's AdminModeSyncer\n const devViews = useMemo(() => {\n return registry.studioConfig?.devViews ?? [];\n }, [registry.studioConfig?.devViews]);\n\n return (\n <RebaseAuthGate>\n <RebaseNavigation>\n <RebaseRouteDefs\n layout={\n <RebaseLayout\n title={title}\n appBar={appBar}\n drawer={drawer}\n autoOpenDrawer={autoOpenDrawer}\n devViews={devViews}\n />\n }\n >\n {children}\n </RebaseRouteDefs>\n </RebaseNavigation>\n </RebaseAuthGate>\n );\n}\n","import type { ArrayProperty, Property } from \"@rebasepro/types\";\nimport React from \"react\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport type { PropertyPreviewProps } from \"../../types/components/PropertyPreviewProps\";\nimport { PropertyPreview } from \"../PropertyPreview\";\n\n/**\n * @group Preview components\n */\nexport function ArrayOfMapsPreview({\n propertyKey,\n value,\n property,\n size\n // entity\n}: PropertyPreviewProps<ArrayProperty>) {\n\n if (Array.isArray(property?.of)) {\n throw Error(\"Using array properties instead of single one in `of` in ArrayProperty\");\n }\n\n if (property?.type !== \"array\" || !property.of || property.of.type !== \"map\")\n throw Error(\"Picked wrong preview component ArrayOfMapsPreview\");\n\n const mapProperty = property.of;\n const properties = mapProperty.properties;\n if (!properties) {\n throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);\n }\n const values = value;\n const previewProperties: string[] | undefined = (mapProperty.ui as any)?.previewProperties;\n\n if (!values) return null;\n\n let mapProperties = previewProperties;\n if (!mapProperties || !mapProperties.length) {\n mapProperties = Object.keys(properties);\n if (size)\n mapProperties = mapProperties.slice(0, 3);\n }\n\n return (\n <div className=\"table-auto text-xs\">\n <div>\n {values &&\n values.map((v: any, index: number) => {\n return (\n <div key={`table_${v}_${index}`}\n className=\"border-b last:border-b-0 py-2\">\n {mapProperties && mapProperties.map(\n (key) => (\n <div\n key={`table-cell-${key as string}`}\n className=\"table-cell\"\n >\n <ErrorBoundary>\n <PropertyPreview\n propertyKey={key as string}\n value={(v)[key]}\n property={properties[key as string] as Property}\n // entity={entity}\n size={\"small\"}/>\n </ErrorBoundary>\n </div>\n )\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useCollectionRegistryController } from \"../_cms_internals\";\nimport { ErrorView, useTranslation } from \"@rebasepro/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@rebasepro/ui\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\nimport { getLastSegment } from \"@rebasepro/common\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const registry = useCollectionRegistryController();\n const path = getLastSegment(pathProp);\n const parentCollectionSlugs = registry.getParentCollectionSlugs(pathProp);\n const parentEntityIds = registry.getParentEntityIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n const { t } = useTranslation();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={t(\"studio_missing_reference_error\", { path })}/>\n <Button className={\"mx-2\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path,\nname: prettifyIdentifier(path) },\n parentCollectionSlugs, parentEntityIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n {t(\"studio_missing_reference_create\")}\n </Button>\n </div>;\n}\n\n"],"names":["resolveNavigationFrom","path","context","data","navigationStateController","collectionRegistryController","Error","navigationEntries","getNavigationEntriesFromPath","collections","resultPromises","map","entry","type","Promise","resolve","collection","getCollection","slug","findById","entityId","then","entity","undefined","filter","v","Boolean","all","useResolvedNavigationFrom","t0","$","_c","useCMSContext","setData","useState","dataLoading","setDataLoading","dataLoadingError","setDataLoadingError","t1","catch","e","finally","t2","useEffect","t3","bb0","t4","Symbol","for","ReferenceWidget","name","multiselect","disabled","value","onReferenceSelected","onMultipleReferenceSelected","previewProperties","fixedFilter","size","className","includeId","includeEntityLink","useCollectionRegistryController","useMemo","onSingleEntitySelected","useCallback","reference","getReferenceFrom","onMultipleEntitiesSelected","entities","references","referenceDialogController","useEntitySelectionDialog","stopPropagation","child","onEntryClick","open","Array","isArray","ref","index","isEntityReference","cls","AdminModeSyncer","devViews","location","useLocation","urlController","useUrlController","adminModeController","useAdminModeController","currentModeRef","React","useRef","mode","current","setModeRef","setMode","pathname","isContentRoute","isUrlCollectionPath","basePath","studioHomePath","isStudioRoute","startsWith","some","view","viewPath","buildAppUrlPath","RebaseCMS","homePage","entityViews","entityActions","plugins","collectionEditor","dispatch","useRebaseRegistryDispatch","registerCMS","unregisterCMS","useLayoutEffect","RebaseAuthGate","children","registry","useRebaseRegistry","authController","useAuthController","initialLoading","user","authConfig","loginView","ActiveLoginView","RebaseLayout","props","title","appBar","drawer","autoOpenDrawer","ActiveAppBar","t5","ActiveDrawer","t6","t7","t8","t9","RebaseShell","studioConfig","ArrayOfMapsPreview","propertyKey","property","of","mapProperty","properties","values","ui","mapProperties","length","slice","key","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionSlugs","parentCollectionSlugs","getParentEntityIds","parentEntityIds","useCollectionEditorController","t","useTranslation","T0","ErrorView","createCollection","initialValues","prettifyIdentifier","redirect","sourceClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/hooks/useResolvedNavigationFrom.tsx","../src/components/ReferenceWidget.tsx","../src/components/AdminModeSyncer.tsx","../src/components/RebaseCMS.tsx","../src/components/RebaseAuthGate.tsx","../src/components/RebaseLayout.tsx","../src/components/RebaseShell.tsx","../src/preview/property_previews/ArrayOfMapsPreview.tsx","../src/collection_editor/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import type { EntityCollection, EntityCustomView } from \"@rebasepro/types\";\nimport { Entity, RebaseContext, User } from \"@rebasepro/types\";\nimport { useEffect, useState, useMemo } from \"react\";\nimport { getNavigationEntriesFromPath } from \"@rebasepro/common\";\nimport { useCMSContext } from \"./useCMSContext\";\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport type ResolvedNavigationEntry<M extends Record<string, unknown>> =\n | ResolvedNavigationEntity<M>\n | ResolvedNavigationCollection<M>\n | ResolvedNavigationEntityCustom<M>;\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport interface ResolvedNavigationEntity<M extends Record<string, unknown>> {\n type: \"entity\";\n entity: Entity<M>;\n entityId: string | number;\n path: string;\n parentCollection: EntityCollection<M>;\n}\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\nexport interface ResolvedNavigationCollection<M extends Record<string, unknown>> {\n type: \"collection\";\n path: string;\n collection: EntityCollection<M>;\n}\n\n/**\n * @see resolveNavigationFrom\n * @group Hooks and utilities\n */\ninterface ResolvedNavigationEntityCustom<M extends Record<string, unknown>> {\n type: \"custom_view\";\n path: string;\n view: EntityCustomView<M>;\n}\n\n/**\n * Use this function to retrieve an array of navigation entries (resolved\n * collection, entity or entity custom_view) for the given path. You need to pass the app context\n * that you receive in different callbacks, such as the save hooks.\n *\n * It will take into account the `navigation` provided at the `Rebase` level.\n *\n * @param path\n * @param context\n * @group Hooks and utilities\n */\nexport function resolveNavigationFrom<M extends Record<string, unknown>, USER extends User>({\n path,\n context\n}: {\n path: string,\n context: RebaseContext<USER>\n}): Promise<ResolvedNavigationEntry<M>[]> {\n\n const data = context.data;\n const { navigationStateController, collectionRegistryController } = context;\n\n if (!navigationStateController || !collectionRegistryController) {\n throw Error(\"Calling resolveNavigationFrom, but main navigation has not yet been initialised\");\n }\n\n const navigationEntries = getNavigationEntriesFromPath({\n path,\n collections: collectionRegistryController.collections ?? []\n });\n\n const resultPromises: Promise<ResolvedNavigationEntry<any>>[] = navigationEntries\n .map((entry) => {\n if (entry.type === \"collection\") {\n return Promise.resolve(entry);\n } else if (entry.type === \"entity\") {\n const collection = collectionRegistryController.getCollection(entry.slug);\n if (!collection) {\n throw Error(`No collection defined in the navigation for the entity with path ${entry.slug}`);\n }\n return data.collection(entry.slug).findById(entry.entityId)\n .then((entity) => {\n if (!entity) return undefined;\n return { ...entry,\nentity };\n });\n } else if (entry.type === \"custom_view\") {\n return Promise.resolve(entry);\n } else {\n throw Error(\"Unmapped element in useEntitiesFromPath\");\n }\n })\n .filter(v => Boolean(v)) as Promise<ResolvedNavigationEntry<any>>[];\n\n return Promise.all(resultPromises);\n}\n\n/**\n * @group Hooks and utilities\n */\nexport interface NavigationFromProps {\n path: string;\n}\n\n/**\n * @group Hooks and utilities\n */\nexport interface NavigationFrom<M extends Record<string, unknown>> {\n data?: ResolvedNavigationEntry<M>[]\n dataLoading: boolean,\n dataLoadingError?: Error\n}\n\n/**\n * Use this hook to retrieve an array of navigation entries (resolved\n * collection or entity) for the given path. You can use this hook\n * in any React component that lives under `Rebase`\n * @group Hooks and utilities\n */\nexport function useResolvedNavigationFrom<M extends Record<string, unknown>>(\n {\n path\n }: NavigationFromProps): NavigationFrom<M> {\n\n const context = useCMSContext();\n const { navigationStateController, collectionRegistryController } = context;\n\n const [data, setData] = useState<ResolvedNavigationEntry<M>[] | undefined>();\n const [dataLoading, setDataLoading] = useState<boolean>(false);\n const [dataLoadingError, setDataLoadingError] = useState<Error | undefined>();\n\n useEffect(() => {\n if (navigationStateController && collectionRegistryController) {\n setDataLoading(true);\n setDataLoadingError(undefined);\n resolveNavigationFrom<M, User>({ path,\ncontext })\n .then(setData)\n .catch((e) => setDataLoadingError(e))\n .finally(() => setDataLoading(false));\n }\n\n }, [path, context]);\n\n return useMemo(() => {\n if (!navigationStateController) {\n return { dataLoading: true };\n }\n return { data,\ndataLoading,\ndataLoadingError };\n }, [navigationStateController, data, dataLoading, dataLoadingError]);\n}\n","import { useEntitySelectionDialog } from \"../hooks/useEntitySelectionDialog\";\nimport type { EntityCollection } from \"@rebasepro/types\";\nimport React, { useCallback, useMemo } from \"react\";\n\nimport { Entity, EntityReference, FilterValues } from \"@rebasepro/types\";\nimport type { PreviewSize } from \"../types/components/PropertyPreviewProps\";\nimport { getReferenceFrom } from \"@rebasepro/common\";\nimport { ReferencePreview } from \"../preview\";\nimport { Button, cls } from \"@rebasepro/ui\";\nimport { useCollectionRegistryController } from \"../index\";\n\nexport type ReferenceWidgetProps<M extends Record<string, unknown>> = {\n name?: string,\n multiselect?: boolean,\n value: EntityReference | EntityReference[] | null,\n onReferenceSelected?: (params: {\n reference: EntityReference | null,\n entity: Entity<M> | null\n }) => void,\n onMultipleReferenceSelected?: (params: {\n references: EntityReference[] | null,\n entities: Entity<M>[] | null\n }) => void,\n path: string,\n disabled?: boolean,\n previewProperties?: string[];\n /**\n * Allow selection of entities that pass the given filter only.\n */\n fixedFilter?: FilterValues<string>;\n size: PreviewSize;\n className?: string;\n includeId?: boolean;\n includeEntityLink?: boolean;\n};\n\n/**\n * This field allows selecting reference/s.\n */\nexport function ReferenceWidget<M extends Record<string, unknown>>({\n name,\n multiselect = false,\n path,\n disabled,\n value,\n onReferenceSelected,\n onMultipleReferenceSelected,\n previewProperties,\n fixedFilter,\n size,\n className,\n includeId,\n includeEntityLink\n}: ReferenceWidgetProps<M>) {\n\n const collectionRegistryController = useCollectionRegistryController();\n\n const collection: EntityCollection | undefined = useMemo(() => {\n return collectionRegistryController.getCollection(path);\n }, [path, collectionRegistryController.getCollection]);\n\n const onSingleEntitySelected = useCallback((entity: Entity<M> | null) => {\n if (disabled)\n return;\n if (onReferenceSelected) {\n const reference = entity ? getReferenceFrom(entity) : null;\n onReferenceSelected?.({\n reference,\n entity\n });\n }\n }, [disabled, onReferenceSelected]);\n\n const onMultipleEntitiesSelected = useCallback((entities: Entity<M>[]) => {\n if (disabled)\n return;\n if (onMultipleReferenceSelected) {\n const references = entities ? entities.map(e => getReferenceFrom(e)) : null;\n onMultipleReferenceSelected({\n references,\n entities\n });\n }\n }, [disabled, onReferenceSelected]);\n\n const referenceDialogController = useEntitySelectionDialog({\n multiselect,\n path,\n collection,\n onSingleEntitySelected,\n onMultipleEntitiesSelected,\n fixedFilter\n }\n );\n\n const clearValue = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (multiselect) {\n onMultipleEntitiesSelected([]);\n } else {\n onSingleEntitySelected(null);\n }\n }, [onReferenceSelected]);\n\n let child: React.ReactNode;\n\n const onEntryClick = () => {\n if (disabled)\n return;\n referenceDialogController.open();\n };\n\n if (Array.isArray(value)) {\n child = <div className={\"flex flex-col gap-4\"}>\n {value.map((ref, index) => {\n return <ReferencePreview\n key={`reference_preview_${index}`}\n onClick={onEntryClick}\n reference={ref}\n disabled={disabled}\n previewProperties={previewProperties}\n size={size}\n includeId={includeId}\n includeEntityLink={includeEntityLink}/>\n })}\n </div>\n } else if (value?.isEntityReference && value?.isEntityReference()) {\n child = <ReferencePreview\n reference={value}\n onClick={onEntryClick}\n disabled={disabled}\n previewProperties={previewProperties}\n size={size}\n includeId={includeId}\n includeEntityLink={includeEntityLink}/>\n\n }\n return <div className={cls(\"text-sm font-medium\",\n \"min-w-80 flex flex-col gap-4\",\n \"relative transition-colors duration-200 ease-in rounded-xs font-medium\",\n disabled ? \"bg-opacity-50\" : \"hover:bg-opacity-75\",\n \"dark:text-white/50 text-text-primary/50 dark:text-text-primary-dark/50 dark:text-white/50\",\n className\n )}>\n\n {child}\n {!value && <div className=\"justify-center text-left\">\n <Button disabled={disabled}\n onClick={onEntryClick}>\n Edit {name}\n </Button>\n </div>}\n\n </div>;\n}\n","import type { AppView } from \"@rebasepro/types\";\nimport React, { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n;\nimport { useUrlController } from \"../hooks\";\nimport { useAdminModeController } from \"@rebasepro/core\";\nexport interface AdminModeSyncerProps {\n /**\n * Map of views designated as 'Studio' views.\n * Navigating to any of these views will automatically flag the admin mode as \"studio\".\n */\n devViews?: AppView[];\n}\n\n/**\n * A highly customizable utility component that observes react-router routes and\n * actively shifts the internal Rebase `adminModeController` context to match\n * the user's active window segment (e.g., Content vs Studio mode).\n *\n * Placing this anywhere safely inside the Rebase layout automatically triggers\n * UI mode synchronization.\n */\nexport function AdminModeSyncer({ devViews }: AdminModeSyncerProps) {\n const location = useLocation();\n const urlController = useUrlController();\n const adminModeController = useAdminModeController();\n\n // Keep track of the current mode using a ref to avoid adding it to the dependency array\n const currentModeRef = React.useRef(adminModeController.mode);\n currentModeRef.current = adminModeController.mode;\n\n // Stable ref for setMode so it doesn't trigger the effect\n const setModeRef = React.useRef(adminModeController.setMode);\n setModeRef.current = adminModeController.setMode;\n\n useEffect(() => {\n const path = location.pathname;\n const isContentRoute = urlController.isUrlCollectionPath(path) || path === urlController.basePath;\n\n // Check both devViews slugs AND the studio home path (/s or basePath/s)\n const studioHomePath = urlController.basePath === \"/\" ? \"/s\" : `${urlController.basePath}/s`;\n const isStudioRoute = path === studioHomePath || path.startsWith(studioHomePath + \"/\") || devViews?.some(view => {\n const viewPath = urlController.buildAppUrlPath(view.slug);\n return path.startsWith(`${viewPath}/`) || path === viewPath;\n });\n\n if (isStudioRoute && currentModeRef.current !== \"studio\") {\n setModeRef.current(\"studio\");\n } else if (isContentRoute && currentModeRef.current !== \"content\") {\n setModeRef.current(\"content\");\n }\n }, [location.pathname, urlController, devViews]);\n\n return null;\n}\n\n","import React, { useLayoutEffect } from \"react\";\nimport { useRebaseRegistryDispatch } from \"@rebasepro/core\";\nimport type { RebaseCMSConfig } from \"@rebasepro/types\";\n\n/**\n * Declarative component to configure the CMS in Rebase.\n * Renders nothing — purely registers config into the RebaseRegistry.\n *\n * When `collectionEditor` is provided, the built-in visual schema editor\n * is auto-wired as a native feature (slots, provider, Studio view) without\n * needing any external plugin.\n */\nexport function RebaseCMS({ collections, homePage, entityViews, entityActions, plugins, collectionEditor, navigationGroupMappings }: RebaseCMSConfig) {\n const dispatch = useRebaseRegistryDispatch();\n\n useLayoutEffect(() => {\n dispatch.registerCMS({ collections,\nhomePage,\nentityViews,\nentityActions,\nplugins,\ncollectionEditor,\nnavigationGroupMappings });\n return () => dispatch.unregisterCMS();\n }, [dispatch, collections, homePage, entityViews, entityActions, plugins, collectionEditor, navigationGroupMappings]);\n\n return null;\n}\n","import React from \"react\";\nimport {\n useRebaseRegistry,\n useAuthController\n} from \"@rebasepro/core\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { LoginView } from \"@rebasepro/core\";\n\n/**\n * Auth gate component that handles the authentication flow.\n *\n * - Shows a loading spinner while `authController.initialLoading` is true.\n * - Shows the login view when no user is authenticated.\n * - Renders `children` when a user is authenticated.\n *\n * **Independently usable**: Use this alone when you want auth gating\n * without the full CMS layout or navigation.\n *\n * @example\n * ```tsx\n * <RebaseAuthGate>\n * <MyCustomApp />\n * </RebaseAuthGate>\n * ```\n */\nexport function RebaseAuthGate({ children }: { children: React.ReactNode }) {\n const registry = useRebaseRegistry();\n const authController = useAuthController();\n\n console.log(\"[AuthGate] initialLoading:\", authController?.initialLoading, \"user:\", authController?.user?.email ?? null);\n\n if (authController?.initialLoading) {\n return <CircularProgressCenter size={\"large\"}/>;\n }\n\n if (!authController?.user) {\n const ActiveLoginView = registry.authConfig?.loginView ?? (\n <LoginView authController={authController as any}/>\n );\n return <>{ActiveLoginView}</>;\n }\n\n return <>{children}</>;\n}\n","import React from \"react\";\nimport { Outlet } from \"react-router-dom\";\nimport {\n useAdminModeController,\n useRebaseRegistry\n} from \"@rebasepro/core\";\n\nimport { Scaffold } from \"./app/Scaffold\";\nimport { AppBar } from \"./app/AppBar\";\nimport { Drawer } from \"./app/Drawer\";\nimport { SideDialogs } from \"./SideDialogs\";\nimport { AdminModeSyncer } from \"./AdminModeSyncer\";\nimport type { AppView } from \"@rebasepro/types\";\n\nexport interface RebaseLayoutProps {\n /** Title shown in the drawer. */\n title?: string;\n /** Custom AppBar to override the default. */\n appBar?: React.ReactNode;\n /** Custom Drawer to override the default. */\n drawer?: React.ReactNode;\n /** Whether to auto-open the drawer on load. */\n autoOpenDrawer?: boolean;\n /** Dev views passed to AdminModeSyncer (resolved from RebaseNavigation). */\n devViews?: AppView[];\n}\n\n/**\n * Layout layer — provides the Scaffold, AppBar, Drawer, and SideDialogs.\n *\n * Wraps the route outlet with the standard Rebase admin layout.\n * Override individual pieces (appBar, drawer) via props.\n *\n * **Independently usable**: Use this when you want the Rebase layout\n * without its default route definitions.\n *\n * @example\n * ```tsx\n * <RebaseLayout title=\"My Admin\">\n * <Route path=\"/\" element={<MyHomePage />} />\n * <Route path=\"/custom\" element={<CustomView />} />\n * </RebaseLayout>\n * ```\n */\nexport function RebaseLayout(props: RebaseLayoutProps) {\n const {\n title = \"Rebase\",\n appBar,\n drawer,\n autoOpenDrawer = false,\n devViews = []\n } = props;\n\n const adminModeController = useAdminModeController();\n\n const ActiveAppBar = appBar ?? <AppBar/>;\n const ActiveDrawer = drawer ?? (\n <Drawer\n title={title}\n logoDestination={adminModeController.mode === \"studio\" ? \"/s\" : \"/\"}\n />\n );\n\n return (\n <Scaffold autoOpenDrawer={autoOpenDrawer}>\n <AdminModeSyncer devViews={devViews}/>\n {ActiveAppBar}\n {ActiveDrawer}\n <Outlet/>\n <SideDialogs/>\n </Scaffold>\n );\n}\n","import React, { useMemo } from \"react\";\nimport {\n useRebaseRegistry\n} from \"@rebasepro/core\";\n\nimport { RebaseAuthGate } from \"./RebaseAuthGate\";\nimport { RebaseNavigation } from \"./RebaseNavigation\";\nimport { RebaseLayout } from \"./RebaseLayout\";\nimport { RebaseRouteDefs } from \"./RebaseRouteDefs\";\n\nexport interface RebaseShellProps {\n title?: string;\n appBar?: React.ReactNode;\n drawer?: React.ReactNode;\n autoOpenDrawer?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * Convenience component that composes all four CMS layers:\n *\n * ```\n * <RebaseAuthGate>\n * <RebaseNavigation>\n * <RebaseRouteDefs layout={<RebaseLayout>}>\n * {children}\n * </RebaseRouteDefs>\n * </RebaseNavigation>\n * </RebaseAuthGate>\n * ```\n *\n * Each layer is independently usable — see their individual docs.\n * RebaseShell is sugar that composes them all with sensible defaults.\n */\nexport function RebaseShell(props: RebaseShellProps) {\n const {\n title = \"Rebase\",\n appBar,\n drawer,\n autoOpenDrawer = false,\n children\n } = props;\n\n const registry = useRebaseRegistry();\n\n // Compute devViews for the layout's AdminModeSyncer\n const devViews = useMemo(() => {\n return registry.studioConfig?.devViews ?? [];\n }, [registry.studioConfig?.devViews]);\n\n return (\n <RebaseAuthGate>\n <RebaseNavigation>\n <RebaseRouteDefs\n layout={\n <RebaseLayout\n title={title}\n appBar={appBar}\n drawer={drawer}\n autoOpenDrawer={autoOpenDrawer}\n devViews={devViews}\n />\n }\n >\n {children}\n </RebaseRouteDefs>\n </RebaseNavigation>\n </RebaseAuthGate>\n );\n}\n","import type { ArrayProperty, Property } from \"@rebasepro/types\";\nimport React from \"react\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport type { PropertyPreviewProps } from \"../../types/components/PropertyPreviewProps\";\nimport { PropertyPreview } from \"../PropertyPreview\";\n\n/**\n * @group Preview components\n */\nexport function ArrayOfMapsPreview({\n propertyKey,\n value,\n property,\n size\n // entity\n}: PropertyPreviewProps<ArrayProperty>) {\n\n if (Array.isArray(property?.of)) {\n throw Error(\"Using array properties instead of single one in `of` in ArrayProperty\");\n }\n\n if (property?.type !== \"array\" || !property.of || property.of.type !== \"map\")\n throw Error(\"Picked wrong preview component ArrayOfMapsPreview\");\n\n const mapProperty = property.of;\n const properties = mapProperty.properties;\n if (!properties) {\n throw Error(`You need to specify a 'properties' prop (or specify a custom field) in your map property ${propertyKey}`);\n }\n const values = value;\n const previewProperties: string[] | undefined = (mapProperty.ui as any)?.previewProperties;\n\n if (!values) return null;\n\n let mapProperties = previewProperties;\n if (!mapProperties || !mapProperties.length) {\n mapProperties = Object.keys(properties);\n if (size)\n mapProperties = mapProperties.slice(0, 3);\n }\n\n return (\n <div className=\"table-auto text-xs\">\n <div>\n {values &&\n values.map((v: any, index: number) => {\n return (\n <div key={`table_${v}_${index}`}\n className=\"border-b last:border-b-0 py-2\">\n {mapProperties && mapProperties.map(\n (key) => (\n <div\n key={`table-cell-${key as string}`}\n className=\"table-cell\"\n >\n <ErrorBoundary>\n <PropertyPreview\n propertyKey={key as string}\n value={(v)[key]}\n property={properties[key as string] as Property}\n // entity={entity}\n size={\"small\"}/>\n </ErrorBoundary>\n </div>\n )\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useCollectionRegistryController } from \"../_cms_internals\";\nimport { ErrorView, useTranslation } from \"@rebasepro/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@rebasepro/ui\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\nimport { getLastSegment } from \"@rebasepro/common\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const registry = useCollectionRegistryController();\n const path = getLastSegment(pathProp);\n const parentCollectionSlugs = registry.getParentCollectionSlugs(pathProp);\n const parentEntityIds = registry.getParentEntityIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n const { t } = useTranslation();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={t(\"studio_missing_reference_error\", { path })}/>\n <Button className={\"mx-2\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path,\nname: prettifyIdentifier(path) },\n parentCollectionSlugs, parentEntityIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n {t(\"studio_missing_reference_create\")}\n </Button>\n </div>;\n}\n\n"],"names":["resolveNavigationFrom","path","context","data","navigationStateController","collectionRegistryController","Error","navigationEntries","getNavigationEntriesFromPath","collections","resultPromises","map","entry","type","Promise","resolve","collection","getCollection","slug","findById","entityId","then","entity","undefined","filter","v","Boolean","all","useResolvedNavigationFrom","t0","$","_c","useCMSContext","setData","useState","dataLoading","setDataLoading","dataLoadingError","setDataLoadingError","t1","catch","e","finally","t2","useEffect","t3","bb0","t4","Symbol","for","ReferenceWidget","name","multiselect","disabled","value","onReferenceSelected","onMultipleReferenceSelected","previewProperties","fixedFilter","size","className","includeId","includeEntityLink","useCollectionRegistryController","useMemo","onSingleEntitySelected","useCallback","reference","getReferenceFrom","onMultipleEntitiesSelected","entities","references","referenceDialogController","useEntitySelectionDialog","stopPropagation","child","onEntryClick","open","Array","isArray","ref","index","isEntityReference","cls","AdminModeSyncer","devViews","location","useLocation","urlController","useUrlController","adminModeController","useAdminModeController","currentModeRef","React","useRef","mode","current","setModeRef","setMode","pathname","isContentRoute","isUrlCollectionPath","basePath","studioHomePath","isStudioRoute","startsWith","some","view","viewPath","buildAppUrlPath","RebaseCMS","homePage","entityViews","entityActions","plugins","collectionEditor","navigationGroupMappings","dispatch","useRebaseRegistryDispatch","registerCMS","unregisterCMS","useLayoutEffect","RebaseAuthGate","children","registry","useRebaseRegistry","authController","useAuthController","console","log","initialLoading","user","email","authConfig","loginView","ActiveLoginView","RebaseLayout","props","title","appBar","drawer","autoOpenDrawer","ActiveAppBar","t5","ActiveDrawer","t6","t7","t8","t9","RebaseShell","studioConfig","ArrayOfMapsPreview","propertyKey","property","of","mapProperty","properties","values","ui","mapProperties","length","slice","key","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionSlugs","parentCollectionSlugs","getParentEntityIds","parentEntityIds","useCollectionEditorController","t","useTranslation","T0","ErrorView","createCollection","initialValues","prettifyIdentifier","redirect","sourceClick"],"mappings":"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"}
|
|
@@ -4,12 +4,21 @@ export { removeInitialAndTrailingSlashes, removeInitialSlash, removeTrailingSlas
|
|
|
4
4
|
* Navigate to an entity using either a side panel or full-screen mode.
|
|
5
5
|
* This is an admin-specific UI concern and lives here (not in common).
|
|
6
6
|
*/
|
|
7
|
-
export declare function navigateToEntity({ openEntityMode, collection, entityId, copy, path, selectedTab, sideEntityController, onClose, navigation }: {
|
|
7
|
+
export declare function navigateToEntity({ openEntityMode, collection, entityId, copy, path, selectedTab, defaultValues, sideEntityController, onClose, navigation }: {
|
|
8
8
|
openEntityMode: "side_panel" | "full_screen" | "split";
|
|
9
9
|
collection?: EntityCollection;
|
|
10
10
|
entityId?: string | number;
|
|
11
11
|
selectedTab?: string;
|
|
12
12
|
copy?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Pre-populate the new entity form with these values.
|
|
15
|
+
* Only applied when entityId is not set (i.e. "new" mode).
|
|
16
|
+
*
|
|
17
|
+
* Side panel: passed through EntitySidePanelProps → EntityEditView.
|
|
18
|
+
* Full screen: carried via React Router location.state so the route
|
|
19
|
+
* component can read it on mount without polluting the URL.
|
|
20
|
+
*/
|
|
21
|
+
defaultValues?: Record<string, unknown>;
|
|
13
22
|
path: string;
|
|
14
23
|
sideEntityController: SideEntityController;
|
|
15
24
|
onClose?: () => void;
|