create-secra 0.1.7 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/antd-adapter-template/README.md +24 -0
- package/antd-adapter-template/index.html +16 -0
- package/antd-adapter-template/package-lock.json +3420 -0
- package/antd-adapter-template/package.json +20 -47
- package/antd-adapter-template/src/app/App.tsx +7 -0
- package/antd-adapter-template/src/app/layouts/AppLayout.tsx +163 -0
- package/antd-adapter-template/src/app/router.ts +26 -0
- package/antd-adapter-template/src/app/routes/RouteTitleSync.tsx +26 -0
- package/antd-adapter-template/src/app/routes/dynamic-routes.ts +52 -0
- package/antd-adapter-template/src/app/routes/route-modules.ts +4 -0
- package/antd-adapter-template/src/app/routes/static-routes.tsx +110 -0
- package/antd-adapter-template/src/app/routes/types.ts +9 -0
- package/antd-adapter-template/src/features/auth/api/auth-api.ts +61 -0
- package/antd-adapter-template/src/features/auth/auth-store.ts +125 -0
- package/antd-adapter-template/src/features/auth/auth-types.ts +29 -0
- package/antd-adapter-template/src/features/auth/authorization.ts +46 -0
- package/antd-adapter-template/src/features/auth/use-auth.ts +10 -0
- package/antd-adapter-template/src/main.tsx +79 -0
- package/antd-adapter-template/src/pages/dashboard/DashboardPage.tsx +105 -0
- package/antd-adapter-template/src/pages/errors/ForbiddenPage.tsx +36 -0
- package/antd-adapter-template/src/pages/errors/NotFoundPage.tsx +36 -0
- package/antd-adapter-template/src/pages/home/HomePage.tsx +129 -0
- package/antd-adapter-template/src/pages/login/LoginPage.tsx +128 -0
- package/antd-adapter-template/src/pages/permission-test/PermissionTestPage.tsx +55 -0
- package/antd-adapter-template/src/pages/restricted/RestrictedDemoPage.tsx +17 -0
- package/antd-adapter-template/src/shared/kernel/app-kernel.ts +10 -0
- package/antd-adapter-template/src/shared/request/client.ts +46 -0
- package/antd-adapter-template/src/shared/request/contracts.ts +6 -0
- package/antd-adapter-template/src/shared/request/kv-adapter.ts +14 -0
- package/antd-adapter-template/src/shared/request/kv-backend.ts +244 -0
- package/antd-adapter-template/src/shared/request/ky-browser-stub.ts +6 -0
- package/antd-adapter-template/src/shared/request/undici-browser-stub.ts +4 -0
- package/antd-adapter-template/src/styles/global.css +185 -0
- package/antd-adapter-template/src/vite-env.d.ts +2 -0
- package/antd-adapter-template/tsconfig.app.json +10 -13
- package/antd-adapter-template/tsconfig.json +7 -2
- package/antd-adapter-template/tsconfig.node.json +6 -16
- package/antd-adapter-template/vite.config.ts +24 -0
- package/bin/index.mjs +29 -5
- package/package.json +2 -2
- package/template/apps/core/src/main.tsx +34 -13
- package/template/package.json +6 -2
- package/template/packages/sdk/package.json +3 -0
- package/template/packages/sdk/src/request/index.ts +1 -1
- package/template/pnpm-lock.yaml +67 -88
- package/antd-adapter-template/apps/core/index.html +0 -13
- package/antd-adapter-template/apps/core/package.json +0 -18
- package/antd-adapter-template/apps/core/public/favicon.ico +0 -1
- package/antd-adapter-template/apps/core/public/favicon.svg +0 -1
- package/antd-adapter-template/apps/core/public/logo.svg +0 -1
- package/antd-adapter-template/apps/core/src/api/auth.ts +0 -49
- package/antd-adapter-template/apps/core/src/assets/react.svg +0 -1
- package/antd-adapter-template/apps/core/src/components/AntdGlobalProvider.tsx +0 -87
- package/antd-adapter-template/apps/core/src/components/AntdRootLayout.tsx +0 -10
- package/antd-adapter-template/apps/core/src/components/layout.tsx +0 -387
- package/antd-adapter-template/apps/core/src/guards/auth-route-guard.ts +0 -45
- package/antd-adapter-template/apps/core/src/main.tsx +0 -65
- package/antd-adapter-template/apps/core/src/pages/auth/components/account-login-fields.tsx +0 -60
- package/antd-adapter-template/apps/core/src/pages/auth/components/phone-login-fields.tsx +0 -60
- package/antd-adapter-template/apps/core/src/pages/auth/login.tsx +0 -169
- package/antd-adapter-template/apps/core/src/pages/index.tsx +0 -156
- package/antd-adapter-template/apps/core/src/router.ts +0 -42
- package/antd-adapter-template/apps/core/src/shims/use-sync-external-store-shim.ts +0 -3
- package/antd-adapter-template/apps/core/src/theme/theme.css +0 -48
- package/antd-adapter-template/apps/core/src/types/crypto-js.d.ts +0 -5
- package/antd-adapter-template/apps/core/src/utils/index.ts +0 -12
- package/antd-adapter-template/apps/core/src/utils/md5.ts +0 -6
- package/antd-adapter-template/apps/core/tsconfig.app.json +0 -11
- package/antd-adapter-template/apps/core/tsconfig.json +0 -13
- package/antd-adapter-template/apps/core/tsconfig.node.json +0 -7
- package/antd-adapter-template/apps/core/vite.config.ts +0 -118
- package/antd-adapter-template/eslint.config.js +0 -23
- package/antd-adapter-template/packages/sdk/.swcrc +0 -18
- package/antd-adapter-template/packages/sdk/package.json +0 -52
- package/antd-adapter-template/packages/sdk/src/build/index.ts +0 -28
- package/antd-adapter-template/packages/sdk/src/build/plugins/auto-import.ts +0 -46
- package/antd-adapter-template/packages/sdk/src/build/plugins/bundle-analyzer.ts +0 -33
- package/antd-adapter-template/packages/sdk/src/build/plugins/remove-console.ts +0 -23
- package/antd-adapter-template/packages/sdk/src/build/plugins/unocss.ts +0 -202
- package/antd-adapter-template/packages/sdk/src/build/plugins/unplugin-icon.ts +0 -43
- package/antd-adapter-template/packages/sdk/src/components/i18n-switch-dropdown.tsx +0 -139
- package/antd-adapter-template/packages/sdk/src/components/index.ts +0 -2
- package/antd-adapter-template/packages/sdk/src/components/theme-switch-dropdown.tsx +0 -131
- package/antd-adapter-template/packages/sdk/src/hooks/auth/core.ts +0 -101
- package/antd-adapter-template/packages/sdk/src/hooks/auth/index.ts +0 -139
- package/antd-adapter-template/packages/sdk/src/hooks/auth/with-auth.tsx +0 -41
- package/antd-adapter-template/packages/sdk/src/hooks/index.ts +0 -1
- package/antd-adapter-template/packages/sdk/src/i18n/index.ts +0 -150
- package/antd-adapter-template/packages/sdk/src/index.ts +0 -11
- package/antd-adapter-template/packages/sdk/src/request/index.ts +0 -436
- package/antd-adapter-template/packages/sdk/src/storage/README.md +0 -30
- package/antd-adapter-template/packages/sdk/src/storage/index.ts +0 -57
- package/antd-adapter-template/packages/sdk/src/styles/reset.css +0 -111
- package/antd-adapter-template/packages/sdk/src/theme/index.ts +0 -466
- package/antd-adapter-template/packages/sdk/tsconfig.json +0 -16
- package/antd-adapter-template/pnpm-workspace.yaml +0 -3
- package/antd-adapter-template/turbo.json +0 -17
package/bin/index.mjs
CHANGED
|
@@ -15,12 +15,23 @@ const TEMPLATE_OPTIONS = [
|
|
|
15
15
|
label: "最小可用版本",
|
|
16
16
|
templatePath: DEFAULT_TEMPLATE,
|
|
17
17
|
templateName: "template",
|
|
18
|
+
nextSteps: (manager, targetDir) => [
|
|
19
|
+
` cd ${targetDir}`,
|
|
20
|
+
` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
|
|
21
|
+
" pnpm -r --filter \"./packages/*\" build",
|
|
22
|
+
" pnpm dev",
|
|
23
|
+
],
|
|
18
24
|
},
|
|
19
25
|
{
|
|
20
26
|
key: "2",
|
|
21
27
|
label: "antd UI 适配器版本",
|
|
22
28
|
templatePath: ANT_DESIGN_ADAPTER_TEMPLATE,
|
|
23
29
|
templateName: "antd-adapter-template",
|
|
30
|
+
nextSteps: (manager, targetDir) => [
|
|
31
|
+
` cd ${targetDir}`,
|
|
32
|
+
` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
|
|
33
|
+
` ${manager} dev`,
|
|
34
|
+
],
|
|
24
35
|
},
|
|
25
36
|
];
|
|
26
37
|
const EXCLUDED_DIRS = new Set(["node_modules", "dist", ".turbo", ".git"]);
|
|
@@ -172,6 +183,7 @@ async function resolveTemplate() {
|
|
|
172
183
|
template: templateFromEnv,
|
|
173
184
|
selectedName: templateName || "custom",
|
|
174
185
|
selectedLabel: templateName || "自定义模板",
|
|
186
|
+
nextSteps: null,
|
|
175
187
|
};
|
|
176
188
|
}
|
|
177
189
|
|
|
@@ -182,6 +194,7 @@ async function resolveTemplate() {
|
|
|
182
194
|
template: matchedByName.templatePath,
|
|
183
195
|
selectedName: matchedByName.templateName,
|
|
184
196
|
selectedLabel: matchedByName.label,
|
|
197
|
+
nextSteps: matchedByName.nextSteps,
|
|
185
198
|
};
|
|
186
199
|
}
|
|
187
200
|
}
|
|
@@ -192,6 +205,7 @@ async function resolveTemplate() {
|
|
|
192
205
|
template: matchedByArg.templatePath,
|
|
193
206
|
selectedName: matchedByArg.templateName,
|
|
194
207
|
selectedLabel: matchedByArg.label,
|
|
208
|
+
nextSteps: matchedByArg.nextSteps,
|
|
195
209
|
};
|
|
196
210
|
}
|
|
197
211
|
|
|
@@ -201,6 +215,7 @@ async function resolveTemplate() {
|
|
|
201
215
|
template: fallback.templatePath,
|
|
202
216
|
selectedName: fallback.templateName,
|
|
203
217
|
selectedLabel: fallback.label,
|
|
218
|
+
nextSteps: fallback.nextSteps,
|
|
204
219
|
};
|
|
205
220
|
}
|
|
206
221
|
|
|
@@ -209,11 +224,12 @@ async function resolveTemplate() {
|
|
|
209
224
|
template: selected.templatePath,
|
|
210
225
|
selectedName: selected.templateName,
|
|
211
226
|
selectedLabel: selected.label,
|
|
227
|
+
nextSteps: selected.nextSteps,
|
|
212
228
|
};
|
|
213
229
|
}
|
|
214
230
|
|
|
215
231
|
async function main() {
|
|
216
|
-
const { template, selectedLabel } = await resolveTemplate();
|
|
232
|
+
const { template, selectedLabel, nextSteps } = await resolveTemplate();
|
|
217
233
|
|
|
218
234
|
if (existsSync(targetPath)) {
|
|
219
235
|
const files = readdirSync(targetPath);
|
|
@@ -242,10 +258,18 @@ async function main() {
|
|
|
242
258
|
const manager = detectPackageManager(targetPath);
|
|
243
259
|
|
|
244
260
|
console.log(`[create-secra] Done. Next steps:`);
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
261
|
+
const renderedNextSteps =
|
|
262
|
+
typeof nextSteps === "function"
|
|
263
|
+
? nextSteps(manager, targetDir)
|
|
264
|
+
: [
|
|
265
|
+
` cd ${targetDir}`,
|
|
266
|
+
` ${manager === "yarn" ? "yarn" : `${manager} install`}`,
|
|
267
|
+
` ${manager} dev`,
|
|
268
|
+
];
|
|
269
|
+
|
|
270
|
+
renderedNextSteps.forEach((step) => {
|
|
271
|
+
console.log(step);
|
|
272
|
+
});
|
|
249
273
|
}
|
|
250
274
|
|
|
251
275
|
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-secra",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Create a Secra project from the official template.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"scaffold"
|
|
18
18
|
],
|
|
19
19
|
"scripts": {
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT"
|
|
23
23
|
}
|
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
import '@vlian/sdk/reset.css';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
import { kernelStartApp, type KernelRenderContext } from '@vlian/framework/kernel';
|
|
3
|
+
import { LogLevel } from "@vlian/logger";
|
|
4
|
+
import {StrictMode} from "react";
|
|
5
|
+
import { createRoot } from 'react-dom/client';
|
|
6
|
+
import App from "./pages/index.tsx"
|
|
7
|
+
const container = document.getElementById('root');
|
|
8
|
+
|
|
9
|
+
if (!container) {
|
|
10
|
+
throw new Error('Root container #root was not found.');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const rootContainer = container;
|
|
14
|
+
|
|
15
|
+
const startApp = async () => {
|
|
16
|
+
await kernelStartApp({
|
|
17
|
+
config: {
|
|
18
|
+
logger: {
|
|
19
|
+
level: import.meta.env.PROD ? LogLevel.INFO : LogLevel.DEBUG,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
render: (_context: KernelRenderContext) => {
|
|
23
|
+
|
|
24
|
+
const root = createRoot(rootContainer);
|
|
25
|
+
|
|
26
|
+
root.render(
|
|
27
|
+
<StrictMode>
|
|
28
|
+
<App />
|
|
29
|
+
</StrictMode>,
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void startApp();
|
package/template/package.json
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
"version": "0.0.1",
|
|
5
5
|
"packageManager": "pnpm@9.12.3",
|
|
6
6
|
"scripts": {
|
|
7
|
+
"build:packages": "pnpm -r --filter \"./packages/*\" build",
|
|
8
|
+
"prebuild": "pnpm run build:packages",
|
|
9
|
+
"predev": "pnpm run build:packages",
|
|
7
10
|
"build": "turbo run build",
|
|
8
11
|
"dev": "turbo run dev",
|
|
9
12
|
"lint": "turbo run lint",
|
|
@@ -12,9 +15,10 @@
|
|
|
12
15
|
},
|
|
13
16
|
"dependencies": {
|
|
14
17
|
"@ant-design/icons": "^6.1.0",
|
|
15
|
-
"@vlian/framework": "^
|
|
16
|
-
"@vlian/
|
|
18
|
+
"@vlian/framework": "^2.0.3",
|
|
19
|
+
"@vlian/logger": "^0.1.1",
|
|
17
20
|
"@vlian/sdk": "workspace:*",
|
|
21
|
+
"@vlian/utils": "^2.0.1",
|
|
18
22
|
"ahooks": "^3.8.5",
|
|
19
23
|
"antd": "^5.29.3",
|
|
20
24
|
"i18next": "^25.7.4",
|
package/template/pnpm-lock.yaml
CHANGED
|
@@ -12,14 +12,17 @@ importers:
|
|
|
12
12
|
specifier: ^6.1.0
|
|
13
13
|
version: 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
|
14
14
|
'@vlian/framework':
|
|
15
|
-
specifier: ^
|
|
16
|
-
version:
|
|
17
|
-
'@vlian/
|
|
18
|
-
specifier: ^0.
|
|
19
|
-
version: 0.
|
|
15
|
+
specifier: ^2.0.3
|
|
16
|
+
version: 2.0.3(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))(i18next@25.8.0(typescript@5.9.3))
|
|
17
|
+
'@vlian/logger':
|
|
18
|
+
specifier: ^0.1.1
|
|
19
|
+
version: 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
|
|
20
20
|
'@vlian/sdk':
|
|
21
21
|
specifier: workspace:*
|
|
22
22
|
version: link:packages/sdk
|
|
23
|
+
'@vlian/utils':
|
|
24
|
+
specifier: ^2.0.1
|
|
25
|
+
version: 2.0.1(axios@1.13.2)(react@19.2.3)
|
|
23
26
|
ahooks:
|
|
24
27
|
specifier: ^3.8.5
|
|
25
28
|
version: 3.9.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
|
@@ -142,6 +145,10 @@ importers:
|
|
|
142
145
|
apps/core: {}
|
|
143
146
|
|
|
144
147
|
packages/sdk:
|
|
148
|
+
dependencies:
|
|
149
|
+
'@vlian/request':
|
|
150
|
+
specifier: ^0.1.0
|
|
151
|
+
version: 0.1.3(@vlian/csrf@0.1.2)(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))))
|
|
145
152
|
devDependencies:
|
|
146
153
|
'@swc/cli':
|
|
147
154
|
specifier: ^0.7.3
|
|
@@ -170,12 +177,6 @@ packages:
|
|
|
170
177
|
react: '>=16.0.0'
|
|
171
178
|
react-dom: '>=16.0.0'
|
|
172
179
|
|
|
173
|
-
'@ant-design/cssinjs@2.0.3':
|
|
174
|
-
resolution: {integrity: sha512-HAo8SZ3a6G8v6jT0suCz1270na6EA3obeJWM4uzRijBhdwdoMAXWK2f4WWkwB28yUufsfk3CAhN1coGPQq4kNQ==}
|
|
175
|
-
peerDependencies:
|
|
176
|
-
react: '>=16.0.0'
|
|
177
|
-
react-dom: '>=16.0.0'
|
|
178
|
-
|
|
179
180
|
'@ant-design/fast-color@2.0.6':
|
|
180
181
|
resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==}
|
|
181
182
|
engines: {node: '>=8.x'}
|
|
@@ -955,35 +956,46 @@ packages:
|
|
|
955
956
|
peerDependencies:
|
|
956
957
|
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
|
|
957
958
|
|
|
958
|
-
'@vlian/
|
|
959
|
-
resolution: {integrity: sha512-
|
|
959
|
+
'@vlian/csrf@0.1.2':
|
|
960
|
+
resolution: {integrity: sha512-kXu4Uo2geux+wCAfornRCCdn34hrI7jeb5XSmvo/acEZWKax4uW7lEfco4XuA0j71pBp1hydFf3iJVJ4wnElXw==}
|
|
961
|
+
engines: {node: '>=16.0.0'}
|
|
962
|
+
|
|
963
|
+
'@vlian/framework@2.0.3':
|
|
964
|
+
resolution: {integrity: sha512-j+43f4zCQ2EJ7ffojkS9t/Y11/KImye8RLNE1frhLg5bIqwRx+dmn5cEmm4bPfMCpWUCbu1V4fC+zfTHZaPxYQ==}
|
|
960
965
|
engines: {node: '>=16.0.0'}
|
|
961
966
|
peerDependencies:
|
|
962
|
-
|
|
967
|
+
'@vlian/logger': ^0.1.0
|
|
968
|
+
'@vlian/utils': ^2.0.1
|
|
963
969
|
i18next: ^23.0.0 || ^24.0.0 || ^25.0.0
|
|
964
|
-
react: ^18.0.0 || ^19.0.0
|
|
965
|
-
react-dom: ^18.0.0 || ^19.0.0
|
|
966
|
-
react-i18next: ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
|
|
967
|
-
react-router-dom: ^6.0.0 || ^7.0.0
|
|
968
970
|
|
|
969
|
-
'@vlian/
|
|
970
|
-
resolution: {integrity: sha512-
|
|
971
|
+
'@vlian/logger@0.1.1':
|
|
972
|
+
resolution: {integrity: sha512-sS8GA5wqTU2bDtVdg+c1JNjK3NmK/rE5Yk57T3ieRivkhWY4rQMAQ0gQ9QriEfRyJ6MlHfj0vL9SNB1O3g5E2Q==}
|
|
973
|
+
engines: {node: '>=16.0.0'}
|
|
971
974
|
peerDependencies:
|
|
972
|
-
'@vlian/
|
|
975
|
+
'@vlian/utils': ^2.0.1
|
|
973
976
|
|
|
974
|
-
'@vlian/
|
|
975
|
-
resolution: {integrity: sha512-
|
|
977
|
+
'@vlian/monitoring@0.1.1':
|
|
978
|
+
resolution: {integrity: sha512-pXUid+p3rudGoKE2g93gkJmbPcFtTxUZvtaZQMoKU+W1wJqvuS2zGYfOEq23Q8EvAINdnl3wXKGPSfhQ0vSK2Q==}
|
|
979
|
+
engines: {node: '>=16.0.0'}
|
|
976
980
|
peerDependencies:
|
|
977
|
-
'@
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
'@vlian/utils@0.0.40':
|
|
984
|
-
resolution: {integrity: sha512-50lxeXRGv9byrcerMZmL7Akd/DushCiFIVQzgmy+hmY4treEOfzceGYqLJydDWIavCgYXYCnpRtmL0CTwMIgQw==}
|
|
981
|
+
'@vlian/logger': ^0.1.0
|
|
982
|
+
|
|
983
|
+
'@vlian/request@0.1.3':
|
|
984
|
+
resolution: {integrity: sha512-+LE9Wxj/Qn5d66vz63Z4uGa5ZflaVa9OBrcyIjEXcLTQ7ApC4z12Medlt862yUFai78Bw2Q7Cjd4Qz3pdqN5vw==}
|
|
985
|
+
engines: {node: '>=16.0.0'}
|
|
985
986
|
peerDependencies:
|
|
986
|
-
|
|
987
|
+
'@vlian/csrf': ^0.1.2
|
|
988
|
+
'@vlian/logger': ^0.1.0
|
|
989
|
+
'@vlian/monitoring': ^0.1.0
|
|
990
|
+
|
|
991
|
+
'@vlian/utils@2.0.1':
|
|
992
|
+
resolution: {integrity: sha512-vj2xSjXiUFPG2UqTgQSTvUnq16voairfXGeGda2T+1ifV2SnwAOfLpI+K6mroAn3ceSeeLDgLopX9qZ35EFLQw==}
|
|
993
|
+
peerDependencies:
|
|
994
|
+
axios: ^1.12.0
|
|
995
|
+
dexie: ^4.3.0
|
|
996
|
+
peerDependenciesMeta:
|
|
997
|
+
dexie:
|
|
998
|
+
optional: true
|
|
987
999
|
|
|
988
1000
|
'@vue/compiler-core@3.0.11':
|
|
989
1001
|
resolution: {integrity: sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw==}
|
|
@@ -1526,9 +1538,6 @@ packages:
|
|
|
1526
1538
|
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
|
|
1527
1539
|
engines: {node: '>=8'}
|
|
1528
1540
|
|
|
1529
|
-
dexie@4.2.1:
|
|
1530
|
-
resolution: {integrity: sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==}
|
|
1531
|
-
|
|
1532
1541
|
dom-serializer@0.2.2:
|
|
1533
1542
|
resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
|
|
1534
1543
|
|
|
@@ -1548,8 +1557,8 @@ packages:
|
|
|
1548
1557
|
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
|
|
1549
1558
|
engines: {node: '>= 4'}
|
|
1550
1559
|
|
|
1551
|
-
dompurify@3.3.
|
|
1552
|
-
resolution: {integrity: sha512-
|
|
1560
|
+
dompurify@3.3.3:
|
|
1561
|
+
resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==}
|
|
1553
1562
|
|
|
1554
1563
|
domutils@1.7.0:
|
|
1555
1564
|
resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
|
|
@@ -1895,7 +1904,7 @@ packages:
|
|
|
1895
1904
|
|
|
1896
1905
|
glob@7.2.3:
|
|
1897
1906
|
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
|
1898
|
-
deprecated:
|
|
1907
|
+
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
|
|
1899
1908
|
|
|
1900
1909
|
globals@14.0.0:
|
|
1901
1910
|
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
|
|
@@ -3070,11 +3079,6 @@ packages:
|
|
|
3070
3079
|
peerDependencies:
|
|
3071
3080
|
react: ^19.2.3
|
|
3072
3081
|
|
|
3073
|
-
react-error-boundary@6.1.0:
|
|
3074
|
-
resolution: {integrity: sha512-02k9WQ/mUhdbXir0tC1NiMesGzRPaCsJEWU/4bcFrbY1YMZOtHShtZP6zw0SJrBWA/31H0KT9/FgdL8+sPKgHA==}
|
|
3075
|
-
peerDependencies:
|
|
3076
|
-
react: ^18.0.0 || ^19.0.0
|
|
3077
|
-
|
|
3078
3082
|
react-fast-compare@3.2.2:
|
|
3079
3083
|
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
|
|
3080
3084
|
|
|
@@ -3187,6 +3191,7 @@ packages:
|
|
|
3187
3191
|
rolldown-vite@7.2.5:
|
|
3188
3192
|
resolution: {integrity: sha512-u09tdk/huMiN8xwoiBbig197jKdCamQTtOruSalOzbqGje3jdHiV0njQlAW0YvzoahkirFePNQ4RYlfnRQpXZA==}
|
|
3189
3193
|
engines: {node: ^20.19.0 || >=22.12.0}
|
|
3194
|
+
deprecated: Use 7.3.1 for migration purposes. For the most recent updates, migrate to Vite 8 once you're ready.
|
|
3190
3195
|
hasBin: true
|
|
3191
3196
|
peerDependencies:
|
|
3192
3197
|
'@types/node': ^20.19.0 || >=22.12.0
|
|
@@ -3904,18 +3909,6 @@ snapshots:
|
|
|
3904
3909
|
react-dom: 19.2.3(react@19.2.3)
|
|
3905
3910
|
stylis: 4.3.6
|
|
3906
3911
|
|
|
3907
|
-
'@ant-design/cssinjs@2.0.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
|
|
3908
|
-
dependencies:
|
|
3909
|
-
'@babel/runtime': 7.28.6
|
|
3910
|
-
'@emotion/hash': 0.8.0
|
|
3911
|
-
'@emotion/unitless': 0.7.5
|
|
3912
|
-
'@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
|
3913
|
-
clsx: 2.1.1
|
|
3914
|
-
csstype: 3.2.3
|
|
3915
|
-
react: 19.2.3
|
|
3916
|
-
react-dom: 19.2.3(react@19.2.3)
|
|
3917
|
-
stylis: 4.3.6
|
|
3918
|
-
|
|
3919
3912
|
'@ant-design/fast-color@2.0.6':
|
|
3920
3913
|
dependencies:
|
|
3921
3914
|
'@babel/runtime': 7.28.6
|
|
@@ -4748,49 +4741,41 @@ snapshots:
|
|
|
4748
4741
|
transitivePeerDependencies:
|
|
4749
4742
|
- supports-color
|
|
4750
4743
|
|
|
4751
|
-
'@vlian/
|
|
4744
|
+
'@vlian/csrf@0.1.2': {}
|
|
4745
|
+
|
|
4746
|
+
'@vlian/framework@2.0.3(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))(i18next@25.8.0(typescript@5.9.3))':
|
|
4752
4747
|
dependencies:
|
|
4753
|
-
'@vlian/
|
|
4754
|
-
'@vlian/utils':
|
|
4755
|
-
antd: 5.29.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
|
4756
|
-
dompurify: 3.3.1
|
|
4748
|
+
'@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
|
|
4749
|
+
'@vlian/utils': 2.0.1(axios@1.13.2)(react@19.2.3)
|
|
4757
4750
|
i18next: 25.8.0(typescript@5.9.3)
|
|
4758
|
-
react: 19.2.3
|
|
4759
|
-
react-dom: 19.2.3(react@19.2.3)
|
|
4760
|
-
react-error-boundary: 6.1.0(react@19.2.3)
|
|
4761
|
-
react-i18next: 15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
|
|
4762
|
-
react-router-dom: 7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
|
4763
4751
|
zod: 4.3.5
|
|
4764
|
-
transitivePeerDependencies:
|
|
4765
|
-
- '@ant-design/cssinjs'
|
|
4766
|
-
- axios
|
|
4767
|
-
- classnames
|
|
4768
4752
|
|
|
4769
|
-
'@vlian/
|
|
4753
|
+
'@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))':
|
|
4770
4754
|
dependencies:
|
|
4771
|
-
'@vlian/
|
|
4755
|
+
'@vlian/utils': 2.0.1(axios@1.13.2)(react@19.2.3)
|
|
4772
4756
|
|
|
4773
|
-
'@vlian/
|
|
4757
|
+
'@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))':
|
|
4774
4758
|
dependencies:
|
|
4775
|
-
'@
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4759
|
+
'@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
|
|
4760
|
+
|
|
4761
|
+
'@vlian/request@0.1.3(@vlian/csrf@0.1.2)(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))(@vlian/monitoring@0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))))':
|
|
4762
|
+
dependencies:
|
|
4763
|
+
'@vlian/csrf': 0.1.2
|
|
4764
|
+
'@vlian/logger': 0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3))
|
|
4765
|
+
'@vlian/monitoring': 0.1.1(@vlian/logger@0.1.1(@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)))
|
|
4782
4766
|
|
|
4783
|
-
'@vlian/utils@
|
|
4767
|
+
'@vlian/utils@2.0.1(axios@1.13.2)(react@19.2.3)':
|
|
4784
4768
|
dependencies:
|
|
4785
4769
|
axios: 1.13.2
|
|
4786
4770
|
axios-retry: 4.5.0(axios@1.13.2)
|
|
4787
4771
|
colord: 2.9.3
|
|
4788
4772
|
crypto-js: 4.2.0
|
|
4789
|
-
|
|
4773
|
+
dompurify: 3.3.3
|
|
4790
4774
|
lodash: 4.17.23
|
|
4791
4775
|
nanoid: 5.1.6
|
|
4792
4776
|
qs: 6.14.1
|
|
4793
4777
|
swr: 2.3.8(react@19.2.3)
|
|
4778
|
+
zod: 4.3.5
|
|
4794
4779
|
transitivePeerDependencies:
|
|
4795
4780
|
- react
|
|
4796
4781
|
|
|
@@ -5462,8 +5447,6 @@ snapshots:
|
|
|
5462
5447
|
|
|
5463
5448
|
detect-libc@2.1.2: {}
|
|
5464
5449
|
|
|
5465
|
-
dexie@4.2.1: {}
|
|
5466
|
-
|
|
5467
5450
|
dom-serializer@0.2.2:
|
|
5468
5451
|
dependencies:
|
|
5469
5452
|
domelementtype: 2.3.0
|
|
@@ -5487,7 +5470,7 @@ snapshots:
|
|
|
5487
5470
|
dependencies:
|
|
5488
5471
|
domelementtype: 2.3.0
|
|
5489
5472
|
|
|
5490
|
-
dompurify@3.3.
|
|
5473
|
+
dompurify@3.3.3:
|
|
5491
5474
|
optionalDependencies:
|
|
5492
5475
|
'@types/trusted-types': 2.0.7
|
|
5493
5476
|
|
|
@@ -7150,10 +7133,6 @@ snapshots:
|
|
|
7150
7133
|
react: 19.2.3
|
|
7151
7134
|
scheduler: 0.27.0
|
|
7152
7135
|
|
|
7153
|
-
react-error-boundary@6.1.0(react@19.2.3):
|
|
7154
|
-
dependencies:
|
|
7155
|
-
react: 19.2.3
|
|
7156
|
-
|
|
7157
7136
|
react-fast-compare@3.2.2: {}
|
|
7158
7137
|
|
|
7159
7138
|
react-i18next@15.7.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3):
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>core</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="root"></div>
|
|
11
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "core",
|
|
3
|
-
"private": true,
|
|
4
|
-
"version": "0.0.15",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "vite",
|
|
8
|
-
"build": "tsc -b && vite build",
|
|
9
|
-
"lint": "eslint .",
|
|
10
|
-
"preview": "vite preview"
|
|
11
|
-
},
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"@reduxjs/toolkit": "^2.11.0",
|
|
14
|
-
"@vlian/sdk": "workspace:*",
|
|
15
|
-
"crypto-js": "^4.2.0",
|
|
16
|
-
"lucide-react": "^0.575.0"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 109.07 100"><path fill="#24d6fe" d="M54.65 100l18.21-25.37H36.22L54.65 100z"/><path fill="#24d6fe" d="M72.86 24.94l-.07-.09L54.54 0 36.28 24.85l18.26 24.84 18.32 24.94 18.18 24.75 18.03-25.14-36.21-49.3z"/><path fill="#9e5df9" opacity=".5" d="M72.79 24.85L54.54 0 36.28 24.85l18.26 24.84 18.25-24.84z"/><path fill="#9e5df9" d="M36.22 49.69H18.03L0 74.24 18.09 99.3l18.13-24.67 18.32-24.94H36.22z"/></svg>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
export interface LoginRequest extends Record<string, unknown> {
|
|
2
|
-
identifier: string;
|
|
3
|
-
password: string;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface LoginUser {
|
|
7
|
-
id: string;
|
|
8
|
-
tenant_id: string;
|
|
9
|
-
display_name: string;
|
|
10
|
-
email: string | null;
|
|
11
|
-
phone: string | null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface LoginResponse {
|
|
15
|
-
access_token: string;
|
|
16
|
-
refresh_token: string;
|
|
17
|
-
token_type: string;
|
|
18
|
-
expires_in: number;
|
|
19
|
-
refresh_expires_in: number;
|
|
20
|
-
user: LoginUser;
|
|
21
|
-
require_password_change: boolean;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const MOCK_PASSWORD_MD5 = "0192023a7bbd73250516f069df18b500";
|
|
25
|
-
|
|
26
|
-
export const login = async (payload: LoginRequest): Promise<LoginResponse> => {
|
|
27
|
-
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
28
|
-
const identifier = payload.identifier.trim();
|
|
29
|
-
if (!identifier || payload.password !== MOCK_PASSWORD_MD5) {
|
|
30
|
-
throw new Error("用户名或密码错误");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const now = Date.now();
|
|
34
|
-
return {
|
|
35
|
-
access_token: `mock-access-token-${now}`,
|
|
36
|
-
refresh_token: `mock-refresh-token-${now}`,
|
|
37
|
-
token_type: "Bearer",
|
|
38
|
-
expires_in: 7200,
|
|
39
|
-
refresh_expires_in: 2592000,
|
|
40
|
-
user: {
|
|
41
|
-
id: "mock-user-1",
|
|
42
|
-
tenant_id: "mock-tenant-1",
|
|
43
|
-
display_name: identifier,
|
|
44
|
-
email: `${identifier}@example.com`,
|
|
45
|
-
phone: null,
|
|
46
|
-
},
|
|
47
|
-
require_password_change: false,
|
|
48
|
-
};
|
|
49
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
|