@allbluecn/web-app 0.17.0 → 0.17.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/package.json +1 -1
- package/src/components/landing/landing-page.tsx +20 -0
- package/src/lib/changelog/sdk-versions.ts +1 -1
- package/src/paraglide/README.md +1 -1
- package/src/paraglide/messages/_index.js +0 -48
- package/src/paraglide/messages/en.js +0 -15
- package/src/paraglide/messages/zh.js +0 -15
- package/src/routes/_nav/prd/index.tsx +1 -1
- package/src/routes/_nav/tags/index.tsx +1 -1
- package/src/routes/_public/index/route.tsx +2 -6
- package/src/server/middlewares/paraglide-locale.ts +39 -0
- package/src/start.ts +4 -1
- package/src/styles/globals.css +2 -3
- package/src/__tests__/bench/baselines/format-timestamp.json +0 -44
- package/src/assets/logo/logo.tsx +0 -70
- package/src/components/shadcn-space/animations/marquee.tsx +0 -139
- package/src/components/shadcn-space/blocks/about-us-01/about-us.tsx +0 -136
- package/src/components/shadcn-space/blocks/about-us-01/index.tsx +0 -62
- package/src/components/shadcn-space/blocks/cta-01/cta.tsx +0 -74
- package/src/components/shadcn-space/blocks/faq-01/faq.tsx +0 -100
- package/src/components/shadcn-space/blocks/footer-01/footer.tsx +0 -232
- package/src/components/shadcn-space/blocks/hero-01/brand-slider.tsx +0 -79
- package/src/components/shadcn-space/blocks/hero-01/header.tsx +0 -272
- package/src/components/shadcn-space/blocks/hero-01/hero.tsx +0 -111
- package/src/components/shadcn-space/blocks/hero-01/index.tsx +0 -127
- package/src/components/shadcn-space/blocks/portfolio-01/portfolio.tsx +0 -149
- package/src/components/shadcn-space/blocks/pricing-01/pricing.tsx +0 -187
- package/src/components/shadcn-space/blocks/pricing-02/pricing.tsx +0 -213
- package/src/components/shadcn-space/blocks/services-01/services.tsx +0 -178
- package/src/components/shadcn-space/blocks/team-01/team.tsx +0 -166
package/package.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// AllBlue - 理想之海
|
|
3
|
+
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
+
//
|
|
5
|
+
// This program is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU Affero General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
export function LandingPage() {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
@@ -95,7 +95,7 @@ export const SDK_GROUPS: SdkGroup[] = [
|
|
|
95
95
|
"items": [
|
|
96
96
|
{
|
|
97
97
|
"name": "@allbluecn/web-app",
|
|
98
|
-
"version": "v0.17.
|
|
98
|
+
"version": "v0.17.1",
|
|
99
99
|
"lastUpdate": "Sep 23, 2026",
|
|
100
100
|
"source": "apps/web/package.json",
|
|
101
101
|
"docsUrl": "https://github.com/allbluecn/allblue"
|
package/src/paraglide/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Auto-generated i18n message functions. Import `messages.js` to use translated strings.
|
|
4
4
|
|
|
5
|
-
Compiled from: `/Users/urmynami/HelloAI/AllBlue-Workspace/AllBlue/apps/web/project.inlang`
|
|
5
|
+
Compiled from: `/Users/urmynami/HelloAI/AllBlue-Workspace/AllBlue/.worktrees/refactor-landing-pro/apps/web/project.inlang`
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
## What is this folder?
|
|
@@ -324,9 +324,6 @@ import { getLocale, experimentalStaticLocale } from "../runtime.js"
|
|
|
324
324
|
/** @typedef {{}} Billing_Permonth1Inputs */
|
|
325
325
|
/** @typedef {{ name: NonNullable<unknown> }} Billing_Planname1Inputs */
|
|
326
326
|
/** @typedef {{ message: NonNullable<unknown> }} Billing_Portalopenfailed2Inputs */
|
|
327
|
-
/** @typedef {{}} Billing_Pricing_Freedesc1Inputs */
|
|
328
|
-
/** @typedef {{}} Billing_Pricing_Startfree1Inputs */
|
|
329
|
-
/** @typedef {{}} Billing_Pricing_Viewpro1Inputs */
|
|
330
327
|
/** @typedef {{}} Billing_Requireslogin1Inputs */
|
|
331
328
|
/** @typedef {{}} Billing_Saasonly1Inputs */
|
|
332
329
|
/** @typedef {{}} Billing_Seatsadd1Inputs */
|
|
@@ -8639,51 +8636,6 @@ export { billing_portalopenfailed2 as "billing_portalOpenFailed" }
|
|
|
8639
8636
|
/**
|
|
8640
8637
|
* | output |
|
|
8641
8638
|
* | --- |
|
|
8642
|
-
* | "Free to use, suitable for individuals and small teams" |
|
|
8643
|
-
*
|
|
8644
|
-
* @param {Billing_Pricing_Freedesc1Inputs} inputs
|
|
8645
|
-
* @param {{ locale?: "zh" | "en" }} options
|
|
8646
|
-
* @returns {LocalizedString}
|
|
8647
|
-
*/
|
|
8648
|
-
const billing_pricing_freedesc1 = /** @type {((inputs?: Billing_Pricing_Freedesc1Inputs, options?: { locale?: "zh" | "en" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Billing_Pricing_Freedesc1Inputs, { locale?: "zh" | "en" }, {}>} */ ((inputs = {}, options = {}) => {
|
|
8649
|
-
const locale = experimentalStaticLocale ?? options.locale ?? getLocale()
|
|
8650
|
-
if (locale === "en") return __en.billing_pricing_freedesc1(inputs)
|
|
8651
|
-
return __zh.billing_pricing_freedesc1(inputs)
|
|
8652
|
-
});
|
|
8653
|
-
export { billing_pricing_freedesc1 as "billing_pricing_freeDesc" }
|
|
8654
|
-
/**
|
|
8655
|
-
* | output |
|
|
8656
|
-
* | --- |
|
|
8657
|
-
* | "Start Free Now" |
|
|
8658
|
-
*
|
|
8659
|
-
* @param {Billing_Pricing_Startfree1Inputs} inputs
|
|
8660
|
-
* @param {{ locale?: "zh" | "en" }} options
|
|
8661
|
-
* @returns {LocalizedString}
|
|
8662
|
-
*/
|
|
8663
|
-
const billing_pricing_startfree1 = /** @type {((inputs?: Billing_Pricing_Startfree1Inputs, options?: { locale?: "zh" | "en" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Billing_Pricing_Startfree1Inputs, { locale?: "zh" | "en" }, {}>} */ ((inputs = {}, options = {}) => {
|
|
8664
|
-
const locale = experimentalStaticLocale ?? options.locale ?? getLocale()
|
|
8665
|
-
if (locale === "en") return __en.billing_pricing_startfree1(inputs)
|
|
8666
|
-
return __zh.billing_pricing_startfree1(inputs)
|
|
8667
|
-
});
|
|
8668
|
-
export { billing_pricing_startfree1 as "billing_pricing_startFree" }
|
|
8669
|
-
/**
|
|
8670
|
-
* | output |
|
|
8671
|
-
* | --- |
|
|
8672
|
-
* | "View Pro Plan Details" |
|
|
8673
|
-
*
|
|
8674
|
-
* @param {Billing_Pricing_Viewpro1Inputs} inputs
|
|
8675
|
-
* @param {{ locale?: "zh" | "en" }} options
|
|
8676
|
-
* @returns {LocalizedString}
|
|
8677
|
-
*/
|
|
8678
|
-
const billing_pricing_viewpro1 = /** @type {((inputs?: Billing_Pricing_Viewpro1Inputs, options?: { locale?: "zh" | "en" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Billing_Pricing_Viewpro1Inputs, { locale?: "zh" | "en" }, {}>} */ ((inputs = {}, options = {}) => {
|
|
8679
|
-
const locale = experimentalStaticLocale ?? options.locale ?? getLocale()
|
|
8680
|
-
if (locale === "en") return __en.billing_pricing_viewpro1(inputs)
|
|
8681
|
-
return __zh.billing_pricing_viewpro1(inputs)
|
|
8682
|
-
});
|
|
8683
|
-
export { billing_pricing_viewpro1 as "billing_pricing_viewPro" }
|
|
8684
|
-
/**
|
|
8685
|
-
* | output |
|
|
8686
|
-
* | --- |
|
|
8687
8639
|
* | "This feature requires an AllBlue account login" |
|
|
8688
8640
|
*
|
|
8689
8641
|
* @param {Billing_Requireslogin1Inputs} inputs
|
|
@@ -322,9 +322,6 @@
|
|
|
322
322
|
/** @typedef {{}} Billing_Permonth1Inputs */
|
|
323
323
|
/** @typedef {{ name: NonNullable<unknown> }} Billing_Planname1Inputs */
|
|
324
324
|
/** @typedef {{ message: NonNullable<unknown> }} Billing_Portalopenfailed2Inputs */
|
|
325
|
-
/** @typedef {{}} Billing_Pricing_Freedesc1Inputs */
|
|
326
|
-
/** @typedef {{}} Billing_Pricing_Startfree1Inputs */
|
|
327
|
-
/** @typedef {{}} Billing_Pricing_Viewpro1Inputs */
|
|
328
325
|
/** @typedef {{}} Billing_Requireslogin1Inputs */
|
|
329
326
|
/** @typedef {{}} Billing_Saasonly1Inputs */
|
|
330
327
|
/** @typedef {{}} Billing_Seatsadd1Inputs */
|
|
@@ -5176,18 +5173,6 @@ export const billing_portalopenfailed2 = /** @type {(inputs: Billing_Portalopenf
|
|
|
5176
5173
|
return /** @type {LocalizedString} */ (`Failed to open billing portal: ${i?.message}`)
|
|
5177
5174
|
};
|
|
5178
5175
|
|
|
5179
|
-
export const billing_pricing_freedesc1 = /** @type {(inputs: Billing_Pricing_Freedesc1Inputs) => LocalizedString} */ () => {
|
|
5180
|
-
return /** @type {LocalizedString} */ (`Free to use, suitable for individuals and small teams`)
|
|
5181
|
-
};
|
|
5182
|
-
|
|
5183
|
-
export const billing_pricing_startfree1 = /** @type {(inputs: Billing_Pricing_Startfree1Inputs) => LocalizedString} */ () => {
|
|
5184
|
-
return /** @type {LocalizedString} */ (`Start Free Now`)
|
|
5185
|
-
};
|
|
5186
|
-
|
|
5187
|
-
export const billing_pricing_viewpro1 = /** @type {(inputs: Billing_Pricing_Viewpro1Inputs) => LocalizedString} */ () => {
|
|
5188
|
-
return /** @type {LocalizedString} */ (`View Pro Plan Details`)
|
|
5189
|
-
};
|
|
5190
|
-
|
|
5191
5176
|
export const billing_requireslogin1 = /** @type {(inputs: Billing_Requireslogin1Inputs) => LocalizedString} */ () => {
|
|
5192
5177
|
return /** @type {LocalizedString} */ (`This feature requires an AllBlue account login`)
|
|
5193
5178
|
};
|
|
@@ -322,9 +322,6 @@
|
|
|
322
322
|
/** @typedef {{}} Billing_Permonth1Inputs */
|
|
323
323
|
/** @typedef {{ name: NonNullable<unknown> }} Billing_Planname1Inputs */
|
|
324
324
|
/** @typedef {{ message: NonNullable<unknown> }} Billing_Portalopenfailed2Inputs */
|
|
325
|
-
/** @typedef {{}} Billing_Pricing_Freedesc1Inputs */
|
|
326
|
-
/** @typedef {{}} Billing_Pricing_Startfree1Inputs */
|
|
327
|
-
/** @typedef {{}} Billing_Pricing_Viewpro1Inputs */
|
|
328
325
|
/** @typedef {{}} Billing_Requireslogin1Inputs */
|
|
329
326
|
/** @typedef {{}} Billing_Saasonly1Inputs */
|
|
330
327
|
/** @typedef {{}} Billing_Seatsadd1Inputs */
|
|
@@ -5176,18 +5173,6 @@ export const billing_portalopenfailed2 = /** @type {(inputs: Billing_Portalopenf
|
|
|
5176
5173
|
return /** @type {LocalizedString} */ (`打开管理面板失败:${i?.message}`)
|
|
5177
5174
|
};
|
|
5178
5175
|
|
|
5179
|
-
export const billing_pricing_freedesc1 = /** @type {(inputs: Billing_Pricing_Freedesc1Inputs) => LocalizedString} */ () => {
|
|
5180
|
-
return /** @type {LocalizedString} */ (`免费使用,适合个人和小团队入门`)
|
|
5181
|
-
};
|
|
5182
|
-
|
|
5183
|
-
export const billing_pricing_startfree1 = /** @type {(inputs: Billing_Pricing_Startfree1Inputs) => LocalizedString} */ () => {
|
|
5184
|
-
return /** @type {LocalizedString} */ (`立即免费开始`)
|
|
5185
|
-
};
|
|
5186
|
-
|
|
5187
|
-
export const billing_pricing_viewpro1 = /** @type {(inputs: Billing_Pricing_Viewpro1Inputs) => LocalizedString} */ () => {
|
|
5188
|
-
return /** @type {LocalizedString} */ (`查看Pro Plan详情`)
|
|
5189
|
-
};
|
|
5190
|
-
|
|
5191
5176
|
export const billing_requireslogin1 = /** @type {(inputs: Billing_Requireslogin1Inputs) => LocalizedString} */ () => {
|
|
5192
5177
|
return /** @type {LocalizedString} */ (`此功能需要登录 AllBlue 账号`)
|
|
5193
5178
|
};
|
|
@@ -3,7 +3,7 @@ import { createFileRoute } from '@tanstack/react-router'
|
|
|
3
3
|
import type { PluginRouteContext } from '@allbluecn/kernel'
|
|
4
4
|
import { prd_route_1 } from '@/plugins/core/prd/routes'
|
|
5
5
|
|
|
6
|
-
export const Route = createFileRoute('/_nav/prd
|
|
6
|
+
export const Route = createFileRoute('/_nav/prd')({
|
|
7
7
|
loader: ((ctx: PluginRouteContext) => prd_route_1.loader(ctx)) as any,
|
|
8
8
|
component: prd_route_1.Component as any,
|
|
9
9
|
})
|
|
@@ -3,6 +3,6 @@ import { createFileRoute } from '@tanstack/react-router'
|
|
|
3
3
|
import type { PluginRouteContext } from '@allbluecn/kernel'
|
|
4
4
|
import { tags_route_1 } from '@/plugins/core/tags/routes'
|
|
5
5
|
|
|
6
|
-
export const Route = createFileRoute('/_nav/tags
|
|
6
|
+
export const Route = createFileRoute('/_nav/tags')({
|
|
7
7
|
component: tags_route_1.Component as any,
|
|
8
8
|
})
|
|
@@ -18,15 +18,11 @@
|
|
|
18
18
|
import { createFileRoute, redirect } from '@tanstack/react-router'
|
|
19
19
|
import { isSaasEdition } from '@/lib/edition'
|
|
20
20
|
import { isDesktopEdition } from '@/lib/edition-desktop'
|
|
21
|
-
import
|
|
21
|
+
import { LandingPage } from '@/components/landing/landing-page'
|
|
22
22
|
|
|
23
23
|
export const Route = createFileRoute('/_public/')({
|
|
24
24
|
beforeLoad: () => {
|
|
25
25
|
if (!isSaasEdition || isDesktopEdition()) throw redirect({ to: '/dashboard' })
|
|
26
26
|
},
|
|
27
|
-
component:
|
|
27
|
+
component: LandingPage,
|
|
28
28
|
})
|
|
29
|
-
|
|
30
|
-
function IndexPage() {
|
|
31
|
-
return <AgencyHeroSection />
|
|
32
|
-
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// AllBlue - 理想之海
|
|
3
|
+
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
+
//
|
|
5
|
+
// This program is free software: you can redistribute it and/or modify
|
|
6
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
// (at your option) any later version.
|
|
9
|
+
//
|
|
10
|
+
// This program is distributed in the hope that it will be useful,
|
|
11
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
// GNU Affero General Public License for more details.
|
|
14
|
+
//
|
|
15
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
import { AsyncLocalStorage } from 'node:async_hooks'
|
|
19
|
+
import { createMiddleware } from '@tanstack/react-start'
|
|
20
|
+
import {
|
|
21
|
+
extractLocaleFromRequestWithStrategies,
|
|
22
|
+
overwriteServerAsyncLocalStorage,
|
|
23
|
+
strategy,
|
|
24
|
+
} from '@/paraglide/runtime.js'
|
|
25
|
+
import type { Locale } from '@/paraglide/runtime.js'
|
|
26
|
+
|
|
27
|
+
const localeStorage = new AsyncLocalStorage<{ locale?: Locale }>()
|
|
28
|
+
|
|
29
|
+
overwriteServerAsyncLocalStorage(localeStorage)
|
|
30
|
+
|
|
31
|
+
export const paraglideLocaleMiddleware = createMiddleware().server(async ({ request, next }) => {
|
|
32
|
+
let locale: Locale | undefined
|
|
33
|
+
try {
|
|
34
|
+
locale = extractLocaleFromRequestWithStrategies(request, strategy)
|
|
35
|
+
} catch {
|
|
36
|
+
locale = undefined
|
|
37
|
+
}
|
|
38
|
+
return localeStorage.run({ locale }, () => next())
|
|
39
|
+
})
|
package/src/start.ts
CHANGED
|
@@ -85,6 +85,7 @@ const apiCorsMiddleware = createMiddleware().server(async ({ request, next }: an
|
|
|
85
85
|
})
|
|
86
86
|
|
|
87
87
|
export const startInstance = createStart(async () => {
|
|
88
|
+
const requestMiddleware = [securityHeadersMiddleware, requestContextMiddleware, neonKeepaliveMiddleware, aiPortsMiddleware, apiCorsMiddleware, csrfMiddleware, auditRequestMiddleware]
|
|
88
89
|
if (import.meta.env.SSR) {
|
|
89
90
|
const { registerServerSeam } = await import('@allbluecn/kernel')
|
|
90
91
|
const { requireAuth, requireUserInDb } = await import('@/server/auth-helpers')
|
|
@@ -100,8 +101,10 @@ export const startInstance = createStart(async () => {
|
|
|
100
101
|
const { ensurePromptSeeded } = await import('@/server/ai-gateway/prompts/seed')
|
|
101
102
|
await ensurePromptSeeded()
|
|
102
103
|
} catch { /* seed 失败不阻断 */ }
|
|
104
|
+
const { paraglideLocaleMiddleware } = await import('@/server/middlewares/paraglide-locale')
|
|
105
|
+
requestMiddleware.unshift(paraglideLocaleMiddleware)
|
|
103
106
|
}
|
|
104
107
|
return {
|
|
105
|
-
requestMiddleware
|
|
108
|
+
requestMiddleware,
|
|
106
109
|
}
|
|
107
110
|
})
|
package/src/styles/globals.css
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
@import "./typeset.css";
|
|
9
9
|
@import "tw-animate-css";
|
|
10
10
|
@import "shadcn/tailwind.css";
|
|
11
|
-
@import "@fontsource-variable/inter";
|
|
12
11
|
|
|
13
12
|
:root {
|
|
14
13
|
--font-geist: 'Geist Variable', sans-serif;
|
|
@@ -70,8 +69,8 @@
|
|
|
70
69
|
@theme inline {
|
|
71
70
|
--sidebar-width: 16rem;
|
|
72
71
|
--sidebar-width-icon: 3rem;
|
|
73
|
-
--font-sans:
|
|
74
|
-
--font-heading: var(--font-
|
|
72
|
+
--font-sans: var(--font-geist);
|
|
73
|
+
--font-heading: var(--font-geist);
|
|
75
74
|
--font-serif: 'Instrument Serif', ui-serif, Georgia, Cambria, 'Times New Roman', serif;
|
|
76
75
|
|
|
77
76
|
--radius-sm: calc(var(--radius) - 4px);
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"latency": {
|
|
3
|
-
"aad": 0.048410276139197045,
|
|
4
|
-
"critical": 1.96,
|
|
5
|
-
"df": 1059,
|
|
6
|
-
"mad": 0.022145999999793275,
|
|
7
|
-
"max": 3.373666999999841,
|
|
8
|
-
"mean": 0.94407134433964,
|
|
9
|
-
"min": 0.8770409999997355,
|
|
10
|
-
"moe": 0.007457128456580703,
|
|
11
|
-
"p50": 0.9219379999999546,
|
|
12
|
-
"p75": 0.9482297500001096,
|
|
13
|
-
"p99": 1.549765560000042,
|
|
14
|
-
"p995": 1.6288096400004497,
|
|
15
|
-
"p999": 1.8190369999991707,
|
|
16
|
-
"rme": 0.7898903511150234,
|
|
17
|
-
"samplesCount": 1060,
|
|
18
|
-
"sd": 0.12387066970076242,
|
|
19
|
-
"sem": 0.0038046573758064813,
|
|
20
|
-
"variance": 0.015343942812115383
|
|
21
|
-
},
|
|
22
|
-
"throughput": {
|
|
23
|
-
"aad": 43.792207103583756,
|
|
24
|
-
"critical": 1.96,
|
|
25
|
-
"df": 1059,
|
|
26
|
-
"mad": 25.941182125708224,
|
|
27
|
-
"max": 1140.1975506279657,
|
|
28
|
-
"mean": 1068.8147818211185,
|
|
29
|
-
"min": 296.4133685986338,
|
|
30
|
-
"moe": 4.749020957923807,
|
|
31
|
-
"p50": 1084.6716379180502,
|
|
32
|
-
"p75": 1108.6600489500372,
|
|
33
|
-
"p99": 1137.598277984184,
|
|
34
|
-
"p995": 1138.8284369378687,
|
|
35
|
-
"p999": 1140.1930292151646,
|
|
36
|
-
"rme": 0.4443259055448416,
|
|
37
|
-
"samplesCount": 1060,
|
|
38
|
-
"sd": 78.88618385832574,
|
|
39
|
-
"sem": 2.422969876491738,
|
|
40
|
-
"variance": 6223.030003729573
|
|
41
|
-
},
|
|
42
|
-
"period": 0.9440713443396405,
|
|
43
|
-
"totalTime": 1000.7156250000189
|
|
44
|
-
}
|
package/src/assets/logo/logo.tsx
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// AllBlue - 理想之海
|
|
3
|
-
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
-
//
|
|
5
|
-
// This program is free software: you can redistribute it and/or modify
|
|
6
|
-
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
// (at your option) any later version.
|
|
9
|
-
//
|
|
10
|
-
// This program is distributed in the hope that it will be useful,
|
|
11
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
// GNU Affero General Public License for more details.
|
|
14
|
-
//
|
|
15
|
-
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
import type { SVGAttributes } from "react";
|
|
19
|
-
|
|
20
|
-
const PATH_0 = "M912.82 421.43C912.92 423.04 913.03 424.64 913.13 426.24C913.41 436.02 913.68 445.8 913.96 455.57C913.82 457.16 913.67 458.75 913.53 460.34C913.39 464.09 913.25 467.85 913.11 471.61C913.01 475.69 912.9 479.76 912.8 483.84C905.03 614.78 836.48 739.86 721.87 806.58C713.75 811.31 705.22 814.88 696.81 818.82C681.84 825.84 666.92 832.57 651.26 838.16C619.75 849.42 586.6 854.7 553.54 858.44C552.2 858.57 550.85 858.7 549.51 858.83C545.18 858.97 540.85 859.11 536.52 859.25C533.01 859.29 529.5 859.33 525.98 859.38C520.6 859.19 515.22 859 509.83 858.81C507.65 858.71 505.47 858.6 503.29 858.49C501.39 858.34 499.48 858.18 497.58 858.02C496.24 857.91 494.9 857.8 493.57 857.69C461.02 854.33 429.45 847.25 399.28 834.59C396.56 833.45 393.57 832.92 390.9 831.7C389.25 830.95 388.09 829.59 386.42 828.83C375.89 824.08 364.9 820.07 354.95 814.1C348.49 810.22 340.67 802.9 334.06 800.22C327.67 797.62 320.09 797.29 313.41 795.58C302.7 792.84 291.97 788.87 281.95 784.16C218.81 754.5 165.31 704.82 137.47 640.13C125.41 612.09 117.59 582.91 112.22 552.9C105.08 513.03 104.34 471.16 86.98 433.78C80.1 418.98 71.48 405.92 59 395.26C43.31 381.86 27.91 375.15 13.87 358.51C8.99 352.73 4.81 346.43 2.3 339.24C1.43 336.74 1.16 333.94 0.14 331.58C0.14 326.94 0.14 322.31 0.14 317.67C1.35 314.89 1.52 311.38 2.36 308.37C4.36 301.27 6.96 294.29 10.08 287.6C22.74 260.44 38.53 234.64 55.66 210.06C139.44 89.85 287.99 10.93 433.59 2.96C435.46 2.86 437.32 2.77 439.19 2.68C470.99 -0.23 503.07 3.72 534.54 7.84C556.37 10.7 577.66 15.99 598.74 22.39C618.17 28.3 637.25 34.9 655.82 43.23C745.71 83.53 819.5 157.02 863.49 244.8C879.78 277.29 893.81 312.84 901.66 348.38C907 372.56 910.26 396.87 912.82 421.43ZM493.57 182.93C494.93 182.82 496.3 182.72 497.66 182.61C505.74 182.61 513.82 182.61 521.9 182.61C524.07 182.72 526.24 182.82 528.41 182.92C561.81 185.44 594.93 192.49 625.58 206.35C635.18 210.69 644.79 215.62 653.81 221.07C658.57 223.94 663.03 228.33 668.22 230.26C673.63 226.68 683.25 209.59 686.8 203.36C703.34 174.33 713.07 141.46 709.77 107.79C709.63 106.48 709.5 105.18 709.37 103.87C709.14 100.94 709.21 96.23 707.38 93.76C704.78 90.25 698.39 87.71 694.72 85.35C685.43 79.4 676.09 73.48 666.3 68.38C624.09 46.36 577.59 31.74 530.61 24.81C522.06 23.54 513.55 22.01 504.89 21.63C503.54 21.51 502.2 21.38 500.86 21.25C493.3 20.83 485.75 20.42 478.2 20C476.56 19.89 474.93 19.78 473.3 19.68C450.82 17.58 427.93 20.22 405.63 22.9C371.88 26.95 341.56 33.48 309.14 43.67C296.56 47.62 283.89 52.16 271.81 57.45C268.64 58.83 261.75 60.48 260.51 63.62C264.92 66.44 271.7 66.57 276.75 68.08C286.8 71.09 296.71 75.83 305.56 81.45C336.54 101.12 361.81 126.41 378.02 159.73C382.31 168.53 386.57 177.57 389.71 186.86C391.66 192.64 392.43 199.06 394.6 204.64C398.04 204.62 401.67 202.32 404.95 201.13C413.17 198.15 421.55 195.3 430 193.03C450.85 187.43 472.07 184.53 493.57 182.93ZM187.04 542.19C186.91 540.33 186.78 538.46 186.65 536.59C186.84 532.9 186.2 529.26 186.27 525.58C186.54 511.2 187.22 496.43 189.24 482.19C199.47 410.09 228.1 344.53 276.74 290.11C281.56 284.72 286.16 278.95 291.42 273.99C309.99 256.47 329.78 240.3 351.93 227.51C359.31 223.25 366.61 218.8 374.29 215.08C378.39 213.1 384.07 211.94 386.99 208.33C387.19 198.94 377.68 178.18 373.32 169.26C355.91 133.67 330.18 103.03 294.94 83.94C284.52 78.3 273.61 73.83 262.29 70.33C258.28 69.09 252.68 66.98 248.55 68.23C244.02 69.6 239.34 72.89 235.11 75.04C221.9 81.75 209.46 89.66 197.15 97.86C189.2 103.16 180.88 107.88 173.15 113.55C122.61 150.58 78.65 197.8 47.79 252.38C40.47 265.32 33.02 277.98 27.12 291.68C22.72 301.89 16.43 318.01 18.24 329.1C21.06 346.46 41.16 360.45 54.63 369.63C72.08 381.53 88.02 396.33 98.55 414.87C122.95 457.88 122.14 510.27 131.72 557.48C135.8 577.54 139.77 597.71 146.98 616.95C164.32 663.26 195.1 705.41 234.93 734.76C247.38 743.94 259.84 752.27 273.72 759.2C277.82 761.24 284.79 766.61 289.13 765.47C287.16 761.37 278.25 754.14 274.66 750.17C263.65 737.97 252.77 725.18 243.61 711.49C207.97 658.28 192.06 605.7 187.04 542.19ZM718.15 117.52C718.18 120.49 718.2 123.46 718.22 126.43C717.46 136.86 716.88 147.28 714.61 157.54C710.82 174.7 702.85 191 694.8 206.49C691.82 212.22 688.37 217.72 684.34 222.76C681.34 226.51 676.68 230.85 675.33 235.44C680.4 240.92 687.28 245.04 692.79 250.16C704.7 261.25 715.61 273.36 725.75 286.09C749.66 316.1 767.03 353.54 774.82 391.04C777.72 404.95 778.9 418.75 780.67 432.78C780.72 438.18 780.77 443.59 780.83 448.99C780.62 451.46 780.42 453.92 780.22 456.39C780.1 458.52 779.98 460.64 779.87 462.77C779.99 464.5 779.95 464.53 781.34 465.43C784.02 465.54 786.7 465.66 789.38 465.77C801.15 466.66 813.28 466.98 825.04 465.79C826.96 465.68 828.88 465.57 830.79 465.47C850.7 465.45 874.53 460.05 892.99 452.64C895.33 445.14 893.36 435.28 893.03 427.51C892.24 408.85 890.32 389.91 886.51 371.61C875.06 316.67 855.45 263.3 825.31 215.75C812.61 195.72 799.1 175.14 782.34 158.19C767.47 143.15 752.77 128.48 736.46 114.95C732.34 111.54 721.34 101.22 716.84 100.67C717.28 106.29 717.72 111.9 718.15 117.52ZM514.64 364.49C519.5 364.49 524.36 364.48 529.22 364.48C563.64 368.65 596.33 384.31 611.49 417.37C616.99 429.35 619.78 441.71 621.78 454.66C621.9 456.05 622.03 457.44 622.16 458.83C622.17 460.94 622.18 463.05 622.18 465.17C622.04 466.8 621.9 468.43 621.76 470.06C618.66 503.22 595.23 538.24 560.43 543.86C552.87 545.08 544.33 545.22 536.87 543.15C509.15 535.43 492.16 506.74 509.02 480.29C512.66 474.57 519.84 467.6 527.17 471.71C528.62 472.52 530.07 473.94 530.56 475.58C531.59 479.06 528.57 481.57 526.76 484.19C523.83 488.43 521.98 492.45 521.68 497.65C521.68 499.83 521.67 502.01 521.67 504.19C523.6 527.88 550.02 530.06 567.56 522.56C587.94 513.84 600.08 489.72 601.61 468.48C601.62 464.39 601.62 460.29 601.62 456.2C601.57 450.19 600.01 444.32 598.49 438.54C594.42 423.05 585.53 407.69 572.6 397.9C550.9 381.46 518.84 377.57 493.2 385.06C450.3 397.59 419.32 435.92 407.95 477.96C403.48 494.49 401.61 512.55 402.5 529.63C403.14 541.91 406.11 554.6 409.85 566.28C432.39 636.77 500.5 676.66 572.99 670.86C574.32 670.73 575.66 670.61 576.99 670.48C585.6 670.28 594.5 667.86 602.79 665.69C619.35 661.34 634.41 655.75 649.35 647.3C718.36 608.26 757.1 538.55 759.19 459.93C759.4 452.24 760.69 444.53 759.98 436.83C759.86 433.88 759.75 430.92 759.64 427.96C759.49 425.25 759.34 422.53 759.2 419.81C759.08 418.45 758.96 417.09 758.84 415.73C757.72 395.27 751.43 375.82 744.23 356.82C719.23 290.85 664.95 240.51 599.81 215.16C592.66 212.38 585.11 210.77 577.73 208.75C562.15 204.48 545.42 201.03 529.18 200.74C527.3 200.61 525.43 200.47 523.55 200.34C508.74 198.48 493.06 200 478.27 201.41C432.35 205.78 387.73 222.74 349.49 248.57C337.91 256.39 326.64 265.14 316.44 274.71C313.21 277.74 308.64 280.6 306.1 284.06C309.51 288.45 323.4 292.81 329.01 296.26C346.82 307.23 364.64 318.41 380.18 332.61C395 346.15 408.61 361.07 421.19 376.68C424.81 381.17 427.82 386.38 430.99 391.21C432.51 393.54 433.34 396.53 435.62 397.97C438.8 396.11 441.43 392.85 444.37 390.49C448.2 387.42 452.75 384.46 457.07 382.13C476.8 371.52 492.29 366.73 514.64 364.49ZM206.07 543.81C206.18 545.13 206.3 546.45 206.42 547.77C206.56 549.42 206.7 551.08 206.84 552.73C206.97 554.09 207.1 555.46 207.22 556.82C208.75 587.42 217.32 618.74 229.86 646.59C233.67 655.06 237.48 668.35 244.3 674.7C248.5 674.4 253.61 670.6 257.46 668.8C267.12 664.28 277.07 660.52 286.69 655.88C304.27 647.41 321.86 638.41 338.62 628.38C346.33 623.76 353.75 618.59 361.45 613.92C373.55 606.58 386.27 599.78 397.53 591.17C396.7 584.09 392.15 576.86 390.09 569.96C386.6 558.27 385.08 546.09 383.12 534.09C383.01 532.7 382.91 531.32 382.8 529.93C382.8 525.39 382.8 520.85 382.8 516.31C382.92 514.13 383.03 511.95 383.15 509.77C383.3 507.85 383.44 505.92 383.59 503.99C383.72 502.68 383.86 501.36 383.99 500.05C387.62 476.41 393.83 452.71 406.6 432.14C410.26 426.24 414.34 420.51 418.96 415.31C422.09 411.79 426.6 408.12 428.75 404.01C423.15 392.59 414.55 382.49 406.58 372.65C386.28 347.58 361.41 325.17 333.7 308.56C325.97 303.92 307.5 291.43 299.46 290.31C293.08 294.95 288.07 302.54 283.01 308.55C272.5 321.03 262.6 333.83 254.46 348.01C227.76 394.48 212.55 439.71 207.31 493.16C205.65 510.12 204.84 526.78 206.07 543.81ZM816.94 474.28C810.72 474.33 804.51 474.38 798.29 474.42C794.01 474.23 789.72 474.04 785.44 473.85C783.65 473.78 781.85 473.71 780.06 473.65C779.98 473.8 779.9 473.96 779.82 474.11C778.27 480.1 778.41 486.95 777.39 493.16C775.21 506.55 771.82 519.48 767.88 532.43C764.89 542.25 760.29 551.72 755.84 560.94C739.05 595.71 716.36 625.15 684.87 647.99C672.14 657.21 658.79 665.87 644.45 672.36C640.55 674.12 636.43 675.95 632.35 677.25C629.55 678.14 626.58 678.11 624.02 679.56C624.13 683.59 626.94 686.68 628.68 690.3C631.87 696.92 634.91 703.67 637.71 710.45C646.43 731.52 653.6 753.15 658.57 775.43C660.45 783.85 661.15 792.48 662.45 800.99C662.98 804.48 662.8 808.75 664.98 811.45C672.92 809.52 679.75 804.41 687.05 800.92C704.15 792.76 720.13 783.37 735.63 772.49C806.65 722.63 859.72 644.07 880.43 559.79C886.19 536.35 891.08 512.51 891.99 488.3C892.24 481.78 894.47 467.13 892.62 461.55C888.62 461.6 884.42 464.05 880.53 465.2C875.2 466.79 869.75 467.99 864.32 469.2C848.64 472.68 832.81 472.65 816.94 474.28ZM517.98 839.83C521.68 839.84 525.39 839.86 529.1 839.87C570.52 840.69 615.92 830.57 654.44 815.48C656.78 805.45 652.44 794.04 650.83 784.11C646.7 758.8 638.19 733.8 628.28 710.2C625.69 704.03 622.06 698.44 619.35 692.36C617.98 689.3 617.09 685.12 614.73 682.76C605.25 683.65 595.84 686.76 586.36 688.03C574.03 689.68 561.94 689.08 549.6 689.43C547.67 689.29 545.74 689.15 543.81 689.01C501.53 683.39 462.28 669.63 431.63 638.56C422.63 629.44 415.77 619.45 408.57 608.93C406.16 605.41 404.3 601.27 401.58 598.04C394.71 599.37 378.41 613 371.47 617.46C347.08 633.15 322.05 647.46 296.12 660.41C286.68 665.13 276.85 669.6 267.03 673.45C261.1 675.77 253.05 677.55 248.4 682.08C249.64 688.81 255.93 696.23 259.72 701.88C270.21 717.54 282.56 731.83 295.93 745.1C345.45 794.22 410.48 826.76 479.4 837C492.01 838.87 505.24 839.34 517.98 839.83Z";
|
|
21
|
-
const PATH_1 = "M439.19 2.68C437.32 2.77 435.46 2.86 433.59 2.96C433.73 2.78 433.86 2.61 434 2.43C435.73 2.51 437.46 2.6 439.19 2.68ZM473.3 19.68C474.93 19.78 476.56 19.89 478.2 20C476.7 20.09 475.2 20.17 473.71 20.26C473.57 20.07 473.44 19.87 473.3 19.68ZM500.86 21.25C502.2 21.38 503.54 21.51 504.89 21.63C503.68 21.72 502.47 21.8 501.26 21.88C501.13 21.67 500.99 21.46 500.86 21.25ZM709.37 103.87C709.5 105.18 709.63 106.48 709.77 107.79C709.56 107.66 709.35 107.52 709.15 107.38C709.22 106.21 709.29 105.04 709.37 103.87ZM718.15 117.52C718.39 117.65 718.63 117.79 718.87 117.92C718.87 120.62 718.87 123.32 718.87 126.03C718.65 126.16 718.44 126.3 718.22 126.43C718.2 123.46 718.18 120.49 718.15 117.52ZM497.66 182.61C496.3 182.72 494.93 182.82 493.57 182.93C493.7 182.73 493.84 182.54 493.97 182.35C495.2 182.44 496.43 182.53 497.66 182.61ZM521.9 182.61C523.94 182.53 525.97 182.44 528.01 182.35C528.14 182.54 528.28 182.73 528.41 182.92C526.24 182.82 524.07 182.72 521.9 182.61ZM523.55 200.34C525.43 200.47 527.3 200.61 529.18 200.74C527.44 200.82 525.7 200.91 523.96 200.99C523.82 200.77 523.69 200.56 523.55 200.34ZM529.22 364.48C524.36 364.48 519.5 364.49 514.64 364.49C514.77 364.29 514.91 364.09 515.04 363.89C519.63 363.89 524.23 363.89 528.82 363.89C528.95 364.09 529.09 364.28 529.22 364.48ZM758.84 415.73C758.96 417.09 759.08 418.45 759.2 419.81C758.99 419.68 758.79 419.54 758.58 419.41C758.67 418.18 758.75 416.96 758.84 415.73ZM912.82 421.43C913.01 421.57 913.19 421.71 913.38 421.84C913.3 423.31 913.21 424.77 913.13 426.24C913.03 424.64 912.92 423.04 912.82 421.43ZM759.64 427.96C759.75 430.92 759.86 433.88 759.98 436.83C759.78 436.7 759.59 436.56 759.39 436.43C759.47 433.61 759.56 430.78 759.64 427.96ZM780.67 432.78C780.72 438.18 780.77 443.59 780.83 448.99C780.77 443.59 780.72 438.18 780.67 432.78ZM621.78 454.66C621.99 454.8 622.21 454.93 622.43 455.07C622.34 456.32 622.25 457.57 622.16 458.83C622.03 457.44 621.9 456.05 621.78 454.66ZM913.96 455.57C914.04 457.03 914.11 458.48 914.19 459.93C913.97 460.07 913.75 460.2 913.53 460.34C913.67 458.75 913.82 457.16 913.96 455.57ZM601.62 456.2C601.62 460.29 601.62 464.39 601.61 468.48C601.62 464.39 601.62 460.29 601.62 456.2ZM780.22 456.39C780.3 458.38 780.38 460.37 780.47 462.36C780.27 462.5 780.07 462.63 779.87 462.77C779.98 460.64 780.1 458.52 780.22 456.39ZM622.18 465.17C622.26 466.66 622.35 468.16 622.43 469.66C622.2 469.79 621.98 469.93 621.76 470.06C621.9 468.43 622.04 466.8 622.18 465.17ZM781.34 465.43C783.89 465.35 786.43 465.28 788.97 465.2C789.11 465.39 789.24 465.58 789.38 465.77C786.7 465.66 784.02 465.54 781.34 465.43ZM830.79 465.47C828.88 465.57 826.96 465.68 825.04 465.79C825.17 465.59 825.31 465.4 825.45 465.2C827.23 465.29 829.01 465.38 830.79 465.47ZM913.11 471.61C913.2 475.55 913.29 479.49 913.38 483.43C913.19 483.57 912.99 483.7 912.8 483.84C912.9 479.76 913.01 475.69 913.11 471.61ZM785.44 473.85C783.57 473.94 781.69 474.02 779.82 474.11C779.9 473.96 779.98 473.8 780.06 473.65C781.85 473.71 783.65 473.78 785.44 473.85ZM798.29 474.42C804.51 474.38 810.72 474.33 816.94 474.28C814.3 475.59 801.18 475.53 798.29 474.42ZM521.68 497.65C521.68 499.83 521.67 502.01 521.67 504.19C521.67 502.01 521.68 499.83 521.68 497.65ZM383.99 500.05C383.86 501.36 383.72 502.68 383.59 503.99C383.5 502.81 383.42 501.63 383.34 500.45C383.56 500.32 383.78 500.18 383.99 500.05ZM383.15 509.77C383.03 511.95 382.92 514.13 382.8 516.31C382.71 514.27 382.62 512.22 382.53 510.18C382.74 510.04 382.95 509.91 383.15 509.77ZM382.8 529.93C382.91 531.32 383.01 532.7 383.12 534.09C382.92 533.95 382.73 533.82 382.53 533.68C382.62 532.43 382.71 531.18 382.8 529.93ZM186.65 536.59C186.78 538.46 186.91 540.33 187.04 542.19C186.82 542.06 186.61 541.92 186.4 541.79C186.49 540.06 186.57 538.33 186.65 536.59ZM206.07 543.81C206.27 543.95 206.47 544.08 206.67 544.22C206.58 545.4 206.5 546.59 206.42 547.77C206.3 546.45 206.18 545.13 206.07 543.81ZM206.84 552.73C207.05 552.86 207.26 553 207.48 553.13C207.39 554.36 207.31 555.59 207.22 556.82C207.1 555.46 206.97 554.09 206.84 552.73ZM576.99 670.48C575.66 670.61 574.32 670.73 572.99 670.86C573.12 670.66 573.26 670.45 573.39 670.24C574.59 670.32 575.79 670.4 576.99 670.48ZM543.81 689.01C545.74 689.15 547.67 689.29 549.6 689.43C547.81 689.52 546.01 689.6 544.22 689.69C544.08 689.47 543.95 689.24 543.81 689.01ZM517.98 839.83C521.68 839.84 525.39 839.86 529.1 839.87C525.39 839.86 521.68 839.84 517.98 839.83ZM493.57 857.69C494.9 857.8 496.24 857.91 497.58 858.02C496.37 858.1 495.17 858.19 493.97 858.27C493.84 858.08 493.7 857.88 493.57 857.69ZM503.29 858.49C505.47 858.6 507.65 858.71 509.83 858.81C507.79 858.9 505.74 858.99 503.7 859.08C503.56 858.88 503.43 858.69 503.29 858.49ZM553.54 858.44C553.4 858.66 553.27 858.87 553.13 859.08C551.93 858.99 550.72 858.91 549.51 858.83C550.85 858.7 552.2 858.57 553.54 858.44ZM525.98 859.38C529.5 859.33 533.01 859.29 536.52 859.25C536.38 859.46 536.25 859.67 536.11 859.89C532.87 859.89 529.63 859.89 526.39 859.89C526.25 859.72 526.12 859.55 525.98 859.38Z";
|
|
22
|
-
|
|
23
|
-
const CONTENT_BOUNDS = { minX: 0.14, minY: -0.23, maxX: 914.19, maxY: 859.89 };
|
|
24
|
-
|
|
25
|
-
interface LogoProps extends SVGAttributes<SVGElement> {
|
|
26
|
-
/** Stroke width in viewBox units. Auto-expands viewBox when stroke is thick. Default: 4 */
|
|
27
|
-
strokeWidth?: number;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const Logo = ({ strokeWidth = 4, ...props }: LogoProps) => {
|
|
31
|
-
const hs = strokeWidth / 2;
|
|
32
|
-
const vbX = CONTENT_BOUNDS.minX - hs;
|
|
33
|
-
const vbY = CONTENT_BOUNDS.minY - hs;
|
|
34
|
-
const vbW = CONTENT_BOUNDS.maxX - CONTENT_BOUNDS.minX + strokeWidth;
|
|
35
|
-
const vbH = CONTENT_BOUNDS.maxY - CONTENT_BOUNDS.minY + strokeWidth;
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<div className="flex items-center gap-2.5">
|
|
39
|
-
<svg
|
|
40
|
-
width="147"
|
|
41
|
-
height="40"
|
|
42
|
-
viewBox={`${vbX} ${vbY} ${vbW} ${vbH}`}
|
|
43
|
-
fill="none"
|
|
44
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
45
|
-
{...props}
|
|
46
|
-
>
|
|
47
|
-
<path
|
|
48
|
-
d={PATH_0}
|
|
49
|
-
fill="currentColor"
|
|
50
|
-
className="text-foreground"
|
|
51
|
-
fillRule="evenodd"
|
|
52
|
-
stroke="currentColor"
|
|
53
|
-
strokeWidth={strokeWidth}
|
|
54
|
-
strokeLinejoin="round"
|
|
55
|
-
/>
|
|
56
|
-
<path
|
|
57
|
-
d={PATH_1}
|
|
58
|
-
fill="currentColor"
|
|
59
|
-
className="text-background"
|
|
60
|
-
fillRule="evenodd"
|
|
61
|
-
stroke="currentColor"
|
|
62
|
-
strokeWidth={strokeWidth}
|
|
63
|
-
strokeLinejoin="round"
|
|
64
|
-
/>
|
|
65
|
-
</svg>
|
|
66
|
-
</div>
|
|
67
|
-
);
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export default Logo;
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// AllBlue - 理想之海
|
|
3
|
-
// Copyright (C) 2026 AllBlue Contributors
|
|
4
|
-
//
|
|
5
|
-
// This program is free software: you can redistribute it and/or modify
|
|
6
|
-
// it under the terms of the GNU Affero General Public License as published by
|
|
7
|
-
// the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
// (at your option) any later version.
|
|
9
|
-
//
|
|
10
|
-
// This program is distributed in the hope that it will be useful,
|
|
11
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
// GNU Affero General Public License for more details.
|
|
14
|
-
//
|
|
15
|
-
// You should have received a copy of the GNU Affero General Public License
|
|
16
|
-
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { ComponentPropsWithoutRef } from "react";
|
|
20
|
-
|
|
21
|
-
import { cn } from "@/lib/utils";
|
|
22
|
-
|
|
23
|
-
interface MarqueeProps extends ComponentPropsWithoutRef<"div"> {
|
|
24
|
-
className?: string;
|
|
25
|
-
/**
|
|
26
|
-
* Whether to reverse the animation direction
|
|
27
|
-
* @default false
|
|
28
|
-
*/
|
|
29
|
-
reverse?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Whether to pause the animation on hover
|
|
32
|
-
* @default false
|
|
33
|
-
*/
|
|
34
|
-
pauseOnHover?: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Content to be displayed in the marquee
|
|
37
|
-
*/
|
|
38
|
-
children: React.ReactNode;
|
|
39
|
-
/**
|
|
40
|
-
* Whether to animate vertically instead of horizontally
|
|
41
|
-
* @default false
|
|
42
|
-
*/
|
|
43
|
-
vertical?: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Number of times to repeat the content
|
|
46
|
-
* @default 4
|
|
47
|
-
*/
|
|
48
|
-
repeat?: number;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function Marquee({
|
|
52
|
-
className,
|
|
53
|
-
reverse = false,
|
|
54
|
-
pauseOnHover = false,
|
|
55
|
-
children,
|
|
56
|
-
vertical = false,
|
|
57
|
-
repeat = 4,
|
|
58
|
-
...props
|
|
59
|
-
}: MarqueeProps) {
|
|
60
|
-
return (
|
|
61
|
-
<>
|
|
62
|
-
<style>
|
|
63
|
-
{`
|
|
64
|
-
@keyframes marquee {
|
|
65
|
-
from {
|
|
66
|
-
transform: translateX(0);
|
|
67
|
-
}
|
|
68
|
-
to {
|
|
69
|
-
transform: translateX(calc(-100% - var(--gap)));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@keyframes marquee-vertical {
|
|
74
|
-
from {
|
|
75
|
-
transform: translateY(0);
|
|
76
|
-
}
|
|
77
|
-
to {
|
|
78
|
-
transform: translateY(calc(-100% - var(--gap)));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@keyframes scroll {
|
|
83
|
-
to {
|
|
84
|
-
transform: translate(calc(-50% - 0.5rem));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.animate-marquee {
|
|
89
|
-
animation: marquee var(--duration) linear infinite;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.animate-marquee-vertical {
|
|
93
|
-
animation: marquee-vertical var(--duration) linear infinite;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.animate-reverse {
|
|
97
|
-
animation-direction: reverse !important;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.pause-on-hover:hover .animate-marquee,
|
|
101
|
-
.pause-on-hover:hover .animate-marquee-vertical {
|
|
102
|
-
animation-play-state: paused !important;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.animate-scroll {
|
|
106
|
-
animation: scroll var(--animation-duration, 40s) var(--animation-direction, forwards) linear infinite;
|
|
107
|
-
}
|
|
108
|
-
`}
|
|
109
|
-
</style>
|
|
110
|
-
<div
|
|
111
|
-
{...props}
|
|
112
|
-
className={cn(
|
|
113
|
-
"group flex gap-(--gap) overflow-hidden p-2 [--duration:40s] [--gap:1rem]",
|
|
114
|
-
{
|
|
115
|
-
"flex-row": !vertical,
|
|
116
|
-
"flex-col": vertical,
|
|
117
|
-
"pause-on-hover": pauseOnHover,
|
|
118
|
-
},
|
|
119
|
-
className,
|
|
120
|
-
)}
|
|
121
|
-
>
|
|
122
|
-
{Array(repeat)
|
|
123
|
-
.fill(0)
|
|
124
|
-
.map((_, i) => (
|
|
125
|
-
<div
|
|
126
|
-
key={i}
|
|
127
|
-
className={cn("flex shrink-0 justify-around gap-(--gap)", {
|
|
128
|
-
"animate-marquee flex-row": !vertical,
|
|
129
|
-
"animate-marquee-vertical flex-col": vertical,
|
|
130
|
-
"animate-reverse": reverse,
|
|
131
|
-
})}
|
|
132
|
-
>
|
|
133
|
-
{children}
|
|
134
|
-
</div>
|
|
135
|
-
))}
|
|
136
|
-
</div>
|
|
137
|
-
</>
|
|
138
|
-
);
|
|
139
|
-
}
|