love-ui 1.2.21 → 1.2.23
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/dist/chunk-CH2CHRA7.js +122 -0
- package/dist/index.js +71 -71
- package/dist/mcp-server.js +1 -1
- package/package.json +1 -1
- package/registry/default/blocks/404-2/components/not-found.tsx +1 -1
- package/registry/default/blocks/auth1/components/auth-page.tsx +0 -7
- package/registry/default/blocks/auth1/components/logo.tsx +3 -14
- package/registry/default/blocks/auth2/components/auth.tsx +1 -1
- package/registry/default/blocks/auth2/components/ui/decor-icon.tsx +49 -36
- package/registry/default/blocks/auth3/components/logo.tsx +3 -14
- package/registry/default/blocks/auth3/components/ui/decor-icon.tsx +49 -36
- package/registry/default/blocks/contact5/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/cta-3/components/cta.tsx +1 -1
- package/registry/default/blocks/cta-3/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/cta-5/components/cta.tsx +3 -9
- package/registry/default/blocks/faq-3/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/features1/components/feature-section.tsx +1 -1
- package/registry/default/blocks/features2/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/features2/components/feature-section.tsx +1 -1
- package/registry/default/blocks/features4/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/features4/components/feature-section.tsx +0 -2
- package/registry/default/blocks/features5/components/feature-section.tsx +1 -1
- package/registry/default/blocks/features6/components/feature-section.tsx +5 -21
- package/registry/default/blocks/footer1/components/logo.tsx +3 -14
- package/registry/default/blocks/footer2/components/footer.tsx +1 -1
- package/registry/default/blocks/footer2/components/logo.tsx +3 -14
- package/registry/default/blocks/footer3/components/footer.tsx +2 -2
- package/registry/default/blocks/footer3/components/logo.tsx +3 -14
- package/registry/default/blocks/footer4/components/footer.tsx +1 -1
- package/registry/default/blocks/footer4/components/logo.tsx +3 -14
- package/registry/default/blocks/footer5/components/footer.tsx +27 -30
- package/registry/default/blocks/footer5/components/logo.tsx +3 -14
- package/registry/default/blocks/footer6/components/footer.tsx +3 -3
- package/registry/default/blocks/footer6/components/logo.tsx +3 -14
- package/registry/default/blocks/header1/components/logo.tsx +3 -14
- package/registry/default/blocks/header2/components/logo.tsx +3 -14
- package/registry/default/blocks/header3/components/logo.tsx +3 -14
- package/registry/default/blocks/hero1/components/hero.tsx +7 -7
- package/registry/default/blocks/hero1/components/logo.tsx +3 -14
- package/registry/default/blocks/hero2/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/hero2/components/hero.tsx +4 -5
- package/registry/default/blocks/hero2/components/logo.tsx +3 -14
- package/registry/default/blocks/hero3/components/hero.tsx +2 -3
- package/registry/default/blocks/hero3/components/logo.tsx +3 -14
- package/registry/default/blocks/integrations1/components/integrations.tsx +7 -1
- package/registry/default/blocks/integrations2/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/integrations2/components/integrations.tsx +7 -1
- package/registry/default/blocks/integrations3/components/integrations.tsx +25 -34
- package/registry/default/blocks/integrations4/components/integrations.tsx +2 -5
- package/registry/default/blocks/integrations5/components/integrations.tsx +8 -5
- package/registry/default/blocks/logo-cloud-2/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/logo-cloud-3/app/page.tsx +2 -2
- package/registry/default/blocks/logo-cloud-3/components/logo-cloud.tsx +1 -1
- package/registry/default/blocks/logo-cloud-4/components/logo-cloud.tsx +1 -1
- package/registry/default/blocks/logo-cloud-4/components/progressive-blur.tsx +30 -36
- package/registry/default/blocks/pricing1/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/stats10/components/stats.tsx +1 -9
- package/registry/default/blocks/testimonials1/components/logo.tsx +3 -14
- package/registry/default/blocks/testimonials1/components/testimonials.tsx +1 -1
- package/registry/default/blocks/testimonials2/components/testimonials.tsx +3 -3
- package/registry/default/blocks/testimonials3/components/decor-icon.tsx +49 -36
- package/registry/default/blocks/testimonials3/components/testimonials.tsx +0 -1
- package/registry/default/blocks/testimonials5/components/testimonials.tsx +1 -1
- package/registry/default/blocks/testimonials6/components/testimonials.tsx +1 -1
- package/registry/default/examples/preview-card-profile.tsx +3 -3
- package/registry/default/ui/button.tsx +1 -1
- package/registry/default/ui/toggle.tsx +2 -1
- package/dist/chunk-VDMHIXDM.js +0 -121
- package/registry/default/blocks/auth1/components/particles.tsx +0 -321
package/dist/mcp-server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{Na as t,f as o,oa as n}from"./chunk-CH2CHRA7.js";import{StdioServerTransport as e}from"@modelcontextprotocol/sdk/server/stdio.js";async function a(){try{let r=new e;await t.connect(r)}catch(r){o.break(),n(r)}}a();
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@ export function NotFoundPage() {
|
|
|
13
13
|
<div className="relative flex min-h-screen w-full items-center justify-center overflow-hidden">
|
|
14
14
|
<Empty>
|
|
15
15
|
<EmptyHeader>
|
|
16
|
-
<EmptyTitle className="
|
|
16
|
+
<EmptyTitle className=" font-extrabold text-9xl">
|
|
17
17
|
404
|
|
18
18
|
</EmptyTitle>
|
|
19
19
|
<EmptyDescription className="-mt-8 text-nowrap text-foreground/80">
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { Github as GithubIcon, GoogleIcon } from "love-ui/logos";
|
|
2
2
|
import { Logo } from "./logo";
|
|
3
|
-
import { Particles } from "./particles";
|
|
4
3
|
import { Button } from "@/registry/default/ui/button";
|
|
5
4
|
import { ChevronLeft as ChevronLeftIcon } from "love-ui/icons";
|
|
6
5
|
|
|
7
6
|
export function AuthPage() {
|
|
8
7
|
return (
|
|
9
8
|
<div className="relative w-full md:h-screen md:overflow-hidden">
|
|
10
|
-
<Particles
|
|
11
|
-
className="absolute inset-0"
|
|
12
|
-
color="#666666"
|
|
13
|
-
ease={20}
|
|
14
|
-
quantity={120}
|
|
15
|
-
/>
|
|
16
9
|
<div className="relative mx-auto flex min-h-screen max-w-5xl flex-col justify-center px-8">
|
|
17
10
|
<Button asChild className="absolute top-4 left-4" variant="ghost">
|
|
18
11
|
<a href="#">
|
|
@@ -6,18 +6,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
6
6
|
fill="none"
|
|
7
7
|
xmlns="http://www.w3.org/2000/svg"
|
|
8
8
|
>
|
|
9
|
-
|
|
10
|
-
<linearGradient id="loveui-blue" x1="0" y1="0" x2="48" y2="48">
|
|
11
|
-
<stop stopColor="#38A3FF" />
|
|
12
|
-
<stop offset="0.55" stopColor="#1266F1" />
|
|
13
|
-
<stop offset="1" stopColor="#0B3FD8" />
|
|
14
|
-
</linearGradient>
|
|
15
|
-
|
|
16
|
-
<linearGradient id="loveui-shine" x1="0" y1="0" x2="1" y2="1">
|
|
17
|
-
<stop stopColor="#FFFFFF" stopOpacity="0.9" />
|
|
18
|
-
<stop offset="1" stopColor="#BBD8FF" stopOpacity="0.4" />
|
|
19
|
-
</linearGradient>
|
|
20
|
-
</defs>
|
|
9
|
+
|
|
21
10
|
|
|
22
11
|
<g transform="translate(0 0)">
|
|
23
12
|
<rect
|
|
@@ -26,7 +15,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
26
15
|
width="48"
|
|
27
16
|
height="48"
|
|
28
17
|
rx="12"
|
|
29
|
-
fill="
|
|
18
|
+
fill="#1266F1"
|
|
30
19
|
/>
|
|
31
20
|
|
|
32
21
|
<path
|
|
@@ -69,7 +58,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
69
58
|
H18
|
|
70
59
|
C19.7 29 21 27.7 21 25
|
|
71
60
|
Z"
|
|
72
|
-
fill="
|
|
61
|
+
fill="#BBD8FF"
|
|
73
62
|
opacity="0.5"
|
|
74
63
|
/>
|
|
75
64
|
</g>
|
|
@@ -16,7 +16,7 @@ export function AuthPage() {
|
|
|
16
16
|
<div
|
|
17
17
|
className={cn(
|
|
18
18
|
"relative flex w-full max-w-sm flex-col justify-between p-6 md:p-8",
|
|
19
|
-
"
|
|
19
|
+
""
|
|
20
20
|
)}
|
|
21
21
|
>
|
|
22
22
|
<div className="absolute -inset-y-6 -left-px w-px bg-border" />
|
|
@@ -2,44 +2,57 @@ import { cn } from "@/lib/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
|
|
4
4
|
const DecorIconVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
"pointer-events-none absolute z-1 size-4 shrink-0 stroke-1 stroke-muted-foreground transition-transform",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
position: {
|
|
9
|
+
// We also rotate the SVG inside the variant so the bracket always points inward
|
|
10
|
+
"top-left":
|
|
11
|
+
"top-0 left-0 -translate-x-1/2 -translate-y-1/2",
|
|
12
|
+
"top-right":
|
|
13
|
+
"top-0 right-0 translate-x-1/2 -translate-y-1/2 rotate-90",
|
|
14
|
+
"bottom-right":
|
|
15
|
+
"right-0 bottom-0 translate-x-1/2 translate-y-1/2 rotate-180",
|
|
16
|
+
"bottom-left":
|
|
17
|
+
"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 -rotate-90",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
position: "top-left",
|
|
22
|
+
},
|
|
23
|
+
}
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
type DecorIconProps = React.ComponentProps<"svg"> &
|
|
26
|
-
|
|
27
|
+
VariantProps<typeof DecorIconVariants> & {
|
|
28
|
+
variant?: "bracket" | "dot" | "diagonal";
|
|
29
|
+
};
|
|
27
30
|
|
|
28
|
-
export function DecorIcon({ position, className, ...props }: DecorIconProps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
export function DecorIcon({ position, variant = "bracket", className, ...props }: DecorIconProps) {
|
|
32
|
+
return (
|
|
33
|
+
<svg
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
className={cn(DecorIconVariants({ position, className }))}
|
|
36
|
+
fill="none"
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
viewBox="0 0 24 24"
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
{...props}
|
|
41
|
+
>
|
|
42
|
+
{/* OPTION 1: Corner Bracket (Default) */}
|
|
43
|
+
{variant === "bracket" && (
|
|
44
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M12 4H4v8" />
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
{/* OPTION 2: Minimalist Dot (Change fill to currentColor in class if using this) */}
|
|
48
|
+
{variant === "dot" && (
|
|
49
|
+
<circle cx="12" cy="12" r="3" fill="currentColor" />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* OPTION 3: Diagonal Accent Line */}
|
|
53
|
+
{variant === "diagonal" && (
|
|
54
|
+
<path strokeLinecap="round" d="M4 20L20 4" />
|
|
55
|
+
)}
|
|
56
|
+
</svg>
|
|
57
|
+
);
|
|
45
58
|
}
|
|
@@ -6,18 +6,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
6
6
|
fill="none"
|
|
7
7
|
xmlns="http://www.w3.org/2000/svg"
|
|
8
8
|
>
|
|
9
|
-
|
|
10
|
-
<linearGradient id="loveui-blue" x1="0" y1="0" x2="48" y2="48">
|
|
11
|
-
<stop stopColor="#38A3FF" />
|
|
12
|
-
<stop offset="0.55" stopColor="#1266F1" />
|
|
13
|
-
<stop offset="1" stopColor="#0B3FD8" />
|
|
14
|
-
</linearGradient>
|
|
15
|
-
|
|
16
|
-
<linearGradient id="loveui-shine" x1="0" y1="0" x2="1" y2="1">
|
|
17
|
-
<stop stopColor="#FFFFFF" stopOpacity="0.9" />
|
|
18
|
-
<stop offset="1" stopColor="#BBD8FF" stopOpacity="0.4" />
|
|
19
|
-
</linearGradient>
|
|
20
|
-
</defs>
|
|
9
|
+
|
|
21
10
|
|
|
22
11
|
<g transform="translate(0 0)">
|
|
23
12
|
<rect
|
|
@@ -26,7 +15,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
26
15
|
width="48"
|
|
27
16
|
height="48"
|
|
28
17
|
rx="12"
|
|
29
|
-
fill="
|
|
18
|
+
fill="#1266F1"
|
|
30
19
|
/>
|
|
31
20
|
|
|
32
21
|
<path
|
|
@@ -69,7 +58,7 @@ export const Logo = (props: React.ComponentProps<"svg">) => (
|
|
|
69
58
|
H18
|
|
70
59
|
C19.7 29 21 27.7 21 25
|
|
71
60
|
Z"
|
|
72
|
-
fill="
|
|
61
|
+
fill="#BBD8FF"
|
|
73
62
|
opacity="0.5"
|
|
74
63
|
/>
|
|
75
64
|
</g>
|
|
@@ -2,44 +2,57 @@ import { cn } from "@/lib/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
|
|
4
4
|
const DecorIconVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
"pointer-events-none absolute z-1 size-4 shrink-0 stroke-1 stroke-muted-foreground transition-transform",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
position: {
|
|
9
|
+
// We also rotate the SVG inside the variant so the bracket always points inward
|
|
10
|
+
"top-left":
|
|
11
|
+
"top-0 left-0 -translate-x-1/2 -translate-y-1/2",
|
|
12
|
+
"top-right":
|
|
13
|
+
"top-0 right-0 translate-x-1/2 -translate-y-1/2 rotate-90",
|
|
14
|
+
"bottom-right":
|
|
15
|
+
"right-0 bottom-0 translate-x-1/2 translate-y-1/2 rotate-180",
|
|
16
|
+
"bottom-left":
|
|
17
|
+
"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 -rotate-90",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
position: "top-left",
|
|
22
|
+
},
|
|
23
|
+
}
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
type DecorIconProps = React.ComponentProps<"svg"> &
|
|
26
|
-
|
|
27
|
+
VariantProps<typeof DecorIconVariants> & {
|
|
28
|
+
variant?: "bracket" | "dot" | "diagonal";
|
|
29
|
+
};
|
|
27
30
|
|
|
28
|
-
export function DecorIcon({ position, className, ...props }: DecorIconProps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
export function DecorIcon({ position, variant = "bracket", className, ...props }: DecorIconProps) {
|
|
32
|
+
return (
|
|
33
|
+
<svg
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
className={cn(DecorIconVariants({ position, className }))}
|
|
36
|
+
fill="none"
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
viewBox="0 0 24 24"
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
{...props}
|
|
41
|
+
>
|
|
42
|
+
{/* OPTION 1: Corner Bracket (Default) */}
|
|
43
|
+
{variant === "bracket" && (
|
|
44
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M12 4H4v8" />
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
{/* OPTION 2: Minimalist Dot (Change fill to currentColor in class if using this) */}
|
|
48
|
+
{variant === "dot" && (
|
|
49
|
+
<circle cx="12" cy="12" r="3" fill="currentColor" />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* OPTION 3: Diagonal Accent Line */}
|
|
53
|
+
{variant === "diagonal" && (
|
|
54
|
+
<path strokeLinecap="round" d="M4 20L20 4" />
|
|
55
|
+
)}
|
|
56
|
+
</svg>
|
|
57
|
+
);
|
|
45
58
|
}
|
|
@@ -2,44 +2,57 @@ import { cn } from "@/lib/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
|
|
4
4
|
const DecorIconVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
"pointer-events-none absolute z-1 size-4 shrink-0 stroke-1 stroke-muted-foreground transition-transform",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
position: {
|
|
9
|
+
// We also rotate the SVG inside the variant so the bracket always points inward
|
|
10
|
+
"top-left":
|
|
11
|
+
"top-0 left-0 -translate-x-1/2 -translate-y-1/2",
|
|
12
|
+
"top-right":
|
|
13
|
+
"top-0 right-0 translate-x-1/2 -translate-y-1/2 rotate-90",
|
|
14
|
+
"bottom-right":
|
|
15
|
+
"right-0 bottom-0 translate-x-1/2 translate-y-1/2 rotate-180",
|
|
16
|
+
"bottom-left":
|
|
17
|
+
"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 -rotate-90",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
position: "top-left",
|
|
22
|
+
},
|
|
23
|
+
}
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
type DecorIconProps = React.ComponentProps<"svg"> &
|
|
26
|
-
|
|
27
|
+
VariantProps<typeof DecorIconVariants> & {
|
|
28
|
+
variant?: "bracket" | "dot" | "diagonal";
|
|
29
|
+
};
|
|
27
30
|
|
|
28
|
-
export function DecorIcon({ position, className, ...props }: DecorIconProps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
export function DecorIcon({ position, variant = "bracket", className, ...props }: DecorIconProps) {
|
|
32
|
+
return (
|
|
33
|
+
<svg
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
className={cn(DecorIconVariants({ position, className }))}
|
|
36
|
+
fill="none"
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
viewBox="0 0 24 24"
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
{...props}
|
|
41
|
+
>
|
|
42
|
+
{/* OPTION 1: Corner Bracket (Default) */}
|
|
43
|
+
{variant === "bracket" && (
|
|
44
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M12 4H4v8" />
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
{/* OPTION 2: Minimalist Dot (Change fill to currentColor in class if using this) */}
|
|
48
|
+
{variant === "dot" && (
|
|
49
|
+
<circle cx="12" cy="12" r="3" fill="currentColor" />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* OPTION 3: Diagonal Accent Line */}
|
|
53
|
+
{variant === "diagonal" && (
|
|
54
|
+
<path strokeLinecap="round" d="M4 20L20 4" />
|
|
55
|
+
)}
|
|
56
|
+
</svg>
|
|
57
|
+
);
|
|
45
58
|
}
|
|
@@ -4,7 +4,7 @@ import { ArrowRight as ArrowRightIcon } from "love-ui/icons";
|
|
|
4
4
|
|
|
5
5
|
export function CallToAction() {
|
|
6
6
|
return (
|
|
7
|
-
<div className="relative mx-auto flex w-full max-w-3xl flex-col justify-between gap-y-4 border-y px-4 py-8
|
|
7
|
+
<div className="relative mx-auto flex w-full max-w-3xl flex-col justify-between gap-y-4 border-y px-4 py-8">
|
|
8
8
|
<DecorIcon className="size-4" position="top-left" />
|
|
9
9
|
<DecorIcon className="size-4" position="top-right" />
|
|
10
10
|
<DecorIcon className="size-4" position="bottom-left" />
|
|
@@ -2,44 +2,57 @@ import { cn } from "@/lib/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
|
|
4
4
|
const DecorIconVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
"pointer-events-none absolute z-1 size-4 shrink-0 stroke-1 stroke-muted-foreground transition-transform",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
position: {
|
|
9
|
+
// We also rotate the SVG inside the variant so the bracket always points inward
|
|
10
|
+
"top-left":
|
|
11
|
+
"top-0 left-0 -translate-x-1/2 -translate-y-1/2",
|
|
12
|
+
"top-right":
|
|
13
|
+
"top-0 right-0 translate-x-1/2 -translate-y-1/2 rotate-90",
|
|
14
|
+
"bottom-right":
|
|
15
|
+
"right-0 bottom-0 translate-x-1/2 translate-y-1/2 rotate-180",
|
|
16
|
+
"bottom-left":
|
|
17
|
+
"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 -rotate-90",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
position: "top-left",
|
|
22
|
+
},
|
|
23
|
+
}
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
type DecorIconProps = React.ComponentProps<"svg"> &
|
|
26
|
-
|
|
27
|
+
VariantProps<typeof DecorIconVariants> & {
|
|
28
|
+
variant?: "bracket" | "dot" | "diagonal";
|
|
29
|
+
};
|
|
27
30
|
|
|
28
|
-
export function DecorIcon({ position, className, ...props }: DecorIconProps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
export function DecorIcon({ position, variant = "bracket", className, ...props }: DecorIconProps) {
|
|
32
|
+
return (
|
|
33
|
+
<svg
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
className={cn(DecorIconVariants({ position, className }))}
|
|
36
|
+
fill="none"
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
viewBox="0 0 24 24"
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
{...props}
|
|
41
|
+
>
|
|
42
|
+
{/* OPTION 1: Corner Bracket (Default) */}
|
|
43
|
+
{variant === "bracket" && (
|
|
44
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M12 4H4v8" />
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
{/* OPTION 2: Minimalist Dot (Change fill to currentColor in class if using this) */}
|
|
48
|
+
{variant === "dot" && (
|
|
49
|
+
<circle cx="12" cy="12" r="3" fill="currentColor" />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* OPTION 3: Diagonal Accent Line */}
|
|
53
|
+
{variant === "diagonal" && (
|
|
54
|
+
<path strokeLinecap="round" d="M4 20L20 4" />
|
|
55
|
+
)}
|
|
56
|
+
</svg>
|
|
57
|
+
);
|
|
45
58
|
}
|
|
@@ -42,25 +42,19 @@ export function CallToAction() {
|
|
|
42
42
|
<img
|
|
43
43
|
alt="Avatar 01"
|
|
44
44
|
height={24}
|
|
45
|
-
src="https://images.unsplash.com/photo-
|
|
45
|
+
src="https://images.unsplash.com/photo-1543610892-0b1f7e6d8ac1?w=96&h=96&dpr=2&q=80"
|
|
46
46
|
width={24}
|
|
47
47
|
/>
|
|
48
48
|
<img
|
|
49
49
|
alt="Avatar 02"
|
|
50
50
|
height={24}
|
|
51
|
-
src="https://images.unsplash.com/photo-
|
|
51
|
+
src="https://images.unsplash.com/photo-1628157588553-5eeea00af15c?w=96&h=96&dpr=2&q=80"
|
|
52
52
|
width={24}
|
|
53
53
|
/>
|
|
54
54
|
<img
|
|
55
55
|
alt="Avatar 03"
|
|
56
56
|
height={24}
|
|
57
|
-
src="https://images.unsplash.com/photo-
|
|
58
|
-
width={24}
|
|
59
|
-
/>
|
|
60
|
-
<img
|
|
61
|
-
alt="Avatar 04"
|
|
62
|
-
height={24}
|
|
63
|
-
src="https://images.unsplash.com/photo-1610216705422-caa3fcb6d158?q=80&w=72"
|
|
57
|
+
src="https://images.unsplash.com/photo-1655874819398-c6dfbec68ac7?w=96&h=96&dpr=2&q=80"
|
|
64
58
|
width={24}
|
|
65
59
|
/>
|
|
66
60
|
</div>
|
|
@@ -2,44 +2,57 @@ import { cn } from "@/lib/utils";
|
|
|
2
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
3
3
|
|
|
4
4
|
const DecorIconVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
"pointer-events-none absolute z-1 size-4 shrink-0 stroke-1 stroke-muted-foreground transition-transform",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
position: {
|
|
9
|
+
// We also rotate the SVG inside the variant so the bracket always points inward
|
|
10
|
+
"top-left":
|
|
11
|
+
"top-0 left-0 -translate-x-1/2 -translate-y-1/2",
|
|
12
|
+
"top-right":
|
|
13
|
+
"top-0 right-0 translate-x-1/2 -translate-y-1/2 rotate-90",
|
|
14
|
+
"bottom-right":
|
|
15
|
+
"right-0 bottom-0 translate-x-1/2 translate-y-1/2 rotate-180",
|
|
16
|
+
"bottom-left":
|
|
17
|
+
"bottom-0 left-0 -translate-x-1/2 translate-y-1/2 -rotate-90",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
position: "top-left",
|
|
22
|
+
},
|
|
23
|
+
}
|
|
23
24
|
);
|
|
24
25
|
|
|
25
26
|
type DecorIconProps = React.ComponentProps<"svg"> &
|
|
26
|
-
|
|
27
|
+
VariantProps<typeof DecorIconVariants> & {
|
|
28
|
+
variant?: "bracket" | "dot" | "diagonal";
|
|
29
|
+
};
|
|
27
30
|
|
|
28
|
-
export function DecorIcon({ position, className, ...props }: DecorIconProps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
31
|
+
export function DecorIcon({ position, variant = "bracket", className, ...props }: DecorIconProps) {
|
|
32
|
+
return (
|
|
33
|
+
<svg
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
className={cn(DecorIconVariants({ position, className }))}
|
|
36
|
+
fill="none"
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
viewBox="0 0 24 24"
|
|
39
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
+
{...props}
|
|
41
|
+
>
|
|
42
|
+
{/* OPTION 1: Corner Bracket (Default) */}
|
|
43
|
+
{variant === "bracket" && (
|
|
44
|
+
<path strokeLinecap="round" strokeLinejoin="round" d="M12 4H4v8" />
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
{/* OPTION 2: Minimalist Dot (Change fill to currentColor in class if using this) */}
|
|
48
|
+
{variant === "dot" && (
|
|
49
|
+
<circle cx="12" cy="12" r="3" fill="currentColor" />
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
{/* OPTION 3: Diagonal Accent Line */}
|
|
53
|
+
{variant === "diagonal" && (
|
|
54
|
+
<path strokeLinecap="round" d="M4 20L20 4" />
|
|
55
|
+
)}
|
|
56
|
+
</svg>
|
|
57
|
+
);
|
|
45
58
|
}
|