@zhin.js/client 1.0.3 → 1.0.5
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/README.md +117 -3
- package/{src → client}/index.ts +0 -1
- package/{src → client}/store/index.ts +22 -1
- package/client/store/reducers/config.ts +135 -0
- package/{src → client}/store/reducers/index.ts +4 -1
- package/client/websocket/hooks.ts +280 -0
- package/client/websocket/index.ts +48 -0
- package/client/websocket/instance.ts +46 -0
- package/client/websocket/manager.ts +412 -0
- package/client/websocket/messageHandler.ts +166 -0
- package/client/websocket/types.ts +208 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -0
- package/dist/router/index.d.ts +25 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +49 -0
- package/dist/router/index.js.map +1 -0
- package/dist/store/index.d.ts +19 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +67 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/reducers/config.d.ts +54 -0
- package/dist/store/reducers/config.d.ts.map +1 -0
- package/dist/store/reducers/config.js +78 -0
- package/dist/store/reducers/config.js.map +1 -0
- package/dist/store/reducers/index.d.ts +13 -0
- package/dist/store/reducers/index.d.ts.map +1 -0
- package/dist/store/reducers/index.js +11 -0
- package/dist/store/reducers/index.js.map +1 -0
- package/dist/store/reducers/route.d.ts +37 -0
- package/dist/store/reducers/route.d.ts.map +1 -0
- package/dist/store/reducers/route.js +85 -0
- package/dist/store/reducers/route.js.map +1 -0
- package/dist/store/reducers/script.d.ts +17 -0
- package/dist/store/reducers/script.d.ts.map +1 -0
- package/dist/store/reducers/script.js +74 -0
- package/dist/store/reducers/script.js.map +1 -0
- package/dist/store/reducers/ui.d.ts +14 -0
- package/dist/store/reducers/ui.d.ts.map +1 -0
- package/dist/store/reducers/ui.js +23 -0
- package/dist/store/reducers/ui.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket/hooks.d.ts +55 -0
- package/dist/websocket/hooks.d.ts.map +1 -0
- package/dist/websocket/hooks.js +225 -0
- package/dist/websocket/hooks.js.map +1 -0
- package/dist/websocket/index.d.ts +13 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +31 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/instance.d.ts +18 -0
- package/dist/websocket/instance.d.ts.map +1 -0
- package/dist/websocket/instance.js +39 -0
- package/dist/websocket/instance.js.map +1 -0
- package/dist/websocket/manager.d.ts +110 -0
- package/dist/websocket/manager.d.ts.map +1 -0
- package/dist/websocket/manager.js +341 -0
- package/dist/websocket/manager.js.map +1 -0
- package/dist/websocket/messageHandler.d.ts +48 -0
- package/dist/websocket/messageHandler.d.ts.map +1 -0
- package/dist/websocket/messageHandler.js +140 -0
- package/dist/websocket/messageHandler.js.map +1 -0
- package/dist/websocket/types.d.ts +125 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/dist/websocket/types.js +43 -0
- package/dist/websocket/types.js.map +1 -0
- package/package.json +8 -18
- package/app/index.html +0 -13
- package/app/postcss.config.js +0 -5
- package/app/src/components/ThemeToggle.tsx +0 -21
- package/app/src/hooks/useTheme.ts +0 -17
- package/app/src/layouts/dashboard.tsx +0 -259
- package/app/src/main.tsx +0 -121
- package/app/src/pages/dashboard-bots.tsx +0 -198
- package/app/src/pages/dashboard-home.tsx +0 -301
- package/app/src/pages/dashboard-logs.tsx +0 -298
- package/app/src/pages/dashboard-plugin-detail.tsx +0 -349
- package/app/src/pages/dashboard-plugins.tsx +0 -166
- package/app/src/style.css +0 -1105
- package/app/src/theme/index.ts +0 -92
- package/app/tailwind.config.js +0 -70
- package/app/tsconfig.json +0 -16
- package/src/websocket/index.ts +0 -193
- package/src/websocket/useWebSocket.ts +0 -42
- /package/{src → client}/router/index.tsx +0 -0
- /package/{src → client}/store/reducers/route.ts +0 -0
- /package/{src → client}/store/reducers/script.ts +0 -0
- /package/{src → client}/store/reducers/ui.ts +0 -0
- /package/{src → client}/types.ts +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket 消息处理器
|
|
3
|
+
* 负责处理不同类型的 WebSocket 消息并分发到对应的处理逻辑
|
|
4
|
+
*/
|
|
5
|
+
import { store, loadScripts, loadScript, unloadScript, updateConfig, updateSchema, updateConfigs, updateSchemas, setError } from '../store';
|
|
6
|
+
export class MessageHandler {
|
|
7
|
+
/**
|
|
8
|
+
* 处理 WebSocket 消息
|
|
9
|
+
*/
|
|
10
|
+
static handle(message) {
|
|
11
|
+
try {
|
|
12
|
+
switch (message.type) {
|
|
13
|
+
// 脚本管理相关消息
|
|
14
|
+
case 'sync':
|
|
15
|
+
this.handleScriptSync(message);
|
|
16
|
+
break;
|
|
17
|
+
case 'add':
|
|
18
|
+
this.handleScriptAdd(message);
|
|
19
|
+
break;
|
|
20
|
+
case 'delete':
|
|
21
|
+
this.handleScriptDelete(message);
|
|
22
|
+
break;
|
|
23
|
+
// 配置管理相关消息
|
|
24
|
+
case 'config:updated':
|
|
25
|
+
this.handleConfigUpdated(message);
|
|
26
|
+
break;
|
|
27
|
+
case 'config:batch':
|
|
28
|
+
this.handleConfigBatch(message);
|
|
29
|
+
break;
|
|
30
|
+
case 'config:error':
|
|
31
|
+
this.handleConfigError(message);
|
|
32
|
+
break;
|
|
33
|
+
// Schema 管理相关消息
|
|
34
|
+
case 'schema:updated':
|
|
35
|
+
this.handleSchemaUpdated(message);
|
|
36
|
+
break;
|
|
37
|
+
case 'schema:batch':
|
|
38
|
+
this.handleSchemaBatch(message);
|
|
39
|
+
break;
|
|
40
|
+
// 系统消息
|
|
41
|
+
case 'init-data':
|
|
42
|
+
case 'data-update':
|
|
43
|
+
this.handleSystemMessage(message);
|
|
44
|
+
break;
|
|
45
|
+
default:
|
|
46
|
+
console.warn('[WebSocket] Unknown message type:', message.type);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error('[WebSocket] Message handling error:', error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 处理脚本同步消息
|
|
55
|
+
*/
|
|
56
|
+
static handleScriptSync(message) {
|
|
57
|
+
if (message.data?.key === 'entries') {
|
|
58
|
+
const entries = Array.isArray(message.data.value)
|
|
59
|
+
? message.data.value
|
|
60
|
+
: [message.data.value];
|
|
61
|
+
store.dispatch({ type: 'script/syncEntries', payload: entries });
|
|
62
|
+
store.dispatch(loadScripts(entries));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 处理脚本添加消息
|
|
67
|
+
*/
|
|
68
|
+
static handleScriptAdd(message) {
|
|
69
|
+
if (message.data?.key === 'entries') {
|
|
70
|
+
store.dispatch({ type: 'script/addEntry', payload: message.data.value });
|
|
71
|
+
store.dispatch(loadScript(message.data.value));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 处理脚本删除消息
|
|
76
|
+
*/
|
|
77
|
+
static handleScriptDelete(message) {
|
|
78
|
+
if (message.data?.key === 'entries') {
|
|
79
|
+
store.dispatch({ type: 'script/removeEntry', payload: message.data.value });
|
|
80
|
+
store.dispatch(unloadScript(message.data.value));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 处理配置更新消息
|
|
85
|
+
*/
|
|
86
|
+
static handleConfigUpdated(message) {
|
|
87
|
+
if (message.pluginName && message.data !== undefined) {
|
|
88
|
+
store.dispatch(updateConfig({
|
|
89
|
+
pluginName: message.pluginName,
|
|
90
|
+
config: message.data
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 处理批量配置消息
|
|
96
|
+
*/
|
|
97
|
+
static handleConfigBatch(message) {
|
|
98
|
+
if (message.data) {
|
|
99
|
+
store.dispatch(updateConfigs(message.data));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 处理配置错误消息
|
|
104
|
+
*/
|
|
105
|
+
static handleConfigError(message) {
|
|
106
|
+
if (message.pluginName && message.error) {
|
|
107
|
+
store.dispatch(setError({
|
|
108
|
+
pluginName: message.pluginName,
|
|
109
|
+
error: message.error
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 处理 Schema 更新消息
|
|
115
|
+
*/
|
|
116
|
+
static handleSchemaUpdated(message) {
|
|
117
|
+
if (message.pluginName && message.data !== undefined) {
|
|
118
|
+
store.dispatch(updateSchema({
|
|
119
|
+
pluginName: message.pluginName,
|
|
120
|
+
schema: message.data
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 处理批量 Schema 消息
|
|
126
|
+
*/
|
|
127
|
+
static handleSchemaBatch(message) {
|
|
128
|
+
if (message.data) {
|
|
129
|
+
store.dispatch(updateSchemas(message.data));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 处理系统消息
|
|
134
|
+
*/
|
|
135
|
+
static handleSystemMessage(message) {
|
|
136
|
+
// 系统消息暂时不需要特殊处理
|
|
137
|
+
// 可以在这里添加系统级别的消息处理逻辑
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=messageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageHandler.js","sourceRoot":"","sources":["../../client/websocket/messageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket 相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface BaseMessage {
|
|
5
|
+
type: string;
|
|
6
|
+
timestamp?: number;
|
|
7
|
+
requestId?: number;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ScriptSyncMessage extends BaseMessage {
|
|
11
|
+
type: 'sync';
|
|
12
|
+
data: {
|
|
13
|
+
key: 'entries';
|
|
14
|
+
value: string[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface ScriptAddMessage extends BaseMessage {
|
|
18
|
+
type: 'add';
|
|
19
|
+
data: {
|
|
20
|
+
key: 'entries';
|
|
21
|
+
value: string;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface ScriptDeleteMessage extends BaseMessage {
|
|
25
|
+
type: 'delete';
|
|
26
|
+
data: {
|
|
27
|
+
key: 'entries';
|
|
28
|
+
value: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface ConfigGetMessage extends BaseMessage {
|
|
32
|
+
type: 'config:get';
|
|
33
|
+
pluginName: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ConfigSetMessage extends BaseMessage {
|
|
36
|
+
type: 'config:set';
|
|
37
|
+
pluginName: string;
|
|
38
|
+
data: any;
|
|
39
|
+
}
|
|
40
|
+
export interface ConfigUpdatedMessage extends BaseMessage {
|
|
41
|
+
type: 'config:updated';
|
|
42
|
+
pluginName: string;
|
|
43
|
+
data: any;
|
|
44
|
+
}
|
|
45
|
+
export interface ConfigBatchMessage extends BaseMessage {
|
|
46
|
+
type: 'config:batch';
|
|
47
|
+
data: Record<string, any>;
|
|
48
|
+
}
|
|
49
|
+
export interface ConfigErrorMessage extends BaseMessage {
|
|
50
|
+
type: 'config:error';
|
|
51
|
+
pluginName: string;
|
|
52
|
+
error: string;
|
|
53
|
+
}
|
|
54
|
+
export interface SchemaGetMessage extends BaseMessage {
|
|
55
|
+
type: 'schema:get';
|
|
56
|
+
pluginName: string;
|
|
57
|
+
}
|
|
58
|
+
export interface SchemaUpdatedMessage extends BaseMessage {
|
|
59
|
+
type: 'schema:updated';
|
|
60
|
+
pluginName: string;
|
|
61
|
+
data: any;
|
|
62
|
+
}
|
|
63
|
+
export interface SchemaBatchMessage extends BaseMessage {
|
|
64
|
+
type: 'schema:batch';
|
|
65
|
+
data: Record<string, any>;
|
|
66
|
+
}
|
|
67
|
+
export interface InitDataMessage extends BaseMessage {
|
|
68
|
+
type: 'init-data';
|
|
69
|
+
}
|
|
70
|
+
export interface DataUpdateMessage extends BaseMessage {
|
|
71
|
+
type: 'data-update';
|
|
72
|
+
}
|
|
73
|
+
export type WebSocketMessage = ScriptSyncMessage | ScriptAddMessage | ScriptDeleteMessage | ConfigGetMessage | ConfigSetMessage | ConfigUpdatedMessage | ConfigBatchMessage | ConfigErrorMessage | SchemaGetMessage | SchemaUpdatedMessage | SchemaBatchMessage | InitDataMessage | DataUpdateMessage;
|
|
74
|
+
export interface WebSocketConfig {
|
|
75
|
+
/** WebSocket 服务器 URL */
|
|
76
|
+
url?: string;
|
|
77
|
+
/** 重连间隔时间(毫秒) */
|
|
78
|
+
reconnectInterval?: number;
|
|
79
|
+
/** 最大重连尝试次数 */
|
|
80
|
+
maxReconnectAttempts?: number;
|
|
81
|
+
/** 请求超时时间(毫秒) */
|
|
82
|
+
requestTimeout?: number;
|
|
83
|
+
}
|
|
84
|
+
export interface WebSocketCallbacks {
|
|
85
|
+
/** 连接建立回调 */
|
|
86
|
+
onConnect?: () => void;
|
|
87
|
+
/** 连接断开回调 */
|
|
88
|
+
onDisconnect?: () => void;
|
|
89
|
+
/** 连接错误回调 */
|
|
90
|
+
onError?: (error: Event) => void;
|
|
91
|
+
/** 消息接收回调 */
|
|
92
|
+
onMessage?: (message: WebSocketMessage) => void;
|
|
93
|
+
}
|
|
94
|
+
export interface UseConfigOptions {
|
|
95
|
+
/** 是否自动加载配置 */
|
|
96
|
+
autoLoad?: boolean;
|
|
97
|
+
/** 是否自动加载 Schema */
|
|
98
|
+
autoLoadSchema?: boolean;
|
|
99
|
+
}
|
|
100
|
+
export interface UseWebSocketOptions {
|
|
101
|
+
/** 是否自动连接 */
|
|
102
|
+
autoConnect?: boolean;
|
|
103
|
+
}
|
|
104
|
+
export declare enum ConnectionState {
|
|
105
|
+
DISCONNECTED = "disconnected",
|
|
106
|
+
CONNECTING = "connecting",
|
|
107
|
+
CONNECTED = "connected",
|
|
108
|
+
RECONNECTING = "reconnecting",
|
|
109
|
+
ERROR = "error"
|
|
110
|
+
}
|
|
111
|
+
export declare class WebSocketError extends Error {
|
|
112
|
+
code: string;
|
|
113
|
+
originalError?: Error | undefined;
|
|
114
|
+
constructor(message: string, code: string, originalError?: Error | undefined);
|
|
115
|
+
}
|
|
116
|
+
export declare class RequestTimeoutError extends WebSocketError {
|
|
117
|
+
constructor(requestId: number);
|
|
118
|
+
}
|
|
119
|
+
export declare class ConnectionError extends WebSocketError {
|
|
120
|
+
constructor(message: string, originalError?: Error);
|
|
121
|
+
}
|
|
122
|
+
export declare class MessageError extends WebSocketError {
|
|
123
|
+
constructor(message: string, originalError?: Error);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../client/websocket/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket 相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// 连接状态枚举
|
|
6
|
+
// ============================================================================
|
|
7
|
+
export var ConnectionState;
|
|
8
|
+
(function (ConnectionState) {
|
|
9
|
+
ConnectionState["DISCONNECTED"] = "disconnected";
|
|
10
|
+
ConnectionState["CONNECTING"] = "connecting";
|
|
11
|
+
ConnectionState["CONNECTED"] = "connected";
|
|
12
|
+
ConnectionState["RECONNECTING"] = "reconnecting";
|
|
13
|
+
ConnectionState["ERROR"] = "error";
|
|
14
|
+
})(ConnectionState || (ConnectionState = {}));
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// 错误类型
|
|
17
|
+
// ============================================================================
|
|
18
|
+
export class WebSocketError extends Error {
|
|
19
|
+
code;
|
|
20
|
+
originalError;
|
|
21
|
+
constructor(message, code, originalError) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.originalError = originalError;
|
|
25
|
+
this.name = 'WebSocketError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class RequestTimeoutError extends WebSocketError {
|
|
29
|
+
constructor(requestId) {
|
|
30
|
+
super(`Request ${requestId} timed out`, 'REQUEST_TIMEOUT');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ConnectionError extends WebSocketError {
|
|
34
|
+
constructor(message, originalError) {
|
|
35
|
+
super(message, 'CONNECTION_ERROR', originalError);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class MessageError extends WebSocketError {
|
|
39
|
+
constructor(message, originalError) {
|
|
40
|
+
super(message, 'MESSAGE_ERROR', originalError);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../client/websocket/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkKH,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,gDAA6B,CAAA;IAC7B,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,gDAA6B,CAAA;IAC7B,kCAAe,CAAA;AACjB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG9B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,aAAqB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAA;QAHP,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACrD,YAAY,SAAiB;QAC3B,KAAK,CAAC,WAAW,SAAS,YAAY,EAAE,iBAAiB,CAAC,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAA;IACnD,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,CAAA;IAChD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/client",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Zhin 客户端",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -11,33 +11,23 @@
|
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
-
"dependencies": {
|
|
14
|
+
"dependencies": {},
|
|
15
|
+
"peerDependencies": {
|
|
15
16
|
"@reduxjs/toolkit": "^2.9.0",
|
|
16
|
-
"
|
|
17
|
+
"lucide-react": "^0.469.0",
|
|
17
18
|
"clsx": "^2.1.1",
|
|
18
|
-
"react": "^19.2.0",
|
|
19
|
-
"react-dom": "^19.2.0",
|
|
20
19
|
"react-redux": "9.2.0",
|
|
21
20
|
"react-router": "7.0.0",
|
|
22
21
|
"redux-persist": "6.0.0",
|
|
23
|
-
"tailwind-merge": "^3.3.1"
|
|
24
|
-
"tailwindcss": "latest"
|
|
22
|
+
"tailwind-merge": "^3.3.1"
|
|
25
23
|
},
|
|
26
24
|
"files": [
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"app"
|
|
25
|
+
"dist",
|
|
26
|
+
"client"
|
|
30
27
|
],
|
|
31
28
|
"devDependencies": {
|
|
32
|
-
"@radix-ui/themes": "^3.2.1",
|
|
33
|
-
"@types/events": "^3.0.3",
|
|
34
|
-
"@types/node": "^24.7.1",
|
|
35
29
|
"@types/react": "^19.2.2",
|
|
36
|
-
"@types/react-dom": "^19.2.1"
|
|
37
|
-
"@vitejs/plugin-react": "^4.3.4",
|
|
38
|
-
"lucide-react": "^0.469.0",
|
|
39
|
-
"radix-ui": "^1.4.3",
|
|
40
|
-
"vite": "^7.0.6"
|
|
30
|
+
"@types/react-dom": "^19.2.1"
|
|
41
31
|
},
|
|
42
32
|
"scripts": {
|
|
43
33
|
"build": "tsc",
|
package/app/index.html
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang='en'>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset='UTF-8'>
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Zhin</title>
|
|
7
|
-
</head>
|
|
8
|
-
<body>
|
|
9
|
-
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
10
|
-
<div id="root"></div>
|
|
11
|
-
<script src='/src/main.tsx' type='module'></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
package/app/postcss.config.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { useTheme } from '../hooks/useTheme'
|
|
2
|
-
import { Icons } from '@zhin.js/client'
|
|
3
|
-
|
|
4
|
-
export function ThemeToggle() {
|
|
5
|
-
const { theme, toggleTheme } = useTheme()
|
|
6
|
-
|
|
7
|
-
return (
|
|
8
|
-
<button
|
|
9
|
-
onClick={toggleTheme}
|
|
10
|
-
className="p-2 hover:bg-accent rounded-lg transition-colors text-foreground"
|
|
11
|
-
title={theme === 'light' ? '切换到暗色模式' : '切换到亮色模式'}
|
|
12
|
-
>
|
|
13
|
-
{theme === 'light' ? (
|
|
14
|
-
<Icons.Moon className="w-5 h-5" />
|
|
15
|
-
) : (
|
|
16
|
-
<Icons.Sun className="w-5 h-5" />
|
|
17
|
-
)}
|
|
18
|
-
</button>
|
|
19
|
-
)
|
|
20
|
-
}
|
|
21
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react'
|
|
2
|
-
import { type Theme, applyTheme, getInitialTheme } from '../theme'
|
|
3
|
-
|
|
4
|
-
export function useTheme() {
|
|
5
|
-
const [theme, setTheme] = useState<Theme>(getInitialTheme)
|
|
6
|
-
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
applyTheme(theme)
|
|
9
|
-
}, [theme])
|
|
10
|
-
|
|
11
|
-
const toggleTheme = () => {
|
|
12
|
-
setTheme(prev => prev === 'light' ? 'dark' : 'light')
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return { theme, setTheme, toggleTheme }
|
|
16
|
-
}
|
|
17
|
-
|