@nocobase/plugin-ui-layout 2.2.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE.txt +107 -0
  2. package/README.md +17 -0
  3. package/client-v2.d.ts +2 -0
  4. package/client-v2.js +1 -0
  5. package/client.d.ts +2 -0
  6. package/client.js +1 -0
  7. package/dist/client/index.d.ts +9 -0
  8. package/dist/client/index.js +10 -0
  9. package/dist/client/plugin.d.ts +12 -0
  10. package/dist/client-v2/647.3a2f92424b5ce814.js +10 -0
  11. package/dist/client-v2/983.f95caf8d9687987d.js +10 -0
  12. package/dist/client-v2/index.d.ts +11 -0
  13. package/dist/client-v2/index.js +10 -0
  14. package/dist/client-v2/layoutRegistration.d.ts +28 -0
  15. package/dist/client-v2/locale.d.ts +9 -0
  16. package/dist/client-v2/mobileOpenViewAction.d.ts +206 -0
  17. package/dist/client-v2/mobilePageModelResolution.d.ts +9 -0
  18. package/dist/client-v2/mobileRouteRepository.d.ts +44 -0
  19. package/dist/client-v2/models/MobileLayoutModel.d.ts +102 -0
  20. package/dist/client-v2/models/MobileMenuComponents.d.ts +10 -0
  21. package/dist/client-v2/models/MobileMenuModels.d.ts +97 -0
  22. package/dist/client-v2/models/MobileMenuUtils.d.ts +30 -0
  23. package/dist/client-v2/models/MobilePageModels.d.ts +26 -0
  24. package/dist/client-v2/models/mobileComponents.d.ts +18 -0
  25. package/dist/client-v2/models/mobileFlowCompat.d.ts +61 -0
  26. package/dist/client-v2/models/mobileThemeToken.d.ts +25 -0
  27. package/dist/client-v2/pages/RoutesPage.d.ts +22 -0
  28. package/dist/client-v2/pages/UiLayoutsPage.d.ts +80 -0
  29. package/dist/client-v2/permissions/LayoutAwareDesktopRoutesPermissionsTab.d.ts +22 -0
  30. package/dist/client-v2/permissions/layoutAwareDesktopRoutesPermissions.d.ts +22 -0
  31. package/dist/client-v2/plugin.d.ts +14 -0
  32. package/dist/constants.d.ts +29 -0
  33. package/dist/constants.js +64 -0
  34. package/dist/externalVersion.js +33 -0
  35. package/dist/index.d.ts +10 -0
  36. package/dist/index.js +48 -0
  37. package/dist/locale/en-US.json +163 -0
  38. package/dist/locale/zh-CN.json +163 -0
  39. package/dist/server/collections/desktopRoutes.d.ts +14 -0
  40. package/dist/server/collections/desktopRoutes.js +48 -0
  41. package/dist/server/collections/uiLayouts.d.ts +10 -0
  42. package/dist/server/collections/uiLayouts.js +85 -0
  43. package/dist/server/ensureDefaultUiLayout.d.ts +10 -0
  44. package/dist/server/ensureDefaultUiLayout.js +129 -0
  45. package/dist/server/index.d.ts +9 -0
  46. package/dist/server/index.js +42 -0
  47. package/dist/server/migrations/20260601090000-ensure-default-admin-layout.d.ts +13 -0
  48. package/dist/server/migrations/20260601090000-ensure-default-admin-layout.js +39 -0
  49. package/dist/server/migrations/20260615090000-backfill-admin-layout-desktop-routes.d.ts +15 -0
  50. package/dist/server/migrations/20260615090000-backfill-admin-layout-desktop-routes.js +94 -0
  51. package/dist/server/plugin.d.ts +19 -0
  52. package/dist/server/plugin.js +662 -0
  53. package/package.json +37 -0
  54. package/server.d.ts +2 -0
  55. package/server.js +1 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { BaseLayoutModel, BaseLayoutRouteCoordinator, type RouteModel, type RoutePageMeta } from '@nocobase/client-v2';
10
+ import React, { type ReactNode } from 'react';
11
+ import { NocoBaseDesktopRouteType, type NocoBaseDesktopRoute } from './mobileFlowCompat';
12
+ import { type MobileLayoutMenuStructure, type MobileTabNode, type MobileTabNodeOptions } from './MobileMenuModels';
13
+ type MobileHomeAddMenuKey = 'page' | 'link';
14
+ type FakeMobileDesktopRoute = {
15
+ key: string;
16
+ schemaUid: string;
17
+ type: NocoBaseDesktopRouteType | MobileHomeAddMenuKey;
18
+ label: string;
19
+ description?: string;
20
+ icon: ReactNode;
21
+ sort: number;
22
+ path?: string;
23
+ href?: string;
24
+ route?: NocoBaseDesktopRoute;
25
+ hidden?: boolean;
26
+ hideInMenu?: boolean;
27
+ children?: FakeMobileDesktopRoute[];
28
+ };
29
+ type MobileHomeTabItem = {
30
+ key: string;
31
+ label: string;
32
+ icon: ReactNode;
33
+ active?: boolean;
34
+ };
35
+ type MobileHomeAddMenuItem = {
36
+ key: MobileHomeAddMenuKey;
37
+ label: string;
38
+ icon: ReactNode;
39
+ };
40
+ type MobileTabSettingsMenuKey = 'edit' | 'linkageRules' | 'copyUid' | 'delete';
41
+ type MobileTabSettingsMenuItem = {
42
+ key: MobileTabSettingsMenuKey;
43
+ label: string;
44
+ danger?: boolean;
45
+ };
46
+ type MobileAddBlockMenuGroup = {
47
+ key: string;
48
+ label: string;
49
+ children: Array<{
50
+ key: string;
51
+ label: string;
52
+ }>;
53
+ };
54
+ type MobileTabConfigurationValues = {
55
+ title?: string;
56
+ icon?: string;
57
+ href?: string;
58
+ };
59
+ type Translate = (key: string) => string;
60
+ export declare const FLOW_SETTINGS_PREFERENCE_STORAGE_KEY = "NOCOBASE_V2_FLOW_SETTINGS_ENABLED";
61
+ export declare const FLOW_SETTINGS_PREFERENCE_CHANGE_EVENT = "nocobase:v2:flow-settings-preference-change";
62
+ export declare const MOBILE_TAB_FLOW_SETTINGS_OPTIONS: {
63
+ readonly showBackground: false;
64
+ readonly showBorder: false;
65
+ readonly showDynamicFlowsEditor: false;
66
+ readonly toolbarPosition: "inside";
67
+ };
68
+ declare class MobileLayoutRouteCoordinator extends BaseLayoutRouteCoordinator {
69
+ registerPage(pageUid: string, meta: RoutePageMeta): RouteModel<import("@nocobase/flow-engine").DefaultStructure>;
70
+ }
71
+ export declare function readMobileFlowSettingsPreference(): boolean;
72
+ export declare function writeMobileFlowSettingsPreference(enabled: boolean): void;
73
+ export declare function normalizeAccessibleDesktopRoutesToMobileRoutes(routes: NocoBaseDesktopRoute[], t: Translate, parentIndexPath?: number[], basePathname?: string): FakeMobileDesktopRoute[];
74
+ export declare function createFakeMobileDesktopRoutes(t: Translate): FakeMobileDesktopRoute[];
75
+ export declare function createMobileHomeMenuItems(t: Translate): FakeMobileDesktopRoute[];
76
+ export declare function createMobileHomeTabItemsFromDesktopRoutes(routes: FakeMobileDesktopRoute[], activeRouteKey?: string): MobileHomeTabItem[];
77
+ export declare function createMobileHomeTabItems(t: Translate): MobileHomeTabItem[];
78
+ export declare function createMobileHomeAddMenuItems(t: Translate): MobileHomeAddMenuItem[];
79
+ export declare function createMobileTabSettingsMenuItems(t: Translate): MobileTabSettingsMenuItem[];
80
+ export declare function createMobileAddBlockMenuItems(t: Translate): MobileAddBlockMenuGroup[];
81
+ export declare function createMobileDesktopRouteCreationValues(type: MobileHomeAddMenuKey, values?: MobileTabConfigurationValues): {
82
+ route: NocoBaseDesktopRoute;
83
+ activeRouteKey: string;
84
+ };
85
+ export declare class MobileLayoutModel extends BaseLayoutModel<MobileLayoutMenuStructure> {
86
+ menuRouteRefreshVersion: number;
87
+ constructor(options: ConstructorParameters<typeof BaseLayoutModel>[0]);
88
+ protected onMount(): void;
89
+ refreshMenuRouteTree(): void;
90
+ syncMenuRoutes(routes: NocoBaseDesktopRoute[], options?: {
91
+ includeHidden?: boolean;
92
+ }): void;
93
+ protected createRouteCoordinator(): MobileLayoutRouteCoordinator;
94
+ registerRoutePage(pageUid: string, meta: Parameters<BaseLayoutModel['registerRoutePage']>[1]): RouteModel<import("@nocobase/flow-engine").DefaultStructure>;
95
+ getMobileBasePathname(): string;
96
+ getActiveMobileTabKey(fallbackActiveKey?: string): string;
97
+ getMobileViewStackDepth(): number;
98
+ shouldShowMobileTabBar(): boolean;
99
+ toMobileTabNodes(options: MobileTabNodeOptions): MobileTabNode[];
100
+ render(): React.JSX.Element;
101
+ }
102
+ export default MobileLayoutModel;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ export declare const MobileMenuSettingsIconPicker: React.ForwardRefExoticComponent<Omit<Partial<import("./mobileFlowCompat").IconPickerProps> & React.RefAttributes<unknown>, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { FlowModel } from '@nocobase/flow-engine';
10
+ import React, { type ReactNode } from 'react';
11
+ import { NocoBaseDesktopRouteType, type NocoBaseDesktopRoute } from './mobileFlowCompat';
12
+ import { type MobileRouteTitleTranslator } from './MobileMenuUtils';
13
+ export { MobileMenuSettingsIconPicker } from './MobileMenuComponents';
14
+ export { collectMobileTabRoutes, getMobilePagePath, toMobileRouterNavigationPath } from './MobileMenuUtils';
15
+ export type MobileTabNode = {
16
+ key: string;
17
+ label: ReactNode;
18
+ icon: ReactNode;
19
+ type: NocoBaseDesktopRouteType.flowPage | NocoBaseDesktopRouteType.link;
20
+ active?: boolean;
21
+ path?: string;
22
+ href?: string;
23
+ route: NocoBaseDesktopRoute;
24
+ model: MobileLayoutMenuItemModel;
25
+ };
26
+ export type MobileTabNodeOptions = {
27
+ activeKey?: string;
28
+ basePathname?: string;
29
+ t: MobileRouteTitleTranslator;
30
+ };
31
+ export type MobileLayoutMenuStructure = {
32
+ subModels: {
33
+ menuItems?: MobileLayoutMenuItemModel[];
34
+ };
35
+ };
36
+ type MobileMenuItemsParent = FlowModel<MobileLayoutMenuStructure> & {
37
+ subModels: {
38
+ menuItems?: MobileLayoutMenuItemModel[];
39
+ };
40
+ };
41
+ export declare function reconcileMobileLayoutMenuItems(parent: MobileMenuItemsParent, routes: NocoBaseDesktopRoute[], parentRoute?: NocoBaseDesktopRoute): void;
42
+ export type MobileMenuDragMoveOptions = {
43
+ sourceId: string | number;
44
+ targetId: string | number;
45
+ sortField: 'sort';
46
+ };
47
+ export declare function resolveMobileMenuDragMoveOptions(activeModel?: FlowModel, overModel?: FlowModel): MobileMenuDragMoveOptions | undefined;
48
+ export declare function resolveMobileMenuDragMoveOptionsFromEvent(flowEngine: {
49
+ getModel: (uid: string) => FlowModel | undefined;
50
+ }, event: {
51
+ active?: {
52
+ id?: string | number;
53
+ };
54
+ over?: {
55
+ id?: string | number;
56
+ } | null;
57
+ }): MobileMenuDragMoveOptions;
58
+ export declare class MobileLayoutMenuItemModel extends FlowModel {
59
+ private route?;
60
+ private parentRoute?;
61
+ private routeHidden;
62
+ private linkageHidden;
63
+ private persistedStateHydrated;
64
+ private persistedStateHydrating?;
65
+ private initialPersistedInstanceFlowCount;
66
+ private refreshParentMenuRouteTree;
67
+ onInit(options: Parameters<FlowModel['onInit']>[0]): void;
68
+ private applyHiddenState;
69
+ private ensureLinkageOriginalProps;
70
+ onDispatchEventStart(...args: Parameters<FlowModel['onDispatchEventStart']>): Promise<void>;
71
+ syncFromRoute(route: NocoBaseDesktopRoute, parentRoute?: NocoBaseDesktopRoute): void;
72
+ setHidden(value: boolean): void;
73
+ getRoute(): NocoBaseDesktopRoute;
74
+ getParentRoute(): NocoBaseDesktopRoute;
75
+ private shouldHydratePersistedState;
76
+ private hasPersistedMenuInstanceFlowFlag;
77
+ private getCurrentPersistedInstanceFlowCount;
78
+ private hasPersistableMenuLinkageRules;
79
+ private hasCurrentPersistedMenuState;
80
+ private getRouteRepository;
81
+ private buildRouteOptionsWithPersistedFlowFlag;
82
+ private shouldDestroyPersistedStateOnDelete;
83
+ private syncPersistedFlowRouteFlag;
84
+ private destroyPersistedState;
85
+ private hydratePersistedState;
86
+ private hasPersistableInstanceFlows;
87
+ serialize(): ReturnType<FlowModel['serialize']>;
88
+ updateMenuRoute(values: Partial<NocoBaseDesktopRoute>): Promise<void>;
89
+ deleteMenuRoute(): Promise<void>;
90
+ destroy(): Promise<boolean>;
91
+ saveStepParams(): Promise<boolean>;
92
+ save(): Promise<boolean>;
93
+ toMobileTabNode(options: MobileTabNodeOptions): MobileTabNode | null;
94
+ protected renderHiddenInConfig(): ReactNode | undefined;
95
+ render(): string | number | true | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>;
96
+ }
97
+ export default MobileLayoutMenuItemModel;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ import { NocoBaseDesktopRouteType, type NocoBaseDesktopRoute } from './mobileFlowCompat';
11
+ export type MobileRouteTitleTranslator = (key: string) => string;
12
+ export type MobileTabRouteCollectOptions = {
13
+ includeHidden?: boolean;
14
+ };
15
+ export type MobileTabRoute = NocoBaseDesktopRoute & {
16
+ type: NocoBaseDesktopRouteType.flowPage | NocoBaseDesktopRouteType.link;
17
+ };
18
+ export declare function getMobileRouteIdentity(route: NocoBaseDesktopRoute, fallbackIndex: number): string | number;
19
+ export declare function getMobileRouteTabKey(route: NocoBaseDesktopRoute, fallbackIndex: number): string;
20
+ export declare function mobileRouteTreeContainsTabKey(routes: NocoBaseDesktopRoute[] | undefined, tabKey: string | undefined): any;
21
+ export declare function isMobileTabRoute(route: NocoBaseDesktopRoute): route is MobileTabRoute;
22
+ export declare function isVisibleMobileTabRoute(route: NocoBaseDesktopRoute, options?: MobileTabRouteCollectOptions): boolean;
23
+ export declare function collectMobileTabRoutes(routes?: NocoBaseDesktopRoute[], options?: MobileTabRouteCollectOptions): NocoBaseDesktopRoute[];
24
+ export declare function getMobileRoutePageUid(route: NocoBaseDesktopRoute): string;
25
+ export declare function getMobilePagePath(basePathname: string | undefined, route: NocoBaseDesktopRoute): string;
26
+ export declare function getMobileLinkRouteHref(route: NocoBaseDesktopRoute | undefined): string;
27
+ export declare function toMobileRouterNavigationPath(pathname: string, basename?: string): string;
28
+ export declare function getMobileRouteTitle(route: NocoBaseDesktopRoute, t: MobileRouteTitleTranslator): string;
29
+ export declare function getMobileRouteIcon(route: NocoBaseDesktopRoute): React.JSX.Element;
30
+ export declare function getMobileMenuItemUid(parentUid: string, route: NocoBaseDesktopRoute, index: number): string;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { ChildPageModel, RootPageModel } from '@nocobase/client-v2';
10
+ import { type CreateModelOptions } from '@nocobase/flow-engine';
11
+ import React from 'react';
12
+ export declare class MobileRootPageModel extends RootPageModel {
13
+ createPageTabModelOptions: () => CreateModelOptions;
14
+ tabBarExtraContent: any;
15
+ constructor(options: ConstructorParameters<typeof RootPageModel>[0]);
16
+ saveStepParams(): Promise<void>;
17
+ render(): React.JSX.Element;
18
+ }
19
+ export declare class MobileChildPageModel extends ChildPageModel {
20
+ createPageTabModelOptions: () => CreateModelOptions;
21
+ tabBarExtraContent: any;
22
+ constructor(options: ConstructorParameters<typeof ChildPageModel>[0]);
23
+ private renderTabsWithTitlebarBackButton;
24
+ renderBackButtonWhenTabsDisabled(): React.JSX.Element;
25
+ render(): React.JSX.Element;
26
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React, { type ReactNode } from 'react';
10
+ export declare function MobileBackButton(): React.JSX.Element;
11
+ export declare function useMobilePageClassName(): string;
12
+ export declare function MobilePageSurface(props: {
13
+ title?: ReactNode;
14
+ displayTitle?: boolean;
15
+ titlebarLeft?: ReactNode;
16
+ children: ReactNode;
17
+ className?: string;
18
+ }): React.JSX.Element;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { Icon as CoreIcon } from '@nocobase/client-v2';
10
+ import React from 'react';
11
+ export declare enum NocoBaseDesktopRouteType {
12
+ group = "group",
13
+ page = "page",
14
+ flowRoute = "flowRoute",
15
+ link = "link",
16
+ tabs = "tabs",
17
+ flowPage = "flowPage"
18
+ }
19
+ export interface NocoBaseDesktopRouteOptions {
20
+ hasPersistedMenuInstanceFlow?: boolean;
21
+ [key: string]: unknown;
22
+ }
23
+ export interface NocoBaseDesktopRoute {
24
+ id?: number;
25
+ parentId?: number;
26
+ children?: NocoBaseDesktopRoute[];
27
+ title?: string;
28
+ tooltip?: string;
29
+ icon?: string;
30
+ schemaUid?: string;
31
+ menuSchemaUid?: string;
32
+ tabSchemaName?: string;
33
+ pageSchemaUid?: string;
34
+ type?: NocoBaseDesktopRouteType;
35
+ options?: NocoBaseDesktopRouteOptions;
36
+ sort?: number;
37
+ hideInMenu?: boolean;
38
+ enableTabs?: boolean;
39
+ hidden?: boolean;
40
+ roles?: Array<{
41
+ name: string;
42
+ title: string;
43
+ }>;
44
+ createdAt?: string;
45
+ updatedAt?: string;
46
+ createdBy?: unknown;
47
+ updatedBy?: unknown;
48
+ }
49
+ export declare const zIndexContext: React.Context<number>;
50
+ export interface IconPickerProps {
51
+ value?: string;
52
+ onChange?: (value?: string) => void;
53
+ disabled?: boolean;
54
+ suffix?: React.ReactNode;
55
+ iconSize?: number;
56
+ searchable?: boolean;
57
+ }
58
+ type IconProps = React.ComponentProps<typeof CoreIcon>;
59
+ export declare function Icon(props: IconProps): React.JSX.Element;
60
+ export declare const IconPicker: React.ForwardRefExoticComponent<Partial<IconPickerProps> & React.RefAttributes<unknown>>;
61
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import { type ThemeConfig } from 'antd';
10
+ export type MobileLayoutThemeToken = {
11
+ colorSettings?: string;
12
+ colorTextHeaderMenu?: string;
13
+ };
14
+ export type MobileLayoutCompactThemeToken = NonNullable<ThemeConfig['token']> & MobileLayoutThemeToken & {
15
+ borderRadiusBlock?: number;
16
+ marginBlock?: number;
17
+ marginSM?: number;
18
+ paddingLG?: number;
19
+ paddingPageHorizontal?: number;
20
+ paddingPageVertical?: number;
21
+ paddingSM?: number;
22
+ paddingXS?: number;
23
+ };
24
+ export declare function toMobileCompactThemeToken(token?: Partial<MobileLayoutCompactThemeToken>): MobileLayoutCompactThemeToken;
25
+ export declare function useMobileCompactTheme(): ThemeConfig;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ type RouteLayoutConfig = {
11
+ key: string;
12
+ label: string;
13
+ routePath: string;
14
+ uid: string;
15
+ mobile?: boolean;
16
+ };
17
+ type RoutesPageProps = {
18
+ layoutKey?: RouteLayoutConfig['key'];
19
+ };
20
+ declare const RoutesPage: React.FC<RoutesPageProps>;
21
+ export declare const MobileRoutesPage: React.FC;
22
+ export default RoutesPage;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ type UiLayoutPrimaryKey = string;
11
+ type UiLayoutType = string;
12
+ export type UiLayoutRecord = {
13
+ title: string;
14
+ uid: string;
15
+ layoutType: UiLayoutType;
16
+ routeName: string;
17
+ routePath: string;
18
+ authCheck: boolean;
19
+ enabled: boolean;
20
+ };
21
+ export type UiLayoutFormValues = {
22
+ title: string;
23
+ uid: string;
24
+ layoutType: UiLayoutType;
25
+ routeName: string;
26
+ routePath: string;
27
+ authCheck: boolean;
28
+ enabled: boolean;
29
+ };
30
+ type UiLayoutFormDraftValues = Omit<UiLayoutFormValues, 'routeName' | 'authCheck'> & Partial<Pick<UiLayoutFormValues, 'authCheck'>>;
31
+ type UiLayoutAppLike = {
32
+ router?: {
33
+ basename?: string;
34
+ getBasename?: () => string | undefined;
35
+ };
36
+ getPublicPath?: () => string;
37
+ getRouteUrl?: (pathname: string) => string;
38
+ };
39
+ export type UiLayoutResource = {
40
+ create: (params: {
41
+ values: UiLayoutFormValues;
42
+ }) => Promise<unknown>;
43
+ update: (params: {
44
+ filterByTk: UiLayoutPrimaryKey;
45
+ values: UiLayoutFormValues;
46
+ }) => Promise<unknown>;
47
+ destroy: (params: {
48
+ filterByTk: UiLayoutPrimaryKey | UiLayoutPrimaryKey[];
49
+ }) => Promise<unknown>;
50
+ };
51
+ export declare function createUiLayout(args: {
52
+ resource: UiLayoutResource;
53
+ values: UiLayoutFormValues;
54
+ onSubmitted: () => void;
55
+ }): Promise<void>;
56
+ export declare function updateUiLayout(args: {
57
+ resource: UiLayoutResource;
58
+ filterByTk: UiLayoutPrimaryKey;
59
+ values: UiLayoutFormValues;
60
+ onSubmitted: () => void;
61
+ }): Promise<void>;
62
+ export declare function getRouteNameFromRoutePath(routePath: string): string;
63
+ export declare function isUiLayoutRoutePathFormatValid(routePath?: string): boolean;
64
+ export declare function completeUiLayoutFormValues(values: UiLayoutFormDraftValues): UiLayoutFormValues;
65
+ export declare function updateUiLayoutEnabled(args: {
66
+ resource: UiLayoutResource;
67
+ record: UiLayoutRecord;
68
+ enabled: boolean;
69
+ onSubmitted: () => void;
70
+ }): Promise<void>;
71
+ export declare function deleteUiLayouts(args: {
72
+ resource: UiLayoutResource;
73
+ filterByTk: UiLayoutPrimaryKey | UiLayoutPrimaryKey[];
74
+ onDeleted: () => void;
75
+ }): Promise<void>;
76
+ export declare function getUiLayoutRouteUrl(app: UiLayoutAppLike | undefined, routePath: string): string;
77
+ export declare function getLayoutTypeTagColor(layoutType: string): "blue" | "purple" | "default";
78
+ export declare function isDefaultAdminUiLayout(record: Pick<UiLayoutRecord, 'uid'>): boolean;
79
+ declare const UiLayoutsPage: React.FC;
80
+ export default UiLayoutsPage;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ interface Role {
11
+ name: string;
12
+ title: string;
13
+ allowNewMenu?: boolean;
14
+ }
15
+ interface PermissionTabProps {
16
+ activeKey: string;
17
+ activeRole: Role | null;
18
+ onRoleChange: (role: Role | null) => void;
19
+ }
20
+ export declare function MobileRoutesPermissionsTab(props: PermissionTabProps): React.JSX.Element;
21
+ export default function LayoutAwareDesktopRoutesPermissionsTab(props: PermissionTabProps): React.JSX.Element;
22
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import type { Application } from '@nocobase/client-v2';
10
+ type Translate = (key: string) => unknown;
11
+ export interface LayoutScopedPermissionChangesInput {
12
+ currentLayoutRouteIds: number[];
13
+ nextSelectedIds: number[];
14
+ selectedIds: number[];
15
+ }
16
+ export declare function createDesktopRouteLayoutPermissionFilter(layoutUid: unknown): Record<string, unknown>;
17
+ export declare function getLayoutScopedPermissionChanges(input: LayoutScopedPermissionChangesInput): {
18
+ add: number[];
19
+ remove: number[];
20
+ };
21
+ export declare function registerLayoutAwareDesktopRoutesPermissionsTab(app: Application, t: Translate): void;
22
+ export {};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import type { Application } from '@nocobase/client-v2';
10
+ import { Plugin } from '@nocobase/client-v2';
11
+ export declare class PluginUiLayoutClientV2 extends Plugin<Record<string, never>, Application> {
12
+ load(): Promise<void>;
13
+ }
14
+ export default PluginUiLayoutClientV2;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ export declare const NAMESPACE = "@nocobase/plugin-ui-layout";
10
+ export declare const UI_LAYOUT_TYPE_DESKTOP = "desktop";
11
+ export declare const UI_LAYOUT_TYPE_MOBILE = "mobile";
12
+ export declare const DEFAULT_ADMIN_UI_LAYOUT: {
13
+ readonly title: "Desktop layout";
14
+ readonly uid: "admin-layout-model";
15
+ readonly layoutType: "desktop";
16
+ readonly routeName: "admin";
17
+ readonly routePath: "/admin";
18
+ readonly authCheck: true;
19
+ readonly enabled: true;
20
+ };
21
+ export declare const DEFAULT_MOBILE_UI_LAYOUT: {
22
+ readonly title: "Mobile layout";
23
+ readonly uid: "mobile-layout-model";
24
+ readonly layoutType: "mobile";
25
+ readonly routeName: "mobile";
26
+ readonly routePath: "/mobile";
27
+ readonly authCheck: true;
28
+ readonly enabled: true;
29
+ };
@@ -0,0 +1,64 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var constants_exports = {};
28
+ __export(constants_exports, {
29
+ DEFAULT_ADMIN_UI_LAYOUT: () => DEFAULT_ADMIN_UI_LAYOUT,
30
+ DEFAULT_MOBILE_UI_LAYOUT: () => DEFAULT_MOBILE_UI_LAYOUT,
31
+ NAMESPACE: () => NAMESPACE,
32
+ UI_LAYOUT_TYPE_DESKTOP: () => UI_LAYOUT_TYPE_DESKTOP,
33
+ UI_LAYOUT_TYPE_MOBILE: () => UI_LAYOUT_TYPE_MOBILE
34
+ });
35
+ module.exports = __toCommonJS(constants_exports);
36
+ const NAMESPACE = "@nocobase/plugin-ui-layout";
37
+ const UI_LAYOUT_TYPE_DESKTOP = "desktop";
38
+ const UI_LAYOUT_TYPE_MOBILE = "mobile";
39
+ const DEFAULT_ADMIN_UI_LAYOUT = {
40
+ title: "Desktop layout",
41
+ uid: "admin-layout-model",
42
+ layoutType: UI_LAYOUT_TYPE_DESKTOP,
43
+ routeName: "admin",
44
+ routePath: "/admin",
45
+ authCheck: true,
46
+ enabled: true
47
+ };
48
+ const DEFAULT_MOBILE_UI_LAYOUT = {
49
+ title: "Mobile layout",
50
+ uid: "mobile-layout-model",
51
+ layoutType: UI_LAYOUT_TYPE_MOBILE,
52
+ routeName: "mobile",
53
+ routePath: "/mobile",
54
+ authCheck: true,
55
+ enabled: true
56
+ };
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ DEFAULT_ADMIN_UI_LAYOUT,
60
+ DEFAULT_MOBILE_UI_LAYOUT,
61
+ NAMESPACE,
62
+ UI_LAYOUT_TYPE_DESKTOP,
63
+ UI_LAYOUT_TYPE_MOBILE
64
+ });
@@ -0,0 +1,33 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ module.exports = {
11
+ "@nocobase/client": "2.2.0-beta.6",
12
+ "@nocobase/client-v2": "2.2.0-beta.6",
13
+ "@nocobase/flow-engine": "2.2.0-beta.6",
14
+ "react": "18.2.0",
15
+ "react-router-dom": "6.30.1",
16
+ "@nocobase/database": "2.2.0-beta.6",
17
+ "sequelize": "6.35.2",
18
+ "@nocobase/server": "2.2.0-beta.6",
19
+ "@nocobase/resourcer": "2.2.0-beta.6",
20
+ "@ant-design/icons": "5.6.1",
21
+ "@dnd-kit/core": "6.1.0",
22
+ "@formily/reactive": "2.3.7",
23
+ "@emotion/css": "11.13.4",
24
+ "@nocobase/utils": "2.2.0-beta.6",
25
+ "antd": "5.24.2",
26
+ "@formily/json-schema": "2.3.7",
27
+ "@formily/shared": "2.3.7",
28
+ "@formily/antd-v5": "1.2.3",
29
+ "@formily/react": "2.3.7",
30
+ "lodash": "4.18.1",
31
+ "react-i18next": "11.18.6",
32
+ "ahooks": "3.7.8"
33
+ };