diff options
Diffstat (limited to 'src/components/Breadcrumbs.astro')
| -rw-r--r-- | src/components/Breadcrumbs.astro | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/components/Breadcrumbs.astro b/src/components/Breadcrumbs.astro new file mode 100644 index 0000000..7f5181f --- /dev/null +++ b/src/components/Breadcrumbs.astro @@ -0,0 +1,61 @@ +--- +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from '@/components/ui/breadcrumb' +import { Icon } from 'astro-icon/components' + +export interface BreadcrumbItem { + href?: string + label: string + icon?: string +} + +interface Props { + items: BreadcrumbItem[] +} + +const { items } = Astro.props +--- + +<Breadcrumb> + <BreadcrumbList> + <BreadcrumbItem> + <BreadcrumbLink href="/"> + <Icon name="lucide:home" class="size-4 shrink-0" /> + </BreadcrumbLink> + </BreadcrumbItem> + { + items.map((item, index) => ( + <> + <BreadcrumbSeparator /> + <BreadcrumbItem> + {index === items.length - 1 ? ( + <BreadcrumbPage> + <span class="flex items-center gap-x-2"> + {item.icon && ( + <Icon name={item.icon} class="size-4 shrink-0" /> + )} + <span>{item.label}</span> + </span> + </BreadcrumbPage> + ) : ( + <BreadcrumbLink href={item.href}> + <span class="flex items-center gap-x-2"> + {item.icon && ( + <Icon name={item.icon} class="size-4 shrink-0" /> + )} + <span>{item.label}</span> + </span> + </BreadcrumbLink> + )} + </BreadcrumbItem> + </> + )) + } + </BreadcrumbList> +</Breadcrumb> |
