@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
@@ -1,187 +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 { Badge } from "@/components/ui/badge";
19
- import { Button } from "@/components/ui/button";
20
- import { Card, CardContent } from "@/components/ui/card";
21
- import { Separator } from "@/components/ui/separator";
22
- import { cn } from "@/lib/utils";
23
- import { ArrowUpRight, Check } from "lucide-react";
24
- import { m } from "motion/react";
25
- import { m as msg } from "@/paraglide/messages.js";
26
-
27
- type PricingPlan = {
28
- plan_bg_color: string;
29
- plan_name: string;
30
- plan_descp: string;
31
- plan_price: number;
32
- plan_feature: string[];
33
- };
34
-
35
- const pricingData: PricingPlan[] = [
36
- {
37
- plan_bg_color: "bg-blue-500/10",
38
- plan_name: "Free",
39
- plan_descp: "",
40
- plan_price: 0,
41
- plan_feature: [
42
- "Design Updates",
43
- "Mid-level Designer",
44
- "SEO Optimization",
45
- "Monthly Analytics",
46
- "2x Calls Per Month",
47
- "License free Assets",
48
- ],
49
- },
50
- {
51
- plan_bg_color: "bg-teal-400/20",
52
- plan_name: "Pro",
53
- plan_descp: "2x the speed. Great for an MVP, Web App or complex problem",
54
- plan_price: 3800,
55
- plan_feature: [
56
- "Everything on Starter",
57
- "Developer Updates",
58
- "Digital Marketing",
59
- "Weekly Analytics",
60
- "8x Calls Per Month",
61
- "Premium Assets",
62
- ],
63
- },
64
- ];
65
-
66
- const Pricing = () => {
67
- const cardVariants = {
68
- hidden: {
69
- opacity: 0,
70
- y: 80,
71
- },
72
- visible: (index: number) => ({
73
- opacity: 1,
74
- y: 0,
75
- transition: {
76
- delay: index * 0.2,
77
- duration: 0.6,
78
- },
79
- }),
80
- };
81
-
82
- return (
83
- <section className="bg-background py-10 xl:py-0">
84
- <div className="max-w-7xl mx-auto px-4 lg:px-8 xl:px-16 lg:py-20 sm:py-16 py-8">
85
- <div className="flex flex-col gap-8 md:gap-12 justify-center items-center w-full">
86
- {/* Heading */}
87
- <div className="flex flex-col gap-4 justify-center items-center animate-in fade-in slide-in-from-top-8 duration-700 ease-in-out">
88
- {/* Badge */}
89
- <Badge
90
- variant={"outline"}
91
- className="py-1 px-3 text-sm font-normal leading-5 w-fit h-7"
92
- >
93
- Pricing
94
- </Badge>
95
- {/* Heading */}
96
- <div className="max-w-3xs sm:max-w-md mx-auto text-center">
97
- <h2 className="text-foreground text-3xl sm:text-5xl font-medium">
98
- Pick the plan that fits your start-up
99
- </h2>
100
- </div>
101
- </div>
102
- {/* Pricing Plans */}
103
- <div className="flex flex-col lg:flex-row items-center justify-center grow gap-6 w-full">
104
- {pricingData?.map((items: PricingPlan, index: number) => (
105
- <m.div
106
- key={index}
107
- variants={cardVariants}
108
- initial="hidden"
109
- whileInView="visible"
110
- viewport={{ once: true }}
111
- custom={index}
112
- className="w-full sm:w-fit"
113
- >
114
- <Card
115
- className={cn(
116
- items.plan_bg_color,
117
- "p-8 sm:p-10 rounded-2xl ring-0 w-full sm:w-fit",
118
- )}
119
- key={index}
120
- >
121
- <CardContent className="flex flex-col sm:flex-row gap-6 md:gap-10 items-start self-stretch px-0 h-full w-full">
122
- <div className="flex flex-col items-start justify-between self-stretch gap-6">
123
- <div className="flex flex-col gap-3">
124
- <Badge className="py-1 px-3 text-sm font-normal leading-5 w-fit h-7">
125
- {items.plan_name}
126
- </Badge>
127
- <p className="text-sm font-normal text-muted-foreground max-w-56">
128
- {items.plan_descp || msg.billing_pricing_freeDesc()}
129
- </p>
130
- </div>
131
- <div className="flex flex-col gap-4">
132
- <p className="text-4xl sm:text-5xl font-semibold text-card-foreground flex items-end">
133
- ¥{items.plan_price}
134
- <span className="text-base font-normal text-muted-foreground">
135
- /month
136
- </span>
137
- </p>
138
- <Button className="relative bg-white hover:bg-white hover:text-black dark:hover:text-black text-black text-sm font-medium rounded-full h-12 p-1 ps-6 pe-14 group transition-all duration-500 hover:ps-14 hover:pe-6 w-fit overflow-hidden cursor-pointer">
139
- <span className="relative z-10 transition-all duration-500">
140
- { items.plan_name === "Free" ? msg.billing_pricing_startFree() : msg.billing_pricing_viewPro() }
141
- </span>
142
- <div className="absolute right-1 w-10 h-10 bg-black text-white rounded-full flex items-center justify-center transition-all duration-500 group-hover:right-[calc(100%-44px)] group-hover:rotate-45">
143
- <ArrowUpRight size={16} />
144
- </div>
145
- </Button>
146
- </div>
147
- </div>
148
- <Separator
149
- orientation="vertical"
150
- className="hidden sm:block"
151
- />
152
- <Separator
153
- orientation="horizontal"
154
- className="sm:hidden block"
155
- />
156
- <div className="flex flex-col items-start gap-3 grow">
157
- <p className="text-card-foreground text-base sm:text-xl font-normal sm:font-medium">
158
- Features
159
- </p>
160
- <ul className="flex flex-col items-start self-stretch gap-3">
161
- {items.plan_feature?.map(
162
- (feature: string, index: number) => {
163
- return (
164
- <li
165
- key={index}
166
- className="flex items-center gap-3 text-card-foreground text-base font-normal tracking-normal"
167
- >
168
- <Check size={16} aria-hidden="true" />
169
- {feature}
170
- </li>
171
- );
172
- },
173
- )}
174
- </ul>
175
- </div>
176
- </CardContent>
177
- </Card>
178
- </m.div>
179
- ))}
180
- </div>
181
- </div>
182
- </div>
183
- </section>
184
- );
185
- };
186
-
187
- export default Pricing;
@@ -1,213 +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 { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
20
- import { Badge } from "@/components/ui/badge";
21
- import { Button } from "@/components/ui/button";
22
- import { Separator } from "@/components/ui/separator";
23
- import { cn } from "@/lib/utils";
24
- import { Check, Flame } from "lucide-react";
25
- import { m, easeInOut } from "motion/react";
26
-
27
- type PricingPlan = {
28
- plan_name: string;
29
- plan_descp: string;
30
- plan_price: number;
31
- plan_feature: string[];
32
- plan_recommended: boolean;
33
- };
34
-
35
- const pricingData: PricingPlan[] = [
36
- {
37
- plan_name: "Pro",
38
- plan_descp:
39
- "Launch your website faster with ready-to-use components, blocks and zero setup friction with us.",
40
- plan_price: 2500,
41
- plan_feature: [
42
- "Access to all core Shadcn UI blocks",
43
- "Copy-paste ready React code",
44
- "Regular library updates",
45
- "Commercial use license",
46
- "Community support & documentation",
47
- ],
48
- plan_recommended: false,
49
- },
50
- {
51
- plan_name: "Pro Plus",
52
- plan_descp:
53
- "Scale with confidence using premium blocks, templates, and included strategy guidance.",
54
- plan_price: 3800,
55
- plan_feature: [
56
- "Everything in Pro",
57
- "Premium templates & more sections",
58
- "Early access to new components",
59
- "Private Discord & priority support",
60
- "Monthly strategy & growth sessions",
61
- ],
62
- plan_recommended: true,
63
- },
64
- {
65
- plan_name: "Enterprise",
66
- plan_descp:
67
- "Build at scale with full access, priority support, and dedicated one-on-one strategy calls.",
68
- plan_price: 5000,
69
- plan_feature: [
70
- "Everything in Pro Plus",
71
- "Unlimited team seats",
72
- "Dedicated UI & integration support",
73
- "Custom component requests",
74
- "One-on-one implementation",
75
- ],
76
- plan_recommended: false,
77
- },
78
- ];
79
-
80
- const Pricing = () => {
81
- const pricingCardVariants = {
82
- hidden: {
83
- opacity: 0,
84
- x: -60,
85
- },
86
- visible: (index: number) => ({
87
- opacity: 1,
88
- x: 0,
89
- transition: {
90
- delay: index * 0.25,
91
- duration: 0.6,
92
- ease: easeInOut,
93
- },
94
- }),
95
- };
96
-
97
- return (
98
- <section className="bg-background py-10 lg:py-0">
99
- <div className="max-w-7xl mx-auto px-4 xl:px-16 lg:py-20 sm:py-16 py-8">
100
- <div className="flex flex-col gap-8 md:gap-12 items-center justify-center w-full">
101
- {/* Heading */}
102
- <div className="flex flex-col gap-4 justify-center items-center">
103
- {/* Badge */}
104
- <Badge
105
- variant={"outline"}
106
- className="py-1 px-3 text-sm font-normal leading-5 w-fit h-7"
107
- >
108
- Pricing
109
- </Badge>
110
- {/* Heading */}
111
- <div className="max-w-3xs sm:max-w-md mx-auto text-center">
112
- <h2 className="text-foreground text-3xl sm:text-5xl font-medium">
113
- Pick the plan that fits your start-up
114
- </h2>
115
- </div>
116
- </div>
117
- {/* */}
118
- <div className="flex flex-col lg:flex-row gap-6 items-stretch h-full w-full">
119
- {pricingData.map((plan: PricingPlan, index: number) => {
120
- const isFeatured = plan.plan_recommended;
121
-
122
- return (
123
- <m.div
124
- key={index}
125
- variants={pricingCardVariants}
126
- initial="hidden"
127
- whileInView="visible"
128
- viewport={{ once: true }}
129
- custom={index}
130
- className={cn(
131
- "relative flex-1 flex flex-col w-full",
132
- isFeatured && "z-10 scale-102"
133
- )}
134
- >
135
- {/* GRADIENT BORDER */}
136
- {isFeatured && (
137
- <div className="absolute -inset-0.5 rounded-2xl overflow-hidden">
138
- {/* Animated conic-gradient border */}
139
- <div className="absolute -inset-full blur-xs animate-spin [animation-duration:2s] bg-conic from-blue-500 via-red-500 to-teal-400" />
140
-
141
- {/* Inner mask */}
142
- <div className="absolute inset-0.5 rounded-2xl bg-card" />
143
- </div>
144
- )}
145
-
146
- {/* CARD */}
147
- <Card
148
- className={cn(
149
- "relative flex-1 flex flex-col rounded-2xl p-8 gap-8",
150
- isFeatured ? "border-0 ring-0" : "border border-border"
151
- )}
152
- >
153
- <CardHeader className="p-0">
154
- <div className="flex flex-col gap-3 self-stretch">
155
- <div className="flex items-center justify-between">
156
- <CardTitle className="text-2xl font-medium text-primary">
157
- {plan.plan_name}
158
- </CardTitle>
159
- {isFeatured && (
160
- <Badge className="py-1 px-3 text-sm font-medium leading-5 w-fit h-7 flex items-center gap-1.5 [&>svg]:size-4!">
161
- <Flame size={16} /> Recommend
162
- </Badge>
163
- )}
164
- </div>
165
- <CardDescription className="text-base font-normal max-w-2x">
166
- {plan.plan_descp}
167
- </CardDescription>
168
- </div>
169
- </CardHeader>
170
-
171
- <CardContent className="flex flex-col flex-1 gap-8 p-0">
172
- <div className="flex items-baseline gap-1">
173
- <span className="text-foreground text-4xl sm:text-5xl font-medium">
174
- ${plan.plan_price}
175
- </span>
176
- <span className="text-muted-foreground text-base font-normal">
177
- /month
178
- </span>
179
- </div>
180
-
181
- <Separator orientation="horizontal" />
182
-
183
- <ul className="flex flex-col gap-4 flex-1">
184
- {plan.plan_feature.map((feature, idx) => (
185
- <li
186
- key={idx}
187
- className="flex items-center gap-3 text-base font-normal text-muted-foreground"
188
- >
189
- <Check className="size-4 text-primary shrink-0" />
190
- {feature}
191
- </li>
192
- ))}
193
- </ul>
194
-
195
- <Button
196
- className="w-full h-12 cursor-pointer"
197
- variant={isFeatured ? "default" : "outline"}
198
- >
199
- Get started
200
- </Button>
201
- </CardContent>
202
- </Card>
203
- </m.div>
204
- );
205
- })}
206
- </div>
207
- </div>
208
- </div>
209
- </section>
210
- );
211
- };
212
-
213
- export default Pricing;
@@ -1,178 +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 { Badge } from "@/components/ui/badge";
20
- import { Button } from "@/components/ui/button";
21
- import { Card, CardContent } from "@/components/ui/card";
22
- import { m } from "motion/react";
23
- import { cn } from "@/lib/utils";
24
- import {
25
- LucideIcon,
26
- AppWindowMac,
27
- Image,
28
- SwatchBook,
29
- WandSparkles,
30
- ArrowUpRight,
31
- BarChart3,
32
- } from "lucide-react";
33
-
34
- type ServiceData = {
35
- service_icon: LucideIcon;
36
- service_title: string;
37
- service_bg_color: string;
38
- service_text_color: string;
39
- };
40
-
41
- const serviceData: ServiceData[] = [
42
- {
43
- service_icon: SwatchBook,
44
- service_title: "Brand Strategy",
45
- service_bg_color: "bg-blue-500/10",
46
- service_text_color: "text-blue-500",
47
- },
48
- {
49
- service_icon: WandSparkles,
50
- service_title: "UX/UI Design",
51
- service_bg_color: "bg-orange-400/10",
52
- service_text_color: "text-orange-400",
53
- },
54
- {
55
- service_icon: BarChart3,
56
- service_title: "Analytics & Reporting",
57
- service_bg_color: "bg-teal-400/10",
58
- service_text_color: "text-teal-400",
59
- },
60
- {
61
- service_icon: Image,
62
- service_title: "Digital Marketing",
63
- service_bg_color: "bg-sky-400/10",
64
- service_text_color: "text-sky-400",
65
- },
66
- {
67
- service_icon: AppWindowMac,
68
- service_title: "Web Development",
69
- service_bg_color: "bg-red-500/10",
70
- service_text_color: "text-red-500",
71
- },
72
- ];
73
-
74
- const Services = () => {
75
- const cardVariants = {
76
- hidden: {
77
- opacity: 0,
78
- y: 80,
79
- },
80
- visible: (index: number) => ({
81
- opacity: 1,
82
- y: 0,
83
- transition: {
84
- delay: index * 0.3,
85
- duration: 0.6,
86
- },
87
- }),
88
- };
89
-
90
- return (
91
- <section className="bg-background py-10">
92
- <div className="max-w-7xl mx-auto px-4 lg:px-8 xl:px-16">
93
- <div className="flex flex-col gap-8 sm:gap-16 justify-center items-center w-full">
94
- {/* Heading */}
95
- <div className="flex flex-col gap-4 justify-center items-center animate-in fade-in slide-in-from-top-10 duration-1000 delay-200 ease-in-out fill-mode-both">
96
- {/* Badge */}
97
- <Badge
98
- variant={"outline"}
99
- className="text-sm font-normal py-1 px-3 h-7"
100
- >
101
- Services
102
- </Badge>
103
- {/* Heading */}
104
- <div className="max-w-3xs sm:max-w-lg mx-auto text-center">
105
- <h2 className="text-foreground text-3xl sm:text-5xl font-medium">
106
- Where innovation meets{" "}
107
- <span className="font-serif italic font-normal">aesthetics</span>
108
- </h2>
109
- </div>
110
- </div>
111
- <div className="flex flex-col gap-8 sm:gap-12 justify-center items-center">
112
- {/* services */}
113
- <div className="grid grid-cols-1 sm:grid-cols-3 lg:grid-cols-5 gap-6 w-full">
114
- {serviceData.map((service, index) => (
115
- <m.div
116
- key={index}
117
- variants={cardVariants}
118
- initial="hidden"
119
- whileInView="visible"
120
- viewport={{ once: true }}
121
- custom={index}
122
- >
123
- <Card className={cn("ring-0 p-8", service.service_bg_color)}>
124
- <CardContent className="p-0 flex flex-col items-start justify-between gap-12 sm:gap-16">
125
- <service.service_icon
126
- size={32}
127
- className={cn(service.service_text_color)}
128
- />
129
- <p
130
- className={cn(
131
- "text-2xl font-medium max-w-36",
132
- service.service_text_color
133
- )}
134
- >
135
- {service.service_title}
136
- </p>
137
- </CardContent>
138
- </Card>
139
- </m.div>
140
- ))}
141
- </div>
142
- {/* cta */}
143
- <div className="bg-gray-950 border rounded-2xl p-8 flex flex-col lg:flex-row items-center justify-between gap-12 w-full animate-in fade-in slide-in-from-bottom-10 duration-1000 delay-200 ease-in-out fill-mode-both">
144
- <div className="text-center md:text-start">
145
- <p className="text-2xl font-medium text-white">
146
- See Our Work in Action.{" "}
147
- </p>
148
- <p className="text-2xl font-medium text-white">
149
- Start Your Creative Journey with Us!
150
- </p>
151
- </div>
152
- <div className="flex md:flex-row flex-col items-center gap-4">
153
- <Button className="group text-sm font-medium text-black bg-white hover:text-black dark:hover:text-black hover:bg-white/90 rounded-full flex items-center gap-4 p-1 ps-5 w-fit h-12 cursor-pointer">
154
- <a href="#" className="flex items-center gap-4">
155
- <span>Let’s Collaborate</span>
156
- <div className="p-3 bg-black text-white rounded-full group-hover:rotate-45 transition-transform duration-300 ease-in-out">
157
- <ArrowUpRight size={16} />
158
- </div>
159
- </a>
160
- </Button>
161
- <Button className="group text-sm font-medium text-white bg-gray-950 hover:text-white dark:hover:text-white hover:bg-gray-950/90 rounded-full border border-white/50 flex items-center gap-4 p-1 ps-5 w-fit h-12 cursor-pointer">
162
- <a href="#" className="flex items-center gap-4">
163
- <span>View Portfolio</span>
164
- <div className="p-3 bg-white text-black rounded-full group-hover:rotate-45 transition-transform duration-300 ease-in-out">
165
- <ArrowUpRight size={16} />
166
- </div>
167
- </a>
168
- </Button>
169
- </div>
170
- </div>
171
- </div>
172
- </div>
173
- </div>
174
- </section>
175
- );
176
- };
177
-
178
- export default Services;