@rebasepro/admin 0.1.0 → 0.1.2

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 (36) hide show
  1. package/dist/{CollectionEditorDialog-MbvXGzEq.js → CollectionEditorDialog-ywdxhs1L.js} +3 -3
  2. package/dist/{CollectionEditorDialog-MbvXGzEq.js.map → CollectionEditorDialog-ywdxhs1L.js.map} +1 -1
  3. package/dist/{CollectionsStudioView-D9X6aiAr.js → CollectionsStudioView-BDzMFzqH.js} +4 -4
  4. package/dist/{CollectionsStudioView-D9X6aiAr.js.map → CollectionsStudioView-BDzMFzqH.js.map} +1 -1
  5. package/dist/{ContentHomePage-CfVB1eUo.js → ContentHomePage-0tHuEIm_.js} +2 -2
  6. package/dist/{ContentHomePage-CfVB1eUo.js.map → ContentHomePage-0tHuEIm_.js.map} +1 -1
  7. package/dist/{ExportCollectionAction-CUwJg4F9.js → ExportCollectionAction-BIrq92To.js} +2 -2
  8. package/dist/{ExportCollectionAction-CUwJg4F9.js.map → ExportCollectionAction-BIrq92To.js.map} +1 -1
  9. package/dist/{ImportCollectionAction-DGa_SF_8.js → ImportCollectionAction-h8yg_To8.js} +2 -2
  10. package/dist/{ImportCollectionAction-DGa_SF_8.js.map → ImportCollectionAction-h8yg_To8.js.map} +1 -1
  11. package/dist/{PropertyEditView-C4nlYmAc.js → PropertyEditView-BuZrNnBN.js} +2 -2
  12. package/dist/{PropertyEditView-C4nlYmAc.js.map → PropertyEditView-BuZrNnBN.js.map} +1 -1
  13. package/dist/{RolesView-CNWxnR8e.js → RolesView-CMPsaIXo.js} +2 -2
  14. package/dist/{RolesView-CNWxnR8e.js.map → RolesView-CMPsaIXo.js.map} +1 -1
  15. package/dist/{UsersView-YiTIcXkA.js → UsersView-BkeblMVT.js} +2 -2
  16. package/dist/{UsersView-YiTIcXkA.js.map → UsersView-BkeblMVT.js.map} +1 -1
  17. package/dist/collection_editor_ui.js +3 -3
  18. package/dist/{index-DKlrVD1m.js → index-BuZaHcyc.js} +3 -3
  19. package/dist/index-BuZaHcyc.js.map +1 -0
  20. package/dist/{index-CtzpHzMQ.js → index-CS6uJ7oW.js} +2 -2
  21. package/dist/{index-CtzpHzMQ.js.map → index-CS6uJ7oW.js.map} +1 -1
  22. package/dist/{index-kHJXfLNI.js → index-eRJbMvHi.js} +3 -3
  23. package/dist/index-eRJbMvHi.js.map +1 -0
  24. package/dist/index.js +4 -4
  25. package/dist/{util-CwLmSpGp.js → util-zfU1zOCX.js} +22 -22
  26. package/dist/util-zfU1zOCX.js.map +1 -0
  27. package/package.json +8 -8
  28. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +5 -3
  29. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +1 -1
  30. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +2 -2
  31. package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
  32. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +3 -3
  33. package/src/components/SelectableTable/SelectableTable.tsx +2 -2
  34. package/dist/index-DKlrVD1m.js.map +0 -1
  35. package/dist/index-kHJXfLNI.js.map +0 -1
  36. package/dist/util-CwLmSpGp.js.map +0 -1
@@ -1 +1 @@
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
+ {"version":3,"file":"index-CS6uJ7oW.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,5 +1,5 @@
1
- import { E as ExportCollectionAction } from "./ExportCollectionAction-CUwJg4F9.js";
2
- import { B, d, a, b, g, c } from "./ExportCollectionAction-CUwJg4F9.js";
1
+ import { E as ExportCollectionAction } from "./ExportCollectionAction-BIrq92To.js";
2
+ import { B, d, a, b, g, c } from "./ExportCollectionAction-BIrq92To.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-kHJXfLNI.js.map
12
+ //# sourceMappingURL=index-eRJbMvHi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-eRJbMvHi.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-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";
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-zfU1zOCX.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-zfU1zOCX.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-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";
28
+ import { I as I2, a as a10, P as P2 } from "./ImportCollectionAction-h8yg_To8.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-BIrq92To.js";
30
30
  function resolveNavigationFrom({
31
31
  path,
32
32
  context
@@ -5388,7 +5388,7 @@ const EntityTableCell = React__default.memo(function EntityTableCell2(t0) {
5388
5388
  const t11 = `flex relative h-full rounded-md p-${p} border-4`;
5389
5389
  const t12 = showSaved ? "bg-primary/20 dark:bg-primary/20" : onHover && !disabled ? "bg-surface-50 dark:bg-surface-900" : "";
5390
5390
  const t13 = hideOverflow ? "overflow-hidden" : "";
5391
- const t14 = isSelected && !showSaved ? "bg-surface-accent-50 dark:bg-surface-accent-950" : "";
5391
+ const t14 = isSelected && !showSaved ? "bg-surface-accent-50 dark:bg-surface-accent-900" : "";
5392
5392
  let t15;
5393
5393
  if ($[11] !== borderClass || $[12] !== t11 || $[13] !== t12 || $[14] !== t13 || $[15] !== t14) {
5394
5394
  t15 = cls("transition-colors duration-500", t11, t12, t13, t14, borderClass);
@@ -5490,7 +5490,7 @@ const EntityTableCell = React__default.memo(function EntityTableCell2(t0) {
5490
5490
  }
5491
5491
  let t25;
5492
5492
  if ($[43] !== error?.message || $[44] !== frozen || $[45] !== result || $[46] !== showError || $[47] !== sortableAttrsWithoutTabIndex || $[48] !== sortableNodeRef || $[49] !== sortableStyle) {
5493
- t25 = sortableNodeRef ? /* @__PURE__ */ jsx("div", { ref: sortableNodeRef, style: sortableStyle, className: cls("flex-shrink-0", frozen && "sticky left-0 z-10 bg-white dark:bg-surface-800"), ...sortableAttrsWithoutTabIndex, children: showError ? /* @__PURE__ */ jsx(ErrorTooltip, { className: "flex h-full w-full", align: "start", title: error?.message ?? "Error", children: result }) : result }) : showError ? /* @__PURE__ */ jsx(ErrorTooltip, { className: "flex h-full w-full", align: "start", title: error?.message ?? "Error", children: result }) : result;
5493
+ t25 = sortableNodeRef ? /* @__PURE__ */ jsx("div", { ref: sortableNodeRef, style: sortableStyle, className: cls("flex-shrink-0", frozen && "sticky left-0 z-10 bg-white dark:bg-surface-900"), ...sortableAttrsWithoutTabIndex, children: showError ? /* @__PURE__ */ jsx(ErrorTooltip, { className: "flex h-full w-full", align: "start", title: error?.message ?? "Error", children: result }) : result }) : showError ? /* @__PURE__ */ jsx(ErrorTooltip, { className: "flex h-full w-full", align: "start", title: error?.message ?? "Error", children: result }) : result;
5494
5494
  $[43] = error?.message;
5495
5495
  $[44] = frozen;
5496
5496
  $[45] = result;
@@ -5756,7 +5756,7 @@ const EntityCollectionRowActions = function EntityCollectionRowActions2({
5756
5756
  const enableLocalChangesBackup = collection ? getLocalChangesBackup(collection) : false;
5757
5757
  const hasDraft = enableLocalChangesBackup ? getEntityFromCache(path + "/" + entity.id) : false;
5758
5758
  const iconSize2 = "small";
5759
- const content = /* @__PURE__ */ jsxs("div", { className: cls("h-full flex items-center justify-center flex-col bg-surface-50 dark:bg-surface-800 bg-opacity-90 bg-surface-50/90 dark:bg-opacity-90 dark:bg-surface-800/90 z-10", "h-full flex items-center justify-center flex-col bg-surface-50/90 dark:bg-surface-800/90 z-10", frozen ? "sticky left-0" : ""), onClick: useCallback((event) => {
5759
+ const content = /* @__PURE__ */ jsxs("div", { className: cls("h-full flex items-center justify-center flex-col z-10", isSelected ? "bg-surface-accent-50 dark:bg-surface-accent-900" : "bg-surface-50/90 dark:bg-surface-900/90", frozen ? "sticky left-0" : ""), onClick: useCallback((event) => {
5760
5760
  event.stopPropagation();
5761
5761
  }, []), style: {
5762
5762
  width,
@@ -5819,7 +5819,7 @@ const EntityCollectionRowActions = function EntityCollectionRowActions2({
5819
5819
  tabIndex: _tabIndex,
5820
5820
  ...sortableAttrsWithoutTabIndex
5821
5821
  } = sortableAttributes ?? {};
5822
- return /* @__PURE__ */ jsx("div", { ref: sortableNodeRef, style: sortableStyle, className: cls("flex-shrink-0", frozen && "sticky left-0 z-10 bg-white dark:bg-surface-800"), ...sortableAttrsWithoutTabIndex, children: content });
5822
+ return /* @__PURE__ */ jsx("div", { ref: sortableNodeRef, style: sortableStyle, className: cls("flex-shrink-0", frozen && "sticky left-0 z-10 bg-white dark:bg-surface-900"), ...sortableAttrsWithoutTabIndex, children: content });
5823
5823
  }
5824
5824
  return content;
5825
5825
  };
@@ -6942,7 +6942,7 @@ const SelectableTable = function SelectableTable2({
6942
6942
  size: size ?? "m",
6943
6943
  selectionStore
6944
6944
  }), [setPopupCell, select, onValueChange, size, selectionStore]);
6945
- return /* @__PURE__ */ jsx(SelectableTableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: "h-full w-full flex flex-col bg-white dark:bg-surface-800", ref, children: /* @__PURE__ */ jsx(
6945
+ return /* @__PURE__ */ jsx(SelectableTableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: "h-full w-full flex flex-col bg-white dark:bg-surface-900", ref, children: /* @__PURE__ */ jsx(
6946
6946
  VirtualTable,
6947
6947
  {
6948
6948
  data,
@@ -6965,7 +6965,7 @@ const SelectableTable = function SelectableTable2({
6965
6965
  checkFilterCombination,
6966
6966
  createFilterField: filterable ? createFilterField : void 0,
6967
6967
  rowClassName: useCallback((entity) => {
6968
- return highlightedRow?.(entity) ? "bg-surface-accent-50 dark:!bg-surface-accent-950" : "";
6968
+ return highlightedRow?.(entity) ? "bg-surface-accent-50 dark:!bg-surface-accent-900" : "";
6969
6969
  }, [highlightedRow]),
6970
6970
  className: "grow",
6971
6971
  emptyComponent,
@@ -7187,7 +7187,7 @@ const EntityCollectionTable = function EntityCollectionTable2({
7187
7187
  return /* @__PURE__ */ jsx(EntityTableCell, { size, width: column_1.width, savedTimestamp: void 0, value: null, align: "left", fullHeight: false, disabled: true, sortableNodeRef: props.sortableNodeRef, sortableStyle: props.sortableStyle, sortableAttributes: props.sortableAttributes, isDragging: props.isDragging, isDraggable: props.isDraggable, frozen: props.frozen, children: /* @__PURE__ */ jsx(ErrorView, { error: e instanceof Error ? e : new Error(String(e)) }) });
7188
7188
  }
7189
7189
  }, [tableRowActionsBuilder, additionalCellRenderer, propertyCellRenderer, size]);
7190
- return /* @__PURE__ */ jsxs("div", { ref, style, className: cls("h-full w-full flex flex-col bg-white dark:bg-surface-800", className), children: [
7190
+ return /* @__PURE__ */ jsxs("div", { ref, style, className: cls("h-full w-full flex flex-col bg-white dark:bg-surface-900", className), children: [
7191
7191
  !hideToolbar && /* @__PURE__ */ jsx(CollectionTableToolbar, { onTextSearch, title, actionsStart, actions, viewModeToggle, loading: tableController.dataLoading }),
7192
7192
  /* @__PURE__ */ jsx(SelectableTable, { columns, size, inlineEditing, cellRenderer, onEntityClick, highlightedRow: useCallback((entity_1) => Boolean(selectedEntities?.find((e_0) => e_0.id === entity_1.id && e_0.path === entity_1.path)), [selectedEntities]), tableController, onValueChange, initialScroll, onScroll, onColumnResize, hoverRow, filterable, emptyComponent, endAdornment, AddColumnComponent, onColumnsOrderChange, extraData: useMemo(() => ({
7193
7193
  selectedEntityIds: selectedEntities?.map((e_1) => e_1.id)
@@ -7222,7 +7222,7 @@ function useSelectionController(onSelectionChange) {
7222
7222
  toggleEntitySelection
7223
7223
  }), [selectedEntities, setSelectedEntities, isEntitySelected, toggleEntitySelection]);
7224
7224
  }
7225
- const EntityHistoryView$1 = lazy(() => import("./index-CtzpHzMQ.js").then((m) => ({
7225
+ const EntityHistoryView$1 = lazy(() => import("./index-CS6uJ7oW.js").then((m) => ({
7226
7226
  default: m.EntityHistoryView
7227
7227
  })));
7228
7228
  const BUILTIN_ENTITY_VIEWS = {
@@ -7598,7 +7598,7 @@ function EntityJsonPreview(t0) {
7598
7598
  }
7599
7599
  return t4;
7600
7600
  }
7601
- const EntityHistoryView = lazy(() => import("./index-CtzpHzMQ.js").then((m) => ({
7601
+ const EntityHistoryView = lazy(() => import("./index-CS6uJ7oW.js").then((m) => ({
7602
7602
  default: m.EntityHistoryView
7603
7603
  })));
7604
7604
  const MAIN_TAB_VALUE = "__main_##Q$SC^#S6";
@@ -8809,10 +8809,10 @@ function viewSlugsEqual(a, b) {
8809
8809
  }
8810
8810
  return true;
8811
8811
  }
8812
- const UsersView$1 = lazy(() => import("./UsersView-YiTIcXkA.js").then((m) => ({
8812
+ const UsersView$1 = lazy(() => import("./UsersView-BkeblMVT.js").then((m) => ({
8813
8813
  default: m.UsersView
8814
8814
  })));
8815
- const RolesView$1 = lazy(() => import("./RolesView-CNWxnR8e.js").then((m) => ({
8815
+ const RolesView$1 = lazy(() => import("./RolesView-CMPsaIXo.js").then((m) => ({
8816
8816
  default: m.RolesView
8817
8817
  })));
8818
8818
  function useResolvedViews(props) {
@@ -16913,10 +16913,10 @@ function EditorCollectionAction(t0) {
16913
16913
  }
16914
16914
  return t9;
16915
16915
  }
16916
- const ImportCollectionAction = lazy(() => import("./index-DKlrVD1m.js").then((m) => ({
16916
+ const ImportCollectionAction = lazy(() => import("./index-BuZaHcyc.js").then((m) => ({
16917
16917
  default: m.ImportCollectionAction
16918
16918
  })));
16919
- const ExportCollectionAction = lazy(() => import("./index-kHJXfLNI.js").then((m) => ({
16919
+ const ExportCollectionAction = lazy(() => import("./index-eRJbMvHi.js").then((m) => ({
16920
16920
  default: m.ExportCollectionAction
16921
16921
  })));
16922
16922
  function EntityCollectionViewActions(t0) {
@@ -17465,7 +17465,7 @@ function EntityCard({
17465
17465
  const handleSelectionChange = (checked) => {
17466
17466
  onSelectionChange?.(entity, checked);
17467
17467
  };
17468
- return /* @__PURE__ */ jsxs(Card, { className: cls("cursor-pointer overflow-hidden group relative", "transition-all duration-200", "hover:shadow-lg hover:-translate-y-0.5", selected && "ring-2 ring-primary bg-surface-accent-50 dark:bg-surface-accent-950", highlighted && !selected && "ring-2 ring-primary ring-opacity-50 bg-surface-accent-50/50 dark:bg-surface-accent-950/50"), onClick: handleClick, children: [
17468
+ return /* @__PURE__ */ jsxs(Card, { className: cls("cursor-pointer overflow-hidden group relative", "transition-all duration-200", "hover:shadow-lg hover:-translate-y-0.5", selected && "ring-2 ring-primary bg-surface-accent-50 dark:bg-surface-accent-900", highlighted && !selected && "ring-2 ring-primary ring-opacity-50 bg-surface-accent-50/50 dark:bg-surface-accent-900"), onClick: handleClick, children: [
17469
17469
  /* @__PURE__ */ jsxs("div", { className: "aspect-[4/3] relative overflow-hidden bg-surface-100 dark:bg-surface-900", children: [
17470
17470
  slots.image ? /* @__PURE__ */ jsx("div", { className: "w-full h-full", children: /* @__PURE__ */ jsx(PropertyPreview, { property: slots.image.property, propertyKey: slots.image.propertyKey, size: "medium", value: slots.image.value, fill: true }) }) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx(IconForView, { collectionOrView: collection, color: "disabled" }) }),
17471
17471
  /* @__PURE__ */ jsx("div", { className: cls("absolute inset-0 bg-black/0 group-hover:bg-black/10", "transition-colors duration-200") }),
@@ -18359,7 +18359,7 @@ const ListRow = React__default.memo(function ListRow2(t0) {
18359
18359
  const handleCheckboxChange = t6;
18360
18360
  const useColumnMode = !!collection.listProperties && collection.listProperties.length > 0;
18361
18361
  const extraColumns = useColumnMode ? columns.filter(_temp5) : [];
18362
- const t7 = isActive ? "bg-surface-accent-100 dark:bg-surface-accent-950 hover:bg-surface-accent-200 dark:hover:bg-surface-accent-900" : selected ? "bg-surface-accent-50 dark:bg-surface-accent-950 hover:bg-surface-accent-100 dark:hover:bg-surface-accent-900" : highlighted ? "bg-surface-accent-50 dark:bg-surface-accent-950 hover:bg-surface-50 dark:hover:bg-surface-800/40" : "bg-white dark:bg-surface-900 hover:bg-surface-50 dark:hover:bg-surface-800/40";
18362
+ const t7 = isActive ? "bg-surface-accent-100 dark:bg-surface-accent-950 hover:bg-surface-accent-200 dark:hover:bg-surface-accent-950" : selected ? "bg-surface-accent-50 dark:bg-surface-accent-900 hover:bg-surface-accent-100 dark:hover:bg-surface-accent-950" : highlighted ? "bg-surface-accent-50 dark:bg-surface-accent-900 hover:bg-surface-50 dark:hover:bg-surface-800/40" : "bg-white dark:bg-surface-900 hover:bg-surface-50 dark:hover:bg-surface-800/40";
18363
18363
  let t8;
18364
18364
  if ($[24] !== rowClasses || $[25] !== t7) {
18365
18365
  t8 = cls("flex items-center gap-4 cursor-pointer group transition-colors duration-200 relative h-full", rowClasses, t7);
@@ -24292,7 +24292,7 @@ function useLocalCollectionsConfigController(clientOrUrl, baseCollections = [],
24292
24292
  }
24293
24293
  const EMPTY_PLUGINS = [];
24294
24294
  const EMPTY_COLLECTIONS = [];
24295
- const CollectionsStudioView = lazy(() => import("./CollectionsStudioView-D9X6aiAr.js").then((n) => n.b).then((m) => ({
24295
+ const CollectionsStudioView = lazy(() => import("./CollectionsStudioView-BDzMFzqH.js").then((n) => n.b).then((m) => ({
24296
24296
  default: m.CollectionsStudioView
24297
24297
  })));
24298
24298
  function RebaseNavigation({
@@ -24902,10 +24902,10 @@ function CustomViewRoute(t0) {
24902
24902
  useEffect(t1, t2);
24903
24903
  return view.view;
24904
24904
  }
24905
- const CollectionEditorDialog = lazy(() => import("./CollectionEditorDialog-MbvXGzEq.js").then((m) => ({
24905
+ const CollectionEditorDialog = lazy(() => import("./CollectionEditorDialog-ywdxhs1L.js").then((m) => ({
24906
24906
  default: m.CollectionEditorDialog
24907
24907
  })));
24908
- const PropertyFormDialog = lazy(() => import("./PropertyEditView-C4nlYmAc.js").then((n) => n.d).then((m) => ({
24908
+ const PropertyFormDialog = lazy(() => import("./PropertyEditView-BuZrNnBN.js").then((n) => n.d).then((m) => ({
24909
24909
  default: m.PropertyFormDialog
24910
24910
  })));
24911
24911
  function CollectionEditorDialogs() {
@@ -24954,13 +24954,13 @@ function CollectionEditorDialogs() {
24954
24954
  }
24955
24955
  function _temp$2() {
24956
24956
  }
24957
- const ContentHomePage = lazy(() => import("./ContentHomePage-CfVB1eUo.js").then((m) => ({
24957
+ const ContentHomePage = lazy(() => import("./ContentHomePage-0tHuEIm_.js").then((m) => ({
24958
24958
  default: m.ContentHomePage
24959
24959
  })));
24960
- const UsersView = lazy(() => import("./UsersView-YiTIcXkA.js").then((m) => ({
24960
+ const UsersView = lazy(() => import("./UsersView-BkeblMVT.js").then((m) => ({
24961
24961
  default: m.UsersView
24962
24962
  })));
24963
- const RolesView = lazy(() => import("./RolesView-CNWxnR8e.js").then((m) => ({
24963
+ const RolesView = lazy(() => import("./RolesView-CMPsaIXo.js").then((m) => ({
24964
24964
  default: m.RolesView
24965
24965
  })));
24966
24966
  function SettingsView() {
@@ -28113,4 +28113,4 @@ export {
28113
28113
  ArrayOfReferencesPreview as y,
28114
28114
  ArrayOfStorageComponentsPreview as z
28115
28115
  };
28116
- //# sourceMappingURL=util-CwLmSpGp.js.map
28116
+ //# sourceMappingURL=util-zfU1zOCX.js.map