@zhin.js/client 1.0.4 → 1.0.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 (99) hide show
  1. package/README.md +23 -27
  2. package/{src → client}/index.ts +0 -1
  3. package/{src → client}/store/reducers/route.ts +1 -1
  4. package/{src → client}/store/reducers/script.ts +1 -1
  5. package/{src → client}/store/reducers/ui.ts +1 -1
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +0 -1
  9. package/dist/index.js.map +1 -0
  10. package/dist/router/index.d.ts +25 -0
  11. package/dist/router/index.d.ts.map +1 -0
  12. package/dist/router/index.js +49 -0
  13. package/dist/router/index.js.map +1 -0
  14. package/dist/store/index.d.ts +19 -0
  15. package/dist/store/index.d.ts.map +1 -0
  16. package/dist/store/index.js +67 -0
  17. package/dist/store/index.js.map +1 -0
  18. package/dist/store/reducers/config.d.ts +54 -0
  19. package/dist/store/reducers/config.d.ts.map +1 -0
  20. package/dist/store/reducers/config.js +78 -0
  21. package/dist/store/reducers/config.js.map +1 -0
  22. package/dist/store/reducers/index.d.ts +13 -0
  23. package/dist/store/reducers/index.d.ts.map +1 -0
  24. package/dist/store/reducers/index.js +11 -0
  25. package/dist/store/reducers/index.js.map +1 -0
  26. package/dist/store/reducers/route.d.ts +26 -0
  27. package/dist/store/reducers/route.d.ts.map +1 -0
  28. package/dist/store/reducers/route.js +85 -0
  29. package/dist/store/reducers/route.js.map +1 -0
  30. package/dist/store/reducers/script.d.ts +11 -0
  31. package/dist/store/reducers/script.d.ts.map +1 -0
  32. package/dist/store/reducers/script.js +74 -0
  33. package/dist/store/reducers/script.js.map +1 -0
  34. package/dist/store/reducers/ui.d.ts +8 -0
  35. package/dist/store/reducers/ui.d.ts.map +1 -0
  36. package/dist/store/reducers/ui.js +23 -0
  37. package/dist/store/reducers/ui.js.map +1 -0
  38. package/dist/types.d.ts +7 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/websocket/hooks.d.ts +55 -0
  43. package/dist/websocket/hooks.d.ts.map +1 -0
  44. package/dist/websocket/hooks.js +225 -0
  45. package/dist/websocket/hooks.js.map +1 -0
  46. package/dist/websocket/index.d.ts +13 -0
  47. package/dist/websocket/index.d.ts.map +1 -0
  48. package/dist/websocket/index.js +31 -0
  49. package/dist/websocket/index.js.map +1 -0
  50. package/dist/websocket/instance.d.ts +18 -0
  51. package/dist/websocket/instance.d.ts.map +1 -0
  52. package/dist/websocket/instance.js +39 -0
  53. package/dist/websocket/instance.js.map +1 -0
  54. package/dist/websocket/manager.d.ts +110 -0
  55. package/dist/websocket/manager.d.ts.map +1 -0
  56. package/dist/websocket/manager.js +341 -0
  57. package/dist/websocket/manager.js.map +1 -0
  58. package/dist/websocket/messageHandler.d.ts +48 -0
  59. package/dist/websocket/messageHandler.d.ts.map +1 -0
  60. package/dist/websocket/messageHandler.js +140 -0
  61. package/dist/websocket/messageHandler.js.map +1 -0
  62. package/dist/websocket/types.d.ts +125 -0
  63. package/dist/websocket/types.d.ts.map +1 -0
  64. package/dist/websocket/types.js +43 -0
  65. package/dist/websocket/types.js.map +1 -0
  66. package/package.json +12 -18
  67. package/app/index.html +0 -13
  68. package/app/postcss.config.js +0 -5
  69. package/app/src/components/PluginConfigForm/BasicFieldRenderers.tsx +0 -253
  70. package/app/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +0 -261
  71. package/app/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +0 -105
  72. package/app/src/components/PluginConfigForm/FieldRenderer.tsx +0 -110
  73. package/app/src/components/PluginConfigForm/NestedFieldRenderer.tsx +0 -95
  74. package/app/src/components/PluginConfigForm/index.tsx +0 -237
  75. package/app/src/components/PluginConfigForm/types.ts +0 -46
  76. package/app/src/components/ThemeToggle.tsx +0 -21
  77. package/app/src/hooks/useTheme.ts +0 -17
  78. package/app/src/layouts/dashboard.tsx +0 -259
  79. package/app/src/main.tsx +0 -121
  80. package/app/src/pages/dashboard-bots.tsx +0 -198
  81. package/app/src/pages/dashboard-home.tsx +0 -301
  82. package/app/src/pages/dashboard-logs.tsx +0 -298
  83. package/app/src/pages/dashboard-plugin-detail.tsx +0 -360
  84. package/app/src/pages/dashboard-plugins.tsx +0 -166
  85. package/app/src/style.css +0 -1105
  86. package/app/src/theme/index.ts +0 -92
  87. package/app/tailwind.config.js +0 -70
  88. package/app/tsconfig.json +0 -16
  89. /package/{src → client}/router/index.tsx +0 -0
  90. /package/{src → client}/store/index.ts +0 -0
  91. /package/{src → client}/store/reducers/config.ts +0 -0
  92. /package/{src → client}/store/reducers/index.ts +0 -0
  93. /package/{src → client}/types.ts +0 -0
  94. /package/{src → client}/websocket/hooks.ts +0 -0
  95. /package/{src → client}/websocket/index.ts +0 -0
  96. /package/{src → client}/websocket/instance.ts +0 -0
  97. /package/{src → client}/websocket/manager.ts +0 -0
  98. /package/{src → client}/websocket/messageHandler.ts +0 -0
  99. /package/{src → client}/websocket/types.ts +0 -0
package/README.md CHANGED
@@ -33,24 +33,21 @@ pnpm add react-router@7.0.0 events @types/events
33
33
  // main.tsx
34
34
  import { addPage, DynamicRouter } from '@zhin.js/client'
35
35
 
36
- // 导入图标
37
- import { Home, LayoutDashboard } from 'lucide-react'
38
-
39
- // 添加页面
36
+ // 添加页面 - 使用 Component 而不是 element,icon 使用字符串
40
37
  addPage({
41
38
  key: 'home',
42
39
  path: '/',
43
40
  title: '首页',
44
- icon: <Home className="w-5 h-5" />,
45
- element: <HomePage />
41
+ icon: 'Home', // 图标名称对应 lucide-react 的组件名
42
+ Component: HomePage
46
43
  })
47
44
 
48
45
  addPage({
49
46
  key: 'dashboard',
50
47
  path: '/dashboard',
51
48
  title: '仪表盘',
52
- icon: <LayoutDashboard className="w-5 h-5" />,
53
- element: <DashboardPage />
49
+ icon: 'LayoutDashboard',
50
+ Component: DashboardPage
54
51
  })
55
52
 
56
53
  // 渲染应用
@@ -68,15 +65,13 @@ createRoot(document.getElementById('root')).render(
68
65
  ```tsx
69
66
  import { addPage, removePage, updatePage } from '@zhin.js/client'
70
67
 
71
- import { Settings } from 'lucide-react'
72
-
73
68
  // 添加页面
74
69
  addPage({
75
70
  key: 'settings',
76
71
  path: '/settings',
77
72
  title: '设置',
78
- icon: <Settings className="w-5 h-5" />,
79
- element: <SettingsPage />
73
+ icon: 'Settings',
74
+ Component: SettingsPage
80
75
  })
81
76
 
82
77
  // 删除页面
@@ -108,15 +103,15 @@ addPage({
108
103
  key: 'home',
109
104
  path: '/',
110
105
  title: '首页',
111
- icon: <Home className="w-5 h-5" />,
112
- element: <HomePage />
106
+ icon: 'Home',
107
+ Component: HomePage
113
108
  })
114
109
 
115
110
  addPage({
116
111
  key: 'admin',
117
112
  path: '/admin',
118
113
  title: '管理',
119
- element: <AdminLayout />
114
+ Component: AdminLayout
120
115
  })
121
116
 
122
117
  // 2. 自动查找父路由:/admin/users
@@ -125,16 +120,16 @@ addPage({
125
120
  key: 'admin-users',
126
121
  path: '/admin/users',
127
122
  title: '用户管理',
128
- icon: <Users className="w-5 h-5" />,
129
- element: <UsersPage />
123
+ icon: 'Users',
124
+ Component: UsersPage
130
125
  })
131
126
 
132
127
  addPage({
133
128
  key: 'admin-settings',
134
129
  path: '/admin/settings',
135
130
  title: '系统设置',
136
- icon: <Settings className="w-5 h-5" />,
137
- element: <AdminSettingsPage />
131
+ icon: 'Settings',
132
+ Component: AdminSettingsPage
138
133
  })
139
134
 
140
135
  // 3. 自动查找父路由:/admin/users/detail
@@ -143,7 +138,7 @@ addPage({
143
138
  key: 'user-detail',
144
139
  path: '/admin/users/detail',
145
140
  title: '用户详情',
146
- element: <UserDetailPage />
141
+ Component: UserDetailPage
147
142
  })
148
143
 
149
144
  // 4. 动态添加嵌套页面
@@ -153,7 +148,7 @@ setTimeout(() => {
153
148
  key: 'admin-analytics',
154
149
  path: '/admin/analytics',
155
150
  title: '分析',
156
- element: <AnalyticsPage />
151
+ Component: AnalyticsPage
157
152
  })
158
153
  }, 2000)
159
154
 
@@ -164,7 +159,7 @@ setTimeout(() => {
164
159
  key: 'analytics-reports',
165
160
  path: '/admin/analytics/reports',
166
161
  title: '分析报告',
167
- element: <ReportsPage />
162
+ Component: ReportsPage
168
163
  })
169
164
  }, 4000)
170
165
  ```
@@ -275,21 +270,23 @@ import { addPage, updatePage, removePage } from '@zhin.js/client'
275
270
 
276
271
  // 运行时动态添加页面
277
272
  setTimeout(() => {
273
+ const DynamicPage = () => <div>Dynamic Page</div>
278
274
  addPage({
279
275
  key: 'dynamic',
280
276
  path: '/dynamic',
281
277
  title: '动态页面',
282
- element: <div>Dynamic Page</div>
278
+ Component: DynamicPage
283
279
  })
284
280
  }, 2000)
285
281
 
286
282
  // 动态更新页面
287
283
  setTimeout(() => {
284
+ const UpdatedPage = () => <div>Updated Page</div>
288
285
  updatePage('/dynamic', {
289
286
  key: 'dynamic',
290
287
  path: '/dynamic',
291
288
  title: '动态页面(已更新)',
292
- element: <div>Updated Page</div>
289
+ Component: UpdatedPage
293
290
  })
294
291
  }, 4000)
295
292
 
@@ -323,14 +320,13 @@ function App() {
323
320
 
324
321
  // 插件入口脚本示例(my-plugin-entry.ts)
325
322
  import { addPage } from '@zhin.js/client'
326
- import { Puzzle } from 'lucide-react'
327
323
 
328
324
  addPage({
329
325
  key: 'my-plugin',
330
326
  path: '/my-plugin',
331
327
  title: '我的插件',
332
- icon: <Puzzle className="w-5 h-5" />,
333
- element: <MyPluginPage />
328
+ icon: 'Puzzle',
329
+ Component: MyPluginPage
334
330
  })
335
331
  ```
336
332
 
@@ -8,7 +8,6 @@ export * from './store'
8
8
 
9
9
  // Router
10
10
  export * from './router'
11
- export * as Icons from 'lucide-react'
12
11
 
13
12
  // WebSocket
14
13
  export * from './websocket'
@@ -45,7 +45,7 @@ const calculateRelativePath = (parentPath: string, fullPath: string): string =>
45
45
  return fullPath.replace(parentPath + '/', '')
46
46
  }
47
47
 
48
- export const routeSlice = createSlice({
48
+ const routeSlice = createSlice({
49
49
  name: 'route',
50
50
  initialState,
51
51
  reducers: {
@@ -55,7 +55,7 @@ export const unloadScript = createAsyncThunk(
55
55
  }
56
56
  )
57
57
 
58
- export const scriptSlice = createSlice({
58
+ const scriptSlice = createSlice({
59
59
  name: 'script',
60
60
  initialState,
61
61
  reducers: {
@@ -10,7 +10,7 @@ const initialState: UIState = {
10
10
  activeMenu: 'home'
11
11
  }
12
12
 
13
- export const uiSlice = createSlice({
13
+ const uiSlice = createSlice({
14
14
  name: 'ui',
15
15
  initialState,
16
16
  reducers: {
@@ -0,0 +1,7 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export * from './types';
3
+ export * from './store';
4
+ export * from './router';
5
+ export * from './websocket';
6
+ export declare function cn(...inputs: ClassValue[]): string;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAA;AAG5C,cAAc,SAAS,CAAA;AAGvB,cAAc,SAAS,CAAA;AAGvB,cAAc,UAAU,CAAA;AAGxB,cAAc,aAAa,CAAA;AAE3B,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
package/dist/index.js CHANGED
@@ -6,7 +6,6 @@ export * from './types';
6
6
  export * from './store';
7
7
  // Router
8
8
  export * from './router';
9
- export * as Icons from 'lucide-react';
10
9
  // WebSocket
11
10
  export * from './websocket';
12
11
  export function cn(...inputs) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,QAAQ;AACR,cAAc,SAAS,CAAA;AAEvB,cAAc;AACd,cAAc,SAAS,CAAA;AAEvB,SAAS;AACT,cAAc,UAAU,CAAA;AAExB,YAAY;AACZ,cAAc,aAAa,CAAA;AAE3B,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { RouteMenuItem } from '../store';
2
+ export { useOutlet, Outlet, Link, useNavigate, useParams } from 'react-router';
3
+ export declare const addPage: (route: RouteMenuItem) => {
4
+ payload: RouteMenuItem;
5
+ type: "route/addRoute";
6
+ };
7
+ export declare const removePage: (path: string) => {
8
+ payload: string;
9
+ type: "route/removeRoute";
10
+ };
11
+ export declare const updatePage: (path: string, route: RouteMenuItem) => {
12
+ payload: {
13
+ path: string;
14
+ updates: Partial<RouteMenuItem>;
15
+ };
16
+ type: "route/updateRoute";
17
+ };
18
+ export declare const getPage: (path: string) => RouteMenuItem | undefined;
19
+ export declare const getAllPages: () => RouteMenuItem[];
20
+ export declare const clearPages: () => {
21
+ payload: undefined;
22
+ type: "route/clearRoutes";
23
+ };
24
+ export declare function DynamicRouter(): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/router/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA0D,aAAa,EAAe,MAAM,UAAU,CAAA;AAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAK9E,eAAO,MAAM,OAAO,GAAI,OAAO,aAAa;;;CAAoC,CAAA;AAChF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM;;;CAAsC,CAAA;AAC7E,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,OAAO,aAAa;;;;;;CAG1D,CAAA;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,8BAAqE,CAAA;AACzG,eAAO,MAAM,WAAW,uBAAsC,CAAA;AAC9D,eAAO,MAAM,UAAU;;;CAAsC,CAAA;AAG7D,wBAAgB,aAAa,4CAmC5B"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { createBrowserRouter, RouterProvider as ReactRouterProvider, Outlet } from 'react-router';
4
+ import { store, addRoute, removeRoute, updateRoute, clearRoutes, useSelector } from '../store';
5
+ export { useOutlet, Outlet, Link, useNavigate, useParams } from 'react-router';
6
+ export const addPage = (route) => store.dispatch(addRoute(route));
7
+ export const removePage = (path) => store.dispatch(removeRoute(path));
8
+ export const updatePage = (path, route) => store.dispatch(updateRoute({
9
+ path,
10
+ updates: route
11
+ }));
12
+ export const getPage = (path) => store.getState().route.routes.find(route => route.path === path);
13
+ export const getAllPages = () => store.getState().route.routes;
14
+ export const clearPages = () => store.dispatch(clearRoutes());
15
+ // 动态路由组件(从 Redux store 读取)
16
+ export function DynamicRouter() {
17
+ const storeRoutes = useSelector((state) => state.route.routes);
18
+ console.log(storeRoutes);
19
+ const router = useMemo(() => {
20
+ // 递归转换路由(支持多层嵌套)
21
+ const convertRoute = (route) => {
22
+ const routeObj = {
23
+ path: route.path,
24
+ element: route.element,
25
+ Component: route.Component,
26
+ };
27
+ // 递归处理子路由
28
+ if (route.children && route.children.length > 0) {
29
+ routeObj.children = route.children.map((child) => convertRoute(child));
30
+ }
31
+ return routeObj;
32
+ };
33
+ const routeObjects = storeRoutes.map(convertRoute);
34
+ const defaultRoutes = [
35
+ {
36
+ path: '/',
37
+ element: _jsx(Outlet, {}),
38
+ children: routeObjects,
39
+ },
40
+ {
41
+ path: '*',
42
+ element: _jsx("div", { children: "404 - Page Not Found" }),
43
+ }
44
+ ];
45
+ return createBrowserRouter(defaultRoutes);
46
+ }, [storeRoutes]);
47
+ return _jsx(ReactRouterProvider, { router: router });
48
+ }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../client/router/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAAE,cAAc,IAAI,mBAAmB,EAAe,MAAM,EAAC,MAAM,cAAc,CAAA;AAC7G,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAiB,WAAW,EAAE,MAAM,UAAU,CAAA;AAC7G,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAK9E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAChF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC3F,IAAI;IACJ,OAAO,EAAE,KAAK;CACf,CAAC,CAAC,CAAA;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AACzG,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAA;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;AAE7D,2BAA2B;AAC3B,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,iBAAiB;QACjB,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAe,EAAE;YACzD,MAAM,QAAQ,GAAgB;gBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAA;YAED,UAAU;YACV,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;YACvF,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAA;QACD,MAAM,YAAY,GAAkB,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACjE,MAAM,aAAa,GAAkB;YACnC;gBACE,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,KAAC,MAAM,KAAG;gBACnB,QAAQ,EAAE,YAAY;aACvB;YACD;gBACE,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,iDAA+B;aACzC;SACF,CAAA;QAED,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC3C,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,OAAO,KAAC,mBAAmB,IAAC,MAAM,EAAE,MAAM,GAAI,CAAA;AAChD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Reducer, Action } from '@reduxjs/toolkit';
2
+ import { Reducers } from './reducers';
3
+ import { TypedUseSelectorHook } from 'react-redux';
4
+ export declare const store: import("@reduxjs/toolkit").EnhancedStore<Reducers, import("@reduxjs/toolkit").UnknownAction, import("@reduxjs/toolkit").Tuple<[import("@reduxjs/toolkit").StoreEnhancer<{
5
+ dispatch: import("@reduxjs/toolkit").ThunkDispatch<Reducers, undefined, import("@reduxjs/toolkit").UnknownAction>;
6
+ }>, import("@reduxjs/toolkit").StoreEnhancer]>>;
7
+ export declare const persistor: import("redux-persist").Persistor;
8
+ export declare function addReducer<T, A extends Action>(name: keyof Reducers, reducer: Reducer<T, A>): void;
9
+ export type RootState = ReturnType<typeof store.getState>;
10
+ export type AppDispatch = typeof store.dispatch;
11
+ export declare const useDispatch: () => AppDispatch;
12
+ export declare const useSelector: TypedUseSelectorHook<RootState>;
13
+ export { toggleSidebar, setSidebarOpen, setActiveMenu } from './reducers/ui';
14
+ export { addRoute, removeRoute, updateRoute, setRoutes, clearRoutes } from './reducers/route';
15
+ export { syncEntries, addEntry, removeEntry, loadScript, loadScripts, unloadScript } from './reducers/script';
16
+ export { setConnected, setLoading, setError, updateConfig, updateSchema, updateConfigs, updateSchemas, removeConfig, clearConfigs, selectConfig, selectSchema, selectConfigLoading, selectConfigError, selectConfigConnected, selectAllConfigs, selectAllSchemas } from './reducers/config';
17
+ export type { RouteMenuItem } from './reducers/route';
18
+ export type { ConfigMessage } from './reducers/config';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/store/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,MAAM,EAAiB,MAAM,kBAAkB,CAAA;AAahF,OAAO,EAAW,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAmC,oBAAoB,EAAmC,MAAM,aAAa,CAAC;AA+BrH,eAAO,MAAM,KAAK;;+CAqBhB,CAAA;AACF,eAAO,MAAM,SAAS,mCAAsB,CAAC;AAO7C,wBAAgB,UAAU,CAAC,CAAC,EAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAC,MAAM,QAAQ,EAAC,OAAO,EAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,QAItF;AACD,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAA;AACzD,MAAM,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAA;AAC/C,eAAO,MAAM,WAAW,EAAC,MAAI,WAA8B,CAAA;AAC3D,eAAO,MAAM,WAAW,EAAC,oBAAoB,CAAC,SAAS,CAAoB,CAAA;AAG3E,OAAO,EACH,aAAa,EACb,cAAc,EACd,aAAa,EAChB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACH,QAAQ,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,EACd,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACH,WAAW,EACX,QAAQ,EACR,WAAW,EACX,UAAU,EACV,WAAW,EACX,YAAY,EACf,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACH,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EACnB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { configureStore, combineReducers } from '@reduxjs/toolkit';
2
+ import { FLUSH, PAUSE, PERSIST, persistReducer, persistStore, PURGE, REGISTER, REHYDRATE, createTransform, } from 'redux-persist';
3
+ import storage from 'redux-persist/es/storage';
4
+ import { reducers } from './reducers';
5
+ import { useDispatch as useReduxDispatch, useSelector as useReduxSelector } from 'react-redux';
6
+ // 创建 transform 过滤不可序列化的字段
7
+ const routeTransform = createTransform((inboundState) => {
8
+ const { routes, ...rest } = inboundState;
9
+ return rest;
10
+ }, (outboundState) => {
11
+ return { ...outboundState, routes: [] };
12
+ }, { whitelist: ['route'] });
13
+ const scriptTransform = createTransform((inboundState) => {
14
+ const { entries, loadedScripts, ...rest } = inboundState;
15
+ return rest;
16
+ }, (outboundState) => {
17
+ return { ...outboundState, entries: [], loadedScripts: [] };
18
+ }, { whitelist: ['script'] });
19
+ const persistConfig = {
20
+ key: 'root',
21
+ storage: storage,
22
+ transforms: [routeTransform, scriptTransform],
23
+ };
24
+ const persistedReducer = persistReducer(persistConfig, combineReducers(reducers));
25
+ export const store = configureStore({
26
+ reducer: persistedReducer,
27
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware({
28
+ serializableCheck: {
29
+ ignoredActions: [
30
+ FLUSH,
31
+ REHYDRATE,
32
+ PAUSE,
33
+ PERSIST,
34
+ PURGE,
35
+ REGISTER,
36
+ // 忽略包含 React 组件的路由 actions
37
+ 'route/addRoute',
38
+ 'route/updateRoute',
39
+ 'route/setRoutes',
40
+ ],
41
+ // 忽略 state 中的 routes 字段
42
+ ignoredPaths: ['route.routes'],
43
+ },
44
+ }),
45
+ });
46
+ export const persistor = persistStore(store);
47
+ // 将 store 挂载到 window 以供 DynamicRouter 使用
48
+ if (typeof window !== 'undefined') {
49
+ // @ts-ignore
50
+ window.__REDUX_STORE__ = store;
51
+ }
52
+ export function addReducer(name, reducer) {
53
+ reducers[name] = reducer;
54
+ const newPersistedReducer = persistReducer(persistConfig, combineReducers(reducers));
55
+ store.replaceReducer(newPersistedReducer);
56
+ }
57
+ export const useDispatch = useReduxDispatch;
58
+ export const useSelector = useReduxSelector;
59
+ // 导出 UI actions
60
+ export { toggleSidebar, setSidebarOpen, setActiveMenu } from './reducers/ui';
61
+ // 导出 Route actions
62
+ export { addRoute, removeRoute, updateRoute, setRoutes, clearRoutes } from './reducers/route';
63
+ // 导出 Script actions 和 thunks
64
+ export { syncEntries, addEntry, removeEntry, loadScript, loadScripts, unloadScript } from './reducers/script';
65
+ // 导出 Config actions 和 selectors
66
+ export { setConnected, setLoading, setError, updateConfig, updateSchema, updateConfigs, updateSchemas, removeConfig, clearConfigs, selectConfig, selectSchema, selectConfigLoading, selectConfigError, selectConfigConnected, selectAllConfigs, selectAllSchemas } from './reducers/config';
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../client/store/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 配置管理 Redux Slice
3
+ * 通过 WebSocket 管理插件配置
4
+ */
5
+ export interface ConfigState {
6
+ configs: Record<string, any>;
7
+ schemas: Record<string, any>;
8
+ loading: Record<string, boolean>;
9
+ errors: Record<string, string | null>;
10
+ connected: boolean;
11
+ }
12
+ export interface ConfigMessage {
13
+ type: 'config:get' | 'config:set' | 'config:updated' | 'schema:get' | 'schema:updated';
14
+ pluginName: string;
15
+ data?: any;
16
+ error?: string;
17
+ }
18
+ export declare const setConnected: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "config/setConnected">, setLoading: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
19
+ pluginName: string;
20
+ loading: boolean;
21
+ }, "config/setLoading">, setError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
22
+ pluginName: string;
23
+ error: string | null;
24
+ }, "config/setError">, updateConfig: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
25
+ pluginName: string;
26
+ config: any;
27
+ }, "config/updateConfig">, updateSchema: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
28
+ pluginName: string;
29
+ schema: any;
30
+ }, "config/updateSchema">, updateConfigs: import("@reduxjs/toolkit").ActionCreatorWithPayload<Record<string, any>, "config/updateConfigs">, updateSchemas: import("@reduxjs/toolkit").ActionCreatorWithPayload<Record<string, any>, "config/updateSchemas">, removeConfig: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "config/removeConfig">, clearConfigs: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"config/clearConfigs">;
31
+ declare const _default: import("@reduxjs/toolkit").Reducer<ConfigState>;
32
+ export default _default;
33
+ export declare const selectConfig: (state: {
34
+ config: ConfigState;
35
+ }, pluginName: string) => any;
36
+ export declare const selectSchema: (state: {
37
+ config: ConfigState;
38
+ }, pluginName: string) => any;
39
+ export declare const selectConfigLoading: (state: {
40
+ config: ConfigState;
41
+ }, pluginName: string) => boolean;
42
+ export declare const selectConfigError: (state: {
43
+ config: ConfigState;
44
+ }, pluginName: string) => string | null;
45
+ export declare const selectConfigConnected: (state: {
46
+ config: ConfigState;
47
+ }) => boolean;
48
+ export declare const selectAllConfigs: (state: {
49
+ config: ConfigState;
50
+ }) => Record<string, any>;
51
+ export declare const selectAllSchemas: (state: {
52
+ config: ConfigState;
53
+ }) => Record<string, any>;
54
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../client/store/reducers/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,WAAW;IAE1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEhC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IAErC,SAAS,EAAE,OAAO,CAAA;CACnB;AAWD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,gBAAgB,CAAA;IACtF,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAkED,eAAO,MACL,YAAY,uFACZ,UAAU;gBAxDgD,MAAM;aAAW,OAAO;yBAyDlF,QAAQ;gBAnDgD,MAAM;WAAS,MAAM,GAAG,IAAI;uBAoDpF,YAAY;gBA9CgD,MAAM;YAAU,GAAG;2BA+C/E,YAAY;gBAvCgD,MAAM;YAAU,GAAG;2BAwC/E,aAAa,oGACb,aAAa,oGACb,YAAY,sFACZ,YAAY,+EACS,CAAA;;AAEvB,wBAAkC;AAGlC,eAAO,MAAM,YAAY,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,YAAY,MAAM,QAC7C,CAAA;AAElC,eAAO,MAAM,YAAY,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,YAAY,MAAM,QAC7C,CAAA;AAElC,eAAO,MAAM,mBAAmB,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,YAAY,MAAM,YAC3C,CAAA;AAE3C,eAAO,MAAM,iBAAiB,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,YAAY,MAAM,kBAC3C,CAAA;AAEzC,eAAO,MAAM,qBAAqB,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,YAC5C,CAAA;AAExB,eAAO,MAAM,gBAAgB,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,wBACzC,CAAA;AAEtB,eAAO,MAAM,gBAAgB,GAAI,OAAO;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,wBACzC,CAAA"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 配置管理 Redux Slice
3
+ * 通过 WebSocket 管理插件配置
4
+ */
5
+ import { createSlice } from '@reduxjs/toolkit';
6
+ const initialState = {
7
+ configs: {},
8
+ schemas: {},
9
+ loading: {},
10
+ errors: {},
11
+ connected: false
12
+ };
13
+ const configSlice = createSlice({
14
+ name: 'config',
15
+ initialState,
16
+ reducers: {
17
+ // WebSocket 连接状态
18
+ setConnected: (state, action) => {
19
+ state.connected = action.payload;
20
+ },
21
+ // 设置配置加载状态
22
+ setLoading: (state, action) => {
23
+ const { pluginName, loading } = action.payload;
24
+ state.loading[pluginName] = loading;
25
+ },
26
+ // 设置错误信息
27
+ setError: (state, action) => {
28
+ const { pluginName, error } = action.payload;
29
+ state.errors[pluginName] = error;
30
+ },
31
+ // 更新插件配置
32
+ updateConfig: (state, action) => {
33
+ const { pluginName, config } = action.payload;
34
+ state.configs[pluginName] = config;
35
+ state.loading[pluginName] = false;
36
+ state.errors[pluginName] = null;
37
+ },
38
+ // 更新插件 Schema
39
+ updateSchema: (state, action) => {
40
+ const { pluginName, schema } = action.payload;
41
+ state.schemas[pluginName] = schema;
42
+ },
43
+ // 批量更新配置
44
+ updateConfigs: (state, action) => {
45
+ state.configs = { ...state.configs, ...action.payload };
46
+ },
47
+ // 批量更新 Schema
48
+ updateSchemas: (state, action) => {
49
+ state.schemas = { ...state.schemas, ...action.payload };
50
+ },
51
+ // 清除插件配置
52
+ removeConfig: (state, action) => {
53
+ const pluginName = action.payload;
54
+ delete state.configs[pluginName];
55
+ delete state.schemas[pluginName];
56
+ delete state.loading[pluginName];
57
+ delete state.errors[pluginName];
58
+ },
59
+ // 清除所有配置
60
+ clearConfigs: (state) => {
61
+ state.configs = {};
62
+ state.schemas = {};
63
+ state.loading = {};
64
+ state.errors = {};
65
+ }
66
+ }
67
+ });
68
+ export const { setConnected, setLoading, setError, updateConfig, updateSchema, updateConfigs, updateSchemas, removeConfig, clearConfigs } = configSlice.actions;
69
+ export default configSlice.reducer;
70
+ // Selectors
71
+ export const selectConfig = (state, pluginName) => state.config.configs[pluginName];
72
+ export const selectSchema = (state, pluginName) => state.config.schemas[pluginName];
73
+ export const selectConfigLoading = (state, pluginName) => state.config.loading[pluginName] || false;
74
+ export const selectConfigError = (state, pluginName) => state.config.errors[pluginName] || null;
75
+ export const selectConfigConnected = (state) => state.config.connected;
76
+ export const selectAllConfigs = (state) => state.config.configs;
77
+ export const selectAllSchemas = (state) => state.config.schemas;
78
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../client/store/reducers/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Reducer } from "@reduxjs/toolkit";
2
+ import ui from "./ui";
3
+ import route from "./route";
4
+ import script from "./script";
5
+ import config from "./config";
6
+ export interface Reducers {
7
+ ui: ReturnType<typeof ui>;
8
+ route: ReturnType<typeof route>;
9
+ script: ReturnType<typeof script>;
10
+ config: ReturnType<typeof config>;
11
+ }
12
+ export declare const reducers: Record<keyof Reducers, Reducer<any, any>>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../client/store/reducers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,MAAM,MAAM,CAAA;AACrB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;IACzB,KAAK,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAA;IAC/B,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;IACjC,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAA;CACpC;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAK9D,CAAA"}
@@ -0,0 +1,11 @@
1
+ import ui from "./ui";
2
+ import route from "./route";
3
+ import script from "./script";
4
+ import config from "./config";
5
+ export const reducers = {
6
+ ui,
7
+ route,
8
+ script,
9
+ config
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../client/store/reducers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,MAAM,CAAA;AACrB,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,MAAM,MAAM,UAAU,CAAA;AAS7B,MAAM,CAAC,MAAM,QAAQ,GAA8C;IAC/D,EAAE;IACF,KAAK;IACL,MAAM;IACN,MAAM;CACT,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { ComponentType, ReactNode } from "react";
2
+ export interface RouteMenuItem {
3
+ key: string;
4
+ path: string;
5
+ title: string;
6
+ index?: boolean;
7
+ icon?: ReactNode;
8
+ element?: ReactNode;
9
+ Component?: ComponentType;
10
+ children?: RouteMenuItem[];
11
+ meta?: {
12
+ hideInMenu?: boolean;
13
+ requiresAuth?: boolean;
14
+ order?: number;
15
+ };
16
+ }
17
+ export interface RouteState {
18
+ routes: RouteMenuItem[];
19
+ }
20
+ export declare const addRoute: import("@reduxjs/toolkit").ActionCreatorWithPayload<RouteMenuItem, "route/addRoute">, removeRoute: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "route/removeRoute">, updateRoute: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
21
+ path: string;
22
+ updates: Partial<RouteMenuItem>;
23
+ }, "route/updateRoute">, setRoutes: import("@reduxjs/toolkit").ActionCreatorWithPayload<RouteMenuItem[], "route/setRoutes">, clearRoutes: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"route/clearRoutes">;
24
+ declare const _default: import("@reduxjs/toolkit").Reducer<RouteState>;
25
+ export default _default;
26
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../client/store/reducers/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGhD,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,IAAI,CAAC,EAAE;QACH,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,KAAK,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;CACJ;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,aAAa,EAAE,CAAA;CAC1B;AAiGD,eAAO,MAAQ,QAAQ,wFAAE,WAAW,oFAAE,WAAW;UAhCU,MAAM;aAAW,OAAO,CAAC,aAAa,CAAC;yBAgC/C,SAAS,2FAAE,WAAW,6EAAuB,CAAA;;AAChG,wBAAiC"}