@rebasepro/admin 0.0.1-canary.eae7889 → 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.
Files changed (197) hide show
  1. package/dist/{CollectionEditorDialog-B2M9lCyL.js → CollectionEditorDialog-MbvXGzEq.js} +42 -31
  2. package/dist/CollectionEditorDialog-MbvXGzEq.js.map +1 -0
  3. package/dist/{CollectionsStudioView-WG6soyfs.js → CollectionsStudioView-D9X6aiAr.js} +12 -12
  4. package/dist/CollectionsStudioView-D9X6aiAr.js.map +1 -0
  5. package/dist/{ContentHomePage-CDF_a6Lp.js → ContentHomePage-CfVB1eUo.js} +26 -26
  6. package/dist/ContentHomePage-CfVB1eUo.js.map +1 -0
  7. package/dist/{ExportCollectionAction-Dc0VOWMN.js → ExportCollectionAction-CUwJg4F9.js} +2 -2
  8. package/dist/{ExportCollectionAction-Dc0VOWMN.js.map → ExportCollectionAction-CUwJg4F9.js.map} +1 -1
  9. package/dist/{ImportCollectionAction-DpCagAOy.js → ImportCollectionAction-DGa_SF_8.js} +2 -2
  10. package/dist/{ImportCollectionAction-DpCagAOy.js.map → ImportCollectionAction-DGa_SF_8.js.map} +1 -1
  11. package/dist/{PropertyEditView-DS67DxoT.js → PropertyEditView-C4nlYmAc.js} +82 -104
  12. package/dist/PropertyEditView-C4nlYmAc.js.map +1 -0
  13. package/dist/{RolesView-CIuYBimF.js → RolesView-CNWxnR8e.js} +7 -5
  14. package/dist/RolesView-CNWxnR8e.js.map +1 -0
  15. package/dist/{UsersView-B5zelXnH.js → UsersView-YiTIcXkA.js} +14 -35
  16. package/dist/UsersView-YiTIcXkA.js.map +1 -0
  17. package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -4
  18. package/dist/collection_editor/types/collection_editor_controller.d.ts +6 -3
  19. package/dist/collection_editor/types/config_controller.d.ts +14 -7
  20. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +3 -2
  21. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +3 -2
  22. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
  23. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
  24. package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
  25. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +3 -2
  26. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +3 -2
  27. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +3 -4
  28. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +2 -3
  29. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -2
  30. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +3 -2
  31. package/dist/collection_editor_ui.js +3 -3
  32. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  33. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +1 -1
  34. package/dist/components/EntityCollectionTable/column_utils.d.ts +2 -2
  35. package/dist/components/EntityCollectionTable/fields/TableMultipleRelationField.d.ts +1 -1
  36. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +1 -1
  37. package/dist/components/EntityCollectionTable/fields/TableRelationField.d.ts +1 -1
  38. package/dist/components/EntityCollectionTable/fields/TableRelationSelectorField.d.ts +2 -2
  39. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -1
  40. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +3 -2
  41. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +2 -1
  42. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +4 -2
  43. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +4 -2
  44. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +2 -2
  45. package/dist/components/EntityCollectionView/SplitListView.d.ts +3 -2
  46. package/dist/components/EntityEditView.d.ts +9 -2
  47. package/dist/components/RebaseCMS.d.ts +1 -1
  48. package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +2 -2
  49. package/dist/components/ReferenceWidget.d.ts +2 -2
  50. package/dist/components/RelationSelector.d.ts +1 -1
  51. package/dist/components/SelectableTable/SelectableTable.d.ts +2 -2
  52. package/dist/editor.js +2 -2
  53. package/dist/editor.js.map +1 -1
  54. package/dist/hooks/navigation/useNavigationRegistry.d.ts +2 -1
  55. package/dist/hooks/useEntityHistory.d.ts +1 -1
  56. package/dist/{index-CHxgwt6E.js → index-CtzpHzMQ.js} +11 -4
  57. package/dist/index-CtzpHzMQ.js.map +1 -0
  58. package/dist/{index-Dey5WJpO.js → index-DKlrVD1m.js} +3 -3
  59. package/dist/index-DKlrVD1m.js.map +1 -0
  60. package/dist/{index-CBhrgpR7.js → index-kHJXfLNI.js} +3 -3
  61. package/dist/index-kHJXfLNI.js.map +1 -0
  62. package/dist/index.js +79 -63
  63. package/dist/index.js.map +1 -1
  64. package/dist/{useEntityHistory-Dcj4zhGj.js → useEntityHistory-UVsSclfZ.js} +3 -1
  65. package/dist/useEntityHistory-UVsSclfZ.js.map +1 -0
  66. package/dist/util/navigation_utils.d.ts +10 -1
  67. package/dist/{util-BQ82ySL3.js → util-CwLmSpGp.js} +1653 -1257
  68. package/dist/util-CwLmSpGp.js.map +1 -0
  69. package/package.json +9 -17
  70. package/src/collection_editor/ConfigControllerProvider.tsx +19 -28
  71. package/src/collection_editor/types/collection_editor_controller.tsx +3 -3
  72. package/src/collection_editor/types/config_controller.tsx +7 -7
  73. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +4 -4
  74. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +3 -3
  75. package/src/collection_editor/ui/EditorCollectionAction.tsx +3 -3
  76. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +7 -7
  77. package/src/collection_editor/ui/EditorEntityAction.tsx +3 -3
  78. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +4 -2
  79. package/src/collection_editor/ui/KanbanSetupAction.tsx +4 -3
  80. package/src/collection_editor/ui/MissingReferenceWidget.tsx +3 -2
  81. package/src/collection_editor/ui/NewCollectionButton.tsx +2 -1
  82. package/src/collection_editor/ui/NewCollectionCard.tsx +2 -1
  83. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -3
  84. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +5 -50
  85. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +12 -20
  86. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +1 -3
  87. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +17 -2
  88. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
  89. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +2 -1
  90. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +18 -12
  91. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +1 -2
  92. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +1 -2
  93. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +6 -6
  94. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +4 -4
  95. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +15 -49
  97. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +4 -5
  98. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +1 -1
  99. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
  100. package/src/components/DefaultAppBar.tsx +2 -2
  101. package/src/components/DefaultDrawer.tsx +25 -17
  102. package/src/components/DrawerNavigationGroup.tsx +4 -4
  103. package/src/components/DrawerNavigationItem.tsx +6 -6
  104. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +4 -4
  105. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
  106. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +4 -4
  107. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  108. package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +3 -3
  109. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +3 -3
  110. package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +4 -4
  111. package/src/components/EntityCollectionTable/fields/TableRelationSelectorField.tsx +3 -3
  112. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +8 -2
  113. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
  114. package/src/components/EntityCollectionTable/internal/common.tsx +5 -5
  115. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -1
  116. package/src/components/EntityCollectionTable/table_bindings.tsx +45 -35
  117. package/src/components/EntityCollectionView/EntityBoardCard.tsx +18 -19
  118. package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
  119. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +42 -14
  120. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +4 -3
  121. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +157 -54
  122. package/src/components/EntityCollectionView/EntityCollectionView.tsx +169 -75
  123. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +23 -13
  124. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +21 -12
  125. package/src/components/EntityCollectionView/FiltersDialog.tsx +7 -7
  126. package/src/components/EntityCollectionView/SplitListView.tsx +24 -8
  127. package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +33 -5
  128. package/src/components/EntityEditView.tsx +85 -85
  129. package/src/components/EntitySidePanel.tsx +18 -10
  130. package/src/components/HomePage/ContentHomePage.tsx +24 -15
  131. package/src/components/HomePage/NavigationCard.tsx +4 -4
  132. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  133. package/src/components/RebaseAuthGate.tsx +2 -0
  134. package/src/components/RebaseCMS.tsx +4 -3
  135. package/src/components/RebaseNavigation.tsx +8 -5
  136. package/src/components/ReferenceTable/EntitySelectionTable.tsx +4 -4
  137. package/src/components/ReferenceWidget.tsx +3 -3
  138. package/src/components/RelationSelector.tsx +33 -5
  139. package/src/components/SelectableTable/SelectableTable.tsx +6 -6
  140. package/src/components/UserSelector.tsx +1 -1
  141. package/src/components/admin/RolesView.tsx +10 -3
  142. package/src/components/admin/UsersView.tsx +13 -25
  143. package/src/components/app/Scaffold.tsx +4 -4
  144. package/src/components/field_configs.tsx +29 -32
  145. package/src/components/history/EntityHistoryView.tsx +12 -1
  146. package/src/editor/editor.tsx +2 -2
  147. package/src/form/EntityForm.tsx +5 -4
  148. package/src/form/PropertyFieldBinding.tsx +14 -10
  149. package/src/form/components/FieldHelperText.tsx +1 -1
  150. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -3
  151. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +5 -5
  152. package/src/form/field_bindings/BlockFieldBinding.tsx +4 -4
  153. package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
  154. package/src/form/field_bindings/KeyValueFieldBinding.tsx +1 -1
  155. package/src/form/field_bindings/MapFieldBinding.tsx +7 -7
  156. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +1 -1
  157. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -3
  158. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +7 -7
  159. package/src/form/field_bindings/ReferenceFieldBinding.tsx +2 -2
  160. package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
  161. package/src/form/field_bindings/RepeatFieldBinding.tsx +5 -5
  162. package/src/form/field_bindings/SelectFieldBinding.tsx +1 -1
  163. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +1 -1
  164. package/src/form/field_bindings/SwitchFieldBinding.tsx +1 -1
  165. package/src/form/field_bindings/TextFieldBinding.tsx +7 -7
  166. package/src/form/field_bindings/UserSelectFieldBinding.tsx +1 -1
  167. package/src/form/useClearRestoreValue.tsx +1 -1
  168. package/src/form/validation.ts +1 -1
  169. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +2 -1
  170. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +15 -3
  171. package/src/hooks/navigation/useNavigationRegistry.ts +14 -3
  172. package/src/hooks/navigation/useResolvedViews.tsx +1 -3
  173. package/src/hooks/navigation/useTopLevelNavigation.ts +1 -1
  174. package/src/hooks/navigation/utils.ts +1 -1
  175. package/src/hooks/useEntityHistory.ts +7 -2
  176. package/src/preview/PropertyPreview.tsx +27 -23
  177. package/src/preview/components/StorageThumbnail.tsx +4 -1
  178. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -1
  179. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +1 -1
  180. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +1 -1
  181. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +3 -3
  182. package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
  183. package/src/routes/RebaseRoute.tsx +57 -11
  184. package/src/util/navigation_utils.ts +21 -2
  185. package/src/util/previews.ts +15 -6
  186. package/src/util/property_utils.tsx +3 -3
  187. package/dist/CollectionEditorDialog-B2M9lCyL.js.map +0 -1
  188. package/dist/CollectionsStudioView-WG6soyfs.js.map +0 -1
  189. package/dist/ContentHomePage-CDF_a6Lp.js.map +0 -1
  190. package/dist/PropertyEditView-DS67DxoT.js.map +0 -1
  191. package/dist/RolesView-CIuYBimF.js.map +0 -1
  192. package/dist/UsersView-B5zelXnH.js.map +0 -1
  193. package/dist/index-CBhrgpR7.js.map +0 -1
  194. package/dist/index-CHxgwt6E.js.map +0 -1
  195. package/dist/index-Dey5WJpO.js.map +0 -1
  196. package/dist/useEntityHistory-Dcj4zhGj.js.map +0 -1
  197. package/dist/util-BQ82ySL3.js.map +0 -1
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 forceFilter?: 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 forceFilter,\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 forceFilter\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.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 parentCollectionIds = registry.getParentCollectionIds(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 parentCollectionIds,\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","forceFilter","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","mapProperties","length","slice","key","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionIds","parentCollectionIds","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DO,SAASA,sBAA4E;AAAA,EACxFC;AAAAA,EACAC;AAIJ,GAA0C;AAEtC,QAAMC,OAAOD,QAAQC;AACrB,QAAM;AAAA,IAAEC;AAAAA,IAA2BC;AAAAA,EAAAA,IAAiCH;AAEpE,MAAI,CAACE,6BAA6B,CAACC,8BAA8B;AAC7D,UAAMC,MAAM,iFAAiF;AAAA,EACjG;AAEA,QAAMC,oBAAoBC,6BAA6B;AAAA,IACnDP;AAAAA,IACAQ,aAAaJ,6BAA6BI,eAAe,CAAA;AAAA,EAAA,CAC5D;AAED,QAAMC,iBAA0DH,kBAC3DI,IAAKC,CAAAA,UAAU;AACZ,QAAIA,MAAMC,SAAS,cAAc;AAC7B,aAAOC,QAAQC,QAAQH,KAAK;AAAA,IAChC,WAAWA,MAAMC,SAAS,UAAU;AAChC,YAAMG,aAAaX,6BAA6BY,cAAcL,MAAMM,IAAI;AACxE,UAAI,CAACF,YAAY;AACb,cAAMV,MAAM,oEAAoEM,MAAMM,IAAI,EAAE;AAAA,MAChG;AACA,aAAOf,KAAKa,WAAWJ,MAAMM,IAAI,EAAEC,SAASP,MAAMQ,QAAQ,EACrDC,KAAMC,CAAAA,WAAW;AACd,YAAI,CAACA,OAAQ,QAAOC;AACpB,eAAO;AAAA,UAAE,GAAGX;AAAAA,UACpCU;AAAAA,QAAAA;AAAAA,MACoB,CAAC;AAAA,IACT,WAAWV,MAAMC,SAAS,eAAe;AACrC,aAAOC,QAAQC,QAAQH,KAAK;AAAA,IAChC,OAAO;AACH,YAAMN,MAAM,yCAAyC;AAAA,IACzD;AAAA,EACJ,CAAC,EACAkB,OAAOC,CAAAA,OAAKC,QAAQD,EAAC,CAAC;AAE3B,SAAOX,QAAQa,IAAIjB,cAAc;AACrC;AAwBO,SAAAkB,0BAAAC,IAAA;AAAA,QAAAC,KAAAC,GAAA,EAAA;AACH,QAAA;AAAA,IAAA9B;AAAAA,EAAAA,IAAA4B;AAIA,QAAA3B,UAAgB8B,cAAAA;AAChB,QAAA;AAAA,IAAA5B;AAAAA,IAAAC;AAAAA,EAAAA,IAAoEH;AAEpE,QAAA,CAAAC,MAAA8B,OAAA,IAAwBC,SAAAA;AACxB,QAAA,CAAAC,aAAAC,cAAA,IAAsCF,cAAuB;AAC7D,QAAA,CAAAG,kBAAAC,mBAAA,IAAgDJ,SAAAA;AAA8B,MAAAK;AAAA,MAAAT,GAAA,CAAA,MAAAzB,gCAAAyB,GAAA,CAAA,MAAA5B,WAAA4B,GAAA,CAAA,MAAA1B,6BAAA0B,UAAA7B,MAAA;AAEpEsC,SAAAA,MAAA;AAAA,UACFnC,6BAA6BC,8BAA4B;AACzD+B,2BAAmB;AACnBE,4BAAmBf,MAAU;AAC7BvB,8BAAA;AAAA,UAAAC;AAAAA,UAAAC;AAAAA,QAAAA,CACH,EAACmB,KACYY,OAAO,EAACO,MAAAC,CAAAA,MACAH,oBAAoBG,CAAC,CAAC,EAACC,QAAA,MACtBN,eAAc,KAAM,CAAC;AAAA,MAAC;AAAA,IAAA;AAGhDN,IAAAA,QAAAzB;AAAAyB,IAAAA,QAAA5B;AAAA4B,IAAAA,QAAA1B;AAAA0B,IAAAA,QAAA7B;AAAA6B,IAAAA,QAAAS;AAAAA,EAAA,OAAA;AAAAA,SAAAT,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAa;AAAA,MAAAb,GAAA,CAAA,MAAA5B,WAAA4B,UAAA7B,MAAA;AAAE0C,SAAA,CAAC1C,MAAMC,OAAO;AAAC4B,IAAAA,QAAA5B;AAAA4B,IAAAA,QAAA7B;AAAA6B,IAAAA,QAAAa;AAAAA,EAAA,OAAA;AAAAA,SAAAb,GAAA,CAAA;AAAA,EAAA;AAXlBc,YAAUL,IAWPI,EAAe;AAAC,MAAAE;AAAAC,OAAA;AAAA,QAAA,CAGV1C,2BAAyB;AAAA,UAAA2C;AAAA,UAAAjB,GAAA,CAAA,MAAAkB,uBAAAC,IAAA,2BAAA,GAAA;AACnBF,cAAA;AAAA,UAAAZ,aAAA;AAAA,QAAA;AAAqBL,QAAAA,QAAAiB;AAAAA,MAAA,OAAA;AAAAA,cAAAjB,GAAA,CAAA;AAAA,MAAA;AAA5Be,WAAOE;AAAsB,YAAAD;AAAAA,IAAA;AAAA,QAAAC;AAAA,QAAAjB,GAAA,CAAA,MAAA3B,QAAA2B,WAAAK,eAAAL,GAAA,EAAA,MAAAO,kBAAA;AAE1BU,WAAA;AAAA,QAAA5C;AAAAA,QAAAgC;AAAAA,QAAAE;AAAAA,MAAAA;AAEGP,MAAAA,QAAA3B;AAAA2B,MAAAA,SAAAK;AAAAL,MAAAA,SAAAO;AAAAP,MAAAA,SAAAiB;AAAAA,IAAA,OAAA;AAAAA,WAAAjB,GAAA,EAAA;AAAA,IAAA;AAFVe,SAAOE;AAAAA,EAEI;AAAA,SANRF;AAO6D;ACvHjE,SAASK,gBAAmD;AAAA,EAC/DC;AAAAA,EACAC,cAAc;AAAA,EACdnD;AAAAA,EACAoD;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACqB,GAAG;AAExB,QAAMzD,+BAA+B0D,gCAAAA;AAErC,QAAM/C,aAA2CgD,QAAQ,MAAM;AAC3D,WAAO3D,6BAA6BY,cAAchB,IAAI;AAAA,EAC1D,GAAG,CAACA,MAAMI,6BAA6BY,aAAa,CAAC;AAErD,QAAMgD,yBAAyBC,YAAY,CAAC5C,WAA6B;AACrE,QAAI+B,SACA;AACJ,QAAIE,qBAAqB;AACrB,YAAMY,YAAY7C,SAAS8C,iBAAiB9C,MAAM,IAAI;AACtDiC,4BAAsB;AAAA,QAClBY;AAAAA,QACA7C;AAAAA,MAAAA,CACH;AAAA,IACL;AAAA,EACJ,GAAG,CAAC+B,UAAUE,mBAAmB,CAAC;AAElC,QAAMc,6BAA6BH,YAAY,CAACI,aAA0B;AACtE,QAAIjB,SACA;AACJ,QAAIG,6BAA6B;AAC7B,YAAMe,aAAaD,WAAWA,SAAS3D,IAAI8B,OAAK2B,iBAAiB3B,CAAC,CAAC,IAAI;AACvEe,kCAA4B;AAAA,QACxBe;AAAAA,QACAD;AAAAA,MAAAA,CACH;AAAA,IACL;AAAA,EACJ,GAAG,CAACjB,UAAUE,mBAAmB,CAAC;AAElC,QAAMiB,4BAA4BC,yBAAyB;AAAA,IACvDrB;AAAAA,IACAnD;AAAAA,IACAe;AAAAA,IACAiD;AAAAA,IACAI;AAAAA,IACAX;AAAAA,EAAAA,CAEJ;AAEmBQ,cAAY,CAACzB,QAAwB;AACpDA,QAAEiC,gBAAAA;AACF,QAAItB,aAAa;AACbiB,iCAA2B,CAAA,CAAE;AAAA,IACjC,OAAO;AACHJ,6BAAuB,IAAI;AAAA,IAC/B;AAAA,EACJ,GAAG,CAACV,mBAAmB,CAAC;AAExB,MAAIoB;AAEJ,QAAMC,eAAeA,MAAM;AACvB,QAAIvB,SACA;AACJmB,8BAA0BK,KAAAA;AAAAA,EAC9B;AAEA,MAAIC,MAAMC,QAAQzB,KAAK,GAAG;AACtBqB,YAAQ,oBAAC,SAAI,WAAW,uBACnBrB,gBAAM3C,IAAI,CAACqE,KAAKC,UAAU;AACvB,aAAO,oBAAC,kBAAA,EAEJ,SAASL,cACT,WAAWI,KACX,UACA,mBACA,MACA,WACA,kBAAA,GAPK,qBAAqBC,KAAK,EAOM;AAAA,IAC7C,CAAC,EAAA,CACL;AAAA,EACJ,WAAW3B,OAAO4B,qBAAqB5B,OAAO4B,qBAAqB;AAC/DP,YAAQ,oBAAC,kBAAA,EACL,WAAWrB,OACX,SAASsB,cACT,UACA,mBACA,MACA,WACA,kBAAA,CAAqC;AAAA,EAE7C;AACA,SAAO,qBAAC,OAAA,EAAI,WAAWO,IAAI,uBACvB,gCACA,0EACA9B,WAAW,kBAAkB,uBAC7B,6FACAO,SACJ,GAEKe,UAAAA;AAAAA,IAAAA;AAAAA,IACA,CAACrB,SAAS,oBAAC,OAAA,EAAI,WAAU,4BACtB,UAAA,qBAAC,QAAA,EAAO,UACJ,SAASsB,cAAa,UAAA;AAAA,MAAA;AAAA,MAChBzB;AAAAA,IAAAA,EAAAA,CACV,EAAA,CACJ;AAAA,EAAA,GAEJ;AACJ;ACpIO,SAASiC,gBAAgB;AAAA,EAAEC;AAA+B,GAAG;AAChE,QAAMC,WAAWC,YAAAA;AACjB,QAAMC,gBAAgBC,iBAAAA;AACtB,QAAMC,sBAAsBC,uBAAAA;AAG5B,QAAMC,iBAAiBC,eAAMC,OAAOJ,oBAAoBK,IAAI;AAC5DH,iBAAeI,UAAUN,oBAAoBK;AAG7C,QAAME,aAAaJ,eAAMC,OAAOJ,oBAAoBQ,OAAO;AAC3DD,aAAWD,UAAUN,oBAAoBQ;AAEzCtD,YAAU,MAAM;AACZ,UAAM3C,OAAOqF,SAASa;AACtB,UAAMC,iBAAiBZ,cAAca,oBAAoBpG,IAAI,KAAKA,SAASuF,cAAcc;AAGzF,UAAMC,iBAAiBf,cAAcc,aAAa,MAAM,OAAO,GAAGd,cAAcc,QAAQ;AACxF,UAAME,gBAAgBvG,SAASsG,kBAAkBtG,KAAKwG,WAAWF,iBAAiB,GAAG,KAAKlB,UAAUqB,KAAKC,CAAAA,SAAQ;AAC7G,YAAMC,WAAWpB,cAAcqB,gBAAgBF,KAAKzF,IAAI;AACxD,aAAOjB,KAAKwG,WAAW,GAAGG,QAAQ,GAAG,KAAK3G,SAAS2G;AAAAA,IACvD,CAAC;AAED,QAAIJ,iBAAiBZ,eAAeI,YAAY,UAAU;AACtDC,iBAAWD,QAAQ,QAAQ;AAAA,IAC/B,WAAWI,kBAAkBR,eAAeI,YAAY,WAAW;AAC/DC,iBAAWD,QAAQ,SAAS;AAAA,IAChC;AAAA,EACJ,GAAG,CAACV,SAASa,UAAUX,eAAeH,QAAQ,CAAC;AAE/C,SAAO;AACX;AC1CO,SAAAyB,UAAAjF,IAAA;AAAA,QAAAC,KAAAC,GAAA,EAAA;AAAmB,QAAA;AAAA,IAAAtB;AAAAA,IAAAsG;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAvF;AACtB,QAAAwF,WAAiBC,0BAAAA;AAA4B,MAAA/E;AAAA,MAAAI;AAAA,MAAAb,GAAA,CAAA,MAAAqF,oBAAArF,GAAA,CAAA,MAAArB,eAAAqB,GAAA,CAAA,MAAAuF,YAAAvF,GAAA,CAAA,MAAAmF,iBAAAnF,GAAA,CAAA,MAAAkF,eAAAlF,GAAA,CAAA,MAAAiF,YAAAjF,GAAA,CAAA,MAAAsF,2BAAAtF,UAAAoF,SAAA;AAE7B3E,SAAAA,MAAA;AACZ8E,eAAQE,YAAA;AAAA,QAAA9G;AAAAA,QAAAsG;AAAAA,QAAAC;AAAAA,QAAAC;AAAAA,QAAAC;AAAAA,QAAAC;AAAAA,QAAAC;AAAAA,MAAAA,CAMS;AAAC,aAAA,MACLC,SAAQG,cAAAA;AAAAA,IAAgB;AACtC7E,SAAA,CAAC0E,UAAU5G,aAAasG,UAAUC,aAAaC,eAAeC,SAASC,kBAAkBC,uBAAuB;AAACtF,IAAAA,QAAAqF;AAAArF,IAAAA,QAAArB;AAAAqB,IAAAA,QAAAuF;AAAAvF,IAAAA,QAAAmF;AAAAnF,IAAAA,QAAAkF;AAAAlF,IAAAA,QAAAiF;AAAAjF,IAAAA,QAAAsF;AAAAtF,IAAAA,QAAAoF;AAAApF,IAAAA,QAAAS;AAAAT,IAAAA,QAAAa;AAAAA,EAAA,OAAA;AAAAJ,SAAAT,GAAA,CAAA;AAAAa,SAAAb,GAAA,CAAA;AAAA,EAAA;AATpH2F,kBAAgBlF,IASbI,EAAiH;AAAC,SAAA;AAAA;ACClH,SAAA+E,eAAA7F,IAAA;AAAA,QAAAC,KAAAC,GAAA,CAAA;AAAwB,QAAA;AAAA,IAAA4F;AAAAA,EAAAA,IAAA9F;AAC3B,QAAA+F,WAAiBC,kBAAAA;AACjB,QAAAC,iBAAuBC,kBAAAA;AAEvBC,UAAAC,IAAY,8BAA8BH,gBAAcI,gBAAkB,SAASJ,gBAAcK,MAAAC,aAAqB;AAAC,MAEnHN,gBAAcI,gBAAA;AAAA,QAAA3F;AAAA,QAAAT,GAAA,CAAA,MAAAkB,uBAAAC,IAAA,2BAAA,GAAA;AACPV,gCAAC,wBAAA,EAA6B,MAAA,QAAA,CAAO;AAAGT,MAAAA,QAAAS;AAAAA,IAAA,OAAA;AAAAA,YAAAT,GAAA,CAAA;AAAA,IAAA;AAAA,WAAxCS;AAAAA,EAAwC;AAAA,MAAA,CAG9CuF,gBAAcK,MAAA;AAAA,QAAA5F;AAAA,QAAAT,GAAA,CAAA,MAAAgG,kBAAAhG,UAAA8F,SAAAS,YAAAC,WAAA;AACS/F,YAAAqF,SAAQS,YAAAC,aAC5B,oBAAC,aAA0B,gBAAqB;AACnDxG,MAAAA,QAAAgG;AAAAhG,MAAAA,GAAA,CAAA,IAAA8F,SAAAS,YAAAC;AAAAxG,MAAAA,QAAAS;AAAAA,IAAA,OAAA;AAAAA,YAAAT,GAAA,CAAA;AAAA,IAAA;AAFD,UAAAyG,kBAAwBhG;AAEtB,QAAAI;AAAA,QAAAb,UAAAyG,iBAAA;AACK5F,sEAAkB;AAAIb,MAAAA,QAAAyG;AAAAzG,MAAAA,QAAAa;AAAAA,IAAA,OAAA;AAAAA,WAAAb,GAAA,CAAA;AAAA,IAAA;AAAA,WAAtBa;AAAAA,EAAsB;AAAA,MAAAJ;AAAA,MAAAT,UAAA6F,UAAA;AAG1BpF,mDAAW;AAAIT,IAAAA,QAAA6F;AAAA7F,IAAAA,QAAAS;AAAAA,EAAA,OAAA;AAAAA,SAAAT,GAAA,CAAA;AAAA,EAAA;AAAA,SAAfS;AAAe;ACEnB,SAAAiG,aAAAC,OAAA;AAAA,QAAA3G,KAAAC,GAAA,EAAA;AACH,QAAA;AAAA,IAAA2G,OAAA7G;AAAAA,IAAA8G;AAAAA,IAAAC;AAAAA,IAAAC,gBAAAtG;AAAAA,IAAA8C,UAAA1C;AAAAA,EAAAA,IAMI8F;AALA,QAAAC,QAAA7G,OAAgBN,SAAR,WAARM;AAGA,QAAAgH,iBAAAtG,OAAsBhB,iBAAtBgB;AAAsB,MAAAM;AAAA,MAAAf,UAAAa,IAAA;AACtBE,SAAAF,OAAapB,cAAboB;AAAab,IAAAA,QAAAa;AAAAb,IAAAA,QAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,GAAA,CAAA;AAAA,EAAA;AAAb,QAAAuD,WAAAxC;AAGJ,QAAA6C,sBAA4BC,uBAAAA;AAAyB,MAAA5C;AAAA,MAAAjB,UAAA6G,QAAA;AAEhC5F,SAAA4F,8BAAW,QAAA,CAAA,CAAM;AAAE7G,IAAAA,QAAA6G;AAAA7G,IAAAA,QAAAiB;AAAAA,EAAA,OAAA;AAAAA,SAAAjB,GAAA,CAAA;AAAA,EAAA;AAAxC,QAAAgH,eAAqB/F;AAAoB,MAAAgG;AAAA,MAAAjH,GAAA,CAAA,MAAA4D,uBAAA5D,UAAA8G,UAAA9G,GAAA,CAAA,MAAA4G,OAAA;AACpBK,SAAAH,8BAChB,QAAA,EACUF,OACU,iBAAAhD,oBAAmBK,SAAU,WAAW,OAAO,IAAA,CAAG;AAE1EjE,IAAAA,QAAA4D;AAAA5D,IAAAA,QAAA8G;AAAA9G,IAAAA,QAAA4G;AAAA5G,IAAAA,QAAAiH;AAAAA,EAAA,OAAA;AAAAA,SAAAjH,GAAA,CAAA;AAAA,EAAA;AALD,QAAAkH,eAAqBD;AAKnB,MAAAE;AAAA,MAAAnH,UAAAuD,UAAA;AAIM4D,6BAAC,mBAA0B5D,SAAAA,CAAQ;AAAGvD,IAAAA,QAAAuD;AAAAvD,IAAAA,QAAAmH;AAAAA,EAAA,OAAA;AAAAA,SAAAnH,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAoH;AAAA,MAAAC;AAAA,MAAArH,GAAA,EAAA,MAAAkB,uBAAAC,IAAA,2BAAA,GAAA;AAGtCiG,6BAAC,QAAA,EAAM;AACPC,6BAAC,aAAA,EAAW;AAAErH,IAAAA,SAAAoH;AAAApH,IAAAA,SAAAqH;AAAAA,EAAA,OAAA;AAAAD,SAAApH,GAAA,EAAA;AAAAqH,SAAArH,GAAA,EAAA;AAAA,EAAA;AAAA,MAAAsH;AAAA,MAAAtH,GAAA,EAAA,MAAAgH,gBAAAhH,GAAA,EAAA,MAAAkH,gBAAAlH,GAAA,EAAA,MAAA+G,kBAAA/G,WAAAmH,IAAA;AALlBG,SAAA,qBAAC,YAAyBP,gBACtBI,UAAAA;AAAAA,MAAAA;AAAAA;MAECD;AAAAA,MACDE;AAAAA,MACAC;AAAAA,IAAAA,GACJ;AAAWrH,IAAAA,SAAAgH;AAAAhH,IAAAA,SAAAkH;AAAAlH,IAAAA,SAAA+G;AAAA/G,IAAAA,SAAAmH;AAAAnH,IAAAA,SAAAsH;AAAAA,EAAA,OAAA;AAAAA,SAAAtH,GAAA,EAAA;AAAA,EAAA;AAAA,SANXsH;AAMW;ACpCZ,SAAAC,YAAAZ,OAAA;AAAA,QAAA3G,KAAAC,GAAA,EAAA;AACH,QAAA;AAAA,IAAA2G,OAAA7G;AAAAA,IAAA8G;AAAAA,IAAAC;AAAAA,IAAAC,gBAAAtG;AAAAA,IAAAoF;AAAAA,EAAAA,IAMIc;AALA,QAAAC,QAAA7G,OAAgBN,SAAR,WAARM;AAGA,QAAAgH,iBAAAtG,OAAsBhB,iBAAtBgB;AAIJ,QAAAqF,WAAiBC,kBAAAA;AAKbD,WAAQ0B,cAAAjE;AAAA,MAAA1C;AAAA,MAAAE;AAAA,MAAAf,GAAA,CAAA,MAAA8F,SAAA0B,cAAAjE,UAAA;AADDxC,SAAA+E,SAAQ0B,cAAAjE,YAAA,CAAA;AAA6BvD,IAAAA,GAAA,CAAA,IAAA8F,SAAA0B,cAAAjE;AAAAvD,IAAAA,QAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,GAAA,CAAA;AAAA,EAAA;AAA5Ca,OAAOE;AADX,QAAAwC,WAAiB1C;AAEqB,MAAAI;AAAA,MAAAjB,GAAA,CAAA,MAAA6G,UAAA7G,GAAA,CAAA,MAAA+G,kBAAA/G,GAAA,CAAA,MAAAuD,YAAAvD,GAAA,CAAA,MAAA8G,UAAA9G,UAAA4G,OAAA;AAOlB3F,6BAAC,cAAA,EACU2F,OACCC,QACAC,QACQC,gBACNxD,UAAQ;AACpBvD,IAAAA,QAAA6G;AAAA7G,IAAAA,QAAA+G;AAAA/G,IAAAA,QAAAuD;AAAAvD,IAAAA,QAAA8G;AAAA9G,IAAAA,QAAA4G;AAAA5G,IAAAA,QAAAiB;AAAAA,EAAA,OAAA;AAAAA,SAAAjB,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAiH;AAAA,MAAAjH,GAAA,CAAA,MAAA6F,YAAA7F,UAAAiB,IAAA;AAVlBgG,SAAA,oBAAC,gBAAA,EACG,UAAA,oBAAC,kBAAA,EACG,UAAA,oBAAC,mBAEO,QAAAhG,IASH4E,SAAAA,CACL,EAAA,CACJ,GACJ;AAAiB7F,IAAAA,QAAA6F;AAAA7F,IAAAA,QAAAiB;AAAAjB,IAAAA,SAAAiH;AAAAA,EAAA,OAAA;AAAAA,SAAAjH,GAAA,EAAA;AAAA,EAAA;AAAA,SAhBjBiH;AAgBiB;AC1DlB,SAAAQ,mBAAA1H,IAAA;AAAA,QAAAC,KAAAC,GAAA,CAAA;AAAA,MAAAQ;AAAA,MAAAI;AAAA,MAAAE;AAAA,MAAAf,UAAAD,IAAA;AAuBiBgB,SAAAG,uBAAAC,iCAAG;AAACH,SAAA;AAvBO,YAAA;AAAA,QAAA0G;AAAAA,QAAAlG;AAAAA,QAAAmG;AAAAA,QAAA9F;AAAAA,MAAAA,IAAA9B;AAMG,UAE9BiD,MAAAC,QAAc0E,UAAQC,EAAI,GAAC;AAAA,cACrBpJ,MAAM,uEAAuE;AAAA,MAAC;AAAA,UAGpFmJ,UAAQ5I,SAAW,YAAY4I,SAAQC,MAAOD,SAAQC,GAAA7I,SAAa,OAAK;AAAA,cAClEP,MAAM,mDAAmD;AAAA,MAAC;AAEpE,YAAAqJ,cAAoBF,SAAQC;AAC5B,YAAAE,aAAmBD,YAAWC;AAAY,UAAA,CACrCA,YAAU;AAAA,cACLtJ,MAAM,4FAA4FkJ,WAAW,EAAE;AAAA,MAAC;AAE1H,YAAAK,SAAevG;AACf,YAAAG,oBAAiDkG,YAAWG,IAAUrG;AAAqB,UAAA,CAEtFoG,QAAM;AAAShH,aAAA;AAAI,cAAAC;AAAAA,MAAA;AAExB,UAAAiH;AAAAA,sBAAoBtG;AAAkB,UAClC,CAACsG,iBAAa,CAAKA,cAAaC,QAAO;AACvCD,wBAAgBA,OAAAA,KAAYH,UAAU;AAAzB,YACTjG,MAAI;AACJoG,0BAAgBA,cAAaE,UAAW;AAAA,QAA3B;AAAA,MAAA;AAIFtH,WAAA;AAENJ,WAAAsH,UACGA,OAAMlJ,IAAA,CAAAc,IAAAwD,UAEE,oBAAA,SACc,WAAA,iCACT8E,2BAAiBA,cAAapJ,IAAAuJ,SAEvB,oBAAA,OAAA,EAEc,WAAA,cAEV,UAAA,oBAAC,eAAA,EACG,UAAA,oBAAC,iBAAA,EACgB,aAAAA,KACN,OAACzI,GAAGyI,GAAG,GACJ,UAAAN,WAAWM,GAAa,GAE5B,MAAA,QAAA,IACd,mBAVmBA,GAAa,EAWpC,CAER,EAAA,GAlBM,SAASzI,EAAC,IAAIwD,KAAK,EAmB7B,CAEP;AAAA,IAAC;AAAAnD,IAAAA,QAAAD;AAAAC,IAAAA,QAAAS;AAAAT,IAAAA,QAAAa;AAAAb,IAAAA,QAAAe;AAAAA,EAAA,OAAA;AAAAN,SAAAT,GAAA,CAAA;AAAAa,SAAAb,GAAA,CAAA;AAAAe,SAAAf,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAe,OAAAG,uBAAAC,IAAA,6BAAA,GAAA;AAAA,WAAAJ;AAAAA,EAAA;AAAA,MAAAE;AAAA,MAAAjB,UAAAS,IAAA;AAzBVQ,sCACKR,UAAAA,GAAAA,CAyBL;AAAMT,IAAAA,QAAAS;AAAAT,IAAAA,QAAAiB;AAAAA,EAAA,OAAA;AAAAA,SAAAjB,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAiH;AAAA,MAAAjH,GAAA,CAAA,MAAAa,MAAAb,UAAAiB,IAAA;AA3BVgG,SAAA,oBAAA,OAAA,EAAe,WAAApG,IACXI,UAAAA,IA2BJ;AAAMjB,IAAAA,QAAAa;AAAAb,IAAAA,QAAAiB;AAAAjB,IAAAA,QAAAiH;AAAAA,EAAA,OAAA;AAAAA,SAAAjH,GAAA,CAAA;AAAA,EAAA;AAAA,SA5BNiH;AA4BM;AC/DP,SAAAoB,uBAAAtI,IAAA;AAAA,QAAAC,KAAAC,GAAA,EAAA;AAAgC,QAAA;AAAA,IAAA9B,MAAAmK;AAAAA,EAAAA,IAAAvI;AAGnC,QAAA+F,WAAiB7D,gCAAAA;AACjB,QAAA9D,OAAaoK,eAAeD,QAAQ;AAAE,MAAA7H;AAAA,MAAAT,GAAA,CAAA,MAAAsI,YAAAtI,UAAA8F,UAAA;AACRrF,SAAAqF,SAAQ0C,yBAA0BF,QAAQ;AAACtI,IAAAA,QAAAsI;AAAAtI,IAAAA,QAAA8F;AAAA9F,IAAAA,QAAAS;AAAAA,EAAA,OAAA;AAAAA,SAAAT,GAAA,CAAA;AAAA,EAAA;AAAzE,QAAAyI,wBAA8BhI;AAA4C,MAAAI;AAAA,MAAAb,GAAA,CAAA,MAAAsI,YAAAtI,UAAA8F,UAAA;AAClDjF,SAAAiF,SAAQ4C,mBAAoBJ,QAAQ;AAACtI,IAAAA,QAAAsI;AAAAtI,IAAAA,QAAA8F;AAAA9F,IAAAA,QAAAa;AAAAA,EAAA,OAAA;AAAAA,SAAAb,GAAA,CAAA;AAAA,EAAA;AAA7D,QAAA2I,kBAAwB9H;AACxB,QAAAwE,mBAAyBuD,8BAAAA;AACzB,QAAA;AAAA,IAAAC,GAAAA;AAAAA,EAAAA,IAAcC,eAAAA;AACS,QAAA/H,MAAA;AAClB,QAAAgI,KAAAC;AAAiB,QAAA/H,KAAA4H,GAAE,kCAAgC;AAAA,IAAA1K;AAAAA,EAAAA,CAAU;AAAC,MAAA8I;AAAA,MAAAjH,GAAA,CAAA,MAAA+I,MAAA/I,UAAAiB,IAAA;AAA/DgG,SAAA,oBAAC,IAAA,EAAiB,OAAAhG,GAAAA,CAA6C;AAAGjB,IAAAA,QAAA+I;AAAA/I,IAAAA,QAAAiB;AAAAjB,IAAAA,QAAAiH;AAAAA,EAAA,OAAA;AAAAA,SAAAjH,GAAA,CAAA;AAAA,EAAA;AAAA,MAAAmH;AAAA,MAAAnH,GAAA,CAAA,MAAAqF,oBAAArF,GAAA,EAAA,MAAAyI,yBAAAzI,GAAA,EAAA,MAAA2I,mBAAA3I,WAAA7B,MAAA;AAGrDgJ,SAAAA,MAAA;AACL9B,uBAAgB4D,iBAAA;AAAA,QAAAC,eAAA;AAAA,UAAA/K;AAAAA,UAAAkD,MAE1B8H,mBAAmBhL,IAAI;AAAA,QAAA;AAAA,QAACsK;AAAAA,QAAAE;AAAAA,QAAAS,UAAA;AAAA,QAAAC,aAGG;AAAA,MAAA,CAChB;AAAA,IAAC;AACLrJ,IAAAA,QAAAqF;AAAArF,IAAAA,SAAAyI;AAAAzI,IAAAA,SAAA2I;AAAA3I,IAAAA,SAAA7B;AAAA6B,IAAAA,SAAAmH;AAAAA,EAAA,OAAA;AAAAA,SAAAnH,GAAA,EAAA;AAAA,EAAA;AAAA,MAAAoH;AAAA,MAAApH,WAAA6I,IAAA;AACAzB,SAAAyB,GAAE,iCAAiC;AAAC7I,IAAAA,SAAA6I;AAAA7I,IAAAA,SAAAoH;AAAAA,EAAA,OAAA;AAAAA,SAAApH,GAAA,EAAA;AAAA,EAAA;AAAA,MAAAqH;AAAA,MAAArH,GAAA,EAAA,MAAAmH,MAAAnH,WAAAoH,IAAA;AAXzCC,SAAA,oBAAC,UAAkB,WAAA,QACT,MAAA,SACG,SAAAF,IASRC,UAAAA,GAAAA,CACL;AAASpH,IAAAA,SAAAmH;AAAAnH,IAAAA,SAAAoH;AAAApH,IAAAA,SAAAqH;AAAAA,EAAA,OAAA;AAAAA,SAAArH,GAAA,EAAA;AAAA,EAAA;AAAA,MAAAsH;AAAA,MAAAtH,GAAA,EAAA,MAAAiH,MAAAjH,WAAAqH,IAAA;AAdNC,SAAA,qBAAA,OAAA,EAAgB,WAAAvG,KACnBkG,UAAAA;AAAAA,MAAAA;AAAAA,MACAI;AAAAA,IAAAA,GAaJ;AAAMrH,IAAAA,SAAAiH;AAAAjH,IAAAA,SAAAqH;AAAArH,IAAAA,SAAAsH;AAAAA,EAAA,OAAA;AAAAA,SAAAtH,GAAA,EAAA;AAAA,EAAA;AAAA,SAfCsH;AAeD;"}
@@ -102,8 +102,10 @@ function useEntityHistory(params) {
102
102
  }));
103
103
  throw new Error(errorData_0.error?.message || `Failed to revert (${response_0.status})`);
104
104
  }
105
+ const result_0 = await response_0.json();
105
106
  currentEntityRef.current = void 0;
106
107
  setRefreshTrigger((prev_1) => prev_1 + 1);
108
+ return result_0.data;
107
109
  }, [apiConfig, slug, entityId]);
108
110
  return useMemo(() => ({
109
111
  entries,
@@ -118,4 +120,4 @@ function useEntityHistory(params) {
118
120
  export {
119
121
  useEntityHistory as u
120
122
  };
121
- //# sourceMappingURL=useEntityHistory-Dcj4zhGj.js.map
123
+ //# sourceMappingURL=useEntityHistory-UVsSclfZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntityHistory-UVsSclfZ.js","sources":["../src/hooks/useEntityHistory.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, useMemo } from \"react\";\nimport { useApiConfig } from \"@rebasepro/core\";\n\nexport interface HistoryEntryData {\n id: string;\n table_name: string;\n entity_id: string;\n action: \"create\" | \"update\" | \"delete\";\n changed_fields: string[] | null;\n values: Record<string, unknown> | null;\n previous_values: Record<string, unknown> | null;\n updated_by: string | null;\n updated_at: string;\n}\n\nexport interface UseEntityHistoryResult {\n entries: HistoryEntryData[];\n total: number;\n isLoading: boolean;\n hasMore: boolean;\n error?: Error;\n loadMore: () => void;\n revert: (historyId: string) => Promise<Record<string, unknown>>;\n}\n\n/**\n * Hook to fetch entity history from the backend REST API.\n * Replaces the old subcollection-based approach with a proper API call.\n */\nexport function useEntityHistory(params: {\n slug: string;\n entityId: string | number | undefined;\n enabled?: boolean;\n pageSize?: number;\n}): UseEntityHistoryResult {\n const { slug, entityId, enabled = true, pageSize = 10 } = params;\n const apiConfig = useApiConfig();\n\n const [entries, setEntries] = useState<HistoryEntryData[]>([]);\n const [total, setTotal] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n const [error, setError] = useState<Error | undefined>();\n const [offset, setOffset] = useState(0);\n const [refreshTrigger, setRefreshTrigger] = useState(0);\n\n // Track the current entity identity so we can detect stale responses\n const currentEntityRef = useRef<string | undefined>(undefined);\n\n const fetchEntries = useCallback(async (\n currentOffset: number,\n signal?: AbortSignal\n ) => {\n if (!apiConfig?.apiUrl || !entityId || !enabled) return;\n\n setIsLoading(true);\n setError(undefined);\n\n try {\n const token = await apiConfig.getAuthToken?.();\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\"\n };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const url = `${apiConfig.apiUrl}/api/data/${slug}/${entityId}/history?limit=${pageSize}&offset=${currentOffset}`;\n const response = await fetch(url, { headers,\nsignal });\n\n // Check if the request was aborted or the entity changed while in-flight\n if (signal?.aborted) return;\n const entityKey = `${slug}/${entityId}`;\n if (currentEntityRef.current !== entityKey) return;\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({ error: { message: response.statusText } }));\n throw new Error(errorData.error?.message || `Failed to fetch history (${response.status})`);\n }\n\n const result = await response.json();\n\n if (currentOffset === 0) {\n setEntries(result.data);\n } else {\n setEntries(prev => [...prev, ...result.data]);\n }\n\n setTotal(result.meta.total);\n setHasMore(result.meta.hasMore);\n } catch (err) {\n // Don't set error state for intentional aborts\n if (err instanceof DOMException && err.name === \"AbortError\") return;\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsLoading(false);\n }\n }, [apiConfig, slug, entityId, enabled, pageSize]);\n\n // Single unified effect: reset state when entity changes, fetch when offset changes.\n // Uses AbortController to cancel stale requests on entity change or unmount.\n useEffect(() => {\n const entityKey = `${slug}/${entityId}`;\n const isNewEntity = currentEntityRef.current !== entityKey;\n\n if (isNewEntity) {\n // Reset state for new entity\n currentEntityRef.current = entityKey;\n setEntries([]);\n setTotal(0);\n setHasMore(true);\n setOffset(0);\n }\n\n if (!enabled || !entityId) return;\n\n const abortController = new AbortController();\n // When entity changed, always fetch from offset 0\n const effectiveOffset = isNewEntity ? 0 : offset;\n fetchEntries(effectiveOffset, abortController.signal);\n\n return () => {\n abortController.abort();\n };\n }, [fetchEntries, offset, enabled, entityId, slug, refreshTrigger]);\n\n const loadMore = useCallback(() => {\n if (!isLoading && hasMore && offset + entries.length < total) {\n setOffset(prev => prev + pageSize);\n }\n }, [isLoading, hasMore, pageSize, offset, entries.length, total]);\n\n const revert = useCallback(async (historyId: string): Promise<Record<string, unknown>> => {\n if (!apiConfig?.apiUrl || !entityId) {\n throw new Error(\"Cannot revert: missing API configuration or entity ID\");\n }\n\n const token = await apiConfig.getAuthToken?.();\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\"\n };\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n\n const url = `${apiConfig.apiUrl}/api/data/${slug}/${entityId}/history/${historyId}/revert`;\n const response = await fetch(url, { method: \"POST\",\nheaders });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({ error: { message: response.statusText } }));\n throw new Error(errorData.error?.message || `Failed to revert (${response.status})`);\n }\n\n const result = await response.json();\n\n // Refresh the history list after revert by resetting the entity ref\n // and triggering the effect.\n currentEntityRef.current = undefined;\n setRefreshTrigger(prev => prev + 1);\n\n // Return the reverted entity data so callers can update the form\n return result.data as Record<string, unknown>;\n }, [apiConfig, slug, entityId]);\n\n return useMemo(() => ({\n entries,\n total,\n isLoading,\n hasMore,\n error,\n loadMore,\n revert\n }), [entries, total, isLoading, hasMore, error, loadMore, revert]);\n}\n"],"names":["useEntityHistory","params","slug","entityId","enabled","pageSize","apiConfig","useApiConfig","entries","setEntries","useState","total","setTotal","isLoading","setIsLoading","hasMore","setHasMore","error","setError","offset","setOffset","refreshTrigger","setRefreshTrigger","currentEntityRef","useRef","undefined","fetchEntries","useCallback","currentOffset","signal","apiUrl","token","getAuthToken","headers","url","response","fetch","aborted","entityKey","current","ok","errorData","json","catch","message","statusText","Error","status","result","data","prev","meta","err","DOMException","name","String","useEffect","isNewEntity","abortController","AbortController","effectiveOffset","abort","loadMore","length","revert","historyId","method","useMemo"],"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;