love-ui 1.2.22 → 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.
Files changed (68) hide show
  1. package/dist/{chunk-L7XDZOUL.js → chunk-CH2CHRA7.js} +1 -1
  2. package/dist/index.js +4 -4
  3. package/dist/mcp-server.js +1 -1
  4. package/package.json +1 -1
  5. package/registry/default/blocks/404-2/components/not-found.tsx +1 -1
  6. package/registry/default/blocks/auth1/components/auth-page.tsx +0 -7
  7. package/registry/default/blocks/auth1/components/logo.tsx +3 -14
  8. package/registry/default/blocks/auth2/components/auth.tsx +1 -1
  9. package/registry/default/blocks/auth2/components/ui/decor-icon.tsx +49 -36
  10. package/registry/default/blocks/auth3/components/logo.tsx +3 -14
  11. package/registry/default/blocks/auth3/components/ui/decor-icon.tsx +49 -36
  12. package/registry/default/blocks/contact5/components/decor-icon.tsx +49 -36
  13. package/registry/default/blocks/cta-3/components/cta.tsx +1 -1
  14. package/registry/default/blocks/cta-3/components/decor-icon.tsx +49 -36
  15. package/registry/default/blocks/cta-5/components/cta.tsx +3 -9
  16. package/registry/default/blocks/faq-3/components/decor-icon.tsx +49 -36
  17. package/registry/default/blocks/features1/components/feature-section.tsx +1 -1
  18. package/registry/default/blocks/features2/components/decor-icon.tsx +49 -36
  19. package/registry/default/blocks/features2/components/feature-section.tsx +1 -1
  20. package/registry/default/blocks/features4/components/decor-icon.tsx +49 -36
  21. package/registry/default/blocks/features4/components/feature-section.tsx +0 -2
  22. package/registry/default/blocks/features5/components/feature-section.tsx +1 -1
  23. package/registry/default/blocks/features6/components/feature-section.tsx +5 -21
  24. package/registry/default/blocks/footer1/components/logo.tsx +3 -14
  25. package/registry/default/blocks/footer2/components/footer.tsx +1 -1
  26. package/registry/default/blocks/footer2/components/logo.tsx +3 -14
  27. package/registry/default/blocks/footer3/components/footer.tsx +2 -2
  28. package/registry/default/blocks/footer3/components/logo.tsx +3 -14
  29. package/registry/default/blocks/footer4/components/footer.tsx +1 -1
  30. package/registry/default/blocks/footer4/components/logo.tsx +3 -14
  31. package/registry/default/blocks/footer5/components/footer.tsx +27 -30
  32. package/registry/default/blocks/footer5/components/logo.tsx +3 -14
  33. package/registry/default/blocks/footer6/components/footer.tsx +3 -3
  34. package/registry/default/blocks/footer6/components/logo.tsx +3 -14
  35. package/registry/default/blocks/header1/components/logo.tsx +3 -14
  36. package/registry/default/blocks/header2/components/logo.tsx +3 -14
  37. package/registry/default/blocks/header3/components/logo.tsx +3 -14
  38. package/registry/default/blocks/hero1/components/hero.tsx +7 -7
  39. package/registry/default/blocks/hero1/components/logo.tsx +3 -14
  40. package/registry/default/blocks/hero2/components/decor-icon.tsx +49 -36
  41. package/registry/default/blocks/hero2/components/hero.tsx +4 -5
  42. package/registry/default/blocks/hero2/components/logo.tsx +3 -14
  43. package/registry/default/blocks/hero3/components/hero.tsx +2 -3
  44. package/registry/default/blocks/hero3/components/logo.tsx +3 -14
  45. package/registry/default/blocks/integrations1/components/integrations.tsx +7 -1
  46. package/registry/default/blocks/integrations2/components/decor-icon.tsx +49 -36
  47. package/registry/default/blocks/integrations2/components/integrations.tsx +7 -1
  48. package/registry/default/blocks/integrations3/components/integrations.tsx +25 -34
  49. package/registry/default/blocks/integrations4/components/integrations.tsx +2 -5
  50. package/registry/default/blocks/integrations5/components/integrations.tsx +8 -5
  51. package/registry/default/blocks/logo-cloud-2/components/decor-icon.tsx +49 -36
  52. package/registry/default/blocks/logo-cloud-3/app/page.tsx +2 -2
  53. package/registry/default/blocks/logo-cloud-3/components/logo-cloud.tsx +1 -1
  54. package/registry/default/blocks/logo-cloud-4/components/logo-cloud.tsx +1 -1
  55. package/registry/default/blocks/logo-cloud-4/components/progressive-blur.tsx +30 -36
  56. package/registry/default/blocks/pricing1/components/decor-icon.tsx +49 -36
  57. package/registry/default/blocks/stats10/components/stats.tsx +1 -9
  58. package/registry/default/blocks/testimonials1/components/logo.tsx +3 -14
  59. package/registry/default/blocks/testimonials1/components/testimonials.tsx +1 -1
  60. package/registry/default/blocks/testimonials2/components/testimonials.tsx +3 -3
  61. package/registry/default/blocks/testimonials3/components/decor-icon.tsx +49 -36
  62. package/registry/default/blocks/testimonials3/components/testimonials.tsx +0 -1
  63. package/registry/default/blocks/testimonials5/components/testimonials.tsx +1 -1
  64. package/registry/default/blocks/testimonials6/components/testimonials.tsx +1 -1
  65. package/registry/default/examples/preview-card-profile.tsx +3 -3
  66. package/registry/default/ui/button.tsx +1 -1
  67. package/registry/default/ui/toggle.tsx +2 -1
  68. package/registry/default/blocks/auth1/components/particles.tsx +0 -321
@@ -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
- "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
- {
7
- variants: {
8
- position: {
9
- "top-left":
10
- "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
- "top-right":
12
- "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
- "bottom-right":
14
- "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
- "bottom-left":
16
- "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
- },
18
- },
19
- defaultVariants: {
20
- position: "top-left",
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
- VariantProps<typeof DecorIconVariants>;
27
+ VariantProps<typeof DecorIconVariants> & {
28
+ variant?: "bracket" | "dot" | "diagonal";
29
+ };
27
30
 
28
- export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
- return (
30
- <svg
31
- aria-hidden="true"
32
- className={cn(DecorIconVariants({ position, className }))}
33
- fill="none"
34
- stroke="currentColor"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- viewBox="0 0 24 24"
38
- xmlns="http://www.w3.org/2000/svg"
39
- {...props}
40
- >
41
- <path d="M5 12h14" />
42
- <path d="M12 5v14" />
43
- </svg>
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 dark:bg-[radial-gradient(35%_80%_at_25%_0%,--theme(--color-foreground/.08),transparent)]">
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
- "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
- {
7
- variants: {
8
- position: {
9
- "top-left":
10
- "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
- "top-right":
12
- "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
- "bottom-right":
14
- "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
- "bottom-left":
16
- "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
- },
18
- },
19
- defaultVariants: {
20
- position: "top-left",
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
- VariantProps<typeof DecorIconVariants>;
27
+ VariantProps<typeof DecorIconVariants> & {
28
+ variant?: "bracket" | "dot" | "diagonal";
29
+ };
27
30
 
28
- export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
- return (
30
- <svg
31
- aria-hidden="true"
32
- className={cn(DecorIconVariants({ position, className }))}
33
- fill="none"
34
- stroke="currentColor"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- viewBox="0 0 24 24"
38
- xmlns="http://www.w3.org/2000/svg"
39
- {...props}
40
- >
41
- <path d="M5 12h14" />
42
- <path d="M12 5v14" />
43
- </svg>
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-1535713875002-d1d0cf377fde?q=80&w=72"
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-1485206412256-701ccc5b93ca?q=80&w=72"
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-1527980965255-d3b416303d12?q=80&w=72"
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
- "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
- {
7
- variants: {
8
- position: {
9
- "top-left":
10
- "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
- "top-right":
12
- "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
- "bottom-right":
14
- "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
- "bottom-left":
16
- "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
- },
18
- },
19
- defaultVariants: {
20
- position: "top-left",
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
- VariantProps<typeof DecorIconVariants>;
27
+ VariantProps<typeof DecorIconVariants> & {
28
+ variant?: "bracket" | "dot" | "diagonal";
29
+ };
27
30
 
28
- export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
- return (
30
- <svg
31
- aria-hidden="true"
32
- className={cn(DecorIconVariants({ position, className }))}
33
- fill="none"
34
- stroke="currentColor"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- viewBox="0 0 24 24"
38
- xmlns="http://www.w3.org/2000/svg"
39
- {...props}
40
- >
41
- <path d="M5 12h14" />
42
- <path d="M12 5v14" />
43
- </svg>
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
  }
@@ -20,7 +20,7 @@ export function FeatureSection() {
20
20
  <div
21
21
  className={cn(
22
22
  "relative flex flex-col items-center justify-center p-2",
23
- "after:absolute after:inset-y-0 after:right-0 after:h-full after:w-px after:bg-linear-to-b after:from-foreground/6 after:via-foreground/25 after:to-foreground/6",
23
+ "after:absolute after:inset-y-0 after:right-0 after:h-full after:w-px after:bg-border/50",
24
24
  "[&_svg]:size-6 [&_svg]:text-muted-foreground",
25
25
  {
26
26
  "after:hidden": index === features.length - 1,
@@ -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
- "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
- {
7
- variants: {
8
- position: {
9
- "top-left":
10
- "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
- "top-right":
12
- "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
- "bottom-right":
14
- "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
- "bottom-left":
16
- "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
- },
18
- },
19
- defaultVariants: {
20
- position: "top-left",
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
- VariantProps<typeof DecorIconVariants>;
27
+ VariantProps<typeof DecorIconVariants> & {
28
+ variant?: "bracket" | "dot" | "diagonal";
29
+ };
27
30
 
28
- export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
- return (
30
- <svg
31
- aria-hidden="true"
32
- className={cn(DecorIconVariants({ position, className }))}
33
- fill="none"
34
- stroke="currentColor"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- viewBox="0 0 24 24"
38
- xmlns="http://www.w3.org/2000/svg"
39
- {...props}
40
- >
41
- <path d="M5 12h14" />
42
- <path d="M12 5v14" />
43
- </svg>
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
  }
@@ -43,7 +43,7 @@ export function FeatureSection() {
43
43
  <div className="grid grid-cols-1 md:grid-cols-3">
44
44
  {features.map((feature) => (
45
45
  <div
46
- className="group [&_svg]:mask-b-from-0% relative p-8 [&_svg]:size-7 [&_svg]:text-muted-foreground"
46
+ className="group relative p-8 [&_svg]:size-7 [&_svg]:text-muted-foreground"
47
47
  key={feature.title}
48
48
  >
49
49
  {feature.icon}
@@ -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
- "pointer-events-none absolute z-1 size-5 shrink-0 stroke-1 stroke-muted-foreground",
6
- {
7
- variants: {
8
- position: {
9
- "top-left":
10
- "top-0 left-0 -translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
11
- "top-right":
12
- "top-0 right-0 translate-x-[calc(50%+0.5px)] -translate-y-[calc(50%+0.5px)]",
13
- "bottom-right":
14
- "right-0 bottom-0 translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
15
- "bottom-left":
16
- "bottom-0 left-0 -translate-x-[calc(50%+0.5px)] translate-y-[calc(50%+0.5px)]",
17
- },
18
- },
19
- defaultVariants: {
20
- position: "top-left",
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
- VariantProps<typeof DecorIconVariants>;
27
+ VariantProps<typeof DecorIconVariants> & {
28
+ variant?: "bracket" | "dot" | "diagonal";
29
+ };
27
30
 
28
- export function DecorIcon({ position, className, ...props }: DecorIconProps) {
29
- return (
30
- <svg
31
- aria-hidden="true"
32
- className={cn(DecorIconVariants({ position, className }))}
33
- fill="none"
34
- stroke="currentColor"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- viewBox="0 0 24 24"
38
- xmlns="http://www.w3.org/2000/svg"
39
- {...props}
40
- >
41
- <path d="M5 12h14" />
42
- <path d="M12 5v14" />
43
- </svg>
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
  }
@@ -47,8 +47,6 @@ function FeatureCard({
47
47
  <div
48
48
  className={cn(
49
49
  "relative flex flex-col justify-between gap-6 bg-background px-6 pt-8 pb-6 shadow-xs",
50
- // Gradient inspired by testimonials
51
- "dark:bg-[radial-gradient(50%_80%_at_25%_0%,--theme(--color-foreground/.1),transparent)]",
52
50
  className
53
51
  )}
54
52
  {...props}
@@ -51,7 +51,7 @@ export function FeatureCard({
51
51
  className={cn("relative overflow-hidden bg-background p-6", className)}
52
52
  {...props}
53
53
  >
54
- <div className="mask-[radial-gradient(farthest-side_at_top,white,transparent)] pointer-events-none absolute top-0 left-1/2 -mt-2 -ml-20 size-full">
54
+ <div className=" pointer-events-none absolute top-0 left-1/2 -mt-2 -ml-20 size-full">
55
55
  <GridPattern
56
56
  className="absolute inset-0 size-full stroke-foreground/20"
57
57
  height={40}
@@ -84,7 +84,7 @@ function SetupVisual() {
84
84
  return (
85
85
  <>
86
86
  <div className="relative mx-auto flex size-32 items-center justify-center rounded-full border-4 border-dashed bg-background shadow-xs outline outline-border outline-offset-4">
87
- <div className="absolute inset-0 z-10 scale-120 bg-radial from-foreground/20 via-foreground/5 to-transparent blur-xl" />
87
+ <div className="absolute inset-0 z-10 scale-120 bg-foreground/5 blur-xl" />
88
88
  <CustomTimerIcon className="size-14 fill-primary/90" />
89
89
  </div>
90
90
 
@@ -103,7 +103,7 @@ function UserBasedSecurity() {
103
103
  <>
104
104
  <div className="relative mx-auto flex size-32 items-center justify-center rounded-full border bg-background shadow-xs outline outline-border outline-offset-4">
105
105
  <CustomLockIcon className="size-24" />
106
- <div className="absolute inset-0 scale-120 bg-radial from-foreground/15 via-foreground/5 to-transparent blur-xl" />
106
+ <div className="absolute inset-0 scale-120 bg-foreground/5 blur-xl" />
107
107
  </div>
108
108
 
109
109
  <div className="relative mt-8 space-y-1.5 text-center">
@@ -157,7 +157,7 @@ function DashboardVisual() {
157
157
  </div>
158
158
  </div>
159
159
  {/* Dashboard Screen */}
160
- <div className="mask-b-from-90% mask-r-from-90% relative aspect-video sm:aspect-auto">
160
+ <div className=" relative aspect-video sm:aspect-auto">
161
161
  <div className="absolute -right-1 -bottom-1 aspect-video max-h-50 rounded-tl-md border bg-card p-1 sm:max-h-42 md:aspect-square md:max-h-50 lg:aspect-16/12">
162
162
  <div className="aspect-video h-full overflow-hidden rounded-tl-sm border *:pointer-events-none *:size-full *:shrink-0 *:select-none">
163
163
  <img
@@ -269,7 +269,7 @@ function ReportsChartsSvg(props: React.ComponentProps<"svg">) {
269
269
  <path
270
270
  clipRule="evenodd"
271
271
  d="M3 123C3 123 14.3298 94.153 35.1282 88.0957C55.9266 82.0384 65.9333 80.5508 65.9333 80.5508C65.9333 80.5508 80.699 80.5508 92.1777 80.5508C103.656 80.5508 100.887 63.5348 109.06 63.5348C117.233 63.5348 117.217 91.9728 124.78 91.9728C132.343 91.9728 142.264 78.03 153.831 80.5508C165.398 83.0716 186.825 91.9728 193.761 91.9728C200.697 91.9728 206.296 63.5348 214.07 63.5348C221.844 63.5348 238.653 93.7771 244.234 91.9728C249.814 90.1684 258.8 60 266.19 60C272.075 60 284.1 88.057 286.678 88.0957C294.762 88.2171 300.192 72.9284 305.423 72.9284C312.323 72.9284 323.377 65.2437 335.553 63.5348C347.729 61.8259 348.218 82.07 363.639 80.5508C367.875 80.1335 372.949 82.2017 376.437 87.1008C379.446 91.3274 381.054 97.4325 382.521 104.647C383.479 109.364 382.521 123 382.521 123"
272
- fill="url(#paint0_linear_0_106)"
272
+ className="fill-primary/10"
273
273
  fillRule="evenodd"
274
274
  />
275
275
  <path
@@ -279,23 +279,7 @@ function ReportsChartsSvg(props: React.ComponentProps<"svg">) {
279
279
  strokeWidth="1"
280
280
  />
281
281
  <defs>
282
- <linearGradient
283
- gradientUnits="userSpaceOnUse"
284
- id="paint0_linear_0_106"
285
- x1="3"
286
- x2="3"
287
- y1="60"
288
- y2="123"
289
- >
290
- <stop className="text-primary/20" stopColor="currentColor" />
291
- <stop
292
- className="text-background"
293
- offset="1"
294
- stopColor="currentColor"
295
- stopOpacity="0.103775"
296
- />
297
- </linearGradient>
298
- <clipPath id="clip0_0_106">
282
+ <clipPath id="clip0_0_106">
299
283
  <rect
300
284
  fill="white"
301
285
  height="30"