@rebasepro/admin 0.13.0 → 0.13.1-canary.g1822133

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 (210) hide show
  1. package/dist/{CollectionEditorDialog-CjXkWZ64.js → CollectionEditorDialog-CSheud_E.js} +19 -9
  2. package/dist/CollectionEditorDialog-CSheud_E.js.map +1 -0
  3. package/dist/{PropertyEditView-W8I3YV89.js → PropertyEditView-CWZlC1gq.js} +5 -5
  4. package/dist/PropertyEditView-CWZlC1gq.js.map +1 -0
  5. package/dist/{RouterCollectionsStudioView-BsLTNoqX.js → RouterCollectionsStudioView-CwTpdzWF.js} +9 -13
  6. package/dist/RouterCollectionsStudioView-CwTpdzWF.js.map +1 -0
  7. package/dist/collection_editor/serializable_types.d.ts +1 -0
  8. package/dist/collection_editor_ui.js +4 -4
  9. package/dist/components/AdditionalFieldValue.d.ts +25 -0
  10. package/dist/components/ClearFilterSortButton.d.ts +7 -1
  11. package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +16 -0
  12. package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +3 -1
  13. package/dist/components/CollectionViewBinding/SearchExplanation.d.ts +48 -0
  14. package/dist/components/CollectionViewBinding/SearchHighlight.d.ts +101 -0
  15. package/dist/components/CollectionViewBinding/SlotValue.d.ts +63 -0
  16. package/dist/components/CollectionViewBinding/SortButton.d.ts +7 -1
  17. package/dist/components/CollectionViewBinding/SplitListCloseButton.d.ts +17 -4
  18. package/dist/components/CollectionViewBinding/SplitListShowButton.d.ts +12 -0
  19. package/dist/components/CollectionViewBinding/usePreviewSlots.d.ts +55 -5
  20. package/dist/components/DetailViewBinding.d.ts +15 -0
  21. package/dist/components/DrawerNavigationGroup.d.ts +9 -6
  22. package/dist/components/DrawerNavigationItem.d.ts +16 -6
  23. package/dist/components/EditViewBinding.d.ts +30 -1
  24. package/dist/components/EntityDisplayHeader.d.ts +53 -0
  25. package/dist/components/EntityIdentityBar.d.ts +43 -1
  26. package/dist/components/EntityViewBinding.d.ts +60 -6
  27. package/dist/components/RebaseLayout.d.ts +1 -1
  28. package/dist/components/RebaseShell.d.ts +1 -1
  29. package/dist/components/RelationSelector.d.ts +21 -1
  30. package/dist/components/UserSelector.d.ts +8 -1
  31. package/dist/components/app/Scaffold.d.ts +9 -3
  32. package/dist/components/index.d.ts +2 -0
  33. package/dist/data_export/export/export.d.ts +7 -0
  34. package/dist/data_export/export/fetch_export_data.d.ts +48 -0
  35. package/dist/data_export/export/index.d.ts +1 -0
  36. package/dist/data_import/utils/csv.d.ts +30 -0
  37. package/dist/data_import/utils/index.d.ts +2 -0
  38. package/dist/data_import/utils/save_entities.d.ts +38 -0
  39. package/dist/data_import/utils/transforms.d.ts +9 -0
  40. package/dist/editor.js +3 -0
  41. package/dist/editor.js.map +1 -1
  42. package/dist/{export-J79rMoNj.js → export-L53WektO.js} +175 -39
  43. package/dist/export-L53WektO.js.map +1 -0
  44. package/dist/form/components/FieldBlock.d.ts +58 -4
  45. package/dist/form/components/FormRail.d.ts +13 -0
  46. package/dist/form/components/FormSections.d.ts +15 -1
  47. package/dist/form/components/useRailVisible.d.ts +5 -4
  48. package/dist/form/form_utils.d.ts +38 -1
  49. package/dist/{history-D7L_JlLO.js → history-D5SKygpJ.js} +4 -4
  50. package/dist/{history-D7L_JlLO.js.map → history-D5SKygpJ.js.map} +1 -1
  51. package/dist/hooks/useEntityDisplay.d.ts +102 -0
  52. package/dist/hooks/useEntityDisplayTitle.d.ts +18 -9
  53. package/dist/{import-BvYl--U4.js → import-C_4edkoD.js} +6 -5
  54. package/dist/import-C_4edkoD.js.map +1 -0
  55. package/dist/index.d.ts +2 -2
  56. package/dist/index.js +237 -123
  57. package/dist/index.js.map +1 -1
  58. package/dist/preview/compact_text.d.ts +23 -0
  59. package/dist/preview/components/BooleanPreview.d.ts +3 -1
  60. package/dist/preview/components/date_fns_locales.d.ts +9 -0
  61. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  62. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +1 -1
  63. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +1 -1
  64. package/dist/preview/property_previews/MapPropertyPreview.d.ts +1 -1
  65. package/dist/preview/property_previews/StringPropertyPreview.d.ts +1 -1
  66. package/dist/routes/RebaseRoute.d.ts +1 -1
  67. package/dist/types/components/PropertyPreviewProps.d.ts +19 -0
  68. package/dist/util/number_format.d.ts +14 -0
  69. package/dist/util/previews.d.ts +9 -2
  70. package/dist/util/view_constants.d.ts +24 -0
  71. package/dist/util/view_mode.d.ts +18 -0
  72. package/dist/{util-GiwPgxnL.js → util-C-D5yD2n.js} +4161 -1809
  73. package/dist/util-C-D5yD2n.js.map +1 -0
  74. package/package.json +10 -9
  75. package/src/collection_editor/serializable_types.ts +1 -0
  76. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +8 -3
  77. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +5 -2
  78. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +1 -0
  79. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +9 -8
  80. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +9 -11
  81. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +5 -2
  82. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +1 -1
  83. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +5 -2
  84. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -0
  85. package/src/collection_editor/useJsonCollectionsConfigController.tsx +92 -84
  86. package/src/collection_editor/useLocalCollectionsConfigController.tsx +10 -3
  87. package/src/components/AdditionalFieldValue.tsx +68 -0
  88. package/src/components/ClearFilterSortButton.tsx +16 -7
  89. package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +7 -8
  90. package/src/components/CollectionTableBinding/PropertyTableCell.tsx +2 -2
  91. package/src/components/CollectionTableBinding/column_utils.tsx +15 -6
  92. package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +2 -2
  93. package/src/components/CollectionTableBinding/table_bindings.tsx +7 -1
  94. package/src/components/CollectionViewBinding/BoardCardBinding.tsx +26 -27
  95. package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +13 -7
  96. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +2 -1
  97. package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +822 -354
  98. package/src/components/CollectionViewBinding/CollectionViewActions.tsx +1 -1
  99. package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +52 -12
  100. package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +9 -0
  101. package/src/components/CollectionViewBinding/EntityCardBinding.tsx +51 -39
  102. package/src/components/CollectionViewBinding/SearchExplanation.tsx +106 -0
  103. package/src/components/CollectionViewBinding/SearchHighlight.tsx +311 -0
  104. package/src/components/CollectionViewBinding/SlotValue.tsx +156 -0
  105. package/src/components/CollectionViewBinding/SortButton.tsx +16 -4
  106. package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +23 -7
  107. package/src/components/CollectionViewBinding/SplitListShowButton.tsx +28 -0
  108. package/src/components/CollectionViewBinding/SplitListView.tsx +47 -7
  109. package/src/components/CollectionViewBinding/ViewModeToggle.tsx +10 -5
  110. package/src/components/CollectionViewBinding/useBoardDataController.tsx +23 -6
  111. package/src/components/CollectionViewBinding/usePreviewSlots.ts +183 -64
  112. package/src/components/CollectionViewBinding/utils.ts +7 -4
  113. package/src/components/DefaultDrawer.tsx +26 -23
  114. package/src/components/DetailViewBinding.tsx +109 -62
  115. package/src/components/DrawerNavigationGroup.tsx +16 -39
  116. package/src/components/DrawerNavigationItem.tsx +56 -16
  117. package/src/components/EditViewBinding.tsx +233 -50
  118. package/src/components/EntityDisplayHeader.tsx +170 -0
  119. package/src/components/EntityIdentityBar.tsx +163 -23
  120. package/src/components/EntityInspector.tsx +24 -6
  121. package/src/components/EntityPreviewBinding.tsx +58 -18
  122. package/src/components/EntityViewBinding.tsx +344 -41
  123. package/src/components/InlineEntityPreview.tsx +10 -10
  124. package/src/components/RebaseLayout.tsx +2 -2
  125. package/src/components/RebaseShell.tsx +2 -2
  126. package/src/components/ReferenceTable/SelectionTableBinding.tsx +4 -2
  127. package/src/components/RelationSelector.tsx +76 -15
  128. package/src/components/SearchIconsView.tsx +14 -33
  129. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -0
  130. package/src/components/SideDialogs.tsx +15 -3
  131. package/src/components/SidePanelBinding.tsx +122 -66
  132. package/src/components/UserSelector.tsx +67 -13
  133. package/src/components/app/Scaffold.tsx +112 -10
  134. package/src/components/history/LastEditedByIndicator.tsx +7 -12
  135. package/src/components/index.ts +3 -0
  136. package/src/data_export/export/ExportCollectionAction.tsx +101 -48
  137. package/src/data_export/export/export.ts +63 -16
  138. package/src/data_export/export/fetch_export_data.ts +90 -0
  139. package/src/data_export/export/index.ts +1 -0
  140. package/src/data_import/components/DataNewPropertiesMapping.tsx +20 -3
  141. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +1 -0
  142. package/src/data_import/components/ImportSaveInProgress.tsx +35 -36
  143. package/src/data_import/import/ImportCollectionAction.tsx +13 -2
  144. package/src/data_import/utils/csv.ts +153 -0
  145. package/src/data_import/utils/data.ts +16 -2
  146. package/src/data_import/utils/file_to_json.ts +77 -6
  147. package/src/data_import/utils/index.ts +2 -0
  148. package/src/data_import/utils/save_entities.ts +138 -0
  149. package/src/data_import/utils/transforms.ts +23 -0
  150. package/src/editor/components/image-bubble.tsx +2 -0
  151. package/src/editor/selectors/link-selector.tsx +1 -0
  152. package/src/form/EntityForm.tsx +74 -53
  153. package/src/form/EntityFormBinding.tsx +24 -11
  154. package/src/form/PropertyFieldBinding.tsx +2 -2
  155. package/src/form/components/FieldBlock.tsx +80 -10
  156. package/src/form/components/FormRail.tsx +19 -2
  157. package/src/form/components/FormSections.tsx +32 -5
  158. package/src/form/components/StorageUploadProgress.tsx +9 -3
  159. package/src/form/components/useRailVisible.tsx +5 -4
  160. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -2
  161. package/src/form/field_bindings/BinaryFieldBinding.tsx +11 -5
  162. package/src/form/field_bindings/BlockFieldBinding.tsx +3 -3
  163. package/src/form/field_bindings/DateTimeFieldBinding.tsx +4 -0
  164. package/src/form/field_bindings/GeopointFieldBinding.tsx +23 -16
  165. package/src/form/field_bindings/KeyValueFieldBinding.tsx +3 -0
  166. package/src/form/field_bindings/MapFieldBinding.tsx +2 -2
  167. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +13 -7
  168. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +7 -1
  169. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +21 -2
  170. package/src/form/field_bindings/ReferenceFieldBinding.tsx +1 -1
  171. package/src/form/field_bindings/RelationFieldBinding.tsx +5 -2
  172. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
  173. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +2 -2
  174. package/src/form/field_bindings/TextFieldBinding.tsx +18 -0
  175. package/src/form/field_bindings/UserSelectFieldBinding.tsx +4 -1
  176. package/src/form/field_bindings/VectorFieldBinding.tsx +7 -4
  177. package/src/form/form_utils.ts +78 -0
  178. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +29 -5
  179. package/src/hooks/useEntityDisplay.tsx +262 -0
  180. package/src/hooks/useEntityDisplayTitle.tsx +27 -38
  181. package/src/index.ts +9 -1
  182. package/src/preview/PropertyPreview.tsx +25 -5
  183. package/src/preview/compact_text.ts +68 -0
  184. package/src/preview/components/BooleanPreview.tsx +5 -2
  185. package/src/preview/components/DatePreview.tsx +15 -2
  186. package/src/preview/components/ReferencePreview.tsx +5 -8
  187. package/src/preview/components/RelationPreview.tsx +8 -7
  188. package/src/preview/components/StorageThumbnail.tsx +5 -2
  189. package/src/preview/components/date_fns_locales.ts +125 -0
  190. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +6 -3
  191. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +26 -1
  192. package/src/preview/property_previews/ArrayOneOfPreview.tsx +10 -1
  193. package/src/preview/property_previews/ArrayPropertyPreview.tsx +10 -1
  194. package/src/preview/property_previews/MapPropertyPreview.tsx +52 -1
  195. package/src/preview/property_previews/NumberPropertyPreview.tsx +9 -1
  196. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -5
  197. package/src/routes/RebaseRoute.tsx +62 -4
  198. package/src/types/components/PropertyPreviewProps.tsx +21 -0
  199. package/src/util/navigation_utils.ts +4 -2
  200. package/src/util/number_format.ts +46 -0
  201. package/src/util/previews.ts +8 -55
  202. package/src/util/property_utils.tsx +6 -1
  203. package/src/util/view_constants.ts +27 -0
  204. package/src/util/view_mode.ts +36 -0
  205. package/dist/CollectionEditorDialog-CjXkWZ64.js.map +0 -1
  206. package/dist/PropertyEditView-W8I3YV89.js.map +0 -1
  207. package/dist/RouterCollectionsStudioView-BsLTNoqX.js.map +0 -1
  208. package/dist/export-J79rMoNj.js.map +0 -1
  209. package/dist/import-BvYl--U4.js.map +0 -1
  210. package/dist/util-GiwPgxnL.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { $ as useBuildCollectionRegistryController, $n as sanitizeUrl, $t as CollectionTableBinding, A as getFieldId, An as ArrayOfReferencesPreview, At as convertFileToJson, B as MapFieldBinding, Bn as getEntityTitlePropertyKeyForEntity, Bt as mergeEntityActions, C as removeEmptyContainers, Cn as MapPropertyPreview, Ct as convertDataToEntity, D as getDefaultFieldConfig, Dn as ArrayEnumPreview, Dt as useImportConfig, E as DEFAULT_FIELD_CONFIGS, En as ArrayPropertyEnumPreview, Et as getInferenceType, F as SelectFieldBinding, Fn as useSidePanel, Ft as FieldCaption, G as useSelectionDialog, Gn as StorageThumbnailInternal, Gt as removeInitialAndTrailingSlashes, H as DateTimeFieldBinding, Hn as StringPropertyPreview, Ht as getCollectionBySlugWithin, I as RepeatFieldBinding, In as CollectionRegistryContext, It as useBreadcrumbsController, J as useBuildUrlController, Jn as renderSkeletonIcon, Jt as resolveCollectionPathIds, K as SelectionTableBinding, Kn as SkeletonPropertyComponent, Kt as removeInitialSlash, L as ReferenceFieldBinding, Ln as useCollectionRegistryController, Lt as BreadcrumbsProvider, M as TextFieldBinding, Mn as ReferencePreview, Mt as ArrayContainer, N as SwitchFieldBinding, Nn as EntityPreviewBinding, Nt as PropertyConfigBadge, O as getDefaultFieldId, On as ArrayOfStorageComponentsPreview, Ot as ImportSaveInProgress, P as StorageUploadFieldBinding, Pn as SidePanelControllerContext, Pt as SearchIconsView, Q as useResolvedCollections, Qn as ImagePreview, Qt as VirtualTableInput, R as MultiSelectFieldBinding, Rn as getEntityPreviewKeys, Rt as resolveEntityAction, S as getInitialEntityValues, Sn as KeyValuePreview, St as DataNewPropertiesMapping, T as PropertyFieldBinding, Tn as ArrayOfStringsPreview, Tt as processValueMapping, U as BlockFieldBinding, Un as EnumValuesChip, Ut as getCollectionPathsCombinations, V as KeyValueFieldBinding, Vn as ArrayPropertyPreview, Vt as addInitialSlash, W as ArrayOfReferencesFieldBinding, Wn as StorageThumbnail, Wt as getLastSegment, X as useTopLevelNavigation, Xn as renderSkeletonText, Xt as resolveViewMode, Y as useBuildNavigationStateController, Yn as renderSkeletonImageThumbnail, Yt as resolveOpenEntityMode, Z as useResolvedViews, Zn as UrlComponentPreview, Zt as useSelectionController, _ as useCollectionsConfigController, _n as getUserLabel, _t as CollectionViewActions, a as namespaceToPropertiesPath, an as NavigationStateContext, ar as FieldBlock, at as useBuildSidePanel, b as extractTouchedValues, bn as BooleanPreview, bt as useCollectionEditorDialogsState, c as buildCollectionGenerationCallback, cn as SideDialogsControllerContext, cr as getBracketNotation, ct as copyEntityAction, d as fromSerializableCollectionConfigs, dn as useClearRestoreValue, dr as getIconForWidget, dt as resetPasswordAction, en as SelectableTable, er as EmptyValue, et as useHistory, f as fromSerializableProperties, fn as ReadOnlyFieldBinding, fr as getPropertiesWithPropertiesOrder, ft as CreationResultDialog, g as toSerializableProperty, gn as UserPreview, gr as isRelationProperty, gt as EntityCardBinding, h as toSerializableProperties, hn as PropertyPreview, hr as isReferenceProperty, ht as CollectionCardViewBinding, i as namespaceToPropertiesOrderPath, in as useUrlController, ir as FormRail, it as getEntityViewWidth, j as VectorFieldBinding, jn as InlineEntityListPreview, jt as unflattenObject, k as getFieldConfig, kn as RelationPreview, kt as ImportFileUpload, l as validateCollectionJson, ln as SelectableTableContext, lr as getDefaultPropertiesOrder, lt as deleteEntityAction, m as toSerializableCollectionConfig, mn as ArrayOfMapsPreview, mr as getResolvedPropertyInPath, mt as EntityViewBinding, n as getFullIdPath, nn as useAdminContext, nr as LabelWithIcon, nt as useResolvedNavigationFrom, o as CollectionGenerationApiError, on as useNavigationStateController, or as isSelfLabellingProperty, ot as EditViewBinding, p as fromSerializableProperty, pn as FieldHelperText, pr as getPropertyInPath, pt as DetailViewBinding, q as SideDialogs, qn as renderSkeletonCaptionText, qt as removeTrailingSlash, r as idToPropertiesPath, rn as UrlContext, rr as FormSections, rt as buildSidePanelsFromUrl, s as DEFAULT_COLLECTION_GENERATION_ENDPOINT, sn as useSideDialogsController, sr as PropertyIdCopyTooltip, st as CollectionViewBinding, t as getFullId, tn as CollectionRowActions, tr as LabelWithIconAndTooltip, tt as resolveNavigationFrom, u as fromSerializableCollectionConfig, un as ArrayCustomShapedFieldBinding, ur as getIconForProperty, ut as editEntityAction, v as EntityFormBinding, vn as useResolvedUser, vt as useCollectionEditorController, w as zodToFormErrors, wn as ArrayOneOfPreview, wt as flattenEntry, x as getChanges, xn as DatePreview, xt as ImportNewPropertyFieldPreview, y as EntityForm, yn as NumberPropertyPreview, yt as ConfigControllerProvider, z as MarkdownEditorFieldBinding, zn as getEntityTitlePropertyKey, zt as resolveEntityView } from "./util-GiwPgxnL.js";
2
- import { i as PropertySelectEntry, n as ImportCollectionAction, r as ImportDataPreview } from "./import-BvYl--U4.js";
3
- import { a as downloadDataAsCsv, c as getEntityJsonExportableData, i as downloadBlob, n as ExportCollectionAction, o as downloadEntitiesExport, r as BasicExportAction, s as getEntityCSVExportableData } from "./export-J79rMoNj.js";
1
+ import { $ as getEntityViewWidth, $n as SkeletonPropertyComponent, $t as resolveCollectionPathIds, A as SelectFieldBinding, An as ArrayOfStringsPreview, At as saveImportedEntities, B as useSelectionDialog, Bn as useSidePanel, Bt as FieldCaption, C as getDefaultFieldId, Cn as UserPreview, Cr as isReferenceProperty, Ct as convertDataToEntity, D as TextFieldBinding, Dn as KeyValuePreview, Dt as useImportConfig, E as VectorFieldBinding, En as DatePreview, Et as getInferenceType, F as MapFieldBinding, Fn as ArrayOfReferencesPreview, Ft as parseCsvToObjects, G as useTopLevelNavigation, Gn as getEntityPreviewKeys, Gt as mergeEntityActions, H as SideDialogs, Hn as useCollectionRegistryController, Ht as BreadcrumbsProvider, I as KeyValueFieldBinding, In as InlineEntityListPreview, It as unflattenObject, J as useBuildCollectionRegistryController, Jn as ArrayPropertyPreview, Jt as getCollectionPathsCombinations, K as useResolvedViews, Kn as getEntityTitlePropertyKey, Kt as addInitialSlash, L as DateTimeFieldBinding, Ln as ReferencePreview, Lt as ArrayContainer, M as ReferenceFieldBinding, Mn as ArrayEnumPreview, Mt as convertFileToJson, N as MultiSelectFieldBinding, Nn as ArrayOfStorageComponentsPreview, Nt as detectCsvDelimiter, O as SwitchFieldBinding, On as MapPropertyPreview, Ot as ImportSaveInProgress, P as MarkdownEditorFieldBinding, Pn as RelationPreview, Pt as parseCsvRows, Q as buildSidePanelsFromUrl, Qn as StorageThumbnailInternal, Qt as removeTrailingSlash, R as BlockFieldBinding, Rn as EntityPreviewBinding, Rt as PropertyConfigBadge, S as getDefaultFieldConfig, Sn as PropertyPreview, Sr as getResolvedPropertyInPath, St as DataNewPropertiesMapping, T as getFieldId, Tn as BooleanPreview, Tt as processValueMapping, U as useBuildUrlController, Un as getUserLabel, Ut as resolveEntityAction, V as SelectionTableBinding, Vn as CollectionRegistryContext, Vt as useBreadcrumbsController, W as useBuildNavigationStateController, Wn as useResolvedUser, Wt as resolveEntityView, X as resolveNavigationFrom, Xn as EnumValuesChip, Xt as removeInitialAndTrailingSlashes, Y as useHistory, Yn as StringPropertyPreview, Yt as getLastSegment, Z as useResolvedNavigationFrom, Zn as StorageThumbnail, Zt as removeInitialSlash, _ as useCollectionsConfigController, _n as ReadOnlyFieldBinding, _r as getDefaultPropertiesOrder, _t as CollectionViewActions, a as namespaceToPropertiesPath, an as SelectableTable, ar as ImagePreview, at as removeEmptyContainers, b as PropertyFieldBinding, bn as FieldHelperText, br as getPropertiesWithPropertiesOrder, bt as useCollectionEditorDialogsState, c as buildCollectionGenerationCallback, cn as UrlContext, cr as FormSections, ct as copyEntityAction, d as fromSerializableCollectionConfigs, dn as useNavigationStateController, dr as FieldBlock, dt as resetPasswordAction, en as resolveOpenEntityMode, er as renderSkeletonCaptionText, et as useBuildSidePanel, f as fromSerializableProperties, fn as useSideDialogsController, fr as LABEL_ICON_SIZE, ft as CreationResultDialog, g as toSerializableProperty, gn as useClearRestoreValue, gr as getBracketNotation, gt as EntityCardBinding, h as toSerializableProperties, hn as ArrayCustomShapedFieldBinding, hr as PropertyIdCopyTooltip, ht as CollectionCardViewBinding, i as namespaceToPropertiesOrderPath, in as CollectionTableBinding, ir as UrlComponentPreview, it as getInitialEntityValues, j as RepeatFieldBinding, jn as ArrayPropertyEnumPreview, jt as ImportFileUpload, k as StorageUploadFieldBinding, kn as ArrayOneOfPreview, kt as IMPORT_BATCH_SIZE, l as validateCollectionJson, ln as useUrlController, lr as FormRail, lt as deleteEntityAction, m as toSerializableCollectionConfig, mn as SelectableTableContext, mr as spanClass, mt as EntityViewBinding, n as getFullIdPath, nn as useSelectionController, nr as renderSkeletonImageThumbnail, nt as extractTouchedValues, o as CollectionGenerationApiError, on as CollectionRowActions, or as sanitizeUrl, ot as zodToFormErrors, p as fromSerializableProperty, pn as SideDialogsControllerContext, pr as isSelfLabellingProperty, pt as DetailViewBinding, q as useResolvedCollections, qn as getEntityTitlePropertyKeyForEntity, qt as getCollectionBySlugWithin, r as idToPropertiesPath, rn as VirtualTableInput, rr as renderSkeletonText, rt as getChanges, s as DEFAULT_COLLECTION_GENERATION_ENDPOINT, sn as useAdminContext, sr as EmptyValue, st as CollectionViewBinding, t as getFullId, tn as resolveViewMode, tr as renderSkeletonIcon, tt as EditViewBinding, u as fromSerializableCollectionConfig, un as NavigationStateContext, ur as RecordMeta, ut as editEntityAction, v as EntityFormBinding, vn as LabelWithIconAndTooltip, vr as getIconForProperty, vt as useCollectionEditorController, w as getFieldConfig, wn as NumberPropertyPreview, wr as isRelationProperty, wt as flattenEntry, x as DEFAULT_FIELD_CONFIGS, xn as ArrayOfMapsPreview, xr as getPropertyInPath, xt as ImportNewPropertyFieldPreview, y as EntityForm, yn as LabelWithIcon, yr as getIconForWidget, yt as ConfigControllerProvider, z as ArrayOfReferencesFieldBinding, zn as SidePanelControllerContext, zt as SearchIconsView } from "./util-C-D5yD2n.js";
2
+ import { i as PropertySelectEntry, n as ImportCollectionAction, r as ImportDataPreview } from "./import-C_4edkoD.js";
3
+ import { a as MAX_EXPORT_ROWS, c as downloadDataAsCsv, d as escapeCsvFormula, f as getEntityCSVExportableData, i as EXPORT_PAGE_SIZE, l as downloadEntitiesExport, n as ExportCollectionAction, o as fetchAllEntitiesForExport, p as getEntityJsonExportableData, r as BasicExportAction, s as downloadBlob, u as entryToCSVRow } from "./export-L53WektO.js";
4
4
  import React, { Suspense, lazy, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
5
5
  import { deepEqual } from "fast-equals";
6
- import { Avatar, Button, Card, ChevronDownIcon, ChevronsLeftIcon, ChevronsRightIcon, Chip, CircularProgressCenter, Collapse, Container, Dialog, DialogActions, DialogContent, DialogTitle, ErrorBoundary, ExpandablePanel, IconButton, LogOutIcon, Markdown, Menu, MenuIcon, MenuItem, MoonIcon, PencilIcon, SearchBar, SettingsIcon, Sheet, Skeleton, StarIcon, SunIcon, SunMoonIcon, TextField, Tooltip, Typography, cls, defaultBorderMixin, iconSize } from "@rebasepro/ui";
6
+ import { Avatar, Button, Card, CenteredView, ChevronDownIcon, ChevronsLeftIcon, ChevronsRightIcon, Chip, CircularProgressCenter, Collapse, Container, Dialog, DialogActions, DialogContent, DialogTitle, ErrorBoundary, ExpandablePanel, IconButton, LogOutIcon, Markdown, Menu, MenuIcon, MenuItem, MoonIcon, PencilIcon, SearchBar, SettingsIcon, Sheet, Skeleton, StarIcon, SunIcon, SunMoonIcon, TextField, Tooltip, Typography, cls, defaultBorderMixin, iconSize } from "@rebasepro/ui";
7
7
  import { buildRoutedRebaseData, getReferenceFrom, resolveDataSource } from "@rebasepro/common";
8
8
  import { CollectionResolverRegistrationContext, CollectionScopeProvider, CustomizationControllerContext, DEFAULT_API_PATH, ErrorView, IconForView, LanguageToggle, LoginView, NavigationBlockerProvider, NotFoundPage, RebaseDataContext, RebaseLogo, RebaseRoutes, SchemaDriftBanner, StudioBridgeRegistryProvider, UIReferenceView, UnsavedChangesDialog, UserSettingsView, buildCollapsedDefaults, getIcon, getLastSegment as getLastSegment$1, getNavigationEntriesFromPath, useAdminModeController, useAnalyticsController, useAuthController, useBridgeRegistration, useBuildLocalConfigurationPersistence, useCollapsedGroups, useComponentOverride, useCustomizationController, useData, useDataSources, useLargeLayout, useModeController, useNavigationBlocker, useRebaseClient, useRebaseContext, useRebaseRegistry, useRebaseRegistryDispatch, useRestoreScroll, useSlot, useTranslation, useUserConfigurationPersistence } from "@rebasepro/app";
9
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -86,7 +86,7 @@ function RebaseRoute() {
86
86
  if (!collection) collection = collectionRegistry.getCollection(navigationEntries[0].slug);
87
87
  if (!collection) {
88
88
  if (!collectionRegistry.initialised) return /* @__PURE__ */ jsx(CircularProgressCenter, {});
89
- return null;
89
+ return /* @__PURE__ */ jsx(UnresolvedCollectionView, { path: navigationEntries[0].slug });
90
90
  }
91
91
  return /* @__PURE__ */ jsx(ResolvedCollectionView, {
92
92
  ...collection,
@@ -105,7 +105,7 @@ function RebaseRoute() {
105
105
  if (!collection) collection = collectionRegistry.getCollection(firstEntry.slug);
106
106
  if (!collection) {
107
107
  if (!collectionRegistry.initialised) return /* @__PURE__ */ jsx(CircularProgressCenter, {});
108
- return null;
108
+ return /* @__PURE__ */ jsx(UnresolvedCollectionView, { path: firstEntry.slug });
109
109
  }
110
110
  return /* @__PURE__ */ jsx(ResolvedCollectionView, {
111
111
  ...collection,
@@ -178,6 +178,7 @@ function EntityFullScreenRoute({ pathname, navigationEntries, isNew, isCopy }) {
178
178
  const urlController = useUrlController();
179
179
  const navigate = useNavigate();
180
180
  const location = useLocation();
181
+ const userConfigPersistence = useUserConfigurationPersistence();
181
182
  const defaultValues = location.state?.defaultValues;
182
183
  const hash = location.hash;
183
184
  const navigationPath = urlController.urlPathToDataPath(pathname);
@@ -225,12 +226,26 @@ function EntityFullScreenRoute({ pathname, navigationEntries, isNew, isCopy }) {
225
226
  const fullIdPath = isNew ? lastCollectionEntry.slug : lastEntityEntry.slug;
226
227
  const collectionPath = urlController.resolveDatabasePathsFrom(fullIdPath);
227
228
  const isEditRoute = pathname.endsWith("/edit") || pathname.split("/").pop() === "edit";
228
- if (collection.defaultEntityAction === "view" && !isNew && !isCopy && entityId && !isEditRoute) return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(DetailViewBinding, {
229
+ const isDetailMode = collection.defaultEntityAction === "view" && !isNew && !isCopy && entityId && !isEditRoute;
230
+ const showList = !isNew && !isCopy && entityId !== void 0 && navigationEntries[0]?.type === "collection" && (navigationEntries.length === 2 || navigationEntries.length === 3) && resolveOpenEntityMode({
231
+ collection,
232
+ viewMode: resolveViewMode({
233
+ collection,
234
+ search: location.search,
235
+ savedViewMode: userConfigPersistence?.getCollectionConfig(collection.slug)?.defaultViewMode
236
+ })
237
+ }) === "split" ? () => navigate({
238
+ pathname,
239
+ search: location.search,
240
+ hash: ""
241
+ }) : void 0;
242
+ if (isDetailMode) return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(DetailViewBinding, {
229
243
  entityId,
230
244
  collection,
231
245
  layout: "full_screen",
232
246
  path: collectionPath,
233
247
  selectedTab: selectedTab ?? void 0,
248
+ onShowList: showList,
234
249
  onEditClick: () => {
235
250
  const editUrl = urlController.buildUrlCollectionPath(`${collectionPath}/${entityId}`) + "/edit";
236
251
  navigate(editUrl + hash);
@@ -251,6 +266,7 @@ function EntityFullScreenRoute({ pathname, navigationEntries, isNew, isCopy }) {
251
266
  path: collectionPath,
252
267
  copy: isCopy,
253
268
  selectedTab: selectedTab ?? void 0,
269
+ onShowList: showList,
254
270
  defaultValues: isNew ? defaultValues : void 0,
255
271
  onValuesModified: (modified) => blocked.current = modified,
256
272
  navigateBack: () => {
@@ -280,6 +296,29 @@ function EntityFullScreenRoute({ pathname, navigationEntries, isNew, isCopy }) {
280
296
  body: "You have unsaved changes in this entity."
281
297
  })] });
282
298
  }
299
+ /**
300
+ * Shown when a URL names a collection the registry cannot resolve.
301
+ *
302
+ * This used to be `return null`, which renders an empty pane inside the app
303
+ * chrome: the sidebar, the nav highlight and the breadcrumb all still work,
304
+ * because those read the collections array directly, while the view itself is
305
+ * blank. Nothing is thrown, and the only trace is a `console.debug` — so the
306
+ * panel looks like it lost its data rather than like it failed to find the
307
+ * collection, and there is no string to search for.
308
+ *
309
+ * A slug containing slashes went unresolvable this way and cost an afternoon to
310
+ * find. The lookup is fixed; this is the part that made it expensive.
311
+ */
312
+ function UnresolvedCollectionView({ path }) {
313
+ useEffect(() => {
314
+ console.warn(`[rebase] No collection is registered for "${path}", so this route has nothing to render. Check that the collection is in the collections array and that its slug matches the URL.`);
315
+ }, [path]);
316
+ return /* @__PURE__ */ jsx(CenteredView, { children: /* @__PURE__ */ jsx(ErrorView, {
317
+ title: "Collection not found",
318
+ error: `Nothing is registered for "${path}".`,
319
+ tooltip: "The URL names a collection the panel does not know about. It may have been renamed or removed from the collections array, or the slug may not match the path."
320
+ }) });
321
+ }
283
322
  //#endregion
284
323
  //#region src/components/ReferenceWidget.tsx
285
324
  /**
@@ -735,28 +774,33 @@ function AppBar({ children, ...props }) {
735
774
  AppBar.componentType = "AppBar";
736
775
  //#endregion
737
776
  //#region src/components/DrawerNavigationItem.tsx
738
- function DrawerNavigationItem({ name, icon, drawerOpen, adminMenuOpen, tooltipsOpen, url, onClick, indented = false }) {
777
+ function DrawerNavigationItem({ name, icon, drawerOpen, url, onClick, indented = false }) {
778
+ const iconWrap = indented ? /* @__PURE__ */ jsx("div", {
779
+ className: "shrink-0 w-[44px] h-[30px]",
780
+ "aria-hidden": true
781
+ }) : /* @__PURE__ */ jsx("div", {
782
+ className: "shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-text-secondary-dark [&>svg]:size-4 group-hover/nav:text-primary transition-colors duration-150",
783
+ children: icon
784
+ });
785
+ const [wantsTooltip, setWantsTooltip] = React.useState(false);
786
+ if (drawerOpen && wantsTooltip) setWantsTooltip(false);
739
787
  const listItem = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(NavLink, {
740
788
  onClick,
789
+ "aria-label": name,
741
790
  style: {
742
791
  width: "100%",
743
792
  transition: drawerOpen ? "width 150ms ease-in" : void 0
744
793
  },
745
794
  className: ({ isActive }) => cls("rounded-lg truncate group/nav", "hover:bg-primary/5 dark:hover:bg-primary/5 text-surface-700 dark:text-surface-300 hover:text-surface-900 dark:hover:text-white", "flex flex-row items-center", drawerOpen ? "pr-4 h-[30px]" : "h-[30px]", "font-medium text-[13px]", isActive ? "bg-primary/8 dark:bg-primary/10 text-primary dark:text-primary [&_div]:text-primary" : ""),
746
795
  to: url,
747
- children: [indented ? /* @__PURE__ */ jsx("div", {
748
- className: "shrink-0 w-[44px] h-[30px]",
749
- "aria-hidden": true
750
- }) : /* @__PURE__ */ jsx("div", {
751
- className: "shrink-0 flex items-center justify-center w-[44px] h-[30px] text-surface-500 dark:text-text-secondary-dark [&>svg]:size-4 group-hover/nav:text-primary transition-colors duration-150",
752
- children: icon
753
- }), /* @__PURE__ */ jsx("div", {
796
+ children: [iconWrap, /* @__PURE__ */ jsx("div", {
754
797
  className: cls("text-text-primary dark:text-surface-200", drawerOpen ? "opacity-100" : "opacity-0 hidden", "font-inherit truncate space-x-2"),
755
798
  children: name
756
799
  })]
757
800
  }) });
758
801
  return /* @__PURE__ */ jsx(Tooltip, {
759
- open: drawerOpen || adminMenuOpen ? false : tooltipsOpen,
802
+ open: !drawerOpen && wantsTooltip,
803
+ onOpenChange: setWantsTooltip,
760
804
  side: "right",
761
805
  title: name,
762
806
  children: listItem
@@ -768,12 +812,10 @@ function DrawerNavigationItem({ name, icon, drawerOpen, adminMenuOpen, tooltipsO
768
812
  * Shared drawer navigation group component used by both DefaultDrawer and RebaseCloudDrawer.
769
813
  * Renders a collapsible group with header and navigation items.
770
814
  */
771
- function DrawerNavigationGroup({ group, entries, collapsed, onToggleCollapsed, drawerOpen, tooltipsOpen, adminMenuOpen, headerActions, onItemClick, hideHeader, icon }) {
815
+ function DrawerNavigationGroup({ group, entries, collapsed, onToggleCollapsed, drawerOpen, headerActions, onItemClick, hideHeader, icon }) {
772
816
  const { t } = useTranslation();
773
817
  const ResolvedDrawerNavigationItem = useComponentOverride("Shell.DrawerNavigationItem", DrawerNavigationItem);
774
818
  const groupIcon = !hideHeader && drawerOpen ? getIcon(icon, void 0, void 0, "small") : void 0;
775
- const categorised = Boolean(groupIcon);
776
- const indentEntries = categorised;
777
819
  return /* @__PURE__ */ jsxs("div", {
778
820
  className: "my-2 mx-2 flex flex-col",
779
821
  children: [!hideHeader && /* @__PURE__ */ jsxs("div", {
@@ -782,7 +824,7 @@ function DrawerNavigationGroup({ group, entries, collapsed, onToggleCollapsed, d
782
824
  children: [
783
825
  /* @__PURE__ */ jsx(ChevronDownIcon, {
784
826
  size: iconSize.small,
785
- className: cls(categorised ? "text-surface-500 dark:text-surface-400" : "text-surface-400 dark:text-surface-400", "transition-transform duration-200 mr-1", collapsed ? "-rotate-90" : "rotate-0")
827
+ className: cls("text-surface-400 dark:text-surface-400 transition-transform duration-200 mr-1", collapsed ? "-rotate-90" : "rotate-0")
786
828
  }),
787
829
  groupIcon && /* @__PURE__ */ jsx("span", {
788
830
  className: "shrink-0 mr-2 flex items-center text-surface-600 dark:text-surface-300 [&>svg]:size-4",
@@ -791,7 +833,7 @@ function DrawerNavigationGroup({ group, entries, collapsed, onToggleCollapsed, d
791
833
  /* @__PURE__ */ jsx(Typography, {
792
834
  variant: "caption",
793
835
  color: "secondary",
794
- className: cls("font-semibold uppercase flex-grow line-clamp-1", categorised ? "text-[12px] tracking-wide text-surface-600 dark:text-surface-300" : "text-[11px] tracking-wider text-surface-400 dark:text-surface-400"),
836
+ className: "font-semibold text-[11px] uppercase tracking-wider flex-grow line-clamp-1 text-surface-400 dark:text-surface-400",
795
837
  children: group || t("views_group")
796
838
  }),
797
839
  headerActions && /* @__PURE__ */ jsx("div", {
@@ -806,13 +848,10 @@ function DrawerNavigationGroup({ group, entries, collapsed, onToggleCollapsed, d
806
848
  collectionOrView: entry.collection ?? entry.view,
807
849
  size: "small"
808
850
  }),
809
- tooltipsOpen: !collapsed && tooltipsOpen,
810
- adminMenuOpen,
811
851
  drawerOpen,
812
852
  onClick: () => onItemClick?.(entry),
813
853
  url: entry.url,
814
- name: entry.name,
815
- indented: indentEntries
854
+ name: entry.name
816
855
  }, entry.id))
817
856
  })]
818
857
  }, `drawer_group_${group}`);
@@ -881,11 +920,9 @@ function DefaultDrawer({ title, logo, logoDestination, children, footerActions,
881
920
  */
882
921
  function AdminNavigationContent() {
883
922
  const { drawerHovered, drawerOpen, closeDrawer, closeHover } = useApp();
884
- const [adminMenuOpen, setAdminMenuOpen] = React.useState(false);
885
923
  const analyticsController = useAnalyticsController();
886
924
  const navigationState = useNavigationStateController();
887
925
  const context = useRebaseContext();
888
- const tooltipsOpen = drawerHovered && !drawerOpen && !adminMenuOpen;
889
926
  const largeLayout = useLargeLayout();
890
927
  const adminModeController = useAdminModeController();
891
928
  const registry = useRebaseRegistry();
@@ -941,8 +978,6 @@ function AdminNavigationContent() {
941
978
  collapsed: isGroupCollapsed(group),
942
979
  onToggleCollapsed: () => toggleGroupCollapsed(group),
943
980
  drawerOpen: drawerVisuallyOpen,
944
- tooltipsOpen,
945
- adminMenuOpen,
946
981
  onItemClick,
947
982
  icon: groupIcons.get(group)
948
983
  }, `drawer_group_${group}`);
@@ -951,11 +986,14 @@ function AdminNavigationContent() {
951
986
  ] });
952
987
  }
953
988
  function DrawerLogo({ logo, title, logoDestination = "/", drawerOpen, drawerHovered }) {
989
+ const showFullContent = drawerOpen || drawerHovered;
990
+ const { t } = useTranslation();
954
991
  return /* @__PURE__ */ jsxs("div", {
955
992
  className: "flex flex-row items-center shrink-0 pt-4 pb-0 px-2",
956
993
  children: [/* @__PURE__ */ jsx(Link, {
957
994
  className: "shrink-0 flex items-center justify-center w-[56px] h-[40px]",
958
995
  to: logoDestination,
996
+ "aria-label": t("home") || "Home",
959
997
  children: logo ? /* @__PURE__ */ jsx("img", {
960
998
  src: logo,
961
999
  alt: "Logo",
@@ -965,7 +1003,7 @@ function DrawerLogo({ logo, title, logoDestination = "/", drawerOpen, drawerHove
965
1003
  height: "28px"
966
1004
  })
967
1005
  }), /* @__PURE__ */ jsx("div", {
968
- className: cls("flex flex-row items-center overflow-hidden transition-all duration-200 ease-in-out", drawerOpen || drawerHovered && !drawerOpen ? "opacity-100 w-full ml-1" : "opacity-0 w-0 ml-0"),
1006
+ className: cls("flex flex-row items-center overflow-hidden transition-all duration-200 ease-in-out", showFullContent ? "opacity-100 w-full ml-1" : "opacity-0 w-0 ml-0"),
969
1007
  children: title && /* @__PURE__ */ jsx(Link, {
970
1008
  className: "visited:text-inherit dark:visited:text-inherit block truncate",
971
1009
  to: logoDestination,
@@ -985,32 +1023,25 @@ function DrawerLogo({ logo, title, logoDestination = "/", drawerOpen, drawerHove
985
1023
  */
986
1024
  function DrawerToggle({ drawerOpen, drawerHovered, openDrawer, closeDrawer }) {
987
1025
  const isExpanded = drawerOpen;
988
- const isHovered = drawerHovered && !drawerOpen;
989
- const isFloating = isHovered;
990
- const showFullContent = isExpanded || isHovered;
1026
+ const showFullContent = isExpanded || drawerHovered && !drawerOpen;
1027
+ const [wantsTooltip, setWantsTooltip] = React.useState(false);
1028
+ if (showFullContent && wantsTooltip) setWantsTooltip(false);
991
1029
  const { t } = useTranslation();
992
1030
  return /* @__PURE__ */ jsx("div", {
993
1031
  className: "shrink-0 mt-auto px-4 pt-0.5 pb-2",
994
1032
  children: /* @__PURE__ */ jsx(Tooltip, {
995
1033
  title: isExpanded ? t("collapse") : t("expand"),
1034
+ open: !showFullContent && wantsTooltip,
1035
+ onOpenChange: setWantsTooltip,
996
1036
  side: "right",
997
1037
  sideOffset: 12,
998
1038
  asChild: true,
999
- open: isFloating ? false : void 0,
1000
- children: /* @__PURE__ */ jsxs("div", {
1001
- className: cls("flex flex-row items-center rounded-lg cursor-pointer", "hover:bg-surface-accent-100 dark:hover:bg-surface-800", "transition-colors duration-150", "py-2"),
1002
- role: "button",
1003
- tabIndex: 0,
1039
+ children: /* @__PURE__ */ jsxs("button", {
1040
+ type: "button",
1041
+ className: cls("flex flex-row items-center rounded-lg cursor-pointer w-full", "hover:bg-surface-accent-100 dark:hover:bg-surface-800", "transition-colors duration-150", "py-2"),
1004
1042
  "aria-expanded": isExpanded,
1005
1043
  "aria-label": isExpanded ? t("collapse") : t("expand"),
1006
1044
  onClick: () => isExpanded ? closeDrawer() : openDrawer(),
1007
- onKeyDown: (e) => {
1008
- if (e.key === "Enter" || e.key === " ") {
1009
- e.preventDefault();
1010
- if (isExpanded) closeDrawer();
1011
- else openDrawer();
1012
- }
1013
- },
1014
1045
  children: [/* @__PURE__ */ jsx("div", {
1015
1046
  className: "shrink-0 flex items-center justify-center w-[44px] h-[24px] text-surface-500 dark:text-surface-400",
1016
1047
  children: isExpanded ? /* @__PURE__ */ jsx(ChevronsLeftIcon, { size: iconSize.small }) : /* @__PURE__ */ jsx(ChevronsRightIcon, { size: iconSize.small })
@@ -1189,6 +1220,29 @@ function Drawer({ children, title, logo, logoDestination, footerActions, classNa
1189
1220
  }
1190
1221
  Drawer.componentType = "Drawer";
1191
1222
  /**
1223
+ * Namespaced by base path: two admins served from one origin are two different
1224
+ * navigations, and a single key would have them overwrite each other's drawer.
1225
+ */
1226
+ function drawerOpenStorageKey(basePath) {
1227
+ return `rebase-drawer-open:${basePath || "/"}`;
1228
+ }
1229
+ /** `null` when the user has never toggled the drawer, or storage is unavailable. */
1230
+ function readStoredDrawerOpen(key) {
1231
+ if (typeof window === "undefined") return null;
1232
+ try {
1233
+ const stored = window.localStorage.getItem(key);
1234
+ return stored === null ? null : stored === "true";
1235
+ } catch (e) {
1236
+ return null;
1237
+ }
1238
+ }
1239
+ function writeStoredDrawerOpen(key, open) {
1240
+ if (typeof window === "undefined") return;
1241
+ try {
1242
+ window.localStorage.setItem(key, String(open));
1243
+ } catch (e) {}
1244
+ }
1245
+ /**
1192
1246
  * This view acts as a scaffold for Rebase.
1193
1247
  *
1194
1248
  * It is in charge of displaying the navigation drawer, top bar and main
@@ -1200,7 +1254,7 @@ Drawer.componentType = "Drawer";
1200
1254
  * @group Core
1201
1255
  */
1202
1256
  var Scaffold = React.memo(function Scaffold(props) {
1203
- const { children, autoOpenDrawer, defaultDrawerOpen = false, logo, className, style, padding = true } = props;
1257
+ const { children, autoOpenDrawer = true, defaultDrawerOpen = false, logo, className, style, padding = true } = props;
1204
1258
  const drawerChildren = React.Children.toArray(children).filter((child) => child.type.componentType === "Drawer");
1205
1259
  if (drawerChildren.length > 1) throw Error("Only one Drawer component is allowed in Scaffold");
1206
1260
  const appBarChildren = React.Children.toArray(children).filter((child) => child.type.componentType === "AppBar");
@@ -1208,19 +1262,64 @@ var Scaffold = React.memo(function Scaffold(props) {
1208
1262
  const otherChildren = React.Children.toArray(children).filter((child) => child.type.componentType !== "Drawer" && child.type.componentType !== "AppBar");
1209
1263
  const includeDrawer = drawerChildren.length > 0;
1210
1264
  const largeLayout = useLargeLayout();
1211
- const [drawerOpen, setDrawerOpen] = React.useState(defaultDrawerOpen && largeLayout);
1265
+ const storageKey = drawerOpenStorageKey(useUrlController().basePath);
1266
+ const [drawerOpen, setDrawerOpenState] = React.useState(defaultDrawerOpen && largeLayout);
1212
1267
  const [onHover, setOnHover] = React.useState(false);
1213
- const setOnHoverTrue = useCallback(() => setOnHover(true), []);
1268
+ React.useLayoutEffect(() => {
1269
+ const stored = readStoredDrawerOpen(storageKey);
1270
+ if (stored === null) return;
1271
+ setDrawerOpenState(stored && largeLayout);
1272
+ }, [storageKey]);
1273
+ const wasLargeLayout = React.useRef(largeLayout);
1274
+ React.useEffect(() => {
1275
+ if (wasLargeLayout.current === largeLayout) return;
1276
+ wasLargeLayout.current = largeLayout;
1277
+ setDrawerOpenState(largeLayout ? readStoredDrawerOpen(storageKey) ?? defaultDrawerOpen : false);
1278
+ }, [
1279
+ largeLayout,
1280
+ defaultDrawerOpen,
1281
+ storageKey
1282
+ ]);
1283
+ const setDrawerOpen = useCallback((open) => {
1284
+ setDrawerOpenState(open);
1285
+ if (!largeLayout) return;
1286
+ writeStoredDrawerOpen(storageKey, open);
1287
+ }, [largeLayout, storageKey]);
1288
+ const collapseWhenPopoverCloses = React.useRef(false);
1289
+ const setOnHoverTrue = useCallback(() => {
1290
+ if (!autoOpenDrawer) return;
1291
+ collapseWhenPopoverCloses.current = false;
1292
+ setOnHover(true);
1293
+ }, [autoOpenDrawer]);
1214
1294
  const setOnHoverFalse = useCallback(() => {
1215
- if (document.querySelector("[data-radix-popper-content-wrapper]")) return;
1295
+ if (document.querySelector("[data-radix-popper-content-wrapper]")) {
1296
+ collapseWhenPopoverCloses.current = true;
1297
+ return;
1298
+ }
1299
+ collapseWhenPopoverCloses.current = false;
1216
1300
  setOnHover(false);
1217
1301
  }, []);
1302
+ React.useEffect(() => {
1303
+ if (!onHover) return;
1304
+ const collapseIfOwed = () => {
1305
+ if (!collapseWhenPopoverCloses.current) return;
1306
+ if (document.querySelector("[data-radix-popper-content-wrapper]")) return;
1307
+ collapseWhenPopoverCloses.current = false;
1308
+ setOnHover(false);
1309
+ };
1310
+ const observer = new MutationObserver(collapseIfOwed);
1311
+ observer.observe(document.body, {
1312
+ childList: true,
1313
+ subtree: true
1314
+ });
1315
+ return () => observer.disconnect();
1316
+ }, [onHover]);
1218
1317
  const handleDrawerOpen = useCallback(() => {
1219
1318
  setDrawerOpen(true);
1220
- }, []);
1319
+ }, [setDrawerOpen]);
1221
1320
  const handleDrawerClose = useCallback(() => {
1222
1321
  setDrawerOpen(false);
1223
- }, []);
1322
+ }, [setDrawerOpen]);
1224
1323
  const computedDrawerOpen = drawerOpen;
1225
1324
  const computedDrawerHovered = Boolean(largeLayout && onHover);
1226
1325
  const isStudioDark = useAdminModeController().mode === "studio";
@@ -1526,7 +1625,8 @@ function useLocalCollectionsConfigController(clientOrUrl, baseCollections = [],
1526
1625
  });
1527
1626
  if (newPropertiesOrder) await request("/collection/save", {
1528
1627
  collectionId: path,
1529
- collectionData: { propertiesOrder: newPropertiesOrder }
1628
+ collectionData: { propertiesOrder: newPropertiesOrder },
1629
+ partial: true
1530
1630
  });
1531
1631
  },
1532
1632
  deleteProperty: async ({ path, propertyKey, newPropertiesOrder }) => {
@@ -1536,14 +1636,16 @@ function useLocalCollectionsConfigController(clientOrUrl, baseCollections = [],
1536
1636
  });
1537
1637
  if (newPropertiesOrder) await request("/collection/save", {
1538
1638
  collectionId: path,
1539
- collectionData: { propertiesOrder: newPropertiesOrder }
1639
+ collectionData: { propertiesOrder: newPropertiesOrder },
1640
+ partial: true
1540
1641
  });
1541
1642
  },
1542
1643
  updatePropertiesOrder: async ({ collection, fullPath, newPropertiesOrder }) => {
1543
1644
  const collectionId = collection.id || fullPath.split("/").pop();
1544
1645
  await request("/collection/save", {
1545
1646
  collectionId,
1546
- collectionData: { propertiesOrder: newPropertiesOrder }
1647
+ collectionData: { propertiesOrder: newPropertiesOrder },
1648
+ partial: true
1547
1649
  });
1548
1650
  },
1549
1651
  updateKanbanColumnsOrder: async () => {},
@@ -1561,7 +1663,7 @@ function useLocalCollectionsConfigController(clientOrUrl, baseCollections = [],
1561
1663
  //#region src/components/RebaseNavigation.tsx
1562
1664
  var EMPTY_PLUGINS = [];
1563
1665
  var EMPTY_COLLECTIONS = [];
1564
- var CollectionsStudioView = lazy(() => import("./RouterCollectionsStudioView-BsLTNoqX.js").then((n) => n.n).then((m) => ({ default: m.RouterCollectionsStudioView })));
1666
+ var CollectionsStudioView = lazy(() => import("./RouterCollectionsStudioView-CwTpdzWF.js").then((n) => n.n).then((m) => ({ default: m.RouterCollectionsStudioView })));
1565
1667
  /**
1566
1668
  * Navigation layer — builds and provides all admin navigation controllers:
1567
1669
  * collection registry, URL controller, navigation state, side entity,
@@ -1764,7 +1866,7 @@ function BridgeAutoRegistrar({ collectionRegistryController, urlController, navi
1764
1866
  * ```
1765
1867
  */
1766
1868
  function RebaseLayout(props) {
1767
- const { title = "Rebase", appBar, drawer, autoOpenDrawer = false, defaultDrawerOpen = false, logo, devViews = [] } = props;
1869
+ const { title = "Rebase", appBar, drawer, autoOpenDrawer = true, defaultDrawerOpen = false, logo, devViews = [] } = props;
1768
1870
  const adminModeController = useAdminModeController();
1769
1871
  const ResolvedDrawer = useComponentOverride("Shell.Drawer", Drawer);
1770
1872
  const ActiveDrawer = drawer ?? /* @__PURE__ */ jsx(ResolvedDrawer, {
@@ -2790,8 +2892,8 @@ function ContentHomePage({ additionalActions, additionalChildrenStart, additiona
2790
2892
  }
2791
2893
  //#endregion
2792
2894
  //#region src/components/CollectionEditorDialogs.tsx
2793
- var CollectionEditorDialog = lazy(() => import("./CollectionEditorDialog-CjXkWZ64.js").then((n) => n.r).then((m) => ({ default: m.CollectionEditorDialog })));
2794
- var PropertyFormDialog = lazy(() => import("./PropertyEditView-W8I3YV89.js").then((n) => n.t).then((m) => ({ default: m.PropertyFormDialog })));
2895
+ var CollectionEditorDialog = lazy(() => import("./CollectionEditorDialog-CSheud_E.js").then((n) => n.r).then((m) => ({ default: m.CollectionEditorDialog })));
2896
+ var PropertyFormDialog = lazy(() => import("./PropertyEditView-CWZlC1gq.js").then((n) => n.t).then((m) => ({ default: m.PropertyFormDialog })));
2795
2897
  /**
2796
2898
  * Renders the CollectionEditorDialog and PropertyFormDialog inside
2797
2899
  * the RebaseShell tree where admin-internal contexts
@@ -2938,7 +3040,7 @@ function RebaseRouteDefs({ children, layout }) {
2938
3040
  * RebaseShell is sugar that composes them all with sensible defaults.
2939
3041
  */
2940
3042
  function RebaseShell(props) {
2941
- const { title = "Rebase", appBar, drawer, autoOpenDrawer = false, defaultDrawerOpen = false, logo, children } = props;
3043
+ const { title = "Rebase", appBar, drawer, autoOpenDrawer = true, defaultDrawerOpen = false, logo, children } = props;
2942
3044
  const registry = useRebaseRegistry();
2943
3045
  return /* @__PURE__ */ jsx(RebaseAuthGate, { children: /* @__PURE__ */ jsx(RebaseNavigation, { children: /* @__PURE__ */ jsx(ErrorBoundary, {
2944
3046
  fullPage: true,
@@ -3211,6 +3313,23 @@ function useJsonCollectionsConfigController({ store, readOnly = false, autoLoad
3211
3313
  const [navigationEntries, setNavigationEntries] = useState([]);
3212
3314
  const storeRef = useRef(store);
3213
3315
  storeRef.current = store;
3316
+ /**
3317
+ * The current collections, readable outside a state updater.
3318
+ *
3319
+ * Three mutators used to compute their new value inside
3320
+ * `setCollections(prev => …)` and persist from in there, which cost them
3321
+ * both halves of a save: the promise they returned resolved before the
3322
+ * store had answered, so a failed write reached the caller as a success,
3323
+ * and a `setState` updater must be pure — under `StrictMode` React invokes
3324
+ * it twice, so every one of those saves wrote to the store twice in
3325
+ * development. Reading `prev` from a ref lets them do what
3326
+ * `updatePropertiesOrder` already did: compute, set, then await.
3327
+ */
3328
+ const collectionsRef = useRef([]);
3329
+ const applyCollections = useCallback((next) => {
3330
+ collectionsRef.current = next;
3331
+ setCollections(next);
3332
+ }, []);
3214
3333
  useEffect(() => {
3215
3334
  if (!autoLoad) return;
3216
3335
  let cancelled = false;
@@ -3218,7 +3337,7 @@ function useJsonCollectionsConfigController({ store, readOnly = false, autoLoad
3218
3337
  try {
3219
3338
  const [serialized, navEntries] = await Promise.all([storeRef.current.load(), storeRef.current.loadNavigationEntries?.() ?? Promise.resolve([])]);
3220
3339
  if (cancelled) return;
3221
- setCollections(fromSerializableCollectionConfigs(serialized));
3340
+ applyCollections(fromSerializableCollectionConfigs(serialized));
3222
3341
  setNavigationEntries(navEntries);
3223
3342
  } catch (e) {
3224
3343
  console.error("useJsonCollectionsConfigController: failed to load collections", e);
@@ -3229,7 +3348,7 @@ function useJsonCollectionsConfigController({ store, readOnly = false, autoLoad
3229
3348
  return () => {
3230
3349
  cancelled = true;
3231
3350
  };
3232
- }, [autoLoad]);
3351
+ }, [autoLoad, applyCollections]);
3233
3352
  /**
3234
3353
  * Update local state and persist a collection to the store.
3235
3354
  */
@@ -3248,80 +3367,75 @@ function useJsonCollectionsConfigController({ store, readOnly = false, autoLoad
3248
3367
  const saveCollection = useCallback(async ({ id, collectionData }) => {
3249
3368
  const collection = collectionData;
3250
3369
  await persistCollection(collection);
3251
- setCollections((prev) => {
3252
- const idx = prev.findIndex((c) => c.slug === id);
3253
- if (idx >= 0) {
3254
- const next = [...prev];
3255
- next[idx] = collection;
3256
- return next;
3257
- }
3258
- return [...prev, collection];
3259
- });
3260
- }, [persistCollection]);
3261
- const updateCollection = useCallback(async ({ id, collectionData, previousId }) => {
3262
- setCollections((prev) => {
3263
- const lookupId = previousId ?? id;
3264
- const idx = prev.findIndex((c) => c.slug === lookupId);
3265
- if (idx < 0) return prev;
3266
- const merged = {
3267
- ...prev[idx],
3268
- ...collectionData
3269
- };
3370
+ const prev = collectionsRef.current;
3371
+ const idx = prev.findIndex((c) => c.slug === id);
3372
+ if (idx >= 0) {
3270
3373
  const next = [...prev];
3271
- next[idx] = merged;
3272
- persistCollection(merged).catch((e) => console.error("useJsonCollectionsConfigController: failed to update collection", e));
3273
- if (previousId && previousId !== id) storeRef.current.delete(previousId).catch((e) => console.error("useJsonCollectionsConfigController: failed to delete old slug", e));
3274
- return next;
3275
- });
3276
- }, [persistCollection]);
3374
+ next[idx] = collection;
3375
+ applyCollections(next);
3376
+ } else applyCollections([...prev, collection]);
3377
+ }, [persistCollection, applyCollections]);
3378
+ const updateCollection = useCallback(async ({ id, collectionData, previousId }) => {
3379
+ const prev = collectionsRef.current;
3380
+ const lookupId = previousId ?? id;
3381
+ const idx = prev.findIndex((c) => c.slug === lookupId);
3382
+ if (idx < 0) return;
3383
+ const merged = {
3384
+ ...prev[idx],
3385
+ ...collectionData
3386
+ };
3387
+ const next = [...prev];
3388
+ next[idx] = merged;
3389
+ applyCollections(next);
3390
+ await persistCollection(merged);
3391
+ if (previousId && previousId !== id) await storeRef.current.delete(previousId);
3392
+ }, [persistCollection, applyCollections]);
3277
3393
  const deleteCollection = useCallback(async ({ id }) => {
3278
3394
  await storeRef.current.delete(id);
3279
- setCollections((prev) => prev.filter((c) => c.slug !== id));
3280
- }, []);
3395
+ applyCollections(collectionsRef.current.filter((c) => c.slug !== id));
3396
+ }, [applyCollections]);
3281
3397
  const saveProperty = useCallback(async ({ path, propertyKey, property, newPropertiesOrder }) => {
3282
- setCollections((prev) => {
3283
- const idx = prev.findIndex((c) => c.slug === path);
3284
- if (idx < 0) return prev;
3285
- const collection = { ...prev[idx] };
3286
- collection.properties = {
3287
- ...collection.properties,
3288
- [propertyKey]: property
3289
- };
3290
- if (newPropertiesOrder) collection.propertiesOrder = newPropertiesOrder;
3291
- const next = [...prev];
3292
- next[idx] = collection;
3293
- persistCollection(next[idx]).catch((e) => console.error("useJsonCollectionsConfigController: failed to save property", e));
3294
- return next;
3295
- });
3296
- }, [persistCollection]);
3398
+ const prev = collectionsRef.current;
3399
+ const idx = prev.findIndex((c) => c.slug === path);
3400
+ if (idx < 0) return;
3401
+ const collection = { ...prev[idx] };
3402
+ collection.properties = {
3403
+ ...collection.properties,
3404
+ [propertyKey]: property
3405
+ };
3406
+ if (newPropertiesOrder) collection.propertiesOrder = newPropertiesOrder;
3407
+ const next = [...prev];
3408
+ next[idx] = collection;
3409
+ applyCollections(next);
3410
+ await persistCollection(next[idx]);
3411
+ }, [persistCollection, applyCollections]);
3297
3412
  const deleteProperty = useCallback(async ({ path, propertyKey, newPropertiesOrder }) => {
3298
- setCollections((prev) => {
3299
- const idx = prev.findIndex((c) => c.slug === path);
3300
- if (idx < 0) return prev;
3301
- const collection = { ...prev[idx] };
3302
- const { [propertyKey]: _removed, ...remaining } = collection.properties;
3303
- collection.properties = remaining;
3304
- if (newPropertiesOrder) collection.propertiesOrder = newPropertiesOrder;
3305
- const next = [...prev];
3306
- next[idx] = collection;
3307
- persistCollection(next[idx]).catch((e) => console.error("useJsonCollectionsConfigController: failed to delete property", e));
3308
- return next;
3309
- });
3310
- }, [persistCollection]);
3413
+ const prev = collectionsRef.current;
3414
+ const idx = prev.findIndex((c) => c.slug === path);
3415
+ if (idx < 0) return;
3416
+ const collection = { ...prev[idx] };
3417
+ const { [propertyKey]: _removed, ...remaining } = collection.properties;
3418
+ collection.properties = remaining;
3419
+ if (newPropertiesOrder) collection.propertiesOrder = newPropertiesOrder;
3420
+ const next = [...prev];
3421
+ next[idx] = collection;
3422
+ applyCollections(next);
3423
+ await persistCollection(next[idx]);
3424
+ }, [persistCollection, applyCollections]);
3311
3425
  const updatePropertiesOrder = useCallback(async ({ collection, newPropertiesOrder }) => {
3312
3426
  const updated = {
3313
3427
  ...collection,
3314
3428
  propertiesOrder: newPropertiesOrder
3315
3429
  };
3316
- setCollections((prev) => {
3317
- const idx = prev.findIndex((c) => c.slug === collection.slug);
3318
- if (idx < 0) return prev;
3430
+ const prev = collectionsRef.current;
3431
+ const idx = prev.findIndex((c) => c.slug === collection.slug);
3432
+ if (idx >= 0) {
3319
3433
  const next = [...prev];
3320
3434
  next[idx] = updated;
3321
- return next;
3322
- });
3435
+ applyCollections(next);
3436
+ }
3323
3437
  await persistCollection(updated);
3324
- }, [persistCollection]);
3438
+ }, [persistCollection, applyCollections]);
3325
3439
  const updateKanbanColumnsOrder = useCallback(async ({ collection, kanbanColumnProperty, newColumnsOrder }) => {}, []);
3326
3440
  const saveNavigationEntriesHandler = useCallback(async (entries) => {
3327
3441
  setNavigationEntries(entries);
@@ -3389,6 +3503,6 @@ function MissingReferenceWidget({ path: pathProp }) {
3389
3503
  });
3390
3504
  }
3391
3505
  //#endregion
3392
- export { AdminModeSyncer, AppBar, ArrayContainer, ArrayCustomShapedFieldBinding, ArrayEnumPreview, ArrayOfMapsPreview, ArrayOfReferencesFieldBinding, ArrayOfReferencesPreview, ArrayOfStorageComponentsPreview, ArrayOfStringsPreview, ArrayOneOfPreview, ArrayPropertyEnumPreview, ArrayPropertyPreview, BasicExportAction, BlockFieldBinding, BooleanPreview, CollectionCardViewBinding, CollectionGenerationApiError, CollectionPanel, CollectionRegistryContext, CollectionRowActions, CollectionTableBinding, CollectionViewActions, CollectionViewBinding, CreationResultDialog, CustomViewRoute, DEFAULT_COLLECTION_GENERATION_ENDPOINT, DEFAULT_FIELD_CONFIGS, DataNewPropertiesMapping, DatePreview, DateTimeFieldBinding, DefaultDrawer, Drawer, DrawerFooterActions, EmptyValue, EntityCardBinding, EntityForm, EntityFormBinding, EntityPreviewBinding, EntityViewBinding, EnumValuesChip, ExportCollectionAction, FieldBlock, FieldCaption, FieldHelperText, FormRail, FormSections, ImagePreview, ImportCollectionAction, ImportDataPreview, ImportFileUpload, ImportNewPropertyFieldPreview, ImportSaveInProgress, InlineEntityListPreview, KeyValueFieldBinding, KeyValuePreview, LabelWithIcon, LabelWithIconAndTooltip, MapFieldBinding, MapPropertyPreview, MarkdownEditorFieldBinding, MissingReferenceWidget, MultiSelectFieldBinding, NavigationStateContext, NumberPropertyPreview, PropertyConfigBadge, PropertyFieldBinding, PropertyIdCopyTooltip, PropertyPreview, PropertySelectEntry, ReadOnlyFieldBinding, RebaseAdmin, RebaseAuthGate, RebaseLayout, RebaseNavigation, RebaseRoute, RebaseRouteDefs, RebaseShell, ReferenceFieldBinding, ReferencePreview, ReferenceWidget, RelationPreview, RepeatFieldBinding, Scaffold, SearchIconsView, SelectFieldBinding, SelectableTable, SelectableTableContext, SelectionTableBinding, SideDialogs, SidePanelControllerContext, SidePanelProvider, SkeletonPropertyComponent, StorageThumbnail, StorageThumbnailInternal, StorageUploadFieldBinding, StringPropertyPreview, SwitchFieldBinding, TextFieldBinding, UrlComponentPreview, UrlContext, UserPreview, VectorFieldBinding, VirtualTableInput, addInitialSlash, buildCollectionGenerationCallback, buildSidePanelsFromUrl, convertDataToEntity, convertFileToJson, copyEntityAction, createStaticDataController, deleteEntityAction, downloadBlob, downloadDataAsCsv, downloadEntitiesExport, editEntityAction, extractTouchedValues, flattenEntry, fromSerializableCollectionConfig, fromSerializableCollectionConfigs, fromSerializableProperties, fromSerializableProperty, getBracketNotation, getChanges, getCollectionBySlugWithin, getCollectionPathsCombinations, getDefaultFieldConfig, getDefaultFieldId, getDefaultPropertiesOrder, getEntityCSVExportableData, getEntityJsonExportableData, getEntityPreviewKeys, getEntityTitlePropertyKey, getEntityTitlePropertyKeyForEntity, getEntityViewWidth, getFieldConfig, getFieldId, getFullId, getFullIdPath, getIconForProperty, getIconForWidget, getInferenceType, getInitialEntityValues, getLastSegment, getPropertiesWithPropertiesOrder, getPropertyInPath, getResolvedPropertyInPath, getUserLabel, idToPropertiesPath, isReferenceProperty, isRelationProperty, isSelfLabellingProperty, mapPropertiesToConfigs, mapPropertyToConfig, mergeEntityActions, namespaceToPropertiesOrderPath, namespaceToPropertiesPath, processValueMapping, removeEmptyContainers, removeInitialAndTrailingSlashes, removeInitialSlash, removeTrailingSlash, renderSkeletonCaptionText, renderSkeletonIcon, renderSkeletonImageThumbnail, renderSkeletonText, resetPasswordAction, resolveCollectionPathIds, resolveEntityAction, resolveEntityView, resolveNavigationFrom, sanitizeUrl, toSerializableCollectionConfig, toSerializableProperties, toSerializableProperty, unflattenObject, useAdminContext, useApp, useBreadcrumbsController, useBuildCollectionRegistryController, useBuildNavigationStateController, useBuildSidePanel, useBuildUrlController, useClearRestoreValue, useCollectionDataController, useCollectionEditorController, useCollectionRegistryController, useCollectionsConfigController, useHistory, useImportConfig, useJsonCollectionsConfigController, useLocalCollectionsConfigController, useNavigationStateController, useResolvedCollections, useResolvedNavigationFrom, useResolvedUser, useResolvedViews, useSelectionController, useSelectionDialog, useSideDialogsController, useSidePanel, useTopLevelNavigation, useUrlController, validateCollectionJson, zodToFormErrors };
3506
+ export { AdminModeSyncer, AppBar, ArrayContainer, ArrayCustomShapedFieldBinding, ArrayEnumPreview, ArrayOfMapsPreview, ArrayOfReferencesFieldBinding, ArrayOfReferencesPreview, ArrayOfStorageComponentsPreview, ArrayOfStringsPreview, ArrayOneOfPreview, ArrayPropertyEnumPreview, ArrayPropertyPreview, BasicExportAction, BlockFieldBinding, BooleanPreview, CollectionCardViewBinding, CollectionGenerationApiError, CollectionPanel, CollectionRegistryContext, CollectionRowActions, CollectionTableBinding, CollectionViewActions, CollectionViewBinding, CreationResultDialog, CustomViewRoute, DEFAULT_COLLECTION_GENERATION_ENDPOINT, DEFAULT_FIELD_CONFIGS, DataNewPropertiesMapping, DatePreview, DateTimeFieldBinding, DefaultDrawer, Drawer, DrawerFooterActions, DrawerNavigationGroup, DrawerNavigationItem, EXPORT_PAGE_SIZE, EmptyValue, EntityCardBinding, EntityForm, EntityFormBinding, EntityPreviewBinding, EntityViewBinding, EnumValuesChip, ExportCollectionAction, FieldBlock, FieldCaption, FieldHelperText, FormRail, FormSections, IMPORT_BATCH_SIZE, ImagePreview, ImportCollectionAction, ImportDataPreview, ImportFileUpload, ImportNewPropertyFieldPreview, ImportSaveInProgress, InlineEntityListPreview, KeyValueFieldBinding, KeyValuePreview, LABEL_ICON_SIZE, LabelWithIcon, LabelWithIconAndTooltip, MAX_EXPORT_ROWS, MapFieldBinding, MapPropertyPreview, MarkdownEditorFieldBinding, MissingReferenceWidget, MultiSelectFieldBinding, NavigationStateContext, NumberPropertyPreview, PropertyConfigBadge, PropertyFieldBinding, PropertyIdCopyTooltip, PropertyPreview, PropertySelectEntry, ReadOnlyFieldBinding, RebaseAdmin, RebaseAuthGate, RebaseLayout, RebaseNavigation, RebaseRoute, RebaseRouteDefs, RebaseShell, RecordMeta, ReferenceFieldBinding, ReferencePreview, ReferenceWidget, RelationPreview, RepeatFieldBinding, Scaffold, SearchIconsView, SelectFieldBinding, SelectableTable, SelectableTableContext, SelectionTableBinding, SideDialogs, SidePanelControllerContext, SidePanelProvider, SkeletonPropertyComponent, StorageThumbnail, StorageThumbnailInternal, StorageUploadFieldBinding, StringPropertyPreview, SwitchFieldBinding, TextFieldBinding, UrlComponentPreview, UrlContext, UserPreview, VectorFieldBinding, VirtualTableInput, addInitialSlash, buildCollectionGenerationCallback, buildSidePanelsFromUrl, convertDataToEntity, convertFileToJson, copyEntityAction, createStaticDataController, deleteEntityAction, detectCsvDelimiter, downloadBlob, downloadDataAsCsv, downloadEntitiesExport, editEntityAction, entryToCSVRow, escapeCsvFormula, extractTouchedValues, fetchAllEntitiesForExport, flattenEntry, fromSerializableCollectionConfig, fromSerializableCollectionConfigs, fromSerializableProperties, fromSerializableProperty, getBracketNotation, getChanges, getCollectionBySlugWithin, getCollectionPathsCombinations, getDefaultFieldConfig, getDefaultFieldId, getDefaultPropertiesOrder, getEntityCSVExportableData, getEntityJsonExportableData, getEntityPreviewKeys, getEntityTitlePropertyKey, getEntityTitlePropertyKeyForEntity, getEntityViewWidth, getFieldConfig, getFieldId, getFullId, getFullIdPath, getIconForProperty, getIconForWidget, getInferenceType, getInitialEntityValues, getLastSegment, getPropertiesWithPropertiesOrder, getPropertyInPath, getResolvedPropertyInPath, getUserLabel, idToPropertiesPath, isReferenceProperty, isRelationProperty, isSelfLabellingProperty, mapPropertiesToConfigs, mapPropertyToConfig, mergeEntityActions, namespaceToPropertiesOrderPath, namespaceToPropertiesPath, parseCsvRows, parseCsvToObjects, processValueMapping, removeEmptyContainers, removeInitialAndTrailingSlashes, removeInitialSlash, removeTrailingSlash, renderSkeletonCaptionText, renderSkeletonIcon, renderSkeletonImageThumbnail, renderSkeletonText, resetPasswordAction, resolveCollectionPathIds, resolveEntityAction, resolveEntityView, resolveNavigationFrom, sanitizeUrl, saveImportedEntities, spanClass, toSerializableCollectionConfig, toSerializableProperties, toSerializableProperty, unflattenObject, useAdminContext, useApp, useBreadcrumbsController, useBuildCollectionRegistryController, useBuildNavigationStateController, useBuildSidePanel, useBuildUrlController, useClearRestoreValue, useCollectionDataController, useCollectionEditorController, useCollectionRegistryController, useCollectionsConfigController, useHistory, useImportConfig, useJsonCollectionsConfigController, useLocalCollectionsConfigController, useNavigationStateController, useResolvedCollections, useResolvedNavigationFrom, useResolvedUser, useResolvedViews, useSelectionController, useSelectionDialog, useSideDialogsController, useSidePanel, useTopLevelNavigation, useUrlController, validateCollectionJson, zodToFormErrors };
3393
3507
 
3394
3508
  //# sourceMappingURL=index.js.map