@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
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useSnackbarController, useUnsavedChangesDialog, UnsavedChangesDialog, IconForView } from "@rebasepro/core";
3
- import { j as useUrlController } from "./util-BQ82ySL3.js";
3
+ import { j as useUrlController } from "./util-CwLmSpGp.js";
4
4
  import { useState, useEffect } from "react";
5
5
  import { c } from "react-compiler-runtime";
6
- import { Typography, Button, ResizablePanels, IconButton, iconSize, cls, defaultBorderMixin } from "@rebasepro/ui";
6
+ import { Typography, Button, ResizablePanels, Tooltip, IconButton, iconSize, cls, defaultBorderMixin } from "@rebasepro/ui";
7
7
  import { PlusIcon } from "lucide-react";
8
8
  import "@rebasepro/common";
9
9
  import "fast-equals";
@@ -22,8 +22,8 @@ import "xlsx";
22
22
  import "@rebasepro/schema-inference";
23
23
  import "date-fns";
24
24
  import "date-fns/locale";
25
- import { A as AIModifiedPathsProvider } from "./PropertyEditView-DS67DxoT.js";
26
- import { CollectionEditor } from "./CollectionEditorDialog-B2M9lCyL.js";
25
+ import { A as AIModifiedPathsProvider } from "./PropertyEditView-C4nlYmAc.js";
26
+ import { CollectionEditor } from "./CollectionEditorDialog-MbvXGzEq.js";
27
27
  function CollectionStudioView(t0) {
28
28
  const $ = c(30);
29
29
  let collectionId;
@@ -91,7 +91,7 @@ function CollectionStudioView(t0) {
91
91
  }
92
92
  }, setFormDirty }, activeCollectionId) : /* @__PURE__ */ jsxs("div", { className: "flex-grow flex flex-col items-center justify-center h-full gap-4", children: [
93
93
  /* @__PURE__ */ jsx(Typography, { variant: "label", children: "Select a collection or create a new one" }),
94
- /* @__PURE__ */ jsxs(Button, { onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), children: [
94
+ /* @__PURE__ */ jsxs(Button, { disabled: props.configController?.readOnly, onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), children: [
95
95
  /* @__PURE__ */ jsx(PlusIcon, {}),
96
96
  "Add new collection"
97
97
  ] })
@@ -146,7 +146,7 @@ function CollectionStudioView(t0) {
146
146
  }
147
147
  let t7;
148
148
  if ($[27] !== t3 || $[28] !== t6) {
149
- t7 = /* @__PURE__ */ jsx("div", { className: "flex-grow flex flex-col h-full w-full bg-white dark:bg-surface-800", children: /* @__PURE__ */ jsxs(AIModifiedPathsProvider, { children: [
149
+ t7 = /* @__PURE__ */ jsx("div", { className: "flex-grow flex flex-col h-full w-full bg-white dark:bg-surface-950", children: /* @__PURE__ */ jsxs(AIModifiedPathsProvider, { children: [
150
150
  t3,
151
151
  t6
152
152
  ] }) });
@@ -182,17 +182,17 @@ function CollectionsStudioView({
182
182
  }
183
183
  }, [sidebarSize]);
184
184
  const collections = configController.collections || [];
185
- return /* @__PURE__ */ jsx("div", { className: "flex h-full w-full bg-white dark:bg-surface-800 overflow-hidden text-text-primary dark:text-text-primary-dark", children: /* @__PURE__ */ jsx(ResizablePanels, { orientation: "horizontal", panelSizePercent: sidebarSize, onPanelSizeChange: setSidebarSize, minPanelSizePx: 220, firstPanel: /* @__PURE__ */ jsxs("div", { className: cls("flex flex-col h-full w-full bg-white dark:bg-surface-800 border-r", defaultBorderMixin), children: [
186
- /* @__PURE__ */ jsxs("div", { className: cls("flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-800 min-h-[48px]", defaultBorderMixin), children: [
185
+ return /* @__PURE__ */ jsx("div", { className: "flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark", children: /* @__PURE__ */ jsx(ResizablePanels, { orientation: "horizontal", panelSizePercent: sidebarSize, onPanelSizeChange: setSidebarSize, minPanelSizePx: 220, firstPanel: /* @__PURE__ */ jsxs("div", { className: cls("flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r", defaultBorderMixin), children: [
186
+ /* @__PURE__ */ jsxs("div", { className: cls("flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]", defaultBorderMixin), children: [
187
187
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark", children: "Collections" }),
188
- /* @__PURE__ */ jsx(IconButton, { size: "small", onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), className: activeCollectionId === "new" ? "text-primary dark:text-primary-dark" : "text-text-secondary dark:text-text-secondary-dark", children: /* @__PURE__ */ jsx(PlusIcon, { size: iconSize.smallest }) })
188
+ /* @__PURE__ */ jsx(Tooltip, { title: configController.readOnly ? configController.readOnlyReason || "Read only" : "Add collection", children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(IconButton, { size: "small", disabled: configController.readOnly, onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), className: activeCollectionId === "new" ? "text-primary dark:text-primary-dark" : "text-text-secondary dark:text-text-secondary-dark", children: /* @__PURE__ */ jsx(PlusIcon, { size: iconSize.smallest }) }) }) })
189
189
  ] }),
190
190
  /* @__PURE__ */ jsxs("div", { className: "flex-grow overflow-y-auto w-full no-scrollbar p-2 space-y-0.5", children: [
191
191
  collections.length === 0 && /* @__PURE__ */ jsx("div", { className: "p-4 text-center", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-text-disabled dark:text-text-disabled-dark italic", children: "No collections yet." }) }),
192
192
  collections.map((collection) => {
193
193
  const collectionKey = collection.slug;
194
194
  const isSelected = activeCollectionId === collectionKey;
195
- return /* @__PURE__ */ jsxs("div", { onClick: () => navigate(urlController.buildAppUrlPath(`schema/${collectionKey}`)), className: cls("flex items-center gap-3 px-3 py-2 cursor-pointer rounded-md text-sm transition-colors", isSelected ? "bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light" : "hover:bg-surface-100 dark:hover:bg-surface-800 text-text-secondary dark:text-text-secondary-dark"), children: [
195
+ return /* @__PURE__ */ jsxs("div", { onClick: () => navigate(urlController.buildAppUrlPath(`schema/${collectionKey}`)), className: cls("flex items-center gap-3 px-3 py-2 cursor-pointer rounded-md text-sm transition-colors", isSelected ? "bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light" : "hover:bg-surface-100 dark:hover:bg-surface-900 text-text-secondary dark:text-text-secondary-dark"), children: [
196
196
  /* @__PURE__ */ jsx(IconForView, { collectionOrView: collection, size: "small", className: cls(isSelected ? "text-primary dark:text-primary-light" : "text-text-secondary dark:text-text-secondary-dark") }),
197
197
  /* @__PURE__ */ jsx("span", { className: "truncate flex-1", children: collection.name || collection.slug })
198
198
  ] }, collectionKey);
@@ -200,7 +200,7 @@ function CollectionsStudioView({
200
200
  ] })
201
201
  ] }), secondPanel: /* @__PURE__ */ jsx("div", { className: "flex-grow flex flex-col min-w-0 h-full w-full", children: activeCollectionId ? /* @__PURE__ */ jsx(CollectionStudioView, { configController, collectionId: activeCollectionId }, activeCollectionId) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center h-full gap-4", children: [
202
202
  /* @__PURE__ */ jsx(Typography, { variant: "label", children: "Select a collection or create a new one to start editing" }),
203
- /* @__PURE__ */ jsxs(Button, { onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), children: [
203
+ /* @__PURE__ */ jsxs(Button, { disabled: configController.readOnly, onClick: () => navigate(urlController.buildAppUrlPath("schema/new")), children: [
204
204
  /* @__PURE__ */ jsx(PlusIcon, {}),
205
205
  "Add new collection"
206
206
  ] })
@@ -215,4 +215,4 @@ export {
215
215
  CollectionsStudioView as a,
216
216
  CollectionsStudioView$1 as b
217
217
  };
218
- //# sourceMappingURL=CollectionsStudioView-WG6soyfs.js.map
218
+ //# sourceMappingURL=CollectionsStudioView-D9X6aiAr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionsStudioView-D9X6aiAr.js","sources":["../src/collection_editor/ui/collection_editor/CollectionStudioView.tsx","../src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx"],"sourcesContent":["\nimport { useUnsavedChangesDialog, UnsavedChangesDialog } from \"@rebasepro/core\";\nimport { useUrlController } from \"../../_cms_internals\";\nimport * as React from \"react\";\nimport { useState, useMemo, useEffect } from \"react\";\nimport { Typography, Button } from \"@rebasepro/ui\";\nimport { PlusIcon } from \"lucide-react\";\nimport { useSnackbarController } from \"@rebasepro/core\";\nimport { CollectionEditorDialogProps } from \"./CollectionEditorDialog\";\nimport { AIModifiedPathsProvider } from \"./AIModifiedPathsContext\";\nimport { CollectionEditor } from \"./CollectionEditorDialog\";\nimport { useNavigate } from \"react-router-dom\";\n\nexport type CollectionStudioViewProps = Omit<CollectionEditorDialogProps, \"open\" | \"isNewCollection\" | \"editedCollectionId\" | \"handleClose\" | \"handleCancel\"> & {\n collectionId?: string | \"new\";\n};\n\nexport function CollectionStudioView({ collectionId, ...props }: CollectionStudioViewProps) {\n const snackbarController = useSnackbarController();\n const navigate = useNavigate();\n const urlController = useUrlController();\n\n // Form state from the editor\n const [formDirty, setFormDirty] = useState<boolean>(false);\n const [cancelRequested, setCancelRequested] = useState<boolean>(false);\n\n const { dialogProps, triggerDialog } = useUnsavedChangesDialog(\n formDirty,\n () => setFormDirty(false)\n );\n\n // Map collectionId from URL params if missing? We can pass it directly.\n const activeCollectionId = collectionId;\n\n const handleCancelClick = () => {\n if (!formDirty) {\n navigate(urlController.buildAppUrlPath(\"/\"));\n } else {\n setCancelRequested(true);\n triggerDialog();\n }\n };\n\n return (\n <div className=\"flex-grow flex flex-col h-full w-full bg-white dark:bg-surface-950\">\n <AIModifiedPathsProvider>\n {activeCollectionId ? (\n <CollectionEditor\n key={activeCollectionId}\n {...props}\n fullScreen={true}\n open={true}\n isNewCollection={activeCollectionId === \"new\"}\n editedCollectionId={activeCollectionId !== \"new\" ? activeCollectionId : undefined}\n handleCancel={handleCancelClick}\n handleClose={(savedCollection) => {\n setFormDirty(false);\n if (savedCollection) {\n snackbarController.open({\n type: \"success\",\n message: `Collection ${savedCollection.name || savedCollection.slug} saved`\n });\n if (activeCollectionId === \"new\") {\n navigate(urlController.buildAppUrlPath(`s/schema/${savedCollection.slug}`));\n }\n }\n }}\n setFormDirty={setFormDirty}\n />\n ) : (\n <div className=\"flex-grow flex flex-col items-center justify-center h-full gap-4\">\n <Typography variant=\"label\">\n Select a collection or create a new one\n </Typography>\n <Button\n disabled={props.configController?.readOnly}\n onClick={() => navigate(urlController.buildAppUrlPath(\"schema/new\"))}\n >\n <PlusIcon/>\n Add new collection\n </Button>\n </div>\n )}\n\n <UnsavedChangesDialog\n {...dialogProps}\n handleOk={() => {\n dialogProps.handleOk();\n if (cancelRequested) {\n navigate(urlController.buildAppUrlPath(\"/\"));\n setCancelRequested(false);\n }\n }}\n handleCancel={() => {\n dialogProps.handleCancel();\n setCancelRequested(false);\n }}\n />\n </AIModifiedPathsProvider>\n </div>\n );\n}\n","\nimport { IconForView } from \"@rebasepro/core\";\n;\nimport { useUrlController } from \"../../_cms_internals\";\nimport React, { useState, useEffect } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { cls, defaultBorderMixin, ResizablePanels, Typography, IconButton, Button , iconSize, Tooltip } from \"@rebasepro/ui\";\nimport { PlusIcon } from \"lucide-react\";\n;\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionStudioView } from \"./CollectionStudioView\";\n\nexport interface CollectionsStudioViewProps {\n configController: CollectionsConfigController;\n}\n\nexport function CollectionsStudioView({ configController }: CollectionsStudioViewProps) {\n const navigate = useNavigate();\n const urlController = useUrlController();\n const location = useLocation();\n\n // Determine the active collection from the URL segment after \"schema/\"\n const basePath = urlController.buildAppUrlPath(\"schema\");\n const relativePath = location.pathname.replace(basePath, \"\").replace(/^\\//, \"\");\n\n // The collectionId could be \"new\", empty (no selection), or a collection slug\n const activeCollectionId = relativePath.split(\"/\")[0] || undefined;\n\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_collections_editor_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 25;\n } catch (e) {\n return 25;\n }\n });\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_collections_editor_sidebar_size\", sidebarSize.toString());\n } catch (e) {\n // ignore local storage error\n }\n }, [sidebarSize]);\n\n const collections = configController.collections || [];\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={220}\n firstPanel={\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n Collections\n </Typography>\n <Tooltip title={configController.readOnly ? configController.readOnlyReason || \"Read only\" : \"Add collection\"}>\n <div>\n <IconButton\n size=\"small\"\n disabled={configController.readOnly}\n onClick={() => navigate(urlController.buildAppUrlPath(\"schema/new\"))}\n className={activeCollectionId === \"new\" ? \"text-primary dark:text-primary-dark\" : \"text-text-secondary dark:text-text-secondary-dark\"}\n >\n <PlusIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n </Tooltip>\n </div>\n\n <div className=\"flex-grow overflow-y-auto w-full no-scrollbar p-2 space-y-0.5\">\n {collections.length === 0 && (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark italic\">\n No collections yet.\n </Typography>\n </div>\n )}\n {collections.map((collection) => {\n const collectionKey = collection.slug;\n const isSelected = activeCollectionId === collectionKey;\n return (\n <div\n key={collectionKey}\n onClick={() => navigate(urlController.buildAppUrlPath(`schema/${collectionKey}`))}\n className={cls(\n \"flex items-center gap-3 px-3 py-2 cursor-pointer rounded-md text-sm transition-colors\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-900 text-text-secondary dark:text-text-secondary-dark\"\n )}\n >\n <IconForView collectionOrView={collection} size={\"small\"} className={cls(\n isSelected\n ? \"text-primary dark:text-primary-light\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n )}/>\n <span className=\"truncate flex-1\">\n {collection.name || collection.slug}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n }\n secondPanel={\n <div className=\"flex-grow flex flex-col min-w-0 h-full w-full\">\n {/* We use key to force unmount when switching collections, preventing stale state */}\n {activeCollectionId ? (\n <CollectionStudioView\n key={activeCollectionId}\n configController={configController}\n collectionId={activeCollectionId}\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center h-full gap-4\">\n <Typography variant=\"label\">\n Select a collection or create a new one to start editing\n </Typography>\n <Button\n disabled={configController.readOnly}\n onClick={() => navigate(urlController.buildAppUrlPath(\"schema/new\"))}\n >\n <PlusIcon/>\n Add new collection\n </Button>\n </div>\n )}\n </div>\n }\n />\n </div>\n );\n}\n"],"names":["CollectionStudioView","t0","$","_c","collectionId","props","snackbarController","useSnackbarController","navigate","useNavigate","urlController","useUrlController","formDirty","setFormDirty","useState","cancelRequested","setCancelRequested","t1","Symbol","for","dialogProps","triggerDialog","useUnsavedChangesDialog","activeCollectionId","t2","buildAppUrlPath","handleCancelClick","t3","undefined","savedCollection","open","type","message","name","slug","configController","readOnly","t4","handleOk","t5","handleCancel","t6","t7","CollectionsStudioView","location","useLocation","basePath","relativePath","pathname","replace","split","sidebarSize","setSidebarSize","saved","localStorage","getItem","parseFloat","e","useEffect","setItem","toString","collections","cls","defaultBorderMixin","readOnlyReason","iconSize","smallest","length","map","collection","collectionKey","isSelected"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAiBO,SAAAA,qBAAAC,IAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAAC;AAAA,MAAAC;AAAA,MAAAH,SAAAD,IAAA;AAA8B,KAAA;AAAA,MAAAG;AAAAA,MAAA,GAAAC;AAAAA,IAAAA,IAAAJ;AAAqDC,WAAAD;AAAAC,WAAAE;AAAAF,WAAAG;AAAAA,EAAA,OAAA;AAAAD,mBAAAF,EAAA,CAAA;AAAAG,YAAAH,EAAA,CAAA;AAAA,EAAA;AACtF,QAAAI,qBAA2BC,sBAAAA;AAC3B,QAAAC,WAAiBC,YAAAA;AACjB,QAAAC,gBAAsBC,iBAAAA;AAGtB,QAAA,CAAAC,WAAAC,YAAA,IAAkCC,cAAuB;AACzD,QAAA,CAAAC,iBAAAC,kBAAA,IAA8CF,cAAuB;AAAE,MAAAG;AAAA,MAAAf,EAAA,CAAA,MAAAgB,uBAAAC,IAAA,2BAAA,GAAA;AAInEF,SAAAA,MAAMJ,kBAAkB;AAACX,WAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,CAAA;AAAA,EAAA;AAF7B,QAAA;AAAA,IAAAkB;AAAAA,IAAAC;AAAAA,EAAAA,IAAuCC,wBACnCV,WACAK,EACJ;AAGA,QAAAM,qBAA2BnB;AAAa,MAAAoB;AAAA,MAAAtB,EAAA,CAAA,MAAAU,aAAAV,EAAA,CAAA,MAAAM,YAAAN,EAAA,CAAA,MAAAmB,iBAAAnB,SAAAQ,eAAA;AAEdc,SAAAA,MAAA;AAAA,UAAA,CACjBZ,WAAS;AACVJ,iBAASE,cAAae,gBAAiB,GAAG,CAAC;AAAA,MAAC,OAAA;AAE5CT,+BAAuB;AACvBK,sBAAAA;AAAAA,MAAe;AAAA,IAAA;AAEtBnB,WAAAU;AAAAV,WAAAM;AAAAN,WAAAmB;AAAAnB,WAAAQ;AAAAR,WAAAsB;AAAAA,EAAA,OAAA;AAAAA,SAAAtB,EAAA,CAAA;AAAA,EAAA;AAPD,QAAAwB,oBAA0BF;AAOxB,MAAAG;AAAA,MAAAzB,SAAAqB,sBAAArB,EAAA,EAAA,MAAAwB,qBAAAxB,EAAA,EAAA,MAAAM,YAAAN,EAAA,EAAA,MAAAG,SAAAH,UAAAI,sBAAAJ,EAAA,EAAA,MAAAQ,eAAA;AAKWiB,SAAAJ,yCACI,kBAAA,EAC0B,GACnBlB,OACQ,YAAA,MACN,MAAA,MACW,iBAAAkB,uBAAuB,OACpB,oBAAAA,uBAAuB,QAAQA,qBAAkBK,QACvDF,cAAAA,mBACD,aAAAG,CAAAA,oBAAA;AACThB,wBAAkB;AAAC,UACfgB,iBAAe;AACfvB,2BAAkBwB,KAAA;AAAA,UAAAC,MACR;AAAA,UAASC,SACN,cAAcH,gBAAeI,QAASJ,gBAAeK,IAAK;AAAA,QAAA,CACtE;AAAC,YACEX,uBAAuB,OAAK;AAC5Bf,mBAASE,cAAae,gBAAiB,YAAYI,gBAAeK,IAAA,EAAO,CAAC;AAAA,QAAC;AAAA,MAAA;AAAA,IAAA,GAIzErB,gBAnBTU,kBAmBqB,IAG9B,qBAAA,OAAA,EAAe,WAAA,oEACX,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAmB,SAAA,SAAQ,UAAA,2CAE5B;AAAA,MACA,qBAAC,QAAA,EACa,UAAAlB,MAAK8B,kBAAAC,UACN,SAAA,MAAM5B,SAASE,cAAae,gBAAiB,YAAY,CAAC,GAEnE,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAQ;AAAA,QAAE;AAAA,MAAA,EAAA,CAEf;AAAA,IAAA,GACJ;AACHvB,WAAAqB;AAAArB,YAAAwB;AAAAxB,YAAAM;AAAAN,YAAAG;AAAAH,YAAAI;AAAAJ,YAAAQ;AAAAR,YAAAyB;AAAAA,EAAA,OAAA;AAAAA,SAAAzB,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAmC;AAAA,MAAAnC,EAAA,EAAA,MAAAa,mBAAAb,EAAA,EAAA,MAAAkB,eAAAlB,EAAA,EAAA,MAAAM,YAAAN,UAAAQ,eAAA;AAIa2B,SAAAA,MAAA;AACNjB,kBAAWkB,SAAAA;AAAW,UAClBvB,iBAAe;AACfP,iBAASE,cAAae,gBAAiB,GAAG,CAAC;AAC3CT,gCAAwB;AAAA,MAAC;AAAA,IAAA;AAEhCd,YAAAa;AAAAb,YAAAkB;AAAAlB,YAAAM;AAAAN,YAAAQ;AAAAR,YAAAmC;AAAAA,EAAA,OAAA;AAAAA,SAAAnC,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAqC;AAAA,MAAArC,UAAAkB,aAAA;AACamB,SAAAA,MAAA;AACVnB,kBAAWoB,aAAAA;AACXxB,8BAAwB;AAAA,IAAC;AAC5Bd,YAAAkB;AAAAlB,YAAAqC;AAAAA,EAAA,OAAA;AAAAA,SAAArC,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAuC;AAAA,MAAAvC,EAAA,EAAA,MAAAkB,eAAAlB,UAAAmC,MAAAnC,EAAA,EAAA,MAAAqC,IAAA;AAZLE,6BAAC,sBAAA,EAAoB,GACbrB,aACM,UAAAiB,IAOI,cAAAE,IAGb;AACHrC,YAAAkB;AAAAlB,YAAAmC;AAAAnC,YAAAqC;AAAArC,YAAAuC;AAAAA,EAAA,OAAA;AAAAA,SAAAvC,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAwC;AAAA,MAAAxC,EAAA,EAAA,MAAAyB,MAAAzB,UAAAuC,IAAA;AArDVC,sCAAe,WAAA,sEACX,+BAAC,yBAAA,EACIf,UAAAA;AAAAA,MAAAA;AAAAA,MAsCDc;AAAAA,IAAAA,EAAAA,CAcJ,EAAA,CACJ;AAAMvC,YAAAyB;AAAAzB,YAAAuC;AAAAvC,YAAAwC;AAAAA,EAAA,OAAA;AAAAA,SAAAxC,EAAA,EAAA;AAAA,EAAA;AAAA,SAvDNwC;AAuDM;ACnFP,SAASC,sBAAsB;AAAA,EAAER;AAA6C,GAAG;AACpF,QAAM3B,WAAWC,YAAAA;AACjB,QAAMC,gBAAgBC,iBAAAA;AACtB,QAAMiC,WAAWC,YAAAA;AAGjB,QAAMC,WAAWpC,cAAce,gBAAgB,QAAQ;AACvD,QAAMsB,eAAeH,SAASI,SAASC,QAAQH,UAAU,EAAE,EAAEG,QAAQ,OAAO,EAAE;AAG9E,QAAM1B,qBAAqBwB,aAAaG,MAAM,GAAG,EAAE,CAAC,KAAKtB;AAEzD,QAAM,CAACuB,aAAaC,cAAc,IAAItC,SAAS,MAAM;AACjD,QAAI;AACA,YAAMuC,QAAQC,aAAaC,QAAQ,wCAAwC;AAC3E,aAAOF,UAAU,OAAOG,WAAWH,KAAK,IAAI;AAAA,IAChD,SAASI,GAAG;AACR,aAAO;AAAA,IACX;AAAA,EACJ,CAAC;AAEDC,YAAU,MAAM;AACZ,QAAI;AACAJ,mBAAaK,QAAQ,0CAA0CR,YAAYS,SAAAA,CAAU;AAAA,IACzF,SAASH,KAAG;AAAA,IACR;AAAA,EAER,GAAG,CAACN,WAAW,CAAC;AAEhB,QAAMU,cAAc1B,iBAAiB0B,eAAe,CAAA;AAEpD,SACI,oBAAC,SAAI,WAAU,iHACX,8BAAC,iBAAA,EACG,aAAY,cACZ,kBAAkBV,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACI,qBAAC,SAAI,WAAWU,IAAI,qEAAqEC,kBAAkB,GACvG,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,WAAWD,IAAI,uGAAuGC,kBAAkB,GACzI,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAoF,UAAA,eAE5H;AAAA,0BACC,SAAA,EAAQ,OAAO5B,iBAAiBC,WAAWD,iBAAiB6B,kBAAkB,cAAc,kBACzF,UAAA,oBAAC,SACG,UAAA,oBAAC,YAAA,EACG,MAAK,SACL,UAAU7B,iBAAiBC,UAC3B,SAAS,MAAM5B,SAASE,cAAce,gBAAgB,YAAY,CAAC,GACnE,WAAWF,uBAAuB,QAAQ,wCAAwC,qDAElF,8BAAC,UAAA,EAAS,MAAM0C,SAASC,SAAAA,CAAS,GACtC,GACJ,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,IAEA,qBAAC,OAAA,EAAI,WAAU,iEACVL,UAAAA;AAAAA,MAAAA,YAAYM,WAAW,KACpB,oBAAC,OAAA,EAAI,WAAU,mBACX,UAAA,oBAAC,YAAA,EAAW,SAAQ,WAAU,WAAU,0DAAwD,iCAEhG,GACJ;AAAA,MAEHN,YAAYO,IAAKC,CAAAA,eAAe;AAC7B,cAAMC,gBAAgBD,WAAWnC;AACjC,cAAMqC,aAAahD,uBAAuB+C;AAC1C,oCACK,OAAA,EAEG,SAAS,MAAM9D,SAASE,cAAce,gBAAgB,UAAU6C,aAAa,EAAE,CAAC,GAChF,WAAWR,IACP,yFACAS,aACM,0EACA,kGACV,GAEA,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,kBAAkBF,YAAY,MAAM,SAAS,WAAWP,IACjES,aACM,yCACA,mDACV,EAAA,CAAE;AAAA,8BACD,QAAA,EAAK,WAAU,mBACXF,UAAAA,WAAWpC,QAAQoC,WAAWnC,KAAAA,CACnC;AAAA,QAAA,EAAA,GAhBKoC,aAiBT;AAAA,MAER,CAAC;AAAA,IAAA,EAAA,CACL;AAAA,EAAA,GACJ,GAEJ,aACI,oBAAC,OAAA,EAAI,WAAU,iDAEV/C,UAAAA,qBACG,oBAAC,sBAAA,EAEG,kBACA,cAAcA,mBAAAA,GAFTA,kBAE4B,IAGrC,qBAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,IAAA,oBAAC,YAAA,EAAW,SAAQ,SAAO,UAAA,4DAE3B;AAAA,IACA,qBAAC,QAAA,EACG,UAAUY,iBAAiBC,UAC3B,SAAS,MAAM5B,SAASE,cAAce,gBAAgB,YAAY,CAAC,GAEnE,UAAA;AAAA,MAAA,oBAAC,UAAA,EAAQ;AAAA,MAAA;AAAA,IAAA,EAAA,CAEb;AAAA,EAAA,GACJ,EAAA,CAER,GACH,GAET;AAER;;;;;"}
@@ -5,13 +5,13 @@ import { Chip, Collapse, cls, IconButton, iconSize, ExpandablePanel, Typography,
5
5
  import { c } from "react-compiler-runtime";
6
6
  import { useNavigate } from "react-router-dom";
7
7
  import { StarIcon, PencilIcon, ArrowRightIcon } from "lucide-react";
8
- import { useUserConfigurationPersistence, useTranslation, useRebaseContext, useSlot, IconForView, useCustomizationController, useAdminModeController, STUDIO_NAVIGATION_GROUPS, useCollapsedGroups, useRestoreScroll } from "@rebasepro/core";
8
+ import { useUserConfigurationPersistence, useTranslation, useRebaseContext, useSlot, IconForView, useCustomizationController, useAdminModeController, useRebaseRegistry, buildCollapsedDefaults, useCollapsedGroups, useRestoreScroll, BootstrapAdminBanner } from "@rebasepro/core";
9
9
  import "fast-equals";
10
10
  import "@rebasepro/common";
11
11
  import "@rebasepro/formex";
12
12
  import "zod";
13
13
  import "@rebasepro/utils";
14
- import { m as useNavigationStateController, k as useCMSContext, i as useBreadcrumbsController } from "./util-BQ82ySL3.js";
14
+ import { m as useNavigationStateController, k as useCMSContext, i as useBreadcrumbsController } from "./util-CwLmSpGp.js";
15
15
  import "date-fns";
16
16
  import "date-fns/locale";
17
17
  import "@rebasepro/types";
@@ -203,7 +203,7 @@ function NavigationGroup(t0) {
203
203
  const t4 = isPreview ? "body2" : "caption";
204
204
  let t5;
205
205
  if ($[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
206
- t5 = cls("p-4 py-2 rounded", "font-medium text-sm text-surface-600 dark:text-surface-400");
206
+ t5 = cls("px-4 py-1 rounded", "font-semibold text-[11px] uppercase tracking-wider text-surface-400 dark:text-surface-400");
207
207
  $[5] = t5;
208
208
  } else {
209
209
  t5 = $[5];
@@ -337,7 +337,7 @@ const NavigationCard = React__default.memo(function NavigationCard2(t0) {
337
337
  const t1 = shrink && "w-full max-w-full min-h-0 scale-75";
338
338
  let t2;
339
339
  if ($[0] !== t1) {
340
- t2 = cls("group h-full p-5 cursor-pointer transition-all duration-200 ease-in-out", "border-surface-200/40 dark:border-surface-700/40", "hover:-translate-y-0.5 hover:shadow-md hover:shadow-primary/5", "hover:border-primary/30 dark:hover:border-primary/20", t1);
340
+ t2 = cls("group h-full p-4 cursor-pointer transition-all duration-150 ease-in-out", "border-surface-200 dark:border-surface-700/40", "hover:shadow-md hover:shadow-black/[0.04]", "hover:border-surface-300 dark:hover:border-primary/20", t1);
341
341
  $[0] = t1;
342
342
  $[1] = t2;
343
343
  } else {
@@ -1535,7 +1535,7 @@ function ContentHomePage({
1535
1535
  } = context;
1536
1536
  const customizationController = useCustomizationController();
1537
1537
  const adminModeController = useAdminModeController();
1538
- const isStudioMode = adminModeController.mode === "studio";
1538
+ const registry = useRebaseRegistry();
1539
1539
  const {
1540
1540
  resolvedSlots
1541
1541
  } = customizationController;
@@ -1556,22 +1556,20 @@ function ContentHomePage({
1556
1556
  }
1557
1557
  } = navigationStateController.topLevelNavigation || {};
1558
1558
  const rawNavigationEntries = useMemo(() => {
1559
- return unFilteredNavigationEntries.filter((e) => {
1560
- const isStudioGroup = e.group ? STUDIO_NAVIGATION_GROUPS.includes(e.group) : false;
1561
- return isStudioMode ? isStudioGroup : !isStudioGroup;
1562
- });
1563
- }, [unFilteredNavigationEntries, isStudioMode]);
1559
+ if (adminModeController.mode === "studio") {
1560
+ return unFilteredNavigationEntries.filter((e) => e.type === "view" || e.type === "admin");
1561
+ }
1562
+ return unFilteredNavigationEntries.filter((e_0) => e_0.type !== "view");
1563
+ }, [unFilteredNavigationEntries, adminModeController.mode]);
1564
1564
  const groupOrderFromNavController = useMemo(() => {
1565
- return unFilteredGroupOrder.filter((g) => {
1566
- const isStudioGroup_0 = STUDIO_NAVIGATION_GROUPS.includes(g);
1567
- return isStudioMode ? isStudioGroup_0 : !isStudioGroup_0;
1568
- });
1569
- }, [unFilteredGroupOrder, isStudioMode]);
1565
+ const entryGroups = new Set(rawNavigationEntries.map((e_1) => e_1.group).filter(Boolean));
1566
+ return unFilteredGroupOrder.filter((g) => entryGroups.has(g));
1567
+ }, [unFilteredGroupOrder, rawNavigationEntries]);
1570
1568
  const fuse = useRef(null);
1571
1569
  const [filteredUrls, setFilteredUrls] = useState(null);
1572
1570
  const performingSearch = Boolean(filteredUrls);
1573
1571
  const filteredNavigationEntries = useMemo(() => {
1574
- return filteredUrls ? rawNavigationEntries.filter((e_0) => filteredUrls.includes(e_0.url)) : rawNavigationEntries;
1572
+ return filteredUrls ? rawNavigationEntries.filter((e_2) => filteredUrls.includes(e_2.url)) : rawNavigationEntries;
1575
1573
  }, [filteredUrls, rawNavigationEntries]);
1576
1574
  useEffect(() => {
1577
1575
  fuse.current = new Fuse(rawNavigationEntries, {
@@ -1593,14 +1591,14 @@ function ContentHomePage({
1593
1591
  const processedGroups = useMemo(() => {
1594
1592
  const src = filteredNavigationEntries;
1595
1593
  const entriesByGroup = {};
1596
- src.forEach((e_1) => {
1597
- const g_0 = e_1.type === "admin" ? ADMIN_GROUP_NAME : e_1.group ?? DEFAULT_GROUP_NAME;
1598
- (entriesByGroup[g_0] ??= []).push(e_1);
1594
+ src.forEach((e_3) => {
1595
+ const g_0 = e_3.type === "admin" ? ADMIN_GROUP_NAME : e_3.group ?? DEFAULT_GROUP_NAME;
1596
+ (entriesByGroup[g_0] ??= []).push(e_3);
1599
1597
  });
1600
1598
  const hasPluginAdditionalCards = customizationController.resolvedSlots.some((s) => s.slot === "home.cards");
1601
1599
  let allProcessed;
1602
1600
  if (performingSearch) {
1603
- const ordered = [...new Set(src.map((e_2) => e_2.group ?? DEFAULT_GROUP_NAME))];
1601
+ const ordered = [...new Set(src.map((e_4) => e_4.group ?? DEFAULT_GROUP_NAME))];
1604
1602
  allProcessed = ordered.map((name) => ({
1605
1603
  name,
1606
1604
  entries: entriesByGroup[name] || []
@@ -1650,19 +1648,20 @@ function ContentHomePage({
1650
1648
  }, 1e3);
1651
1649
  const draggable = latest.map((g_8) => ({
1652
1650
  name: g_8.name,
1653
- entries: g_8.entries.map((e_3) => e_3.slug)
1651
+ entries: g_8.entries.map((e_5) => e_5.slug)
1654
1652
  }));
1655
1653
  const all = adminGroupData ? [...draggable, {
1656
1654
  name: adminGroupData.name,
1657
- entries: adminGroupData.entries.map((e_4) => e_4.slug)
1655
+ entries: adminGroupData.entries.map((e_6) => e_6.slug)
1658
1656
  }] : draggable;
1659
1657
  onNavigationEntriesUpdate(all);
1660
1658
  };
1661
1659
  const groupNames = useMemo(() => [...items.map((item) => item.name), ...adminGroupData ? [adminGroupData.name] : []], [items, adminGroupData]);
1660
+ const collapsedDefaults = useMemo(() => buildCollapsedDefaults(registry.cmsConfig?.navigationGroupMappings, "home"), [registry.cmsConfig?.navigationGroupMappings]);
1662
1661
  const {
1663
1662
  isGroupCollapsed,
1664
1663
  toggleGroupCollapsed
1665
- } = useCollapsedGroups(groupNames, "home");
1664
+ } = useCollapsedGroups(groupNames, "home", collapsedDefaults);
1666
1665
  const {
1667
1666
  sensors,
1668
1667
  collisionDetection,
@@ -1711,8 +1710,9 @@ function ContentHomePage({
1711
1710
  const homeCardContributions = useMemo(() => {
1712
1711
  return resolvedSlots.filter((s_0) => s_0.slot === "home.cards").sort((a, b) => (a.order ?? 50) - (b.order ?? 50));
1713
1712
  }, [resolvedSlots]);
1714
- return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "py-2 overflow-auto h-full w-full dark:bg-surface-800", children: [
1713
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "py-2 overflow-auto h-full w-full bg-surface-50 dark:bg-surface-800", children: [
1715
1714
  /* @__PURE__ */ jsxs(Container, { maxWidth: "6xl", children: [
1715
+ /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(BootstrapAdminBanner, {}) }),
1716
1716
  /* @__PURE__ */ jsxs("div", { className: "w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4", style: {
1717
1717
  top: direction === "down" ? -84 : 0
1718
1718
  }, children: [
@@ -1741,7 +1741,7 @@ function ContentHomePage({
1741
1741
  return /* @__PURE__ */ jsx(SortableNavigationGroup, { groupName: groupKey, disabled: dndDisabled, children: /* @__PURE__ */ jsx(NavigationGroup, { group: groupKey === DEFAULT_GROUP_NAME ? void 0 : groupKey, minimised: draggingGroupId === groupKey && !isDraggingCardOnly, isPotentialCardDropTarget: isDraggingCardOnly, dndDisabled, onEditGroup: () => {
1742
1742
  if (dndDisabled) return;
1743
1743
  setDialogOpenForGroup(groupKey);
1744
- }, collapsed: isGroupCollapsed(groupKey), onToggleCollapsed: () => toggleGroupCollapsed(groupKey), children: /* @__PURE__ */ jsx(NavigationGroupDroppable, { id: groupKey, itemIds: entriesInGroup.map((e_5) => e_5.url), isPotentialCardDropTarget: isDraggingCardOnly, children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: [
1744
+ }, collapsed: isGroupCollapsed(groupKey), onToggleCollapsed: () => toggleGroupCollapsed(groupKey), children: /* @__PURE__ */ jsx(NavigationGroupDroppable, { id: groupKey, itemIds: entriesInGroup.map((e_7) => e_7.url), isPotentialCardDropTarget: isDraggingCardOnly, children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 ", children: [
1745
1745
  entriesInGroup.map((entry) => /* @__PURE__ */ jsx(SortableNavigationCard, { entry, onClick: () => {
1746
1746
  let event = "unmapped_event";
1747
1747
  if (entry.type === "collection") event = "home_navigate_to_collection";
@@ -1783,4 +1783,4 @@ export {
1783
1783
  ContentHomePage,
1784
1784
  DEFAULT_GROUP_NAME
1785
1785
  };
1786
- //# sourceMappingURL=ContentHomePage-CDF_a6Lp.js.map
1786
+ //# sourceMappingURL=ContentHomePage-CfVB1eUo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentHomePage-CfVB1eUo.js","sources":["../src/components/HomePage/FavouritesView.tsx","../src/components/HomePage/NavigationGroup.tsx","../src/components/HomePage/NavigationCard.tsx","../src/components/HomePage/NavigationCardBinding.tsx","../src/components/HomePage/HomePageDnD.tsx","../src/components/HomePage/RenameGroupDialog.tsx","../src/components/HomePage/ContentHomePage.tsx"],"sourcesContent":["import type { NavigationEntry } from \"@rebasepro/types\";\nimport { useNavigate } from \"react-router-dom\";\n;\nimport { Chip, Collapse } from \"@rebasepro/ui\";\nimport { StarIcon } from \"lucide-react\";\nimport { useUserConfigurationPersistence } from \"@rebasepro/core\";\nimport { useNavigationStateController } from \"../../index\";\n\nfunction NavigationChip({ entry }: { entry: NavigationEntry }) {\n\n const navigate = useNavigate();\n const userConfigurationPersistence = useUserConfigurationPersistence();\n\n if (!userConfigurationPersistence)\n return null;\n\n const favourite = userConfigurationPersistence.favouritePaths.includes(entry.slug);\n const onIconClick = (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (favourite) {\n userConfigurationPersistence.setFavouritePaths(\n userConfigurationPersistence.favouritePaths.filter(p => p !== entry.slug)\n );\n } else {\n userConfigurationPersistence.setFavouritePaths(\n [...userConfigurationPersistence.favouritePaths, entry.slug]\n );\n }\n };\n return <Chip\n key={entry.slug}\n onClick={() => navigate(entry.url)}\n icon={<StarIcon\n onClick={onIconClick}\n size={\"small\"}\n className={favourite ? \"text-secondary\" : \"text-surface-400 dark:text-surface-500\"}/>\n }>\n {entry.name}\n </Chip>;\n}\n\nexport function FavouritesView({ hidden }: { hidden: boolean }) {\n\n const navigationStateController = useNavigationStateController();\n const userConfigurationPersistence = useUserConfigurationPersistence();\n\n if (!userConfigurationPersistence)\n return null;\n\n const favouriteCollections = (userConfigurationPersistence?.favouritePaths ?? [])\n .map((path) => navigationStateController.topLevelNavigation?.navigationEntries.find((entry) => entry.slug === path))\n .filter(Boolean) as NavigationEntry[];\n\n return <Collapse in={favouriteCollections.length > 0}>\n <div className=\"flex flex-row flex-wrap gap-2 pb-2 min-h-[32px]\">\n {favouriteCollections.map((entry) => <NavigationChip key={entry.slug}\n entry={entry}/>)}\n </div>\n </Collapse>;\n}\n","import React, { PropsWithChildren, useState } from \"react\";\nimport { cls, IconButton, Typography, ExpandablePanel , iconSize } from \"@rebasepro/ui\";\nimport { PencilIcon } from \"lucide-react\";\nimport { useTranslation } from \"@rebasepro/core\";\n\nexport function NavigationGroup({\n children,\n group,\n minimised,\n isPreview,\n isPotentialCardDropTarget,\n onEditGroup,\n dndDisabled,\n collapsed,\n onToggleCollapsed\n}: PropsWithChildren<{\n group: string | undefined,\n minimised?: boolean,\n isPreview?: boolean,\n isPotentialCardDropTarget?: boolean,\n onEditGroup?: (groupName: string) => void;\n dndDisabled?: boolean;\n collapsed?: boolean;\n onToggleCollapsed?: () => void;\n}>) {\n\n const { t } = useTranslation();\n const [isHovered, setIsHovered] = useState(false);\n const currentGroupName = group ?? t(\"views_group\");\n\n // Show caret only when not in preview and there is a toggle handler\n const showCaret = !isPreview && !!onToggleCollapsed;\n\n // Helper for the title content (left side)\n const TitleContent = (\n <div className={cls(\"flex items-center\", isPreview ? \"px-1 py-0.5\" : \"\")}\n >\n <Typography\n variant={isPreview ? \"body2\" : \"caption\"}\n component={\"h2\"}\n color=\"secondary\"\n className={cls(\n \"px-4 py-1 rounded\",\n \"font-semibold text-[11px] uppercase tracking-wider text-surface-400 dark:text-surface-400\"\n )}\n >\n {currentGroupName}\n </Typography>\n {!isPreview && onEditGroup && !dndDisabled && (\n <IconButton\n size=\"smallest\"\n onClick={(e) => {\n e.stopPropagation(); // Prevent toggle on click\n onEditGroup(currentGroupName);\n }}\n className={cls(\"ml-2 \", isHovered ? \"opacity-100\" : \"opacity-0\", \"transition-opacity duration-100\")}\n >\n <PencilIcon size={iconSize.smallest}/>\n </IconButton>\n )}\n </div>\n );\n\n return (\n <div className={cls(\n !isPotentialCardDropTarget ? \"my-10\" : \"my-6\",\n \"transition-all duration-200 ease-in-out\"\n )}\n >\n {/* Preview: static header + content (no caret / no collapse) */}\n {isPreview && (\n <>\n <div\n className={cls(\n \"flex items-center justify-between w-full\",\n \"p-4 py-2\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {TitleContent}\n </div>\n {children}\n </>\n )}\n\n {/* Interactive collapsible version when a toggle handler is provided */}\n {!isPreview && showCaret && (\n <ExpandablePanel\n invisible\n expanded={!collapsed}\n onExpandedChange={(open) => {\n if (open !== !collapsed) {\n onToggleCollapsed?.();\n }\n }}\n className={cls(\"mt-6\")}\n titleClassName={cls(\n \"min-h-0 p-0 border-none\",\n \"rounded flex items-center justify-between w-full\",\n \"hover:bg-transparent\",\n \"cursor-pointer select-none\",\n collapsed && \"bg-surface-100 dark:bg-surface-900/50\"\n )}\n innerClassName={cls(\"mt-4\", !minimised ? \"pt-0\" : \"\")}\n title={\n <div\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className=\"flex items-center\"\n >\n {TitleContent}\n </div>\n }\n >\n {minimised ? (\n <div className={cls(\"mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg\")}\n style={{ minHeight: \"50px\" }}>\n </div>\n ) : (\n <div className={cls(\"mt-4\", !minimised ? \"pt-0\" : \"\")}>\n {children}\n </div>\n )}\n </ExpandablePanel>\n )}\n\n {/* Non-collapsible (no caret) runtime, keep old behavior */}\n {!isPreview && !showCaret && (\n <>\n <div\n className={cls(\n \"flex items-center justify-between w-full\",\n \"mt-6\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {TitleContent}\n </div>\n\n {!collapsed && (\n minimised ? (\n <div className={cls(\"mt-4 p-8 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg\")}\n style={{ minHeight: \"50px\" }}>\n </div>\n ) : (\n <div className={cls(\"mt-4\", !minimised ? \"pt-0\" : \"\")}>\n {children}\n </div>\n )\n )}\n </>\n )}\n </div>\n );\n}\n","import { Card, cls, Markdown, Typography } from \"@rebasepro/ui\";\nimport { ArrowRightIcon } from \"lucide-react\";\nimport React from \"react\";\n\nexport type NavigationCardProps = {\n name: string,\n description?: string;\n actions: React.ReactNode;\n icon: React.ReactNode;\n additionalContent?: React.ReactNode;\n onClick?: () => void,\n shrink?: boolean\n};\n\n// Wrap the component with React.memo\nexport const NavigationCard = React.memo(function NavigationCard({\n name,\n description,\n icon,\n actions,\n additionalContent,\n onClick,\n shrink\n}: NavigationCardProps) {\n\n return (\n <Card\n className={cls(\n \"group h-full p-4 cursor-pointer transition-all duration-150 ease-in-out\",\n \"border-surface-200 dark:border-surface-700/40\",\n \"hover:shadow-md hover:shadow-black/[0.04]\",\n \"hover:border-surface-300 dark:hover:border-primary/20\",\n shrink && \"w-full max-w-full min-h-0 scale-75\"\n )}\n onClick={() => {\n onClick?.();\n }}\n >\n\n <div className=\"flex flex-col h-full\">\n {/* Header: title + icon left, actions right */}\n <div className=\"flex items-center w-full justify-between mb-1\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center justify-center w-7 h-7 rounded-lg bg-primary/8 dark:bg-primary/10 text-primary/70 dark:text-primary/60 transition-colors duration-200 group-hover:bg-primary/12 dark:group-hover:bg-primary/15 group-hover:text-primary dark:group-hover:text-primary/80\">\n {icon}\n </div>\n <Typography variant=\"subtitle1\"\n component=\"h2\">\n {name}\n </Typography>\n </div>\n\n <div\n className=\"flex items-center gap-0.5\"\n onClick={(event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }}>\n {actions}\n </div>\n </div>\n\n {/* Description */}\n <div className=\"grow pl-[44px]\">\n {description && <Typography variant=\"caption\"\n color=\"secondary\"\n component=\"div\">\n <Markdown source={description} size={\"small\"}/>\n </Typography>}\n </div>\n\n {additionalContent && (\n <div className=\"pl-[44px] pointer-events-none\">\n {additionalContent}\n </div>\n )}\n\n {/* Arrow */}\n <div className=\"self-end mt-1\">\n <div className={\"transition-transform duration-200 group-hover:translate-x-0.5\"}>\n <ArrowRightIcon className=\"text-primary\"/>\n </div>\n </div>\n\n </div>\n\n </Card>)\n});\n","import type { NavigationEntry, EntityCollection } from \"@rebasepro/types\";\nimport { useNavigate } from \"react-router-dom\";\n;\nimport { IconButton, Tooltip } from \"@rebasepro/ui\";\nimport { StarIcon } from \"lucide-react\";\nimport { NavigationCard } from \"./NavigationCard\";\nimport { SmallNavigationCard } from \"./SmallNavigationCard\";\nimport React from \"react\";\nimport { useRebaseContext, useSlot } from \"@rebasepro/core\";\nimport { IconForView } from \"@rebasepro/core\";\nimport { useUserConfigurationPersistence } from \"@rebasepro/core\";\n\n/**\n * This is the component used in the home page to render a card for each\n * collection or view.\n * @group Components\n * @param view\n * @param path\n * @param collection\n * @param url\n * @param name\n * @param description\n * @param onClick\n\n */\nexport function NavigationCardBinding({\n slug,\n collection,\n view,\n url,\n name,\n description,\n onClick,\n type,\n shrink\n}: NavigationEntry & {\n onClick?: () => void,\n shrink?: boolean // <-- add shrink prop type\n}) {\n\n const userConfigurationPersistence = useUserConfigurationPersistence();\n const collectionIcon = <IconForView collectionOrView={collection ?? view}/>;\n\n const navigate = useNavigate();\n const context = useRebaseContext();\n\n const favourite = (userConfigurationPersistence?.favouritePaths ?? []).includes(slug);\n\n const actionsArray: React.ReactNode[] = userConfigurationPersistence\n ? [\n <IconButton\n key={\"favourite\"}\n size={\"small\"}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (favourite) {\n userConfigurationPersistence.setFavouritePaths(\n userConfigurationPersistence.favouritePaths.filter(p => p !== slug)\n );\n } else {\n userConfigurationPersistence.setFavouritePaths(\n [...userConfigurationPersistence.favouritePaths, slug]\n );\n }\n }}>\n <StarIcon\n className={favourite ? \"text-secondary\" : \"text-surface-400 dark:text-surface-500\"}/>\n </IconButton>\n ]\n : [];\n\n const pluginCardActions = useSlot(\"home.collection.actions\", {\n slug: slug,\n collection: collection!,\n context\n });\n\n const pluginCardInsights = useSlot(\"home.card.insight\", {\n slug: slug,\n collection: collection!,\n context\n });\n\n\n const actions: React.ReactNode | undefined = <>\n {actionsArray}\n {pluginCardActions}\n </>\n\n return <NavigationCard\n icon={collectionIcon}\n name={name}\n description={description}\n actions={actions}\n additionalContent={pluginCardInsights.length > 0 ? <>{pluginCardInsights}</> : undefined}\n onClick={() => {\n onClick?.();\n navigate(url);\n if (userConfigurationPersistence) {\n userConfigurationPersistence.setRecentlyVisitedPaths(\n [slug, ...(userConfigurationPersistence.recentlyVisitedPaths ?? []).filter(p => p !== slug)]\n );\n }\n }}\n shrink={shrink}\n />;\n}\n","import type { NavigationEntry } from \"@rebasepro/types\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n Active,\n closestCenter,\n closestCorners,\n CollisionDetection,\n DropAnimation,\n getFirstCollision,\n KeyboardSensor,\n MouseSensor,\n pointerWithin,\n rectIntersection,\n TouchSensor,\n UniqueIdentifier,\n useDndMonitor,\n useDroppable,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport {\n AnimateLayoutChanges,\n arrayMove,\n defaultAnimateLayoutChanges,\n rectSortingStrategy,\n SortableContext,\n useSortable\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\n\nimport { NavigationCardBinding } from \"./NavigationCardBinding\";\n;\nimport { cls } from \"@rebasepro/ui\";\n\nconst animateLayoutChanges: AnimateLayoutChanges = (args) =>\n defaultAnimateLayoutChanges({\n ...args,\n wasDragging: true\n });\n\nconst dropAnimationConfig: DropAnimation = {};\n\nconst cloneSerializableNavigationEntry = (entry: NavigationEntry): NavigationEntry => {\n const clonedEntry: Partial<NavigationEntry> = {\n id: entry.id,\n slug: entry.slug,\n url: entry.url,\n name: entry.name,\n type: entry.type,\n collection: entry.collection ? { ...entry.collection } : undefined,\n view: entry.view ? { ...entry.view } : undefined,\n ...(entry.group && { group: entry.group }),\n ...(entry.description && { description: entry.description })\n };\n return clonedEntry as NavigationEntry;\n};\n\nconst cloneItemsForDnd = (items: { name: string; entries: NavigationEntry[] }[]) =>\n items.map((g) => ({\n name: g.name,\n entries: g.entries.map(cloneSerializableNavigationEntry)\n }));\n\n/* ─────────────────────────────────────────────────────────── */\n/* Sortable card & group */\n\n/* ─────────────────────────────────────────────────────────── */\nexport function SortableNavigationCard({\n entry,\n onClick\n}: {\n entry: NavigationEntry;\n onClick?: () => void;\n}) {\n const {\n setNodeRef,\n listeners,\n attributes,\n transform,\n transition,\n isDragging\n } =\n useSortable({\n id: entry.url,\n animateLayoutChanges\n });\n\n const style = {\n transform: transform ? CSS.Transform.toString(transform) : undefined,\n transition,\n opacity: isDragging ? 0 : 1\n };\n\n return (\n <div ref={setNodeRef} style={style} {...attributes} {...listeners}>\n <NavigationCardBinding {...entry} onClick={onClick}/>\n </div>\n );\n}\n\nexport function NavigationGroupDroppable({\n id,\n itemIds,\n children,\n isPotentialCardDropTarget = false\n}: {\n id: UniqueIdentifier;\n itemIds: UniqueIdentifier[];\n children: React.ReactNode;\n isPotentialCardDropTarget?: boolean;\n}) {\n const { setNodeRef } = useDroppable({ id });\n\n return (\n <div\n ref={setNodeRef}\n className={cls(\n isPotentialCardDropTarget\n ? \"p-2 bg-surface-accent-200 dark:bg-surface-accent-800 rounded-lg\"\n : undefined,\n \"transition-all duration-200 ease-in-out\"\n )}\n >\n <SortableContext items={itemIds} strategy={rectSortingStrategy}>\n {children}\n </SortableContext>\n </div>\n );\n}\n\nexport function SortableNavigationGroup({\n groupName,\n children,\n disabled\n}: {\n groupName: string;\n children: React.ReactNode;\n disabled?: boolean;\n}) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging\n } =\n useSortable({\n id: groupName,\n animateLayoutChanges,\n disabled\n });\n\n const style = {\n transform: transform ? CSS.Transform.toString(transform) : undefined,\n transition,\n opacity: isDragging ? 0 : 1\n };\n\n return (\n <div ref={setNodeRef} style={style} {...attributes} {...listeners}>\n {children}\n </div>\n );\n}\n\nexport function useHomePageDnd({\n items,\n setItems,\n disabled,\n onCardMovedBetweenGroups,\n onGroupMoved,\n onNewGroupDrop,\n onPersist\n}: {\n items: { name: string; entries: NavigationEntry[] }[];\n setItems: (\n newItemsOrUpdater:\n | { name: string; entries: NavigationEntry[] }[]\n | ((\n currentItems: { name: string; entries: NavigationEntry[] }[]\n ) => { name: string; entries: NavigationEntry[] }[])\n ) => void;\n disabled: boolean;\n onCardMovedBetweenGroups?: (card: NavigationEntry) => void;\n onGroupMoved?: (groupName: string, oldIndex: number, newIndex: number) => void;\n onNewGroupDrop?: () => void;\n onPersist?: (latest: { name: string; entries: NavigationEntry[] }[]) => void;\n}) {\n /* ---------------- local state ---------------- */\n const dndItems = items;\n const setDndItems = setItems;\n\n const [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n const [activeIsGroup, setActiveIsGroup] = useState(false);\n const [currentDraggingGroupId, setCurrentDraggingGroupId] =\n useState<UniqueIdentifier | null>(null);\n const [dndKitActiveNode, setDndKitActiveNode] = useState<Active | null>(null);\n const [isDraggingCardOnly, setIsDraggingCardOnly] = useState(false);\n const [dialogOpenForGroup, setDialogOpenForGroup] = useState<string | null>(null);\n const [isHoveringNewGroupDropZone, setIsHoveringNewGroupDropZone] =\n useState(false);\n const [pendingNewGroupName, setPendingNewGroupName] = useState<string | null>(null);\n const [stateBeforeNewGroup, setStateBeforeNewGroup] = useState<\n { name: string; entries: NavigationEntry[] }[] | null\n >(null);\n\n /* store the original state before any drag modifications */\n const preDragItemsRef = useRef<\n { name: string; entries: NavigationEntry[] }[] | null\n >(null);\n\n /* store interim state for cross-group moves */\n const interimItemsRef = useRef<\n { name: string; entries: NavigationEntry[] }[] | null\n >(null);\n useEffect(() => {\n interimItemsRef.current = dndItems;\n }, [dndItems]);\n\n /* ---------------- sensors ---------------- */\n const mouseSensor = useSensor(MouseSensor, { activationConstraint: { distance: 10 } });\n const touchSensor = useSensor(TouchSensor, {\n activationConstraint: {\n delay: 150,\n tolerance: 5\n }\n });\n const keyboardSensor = useSensor(KeyboardSensor);\n const sensors = useSensors(mouseSensor, touchSensor, keyboardSensor);\n\n /* ---------------- helpers ---------------- */\n const dndContainers = dndItems.map((g) => g.name);\n\n const findDndContainer = useCallback(\n (id: UniqueIdentifier): string | undefined => {\n if (!id) return undefined;\n const group = dndItems.find((g) => g.name === id);\n if (group) return group.name;\n for (const g of dndItems) {\n if (g.entries.some((e) => e.url === id)) return g.name;\n }\n return undefined;\n },\n [dndItems]\n );\n\n /* ---------------- collision detection ---------------- */\n const lastOverId = useRef<UniqueIdentifier | null>(null);\n const recentlyMovedToNewContainer = useRef(false);\n\n const collisionDetection: CollisionDetection = useCallback(\n (args) => {\n if (disabled || !activeId) return [];\n if (activeIsGroup) {\n const groups = args.droppableContainers.filter((c) =>\n dndItems.some((g) => g.name === c.id)\n );\n if (!groups.length) return [];\n return closestCenter({\n ...args,\n droppableContainers: groups\n });\n }\n\n const pointer = pointerWithin(args);\n if (pointer.length) {\n const zone = pointer.find((c) => c.id === \"new-group-drop-zone\");\n if (zone) return [zone];\n\n const container = pointer.find((c) =>\n dndItems.some((g) => g.name === c.id)\n );\n if (container) {\n const itemsIn = dndItems.find((g) => g.name === container.id)\n ?.entries;\n if (itemsIn?.length) {\n const closest = closestCorners({\n ...args,\n droppableContainers: args.droppableContainers.filter(\n (c) => itemsIn.some((e) => e.url === c.id)\n )\n });\n if (closest.length) return closest;\n }\n return [container];\n }\n const first = getFirstCollision(pointer, \"id\");\n if (first) return [{ id: first }];\n }\n\n const rects = rectIntersection(args);\n const zoneRect = rects.find((c) => c.id === \"new-group-drop-zone\");\n if (zoneRect) return [zoneRect];\n\n let overId = getFirstCollision(rects, \"id\");\n if (overId != null) {\n const overIsContainer = dndItems.some((g) => g.name === overId);\n if (overIsContainer) {\n const itemsIn = dndItems.find((g) => g.name === overId)\n ?.entries;\n if (itemsIn?.length) {\n const closestItem = closestCorners({\n ...args,\n droppableContainers: args.droppableContainers.filter(\n (c) => itemsIn.some((e) => e.url === c.id)\n )\n })[0]?.id;\n if (closestItem) overId = closestItem;\n }\n }\n lastOverId.current = overId;\n return [{ id: overId }];\n }\n\n if (\n recentlyMovedToNewContainer.current &&\n lastOverId.current &&\n !activeIsGroup\n )\n return [{ id: lastOverId.current }];\n\n return [];\n },\n [activeId, dndItems, disabled, activeIsGroup]\n );\n\n /* ---------------- drag handlers ---------------- */\n const handleDragStart = ({ active }: { active: Active }) => {\n setDndKitActiveNode(active);\n if (disabled) return;\n\n // Capture the original state before any drag modifications\n preDragItemsRef.current = cloneItemsForDnd(dndItems);\n\n const isGroup = dndItems.some((g) => g.name === active.id);\n if (!active.data.current) active.data.current = {};\n active.data.current.type = isGroup ? \"group\" : \"item\";\n\n setActiveId(active.id);\n setActiveIsGroup(isGroup);\n setIsDraggingCardOnly(!isGroup);\n if (isGroup) setCurrentDraggingGroupId(active.id);\n recentlyMovedToNewContainer.current = false;\n };\n\n const handleDragOver = ({\n active,\n over\n }: { active: Active; over: any }) => {\n if (disabled || !over) return;\n\n const activeIdNow = active.id;\n const overIdNow = over.id;\n if (activeIdNow === overIdNow) return;\n if (activeIsGroup) return;\n\n const activeCont = findDndContainer(activeIdNow);\n const overCont = findDndContainer(overIdNow);\n if (!activeCont) return;\n\n if (overCont && activeCont !== overCont) {\n recentlyMovedToNewContainer.current = true;\n lastOverId.current = overIdNow;\n\n // Update state for visual feedback during drag\n setDndItems((current) => {\n const newState = cloneItemsForDnd(current);\n const srcIdx = newState.findIndex((g) => g.name === activeCont);\n const tgtIdx = newState.findIndex((g) => g.name === overCont);\n if (srcIdx === -1 || tgtIdx === -1) return current;\n const src = newState[srcIdx];\n const tgt = newState[tgtIdx];\n const idxInSrc = src.entries.findIndex((e) => e.url === activeIdNow);\n if (idxInSrc === -1) return current;\n const [moved] = src.entries.splice(idxInSrc, 1);\n\n // Calculate insertion position - SAME logic as handleDragEnd\n const overIsContainer = overIdNow === overCont;\n if (overIsContainer) {\n tgt.entries.push(moved);\n } else {\n const overIdx = tgt.entries.findIndex((e) => e.url === overIdNow);\n if (overIdx !== -1) {\n tgt.entries.splice(overIdx, 0, moved);\n } else {\n tgt.entries.push(moved);\n }\n }\n\n return newState;\n });\n } else if (activeCont === overCont) {\n recentlyMovedToNewContainer.current = false;\n }\n };\n\n const handleDragEnd = ({\n active,\n over\n }: { active: Active; over: any }) => {\n if (disabled || !over) {\n resetDragState();\n return;\n }\n\n const activeIdNow = active.id;\n const overIdNow = over.id;\n\n /* ─── group reorder ─── */\n if (activeIsGroup) {\n if (\n activeIdNow !== overIdNow &&\n dndItems.some((g) => g.name === overIdNow)\n ) {\n const from = dndItems.findIndex((g) => g.name === activeIdNow);\n const to = dndItems.findIndex((g) => g.name === overIdNow);\n if (from !== -1 && to !== -1) {\n const newState = arrayMove(dndItems, from, to);\n setDndItems(newState);\n onPersist?.(newState);\n onGroupMoved?.(activeIdNow as string, from, to);\n }\n }\n }\n /* ─── card move ─── */\n else {\n // CRITICAL: Find source container from ORIGINAL pre-drag state, not current (potentially stale) dndItems\n const findContainerInState = (id: string, state: { name: string; entries: NavigationEntry[] }[]): string | undefined => {\n const group = state.find((g) => g.name === id);\n if (group) return group.name;\n for (const g of state) {\n if (g.entries.some((e) => e.url === id)) return g.name;\n }\n return undefined;\n };\n\n const sourceState = preDragItemsRef.current || dndItems;\n const activeCont = findContainerInState(activeIdNow as string, sourceState);\n const overCont = findDndContainer(overIdNow);\n\n /* drop on new-group zone */\n if (overIdNow === \"new-group-drop-zone\") {\n if (activeCont) {\n // Save current state before making changes\n setStateBeforeNewGroup(cloneItemsForDnd(dndItems));\n\n const newState = cloneItemsForDnd(dndItems);\n const srcIdx = newState.findIndex((g) => g.name === activeCont);\n if (srcIdx !== -1) {\n const src = newState[srcIdx];\n const idxInSrc = src.entries.findIndex(\n (e) => e.url === activeIdNow\n );\n if (idxInSrc !== -1) {\n const [dragged] = src.entries.splice(idxInSrc, 1);\n if (src.entries.length === 0) newState.splice(srcIdx, 1);\n\n let tentative = \"New Group\";\n let counter = 1;\n while (newState.some((g) => g.name === tentative))\n tentative = `New Group ${counter++}`;\n\n newState.push({\n name: tentative,\n entries: [dragged]\n });\n\n // Update local state but DON'T persist yet\n setDndItems(newState);\n setPendingNewGroupName(tentative);\n setDialogOpenForGroup(tentative);\n onNewGroupDrop?.();\n }\n }\n }\n }\n /* reorder inside same container */\n else {\n const overCont = findDndContainer(overIdNow);\n if (activeCont === overCont) {\n const grpIdx = dndItems.findIndex((g) => g.name === activeCont);\n if (grpIdx !== -1) {\n const group = dndItems[grpIdx];\n const oldIdx = group.entries.findIndex(\n (e) => e.url === activeIdNow\n );\n let newIdx = group.entries.findIndex(\n (e) => e.url === overIdNow\n );\n if (newIdx === -1 && overIdNow === activeCont)\n newIdx = group.entries.length - 1;\n if (\n oldIdx !== -1 &&\n newIdx !== -1 &&\n oldIdx !== newIdx\n ) {\n const reordered = arrayMove(group.entries, oldIdx, newIdx);\n const newState = [...dndItems];\n newState[grpIdx] = {\n ...group,\n entries: reordered\n };\n setDndItems(newState);\n onPersist?.(newState);\n }\n }\n } else if (overCont && activeCont !== overCont) {\n // Card moved between different groups - use CLEAN pre-drag state\n const finalState = cloneItemsForDnd(sourceState);\n\n // Find target container from clean state too\n const finalOverId = lastOverId.current || overIdNow;\n const cleanOverCont = findContainerInState(finalOverId as string, sourceState) || overCont;\n\n const srcIdx = finalState.findIndex((g) => g.name === activeCont);\n const tgtIdx = finalState.findIndex((g) => g.name === cleanOverCont);\n\n if (srcIdx !== -1 && tgtIdx !== -1) {\n const src = finalState[srcIdx];\n const tgt = finalState[tgtIdx];\n const idxInSrc = src.entries.findIndex((e) => e.url === activeIdNow);\n\n if (idxInSrc !== -1) {\n // Remove from source\n const [moved] = src.entries.splice(idxInSrc, 1);\n\n // Calculate insertion position in target\n const overIsContainer = finalOverId === cleanOverCont;\n if (overIsContainer) {\n tgt.entries.push(moved);\n } else {\n const overIdx = tgt.entries.findIndex((e) => e.url === finalOverId);\n if (overIdx !== -1) {\n tgt.entries.splice(overIdx, 0, moved);\n } else {\n tgt.entries.push(moved);\n }\n }\n\n // Remove empty source group if needed\n if (src.entries.length === 0) {\n finalState.splice(srcIdx, 1);\n }\n\n setDndItems(finalState);\n onPersist?.(finalState);\n\n onCardMovedBetweenGroups?.(moved);\n }\n }\n } else if (recentlyMovedToNewContainer.current) {\n // This shouldn't happen but log it for debugging\n console.error(\"Move between containers detected but conditions not met\", {\n activeCont,\n overCont,\n activeIdNow,\n overIdNow\n });\n }\n }\n }\n\n resetDragState();\n };\n\n const resetDragState = () => {\n setDndKitActiveNode(null);\n setActiveId(null);\n setActiveIsGroup(false);\n setCurrentDraggingGroupId(null);\n setIsDraggingCardOnly(false);\n recentlyMovedToNewContainer.current = false;\n };\n\n const handleDragCancel = () => resetDragState();\n\n /* ---------------- group rename ---------------- */\n const handleRenameGroup = (oldName: string, newName: string) => {\n setDndItems((current) => {\n const idx = current.findIndex((g) => g.name === oldName);\n if (idx === -1) return current;\n if (current.some((g) => g.name === newName && g.name !== oldName))\n return current;\n\n const updated = [...current];\n updated[idx] = {\n ...updated[idx],\n name: newName\n };\n\n // Persist after successful rename\n onPersist?.(updated);\n return updated;\n });\n\n // Clear all pending state\n setPendingNewGroupName(null);\n setStateBeforeNewGroup(null);\n setDialogOpenForGroup(null);\n };\n\n /* Handle dialog close without renaming */\n const handleDialogClose = () => {\n // If there's a pending new group that wasn't renamed, restore previous state\n if (pendingNewGroupName && dialogOpenForGroup === pendingNewGroupName && stateBeforeNewGroup) {\n // Restore the state from before the new group was created\n setDndItems(stateBeforeNewGroup);\n }\n\n // Clear all pending state\n setPendingNewGroupName(null);\n setStateBeforeNewGroup(null);\n setDialogOpenForGroup(null);\n };\n\n /* ---------------- public API ---------------- */\n const activeItemForOverlay =\n disabled || !activeId || activeIsGroup\n ? null\n : dndItems.flatMap((g) => g.entries).find((e) => e.url === activeId) || null;\n\n const activeGroupData =\n disabled || !activeId || !activeIsGroup\n ? null\n : dndItems.find((g) => g.name === activeId) || null;\n\n return {\n sensors,\n collisionDetection,\n onDragStart: handleDragStart,\n onDragOver: handleDragOver,\n onDragEnd: handleDragEnd,\n onDragCancel: handleDragCancel,\n dropAnimation: dropAnimationConfig,\n activeItemForOverlay,\n activeGroupData,\n draggingGroupId: currentDraggingGroupId,\n containers: dndContainers,\n dndKitActiveNode,\n isDraggingCardOnly,\n dialogOpenForGroup,\n setDialogOpenForGroup,\n handleRenameGroup,\n handleDialogClose,\n isHoveringNewGroupDropZone,\n setIsHoveringNewGroupDropZone\n };\n}\n\nexport function NewGroupDropZone({\n disabled,\n setIsHovering\n}: {\n disabled: boolean;\n setIsHovering: (v: boolean) => void;\n}) {\n const {\n setNodeRef,\n isOver\n } = useDroppable({\n id: \"new-group-drop-zone\",\n disabled\n });\n const [isVisible, setIsVisible] = useState(false);\n\n useDndMonitor({\n onDragStart({ active }) {\n if (disabled) return;\n const tp = active.data.current?.type;\n setIsVisible(tp === \"item\");\n },\n onDragEnd() {\n setIsVisible(false);\n },\n onDragCancel() {\n setIsVisible(false);\n }\n });\n\n useEffect(() => {\n setIsHovering(isOver && isVisible);\n }, [isOver, isVisible, setIsHovering]);\n\n if (!isVisible || disabled) return null;\n\n return (\n <div\n ref={setNodeRef}\n className={cls(\n \"fixed right-8 top-1/2 -translate-y-1/2 w-[200px] h-[120px] border border-dashed rounded-lg flex items-center justify-center transition-all\",\n isOver\n ? \"bg-surface-accent-100 dark:bg-surface-accent-800 border-surface-300 dark:border-surface-600\"\n : \"bg-surface-50 dark:bg-surface-900 border-surface-200 dark:border-surface-700\"\n )}>\n <div className=\"text-center p-4\">\n <span className=\"block font-medium text-sm\">\n Drop here to create a new group\n </span>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, TextField } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/core\";\n\ninterface RenameGroupDialogProps {\n open: boolean;\n initialName: string;\n existingGroupNames: string[]; // Names of other existing groups to check for duplicates\n onClose: () => void;\n onRename: (newName: string) => void;\n}\n\nexport function RenameGroupDialog({\n open,\n initialName,\n existingGroupNames,\n onClose,\n onRename\n}: RenameGroupDialogProps) {\n const { t } = useTranslation();\n const [name, setName] = useState(initialName);\n const [error, setError] = useState<string | null>(null);\n const inputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null); // Create a ref for the input\n\n useEffect(() => {\n if (open) {\n setName(initialName);\n setError(null);\n // Focus and select text when dialog opens\n setTimeout(() => { // setTimeout to ensure the input is rendered and focusable\n if (inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, 100);\n }\n }, [initialName, open]);\n\n const handleNameChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newName = event.target.value;\n setName(newName);\n if (!newName.trim()) {\n setError(t(\"group_name_empty_error\"));\n } else if (existingGroupNames.includes(newName.trim())) {\n setError(t(\"group_name_exists_error\"));\n } else {\n setError(null);\n }\n };\n\n const handleSave = () => {\n const trimmedName = name.trim();\n if (!trimmedName) {\n setError(t(\"group_name_empty_error\"));\n return;\n }\n if (existingGroupNames.includes(trimmedName)) {\n setError(t(\"group_name_exists_error\"));\n return;\n }\n if (!error) {\n onRename(trimmedName);\n onClose();\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault(); // Prevent default form submission behavior\n const trimmedName = name.trim();\n // We need to check the error state directly as well,\n // because the error state might not have updated if the user types and immediately hits enter.\n let currentError = null;\n if (!trimmedName) {\n currentError = t(\"group_name_empty_error\");\n } else if (existingGroupNames.includes(trimmedName)) {\n currentError = t(\"group_name_exists_error\");\n }\n\n if (!currentError && trimmedName) {\n handleSave();\n } else if (currentError) {\n setError(currentError); // Ensure error is displayed if trying to submit with Enter\n }\n }\n };\n\n const handleClose = () => {\n setName(initialName);\n setError(null);\n onClose();\n };\n\n if (!open) return null;\n\n return (\n <Dialog open={open}>\n <DialogTitle>{t(\"rename_group\")}</DialogTitle>\n <DialogContent>\n <TextField\n inputRef={inputRef} // Pass the ref to the TextField\n label={t(\"group_name_label\")}\n value={name}\n onChange={handleNameChange}\n onKeyDown={handleKeyDown} // Added onKeyDown handler\n error={!!error}\n aria-describedby={error ? \"group-name-error\" : undefined}\n />\n {error && <p id=\"group-name-error\" style={{ display: \"none\" }}>{error}</p>}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}\n variant=\"text\">\n {t(\"cancel\")}\n </Button>\n <Button onClick={handleSave}\n disabled={!!error || !name.trim()}>\n {t(\"save\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import type { HomePageSection, NavigationEntry, NavigationGroupMapping, PluginGenericProps } from \"@rebasepro/types\";\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport Fuse from \"fuse.js\";\nimport { Container, SearchBar } from \"@rebasepro/ui\";\nimport { AnalyticsEvent } from \"@rebasepro/types\";\nimport { FavouritesView } from \"./FavouritesView\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport { NavigationGroup } from \"./NavigationGroup\";\nimport {\n NavigationGroupDroppable,\n NewGroupDropZone,\n SortableNavigationCard,\n SortableNavigationGroup,\n useHomePageDnd\n} from \"./HomePageDnD\";\nimport { DndContext, DragOverlay, MeasuringStrategy } from \"@dnd-kit/core\";\nimport { NavigationCardBinding } from \"./NavigationCardBinding\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { restrictToVerticalAxis, restrictToWindowEdges } from \"@dnd-kit/modifiers\";\nimport { RenameGroupDialog } from \"./RenameGroupDialog\";\nimport { toArray } from \"@rebasepro/utils\";\nimport { useCollapsedGroups, buildCollapsedDefaults, useCustomizationController, useTranslation, useSlot, useAdminModeController, useRebaseRegistry } from \"@rebasepro/core\";\nimport { useRestoreScroll } from \"@rebasepro/core\";\n\nimport { BootstrapAdminBanner } from \"@rebasepro/core\";\nimport { useBreadcrumbsController, useCMSContext } from \"../../index\";\n\nexport const DEFAULT_GROUP_NAME = \"Views\";\nexport const ADMIN_GROUP_NAME = \"Admin\";\n\nexport function ContentHomePage({\n additionalActions,\n additionalChildrenStart,\n additionalChildrenEnd,\n sections,\n hiddenGroups\n}: {\n additionalActions?: React.ReactNode;\n additionalChildrenStart?: React.ReactNode;\n additionalChildrenEnd?: React.ReactNode;\n sections?: HomePageSection[];\n hiddenGroups?: string[];\n}) {\n\n const context = useCMSContext();\n const { navigationStateController } = context;\n const customizationController = useCustomizationController();\n const adminModeController = useAdminModeController();\n const registry = useRebaseRegistry();\n\n const { resolvedSlots } = customizationController;\n const breadcrumbs = useBreadcrumbsController();\n const { t } = useTranslation();\n\n useEffect(() => {\n breadcrumbs.set({ breadcrumbs: [] });\n }, [breadcrumbs.set]);\n\n const {\n allowDragAndDrop = false,\n navigationEntries: unFilteredNavigationEntries = [],\n groups: unFilteredGroupOrder = [],\n onNavigationEntriesUpdate = () => {}\n } = navigationStateController.topLevelNavigation || {};\n\n // Studio mode shows view-type entries (devViews) + admin entries (Users/Roles).\n // Content mode shows collections, admin entries (Users/Roles), and custom entries — but not studio views.\n const rawNavigationEntries = useMemo(() => {\n if (adminModeController.mode === \"studio\") {\n return unFilteredNavigationEntries.filter(e => e.type === \"view\" || e.type === \"admin\");\n }\n return unFilteredNavigationEntries.filter(e => e.type !== \"view\");\n }, [unFilteredNavigationEntries, adminModeController.mode]);\n\n const groupOrderFromNavController = useMemo(() => {\n const entryGroups = new Set(rawNavigationEntries.map(e => e.group).filter(Boolean));\n return unFilteredGroupOrder.filter(g => entryGroups.has(g));\n }, [unFilteredGroupOrder, rawNavigationEntries]);\n\n const fuse = useRef<Fuse<NavigationEntry> | null>(null);\n const [filteredUrls, setFilteredUrls] = useState<string[] | null>(null);\n const performingSearch = Boolean(filteredUrls);\n\n // Memoize filtered navigation entries to prevent unnecessary recalculations\n const filteredNavigationEntries = useMemo(() => {\n return filteredUrls\n ? rawNavigationEntries.filter((e) => filteredUrls.includes(e.url))\n : rawNavigationEntries;\n }, [filteredUrls, rawNavigationEntries]);\n\n useEffect(() => {\n fuse.current = new Fuse(rawNavigationEntries, {\n keys: [\"name\", \"description\", \"group\", \"path\"]\n });\n }, [rawNavigationEntries]);\n\n const updateSearch = useCallback((v?: string) => {\n if (!v?.trim()) {\n setFilteredUrls(null);\n return;\n }\n const results = fuse.current?.search(v.trim());\n setFilteredUrls(results ? results.map((x) => x.item.url) : []);\n }, []);\n\n /* ───────────────────────────────────────────────────────────────\n Build groups (all items) + isolate Admin\n ─────────────────────────────────────────────────────────────── */\n const [items, setItems] = useState<\n { name: string; entries: NavigationEntry[] }[]\n >([]);\n const [adminGroupData, setAdminGroupData] = useState<{\n name: string;\n entries: NavigationEntry[];\n } | null>(null);\n\n // Flag to prevent useEffect from overwriting local DnD state\n const isDndDirtyRef = useRef(false);\n const dndDirtyTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Memoize the processed groups to avoid unnecessary recalculations\n const processedGroups = useMemo(() => {\n const src = filteredNavigationEntries;\n const entriesByGroup: Record<string, NavigationEntry[]> = {};\n\n src.forEach((e) => {\n const g =\n e.type === \"admin\"\n ? ADMIN_GROUP_NAME\n : e.group ?? DEFAULT_GROUP_NAME;\n (entriesByGroup[g] ??= []).push(e);\n });\n\n // Check if there are custom additional card components from plugins\n const hasPluginAdditionalCards = customizationController.resolvedSlots.some(s => s.slot === \"home.cards\");\n\n let allProcessed: { name: string; entries: NavigationEntry[] }[];\n\n if (performingSearch) {\n const ordered = [\n ...new Set(src.map((e) => e.group ?? DEFAULT_GROUP_NAME))\n ];\n allProcessed = ordered\n .map((name) => ({\n name,\n entries: entriesByGroup[name] || []\n }))\n .filter((g) => g.entries.length);\n } else {\n allProcessed = groupOrderFromNavController.map((g) => ({\n name: g,\n entries: entriesByGroup[g] || []\n }));\n Object.keys(entriesByGroup).forEach((g) => {\n if (!groupOrderFromNavController.includes(g))\n allProcessed.push({\n name: g,\n entries: entriesByGroup[g]\n });\n });\n\n // Ensure default group exists if there are plugin additional cards but no collections\n if (hasPluginAdditionalCards && !allProcessed.some(g => g.name === DEFAULT_GROUP_NAME)) {\n allProcessed.push({\n name: DEFAULT_GROUP_NAME,\n entries: []\n });\n }\n\n allProcessed = allProcessed.filter(\n (g) =>\n g.entries.length ||\n (g.name === DEFAULT_GROUP_NAME && hasPluginAdditionalCards)\n );\n }\n\n const admin = allProcessed.find((g) => g.name === ADMIN_GROUP_NAME);\n return {\n adminGroupData: admin || null,\n items: allProcessed.filter((g) => g.name !== ADMIN_GROUP_NAME && !hiddenGroups?.includes(g.name))\n };\n }, [filteredNavigationEntries, performingSearch, groupOrderFromNavController, customizationController.resolvedSlots, hiddenGroups]);\n\n // Update state only when processedGroups actually changes\n // Skip update if DnD just made a local change (dirty flag is set)\n useEffect(() => {\n if (isDndDirtyRef.current) {\n // DnD just updated the state, skip this sync\n return;\n }\n setAdminGroupData(processedGroups.adminGroupData);\n setItems(processedGroups.items);\n }, [processedGroups]);\n\n /* ───────────────────────────────────────────────────────────────\n Local update vs. persistence helpers\n ─────────────────────────────────────────────────────────────── */\n const updateItems = (\n updater:\n | { name: string; entries: NavigationEntry[] }[]\n | ((\n prev: { name: string; entries: NavigationEntry[] }[]\n ) => { name: string; entries: NavigationEntry[] }[])\n ) => {\n setItems(updater); // local only\n };\n\n const persistNavigationGroups = (\n latest: { name: string; entries: NavigationEntry[] }[]\n ) => {\n // Set dirty flag to prevent useEffect from overwriting local state\n isDndDirtyRef.current = true;\n\n // Clear any existing timeout\n if (dndDirtyTimeoutRef.current) {\n clearTimeout(dndDirtyTimeoutRef.current);\n }\n\n // Clear dirty flag after a delay to allow navigation to update\n dndDirtyTimeoutRef.current = setTimeout(() => {\n isDndDirtyRef.current = false;\n }, 1000);\n\n // Map ALL groups including \"Views\"\n const draggable: NavigationGroupMapping[] = latest.map((g) => ({\n name: g.name,\n entries: g.entries.map((e) => e.slug)\n }));\n\n const all: NavigationGroupMapping[] = adminGroupData\n ? [\n ...draggable,\n {\n name: adminGroupData.name,\n entries: adminGroupData.entries.map((e) => e.slug)\n }\n ]\n : draggable;\n\n onNavigationEntriesUpdate(all);\n };\n\n // Use custom hook for collapsed groups with localStorage persistence\n const groupNames = useMemo(() => [\n ...items.map(item => item.name),\n ...(adminGroupData ? [adminGroupData.name] : [])\n ], [items, adminGroupData]);\n\n const collapsedDefaults = useMemo(\n () => buildCollapsedDefaults(registry.cmsConfig?.navigationGroupMappings, \"home\"),\n [registry.cmsConfig?.navigationGroupMappings]\n );\n const { isGroupCollapsed, toggleGroupCollapsed } = useCollapsedGroups(groupNames, \"home\", collapsedDefaults);\n\n const {\n sensors,\n collisionDetection,\n onDragStart,\n onDragOver,\n onDragEnd,\n dropAnimation,\n activeItemForOverlay,\n activeGroupData,\n draggingGroupId,\n containers,\n dndKitActiveNode,\n onDragCancel,\n isDraggingCardOnly,\n dialogOpenForGroup,\n setDialogOpenForGroup,\n handleRenameGroup,\n handleDialogClose,\n isHoveringNewGroupDropZone,\n setIsHoveringNewGroupDropZone\n } = useHomePageDnd({\n items,\n setItems: updateItems,\n disabled: !allowDragAndDrop || performingSearch,\n onPersist: persistNavigationGroups,\n onGroupMoved: (g) =>\n context.analyticsController?.onAnalyticsEvent?.(\"home_move_group\", {\n name: g\n }),\n onCardMovedBetweenGroups: (card) =>\n context.analyticsController?.onAnalyticsEvent?.(\"home_move_card\", {\n id: card.id\n }),\n onNewGroupDrop: () =>\n context.analyticsController?.onAnalyticsEvent?.(\n \"home_drop_new_group\"\n )\n });\n\n const {\n containerRef,\n direction\n } = useRestoreScroll();\n\n const dndDisabled = !allowDragAndDrop || performingSearch;\n\n const dndModifiers = dndKitActiveNode?.data.current?.type === \"group\"\n ? [restrictToVerticalAxis, restrictToWindowEdges]\n : [restrictToWindowEdges];\n\n const sectionProps: PluginGenericProps = { context };\n const additionalPluginChildrenStart = useSlot(\"home.children.start\", sectionProps);\n const additionalPluginChildrenEnd = useSlot(\"home.children.end\", sectionProps);\n const additionalPluginActions = useSlot(\"home.actions\", sectionProps);\n\n // Pre-compute home.cards slot contributions (cannot call useSlot inside .map loop)\n const homeCardContributions = useMemo(() => {\n return resolvedSlots\n .filter(s => s.slot === \"home.cards\")\n .sort((a, b) => (a.order ?? 50) - (b.order ?? 50));\n }, [resolvedSlots]);\n\n /* ───────────────────────────────────────────────────────────────\n Render\n ─────────────────────────────────────────────────────────────── */\n return (\n <div ref={containerRef} className=\"py-2 overflow-auto h-full w-full bg-surface-50 dark:bg-surface-800\">\n <Container maxWidth=\"6xl\">\n <div className=\"mb-4\">\n <BootstrapAdminBanner />\n </div>\n {/* search & actions */}\n <div\n className=\"w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4\"\n style={{ top: direction === \"down\" ? -84 : 0 }}\n >\n <SearchBar\n onTextSearch={updateSearch}\n placeholder={t(\"search_collections\")}\n autoFocus\n size=\"small\"\n innerClassName=\"w-full\"\n className=\"w-full grow\"\n />\n {additionalActions}\n {additionalPluginActions}\n </div>\n\n <FavouritesView hidden={performingSearch}/>\n\n {additionalChildrenStart}\n {additionalPluginChildrenStart}\n\n {/* ─────── DND context ─────── */}\n <DndContext\n sensors={sensors}\n collisionDetection={collisionDetection}\n measuring={{\n droppable: {\n strategy: MeasuringStrategy.Always,\n frequency: 500\n }\n }}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDragEnd={onDragEnd}\n onDragCancel={onDragCancel}\n modifiers={dndModifiers}\n >\n <SortableContext\n key={JSON.stringify(containers)}\n items={containers}\n strategy={verticalListSortingStrategy}\n >\n {items.map((groupData, groupIndex) => {\n const groupKey = groupData.name;\n const entriesInGroup = groupData.entries;\n\n const homeCardsProps = {\n group:\n groupKey === DEFAULT_GROUP_NAME\n ? undefined\n : groupKey,\n context\n };\n // Render home.cards contributions inline (no hook call inside loop)\n const additionalCards = homeCardContributions.map((s, i) => (\n <ErrorBoundary key={`home_cards_${groupKey}_${i}`}>\n <s.Component {...homeCardsProps} {...(s.props ?? {})}/>\n </ErrorBoundary>\n ));\n\n if (\n entriesInGroup.length === 0 &&\n (additionalCards.length === 0 || performingSearch)\n )\n return null;\n\n return (\n <SortableNavigationGroup\n key={`group-${groupIndex}`}\n groupName={groupKey}\n disabled={dndDisabled}\n >\n <NavigationGroup\n group={\n groupKey === DEFAULT_GROUP_NAME\n ? undefined\n : groupKey\n }\n minimised={\n draggingGroupId === groupKey &&\n !isDraggingCardOnly\n }\n isPotentialCardDropTarget={\n isDraggingCardOnly\n }\n dndDisabled={dndDisabled}\n onEditGroup={() => {\n if (dndDisabled) return;\n setDialogOpenForGroup(groupKey);\n }}\n collapsed={isGroupCollapsed(groupKey)}\n onToggleCollapsed={() => toggleGroupCollapsed(groupKey)}\n >\n <NavigationGroupDroppable\n id={groupKey}\n itemIds={entriesInGroup.map(\n (e) => e.url\n )}\n isPotentialCardDropTarget={\n isDraggingCardOnly\n }\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 \">\n {entriesInGroup.map(\n (entry) => (\n <SortableNavigationCard\n key={entry.url}\n entry={entry}\n onClick={() => {\n let event: AnalyticsEvent =\n \"unmapped_event\";\n if (\n entry.type ===\n \"collection\"\n )\n event =\n \"home_navigate_to_collection\";\n else if (\n entry.type ===\n \"view\"\n )\n event =\n \"home_navigate_to_view\";\n else if (\n entry.type ===\n \"admin\"\n )\n event =\n \"home_navigate_to_admin_view\";\n\n context.analyticsController?.onAnalyticsEvent?.(\n event,\n {\n path: entry.slug\n }\n );\n }}\n />\n )\n )}\n {!performingSearch &&\n groupKey.toLowerCase() !==\n ADMIN_GROUP_NAME.toLowerCase() &&\n additionalCards}\n </div>\n </NavigationGroupDroppable>\n </NavigationGroup>\n </SortableNavigationGroup>\n );\n })}\n </SortableContext>\n\n <NewGroupDropZone\n disabled={dndDisabled}\n setIsHovering={setIsHoveringNewGroupDropZone}\n />\n\n <DragOverlay adjustScale={false} dropAnimation={dropAnimation}>\n {activeGroupData &&\n draggingGroupId === activeGroupData.name ? (\n <div\n className=\"rounded-lg bg-transparent\"\n style={{\n padding: 0,\n margin: 0\n }}\n >\n <NavigationGroup\n group={\n activeGroupData.name ===\n DEFAULT_GROUP_NAME\n ? undefined\n : activeGroupData.name\n }\n isPreview={false}\n minimised\n />\n </div>\n ) : activeItemForOverlay ? (\n <NavigationCardBinding\n {...activeItemForOverlay}\n shrink={isHoveringNewGroupDropZone}\n />\n ) : null}\n </DragOverlay>\n </DndContext>\n\n {!performingSearch && adminGroupData && (\n <NavigationGroup\n group={adminGroupData.name}\n collapsed={isGroupCollapsed(adminGroupData.name)}\n onToggleCollapsed={() => toggleGroupCollapsed(adminGroupData.name)}\n >\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 \">\n {adminGroupData.entries.map((entry) => (\n <NavigationCardBinding\n key={entry.url}\n {...entry}\n onClick={() => {\n let event: AnalyticsEvent =\n \"unmapped_event\";\n if (entry.type === \"collection\")\n event =\n \"home_navigate_to_collection\";\n else if (entry.type === \"view\")\n event = \"home_navigate_to_view\";\n else if (entry.type === \"admin\")\n event =\n \"home_navigate_to_admin_view\";\n\n context.analyticsController?.onAnalyticsEvent?.(\n event,\n { path: entry.slug }\n );\n }}\n />\n ))}\n </div>\n </NavigationGroup>\n )}\n\n {sections && sections.map((section) => (\n <NavigationGroup\n key={section.key}\n group={section.title}\n >\n {section.children}\n </NavigationGroup>\n ))}\n\n {additionalPluginChildrenEnd}\n {additionalChildrenEnd}\n </Container>\n\n {dialogOpenForGroup && (\n <RenameGroupDialog\n open\n initialName={dialogOpenForGroup}\n existingGroupNames={items\n .map((g) => g.name)\n .filter((n) => n !== dialogOpenForGroup)}\n onClose={handleDialogClose}\n onRename={(newName) => {\n handleRenameGroup(dialogOpenForGroup, newName);\n }}\n />\n )}\n </div>\n );\n}\n"],"names":["NavigationChip","t0","$","_c","entry","navigate","useNavigate","userConfigurationPersistence","useUserConfigurationPersistence","t1","slug","favouritePaths","includes","favourite","t2","e","preventDefault","stopPropagation","setFavouritePaths","filter","p","onIconClick","t3","url","t4","t5","t6","name","FavouritesView","navigationStateController","useNavigationStateController","T0","path","topLevelNavigation","navigationEntries","find","favouriteCollections","map","Boolean","Collapse","length","_temp","entry_0","NavigationGroup","children","group","minimised","isPreview","isPotentialCardDropTarget","onEditGroup","dndDisabled","collapsed","onToggleCollapsed","t","useTranslation","isHovered","setIsHovered","useState","currentGroupName","showCaret","cls","Symbol","for","t7","iconSize","smallest","t8","TitleContent","t9","t10","t11","t12","open","minHeight","t13","t14","NavigationCard","React","memo","description","icon","actions","additionalContent","onClick","shrink","event","NavigationCardBinding","collection","view","collectionIcon","context","useRebaseContext","actionsArray","pluginCardActions","useSlot","pluginCardInsights","undefined","setRecentlyVisitedPaths","recentlyVisitedPaths","p_0","animateLayoutChanges","args","defaultAnimateLayoutChanges","wasDragging","dropAnimationConfig","cloneSerializableNavigationEntry","clonedEntry","id","type","cloneItemsForDnd","items","g","entries","SortableNavigationCard","setNodeRef","listeners","attributes","transform","transition","isDragging","useSortable","CSS","Transform","toString","opacity","style","NavigationGroupDroppable","itemIds","useDroppable","rectSortingStrategy","SortableNavigationGroup","groupName","disabled","useHomePageDnd","setItems","onCardMovedBetweenGroups","onGroupMoved","onNewGroupDrop","onPersist","dndItems","setDndItems","activeId","setActiveId","activeIsGroup","setActiveIsGroup","currentDraggingGroupId","setCurrentDraggingGroupId","dndKitActiveNode","setDndKitActiveNode","isDraggingCardOnly","setIsDraggingCardOnly","dialogOpenForGroup","setDialogOpenForGroup","isHoveringNewGroupDropZone","setIsHoveringNewGroupDropZone","pendingNewGroupName","setPendingNewGroupName","stateBeforeNewGroup","setStateBeforeNewGroup","preDragItemsRef","useRef","interimItemsRef","useEffect","current","mouseSensor","useSensor","MouseSensor","activationConstraint","distance","touchSensor","TouchSensor","delay","tolerance","keyboardSensor","KeyboardSensor","sensors","useSensors","dndContainers","findDndContainer","useCallback","some","lastOverId","recentlyMovedToNewContainer","collisionDetection","groups","droppableContainers","c","closestCenter","pointer","pointerWithin","zone","container","itemsIn","closest","closestCorners","first","getFirstCollision","rects","rectIntersection","zoneRect","overId","overIsContainer","closestItem","handleDragStart","active","isGroup","data","handleDragOver","over","activeIdNow","overIdNow","activeCont","overCont","newState","srcIdx","findIndex","tgtIdx","src","tgt","idxInSrc","moved","splice","push","overIdx","handleDragEnd","resetDragState","from","to","arrayMove","findContainerInState","state","sourceState","dragged","tentative","counter","grpIdx","oldIdx","newIdx","reordered","finalState","finalOverId","cleanOverCont","console","error","handleDragCancel","handleRenameGroup","oldName","newName","idx","updated","handleDialogClose","activeItemForOverlay","flatMap","activeGroupData","onDragStart","onDragOver","onDragEnd","onDragCancel","dropAnimation","draggingGroupId","containers","NewGroupDropZone","setIsHovering","isOver","isVisible","setIsVisible","tp","useDndMonitor","RenameGroupDialog","initialName","existingGroupNames","onClose","onRename","setName","setError","inputRef","setTimeout","focus","select","target","value","trim","handleNameChange","trimmedName","handleSave","event_0","key","trimmedName_0","currentError","handleKeyDown","display","t15","t16","t17","t18","t19","t20","DEFAULT_GROUP_NAME","ADMIN_GROUP_NAME","ContentHomePage","additionalActions","additionalChildrenStart","additionalChildrenEnd","sections","hiddenGroups","useCMSContext","customizationController","useCustomizationController","adminModeController","useAdminModeController","registry","useRebaseRegistry","resolvedSlots","breadcrumbs","useBreadcrumbsController","set","allowDragAndDrop","unFilteredNavigationEntries","unFilteredGroupOrder","onNavigationEntriesUpdate","rawNavigationEntries","useMemo","mode","groupOrderFromNavController","entryGroups","Set","has","fuse","filteredUrls","setFilteredUrls","performingSearch","filteredNavigationEntries","Fuse","keys","updateSearch","v","results","search","x","item","adminGroupData","setAdminGroupData","isDndDirtyRef","dndDirtyTimeoutRef","processedGroups","entriesByGroup","forEach","hasPluginAdditionalCards","s","slot","allProcessed","ordered","Object","admin","updateItems","updater","persistNavigationGroups","latest","clearTimeout","draggable","all","groupNames","collapsedDefaults","buildCollapsedDefaults","cmsConfig","navigationGroupMappings","isGroupCollapsed","toggleGroupCollapsed","useCollapsedGroups","analyticsController","onAnalyticsEvent","card","containerRef","direction","useRestoreScroll","dndModifiers","restrictToVerticalAxis","restrictToWindowEdges","sectionProps","additionalPluginChildrenStart","additionalPluginChildrenEnd","additionalPluginActions","homeCardContributions","sort","a","b","order","top","droppable","strategy","MeasuringStrategy","Always","frequency","verticalListSortingStrategy","groupData","groupIndex","groupKey","entriesInGroup","homeCardsProps","additionalCards","i","props","toLowerCase","JSON","stringify","padding","margin","section","title","n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import React__default, { useCallback } from "react";
3
3
  import { Tooltip, IconButton, Dialog, DialogTitle, DialogContent, cls, BooleanSwitchWithLabel, DialogActions, Button, iconSize, Alert, CircularProgress } from "@rebasepro/ui";
4
4
  import { DownloadIcon } from "lucide-react";
5
5
  import { useData } from "@rebasepro/core";
6
- import { k as useCMSContext } from "./util-BQ82ySL3.js";
6
+ import { k as useCMSContext } from "./util-CwLmSpGp.js";
7
7
  import "react-compiler-runtime";
8
8
  import { getDefaultValuesFor } from "@rebasepro/common";
9
9
  import "fast-equals";
@@ -436,4 +436,4 @@ export {
436
436
  downloadBlob as d,
437
437
  getEntityCSVExportableData as g
438
438
  };
439
- //# sourceMappingURL=ExportCollectionAction-Dc0VOWMN.js.map
439
+ //# sourceMappingURL=ExportCollectionAction-CUwJg4F9.js.map