|
1 | 1 | "use client" |
| 2 | +import Link from "next/link" |
2 | 3 | import Image from "next/image" |
3 | 4 | import arrow from "@/assets/arrow.svg" |
4 | 5 | import type { SeparatorProps } from "@/lib/@types/props" |
5 | 6 |
|
6 | | -export const Separator = ({ rotate = false, children }: SeparatorProps) => { |
| 7 | +export const Separator = ({ rotate = false, className, children, redirectTo }: SeparatorProps) => { |
| 8 | + const name = encodeURIComponent( |
| 9 | + String(redirectTo ?? children) |
| 10 | + .toLowerCase() |
| 11 | + .replace(/[^a-z0-9]+/g, "-") |
| 12 | + .replace(/^-+|-+$/g, "") |
| 13 | + ) |
| 14 | + |
7 | 15 | return ( |
8 | | - <div className="h-16 flex items-center text-primary border-y border-solid border-border separator"> |
9 | | - <figure className="group w-10 h-full flex items-center justify-center relative overflow-hidden img:transition-transform img:ease-linear img:duration-300 hover:cursor-pointer base:w-16"> |
10 | | - <Image |
11 | | - className={`${rotate ? "-rotate-127 group-hover:-translate-y-14 group-hover:translate-x-14" : "group-hover:translate-y-18"}`} |
12 | | - src={arrow} |
13 | | - alt="Arrow Icon" |
14 | | - priority |
15 | | - /> |
16 | | - <Image |
17 | | - className={`absolute ${rotate ? "-rotate-127 translate-y-14 -translate-x-14 group-hover:translate-0" : "-translate-y-14 group-hover:translate-0"}`} |
18 | | - src={arrow} |
19 | | - alt="Arrow Icon" |
20 | | - priority |
21 | | - /> |
22 | | - </figure> |
23 | | - <p className="flex-100 h-full px-4 flex items-center border-x border-border sm:px-6 md:px-8 base:px-10">{children}</p> |
| 16 | + <div className="h-16 flex items-center text-primary border-y border-solid border-border separator" id={name}> |
| 17 | + <Link className="h-full" href={`#${name}`}> |
| 18 | + <figure className="group w-10 h-full flex items-center justify-center relative overflow-hidden img:transition-transform img:ease-linear img:duration-300 hover:cursor-pointer base:w-16"> |
| 19 | + <Image |
| 20 | + className={`${rotate ? "-rotate-127 group-hover:-translate-y-14 group-hover:translate-x-14" : "group-hover:translate-y-18"}`} |
| 21 | + src={arrow} |
| 22 | + alt="Arrow Icon" |
| 23 | + priority |
| 24 | + /> |
| 25 | + <Image |
| 26 | + className={`absolute ${rotate ? "-rotate-127 translate-y-14 -translate-x-14 group-hover:translate-0" : "-translate-y-14 group-hover:translate-0"}`} |
| 27 | + src={arrow} |
| 28 | + alt="Arrow Icon" |
| 29 | + priority |
| 30 | + /> |
| 31 | + </figure> |
| 32 | + </Link> |
| 33 | + <p |
| 34 | + className={`flex-100 h-full px-4 flex items-center border-x border-border sm:px-6 md:px-8 base:px-10 ${className}`} |
| 35 | + > |
| 36 | + {children} |
| 37 | + </p> |
24 | 38 | <span className="w-10 grid place-content-center base:w-16 index" /> |
25 | 39 | </div> |
26 | 40 | ) |
|
0 commit comments