@rebasepro/admin 0.14.1 → 0.14.2-canary.g27a129e
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-BeS4lxGh.js → CollectionEditorDialog-Dxx0ZaDk.js} +11 -5
- package/dist/CollectionEditorDialog-Dxx0ZaDk.js.map +1 -0
- package/dist/{PropertyEditView-BFJ6H9-Q.js → PropertyEditView-D6xNTm0d.js} +2 -2
- package/dist/{PropertyEditView-BFJ6H9-Q.js.map → PropertyEditView-D6xNTm0d.js.map} +1 -1
- package/dist/{RouterCollectionsStudioView-sfsUpEJz.js → RouterCollectionsStudioView-C4vSn9Pu.js} +4 -4
- package/dist/{RouterCollectionsStudioView-sfsUpEJz.js.map → RouterCollectionsStudioView-C4vSn9Pu.js.map} +1 -1
- package/dist/collection_editor/serializable_types.d.ts +6 -0
- package/dist/collection_editor_ui.js +4 -4
- package/dist/components/CollectionViewBinding/ViewModeToggle.d.ts +11 -5
- package/dist/components/RebaseAdmin.d.ts +1 -1
- package/dist/{export-KEf57Jso.js → export-BZi1MzQ5.js} +2 -2
- package/dist/{export-KEf57Jso.js.map → export-BZi1MzQ5.js.map} +1 -1
- package/dist/{history-Ctd2cRn_.js → history-B5pkfldE.js} +2 -2
- package/dist/{history-Ctd2cRn_.js.map → history-B5pkfldE.js.map} +1 -1
- package/dist/{import-BujhycMq.js → import-CXpuYo-T.js} +2 -2
- package/dist/{import-BujhycMq.js.map → import-CXpuYo-T.js.map} +1 -1
- package/dist/index.js +19 -14
- package/dist/index.js.map +1 -1
- package/dist/util/resolutions.d.ts +10 -1
- package/dist/util/view_mode.d.ts +24 -6
- package/dist/{util-bL-fk6C6.js → util-BKtHPLe4.js} +141 -52
- package/dist/util-BKtHPLe4.js.map +1 -0
- package/package.json +9 -9
- package/src/collection_editor/serializable_types.ts +6 -0
- package/src/collection_editor/serializable_utils.ts +8 -0
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +16 -2
- package/src/components/CollectionEditorDialogs.tsx +4 -3
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +4 -4
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +99 -22
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +66 -32
- package/src/components/EntityInspector.tsx +3 -2
- package/src/components/HomePage/NavigationCardBinding.tsx +2 -2
- package/src/components/RebaseAdmin.tsx +3 -2
- package/src/components/RebaseNavigation.tsx +13 -6
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +3 -2
- package/src/util/resolutions.ts +30 -1
- package/src/util/view_mode.ts +49 -12
- package/dist/CollectionEditorDialog-BeS4lxGh.js.map +0 -1
- package/dist/util-bL-fk6C6.js.map +0 -1
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import type { CustomizationController, EntityAction, EntityCustomView } from "@rebasepro/admin-types";
|
|
1
|
+
import type { CollectionCustomView, CustomizationController, EntityAction, EntityCustomView } from "@rebasepro/admin-types";
|
|
2
2
|
export declare function resolveEntityView(entityView: string | EntityCustomView<any>, contextEntityViews?: EntityCustomView<any>[]): EntityCustomView<any> | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a collection's `admin.customViews` into the views it can actually
|
|
5
|
+
* render, dropping every entry that names a key nothing registered.
|
|
6
|
+
*
|
|
7
|
+
* Dropping is deliberate: an unresolvable key must not become a switcher entry
|
|
8
|
+
* that renders a blank panel. It falls out of `enabledViews` too, so a user
|
|
9
|
+
* whose saved view mode was removed lands on a built-in.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveCollectionViews(customViews: (string | CollectionCustomView<any>)[] | undefined, contextCollectionViews?: CollectionCustomView<any>[]): CollectionCustomView<any>[];
|
|
3
12
|
export declare function resolveEntityAction<M extends Record<string, unknown>>(entityAction: string | EntityAction<M>, contextEntityActions?: EntityAction<M>[]): EntityAction<M> | undefined;
|
|
4
13
|
export declare function resolvedSelectedEntityView<M extends Record<string, unknown>>(customViews: (string | EntityCustomView<M>)[] | undefined, customizationController: CustomizationController, selectedTab?: string, _canEdit?: boolean): {
|
|
5
14
|
resolvedEntityViews: EntityCustomView[];
|
package/dist/util/view_mode.d.ts
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
import type { ViewMode, AdminCollection } from "@rebasepro/admin-types";
|
|
1
|
+
import type { ViewMode, AdminCollection, CollectionCustomView } from "@rebasepro/admin-types";
|
|
2
2
|
/**
|
|
3
3
|
* Query param that carries the active collection view mode across navigations.
|
|
4
4
|
*/
|
|
5
5
|
export declare const VIEW_MODE_PARAM = "__view";
|
|
6
|
+
/** The view modes every collection has, before custom views are added. */
|
|
6
7
|
export declare const VIEW_MODES: ViewMode[];
|
|
7
8
|
export declare const DEFAULT_VIEW_MODE: ViewMode;
|
|
8
9
|
export type OpenEntityMode = "side_panel" | "full_screen" | "split" | "dialog";
|
|
9
10
|
export declare const DEFAULT_OPEN_ENTITY_MODE: OpenEntityMode;
|
|
10
|
-
export declare function isViewMode(value: string | null | undefined): value is ViewMode;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Whether `value` names a view mode this collection can actually render.
|
|
13
|
+
*
|
|
14
|
+
* `customKeys` are the keys of the collection's resolved custom views. They
|
|
15
|
+
* have to be passed in rather than looked up: a custom view is registered per
|
|
16
|
+
* collection, so there is no global set to check against, and validating
|
|
17
|
+
* against the built-ins alone is what would send `?__view=map` to the table.
|
|
18
|
+
*
|
|
19
|
+
* Omitting them checks the built-ins only, which is the right answer for
|
|
20
|
+
* callers that have no collection in hand.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isViewMode(value: string | null | undefined, customKeys?: readonly string[]): value is ViewMode;
|
|
23
|
+
/**
|
|
24
|
+
* Read the active view mode from a query string, if it holds one this
|
|
25
|
+
* collection can render.
|
|
13
26
|
*
|
|
14
27
|
* @param search a query string (e.g. `location.search`). Falls back to the
|
|
15
28
|
* current browser location when omitted.
|
|
29
|
+
* @param customKeys keys of the collection's custom views, if any.
|
|
16
30
|
*/
|
|
17
|
-
export declare function getViewModeFromSearch(search?: string): ViewMode | null;
|
|
31
|
+
export declare function getViewModeFromSearch(search?: string, customKeys?: readonly string[]): ViewMode | null;
|
|
18
32
|
/**
|
|
19
33
|
* Append the active view mode to a URL so the target route keeps rendering the
|
|
20
34
|
* view the user was last looking at.
|
|
@@ -49,10 +63,12 @@ export declare function withListState(url: string, search?: string): string;
|
|
|
49
63
|
* Resolve the view mode for a collection, honouring the documented priority:
|
|
50
64
|
* URL param > saved user config > collection default.
|
|
51
65
|
*/
|
|
52
|
-
export declare function resolveViewMode({ collection, search, savedViewMode }: {
|
|
66
|
+
export declare function resolveViewMode({ collection, search, savedViewMode, customKeys }: {
|
|
53
67
|
collection?: Pick<AdminCollection<any>, "defaultViewMode">;
|
|
54
68
|
search?: string;
|
|
55
69
|
savedViewMode?: ViewMode | null;
|
|
70
|
+
/** Keys of the collection's resolved custom views. */
|
|
71
|
+
customKeys?: readonly string[];
|
|
56
72
|
}): ViewMode;
|
|
57
73
|
/**
|
|
58
74
|
* Resolve how clicking an entity should present it.
|
|
@@ -66,7 +82,9 @@ export declare function resolveViewMode({ collection, search, savedViewMode }: {
|
|
|
66
82
|
* must all resolve through it, otherwise the same entity opens differently
|
|
67
83
|
* depending on how it was reached.
|
|
68
84
|
*/
|
|
69
|
-
export declare function resolveOpenEntityMode({ collection, viewMode }: {
|
|
85
|
+
export declare function resolveOpenEntityMode({ collection, viewMode, customView }: {
|
|
70
86
|
collection?: Pick<AdminCollection<any>, "openEntityMode">;
|
|
71
87
|
viewMode?: ViewMode;
|
|
88
|
+
/** The resolved custom view, when `viewMode` names one. */
|
|
89
|
+
customView?: Pick<CollectionCustomView, "openEntityMode">;
|
|
72
90
|
}): OpenEntityMode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React$1 from "react";
|
|
2
|
-
import React, { Suspense, createContext, createElement, forwardRef,
|
|
2
|
+
import React, { Suspense, createContext, createElement, forwardRef, memo, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { deepEqual } from "fast-equals";
|
|
4
|
-
import { Alert, AlertCircleIcon, AlertTriangleIcon, AlignLeftIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightToLineIcon, ArrowUpDownIcon, ArrowUpIcon, Badge, BooleanSwitchWithLabel, Button, CHIP_COLORS, CHIP_SEED_KEYS, CalendarIcon, Card, CardView, CenteredView, CheckCircleIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, Chip, CircleIcon, CircularProgress, CircularProgressCenter, CodeIcon, Collapse, ColumnsIcon, CopyIcon, DateTimeField, Dialog, DialogActions, DialogContent, DialogTitle, ErrorBoundary, ExpandablePanel, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FilterXIcon, FlagIcon, FolderUpIcon, FunctionSquareIcon, GlobeIcon, HandleIcon, HashIcon, HistoryIcon, IconButton, ImageOffIcon, KanbanIcon, KanbanView, KeyRoundIcon, Label, LayoutGridIcon, Link2Icon, LinkIcon, ListIcon, ListOrderedIcon, ListView, LoadingButton, LucideIconByName, MailIcon, Markdown, Maximize2Icon, Menu, MenuItem, MinusIcon, MoreVerticalIcon, MultiSelect, MultiSelectItem, PanelLeftCloseIcon, PanelLeftOpenIcon, PencilIcon, PlusIcon, Popover, PopoverPrimitive, Portal, QuoteIcon, RadioGroup, RadioGroupItem, RefreshCwIcon, RepeatIcon, ResizablePanels, Rows3Icon, SearchBar, SearchIcon, Select, SelectItem, Separator, SettingsIcon, Sheet, Skeleton, Tab, Table, TableBody, TableCell, TableHeader, TableIcon, TableRow, Tabs, TextField, TextIcon, TextareaAutosize, ToggleButtonGroup, Tooltip, Trash2Icon, Typography, Unlink2Icon, UploadIcon, UserIcon, VirtualTable, VirtualTableDateField, VirtualTableInput, VirtualTableInput as VirtualTableInput$1, VirtualTableNumberInput, VirtualTableSwitch, VoteIcon, XCircleIcon, XIcon, cls, coolIconKeys, createVirtualTableSelectionStore, debounce, defaultBorderMixin, fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundInvisibleMixin, fieldBackgroundMixin, focusedDisabled, getColorSchemeForSeed, iconSize, paperMixin, useDebouncedCallback, useOutsideAlerter, usePortalContainer } from "@rebasepro/ui";
|
|
4
|
+
import { Alert, AlertCircleIcon, AlertTriangleIcon, AlignLeftIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightToLineIcon, ArrowUpDownIcon, ArrowUpIcon, Badge, BooleanSwitchWithLabel, Button, CHIP_COLORS, CHIP_SEED_KEYS, CalendarIcon, Card, CardView, CenteredView, CheckCircleIcon, CheckIcon, Checkbox, ChevronDownIcon, ChevronRightIcon, ChevronUpIcon, ChevronsUpDownIcon, Chip, CircleIcon, CircularProgress, CircularProgressCenter, CodeIcon, Collapse, ColumnsIcon, CopyIcon, DateTimeField, Dialog, DialogActions, DialogContent, DialogTitle, ErrorBoundary, ExpandablePanel, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileTextIcon, FileUpload, FilterChip, FilterIcon, FilterXIcon, FlagIcon, FolderUpIcon, FunctionSquareIcon, GlobeIcon, HandleIcon, HashIcon, HistoryIcon, IconButton, ImageOffIcon, KanbanIcon, KanbanView, KeyRoundIcon, Label, LayoutGridIcon, Link2Icon, LinkIcon, ListIcon, ListOrderedIcon, ListView, LoadingButton, LucideIconByName, MailIcon, Markdown, Maximize2Icon, Menu, MenuItem, MinusIcon, MoreVerticalIcon, MultiSelect, MultiSelectItem, PanelLeftCloseIcon, PanelLeftOpenIcon, PencilIcon, PlusIcon, Popover, PopoverPrimitive, Portal, QuoteIcon, RadioGroup, RadioGroupItem, RefreshCwIcon, RepeatIcon, ResizablePanels, Rows3Icon, SearchBar, SearchIcon, Select, SelectItem, Separator, SettingsIcon, Sheet, Skeleton, Tab, Table, TableBody, TableCell, TableHeader, TableIcon, TableRow, Tabs, TextField, TextIcon, TextareaAutosize, ToggleButtonGroup, Tooltip, Trash2Icon, Typography, Unlink2Icon, UploadIcon, UserIcon, VirtualTable, VirtualTableDateField, VirtualTableInput, VirtualTableInput as VirtualTableInput$1, VirtualTableNumberInput, VirtualTableSwitch, VoteIcon, XCircleIcon, XIcon, cls, coolIconKeys, createVirtualTableSelectionStore, debounce, defaultBorderMixin, fieldBackgroundDisabledMixin, fieldBackgroundHoverMixin, fieldBackgroundInvisibleMixin, fieldBackgroundMixin, focusedDisabled, getColorSchemeForSeed, iconSize, lazyChunk, paperMixin, useDebouncedCallback, useOutsideAlerter, usePortalContainer } from "@rebasepro/ui";
|
|
5
5
|
import { CollectionRegistry, DEFAULT_ONE_OF_TYPE, DEFAULT_ONE_OF_VALUE, canReadCollection, enumToObjectEntries, getArrayResolvedProperties, getDefaultValueFor, getDefaultValueFortype, getDefaultValuesFor, getEntityChildViews, getLabelOrConfigFrom, getReferenceFrom, getRelationFrom, getRelationTargetPath, getSubcollections, getTableName, isPropertyBuilder, normalizeOrderBy, normalizeToEntityRelation, resolveArrayProperties, resolveEnumValues, resolveProperty, resolveRelationProperty, resolveStorageFilenameString, resolveStoragePathString, resolveStorageSource, serializeOrderBy } from "@rebasepro/common";
|
|
6
6
|
import { CONTAINER_FULL_WIDTH, CollectionScopeProvider, DEFAULT_PAGE_SIZE, EntityDisplayCache, ErrorTooltip, ErrorView, IconForView, PluginProviderStack, SIDE_PANEL_DEFAULT_WIDTH, StorageSourceContext, UnsavedChangesDialog, UserDisplay, addInitialSlash, apiBaseOf, buildEnumLabel, createFormexStub, deleteEntityWithCallbacks, entityDisplayKey, flattenKeys, getAdminEntityChildViews, getCollectionBySlugWithin, getCollectionPathsCombinations, getColorScheme, getColumnKeysForProperty, getDisplayPropertyKey, getDisplayResolver, getEntityFromCache, getEntityFromMemoryCache, getEntityImagePreviewPropertyKey, getEntityPreviewKeys, getFormFieldKeys, getIcon, getLastSegment as getLastSegment$1, getLeadingRelationTitleKey, getLocalChangesBackup, getNavigationEntriesFromPath, getParentReferencesFromPath, getPropertyInPath, getRedundantChildViewColumnIds, getRelationIncludeParams, getRowHeight, getTitlePropertyCandidates, getTitlePropertyKey, getTitlePropertyKeyForValues, hasDeclaredDisplay, iconsSearch, isDisabled, isFilterableRelation, isHidden, isReadOnly, looksLikeIdentifierValue, removeEntityFromCache, removeEntityFromMemoryCache, removeInitialAndTrailingSlashes, removeInitialAndTrailingSlashes as removeInitialAndTrailingSlashes$1, removeInitialSlash, removeTrailingSlash, removeTrailingSlash as removeTrailingSlash$1, resolveCollectionPathIds, resolveCollectionPathIds as resolveCollectionPathIds$1, resolveComponentRef, resolveDefaultSelectedView, resolveFilterOperators, resolveFormLayout, saveEntityToCache, saveEntityToMemoryCache, saveEntityWithCallbacks, useAnalyticsController, useApiBase, useApiConfig, useAuthController, useCollectionScope, useColumnIds, useComponentOverride, useCustomizationController, useData, useDataTableController, useFetch, useLargeLayout, useModeController, useNavigationBlocker, usePermissions, useRebaseClient, useRebaseContext, useRelationSelector, useResolvedComponent, useScrollRestoration, useSlot, useSnackbarController, useStorageSource, useStorageSources, useStorageUploadController, useTranslation, useUnsavedChangesDialog, useUserConfigurationPersistence } from "@rebasepro/app";
|
|
7
7
|
import { Field, Formex, getIn, setIn, useCreateFormex, useFormex } from "@rebasepro/forms";
|
|
@@ -7534,26 +7534,42 @@ function useCollectionInlineEditor({ path, collection, dataClient, context }) {
|
|
|
7534
7534
|
* Query param that carries the active collection view mode across navigations.
|
|
7535
7535
|
*/
|
|
7536
7536
|
var VIEW_MODE_PARAM = "__view";
|
|
7537
|
+
/** The view modes every collection has, before custom views are added. */
|
|
7537
7538
|
var VIEW_MODES = [
|
|
7538
7539
|
"list",
|
|
7539
7540
|
"table",
|
|
7540
7541
|
"cards",
|
|
7541
7542
|
"kanban"
|
|
7542
7543
|
];
|
|
7544
|
+
var DEFAULT_VIEW_MODE = "list";
|
|
7543
7545
|
var DEFAULT_OPEN_ENTITY_MODE = "split";
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
+
/**
|
|
7547
|
+
* Whether `value` names a view mode this collection can actually render.
|
|
7548
|
+
*
|
|
7549
|
+
* `customKeys` are the keys of the collection's resolved custom views. They
|
|
7550
|
+
* have to be passed in rather than looked up: a custom view is registered per
|
|
7551
|
+
* collection, so there is no global set to check against, and validating
|
|
7552
|
+
* against the built-ins alone is what would send `?__view=map` to the table.
|
|
7553
|
+
*
|
|
7554
|
+
* Omitting them checks the built-ins only, which is the right answer for
|
|
7555
|
+
* callers that have no collection in hand.
|
|
7556
|
+
*/
|
|
7557
|
+
function isViewMode(value, customKeys) {
|
|
7558
|
+
if (!value) return false;
|
|
7559
|
+
return VIEW_MODES.includes(value) || Boolean(customKeys?.includes(value));
|
|
7546
7560
|
}
|
|
7547
7561
|
/**
|
|
7548
|
-
* Read the active view mode from a query string, if it holds
|
|
7562
|
+
* Read the active view mode from a query string, if it holds one this
|
|
7563
|
+
* collection can render.
|
|
7549
7564
|
*
|
|
7550
7565
|
* @param search a query string (e.g. `location.search`). Falls back to the
|
|
7551
7566
|
* current browser location when omitted.
|
|
7567
|
+
* @param customKeys keys of the collection's custom views, if any.
|
|
7552
7568
|
*/
|
|
7553
|
-
function getViewModeFromSearch(search) {
|
|
7569
|
+
function getViewModeFromSearch(search, customKeys) {
|
|
7554
7570
|
const source = search ?? (typeof window !== "undefined" ? window.location.search : "");
|
|
7555
7571
|
const value = new URLSearchParams(source).get(VIEW_MODE_PARAM);
|
|
7556
|
-
return isViewMode(value) ? value : null;
|
|
7572
|
+
return isViewMode(value, customKeys) ? value : null;
|
|
7557
7573
|
}
|
|
7558
7574
|
/**
|
|
7559
7575
|
* Append the active view mode to a URL so the target route keeps rendering the
|
|
@@ -7567,7 +7583,8 @@ function getViewModeFromSearch(search) {
|
|
|
7567
7583
|
* current browser location.
|
|
7568
7584
|
*/
|
|
7569
7585
|
function withViewMode(url, search) {
|
|
7570
|
-
const
|
|
7586
|
+
const source = search ?? (typeof window !== "undefined" ? window.location.search : "");
|
|
7587
|
+
const viewMode = new URLSearchParams(source).get(VIEW_MODE_PARAM);
|
|
7571
7588
|
if (!viewMode) return url;
|
|
7572
7589
|
const hashIndex = url.indexOf("#");
|
|
7573
7590
|
const hash = hashIndex >= 0 ? url.substring(hashIndex) : "";
|
|
@@ -7608,11 +7625,13 @@ function withListState(url, search) {
|
|
|
7608
7625
|
* Resolve the view mode for a collection, honouring the documented priority:
|
|
7609
7626
|
* URL param > saved user config > collection default.
|
|
7610
7627
|
*/
|
|
7611
|
-
function resolveViewMode({ collection, search, savedViewMode }) {
|
|
7612
|
-
const fromUrl = getViewModeFromSearch(search);
|
|
7628
|
+
function resolveViewMode({ collection, search, savedViewMode, customKeys }) {
|
|
7629
|
+
const fromUrl = getViewModeFromSearch(search, customKeys);
|
|
7613
7630
|
if (fromUrl) return fromUrl;
|
|
7614
|
-
if (isViewMode(savedViewMode)) return savedViewMode;
|
|
7615
|
-
|
|
7631
|
+
if (isViewMode(savedViewMode, customKeys)) return savedViewMode;
|
|
7632
|
+
const configured = collection?.defaultViewMode;
|
|
7633
|
+
if (isViewMode(configured, customKeys)) return configured;
|
|
7634
|
+
return DEFAULT_VIEW_MODE;
|
|
7616
7635
|
}
|
|
7617
7636
|
/**
|
|
7618
7637
|
* Resolve how clicking an entity should present it.
|
|
@@ -7626,8 +7645,9 @@ function resolveViewMode({ collection, search, savedViewMode }) {
|
|
|
7626
7645
|
* must all resolve through it, otherwise the same entity opens differently
|
|
7627
7646
|
* depending on how it was reached.
|
|
7628
7647
|
*/
|
|
7629
|
-
function resolveOpenEntityMode({ collection, viewMode }) {
|
|
7648
|
+
function resolveOpenEntityMode({ collection, viewMode, customView }) {
|
|
7630
7649
|
if (collection?.openEntityMode) return collection.openEntityMode;
|
|
7650
|
+
if (customView) return customView.openEntityMode ?? "side_panel";
|
|
7631
7651
|
if (viewMode === "kanban") return "side_panel";
|
|
7632
7652
|
if (viewMode === "table" || viewMode === "cards") return "full_screen";
|
|
7633
7653
|
return DEFAULT_OPEN_ENTITY_MODE;
|
|
@@ -7703,6 +7723,26 @@ function resolveEntityView(entityView, contextEntityViews) {
|
|
|
7703
7723
|
if (typeof entityView === "string") return BUILTIN_ENTITY_VIEWS[entityView] ?? contextEntityViews?.find((entry) => entry.key === entityView);
|
|
7704
7724
|
else return entityView;
|
|
7705
7725
|
}
|
|
7726
|
+
/**
|
|
7727
|
+
* Resolve a collection's `admin.customViews` into the views it can actually
|
|
7728
|
+
* render, dropping every entry that names a key nothing registered.
|
|
7729
|
+
*
|
|
7730
|
+
* Dropping is deliberate: an unresolvable key must not become a switcher entry
|
|
7731
|
+
* that renders a blank panel. It falls out of `enabledViews` too, so a user
|
|
7732
|
+
* whose saved view mode was removed lands on a built-in.
|
|
7733
|
+
*/
|
|
7734
|
+
function resolveCollectionViews(customViews, contextCollectionViews) {
|
|
7735
|
+
if (!customViews) return [];
|
|
7736
|
+
const resolved = [];
|
|
7737
|
+
const seen = /* @__PURE__ */ new Set();
|
|
7738
|
+
for (const entry of customViews) {
|
|
7739
|
+
const view = typeof entry === "string" ? contextCollectionViews?.find((candidate) => candidate.key === entry) : entry;
|
|
7740
|
+
if (!view || VIEW_MODES.includes(view.key) || seen.has(view.key)) continue;
|
|
7741
|
+
seen.add(view.key);
|
|
7742
|
+
resolved.push(view);
|
|
7743
|
+
}
|
|
7744
|
+
return resolved;
|
|
7745
|
+
}
|
|
7706
7746
|
function resolveEntityAction(entityAction, contextEntityActions) {
|
|
7707
7747
|
if (typeof entityAction === "string") return contextEntityActions?.find((entry) => entry.key === entityAction);
|
|
7708
7748
|
else return entityAction;
|
|
@@ -9318,8 +9358,8 @@ function EditorCollectionAction({ path, parentCollectionSlugs, parentEntityIds,
|
|
|
9318
9358
|
}
|
|
9319
9359
|
//#endregion
|
|
9320
9360
|
//#region src/components/CollectionViewBinding/CollectionViewActions.tsx
|
|
9321
|
-
var ImportCollectionAction =
|
|
9322
|
-
var ExportCollectionAction =
|
|
9361
|
+
var ImportCollectionAction = lazyChunk(() => import("./import-CXpuYo-T.js").then((n) => n.t).then((m) => ({ default: m.ImportCollectionAction })));
|
|
9362
|
+
var ExportCollectionAction = lazyChunk(() => import("./export-BZi1MzQ5.js").then((n) => n.t).then((m) => ({ default: m.ExportCollectionAction })));
|
|
9323
9363
|
function CollectionViewActions({ collection, relativePath, parentCollectionSlugs, parentEntityIds, onNewClick, onAddExistingClick, onMultipleDeleteClick, selectionEnabled, path, selectionController, tableController, collectionEntitiesCount, compact, children, openNewDocument }) {
|
|
9324
9364
|
const context = useAdminContext();
|
|
9325
9365
|
const { canCreate, canDelete } = usePermissions();
|
|
@@ -11673,7 +11713,7 @@ function JsonPreviewBinding({ values }) {
|
|
|
11673
11713
|
}
|
|
11674
11714
|
//#endregion
|
|
11675
11715
|
//#region src/components/EntityInspector.tsx
|
|
11676
|
-
var EntityHistoryView =
|
|
11716
|
+
var EntityHistoryView = lazyChunk(() => import("./history-B5pkfldE.js").then((m) => ({ default: m.EntityHistoryView })));
|
|
11677
11717
|
/**
|
|
11678
11718
|
* Raw values and revision history, as an inspector rather than as tabs.
|
|
11679
11719
|
*
|
|
@@ -13771,47 +13811,65 @@ var ALL_VIEW_MODES = [
|
|
|
13771
13811
|
"cards",
|
|
13772
13812
|
"kanban"
|
|
13773
13813
|
];
|
|
13774
|
-
function ViewModeToggle({ viewMode = "table", onViewModeChange, enabledViews = ALL_VIEW_MODES, size, onSizeChanged, open, onOpenChange, kanbanPropertyOptions, selectedKanbanProperty, onKanbanPropertyChange }) {
|
|
13814
|
+
function ViewModeToggle({ viewMode = "table", onViewModeChange, enabledViews = ALL_VIEW_MODES, customViews, size, onSizeChanged, open, onOpenChange, kanbanPropertyOptions, selectedKanbanProperty, onKanbanPropertyChange }) {
|
|
13775
13815
|
const { t } = useTranslation();
|
|
13816
|
+
const activeCustomView = customViews?.find((v) => v.key === viewMode);
|
|
13776
13817
|
const getViewModeIcon = () => {
|
|
13818
|
+
if (activeCustomView) return getIcon(activeCustomView.icon, void 0, void 0, "small") ?? /* @__PURE__ */ jsx(ListIcon, { size: iconSize.small });
|
|
13777
13819
|
if (viewMode === "kanban") return /* @__PURE__ */ jsx(KanbanIcon, { size: iconSize.small });
|
|
13778
13820
|
if (viewMode === "cards") return /* @__PURE__ */ jsx(LayoutGridIcon, { size: iconSize.small });
|
|
13779
13821
|
if (viewMode === "table") return /* @__PURE__ */ jsx(TableIcon, { size: iconSize.small });
|
|
13780
13822
|
return /* @__PURE__ */ jsx(ListIcon, { size: iconSize.small });
|
|
13781
13823
|
};
|
|
13782
13824
|
const getViewModeName = () => {
|
|
13825
|
+
if (activeCustomView) return activeCustomView.name;
|
|
13783
13826
|
if (viewMode === "kanban") return t("board");
|
|
13784
13827
|
if (viewMode === "cards") return t("cards");
|
|
13785
13828
|
if (viewMode === "table") return t("table_view_mode");
|
|
13786
13829
|
return t("list");
|
|
13787
13830
|
};
|
|
13788
|
-
const showSizeSelector = size && onSizeChanged && (viewMode === "list" || viewMode === "table" || viewMode === "cards");
|
|
13831
|
+
const showSizeSelector = size && onSizeChanged && (activeCustomView ? activeCustomView.sizeable : viewMode === "list" || viewMode === "table" || viewMode === "cards");
|
|
13789
13832
|
const showKanbanPropertySelector = viewMode === "kanban" && kanbanPropertyOptions && kanbanPropertyOptions.length > 0 && onKanbanPropertyChange;
|
|
13790
13833
|
const viewModeOptions = useMemo(() => {
|
|
13791
|
-
|
|
13792
|
-
{
|
|
13793
|
-
value: "list",
|
|
13834
|
+
const builtIns = {
|
|
13835
|
+
list: {
|
|
13794
13836
|
label: t("list"),
|
|
13795
13837
|
icon: /* @__PURE__ */ jsx(ListIcon, { size: iconSize.smallest })
|
|
13796
13838
|
},
|
|
13797
|
-
{
|
|
13798
|
-
value: "table",
|
|
13839
|
+
table: {
|
|
13799
13840
|
label: t("table_view_mode"),
|
|
13800
13841
|
icon: /* @__PURE__ */ jsx(TableIcon, { size: iconSize.smallest })
|
|
13801
13842
|
},
|
|
13802
|
-
{
|
|
13803
|
-
value: "cards",
|
|
13843
|
+
cards: {
|
|
13804
13844
|
label: t("cards"),
|
|
13805
13845
|
icon: /* @__PURE__ */ jsx(LayoutGridIcon, { size: iconSize.smallest })
|
|
13806
13846
|
},
|
|
13807
|
-
{
|
|
13808
|
-
value: "kanban",
|
|
13847
|
+
kanban: {
|
|
13809
13848
|
label: t("board"),
|
|
13810
13849
|
icon: /* @__PURE__ */ jsx(KanbanIcon, { size: iconSize.smallest })
|
|
13811
13850
|
}
|
|
13812
|
-
|
|
13813
|
-
|
|
13851
|
+
};
|
|
13852
|
+
return enabledViews.flatMap((mode) => {
|
|
13853
|
+
const builtIn = builtIns[mode];
|
|
13854
|
+
if (builtIn) return [{
|
|
13855
|
+
value: mode,
|
|
13856
|
+
...builtIn
|
|
13857
|
+
}];
|
|
13858
|
+
const custom = customViews?.find((v) => v.key === mode);
|
|
13859
|
+
if (!custom) return [];
|
|
13860
|
+
return [{
|
|
13861
|
+
value: mode,
|
|
13862
|
+
label: custom.name,
|
|
13863
|
+
icon: getIcon(custom.icon, void 0, void 0, "smallest") ?? /* @__PURE__ */ jsx(ListIcon, { size: iconSize.smallest })
|
|
13864
|
+
}];
|
|
13865
|
+
});
|
|
13866
|
+
}, [
|
|
13867
|
+
t,
|
|
13868
|
+
enabledViews,
|
|
13869
|
+
customViews
|
|
13870
|
+
]);
|
|
13814
13871
|
if (!onViewModeChange) return null;
|
|
13872
|
+
if (viewModeOptions.length <= 1 && !showSizeSelector && !showKanbanPropertySelector) return null;
|
|
13815
13873
|
return /* @__PURE__ */ jsx("div", {
|
|
13816
13874
|
className: "overflow-visible",
|
|
13817
13875
|
children: /* @__PURE__ */ jsx(Popover, {
|
|
@@ -15603,24 +15661,33 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
15603
15661
|
const selectionEnabled = collection.selectionEnabled === void 0 || collection.selectionEnabled;
|
|
15604
15662
|
const hoverRow = !checkInlineEditing();
|
|
15605
15663
|
const [popOverOpen, setPopOverOpen] = useState(false);
|
|
15606
|
-
const
|
|
15664
|
+
const resolvedCustomViews = useMemo(() => resolveCollectionViews(collection.customViews, customizationController.collectionViews), [collection.customViews, customizationController]);
|
|
15665
|
+
const customViewKeys = useMemo(() => resolvedCustomViews.map((v) => v.key), [resolvedCustomViews]);
|
|
15666
|
+
const defaultViewMode = isViewMode(collection.defaultViewMode, customViewKeys) ? collection.defaultViewMode : "list";
|
|
15607
15667
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
15608
15668
|
const urlView = useMemo(() => {
|
|
15609
15669
|
const v = searchParams.get(VIEW_MODE_PARAM);
|
|
15610
|
-
return isViewMode(v) ? v : null;
|
|
15611
|
-
}, [searchParams]);
|
|
15670
|
+
return isViewMode(v, customViewKeys) ? v : null;
|
|
15671
|
+
}, [searchParams, customViewKeys]);
|
|
15612
15672
|
const getSavedView = useCallback(() => {
|
|
15613
|
-
|
|
15614
|
-
|
|
15673
|
+
const saved = userConfigPersistence?.getCollectionConfig(path)?.defaultViewMode;
|
|
15674
|
+
return isViewMode(saved, customViewKeys) ? saved : null;
|
|
15675
|
+
}, [
|
|
15676
|
+
userConfigPersistence,
|
|
15677
|
+
path,
|
|
15678
|
+
customViewKeys
|
|
15679
|
+
]);
|
|
15615
15680
|
const [viewMode, setViewModeState] = useState(() => {
|
|
15616
15681
|
if (urlView) return urlView;
|
|
15617
15682
|
const savedView = getSavedView();
|
|
15618
15683
|
if (savedView) return savedView;
|
|
15619
15684
|
return defaultViewMode;
|
|
15620
15685
|
});
|
|
15686
|
+
const activeCustomView = useMemo(() => resolvedCustomViews.find((v) => v.key === viewMode), [resolvedCustomViews, viewMode]);
|
|
15621
15687
|
const openEntityMode = resolveOpenEntityMode({
|
|
15622
15688
|
collection,
|
|
15623
|
-
viewMode
|
|
15689
|
+
viewMode,
|
|
15690
|
+
customView: activeCustomView
|
|
15624
15691
|
});
|
|
15625
15692
|
useEffect(() => {
|
|
15626
15693
|
if (!urlView && viewMode !== defaultViewMode) setSearchParams(() => {
|
|
@@ -15652,6 +15719,7 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
15652
15719
|
const [listSize, setListSize] = useState(collection.defaultSize ?? "m");
|
|
15653
15720
|
const [cardSize, setCardSize] = useState(collection.defaultSize ?? "m");
|
|
15654
15721
|
const [tableSize, setTableSize] = useState(collection.defaultSize ?? "m");
|
|
15722
|
+
const [customViewSize, setCustomViewSize] = useState(collection.defaultSize ?? "m");
|
|
15655
15723
|
const selectionController = useSelectionController();
|
|
15656
15724
|
const usedSelectionController = collection.selectionController ?? selectionController;
|
|
15657
15725
|
const { selectedEntities, setSelectedEntities } = usedSelectionController;
|
|
@@ -15807,7 +15875,7 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
15807
15875
|
canCreate: canCreateEntities,
|
|
15808
15876
|
onNewClick
|
|
15809
15877
|
});
|
|
15810
|
-
const
|
|
15878
|
+
const pluginWidgets = useSlot("collection.widgets", {
|
|
15811
15879
|
path,
|
|
15812
15880
|
parentCollectionSlugs: parentCollectionSlugs ?? EMPTY_ARRAY,
|
|
15813
15881
|
parentEntityIds: parentEntityIds ?? EMPTY_ARRAY,
|
|
@@ -15875,15 +15943,14 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
15875
15943
|
return Object.values(resolvedCollection.properties).some((p) => p.type === "string" && "enum" in p && p.enum);
|
|
15876
15944
|
}, [resolvedCollection.properties]);
|
|
15877
15945
|
const enabledViews = useMemo(() => {
|
|
15878
|
-
const
|
|
15879
|
-
|
|
15880
|
-
|
|
15881
|
-
|
|
15882
|
-
|
|
15883
|
-
|
|
15884
|
-
|
|
15885
|
-
|
|
15886
|
-
}, [collection.enabledViews, hasEnumProperty]);
|
|
15946
|
+
const renderable = (collection.enabledViews ?? [...VIEW_MODES, ...customViewKeys]).filter((v) => isViewMode(v, customViewKeys));
|
|
15947
|
+
if (!hasEnumProperty) return renderable.filter((v) => v !== "kanban");
|
|
15948
|
+
return renderable;
|
|
15949
|
+
}, [
|
|
15950
|
+
collection.enabledViews,
|
|
15951
|
+
hasEnumProperty,
|
|
15952
|
+
customViewKeys
|
|
15953
|
+
]);
|
|
15887
15954
|
const kanbanPropertyOptions = useMemo(() => {
|
|
15888
15955
|
const options = [];
|
|
15889
15956
|
const properties = resolvedCollection.properties;
|
|
@@ -16107,8 +16174,9 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
16107
16174
|
viewMode,
|
|
16108
16175
|
onViewModeChange,
|
|
16109
16176
|
enabledViews,
|
|
16110
|
-
|
|
16111
|
-
|
|
16177
|
+
customViews: resolvedCustomViews,
|
|
16178
|
+
size: activeCustomView ? activeCustomView.sizeable ? customViewSize : void 0 : viewMode === "list" ? listSize : viewMode === "table" ? tableSize : viewMode === "cards" ? cardSize : void 0,
|
|
16179
|
+
onSizeChanged: activeCustomView ? activeCustomView.sizeable ? setCustomViewSize : void 0 : viewMode === "list" ? onListSizeChanged : viewMode === "table" ? onTableSizeChanged : viewMode === "cards" ? setCardSize : void 0,
|
|
16112
16180
|
open: viewModePopoverOpen,
|
|
16113
16181
|
onOpenChange: setViewModePopoverOpen,
|
|
16114
16182
|
kanbanPropertyOptions,
|
|
@@ -16172,7 +16240,24 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
16172
16240
|
children: pluginToolbarWidgets
|
|
16173
16241
|
})
|
|
16174
16242
|
});
|
|
16175
|
-
const
|
|
16243
|
+
const CustomViewBuilder = activeCustomView ? resolveComponentRef(activeCustomView.Builder) : void 0;
|
|
16244
|
+
const innerView = CustomViewBuilder ? /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsx(CustomViewBuilder, {
|
|
16245
|
+
collection,
|
|
16246
|
+
tableController,
|
|
16247
|
+
path,
|
|
16248
|
+
parentCollectionSlugs,
|
|
16249
|
+
parentEntityIds,
|
|
16250
|
+
onEntityClick,
|
|
16251
|
+
onNewClick: canCreateEntities ? onNewClick : void 0,
|
|
16252
|
+
canCreate: canCreateEntities,
|
|
16253
|
+
selectionController: usedSelectionController,
|
|
16254
|
+
selectionEnabled,
|
|
16255
|
+
highlightedEntities: highlightedEntity ? [highlightedEntity] : [],
|
|
16256
|
+
deletedEntities,
|
|
16257
|
+
emptyComponent,
|
|
16258
|
+
size: activeCustomView.sizeable ? customViewSize : void 0,
|
|
16259
|
+
viewMode
|
|
16260
|
+
}, `custom-view-${activeCustomView.key}-${path}`) }) : viewMode === "kanban" ? /* @__PURE__ */ jsx(CollectionBoardViewBinding, {
|
|
16176
16261
|
collection,
|
|
16177
16262
|
tableController,
|
|
16178
16263
|
fullPath: path,
|
|
@@ -16260,11 +16345,11 @@ var CollectionViewBindingInner = React.memo(function CollectionViewBindingInner(
|
|
|
16260
16345
|
})
|
|
16261
16346
|
})
|
|
16262
16347
|
}),
|
|
16263
|
-
|
|
16348
|
+
pluginWidgets.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
16264
16349
|
className: cls("grid transition-[grid-template-rows] duration-150 ease-out", detailOpen ? "grid-rows-[0fr]" : "grid-rows-[1fr]"),
|
|
16265
16350
|
children: /* @__PURE__ */ jsx("div", {
|
|
16266
16351
|
className: "overflow-hidden flex-shrink-0",
|
|
16267
|
-
children:
|
|
16352
|
+
children: pluginWidgets
|
|
16268
16353
|
})
|
|
16269
16354
|
}),
|
|
16270
16355
|
innerView
|
|
@@ -20285,7 +20370,7 @@ function MapFieldBinding({ propertyKey, value, showError, error, disabled, prope
|
|
|
20285
20370
|
}
|
|
20286
20371
|
//#endregion
|
|
20287
20372
|
//#region src/form/field_bindings/MarkdownEditorFieldBinding.tsx
|
|
20288
|
-
var RichTextEditor =
|
|
20373
|
+
var RichTextEditor = lazyChunk(() => import("./editor.js").then((m) => ({ default: m.RichTextEditor })));
|
|
20289
20374
|
var loadMarkdownUtils = () => import("./markdown-CklalUUk.js").then((n) => n.t);
|
|
20290
20375
|
var _markdownUtils = null;
|
|
20291
20376
|
var getMarkdownUtils = async () => {
|
|
@@ -24071,6 +24156,10 @@ function toSerializableCollectionConfig(collection) {
|
|
|
24071
24156
|
if (collection.previewProperties) result.previewProperties = collection.previewProperties;
|
|
24072
24157
|
if (collection.listProperties) result.listProperties = collection.listProperties;
|
|
24073
24158
|
if (collection.enabledViews) result.enabledViews = collection.enabledViews;
|
|
24159
|
+
if (collection.customViews) {
|
|
24160
|
+
const keys = collection.customViews.filter((v) => typeof v === "string");
|
|
24161
|
+
if (keys.length > 0) result.customViews = keys;
|
|
24162
|
+
}
|
|
24074
24163
|
if (collection.disableDefaultActions) result.disableDefaultActions = collection.disableDefaultActions;
|
|
24075
24164
|
if (collection.securityRules) result.securityRules = collection.securityRules;
|
|
24076
24165
|
if (isRelationalCollectionConfig(collection) && collection.disableDefaultPolicies !== void 0) result.disableDefaultPolicies = collection.disableDefaultPolicies;
|
|
@@ -24566,4 +24655,4 @@ function getFullIdPath(propertyKey, propertyNamespace) {
|
|
|
24566
24655
|
//#endregion
|
|
24567
24656
|
export { getEntityViewWidth as $, SkeletonPropertyComponent as $n, resolveCollectionPathIds$1 as $t, SelectFieldBinding as A, ArrayOfStringsPreview as An, saveImportedEntities as At, useSelectionDialog as B, useSidePanel as Bn, FieldCaption as Bt, getDefaultFieldId as C, UserPreview as Cn, isReferenceProperty as Cr, convertDataToEntity as Ct, TextFieldBinding as D, KeyValuePreview as Dn, useImportConfig as Dt, VectorFieldBinding as E, DatePreview as En, getInferenceType as Et, MapFieldBinding as F, ArrayOfReferencesPreview as Fn, parseCsvToObjects as Ft, useTopLevelNavigation as G, getEntityPreviewKeys as Gn, mergeEntityActions as Gt, SideDialogs as H, useCollectionRegistryController as Hn, BreadcrumbsProvider as Ht, KeyValueFieldBinding as I, InlineEntityListPreview as In, unflattenObject as It, useBuildCollectionRegistryController as J, ArrayPropertyPreview as Jn, getCollectionPathsCombinations as Jt, useResolvedViews as K, getEntityTitlePropertyKey as Kn, addInitialSlash as Kt, DateTimeFieldBinding as L, ReferencePreview as Ln, ArrayContainer as Lt, ReferenceFieldBinding as M, ArrayEnumPreview as Mn, convertFileToJson as Mt, MultiSelectFieldBinding as N, ArrayOfStorageComponentsPreview as Nn, detectCsvDelimiter as Nt, SwitchFieldBinding as O, MapPropertyPreview as On, ImportSaveInProgress as Ot, MarkdownEditorFieldBinding as P, RelationPreview as Pn, parseCsvRows as Pt, buildSidePanelsFromUrl as Q, StorageThumbnailInternal as Qn, removeTrailingSlash$1 as Qt, BlockFieldBinding as R, EntityPreviewBinding as Rn, PropertyConfigBadge as Rt, getDefaultFieldConfig as S, PropertyPreview as Sn, getResolvedPropertyInPath as Sr, DataNewPropertiesMapping as St, getFieldId as T, BooleanPreview as Tn, processValueMapping as Tt, useBuildUrlController as U, getUserLabel as Un, resolveEntityAction as Ut, SelectionTableBinding as V, CollectionRegistryContext as Vn, useBreadcrumbsController as Vt, useBuildNavigationStateController as W, useResolvedUser as Wn, resolveEntityView as Wt, resolveNavigationFrom as X, EnumValuesChip as Xn, removeInitialAndTrailingSlashes$1 as Xt, useHistory as Y, StringPropertyPreview as Yn, getLastSegment$1 as Yt, useResolvedNavigationFrom as Z, StorageThumbnail as Zn, removeInitialSlash as Zt, useCollectionsConfigController as _, ReadOnlyFieldBinding as _n, getDefaultPropertiesOrder as _r, CollectionViewActions as _t, namespaceToPropertiesPath as a, SelectableTable as an, ImagePreview as ar, removeEmptyContainers as at, PropertyFieldBinding as b, FieldHelperText as bn, getPropertiesWithPropertiesOrder as br, useCollectionEditorDialogsState as bt, buildCollectionGenerationCallback as c, UrlContext as cn, FormSections as cr, copyEntityAction as ct, fromSerializableCollectionConfigs as d, useNavigationStateController as dn, FieldBlock as dr, resetPasswordAction as dt, resolveOpenEntityMode as en, renderSkeletonCaptionText as er, useBuildSidePanel as et, fromSerializableProperties as f, useSideDialogsController as fn, LABEL_ICON_SIZE as fr, CreationResultDialog as ft, toSerializableProperty as g, useClearRestoreValue as gn, getBracketNotation as gr, EntityCardBinding as gt, toSerializableProperties as h, ArrayCustomShapedFieldBinding as hn, PropertyIdCopyTooltip as hr, CollectionCardViewBinding as ht, namespaceToPropertiesOrderPath as i, CollectionTableBinding as in, UrlComponentPreview as ir, getInitialEntityValues as it, RepeatFieldBinding as j, ArrayPropertyEnumPreview as jn, ImportFileUpload as jt, StorageUploadFieldBinding as k, ArrayOneOfPreview as kn, IMPORT_BATCH_SIZE as kt, validateCollectionJson as l, useUrlController as ln, FormRail as lr, deleteEntityAction as lt, toSerializableCollectionConfig as m, SelectableTableContext as mn, spanClass as mr, EntityViewBinding as mt, getFullIdPath as n, useSelectionController as nn, renderSkeletonImageThumbnail as nr, extractTouchedValues as nt, CollectionGenerationApiError as o, CollectionRowActions as on, sanitizeUrl as or, zodToFormErrors as ot, fromSerializableProperty as p, SideDialogsControllerContext as pn, isSelfLabellingProperty as pr, DetailViewBinding as pt, useResolvedCollections as q, getEntityTitlePropertyKeyForEntity as qn, getCollectionBySlugWithin as qt, idToPropertiesPath as r, VirtualTableInput$1 as rn, renderSkeletonText as rr, getChanges as rt, DEFAULT_COLLECTION_GENERATION_ENDPOINT as s, useAdminContext as sn, EmptyValue as sr, CollectionViewBinding as st, getFullId as t, resolveViewMode as tn, renderSkeletonIcon as tr, EditViewBinding as tt, fromSerializableCollectionConfig as u, NavigationStateContext as un, RecordMeta as ur, editEntityAction as ut, EntityFormBinding as v, LabelWithIconAndTooltip as vn, getIconForProperty as vr, useCollectionEditorController as vt, getFieldConfig as w, NumberPropertyPreview as wn, isRelationProperty as wr, flattenEntry as wt, DEFAULT_FIELD_CONFIGS as x, ArrayOfMapsPreview as xn, getPropertyInPath$1 as xr, ImportNewPropertyFieldPreview as xt, EntityForm as y, LabelWithIcon as yn, getIconForWidget as yr, ConfigControllerProvider as yt, ArrayOfReferencesFieldBinding as z, SidePanelControllerContext as zn, SearchIconsView as zt };
|
|
24568
24657
|
|
|
24569
|
-
//# sourceMappingURL=util-
|
|
24658
|
+
//# sourceMappingURL=util-BKtHPLe4.js.map
|