@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.
Files changed (30) hide show
  1. package/package.json +1 -1
  2. package/src/components/landing/landing-page.tsx +20 -0
  3. package/src/lib/changelog/sdk-versions.ts +1 -1
  4. package/src/paraglide/README.md +1 -1
  5. package/src/paraglide/messages/_index.js +0 -48
  6. package/src/paraglide/messages/en.js +0 -15
  7. package/src/paraglide/messages/zh.js +0 -15
  8. package/src/routes/_nav/prd/index.tsx +1 -1
  9. package/src/routes/_nav/tags/index.tsx +1 -1
  10. package/src/routes/_public/index/route.tsx +2 -6
  11. package/src/server/middlewares/paraglide-locale.ts +39 -0
  12. package/src/start.ts +4 -1
  13. package/src/styles/globals.css +2 -3
  14. package/src/__tests__/bench/baselines/format-timestamp.json +0 -44
  15. package/src/assets/logo/logo.tsx +0 -70
  16. package/src/components/shadcn-space/animations/marquee.tsx +0 -139
  17. package/src/components/shadcn-space/blocks/about-us-01/about-us.tsx +0 -136
  18. package/src/components/shadcn-space/blocks/about-us-01/index.tsx +0 -62
  19. package/src/components/shadcn-space/blocks/cta-01/cta.tsx +0 -74
  20. package/src/components/shadcn-space/blocks/faq-01/faq.tsx +0 -100
  21. package/src/components/shadcn-space/blocks/footer-01/footer.tsx +0 -232
  22. package/src/components/shadcn-space/blocks/hero-01/brand-slider.tsx +0 -79
  23. package/src/components/shadcn-space/blocks/hero-01/header.tsx +0 -272
  24. package/src/components/shadcn-space/blocks/hero-01/hero.tsx +0 -111
  25. package/src/components/shadcn-space/blocks/hero-01/index.tsx +0 -127
  26. package/src/components/shadcn-space/blocks/portfolio-01/portfolio.tsx +0 -149
  27. package/src/components/shadcn-space/blocks/pricing-01/pricing.tsx +0 -187
  28. package/src/components/shadcn-space/blocks/pricing-02/pricing.tsx +0 -213
  29. package/src/components/shadcn-space/blocks/services-01/services.tsx +0 -178
  30. package/src/components/shadcn-space/blocks/team-01/team.tsx +0 -166
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allbluecn/web-app",
3
- "version": "0.17.0",
3
+ "version": "0.17.1",
4
4
  "license": "AGPL-3.0-or-later",
5
5
  "type": "module",
6
6
  "files": [
@@ -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.0",
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"
@@ -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 AgencyHeroSection from '@/components/shadcn-space/blocks/hero-01'
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: IndexPage,
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: [securityHeadersMiddleware, requestContextMiddleware, neonKeepaliveMiddleware, aiPortsMiddleware, apiCorsMiddleware, csrfMiddleware, auditRequestMiddleware],
108
+ requestMiddleware,
106
109
  }
107
110
  })
@@ -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: 'Inter Variable', sans-serif;
74
- --font-heading: var(--font-sans);
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
- }
@@ -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
- }