aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Breadcrumbs.astro
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/Breadcrumbs.astro')
-rw-r--r--src/components/Breadcrumbs.astro61
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>