@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.
- package/dist/{CollectionEditorDialog-CjXkWZ64.js → CollectionEditorDialog-CSheud_E.js} +19 -9
- package/dist/CollectionEditorDialog-CSheud_E.js.map +1 -0
- package/dist/{PropertyEditView-W8I3YV89.js → PropertyEditView-CWZlC1gq.js} +5 -5
- package/dist/PropertyEditView-CWZlC1gq.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-BsLTNoqX.js → RouterCollectionsStudioView-CwTpdzWF.js} +9 -13
- package/dist/RouterCollectionsStudioView-CwTpdzWF.js.map +1 -0
- package/dist/collection_editor/serializable_types.d.ts +1 -0
- package/dist/collection_editor_ui.js +4 -4
- package/dist/components/AdditionalFieldValue.d.ts +25 -0
- package/dist/components/ClearFilterSortButton.d.ts +7 -1
- package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +16 -0
- package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +3 -1
- package/dist/components/CollectionViewBinding/SearchExplanation.d.ts +48 -0
- package/dist/components/CollectionViewBinding/SearchHighlight.d.ts +101 -0
- package/dist/components/CollectionViewBinding/SlotValue.d.ts +63 -0
- package/dist/components/CollectionViewBinding/SortButton.d.ts +7 -1
- package/dist/components/CollectionViewBinding/SplitListCloseButton.d.ts +17 -4
- package/dist/components/CollectionViewBinding/SplitListShowButton.d.ts +12 -0
- package/dist/components/CollectionViewBinding/usePreviewSlots.d.ts +55 -5
- package/dist/components/DetailViewBinding.d.ts +15 -0
- package/dist/components/DrawerNavigationGroup.d.ts +9 -6
- package/dist/components/DrawerNavigationItem.d.ts +16 -6
- package/dist/components/EditViewBinding.d.ts +30 -1
- package/dist/components/EntityDisplayHeader.d.ts +53 -0
- package/dist/components/EntityIdentityBar.d.ts +43 -1
- package/dist/components/EntityViewBinding.d.ts +60 -6
- package/dist/components/RebaseLayout.d.ts +1 -1
- package/dist/components/RebaseShell.d.ts +1 -1
- package/dist/components/RelationSelector.d.ts +21 -1
- package/dist/components/UserSelector.d.ts +8 -1
- package/dist/components/app/Scaffold.d.ts +9 -3
- package/dist/components/index.d.ts +2 -0
- package/dist/data_export/export/export.d.ts +7 -0
- package/dist/data_export/export/fetch_export_data.d.ts +48 -0
- package/dist/data_export/export/index.d.ts +1 -0
- package/dist/data_import/utils/csv.d.ts +30 -0
- package/dist/data_import/utils/index.d.ts +2 -0
- package/dist/data_import/utils/save_entities.d.ts +38 -0
- package/dist/data_import/utils/transforms.d.ts +9 -0
- package/dist/editor.js +3 -0
- package/dist/editor.js.map +1 -1
- package/dist/{export-J79rMoNj.js → export-L53WektO.js} +175 -39
- package/dist/export-L53WektO.js.map +1 -0
- package/dist/form/components/FieldBlock.d.ts +58 -4
- package/dist/form/components/FormRail.d.ts +13 -0
- package/dist/form/components/FormSections.d.ts +15 -1
- package/dist/form/components/useRailVisible.d.ts +5 -4
- package/dist/form/form_utils.d.ts +38 -1
- package/dist/{history-D7L_JlLO.js → history-D5SKygpJ.js} +4 -4
- package/dist/{history-D7L_JlLO.js.map → history-D5SKygpJ.js.map} +1 -1
- package/dist/hooks/useEntityDisplay.d.ts +102 -0
- package/dist/hooks/useEntityDisplayTitle.d.ts +18 -9
- package/dist/{import-BvYl--U4.js → import-C_4edkoD.js} +6 -5
- package/dist/import-C_4edkoD.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +237 -123
- package/dist/index.js.map +1 -1
- package/dist/preview/compact_text.d.ts +23 -0
- package/dist/preview/components/BooleanPreview.d.ts +3 -1
- package/dist/preview/components/date_fns_locales.d.ts +9 -0
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +1 -1
- package/dist/preview/property_previews/MapPropertyPreview.d.ts +1 -1
- package/dist/preview/property_previews/StringPropertyPreview.d.ts +1 -1
- package/dist/routes/RebaseRoute.d.ts +1 -1
- package/dist/types/components/PropertyPreviewProps.d.ts +19 -0
- package/dist/util/number_format.d.ts +14 -0
- package/dist/util/previews.d.ts +9 -2
- package/dist/util/view_constants.d.ts +24 -0
- package/dist/util/view_mode.d.ts +18 -0
- package/dist/{util-GiwPgxnL.js → util-C-D5yD2n.js} +4161 -1809
- package/dist/util-C-D5yD2n.js.map +1 -0
- package/package.json +10 -9
- package/src/collection_editor/serializable_types.ts +1 -0
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +8 -3
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +5 -2
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +1 -0
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +9 -8
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +9 -11
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +5 -2
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +5 -2
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -0
- package/src/collection_editor/useJsonCollectionsConfigController.tsx +92 -84
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +10 -3
- package/src/components/AdditionalFieldValue.tsx +68 -0
- package/src/components/ClearFilterSortButton.tsx +16 -7
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +7 -8
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +2 -2
- package/src/components/CollectionTableBinding/column_utils.tsx +15 -6
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +2 -2
- package/src/components/CollectionTableBinding/table_bindings.tsx +7 -1
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +26 -27
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +13 -7
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +2 -1
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +822 -354
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +1 -1
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +52 -12
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +9 -0
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +51 -39
- package/src/components/CollectionViewBinding/SearchExplanation.tsx +106 -0
- package/src/components/CollectionViewBinding/SearchHighlight.tsx +311 -0
- package/src/components/CollectionViewBinding/SlotValue.tsx +156 -0
- package/src/components/CollectionViewBinding/SortButton.tsx +16 -4
- package/src/components/CollectionViewBinding/SplitListCloseButton.tsx +23 -7
- package/src/components/CollectionViewBinding/SplitListShowButton.tsx +28 -0
- package/src/components/CollectionViewBinding/SplitListView.tsx +47 -7
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +10 -5
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +23 -6
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +183 -64
- package/src/components/CollectionViewBinding/utils.ts +7 -4
- package/src/components/DefaultDrawer.tsx +26 -23
- package/src/components/DetailViewBinding.tsx +109 -62
- package/src/components/DrawerNavigationGroup.tsx +16 -39
- package/src/components/DrawerNavigationItem.tsx +56 -16
- package/src/components/EditViewBinding.tsx +233 -50
- package/src/components/EntityDisplayHeader.tsx +170 -0
- package/src/components/EntityIdentityBar.tsx +163 -23
- package/src/components/EntityInspector.tsx +24 -6
- package/src/components/EntityPreviewBinding.tsx +58 -18
- package/src/components/EntityViewBinding.tsx +344 -41
- package/src/components/InlineEntityPreview.tsx +10 -10
- package/src/components/RebaseLayout.tsx +2 -2
- package/src/components/RebaseShell.tsx +2 -2
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +4 -2
- package/src/components/RelationSelector.tsx +76 -15
- package/src/components/SearchIconsView.tsx +14 -33
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -0
- package/src/components/SideDialogs.tsx +15 -3
- package/src/components/SidePanelBinding.tsx +122 -66
- package/src/components/UserSelector.tsx +67 -13
- package/src/components/app/Scaffold.tsx +112 -10
- package/src/components/history/LastEditedByIndicator.tsx +7 -12
- package/src/components/index.ts +3 -0
- package/src/data_export/export/ExportCollectionAction.tsx +101 -48
- package/src/data_export/export/export.ts +63 -16
- package/src/data_export/export/fetch_export_data.ts +90 -0
- package/src/data_export/export/index.ts +1 -0
- package/src/data_import/components/DataNewPropertiesMapping.tsx +20 -3
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +1 -0
- package/src/data_import/components/ImportSaveInProgress.tsx +35 -36
- package/src/data_import/import/ImportCollectionAction.tsx +13 -2
- package/src/data_import/utils/csv.ts +153 -0
- package/src/data_import/utils/data.ts +16 -2
- package/src/data_import/utils/file_to_json.ts +77 -6
- package/src/data_import/utils/index.ts +2 -0
- package/src/data_import/utils/save_entities.ts +138 -0
- package/src/data_import/utils/transforms.ts +23 -0
- package/src/editor/components/image-bubble.tsx +2 -0
- package/src/editor/selectors/link-selector.tsx +1 -0
- package/src/form/EntityForm.tsx +74 -53
- package/src/form/EntityFormBinding.tsx +24 -11
- package/src/form/PropertyFieldBinding.tsx +2 -2
- package/src/form/components/FieldBlock.tsx +80 -10
- package/src/form/components/FormRail.tsx +19 -2
- package/src/form/components/FormSections.tsx +32 -5
- package/src/form/components/StorageUploadProgress.tsx +9 -3
- package/src/form/components/useRailVisible.tsx +5 -4
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -2
- package/src/form/field_bindings/BinaryFieldBinding.tsx +11 -5
- package/src/form/field_bindings/BlockFieldBinding.tsx +3 -3
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +4 -0
- package/src/form/field_bindings/GeopointFieldBinding.tsx +23 -16
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +3 -0
- package/src/form/field_bindings/MapFieldBinding.tsx +2 -2
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +13 -7
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +7 -1
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +21 -2
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +1 -1
- package/src/form/field_bindings/RelationFieldBinding.tsx +5 -2
- package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +2 -2
- package/src/form/field_bindings/TextFieldBinding.tsx +18 -0
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +4 -1
- package/src/form/field_bindings/VectorFieldBinding.tsx +7 -4
- package/src/form/form_utils.ts +78 -0
- package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +29 -5
- package/src/hooks/useEntityDisplay.tsx +262 -0
- package/src/hooks/useEntityDisplayTitle.tsx +27 -38
- package/src/index.ts +9 -1
- package/src/preview/PropertyPreview.tsx +25 -5
- package/src/preview/compact_text.ts +68 -0
- package/src/preview/components/BooleanPreview.tsx +5 -2
- package/src/preview/components/DatePreview.tsx +15 -2
- package/src/preview/components/ReferencePreview.tsx +5 -8
- package/src/preview/components/RelationPreview.tsx +8 -7
- package/src/preview/components/StorageThumbnail.tsx +5 -2
- package/src/preview/components/date_fns_locales.ts +125 -0
- package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +6 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +26 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +10 -1
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +10 -1
- package/src/preview/property_previews/MapPropertyPreview.tsx +52 -1
- package/src/preview/property_previews/NumberPropertyPreview.tsx +9 -1
- package/src/preview/property_previews/StringPropertyPreview.tsx +8 -5
- package/src/routes/RebaseRoute.tsx +62 -4
- package/src/types/components/PropertyPreviewProps.tsx +21 -0
- package/src/util/navigation_utils.ts +4 -2
- package/src/util/number_format.ts +46 -0
- package/src/util/previews.ts +8 -55
- package/src/util/property_utils.tsx +6 -1
- package/src/util/view_constants.ts +27 -0
- package/src/util/view_mode.ts +36 -0
- package/dist/CollectionEditorDialog-CjXkWZ64.js.map +0 -1
- package/dist/PropertyEditView-W8I3YV89.js.map +0 -1
- package/dist/RouterCollectionsStudioView-BsLTNoqX.js.map +0 -1
- package/dist/export-J79rMoNj.js.map +0 -1
- package/dist/import-BvYl--U4.js.map +0 -1
- package/dist/util-GiwPgxnL.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import { i as PropertySelectEntry, n as ImportCollectionAction, r as ImportDataPreview } from "./import-
|
|
3
|
-
import { a as
|
|
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
|
|
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
|
|
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
|
-
|
|
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,
|
|
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: [
|
|
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
|
|
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,
|
|
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(
|
|
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:
|
|
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",
|
|
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
|
|
989
|
-
const
|
|
990
|
-
|
|
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
|
-
|
|
1000
|
-
|
|
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
|
|
1265
|
+
const storageKey = drawerOpenStorageKey(useUrlController().basePath);
|
|
1266
|
+
const [drawerOpen, setDrawerOpenState] = React.useState(defaultDrawerOpen && largeLayout);
|
|
1212
1267
|
const [onHover, setOnHover] = React.useState(false);
|
|
1213
|
-
|
|
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]"))
|
|
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-
|
|
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 =
|
|
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-
|
|
2794
|
-
var PropertyFormDialog = lazy(() => import("./PropertyEditView-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
3252
|
-
|
|
3253
|
-
|
|
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] =
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
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
|
-
|
|
3280
|
-
}, []);
|
|
3395
|
+
applyCollections(collectionsRef.current.filter((c) => c.slug !== id));
|
|
3396
|
+
}, [applyCollections]);
|
|
3281
3397
|
const saveProperty = useCallback(async ({ path, propertyKey, property, newPropertiesOrder }) => {
|
|
3282
|
-
|
|
3283
|
-
|
|
3284
|
-
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
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
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
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
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
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
|
-
|
|
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
|