import MenuIconPicker from '~/components/Navigation/NavigationMenu/MenuIconPicker'
import Link from 'next/link'
import { type ButtonHTMLAttributes, type ReactNode } from 'react'
import { cn } from 'ui'
const sizeStyles = {
sm: {
tile: 'h-10 w-10',
image: 'w-5',
},
lg: {
tile: 'h-10 w-10 sm:h-16 sm:w-16',
image: 'w-5 sm:w-8',
},
} as const
export type IconLinkSize = keyof typeof sizeStyles
export type IconLinkItem = {
title: string
href: string
icon: ReactNode
className?: string
}
const iconLinkClassName =
'group relative -m-3 flex items-center gap-3 rounded-xl p-3 no-underline transition-colors hover:bg-accent focus-ring focus-visible:bg-accent'
function IconLinkContent({
title,
icon,
size = 'sm',
}: {
title: string
icon: ReactNode
size?: IconLinkSize
}) {
return (
<>
{icon}
{title}
>
)
}
export function IconLink({
href,
title,
icon,
size = 'sm',
className,
}: {
href: string
title: string
icon: ReactNode
size?: IconLinkSize
className?: string
}) {
return (
)
}
export function IconLinkButton({
title,
icon,
size = 'sm',
className,
disabled,
tabIndex,
...props
}: {
title: string
icon: ReactNode
size?: IconLinkSize
className?: string
} & ButtonHTMLAttributes) {
return (
)
}
export function IconLinkList({
items,
labelledBy,
label,
className,
itemClassName = 'col-span-6 md:col-span-4',
size = 'sm',
}: {
items: IconLinkItem[]
/** Prefer when a visible heading is the list’s name. */
labelledBy?: string
/** Prefer when the nearby heading is section/setup copy, not a list title. */
label?: string
className?: string
itemClassName?: string
size?: IconLinkSize
}) {
return (
{items.map((item) => (
-
))}
)
}
export function IconLinkImage({
path,
hasLightIcon,
size = 'sm',
}: {
path: string
hasLightIcon?: boolean
size?: IconLinkSize
}) {
const imgClassName = sizeStyles[size].image
return (
<>
{hasLightIcon ? (
) : null}
>
)
}
export function IconLinkMenuIcon({ icon }: { icon: string }) {
return
}