@rebasepro/app 0.9.1-canary.1d2d8b5 → 0.9.1-canary.26fe4b2
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/contexts/AdminModeController.d.ts +1 -1
- package/dist/contexts/CollectionResolverContext.d.ts +23 -0
- package/dist/contexts/ModeController.d.ts +1 -1
- package/dist/contexts/index.d.ts +1 -0
- package/dist/hooks/useBuildAdminModeController.d.ts +1 -1
- package/dist/hooks/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useNavigationBlocker.d.ts +29 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +139 -23
- package/dist/index.es.js.map +1 -1
- package/package.json +8 -10
- package/src/components/LoginView/LoginView.tsx +7 -2
- package/src/components/UnsavedChangesDialog.tsx +1 -1
- package/src/contexts/AdminModeController.tsx +1 -1
- package/src/contexts/CollectionResolverContext.tsx +24 -0
- package/src/contexts/ModeController.tsx +1 -1
- package/src/contexts/index.ts +1 -0
- package/src/core/Rebase.tsx +21 -5
- package/src/hooks/useBuildAdminModeController.tsx +1 -1
- package/src/hooks/useBuildModeController.tsx +1 -1
- package/src/hooks/useNavigationBlocker.tsx +108 -0
- package/src/hooks/useUnsavedChangesDialog.tsx +7 -4
- package/src/index.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { AdminModeController } from "../hooks";
|
|
2
|
+
import type { AdminModeController } from "../hooks/useAdminModeController";
|
|
3
3
|
export declare const AdminModeControllerContext: React.Context<AdminModeController>;
|
|
4
4
|
export declare const AdminModeControllerProvider: React.Provider<AdminModeController>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Look up a collection's config by slug.
|
|
4
|
+
*/
|
|
5
|
+
export type CollectionResolver = (slug: string) => {
|
|
6
|
+
properties?: Record<string, unknown>;
|
|
7
|
+
} | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* Lets the layer that owns the collections hand a resolver *up* to the data
|
|
10
|
+
* layer, which needs a collection's primary keys to give its rows an address.
|
|
11
|
+
*
|
|
12
|
+
* The inversion is forced by the composition: `<Rebase client>` builds the data
|
|
13
|
+
* layer, and `<RebaseAdmin collections>` sits inside it — so the collections are
|
|
14
|
+
* not in scope where the data is created, and `Rebase` cannot take them as a
|
|
15
|
+
* prop without giving every headless BaaS app a collections argument it has no
|
|
16
|
+
* use for.
|
|
17
|
+
*
|
|
18
|
+
* Registration is a ref write, so it is safe to call during render — and it has
|
|
19
|
+
* to be. The views that fetch rows are *below* the registrar, and child effects
|
|
20
|
+
* run before parent effects, so registering in an effect would bind after the
|
|
21
|
+
* first page of rows had already been converted.
|
|
22
|
+
*/
|
|
23
|
+
export declare const CollectionResolverRegistrationContext: React.Context<(resolver: CollectionResolver | undefined) => void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { ModeController } from "../hooks";
|
|
2
|
+
import type { ModeController } from "../hooks/useModeController";
|
|
3
3
|
export declare const ModeControllerContext: React.Context<ModeController>;
|
|
4
4
|
export declare const ModeControllerProvider: React.Provider<ModeController>;
|
package/dist/contexts/index.d.ts
CHANGED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Blocker, BlockerFunction } from "react-router-dom";
|
|
3
|
+
/**
|
|
4
|
+
* Owns the single React Router blocker for the whole app.
|
|
5
|
+
*
|
|
6
|
+
* React Router only honours **one** blocker at a time: `shouldBlockNavigation`
|
|
7
|
+
* picks the last-registered blocker function and silently ignores every other
|
|
8
|
+
* one (it only logs a dev warning). Because blockers register in a `useEffect`,
|
|
9
|
+
* the winner is whichever surface mounted most recently — so an unsaved-changes
|
|
10
|
+
* guard could be disabled by an unrelated component mounting after it.
|
|
11
|
+
*
|
|
12
|
+
* This provider registers the only `useBlocker` in the tree and multiplexes it,
|
|
13
|
+
* so every surface that needs to guard navigation gets a say regardless of
|
|
14
|
+
* mount order. Surfaces register through {@link useNavigationBlocker}.
|
|
15
|
+
*/
|
|
16
|
+
export declare function NavigationBlockerProvider({ children }: {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}): React.JSX.Element;
|
|
19
|
+
/**
|
|
20
|
+
* Guard navigation with `predicate`, sharing the app-wide blocker.
|
|
21
|
+
*
|
|
22
|
+
* Returns a {@link Blocker} that is only ever in the `blocked` state when *this*
|
|
23
|
+
* registration is what blocked the navigation — so several guards can coexist
|
|
24
|
+
* without each of them popping a dialog.
|
|
25
|
+
*
|
|
26
|
+
* Returns an idle blocker when no {@link NavigationBlockerProvider} is mounted
|
|
27
|
+
* above, rather than competing for React Router's single blocker slot.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useNavigationBlocker(predicate: BlockerFunction): Blocker;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from "./contexts";
|
|
|
7
7
|
export { CONTAINER_FULL_WIDTH, ADDITIONAL_TAB_WIDTH, FORM_CONTAINER_WIDTH } from "./internal/common";
|
|
8
8
|
export { useRestoreScroll } from "./internal/useRestoreScroll";
|
|
9
9
|
export { useUnsavedChangesDialog } from "./hooks/useUnsavedChangesDialog";
|
|
10
|
+
export { NavigationBlockerProvider, useNavigationBlocker } from "./hooks/useNavigationBlocker";
|
|
10
11
|
export type { UnsavedChangesDialogProps } from "./components/UnsavedChangesDialog";
|
|
11
12
|
export { UnsavedChangesDialog } from "./components/UnsavedChangesDialog";
|
|
12
13
|
export * from "./i18n/RebaseI18nProvider";
|
package/dist/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { createContext, lazy, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
1
|
+
import React, { createContext, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
2
2
|
import { Alert, AlertCircleIcon, AlertTriangleIcon, AppWindow, ArrowLeftIcon, Avatar, BooleanSwitch, Button, CHIP_COLORS, Card, CenteredView, CheckIcon, Checkbox, ChevronDownIcon, ChevronsLeftIcon, ChevronsRightIcon, Chip, CircleUserIcon, CircularProgress, ColumnsIcon, Container, Dialog, DialogActions, DialogContent, DialogTitle, ErrorBoundary, FileIcon, FileTextIcon, FilterChip, FilterIcon, FolderIcon, IconButton, KanbanIcon, KanbanView, LanguagesIcon, LayoutGridIcon, ListIcon, LoadingButton, LogOutIcon, MailIcon, Menu, MenuItem, MoonIcon, MultiSelect, MultiSelectItem, PanelLeftIcon, Paper, PencilIcon, PlusIcon, Popover, SearchBar, Select, SelectItem, Separator, SettingsIcon, Skeleton, SunIcon, SunMoonIcon, Tab, Table, TableBody, TableCell, TableHeader, TableRow, Tabs, TagIcon, TextField, ToggleButtonGroup, Tooltip, Trash2Icon, TypeIcon, Typography, UserIcon, Wand2Icon, cls, colorClassesMapping, coolIconKeys, defaultBorderMixin, getColorSchemeForSeed, iconKeys, iconSize, lucideIcons } from "@rebasepro/ui";
|
|
3
3
|
import { DEFAULT_DATA_SOURCE_KEY, DEFAULT_STORAGE_SOURCE_KEY, EntityReference, EntityRelation, GeoPoint, RebaseApiError, Vector, isLazyComponentRef } from "@rebasepro/types";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -296,6 +296,24 @@ function CollectionScopeProvider({ collection, children }) {
|
|
|
296
296
|
});
|
|
297
297
|
}
|
|
298
298
|
//#endregion
|
|
299
|
+
//#region src/contexts/CollectionResolverContext.tsx
|
|
300
|
+
/**
|
|
301
|
+
* Lets the layer that owns the collections hand a resolver *up* to the data
|
|
302
|
+
* layer, which needs a collection's primary keys to give its rows an address.
|
|
303
|
+
*
|
|
304
|
+
* The inversion is forced by the composition: `<Rebase client>` builds the data
|
|
305
|
+
* layer, and `<RebaseAdmin collections>` sits inside it — so the collections are
|
|
306
|
+
* not in scope where the data is created, and `Rebase` cannot take them as a
|
|
307
|
+
* prop without giving every headless BaaS app a collections argument it has no
|
|
308
|
+
* use for.
|
|
309
|
+
*
|
|
310
|
+
* Registration is a ref write, so it is safe to call during render — and it has
|
|
311
|
+
* to be. The views that fetch rows are *below* the registrar, and child effects
|
|
312
|
+
* run before parent effects, so registering in an effect would bind after the
|
|
313
|
+
* first page of rows had already been converted.
|
|
314
|
+
*/
|
|
315
|
+
var CollectionResolverRegistrationContext = React.createContext(() => void 0);
|
|
316
|
+
//#endregion
|
|
299
317
|
//#region src/hooks/data/useData.tsx
|
|
300
318
|
/**
|
|
301
319
|
* Use this hook to access the unified data API.
|
|
@@ -1062,6 +1080,91 @@ async function deleteEntityWithCallbacks({ data, entity, collection, callbacks,
|
|
|
1062
1080
|
});
|
|
1063
1081
|
}
|
|
1064
1082
|
//#endregion
|
|
1083
|
+
//#region src/hooks/useNavigationBlocker.tsx
|
|
1084
|
+
var IDLE_BLOCKER = {
|
|
1085
|
+
state: "unblocked",
|
|
1086
|
+
proceed: void 0,
|
|
1087
|
+
reset: void 0,
|
|
1088
|
+
location: void 0
|
|
1089
|
+
};
|
|
1090
|
+
var NavigationBlockerContext = createContext(null);
|
|
1091
|
+
/**
|
|
1092
|
+
* Owns the single React Router blocker for the whole app.
|
|
1093
|
+
*
|
|
1094
|
+
* React Router only honours **one** blocker at a time: `shouldBlockNavigation`
|
|
1095
|
+
* picks the last-registered blocker function and silently ignores every other
|
|
1096
|
+
* one (it only logs a dev warning). Because blockers register in a `useEffect`,
|
|
1097
|
+
* the winner is whichever surface mounted most recently — so an unsaved-changes
|
|
1098
|
+
* guard could be disabled by an unrelated component mounting after it.
|
|
1099
|
+
*
|
|
1100
|
+
* This provider registers the only `useBlocker` in the tree and multiplexes it,
|
|
1101
|
+
* so every surface that needs to guard navigation gets a say regardless of
|
|
1102
|
+
* mount order. Surfaces register through {@link useNavigationBlocker}.
|
|
1103
|
+
*/
|
|
1104
|
+
function NavigationBlockerProvider({ children }) {
|
|
1105
|
+
const predicates = useRef(/* @__PURE__ */ new Map());
|
|
1106
|
+
const [blockedBy, setBlockedBy] = useState(null);
|
|
1107
|
+
const blocker = useBlocker(useCallback((args) => {
|
|
1108
|
+
for (const [id, predicate] of predicates.current) if (predicate(args)) {
|
|
1109
|
+
setBlockedBy(id);
|
|
1110
|
+
return true;
|
|
1111
|
+
}
|
|
1112
|
+
setBlockedBy(null);
|
|
1113
|
+
return false;
|
|
1114
|
+
}, []));
|
|
1115
|
+
const register = useCallback((id, predicate) => {
|
|
1116
|
+
predicates.current.set(id, predicate);
|
|
1117
|
+
}, []);
|
|
1118
|
+
const unregister = useCallback((id) => {
|
|
1119
|
+
predicates.current.delete(id);
|
|
1120
|
+
setBlockedBy((current) => current === id ? null : current);
|
|
1121
|
+
}, []);
|
|
1122
|
+
const value = useMemo(() => ({
|
|
1123
|
+
register,
|
|
1124
|
+
unregister,
|
|
1125
|
+
blocker,
|
|
1126
|
+
blockedBy
|
|
1127
|
+
}), [
|
|
1128
|
+
register,
|
|
1129
|
+
unregister,
|
|
1130
|
+
blocker,
|
|
1131
|
+
blockedBy
|
|
1132
|
+
]);
|
|
1133
|
+
return /* @__PURE__ */ jsx(NavigationBlockerContext.Provider, {
|
|
1134
|
+
value,
|
|
1135
|
+
children
|
|
1136
|
+
});
|
|
1137
|
+
}
|
|
1138
|
+
/**
|
|
1139
|
+
* Guard navigation with `predicate`, sharing the app-wide blocker.
|
|
1140
|
+
*
|
|
1141
|
+
* Returns a {@link Blocker} that is only ever in the `blocked` state when *this*
|
|
1142
|
+
* registration is what blocked the navigation — so several guards can coexist
|
|
1143
|
+
* without each of them popping a dialog.
|
|
1144
|
+
*
|
|
1145
|
+
* Returns an idle blocker when no {@link NavigationBlockerProvider} is mounted
|
|
1146
|
+
* above, rather than competing for React Router's single blocker slot.
|
|
1147
|
+
*/
|
|
1148
|
+
function useNavigationBlocker(predicate) {
|
|
1149
|
+
const context = useContext(NavigationBlockerContext);
|
|
1150
|
+
const id = useId();
|
|
1151
|
+
const predicateRef = useRef(predicate);
|
|
1152
|
+
predicateRef.current = predicate;
|
|
1153
|
+
const register = context?.register;
|
|
1154
|
+
const unregister = context?.unregister;
|
|
1155
|
+
useEffect(() => {
|
|
1156
|
+
if (!register || !unregister) return;
|
|
1157
|
+
register(id, (args) => predicateRef.current(args));
|
|
1158
|
+
return () => unregister(id);
|
|
1159
|
+
}, [
|
|
1160
|
+
register,
|
|
1161
|
+
unregister,
|
|
1162
|
+
id
|
|
1163
|
+
]);
|
|
1164
|
+
if (!context) return IDLE_BLOCKER;
|
|
1165
|
+
return context.blockedBy === id ? context.blocker : IDLE_BLOCKER;
|
|
1166
|
+
}
|
|
1167
|
+
//#endregion
|
|
1065
1168
|
//#region src/hooks/useUnsavedChangesDialog.tsx
|
|
1066
1169
|
/**
|
|
1067
1170
|
* A single, unified hook to prevent navigation when there are unsaved changes.
|
|
@@ -1072,7 +1175,7 @@ async function deleteEntityWithCallbacks({ data, entity, collection, callbacks,
|
|
|
1072
1175
|
*/
|
|
1073
1176
|
function useUnsavedChangesDialog(when, onOk) {
|
|
1074
1177
|
const [manualDialogOpen, setManualDialogOpen] = useState(false);
|
|
1075
|
-
const blocker =
|
|
1178
|
+
const blocker = useNavigationBlocker(useCallback(({ currentLocation, nextLocation }) => when && currentLocation.pathname !== nextLocation.pathname, [when]));
|
|
1076
1179
|
useEffect(() => {
|
|
1077
1180
|
if (!when) return;
|
|
1078
1181
|
const handleBeforeUnload = (e) => {
|
|
@@ -9175,10 +9278,10 @@ function LoginForm({ onClose, onForgotPassword, authController, registrationMode
|
|
|
9175
9278
|
};
|
|
9176
9279
|
}, [onClose]);
|
|
9177
9280
|
function handleEnterPassword() {
|
|
9178
|
-
if (email && password && authController.emailPasswordLogin) authController.emailPasswordLogin(email, password);
|
|
9281
|
+
if (email && password && authController.emailPasswordLogin) Promise.resolve(authController.emailPasswordLogin(email, password)).catch(() => void 0);
|
|
9179
9282
|
}
|
|
9180
9283
|
function handleRegistration() {
|
|
9181
|
-
if (email && password && authController.register) authController.register(email, password, displayName);
|
|
9284
|
+
if (email && password && authController.register) Promise.resolve(authController.register(email, password, displayName)).catch(() => void 0);
|
|
9182
9285
|
}
|
|
9183
9286
|
const handleSubmit = (event) => {
|
|
9184
9287
|
event.preventDefault();
|
|
@@ -15432,6 +15535,11 @@ function Rebase(props) {
|
|
|
15432
15535
|
const normalizedDataSources = useMemo(() => {
|
|
15433
15536
|
return dataSourcesProp ?? [];
|
|
15434
15537
|
}, [dataSourcesProp]);
|
|
15538
|
+
const collectionResolverRef = useRef(void 0);
|
|
15539
|
+
const registerCollectionResolver = React.useCallback((resolver) => {
|
|
15540
|
+
collectionResolverRef.current = resolver;
|
|
15541
|
+
}, []);
|
|
15542
|
+
const entityDataOptions = useMemo(() => ({ resolveCollection: (slug) => collectionResolverRef.current?.(slug) }), []);
|
|
15435
15543
|
const dataSourcesRef = useRef(null);
|
|
15436
15544
|
const dataSourcesValue = useMemo(() => {
|
|
15437
15545
|
const sig = normalizedDataSources.map((d) => ({
|
|
@@ -15450,7 +15558,7 @@ function Rebase(props) {
|
|
|
15450
15558
|
...definition,
|
|
15451
15559
|
transport: ds.transport ?? (driver ? "direct" : "server")
|
|
15452
15560
|
};
|
|
15453
|
-
if (driver) sources[ds.key] = buildRebaseData(driver);
|
|
15561
|
+
if (driver) sources[ds.key] = buildRebaseData(driver, entityDataOptions);
|
|
15454
15562
|
}
|
|
15455
15563
|
const value = {
|
|
15456
15564
|
registry,
|
|
@@ -15461,16 +15569,20 @@ function Rebase(props) {
|
|
|
15461
15569
|
value
|
|
15462
15570
|
};
|
|
15463
15571
|
return value;
|
|
15464
|
-
}, [normalizedDataSources]);
|
|
15572
|
+
}, [normalizedDataSources, entityDataOptions]);
|
|
15465
15573
|
const resolvedData = useMemo(() => {
|
|
15466
15574
|
const registeredDefault = dataSourcesValue.sources[DEFAULT_DATA_SOURCE_KEY];
|
|
15467
15575
|
if (registeredDefault) return registeredDefault;
|
|
15468
|
-
if (client?.data) return wrapAsEntityData(client.data);
|
|
15576
|
+
if (client?.data) return wrapAsEntityData(client.data, entityDataOptions);
|
|
15469
15577
|
const built = Object.values(dataSourcesValue.sources);
|
|
15470
15578
|
if (built.length === 1) return built[0];
|
|
15471
15579
|
if (built.length > 1) throw new Error("[Rebase] Several data sources are registered but none is the default. Pass a `client`, or key one `dataSources` entry \"(default)\".");
|
|
15472
15580
|
throw new Error("Rebase requires either `client` or a `dataSources` entry with a driver to be provided");
|
|
15473
|
-
}, [
|
|
15581
|
+
}, [
|
|
15582
|
+
client,
|
|
15583
|
+
dataSourcesValue,
|
|
15584
|
+
entityDataOptions
|
|
15585
|
+
]);
|
|
15474
15586
|
const resolvedStorage = storageSourceProp ?? client?.storage;
|
|
15475
15587
|
const [remoteStorageSources, setRemoteStorageSources] = useState([]);
|
|
15476
15588
|
const authUser = authController.user;
|
|
@@ -15543,6 +15655,7 @@ function Rebase(props) {
|
|
|
15543
15655
|
executeSql: wsAdmin.executeSql.bind(wsAdmin),
|
|
15544
15656
|
fetchAvailableDatabases: wsAdmin.fetchAvailableDatabases?.bind(wsAdmin),
|
|
15545
15657
|
fetchAvailableRoles: wsAdmin.fetchAvailableRoles?.bind(wsAdmin),
|
|
15658
|
+
fetchApplicationRoles: wsAdmin.fetchApplicationRoles?.bind(wsAdmin),
|
|
15546
15659
|
fetchCurrentDatabase: wsAdmin.fetchCurrentDatabase?.bind(wsAdmin),
|
|
15547
15660
|
fetchUnmappedTables: wsAdmin.fetchUnmappedTables?.bind(wsAdmin),
|
|
15548
15661
|
fetchTableMetadata: wsAdmin.fetchTableMetadata?.bind(wsAdmin),
|
|
@@ -15615,20 +15728,23 @@ function Rebase(props) {
|
|
|
15615
15728
|
value: storageSourcesValue,
|
|
15616
15729
|
children: /* @__PURE__ */ jsx(StorageSourceContext.Provider, {
|
|
15617
15730
|
value: resolvedStorage,
|
|
15618
|
-
children: /* @__PURE__ */ jsx(
|
|
15619
|
-
value:
|
|
15620
|
-
children: /* @__PURE__ */ jsx(
|
|
15621
|
-
value:
|
|
15622
|
-
children: /* @__PURE__ */ jsx(
|
|
15623
|
-
value:
|
|
15624
|
-
children: /* @__PURE__ */ jsx(
|
|
15625
|
-
value:
|
|
15626
|
-
children: /* @__PURE__ */ jsx(
|
|
15627
|
-
value:
|
|
15628
|
-
children: /* @__PURE__ */ jsx(
|
|
15629
|
-
|
|
15630
|
-
children
|
|
15631
|
-
|
|
15731
|
+
children: /* @__PURE__ */ jsx(CollectionResolverRegistrationContext.Provider, {
|
|
15732
|
+
value: registerCollectionResolver,
|
|
15733
|
+
children: /* @__PURE__ */ jsx(DataSourcesContext.Provider, {
|
|
15734
|
+
value: dataSourcesValue,
|
|
15735
|
+
children: /* @__PURE__ */ jsx(RebaseDataContext.Provider, {
|
|
15736
|
+
value: resolvedData,
|
|
15737
|
+
children: /* @__PURE__ */ jsx(DatabaseAdminContext.Provider, {
|
|
15738
|
+
value: resolvedDatabaseAdmin,
|
|
15739
|
+
children: /* @__PURE__ */ jsx(AuthControllerContext.Provider, {
|
|
15740
|
+
value: authController,
|
|
15741
|
+
children: /* @__PURE__ */ jsx(EffectiveRoleControllerContext.Provider, {
|
|
15742
|
+
value: activeEffectiveRoleController,
|
|
15743
|
+
children: /* @__PURE__ */ jsx(DialogsProvider, { children: /* @__PURE__ */ jsx(SchemaDriftProvider, { children: /* @__PURE__ */ jsx(RebaseRegistryProvider, { children: /* @__PURE__ */ jsx(RebaseInternal, {
|
|
15744
|
+
loading,
|
|
15745
|
+
children
|
|
15746
|
+
}) }) }) })
|
|
15747
|
+
})
|
|
15632
15748
|
})
|
|
15633
15749
|
})
|
|
15634
15750
|
})
|
|
@@ -16858,6 +16974,6 @@ function useBridgeRegistration(key, value) {
|
|
|
16858
16974
|
]);
|
|
16859
16975
|
}
|
|
16860
16976
|
//#endregion
|
|
16861
|
-
export { ADDITIONAL_TAB_WIDTH, AIIcon, AIModifiedIndicator, AdminModeControllerContext, AdminModeControllerProvider, AnalyticsContext, ApiConfigProvider, AuthApiError, AuthControllerContext, CONTAINER_FULL_WIDTH, CollectionComponentOverrideProvider, CollectionScopeContext, CollectionScopeProvider, ComponentOverrideContext, ConfirmationDialog, CrmDashboardDemo, CustomizationControllerContext, DEFAULT_PAGE_SIZE, DataDriverContext, DataSourcesContext, DialogsControllerContext, DialogsProvider, EffectiveRoleControllerContext, EffectiveRoleControllerProvider, ErrorTooltip, ErrorView, FORM_CONTAINER_WIDTH, GlobalComponentOverrideProvider, IconForView, LanguageToggle, LoginView, ModeControllerContext, ModeControllerProvider, NotFoundPage, PluginProviderStack, REBASE_LOCALE_STORAGE_KEY, Rebase, RebaseAuth, RebaseClientInstanceContext, RebaseDataContext, RebaseI18nProvider, RebaseLogo, RebaseRegistryProvider, RebaseRouter, RebaseRoutes, STUDIO_NAVIGATION_GROUPS, SchemaDriftBanner, SchemaDriftProvider, SnackbarProvider, StorageSourceContext, StorageSourcesContext, StudioBridgeContext, StudioBridgeProvider, StudioBridgeRegistryContext, StudioBridgeRegistryProvider, UIReferenceView, UIStyleGuide, UnsavedChangesDialog, UserConfigurationPersistenceContext, UserDisplay, UserSelectPopover, UserSettingsView, buildCollapsedDefaults, buildEnumLabel, clearAuthConfigCache, clearFetchCache, createAuthConfigCache, createFormexStub, deleteEntityWithCallbacks, en, es, fetchAuthConfig, flattenKeys, getColorScheme, getColumnKeysForProperty, getEntityFromCache, getEntityFromMemoryCache, getEntityPreviewKeys, getEntityTitlePropertyKey, getFormFieldKeys, getIcon, getRelationIncludeParams, getRowHeight, getSubcollectionColumnId, iconsSearch, isEnumValueDisabled, isSchemaDriftError, populateFetchCache, removeEntityFromCache, removeEntityFromMemoryCache, resolveComponentRef, saveEntityToCache, saveEntityToMemoryCache, saveEntityWithCallbacks, useAdminModeController, useAnalyticsController, useApiConfig, useAuthController, useAuthSubscription, useBackendStorageSource, useBridgeRegistration, useBrowserTitleAndIcon, useBuildAdminModeController, useBuildEffectiveRoleController, useBuildLocalConfigurationPersistence, useBuildModeController, useClipboard, useCollapsedGroups, useCollection, useCollectionScope, useColumnIds, useComponentOverride, useCustomizationController, useData, useDataSources, useDataTableController, useDebouncedData, useDialogsController, useEffectiveRoleController, useFetch, useLargeLayout, useModeController, usePermissions, useRebaseAuthController, useRebaseClient, useRebaseContext, useRebaseRegistry, useRebaseRegistryDispatch, useRelationSelector, useResolvedComponent, useRestoreScroll, useSchemaDriftContext, useScrollRestoration, useSlot, useSnackbarController, useStorageSource, useStorageSources, useStorageUploadController, useStudioBreadcrumbs, useStudioCollectionRegistry, useStudioNavigationState, useStudioSidePanelController, useStudioUrlController, useTranslation, useUnsavedChangesDialog, useUserConfigurationPersistence };
|
|
16977
|
+
export { ADDITIONAL_TAB_WIDTH, AIIcon, AIModifiedIndicator, AdminModeControllerContext, AdminModeControllerProvider, AnalyticsContext, ApiConfigProvider, AuthApiError, AuthControllerContext, CONTAINER_FULL_WIDTH, CollectionComponentOverrideProvider, CollectionResolverRegistrationContext, CollectionScopeContext, CollectionScopeProvider, ComponentOverrideContext, ConfirmationDialog, CrmDashboardDemo, CustomizationControllerContext, DEFAULT_PAGE_SIZE, DataDriverContext, DataSourcesContext, DialogsControllerContext, DialogsProvider, EffectiveRoleControllerContext, EffectiveRoleControllerProvider, ErrorTooltip, ErrorView, FORM_CONTAINER_WIDTH, GlobalComponentOverrideProvider, IconForView, LanguageToggle, LoginView, ModeControllerContext, ModeControllerProvider, NavigationBlockerProvider, NotFoundPage, PluginProviderStack, REBASE_LOCALE_STORAGE_KEY, Rebase, RebaseAuth, RebaseClientInstanceContext, RebaseDataContext, RebaseI18nProvider, RebaseLogo, RebaseRegistryProvider, RebaseRouter, RebaseRoutes, STUDIO_NAVIGATION_GROUPS, SchemaDriftBanner, SchemaDriftProvider, SnackbarProvider, StorageSourceContext, StorageSourcesContext, StudioBridgeContext, StudioBridgeProvider, StudioBridgeRegistryContext, StudioBridgeRegistryProvider, UIReferenceView, UIStyleGuide, UnsavedChangesDialog, UserConfigurationPersistenceContext, UserDisplay, UserSelectPopover, UserSettingsView, buildCollapsedDefaults, buildEnumLabel, clearAuthConfigCache, clearFetchCache, createAuthConfigCache, createFormexStub, deleteEntityWithCallbacks, en, es, fetchAuthConfig, flattenKeys, getColorScheme, getColumnKeysForProperty, getEntityFromCache, getEntityFromMemoryCache, getEntityPreviewKeys, getEntityTitlePropertyKey, getFormFieldKeys, getIcon, getRelationIncludeParams, getRowHeight, getSubcollectionColumnId, iconsSearch, isEnumValueDisabled, isSchemaDriftError, populateFetchCache, removeEntityFromCache, removeEntityFromMemoryCache, resolveComponentRef, saveEntityToCache, saveEntityToMemoryCache, saveEntityWithCallbacks, useAdminModeController, useAnalyticsController, useApiConfig, useAuthController, useAuthSubscription, useBackendStorageSource, useBridgeRegistration, useBrowserTitleAndIcon, useBuildAdminModeController, useBuildEffectiveRoleController, useBuildLocalConfigurationPersistence, useBuildModeController, useClipboard, useCollapsedGroups, useCollection, useCollectionScope, useColumnIds, useComponentOverride, useCustomizationController, useData, useDataSources, useDataTableController, useDebouncedData, useDialogsController, useEffectiveRoleController, useFetch, useLargeLayout, useModeController, useNavigationBlocker, usePermissions, useRebaseAuthController, useRebaseClient, useRebaseContext, useRebaseRegistry, useRebaseRegistryDispatch, useRelationSelector, useResolvedComponent, useRestoreScroll, useSchemaDriftContext, useScrollRestoration, useSlot, useSnackbarController, useStorageSource, useStorageSources, useStorageUploadController, useStudioBreadcrumbs, useStudioCollectionRegistry, useStudioNavigationState, useStudioSidePanelController, useStudioUrlController, useTranslation, useUnsavedChangesDialog, useUserConfigurationPersistence };
|
|
16862
16978
|
|
|
16863
16979
|
//# sourceMappingURL=index.es.js.map
|