@spacego/fe-components 0.0.1-alpha.1

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 (113) hide show
  1. package/README.md +37 -0
  2. package/lib/assets/svg/chrome-bg-after.svg.js +4 -0
  3. package/lib/assets/svg/chrome-bg-before.svg.js +4 -0
  4. package/lib/assets/svg/icon-arrows-right.svg.js +4 -0
  5. package/lib/assets/svg/icon-bell.svg.js +4 -0
  6. package/lib/assets/svg/icon-custom.svg.js +4 -0
  7. package/lib/assets/svg/icon-sun-moon.svg.js +4 -0
  8. package/lib/assets/svg/icon-system.svg.js +4 -0
  9. package/lib/assets/svg/login-view.svg.js +4 -0
  10. package/lib/config/constants.js +10 -0
  11. package/lib/config/theme.js +8 -0
  12. package/lib/fe-layouts/auth-layout/index.js +95 -0
  13. package/lib/fe-layouts/basics-layout/components/basics-layout/header.js +102 -0
  14. package/lib/fe-layouts/basics-layout/components/basics-layout/setting-custom-color.js +34 -0
  15. package/lib/fe-layouts/basics-layout/components/basics-layout/setting-drawer.js +118 -0
  16. package/lib/fe-layouts/basics-layout/components/basics-layout/sidebar.js +60 -0
  17. package/lib/fe-layouts/basics-layout/components/basics-layout/tabs.js +60 -0
  18. package/lib/fe-layouts/basics-layout/components/utils/index.js +72 -0
  19. package/lib/fe-layouts/basics-layout/index.js +98 -0
  20. package/lib/fe-layouts/blank-layout/index.js +8 -0
  21. package/lib/fe-layouts/context/context.js +6 -0
  22. package/lib/fe-layouts/context/global-context.provider.js +53 -0
  23. package/lib/fe-layouts/layout.js +49 -0
  24. package/lib/hooks/use-auth.hook.js +23 -0
  25. package/lib/index.css +1 -0
  26. package/lib/index.js +48 -0
  27. package/lib/router/index.js +43 -0
  28. package/lib/router/permission.js +43 -0
  29. package/lib/router/routes.js +57 -0
  30. package/lib/router/utils.js +105 -0
  31. package/lib/store/modules/layout-config.store.js +217 -0
  32. package/lib/store/modules/theme.store.js +60 -0
  33. package/lib/types/config/constants.d.ts +9 -0
  34. package/lib/types/config/index.d.ts +2 -0
  35. package/lib/types/config/theme.d.ts +7 -0
  36. package/lib/types/fe-layouts/auth-layout/index.d.ts +1 -0
  37. package/lib/types/fe-layouts/basics-layout/components/basics-layout/header.d.ts +7 -0
  38. package/lib/types/fe-layouts/basics-layout/components/basics-layout/setting-custom-color.d.ts +3 -0
  39. package/lib/types/fe-layouts/basics-layout/components/basics-layout/setting-drawer.d.ts +6 -0
  40. package/lib/types/fe-layouts/basics-layout/components/basics-layout/sidebar.d.ts +11 -0
  41. package/lib/types/fe-layouts/basics-layout/components/basics-layout/tabs.d.ts +9 -0
  42. package/lib/types/fe-layouts/basics-layout/components/utils/index.d.ts +41 -0
  43. package/lib/types/fe-layouts/basics-layout/index.d.ts +1 -0
  44. package/lib/types/fe-layouts/blank-layout/index.d.ts +1 -0
  45. package/lib/types/fe-layouts/context/context.d.ts +7 -0
  46. package/lib/types/fe-layouts/context/global-context.provider.d.ts +2 -0
  47. package/lib/types/fe-layouts/context/index.d.ts +3 -0
  48. package/lib/types/fe-layouts/index.d.ts +6 -0
  49. package/lib/types/fe-layouts/layout.d.ts +7 -0
  50. package/lib/types/hooks/index.d.ts +1 -0
  51. package/lib/types/hooks/use-auth.hook.d.ts +8 -0
  52. package/lib/types/index.d.ts +10 -0
  53. package/lib/types/router/index.d.ts +40 -0
  54. package/lib/types/router/permission.d.ts +23 -0
  55. package/lib/types/router/routes.d.ts +11 -0
  56. package/lib/types/router/utils.d.ts +56 -0
  57. package/lib/types/store/index.d.ts +2 -0
  58. package/lib/types/store/modules/layout-config.store.d.ts +612 -0
  59. package/lib/types/store/modules/theme.store.d.ts +186 -0
  60. package/lib/types/utils/icon.d.ts +14 -0
  61. package/lib/types/utils/index.d.ts +2 -0
  62. package/lib/types/utils/theme.d.ts +43 -0
  63. package/lib/utils/icon.js +13 -0
  64. package/lib/utils/theme.js +100 -0
  65. package/package.json +60 -0
  66. package/src/assets/styles/animate.css +62 -0
  67. package/src/assets/styles/index.css +49 -0
  68. package/src/assets/svg/chrome-bg-after.svg +1 -0
  69. package/src/assets/svg/chrome-bg-before.svg +1 -0
  70. package/src/assets/svg/icon-arrows-right.svg +1 -0
  71. package/src/assets/svg/icon-bell.svg +1 -0
  72. package/src/assets/svg/icon-custom.svg +1 -0
  73. package/src/assets/svg/icon-sun-moon.svg +1 -0
  74. package/src/assets/svg/icon-system.svg +1 -0
  75. package/src/assets/svg/loading.svg +13 -0
  76. package/src/assets/svg/login-view.svg +193 -0
  77. package/src/config/constants.ts +19 -0
  78. package/src/config/index.ts +2 -0
  79. package/src/config/theme.ts +20 -0
  80. package/src/fe-layouts/auth-layout/index.scss +34 -0
  81. package/src/fe-layouts/auth-layout/index.tsx +121 -0
  82. package/src/fe-layouts/basics-layout/components/basics-layout/header.tsx +148 -0
  83. package/src/fe-layouts/basics-layout/components/basics-layout/setting-custom-color.tsx +52 -0
  84. package/src/fe-layouts/basics-layout/components/basics-layout/setting-drawer.tsx +165 -0
  85. package/src/fe-layouts/basics-layout/components/basics-layout/sidebar.tsx +88 -0
  86. package/src/fe-layouts/basics-layout/components/basics-layout/tabs.tsx +94 -0
  87. package/src/fe-layouts/basics-layout/components/utils/index.ts +142 -0
  88. package/src/fe-layouts/basics-layout/index.scss +110 -0
  89. package/src/fe-layouts/basics-layout/index.tsx +207 -0
  90. package/src/fe-layouts/blank-layout/index.tsx +12 -0
  91. package/src/fe-layouts/context/context.ts +11 -0
  92. package/src/fe-layouts/context/global-context.d.ts +241 -0
  93. package/src/fe-layouts/context/global-context.provider.tsx +81 -0
  94. package/src/fe-layouts/context/index.ts +10 -0
  95. package/src/fe-layouts/index.ts +13 -0
  96. package/src/fe-layouts/layout.tsx +74 -0
  97. package/src/hooks/index.ts +1 -0
  98. package/src/hooks/use-auth.hook.ts +54 -0
  99. package/src/index.ts +21 -0
  100. package/src/router/index.ts +110 -0
  101. package/src/router/permission.tsx +134 -0
  102. package/src/router/routes.tsx +94 -0
  103. package/src/router/utils.ts +283 -0
  104. package/src/store/index.ts +9 -0
  105. package/src/store/modules/layout-config.store.ts +343 -0
  106. package/src/store/modules/theme.store.ts +99 -0
  107. package/src/typings/index.d.ts +59 -0
  108. package/src/typings/shims-axios.d.ts +38 -0
  109. package/src/utils/icon.tsx +32 -0
  110. package/src/utils/index.ts +9 -0
  111. package/src/utils/theme.ts +219 -0
  112. package/tsconfig.json +28 -0
  113. package/vite.config.ts +85 -0
@@ -0,0 +1,41 @@
1
+ import { RouteObject } from 'react-router-dom';
2
+ import { MenuItem } from '../../../../router/utils';
3
+ /** RouteNode 类型定义 */
4
+ export type RouteNode = RouteObject & {
5
+ parentId?: string;
6
+ children?: RouteNode[];
7
+ handle?: {
8
+ title?: string;
9
+ isIndependentMenu?: boolean;
10
+ activeRouteMenuId?: string;
11
+ };
12
+ };
13
+ /**
14
+ * 规范化路径(统一格式,去除末尾斜杠)
15
+ */
16
+ export declare function normalizePath(path?: string): string;
17
+ /**
18
+ * 根据路径查找对应的路由节点
19
+ * 优先查找子路由,避免匹配到布局路由(如 root)
20
+ */
21
+ export declare function findRouteByPath(path: string, routeList: RouteNode[]): RouteNode | null;
22
+ /**
23
+ * 构建路由映射表(id -> RouteNode)
24
+ */
25
+ export declare function buildRouteMap(routeList: RouteNode[]): Map<string, RouteNode>;
26
+ /**
27
+ * 根据 id 查找路由节点
28
+ */
29
+ export declare function getRouteById(id: string, routeMap: Map<string, RouteNode>): RouteNode | null;
30
+ /**
31
+ * 递归查找父级路由链(从根到当前),根据 isIndependentMenu 过滤层级
32
+ */
33
+ export declare function findParentRoutes(route: RouteNode, routeMap: Map<string, RouteNode>): RouteNode[];
34
+ /**
35
+ * 递归查找菜单的父级 key
36
+ */
37
+ export declare function findMenuParentKeys(targetKey: string, menuList: MenuItem[], parents?: string[]): string[] | null;
38
+ /**
39
+ * 递归查找菜单项
40
+ */
41
+ export declare function findMenuByKey(key: string, menuList: MenuItem[]): MenuItem | null;
@@ -0,0 +1 @@
1
+ export default function BasicsLayout(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export default function BlankLayout(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { IGlobalContext } from './global-context';
2
+ export declare const GlobalContext: import('react').Context<IGlobalContext>;
3
+ /**
4
+ * @name 使用全局上下文
5
+ * @returns
6
+ */
7
+ export declare const useGlobal: () => IGlobalContext;
@@ -0,0 +1,2 @@
1
+ import { IGlobalContextProps } from '.';
2
+ export default function GlobalContextProvider(props: React.PropsWithChildren<IGlobalContextProps>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export * from './context';
2
+ export * from './global-context.d';
3
+ export { default as GlobalContextProvider } from './global-context.provider';
@@ -0,0 +1,6 @@
1
+ export { default as AuthLayout } from './auth-layout';
2
+ export { default as BasicsLayout } from './basics-layout';
3
+ export { default as BlankLayout } from './blank-layout';
4
+ export * from './context';
5
+ export type { IFeLayoutProps } from './layout';
6
+ export { default as FeLayout } from './layout';
@@ -0,0 +1,7 @@
1
+ export interface IFeLayoutProps {
2
+ /**
3
+ * 布局类型,空白布局和后台布局
4
+ */
5
+ layoutType: 'blank' | 'basic' | 'auth';
6
+ }
7
+ export default function FeLayout(props: IFeLayoutProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './use-auth.hook';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 登录和退出登录的 hook
3
+ * @returns
4
+ */
5
+ export declare function useAuth(): {
6
+ login: (token: string, redirectTo?: string) => void;
7
+ logout: () => void;
8
+ };
@@ -0,0 +1,10 @@
1
+ /**------------------------------------------- utils ------------------------------------------- */
2
+ export * from './utils';
3
+ /**------------------------------------------- store ------------------------------------------- */
4
+ export * from './store';
5
+ /**------------------------------------------- config ------------------------------------------- */
6
+ export * from './config';
7
+ /**------------------------------------------- router ------------------------------------------- */
8
+ export * from './router';
9
+ /**------------------------------------------- components ------------------------------------------- */
10
+ export * from './fe-layouts';
@@ -0,0 +1,40 @@
1
+ import { ComponentType } from 'react';
2
+ import { RouteObject } from 'react-router-dom';
3
+ import { TokenHelpers } from './permission';
4
+ import { TModule } from './utils';
5
+ export interface CreateRouterOptions {
6
+ /** 页面模块集合 import.meta.glob的结果 */
7
+ modules: TModule;
8
+ /** token 操作方法 */
9
+ token: TokenHelpers;
10
+ /** 基础布局组件 */
11
+ BaseLayout: ComponentType<any>;
12
+ /** 外部传入的路由配置(第一层,RouteObject结构) */
13
+ routes?: RouteObject[];
14
+ }
15
+ /**
16
+ * 创建路由器配置(第一层)
17
+ * @param options
18
+ * @returns { routes, permissionHelpers }
19
+ */
20
+ export declare function createRouter(options: CreateRouterOptions): {
21
+ /** 最终合并后的路由配置 */
22
+ routes: RouteObject[];
23
+ /** 权限帮助函数,包含 ProtectedLoader 等,用于外部调用 processRoutes */
24
+ permissionHelpers: {
25
+ RootLoader: () => import('./permission').AuthStatus;
26
+ ProtectedLoader: ({ request }: import('react-router-dom').LoaderFunctionArgs) => Response | null;
27
+ LoginLoader: () => Promise<Response | null>;
28
+ LoginAction: ({ request }: import('react-router-dom').LoaderFunctionArgs) => Promise<boolean | Response>;
29
+ LogoutAction: () => Response;
30
+ };
31
+ };
32
+ /**
33
+ * 生成路由表
34
+ * @param routes 路由数组
35
+ * @returns
36
+ */
37
+ export declare function generateRouter(routes: RouteObject[]): import('react-router-dom').DataRouter;
38
+ export * from './permission';
39
+ export * from './routes';
40
+ export * from './utils';
@@ -0,0 +1,23 @@
1
+ import { LoaderFunctionArgs } from 'react-router-dom';
2
+ export type AuthStatus = {
3
+ token: string | void | null;
4
+ };
5
+ export interface TokenHelpers {
6
+ /** 获取token */
7
+ getToken: () => string | void | null;
8
+ /** 设置token */
9
+ setToken: (token: string) => void;
10
+ /** 移除token */
11
+ removeToken: () => void;
12
+ }
13
+ /**
14
+ * 创建权限相关的 loader 和 action
15
+ * @param tokenHelpers token 操作方法
16
+ */
17
+ export declare function createPermissionHelpers(tokenHelpers: TokenHelpers): {
18
+ RootLoader: () => AuthStatus;
19
+ ProtectedLoader: ({ request }: LoaderFunctionArgs) => Response | null;
20
+ LoginLoader: () => Promise<Response | null>;
21
+ LoginAction: ({ request }: LoaderFunctionArgs) => Promise<boolean | Response>;
22
+ LogoutAction: () => Response;
23
+ };
@@ -0,0 +1,11 @@
1
+ import { ComponentType } from 'react';
2
+ import { RouteObject } from 'react-router-dom';
3
+ import { createPermissionHelpers } from './permission';
4
+ import { TModule } from './utils';
5
+ /**
6
+ * 创建默认路由表
7
+ * @param modules 页面模块集合
8
+ * @param permissionHelpers 权限相关的 loader 和 action
9
+ * @param BaseLayout 基础布局组件
10
+ */
11
+ export declare function createDefaultRoutes(modules: TModule, permissionHelpers: ReturnType<typeof createPermissionHelpers>, BaseLayout: ComponentType<any>): RouteObject[];
@@ -0,0 +1,56 @@
1
+ import { ComponentType } from 'react';
2
+ import { RouteObject } from 'react-router-dom';
3
+ import { IRoute, MenuType } from '../typings';
4
+ export type TModule = {
5
+ [keys in string]: () => Promise<{
6
+ default: ComponentType<any>;
7
+ }>;
8
+ };
9
+ /**
10
+ * 获取页面路径
11
+ * @param name
12
+ * @returns
13
+ */
14
+ export declare function getPath(name: string): string;
15
+ /**
16
+ * 获取动态页面
17
+ * @param name
18
+ * @param modules
19
+ * @returns
20
+ */
21
+ export declare function createLazyComponent(name: string, modules: TModule): import('react').LazyExoticComponent<ComponentType<any>> | undefined;
22
+ /** 路由节点类型 */
23
+ type RouteNode = RouteObject & {
24
+ parentId: string;
25
+ children?: RouteNode[];
26
+ };
27
+ /** 菜单项类型(用于 antd Menu 组件) */
28
+ export interface MenuItem {
29
+ key: string;
30
+ label: string;
31
+ icon?: string;
32
+ /** 对应的路由节点信息(不包含 children) */
33
+ routeNode?: Omit<RouteNode, 'children'>;
34
+ children?: MenuItem[];
35
+ menuType?: MenuType;
36
+ /** 是否独立菜单 */
37
+ isIndependentMenu?: boolean;
38
+ }
39
+ /** 处理结果类型 */
40
+ export interface ProcessedRoutes {
41
+ /** react-router 路由配置 */
42
+ routes: RouteNode[];
43
+ /** antd Menu 菜单配置 */
44
+ menus: MenuItem[];
45
+ /** 按钮权限列表 */
46
+ permissions: string[];
47
+ }
48
+ /**
49
+ * 将扁平的 IRoute 数组处理成三份数据
50
+ * @param rawRoutes 扁平路由数组
51
+ * @param modules 页面模块集合
52
+ * @param protectedLoader 受保护路由的加载器
53
+ * @returns { routes, menus, permissions }
54
+ */
55
+ export declare function processRoutes(rawRoutes: IRoute[], modules: TModule, protectedLoader?: any): ProcessedRoutes;
56
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './modules/layout-config.store';
2
+ export * from './modules/theme.store';