diff --git a/.env.example b/.env.example
index df7acb0..490d788 100644
--- a/.env.example
+++ b/.env.example
@@ -1,2 +1,2 @@
NODE_ENV=
-API_URL=https://kevisual.xiongxiao.me
\ No newline at end of file
+VITE_API_URL=https://kevisual.xiongxiao.me
\ No newline at end of file
diff --git a/package.json b/package.json
index 50cd2c5..a267c7a 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
"build": "vite build",
"preview": "vite preview",
"ui": "bunx shadcn@latest add ",
- "pub": "envision deploy ./dist -k vite-react -v 0.2.1 -y y -u"
+ "pub": "envision deploy ./dist -k center -v 0.2.1 -y y -u"
},
"dependencies": {
"@ant-design/icons": "^6.1.0",
@@ -16,6 +16,7 @@
"@kevisual/api": "^0.0.59",
"@kevisual/cache": "^0.0.5",
"@kevisual/context": "^0.0.8",
+ "@kevisual/remote-app": "^0.0.4",
"@kevisual/router": "^0.0.83",
"@tanstack/react-router": "^1.161.4",
"@tanstack/react-table": "^8.21.3",
@@ -61,6 +62,6 @@
"tailwindcss": "^4.2.0",
"tw-animate-css": "^1.4.0",
"typescript": "^5.9.3",
- "vite": "v7.3.1"
+ "vite": "v8.0.0-beta.15"
}
}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fd2397b..b3531da 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ importers:
'@kevisual/context':
specifier: ^0.0.8
version: 0.0.8
+ '@kevisual/remote-app':
+ specifier: ^0.0.4
+ version: 0.0.4
'@kevisual/router':
specifier: ^0.0.83
version: 0.0.83
@@ -122,13 +125,13 @@ importers:
version: 1.0.30(dotenv@17.3.1)
'@tailwindcss/vite':
specifier: ^4.2.0
- version: 4.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))
+ version: 4.2.0(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))
'@tanstack/react-router-devtools':
specifier: ^1.161.4
version: 1.161.4(@tanstack/react-router@1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.161.4)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/router-plugin':
specifier: ^1.161.4
- version: 1.161.4(@tanstack/react-router@1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))
+ version: 1.161.4(@tanstack/react-router@1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))
'@types/node':
specifier: ^25.3.0
version: 25.3.0
@@ -140,7 +143,7 @@ importers:
version: 19.2.3(@types/react@19.2.14)
'@vitejs/plugin-react':
specifier: ^5.1.4
- version: 5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))
+ version: 5.1.4(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))
dotenv:
specifier: ^17.3.1
version: 17.3.1
@@ -157,8 +160,8 @@ importers:
specifier: ^5.9.3
version: 5.9.3
vite:
- specifier: v7.3.1
- version: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)
+ specifier: v8.0.0-beta.15
+ version: 8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)
packages:
@@ -347,9 +350,15 @@ packages:
'@date-fns/tz@1.4.1':
resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==}
+ '@emnapi/core@1.8.1':
+ resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+
'@emnapi/runtime@1.8.1':
resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+
'@emotion/hash@0.8.0':
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
@@ -714,6 +723,9 @@ packages:
'@kevisual/query@0.0.49':
resolution: {integrity: sha512-GrWW+QlBO5lkiqvb7PjOstNtpTQVSR74EHHWjm7YoL9UdT1wuPQXGUApZHmMBSh3NIWCf0AL2G1hPWZMC7YeOQ==}
+ '@kevisual/remote-app@0.0.4':
+ resolution: {integrity: sha512-2yIlWY98pLCcxG+DJsqXXkd5YYEgymuOsyElH+31AoEPb7mlNREnYS81zN0KM9nvdSmU2G51vV4UVirJlYBZCQ==}
+
'@kevisual/router@0.0.83':
resolution: {integrity: sha512-CVazzM1rXVyvU7QcMQr0/EuqacRNEGalThDDLGQcvKEVHyduJ9yWddn6kezgWFCpNlPKhzSCKkIFuZVixNVxDQ==}
@@ -740,6 +752,9 @@ packages:
'@marijn/find-cluster-break@1.0.2':
resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+ '@napi-rs/wasm-runtime@1.1.1':
+ resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+
'@next/env@16.1.6':
resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
@@ -799,6 +814,13 @@ packages:
resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
engines: {node: '>= 20.19.0'}
+ '@oxc-project/runtime@0.114.0':
+ resolution: {integrity: sha512-mVGQvr/uFJGQ3hsvgQ1sJfh79t5owyZZZtw+VaH+WhtvsmtgjT6imznB9sz2Q67Q0/4obM9mOOtQscU4aJteSg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.114.0':
+ resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==}
+
'@paralleldrive/cuid2@3.3.0':
resolution: {integrity: sha512-OqiFvSOF0dBSesELYY2CAMa4YINvlLpvKOz/rv6NeZEqiyttlHgv98Juwv4Ch+GrEV7IZ8jfI2VcEoYUjXXCjw==}
hasBin: true
@@ -1279,146 +1301,92 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
- '@rolldown/pluginutils@1.0.0-rc.3':
- resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
-
- '@rollup/rollup-android-arm-eabi@4.58.0':
- resolution: {integrity: sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.58.0':
- resolution: {integrity: sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==}
+ '@rolldown/binding-android-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.58.0':
- resolution: {integrity: sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==}
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.58.0':
- resolution: {integrity: sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==}
+ '@rolldown/binding-darwin-x64@1.0.0-rc.5':
+ resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.58.0':
- resolution: {integrity: sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.58.0':
- resolution: {integrity: sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==}
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.5':
+ resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.58.0':
- resolution: {integrity: sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
+ resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.58.0':
- resolution: {integrity: sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-arm64-gnu@4.58.0':
- resolution: {integrity: sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
+ resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.58.0':
- resolution: {integrity: sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
+ resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.58.0':
- resolution: {integrity: sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==}
- cpu: [loong64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-loong64-musl@4.58.0':
- resolution: {integrity: sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==}
- cpu: [loong64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-ppc64-gnu@4.58.0':
- resolution: {integrity: sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-ppc64-musl@4.58.0':
- resolution: {integrity: sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==}
- cpu: [ppc64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-riscv64-gnu@4.58.0':
- resolution: {integrity: sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-riscv64-musl@4.58.0':
- resolution: {integrity: sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-s390x-gnu@4.58.0':
- resolution: {integrity: sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-x64-gnu@4.58.0':
- resolution: {integrity: sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==}
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
+ resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.58.0':
- resolution: {integrity: sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==}
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
+ resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.58.0':
- resolution: {integrity: sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==}
- cpu: [x64]
- os: [openbsd]
-
- '@rollup/rollup-openharmony-arm64@4.58.0':
- resolution: {integrity: sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==}
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
+ resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.58.0':
- resolution: {integrity: sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==}
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
+ resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
+ resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.58.0':
- resolution: {integrity: sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-gnu@4.58.0':
- resolution: {integrity: sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
+ resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.58.0':
- resolution: {integrity: sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==}
- cpu: [x64]
- os: [win32]
+ '@rolldown/pluginutils@1.0.0-rc.3':
+ resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
+
+ '@rolldown/pluginutils@1.0.0-rc.5':
+ resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==}
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
@@ -1607,6 +1575,9 @@ packages:
resolution: {integrity: sha512-42WoRePf8v690qG8yGRe/YOh+oHni9vUaUUfoqlS91U2scd3a5rkLtVsc6b7z60w3RogH0I00vdrC5AaeiZ18w==}
engines: {node: '>=20.19'}
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -1619,9 +1590,6 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
@@ -2156,9 +2124,9 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- rollup@4.58.0:
- resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ rolldown@1.0.0-rc.5:
+ resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
scheduler@0.27.0:
@@ -2339,15 +2307,16 @@ packages:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ vite@8.0.0-beta.15:
+ resolution: {integrity: sha512-RHX7IvsJlEfjyA1rS7MY0UsmF91etdLAamslHR5lfuO3W/BXRdXm2tRE64ztpSPZbKqB4wAAZ0AwtF6QzfKZLA==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.0.0-alpha.31
+ esbuild: ^0.27.0
jiti: '>=1.21.0'
less: ^4.0.0
- lightningcss: ^1.21.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
@@ -2358,12 +2327,14 @@ packages:
peerDependenciesMeta:
'@types/node':
optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
jiti:
optional: true
less:
optional: true
- lightningcss:
- optional: true
sass:
optional: true
sass-embedded:
@@ -2668,11 +2639,22 @@ snapshots:
'@date-fns/tz@1.4.1': {}
+ '@emnapi/core@1.8.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.8.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emotion/hash@0.8.0': {}
'@emotion/unitless@0.7.5': {}
@@ -2925,6 +2907,8 @@ snapshots:
'@kevisual/query@0.0.49': {}
+ '@kevisual/remote-app@0.0.4': {}
+
'@kevisual/router@0.0.83':
dependencies:
es-toolkit: 1.44.0
@@ -2954,6 +2938,13 @@ snapshots:
'@marijn/find-cluster-break@1.0.2': {}
+ '@napi-rs/wasm-runtime@1.1.1':
+ dependencies:
+ '@emnapi/core': 1.8.1
+ '@emnapi/runtime': 1.8.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
'@next/env@16.1.6': {}
'@next/swc-darwin-arm64@16.1.6':
@@ -2982,6 +2973,10 @@ snapshots:
'@noble/hashes@2.0.1': {}
+ '@oxc-project/runtime@0.114.0': {}
+
+ '@oxc-project/types@0.114.0': {}
+
'@paralleldrive/cuid2@3.3.0':
dependencies:
'@noble/hashes': 2.0.1
@@ -3494,82 +3489,50 @@ snapshots:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
+ '@rolldown/binding-android-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.5':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5':
+ optional: true
+
'@rolldown/pluginutils@1.0.0-rc.3': {}
- '@rollup/rollup-android-arm-eabi@4.58.0':
- optional: true
-
- '@rollup/rollup-android-arm64@4.58.0':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.58.0':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.58.0':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.58.0':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-loong64-musl@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-ppc64-musl@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.58.0':
- optional: true
-
- '@rollup/rollup-openbsd-x64@4.58.0':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.58.0':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.58.0':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.58.0':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.58.0':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.58.0':
- optional: true
+ '@rolldown/pluginutils@1.0.0-rc.5': {}
'@swc/helpers@0.5.15':
dependencies:
@@ -3636,12 +3599,12 @@ snapshots:
'@tailwindcss/oxide-win32-arm64-msvc': 4.2.0
'@tailwindcss/oxide-win32-x64-msvc': 4.2.0
- '@tailwindcss/vite@4.2.0(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))':
+ '@tailwindcss/vite@4.2.0(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))':
dependencies:
'@tailwindcss/node': 4.2.0
'@tailwindcss/oxide': 4.2.0
tailwindcss: 4.2.0
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)
+ vite: 8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)
'@tanstack/history@1.161.4': {}
@@ -3712,7 +3675,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/router-plugin@1.161.4(@tanstack/react-router@1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))':
+ '@tanstack/router-plugin@1.161.4(@tanstack/react-router@1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
@@ -3729,7 +3692,7 @@ snapshots:
zod: 3.25.76
optionalDependencies:
'@tanstack/react-router': 1.161.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)
+ vite: 8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
@@ -3753,6 +3716,11 @@ snapshots:
'@tanstack/virtual-file-routes@1.161.4': {}
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.29.0
@@ -3774,8 +3742,6 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
- '@types/estree@1.0.8': {}
-
'@types/node@25.3.0':
dependencies:
undici-types: 7.18.2
@@ -3815,7 +3781,7 @@ snapshots:
- '@codemirror/lint'
- '@codemirror/search'
- '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))':
+ '@vitejs/plugin-react@5.1.4(vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
@@ -3823,7 +3789,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-rc.3
'@types/babel__core': 7.20.5
react-refresh: 0.18.0
- vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)
+ vite: 8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)
transitivePeerDependencies:
- supports-color
@@ -4306,36 +4272,24 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
- rollup@4.58.0:
+ rolldown@1.0.0-rc.5:
dependencies:
- '@types/estree': 1.0.8
+ '@oxc-project/types': 0.114.0
+ '@rolldown/pluginutils': 1.0.0-rc.5
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.58.0
- '@rollup/rollup-android-arm64': 4.58.0
- '@rollup/rollup-darwin-arm64': 4.58.0
- '@rollup/rollup-darwin-x64': 4.58.0
- '@rollup/rollup-freebsd-arm64': 4.58.0
- '@rollup/rollup-freebsd-x64': 4.58.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.58.0
- '@rollup/rollup-linux-arm-musleabihf': 4.58.0
- '@rollup/rollup-linux-arm64-gnu': 4.58.0
- '@rollup/rollup-linux-arm64-musl': 4.58.0
- '@rollup/rollup-linux-loong64-gnu': 4.58.0
- '@rollup/rollup-linux-loong64-musl': 4.58.0
- '@rollup/rollup-linux-ppc64-gnu': 4.58.0
- '@rollup/rollup-linux-ppc64-musl': 4.58.0
- '@rollup/rollup-linux-riscv64-gnu': 4.58.0
- '@rollup/rollup-linux-riscv64-musl': 4.58.0
- '@rollup/rollup-linux-s390x-gnu': 4.58.0
- '@rollup/rollup-linux-x64-gnu': 4.58.0
- '@rollup/rollup-linux-x64-musl': 4.58.0
- '@rollup/rollup-openbsd-x64': 4.58.0
- '@rollup/rollup-openharmony-arm64': 4.58.0
- '@rollup/rollup-win32-arm64-msvc': 4.58.0
- '@rollup/rollup-win32-ia32-msvc': 4.58.0
- '@rollup/rollup-win32-x64-gnu': 4.58.0
- '@rollup/rollup-win32-x64-msvc': 4.58.0
- fsevents: 2.3.3
+ '@rolldown/binding-android-arm64': 1.0.0-rc.5
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.5
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.5
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.5
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.5
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.5
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.5
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.5
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.5
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5
scheduler@0.27.0: {}
@@ -4500,19 +4454,19 @@ snapshots:
- '@types/react'
- '@types/react-dom'
- vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0):
+ vite@8.0.0-beta.15(@types/node@25.3.0)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0):
dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
+ '@oxc-project/runtime': 0.114.0
+ lightningcss: 1.31.1
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.58.0
+ rolldown: 1.0.0-rc.5
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.3.0
+ esbuild: 0.27.3
fsevents: 2.3.3
jiti: 2.6.1
- lightningcss: 1.31.1
tsx: 4.21.0
w3c-keyname@2.2.8: {}
diff --git a/skills/page/references/page.tsx b/skills/page/references/page.tsx
index 8b384aa..30196f6 100644
--- a/skills/page/references/page.tsx
+++ b/skills/page/references/page.tsx
@@ -29,7 +29,6 @@ import {
} from "@/components/ui/select"
import { Plus, Pencil, Trash2 } from 'lucide-react';
import { LayoutUser } from '@/modules/layout/LayoutUser';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEditModal, setFormData, deleteDomain } = useDomainStore();
@@ -200,6 +199,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
\ No newline at end of file
+export default List
\ No newline at end of file
diff --git a/src/app/globals.css b/src/app/globals.css
deleted file mode 100644
index 0c4336f..0000000
--- a/src/app/globals.css
+++ /dev/null
@@ -1,164 +0,0 @@
-@import "tailwindcss";
-@import "tw-animate-css";
-
-@custom-variant dark (&:is(.dark *));
-
-@theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
- --font-sans: var(--font-geist-sans);
- --font-mono: var(--font-geist-mono);
- --color-sidebar-ring: var(--sidebar-ring);
- --color-sidebar-border: var(--sidebar-border);
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
- --color-sidebar-accent: var(--sidebar-accent);
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
- --color-sidebar-primary: var(--sidebar-primary);
- --color-sidebar-foreground: var(--sidebar-foreground);
- --color-sidebar: var(--sidebar);
- --color-chart-5: var(--chart-5);
- --color-chart-4: var(--chart-4);
- --color-chart-3: var(--chart-3);
- --color-chart-2: var(--chart-2);
- --color-chart-1: var(--chart-1);
- --color-ring: var(--ring);
- --color-input: var(--input);
- --color-border: var(--border);
- --color-destructive: var(--destructive);
- --color-accent-foreground: var(--accent-foreground);
- --color-accent: var(--accent);
- --color-muted-foreground: var(--muted-foreground);
- --color-muted: var(--muted);
- --color-secondary-foreground: var(--secondary-foreground);
- --color-secondary: var(--secondary);
- --color-primary-foreground: var(--primary-foreground);
- --color-primary: var(--primary);
- --color-popover-foreground: var(--popover-foreground);
- --color-popover: var(--popover);
- --color-card-foreground: var(--card-foreground);
- --color-card: var(--card);
- --radius-sm: calc(var(--radius) - 4px);
- --radius-md: calc(var(--radius) - 2px);
- --radius-lg: var(--radius);
- --radius-xl: calc(var(--radius) + 4px);
- --radius-2xl: calc(var(--radius) + 8px);
- --radius-3xl: calc(var(--radius) + 12px);
- --radius-4xl: calc(var(--radius) + 16px);
-}
-
-:root {
- --radius: 0.625rem;
- --card: oklch(1 0 0);
- --card-foreground: oklch(0.145 0 0);
- --popover: oklch(1 0 0);
- --popover-foreground: oklch(0.145 0 0);
- --primary: oklch(0.205 0 0);
- --primary-foreground: oklch(0.985 0 0);
- --secondary: oklch(0.97 0 0);
- --secondary-foreground: oklch(0.205 0 0);
- --muted: oklch(0.97 0 0);
- --muted-foreground: oklch(0.556 0 0);
- --accent: oklch(0.97 0 0);
- --accent-foreground: oklch(0.205 0 0);
- --destructive: oklch(0.577 0.245 27.325);
- --border: oklch(0.922 0 0);
- --input: oklch(0.922 0 0);
- --ring: oklch(0.708 0 0);
- --chart-1: oklch(0.646 0.222 41.116);
- --chart-2: oklch(0.6 0.118 184.704);
- --chart-3: oklch(0.398 0.07 227.392);
- --chart-4: oklch(0.828 0.189 84.429);
- --chart-5: oklch(0.769 0.188 70.08);
- --sidebar: oklch(0.985 0 0);
- --sidebar-foreground: oklch(0.145 0 0);
- --sidebar-primary: oklch(0.205 0 0);
- --sidebar-primary-foreground: oklch(0.985 0 0);
- --sidebar-accent: oklch(0.97 0 0);
- --sidebar-accent-foreground: oklch(0.205 0 0);
- --sidebar-border: oklch(0.922 0 0);
- --sidebar-ring: oklch(0.708 0 0);
- --background: oklch(1 0 0);
- --foreground: oklch(0.145 0 0);
-}
-
-.dark {
- --background: oklch(0.145 0 0);
- --foreground: oklch(0.985 0 0);
- --card: oklch(0.205 0 0);
- --card-foreground: oklch(0.985 0 0);
- --popover: oklch(0.205 0 0);
- --popover-foreground: oklch(0.985 0 0);
- --primary: oklch(0.922 0 0);
- --primary-foreground: oklch(0.205 0 0);
- --secondary: oklch(0.269 0 0);
- --secondary-foreground: oklch(0.985 0 0);
- --muted: oklch(0.269 0 0);
- --muted-foreground: oklch(0.708 0 0);
- --accent: oklch(0.269 0 0);
- --accent-foreground: oklch(0.985 0 0);
- --destructive: oklch(0.704 0.191 22.216);
- --border: oklch(1 0 0 / 10%);
- --input: oklch(1 0 0 / 15%);
- --ring: oklch(0.556 0 0);
- --chart-1: oklch(0.488 0.243 264.376);
- --chart-2: oklch(0.696 0.17 162.48);
- --chart-3: oklch(0.769 0.188 70.08);
- --chart-4: oklch(0.627 0.265 303.9);
- --chart-5: oklch(0.645 0.246 16.439);
- --sidebar: oklch(0.205 0 0);
- --sidebar-foreground: oklch(0.985 0 0);
- --sidebar-primary: oklch(0.488 0.243 264.376);
- --sidebar-primary-foreground: oklch(0.985 0 0);
- --sidebar-accent: oklch(0.269 0 0);
- --sidebar-accent-foreground: oklch(0.985 0 0);
- --sidebar-border: oklch(1 0 0 / 10%);
- --sidebar-ring: oklch(0.556 0 0);
-}
-
-@layer base {
- * {
- @apply border-border outline-ring/50;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
-
-html,body {
- height: 100%;
- overflow: hidden;
-}
-
-@utility scrollbar {
- overflow: auto;
- /* 整个滚动条 */
- &::-webkit-scrollbar {
- width: 3px;
- height: 3px;
- }
- &::-webkit-scrollbar-track {
- background-color: var(--color-scrollbar-track);
- }
- /* 滚动条有滑块的轨道部分 */
- &::-webkit-scrollbar-track-piece {
- background-color: transparent;
- border-radius: 1px;
- }
-
- /* 滚动条滑块(竖向:vertical 横向:horizontal) */
- &::-webkit-scrollbar-thumb {
- cursor: pointer;
- background-color: var(--color-scrollbar-thumb);
- border-radius: 5px;
- }
-
- /* 滚动条滑块hover */
- &::-webkit-scrollbar-thumb:hover {
- background-color: var(--color-scrollbar-thumb-hover);
- }
-
- /* 同时有垂直和水平滚动条时交汇的部分 */
- &::-webkit-scrollbar-corner {
- display: block; /* 修复交汇时出现的白块 */
- }
-}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
deleted file mode 100644
index e074239..0000000
--- a/src/app/layout.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import type { Metadata, Viewport } from "next";
-import { Geist, Geist_Mono } from "next/font/google";
-import "./globals.css";
-import { Toaster } from 'sonner'
-
-const geistSans = Geist({
- variable: "--font-geist-sans",
- subsets: ["latin"],
-});
-
-const geistMono = Geist_Mono({
- variable: "--font-geist-mono",
- subsets: ["latin"],
-});
-
-export const metadata: Metadata = {
- title: "Light Code",
- description: "直觉、高效的代码编辑",
-};
-
-export const viewport: Viewport = {
- themeColor: "#000000",
- width: "device-width",
- initialScale: 1,
- maximumScale: 1,
- userScalable: false,
-};
-
-export default function RootLayout({
- children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
- return (
-
-
- {children}
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/app/page.tsx b/src/app/page.tsx
deleted file mode 100644
index 06674c2..0000000
--- a/src/app/page.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-'use client';
-import { LayoutMain } from "@/modules/layout";
-
-export default function Home() {
- return (
-
-
-
-
-
- );
-}
diff --git a/src/modules/layout/LayoutUser.tsx b/src/modules/layout/LayoutUser.tsx
index 450176f..c1f2cf3 100644
--- a/src/modules/layout/LayoutUser.tsx
+++ b/src/modules/layout/LayoutUser.tsx
@@ -1,11 +1,10 @@
'use strict';
import { useShallow } from 'zustand/react/shallow';
import { useLayoutStore } from './store';
-import clsx from 'clsx';
import { toast as message } from 'sonner';
import { useMemo } from 'react';
import { queryLogin } from '../query';
-import { LogOut, Map, SquareUser, Users, X, ArrowDownLeftFromSquareIcon } from 'lucide-react';
+import { LogOut, Users, X, ArrowDownLeftFromSquareIcon } from 'lucide-react';
import { Button } from '@/components/ui/button';
import {
DropdownMenu,
@@ -14,11 +13,12 @@ import {
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import {
- Tooltip,
- TooltipContent,
- TooltipProvider,
- TooltipTrigger,
-} from '@/components/ui/tooltip';
+ Drawer,
+ DrawerContent,
+ DrawerHeader,
+ DrawerTitle,
+ DrawerDescription,
+} from '@/components/ui/drawer';
import { openLink } from '../basename';
export const LayoutUser = () => {
@@ -87,92 +87,82 @@ export const LayoutUser = () => {
}, [store.me]);
return (
-
-
-
{
- setOpen(false);
- }}>
-
-
-
- 用户: {store.me?.username}
-
-
+
+
+
+
+
+ 用户: {store.me?.username}
+
+
+
{items.length > 0 && (
-
-
-
-
-
-
-
- {items.map((item, index) => (
- {
- store.switchOrg(item.key, 'org');
- }}>
- {item.icon}
- {item.label}
-
- ))}
-
-
-
-
- 切换组织
-
-
+
+
+
+
+
+ {items.map((item, index) => (
+ {
+ store.switchOrg(item.key);
+ }}>
+ {item.icon}
+ {item.label}
+
+ ))}
+
+
)}
-
-
-
- {menu.map((item, index) => {
- return (
-
{
- if (item.link) {
- openLink(item.link, '_self');
- setOpen(false);
- } else {
- message.info('即将上线');
- }
- }}>
-
{item.icon}
-
{item.title}
-
- );
- })}
-
- {
- const res = await queryLogin.logout();
- if (res.success) {
- const url = new URL(location.origin);
- url.pathname = '/root/login';
- openLink(url.toString(), '_self');
- } else {
- message.error(res.message || '退出失败');
- }
- }}>
-
-
-
-
退出登录
+
+ 用户信息和账户管理
+
+
+
+
+
+ {menu.map((item, index) => (
+
{
+ if (item.link) {
+ openLink(item.link, '_self');
+ setOpen(false);
+ } else {
+ message.info('即将上线');
+ }
+ }}>
+
{item.icon}
+
{item.title}
+
+ ))}
-
-
+
+
);
};
diff --git a/src/modules/layout/index.tsx b/src/modules/layout/index.tsx
index 420212f..0aec4a1 100644
--- a/src/modules/layout/index.tsx
+++ b/src/modules/layout/index.tsx
@@ -57,10 +57,7 @@ export const LayoutMain = (props: LayoutMainProps) => {
useLayoutEffect(() => {
platformStore.init();
- }, []);
-
- useEffect(() => {
- menuStore.getMe();
+ console.log('menuStore', menuStore.me);
}, []);
return (
@@ -76,7 +73,6 @@ export const LayoutMain = (props: LayoutMainProps) => {
{quickMenu.map((item, index) => {
const isActive = location.pathname === item.link;
- console.log('isActive', location, item.link, isActive);
return (
{
{
- menuStore.switchOrg('', 'user');
+ menuStore.switchOrg('');
}}>
diff --git a/src/modules/layout/store/index.ts b/src/modules/layout/store/index.ts
index 30df147..faab359 100644
--- a/src/modules/layout/store/index.ts
+++ b/src/modules/layout/store/index.ts
@@ -2,6 +2,7 @@
import { query, queryLogin } from '@/modules/query';
import { create } from 'zustand';
import { toast as message } from 'sonner';
+import { useLayoutStore } from '@/pages/auth/store';
export const getIsMac = async () => {
// @ts-ignore
const userAgentData = navigator.userAgentData;
@@ -68,38 +69,4 @@ export type LayoutStore = {
setIsAdmin: (isAdmin: boolean) => void;
checkHasOrg: () => boolean;
};
-export const useLayoutStore = create((set, get) => ({
- open: false,
- setOpen: (open) => set({ open }),
- me: {},
- setMe: (me) => set({ me }),
- getMe: async () => {
- const res = await queryLogin.getMe();
- if (res.code === 200) {
- set({ me: res.data });
- set({ isAdmin: res.data.orgs?.includes('admin') });
- }
- },
- openUser: false,
- setOpenUser: (openUser) => set({ openUser }),
- switchOrg: async (username?: string, type?: string) => {
- const res = await queryLogin.switchUser(username || '');
- if (res.code === 200) {
- message.success('Switch success');
- setTimeout(() => {
- window.location.reload();
- }, 1000);
- } else {
- message.error(res.message || 'Request failed');
- }
- },
- isAdmin: false,
- setIsAdmin: (isAdmin) => set({ isAdmin }),
- checkHasOrg: () => {
- const user = get().me || {};
- if (!user.orgs) {
- return false;
- }
- return user?.orgs?.length > 0;
- },
-}));
+export { useLayoutStore }
\ No newline at end of file
diff --git a/src/modules/query.ts b/src/modules/query.ts
index 11928d9..8fa2026 100644
--- a/src/modules/query.ts
+++ b/src/modules/query.ts
@@ -3,7 +3,15 @@ import { QueryLoginBrowser } from '@kevisual/api/query-login'
import { useContextKey } from '@kevisual/context';
export const query = useContextKey('query', new Query({
url: '/api/router',
+
}));
+query.afterResponse = async (response, ctx) => {
+ if (response.code === 401) {
+ queryLogin.logout();
+ setTimeout(() => { location.reload() }, 2000);
+ }
+ return response;
+}
export const queryClient = useContextKey('queryClient', new Query({
url: '/client/router',
diff --git a/src/pages/apps/app/AIEditorLink.tsx b/src/pages/apps/app/AIEditorLink.tsx
index 782272b..899d671 100644
--- a/src/pages/apps/app/AIEditorLink.tsx
+++ b/src/pages/apps/app/AIEditorLink.tsx
@@ -20,9 +20,8 @@ export const AIEditorLink = (props: Props) => {
return (
- {
if (!layoutUser.user) {
toast.error('请先登录');
@@ -39,7 +38,7 @@ export const AIEditorLink = (props: Props) => {
openLink(openUrl, '_blank');
}}>
-
+
打开对应的文件夹
diff --git a/src/pages/apps/app/page.tsx b/src/pages/apps/app/page.tsx
index cb4fd7e..b3852bf 100644
--- a/src/pages/apps/app/page.tsx
+++ b/src/pages/apps/app/page.tsx
@@ -17,8 +17,7 @@ import { Controller, useForm } from 'react-hook-form';
import { pick } from 'es-toolkit';
import { useAppDeleteModalStore, AppDeleteModal } from '../modules/AppDeleteModal';
import { AIEditorLink } from './AIEditorLink';
-import { openLink } from '@/modules/basename';
-import { LayoutMain } from '@/modules/layout';
+import { useNavigate } from '@tanstack/react-router';
const FormModal = () => {
const { control, handleSubmit, reset } = useForm();
@@ -130,6 +129,7 @@ export const AppVersionList = () => {
}),
);
const [isUpload, setIsUpload] = useState(false);
+ const navigate = useNavigate();
useEffect(() => {
// fetch app version list
if (appKey) {
@@ -170,8 +170,7 @@ export const AppVersionList = () => {
variant='ghost'
size='icon'
onClick={() => {
- // navigate('/app/edit/list');
- history.back();
+ navigate({ to: '/apps' });
}}>
@@ -236,7 +235,7 @@ export const AppVersionList = () => {
if (isRunning) {
const origin = typeof window !== 'undefined' ? window.location.origin : '';
const link = new URL(`/test/${item.id}`, origin);
- openLink(link.toString(), '_blank');
+ window.open(link.toString(), '_blank');
} else {
message.error('The app is not running');
}
@@ -372,7 +371,5 @@ export const AppVersionFile = () => {
};
export default () => {
- return
-
-
+ return
};
\ No newline at end of file
diff --git a/src/pages/apps/layouts/index.tsx b/src/pages/apps/layouts/index.tsx
deleted file mode 100644
index 9851c52..0000000
--- a/src/pages/apps/layouts/index.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-'use client';
-
-import { LayoutMain } from '@/modules/layout';
-
-export const Main = () => {
- return
;
-};
diff --git a/src/pages/apps/page.tsx b/src/pages/apps/page.tsx
index 57ba04c..c8f9eaa 100644
--- a/src/pages/apps/page.tsx
+++ b/src/pages/apps/page.tsx
@@ -34,18 +34,17 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/ui/select';
-import { LayoutMain } from '@/modules/layout';
-import { openLink } from '@/modules/basename';
+import { useNavigate } from '@tanstack/react-router';
export const IconButton = (props: any) => {
return (
-
{props.children}
-
+
);
};
const FormModal = () => {
@@ -276,6 +275,7 @@ export const List = () => {
useEffect(() => {
userAppStore.getList();
}, []);
+ const navigate = useNavigate();
return (
@@ -301,7 +301,7 @@ export const List = () => {
padding: '8px',
}}
onClick={() => {
- openLink('/domain/', '_self');
+ navigate({ to: '/domain' });
}}>
@@ -367,68 +367,59 @@ export const List = () => {
- {
userAppStore.getUserApp(item.id);
userAppStore.setFormData(item);
userAppStore.setShowEdit(true);
}}>
-
+
编辑
- {
- const url = `/apps/app?appKey=${item.key}`;
- openLink(url, '_self');
+ navigate({
+ to: `/apps/app?appKey=${item.key}`,
+ })
}}
-
>
-
+
版本列表
- {
userAppStore.getUserApp(item.id);
userAppStore.setFormData(item);
userAppStore.setShowShareEdit(true);
}}>
-
+
{iText.share.tips}
- {
appVersionStore.publishVersion({ appKey: item.key, version: item.version }, { showToast: true });
}}>
-
+
重新加载
- {
if (isRunning) {
let baseUri = typeof window !== 'undefined' ? window.location.origin : '';
@@ -441,35 +432,33 @@ export const List = () => {
baseUri = new URL('https://' + item.domain).toString();
}
if (baseUri.endsWith('/')) {
- openLink(baseUri, '_blank');
+ window.open(baseUri, '_blank');
}
console.log('baseUri', baseUri);
message.success('success');
return;
}
const link = new URL(`/${item.user}/${item.key}/`, baseUri);
- openLink(link.toString(), '_blank');
+ window.open(link.toString(), '_blank');
} else {
message.error('应用未运行');
}
}}>
-
+
打开应用
- {
appDeleteModalStore.onClickDelete('user-app', item);
e.stopPropagation();
}}>
-
+
删除
diff --git a/src/pages/apps/store/user-app.ts b/src/pages/apps/store/user-app.ts
index 85d42a0..c5c9752 100644
--- a/src/pages/apps/store/user-app.ts
+++ b/src/pages/apps/store/user-app.ts
@@ -43,7 +43,8 @@ export const useUserAppStore = create
((set, get) => {
});
set({ loading: false });
if (res.code === 200) {
- set({ list: res.data });
+ const list = res.data.list || [];
+ set({ list: list });
} else {
message.error(res.message || 'Request failed');
}
diff --git a/src/pages/auth/index.tsx b/src/pages/auth/index.tsx
index 041ff38..afa034a 100644
--- a/src/pages/auth/index.tsx
+++ b/src/pages/auth/index.tsx
@@ -15,7 +15,7 @@ export const AuthProvider = ({ children, mustLogin }: Props) => {
useEffect(() => {
store.init()
}, [])
- const loginUrl = '/root/login?redirect=' + encodeURIComponent(window.location.href);
+ const loginUrl = '/root/login/?redirect=' + encodeURIComponent(window.location.href);
if (mustLogin && !store.me) {
return (
@@ -27,13 +27,15 @@ export const AuthProvider = ({ children, mustLogin }: Props) => {
需要登录
请先登录以继续访问此页面
- {
+ window.open(loginUrl, '_self')
+ }}
>
立即登录
-
+
)
diff --git a/src/pages/auth/store.ts b/src/pages/auth/store.ts
index 2d5223b..4ec23a6 100644
--- a/src/pages/auth/store.ts
+++ b/src/pages/auth/store.ts
@@ -54,11 +54,12 @@ export const useLayoutStore = create((set, get) => ({
setIsAdmin: (isAdmin) => set({ isAdmin }),
init: async () => {
const token = await queryLogin.getToken()
+ console.log('token', token);
if (token) {
const user = await queryLogin.checkLocalUser() as UserInfo;
+ console.log('local user', user);
if (user) {
- set({ me: user });
- set({ isAdmin: user.orgs?.includes?.('admin') || false });
+ set({ me: user, isAdmin: user.orgs?.includes?.('admin') || false });
}
}
}
diff --git a/src/pages/config/env/page.tsx b/src/pages/config/env/page.tsx
index 0bba09f..b298dc4 100644
--- a/src/pages/config/env/page.tsx
+++ b/src/pages/config/env/page.tsx
@@ -208,7 +208,7 @@ export default function EnvPage() {
}
return (
-
+
diff --git a/src/pages/config/page.tsx b/src/pages/config/page.tsx
index 25268ec..cd8bffa 100644
--- a/src/pages/config/page.tsx
+++ b/src/pages/config/page.tsx
@@ -26,7 +26,6 @@ import {
PopoverTrigger,
} from '@/components/ui/popover';
import { Plus, Pencil, Trash2, Code } from 'lucide-react';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEdit, setFormData, deleteConfig, setShowDataEdit, setDataFormData } = useConfigStore();
@@ -90,12 +89,11 @@ const TableList = () => {
-
+
删除
-
+
确认删除该配置?
@@ -301,6 +299,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
+export default List
diff --git a/src/pages/domain/page.tsx b/src/pages/domain/page.tsx
index 8b384aa..4495978 100644
--- a/src/pages/domain/page.tsx
+++ b/src/pages/domain/page.tsx
@@ -18,7 +18,6 @@ import {
DialogContent,
DialogHeader,
DialogTitle,
- DialogTrigger,
} from '@/components/ui/dialog';
import {
Select,
@@ -29,7 +28,6 @@ import {
} from "@/components/ui/select"
import { Plus, Pencil, Trash2 } from 'lucide-react';
import { LayoutUser } from '@/modules/layout/LayoutUser';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEditModal, setFormData, deleteDomain } = useDomainStore();
@@ -181,18 +179,14 @@ export const List = () => {
return (
-
+
{
+ setShowEditModal(true);
+ setFormData({});
+ }}>
+
+ 添加
+
@@ -200,6 +194,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
\ No newline at end of file
+export default List
\ No newline at end of file
diff --git a/src/pages/domain/store/index .ts b/src/pages/domain/store/index .ts
index fd1d43c..a4d356c 100644
--- a/src/pages/domain/store/index .ts
+++ b/src/pages/domain/store/index .ts
@@ -33,7 +33,7 @@ interface Store {
export const useDomainStore = create
((set, get) => ({
getDomainList: async () => {
const res = await query.get({
- path: 'app.domain.manager',
+ path: 'app_domain_manager',
key: 'list',
});
if (res.code === 200) {
@@ -43,7 +43,7 @@ export const useDomainStore = create((set, get) => ({
},
updateDomain: async (data: any, opts?: { refresh?: boolean }) => {
const res = await query.post({
- path: 'app.domain.manager',
+ path: 'app_domain_manager',
key: 'update',
data,
});
@@ -61,7 +61,7 @@ export const useDomainStore = create((set, get) => ({
},
deleteDomain: async (data: any) => {
const res = await query.post({
- path: 'app.domain.manager',
+ path: 'app_domain_manager',
key: 'delete',
data,
});
@@ -74,7 +74,7 @@ export const useDomainStore = create((set, get) => ({
},
getDomainDetail: async (data: any) => {
const res = await query.post({
- path: 'app.domain.manager',
+ path: 'app_domain_manager',
key: 'get',
data,
});
diff --git a/src/pages/flowme/channel/page.tsx b/src/pages/flowme/channel/page.tsx
index 283fcc4..7cc8b62 100644
--- a/src/pages/flowme/channel/page.tsx
+++ b/src/pages/flowme/channel/page.tsx
@@ -18,10 +18,8 @@ import {
DialogContent,
DialogHeader,
DialogTitle,
- DialogTrigger,
} from '@/components/ui/dialog';
import { Plus, Pencil, Trash2 } from 'lucide-react';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEdit, setFormData, deleteData } = useFlowmeChannelStore();
@@ -163,18 +161,14 @@ export const List = () => {
return (
-
+
{
+ setShowEdit(true);
+ setFormData({});
+ }}>
+
+ 添加
+
@@ -182,6 +176,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
+export default List
diff --git a/src/pages/flowme/page.tsx b/src/pages/flowme/page.tsx
index ff7522d..542074f 100644
--- a/src/pages/flowme/page.tsx
+++ b/src/pages/flowme/page.tsx
@@ -18,10 +18,8 @@ import {
DialogContent,
DialogHeader,
DialogTitle,
- DialogTrigger,
} from '@/components/ui/dialog';
import { Plus, Pencil, Trash2 } from 'lucide-react';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEdit, setFormData, deleteData } = useFlowmeStore();
@@ -172,18 +170,14 @@ export const List = () => {
return (
-
+
{
+ setShowEdit(true);
+ setFormData({});
+ }}>
+
+ 添加
+
@@ -191,6 +185,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
+export default List
diff --git a/src/pages/org/page.tsx b/src/pages/org/page.tsx
index b9dee80..beed3cf 100644
--- a/src/pages/org/page.tsx
+++ b/src/pages/org/page.tsx
@@ -24,7 +24,6 @@ import {
PopoverTrigger,
} from '@/components/ui/popover';
import { Plus, Pencil, Trash2, Users } from 'lucide-react';
-import { LayoutMain } from '@/modules/layout';
import { UserDrawer } from './components/UserDrawer';
const TableList = () => {
@@ -75,12 +74,12 @@ const TableList = () => {
-
+
删除
-
+
确认删除该组织?
@@ -204,6 +203,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-}
+export default List
diff --git a/src/pages/page.tsx b/src/pages/page.tsx
index 89bf1a9..2a7d2bf 100644
--- a/src/pages/page.tsx
+++ b/src/pages/page.tsx
@@ -1,6 +1,6 @@
export default function Home() {
return (
-
+
diff --git a/src/pages/remote/page.tsx b/src/pages/remote/page.tsx
index baa8c4e..44c3fc3 100644
--- a/src/pages/remote/page.tsx
+++ b/src/pages/remote/page.tsx
@@ -1,5 +1,4 @@
'use client';
-import { LayoutMain } from "@/modules/layout";
import { RemoteApp } from "@kevisual/remote-app";
import { useEffect } from "react";
import { QueryRouterServer } from "@kevisual/router/browser";
@@ -54,10 +53,8 @@ export default function Home() {
}
}
return (
-
-
-
-
+
);
}
diff --git a/src/pages/token/page.tsx b/src/pages/token/page.tsx
index f398d55..de3cc23 100644
--- a/src/pages/token/page.tsx
+++ b/src/pages/token/page.tsx
@@ -6,7 +6,6 @@ import { Controller, useForm } from 'react-hook-form';
import { Plus, Pencil, Trash2, Calendar as CalendarIcon, Eye, Copy } from 'lucide-react';
import { toast } from 'sonner';
import { useConfigStore, type Item } from './store';
-import { LayoutMain } from '@/modules/layout';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
@@ -264,6 +263,4 @@ export const List = () => {
);
};
-export default () => {
- return
;
-};
+export default List
diff --git a/src/pages/user/page.tsx b/src/pages/user/page.tsx
index f57b8cd..4cac8dc 100644
--- a/src/pages/user/page.tsx
+++ b/src/pages/user/page.tsx
@@ -20,7 +20,6 @@ import {
CardHeader,
CardTitle,
} from '@/components/ui/card';
-import { LayoutMain } from '@/modules/layout';
import { Pencil, Key, User } from 'lucide-react';
import PandaPNG from '@/assets/panda.jpg';
@@ -53,7 +52,7 @@ const ProfileCard = () => {
/>
) : (

@@ -287,6 +286,4 @@ export const UserProfile = () => {
);
};
-export default () => {
- return
;
-}
+export default UserProfile
diff --git a/src/pages/users/page.tsx b/src/pages/users/page.tsx
index f7dbe3a..1c0ee56 100644
--- a/src/pages/users/page.tsx
+++ b/src/pages/users/page.tsx
@@ -25,7 +25,6 @@ import {
PopoverTrigger,
} from '@/components/ui/popover';
import { Plus, Pencil, Trash2 } from 'lucide-react';
-import { LayoutMain } from '@/modules/layout';
const TableList = () => {
const { list, setShowEdit, setFormData, getList } = useUserStore();
@@ -71,13 +70,12 @@ const TableList = () => {
onOpenChange={(open) => setOpenPopover(open ? user.id : null)}
>
-
删除
-
+
@@ -221,4 +219,4 @@ export const List = () => {
);
};
-export default
\ No newline at end of file
+export default List
\ No newline at end of file
diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts
index c0992dd..8ea9c89 100644
--- a/src/routeTree.gen.ts
+++ b/src/routeTree.gen.ts
@@ -9,12 +9,48 @@
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
import { Route as rootRouteImport } from './routes/__root'
-import { Route as AppsRouteImport } from './routes/apps'
+import { Route as UsersRouteImport } from './routes/users'
+import { Route as UserRouteImport } from './routes/user'
+import { Route as TokenRouteImport } from './routes/token'
+import { Route as RemoteRouteImport } from './routes/remote'
+import { Route as OrgRouteImport } from './routes/org'
+import { Route as DomainRouteImport } from './routes/domain'
import { Route as IndexRouteImport } from './routes/index'
+import { Route as FlowmeIndexRouteImport } from './routes/flowme/index'
+import { Route as ConfigIndexRouteImport } from './routes/config/index'
+import { Route as AppsIndexRouteImport } from './routes/apps/index'
+import { Route as FlowmeChannelRouteImport } from './routes/flowme/channel'
+import { Route as ConfigEnvRouteImport } from './routes/config/env'
+import { Route as AppsAppRouteImport } from './routes/apps/app'
-const AppsRoute = AppsRouteImport.update({
- id: '/apps',
- path: '/apps',
+const UsersRoute = UsersRouteImport.update({
+ id: '/users',
+ path: '/users',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const UserRoute = UserRouteImport.update({
+ id: '/user',
+ path: '/user',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const TokenRoute = TokenRouteImport.update({
+ id: '/token',
+ path: '/token',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const RemoteRoute = RemoteRouteImport.update({
+ id: '/remote',
+ path: '/remote',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const OrgRoute = OrgRouteImport.update({
+ id: '/org',
+ path: '/org',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const DomainRoute = DomainRouteImport.update({
+ id: '/domain',
+ path: '/domain',
getParentRoute: () => rootRouteImport,
} as any)
const IndexRoute = IndexRouteImport.update({
@@ -22,40 +58,189 @@ const IndexRoute = IndexRouteImport.update({
path: '/',
getParentRoute: () => rootRouteImport,
} as any)
+const FlowmeIndexRoute = FlowmeIndexRouteImport.update({
+ id: '/flowme/',
+ path: '/flowme/',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const ConfigIndexRoute = ConfigIndexRouteImport.update({
+ id: '/config/',
+ path: '/config/',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const AppsIndexRoute = AppsIndexRouteImport.update({
+ id: '/apps/',
+ path: '/apps/',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const FlowmeChannelRoute = FlowmeChannelRouteImport.update({
+ id: '/flowme/channel',
+ path: '/flowme/channel',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const ConfigEnvRoute = ConfigEnvRouteImport.update({
+ id: '/config/env',
+ path: '/config/env',
+ getParentRoute: () => rootRouteImport,
+} as any)
+const AppsAppRoute = AppsAppRouteImport.update({
+ id: '/apps/app',
+ path: '/apps/app',
+ getParentRoute: () => rootRouteImport,
+} as any)
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
- '/apps': typeof AppsRoute
+ '/domain': typeof DomainRoute
+ '/org': typeof OrgRoute
+ '/remote': typeof RemoteRoute
+ '/token': typeof TokenRoute
+ '/user': typeof UserRoute
+ '/users': typeof UsersRoute
+ '/apps/app': typeof AppsAppRoute
+ '/config/env': typeof ConfigEnvRoute
+ '/flowme/channel': typeof FlowmeChannelRoute
+ '/apps/': typeof AppsIndexRoute
+ '/config/': typeof ConfigIndexRoute
+ '/flowme/': typeof FlowmeIndexRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
- '/apps': typeof AppsRoute
+ '/domain': typeof DomainRoute
+ '/org': typeof OrgRoute
+ '/remote': typeof RemoteRoute
+ '/token': typeof TokenRoute
+ '/user': typeof UserRoute
+ '/users': typeof UsersRoute
+ '/apps/app': typeof AppsAppRoute
+ '/config/env': typeof ConfigEnvRoute
+ '/flowme/channel': typeof FlowmeChannelRoute
+ '/apps': typeof AppsIndexRoute
+ '/config': typeof ConfigIndexRoute
+ '/flowme': typeof FlowmeIndexRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
- '/apps': typeof AppsRoute
+ '/domain': typeof DomainRoute
+ '/org': typeof OrgRoute
+ '/remote': typeof RemoteRoute
+ '/token': typeof TokenRoute
+ '/user': typeof UserRoute
+ '/users': typeof UsersRoute
+ '/apps/app': typeof AppsAppRoute
+ '/config/env': typeof ConfigEnvRoute
+ '/flowme/channel': typeof FlowmeChannelRoute
+ '/apps/': typeof AppsIndexRoute
+ '/config/': typeof ConfigIndexRoute
+ '/flowme/': typeof FlowmeIndexRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
- fullPaths: '/' | '/apps'
+ fullPaths:
+ | '/'
+ | '/domain'
+ | '/org'
+ | '/remote'
+ | '/token'
+ | '/user'
+ | '/users'
+ | '/apps/app'
+ | '/config/env'
+ | '/flowme/channel'
+ | '/apps/'
+ | '/config/'
+ | '/flowme/'
fileRoutesByTo: FileRoutesByTo
- to: '/' | '/apps'
- id: '__root__' | '/' | '/apps'
+ to:
+ | '/'
+ | '/domain'
+ | '/org'
+ | '/remote'
+ | '/token'
+ | '/user'
+ | '/users'
+ | '/apps/app'
+ | '/config/env'
+ | '/flowme/channel'
+ | '/apps'
+ | '/config'
+ | '/flowme'
+ id:
+ | '__root__'
+ | '/'
+ | '/domain'
+ | '/org'
+ | '/remote'
+ | '/token'
+ | '/user'
+ | '/users'
+ | '/apps/app'
+ | '/config/env'
+ | '/flowme/channel'
+ | '/apps/'
+ | '/config/'
+ | '/flowme/'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
- AppsRoute: typeof AppsRoute
+ DomainRoute: typeof DomainRoute
+ OrgRoute: typeof OrgRoute
+ RemoteRoute: typeof RemoteRoute
+ TokenRoute: typeof TokenRoute
+ UserRoute: typeof UserRoute
+ UsersRoute: typeof UsersRoute
+ AppsAppRoute: typeof AppsAppRoute
+ ConfigEnvRoute: typeof ConfigEnvRoute
+ FlowmeChannelRoute: typeof FlowmeChannelRoute
+ AppsIndexRoute: typeof AppsIndexRoute
+ ConfigIndexRoute: typeof ConfigIndexRoute
+ FlowmeIndexRoute: typeof FlowmeIndexRoute
}
declare module '@tanstack/react-router' {
interface FileRoutesByPath {
- '/apps': {
- id: '/apps'
- path: '/apps'
- fullPath: '/apps'
- preLoaderRoute: typeof AppsRouteImport
+ '/users': {
+ id: '/users'
+ path: '/users'
+ fullPath: '/users'
+ preLoaderRoute: typeof UsersRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/user': {
+ id: '/user'
+ path: '/user'
+ fullPath: '/user'
+ preLoaderRoute: typeof UserRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/token': {
+ id: '/token'
+ path: '/token'
+ fullPath: '/token'
+ preLoaderRoute: typeof TokenRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/remote': {
+ id: '/remote'
+ path: '/remote'
+ fullPath: '/remote'
+ preLoaderRoute: typeof RemoteRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/org': {
+ id: '/org'
+ path: '/org'
+ fullPath: '/org'
+ preLoaderRoute: typeof OrgRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/domain': {
+ id: '/domain'
+ path: '/domain'
+ fullPath: '/domain'
+ preLoaderRoute: typeof DomainRouteImport
parentRoute: typeof rootRouteImport
}
'/': {
@@ -65,12 +250,65 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof IndexRouteImport
parentRoute: typeof rootRouteImport
}
+ '/flowme/': {
+ id: '/flowme/'
+ path: '/flowme'
+ fullPath: '/flowme/'
+ preLoaderRoute: typeof FlowmeIndexRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/config/': {
+ id: '/config/'
+ path: '/config'
+ fullPath: '/config/'
+ preLoaderRoute: typeof ConfigIndexRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/apps/': {
+ id: '/apps/'
+ path: '/apps'
+ fullPath: '/apps/'
+ preLoaderRoute: typeof AppsIndexRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/flowme/channel': {
+ id: '/flowme/channel'
+ path: '/flowme/channel'
+ fullPath: '/flowme/channel'
+ preLoaderRoute: typeof FlowmeChannelRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/config/env': {
+ id: '/config/env'
+ path: '/config/env'
+ fullPath: '/config/env'
+ preLoaderRoute: typeof ConfigEnvRouteImport
+ parentRoute: typeof rootRouteImport
+ }
+ '/apps/app': {
+ id: '/apps/app'
+ path: '/apps/app'
+ fullPath: '/apps/app'
+ preLoaderRoute: typeof AppsAppRouteImport
+ parentRoute: typeof rootRouteImport
+ }
}
}
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
- AppsRoute: AppsRoute,
+ DomainRoute: DomainRoute,
+ OrgRoute: OrgRoute,
+ RemoteRoute: RemoteRoute,
+ TokenRoute: TokenRoute,
+ UserRoute: UserRoute,
+ UsersRoute: UsersRoute,
+ AppsAppRoute: AppsAppRoute,
+ ConfigEnvRoute: ConfigEnvRoute,
+ FlowmeChannelRoute: FlowmeChannelRoute,
+ AppsIndexRoute: AppsIndexRoute,
+ ConfigIndexRoute: ConfigIndexRoute,
+ FlowmeIndexRoute: FlowmeIndexRoute,
}
export const routeTree = rootRouteImport
._addFileChildren(rootRouteChildren)
diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx
index cc3b025..cc7922e 100644
--- a/src/routes/__root.tsx
+++ b/src/routes/__root.tsx
@@ -24,8 +24,8 @@ function RootComponent() {
*/}
-
-
+
+
diff --git a/src/routes/apps/app.tsx b/src/routes/apps/app.tsx
new file mode 100644
index 0000000..65af1cc
--- /dev/null
+++ b/src/routes/apps/app.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import AppDetail from '@/pages/apps/app/page'
+
+export const Route = createFileRoute('/apps/app')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/apps.tsx b/src/routes/apps/index.tsx
similarity index 78%
rename from src/routes/apps.tsx
rename to src/routes/apps/index.tsx
index a6cbf3d..ab3c5d2 100644
--- a/src/routes/apps.tsx
+++ b/src/routes/apps/index.tsx
@@ -1,6 +1,6 @@
import { createFileRoute } from '@tanstack/react-router'
import App from '@/pages/apps/page'
-export const Route = createFileRoute('/apps')({
+export const Route = createFileRoute('/apps/')({
component: RouteComponent,
})
diff --git a/src/routes/config/env.tsx b/src/routes/config/env.tsx
new file mode 100644
index 0000000..c2556be
--- /dev/null
+++ b/src/routes/config/env.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import ConfigEnv from '@/pages/config/env/page'
+
+export const Route = createFileRoute('/config/env')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/config/index.tsx b/src/routes/config/index.tsx
new file mode 100644
index 0000000..49c63c0
--- /dev/null
+++ b/src/routes/config/index.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Config from '@/pages/config/page'
+
+export const Route = createFileRoute('/config/')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/domain.tsx b/src/routes/domain.tsx
new file mode 100644
index 0000000..ec08982
--- /dev/null
+++ b/src/routes/domain.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Domain from '@/pages/domain/page'
+
+export const Route = createFileRoute('/domain')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/flowme/channel.tsx b/src/routes/flowme/channel.tsx
new file mode 100644
index 0000000..0203a31
--- /dev/null
+++ b/src/routes/flowme/channel.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import FlowmeChannel from '@/pages/flowme/channel/page'
+
+export const Route = createFileRoute('/flowme/channel')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/flowme/index.tsx b/src/routes/flowme/index.tsx
new file mode 100644
index 0000000..044cdcc
--- /dev/null
+++ b/src/routes/flowme/index.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Flowme from '@/pages/flowme/page'
+
+export const Route = createFileRoute('/flowme/')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/org.tsx b/src/routes/org.tsx
new file mode 100644
index 0000000..3b783be
--- /dev/null
+++ b/src/routes/org.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Org from '@/pages/org/page'
+
+export const Route = createFileRoute('/org')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/remote.tsx b/src/routes/remote.tsx
new file mode 100644
index 0000000..9fa9ba8
--- /dev/null
+++ b/src/routes/remote.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Remote from '@/pages/remote/page'
+
+export const Route = createFileRoute('/remote')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/token.tsx b/src/routes/token.tsx
new file mode 100644
index 0000000..200af0b
--- /dev/null
+++ b/src/routes/token.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Token from '@/pages/token/page'
+
+export const Route = createFileRoute('/token')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/user.tsx b/src/routes/user.tsx
new file mode 100644
index 0000000..e38dd97
--- /dev/null
+++ b/src/routes/user.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import User from '@/pages/user/page'
+
+export const Route = createFileRoute('/user')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}
diff --git a/src/routes/users.tsx b/src/routes/users.tsx
new file mode 100644
index 0000000..b484f64
--- /dev/null
+++ b/src/routes/users.tsx
@@ -0,0 +1,10 @@
+import { createFileRoute } from '@tanstack/react-router'
+import Users from '@/pages/users/page'
+
+export const Route = createFileRoute('/users')({
+ component: RouteComponent,
+})
+
+function RouteComponent() {
+ return
+}