From c281b9a673fac7aceac5f80d64f0c320836fc0aa Mon Sep 17 00:00:00 2001
From: 409 <409dev@protonmail.com>
Date: Fri, 11 Jul 2025 05:20:53 +0200
Subject: [PATCH] route breadcrumbs, improve sidebar, basic folder layout
---
bun.lock | 3 +
components/AppSidebar.vue | 79 ++++++++++---
components/DirectoryEntry.vue | 24 ++++
components/DirectoryList.vue | 35 ++++++
components/SidebarUser.vue | 111 ++++++++++++++++++
components/ui/avatar/Avatar.vue | 18 +++
components/ui/avatar/AvatarFallback.vue | 20 ++++
components/ui/avatar/AvatarImage.vue | 16 +++
components/ui/avatar/index.ts | 3 +
components/ui/collapsible/Collapsible.vue | 19 +++
.../ui/collapsible/CollapsibleContent.vue | 14 +++
.../ui/collapsible/CollapsibleTrigger.vue | 14 +++
components/ui/collapsible/index.ts | 3 +
components/ui/dropdown-menu/DropdownMenu.vue | 17 +++
.../DropdownMenuCheckboxItem.vue | 38 ++++++
.../ui/dropdown-menu/DropdownMenuContent.vue | 36 ++++++
.../ui/dropdown-menu/DropdownMenuGroup.vue | 14 +++
.../ui/dropdown-menu/DropdownMenuItem.vue | 30 +++++
.../ui/dropdown-menu/DropdownMenuLabel.vue | 22 ++++
.../dropdown-menu/DropdownMenuRadioGroup.vue | 22 ++++
.../dropdown-menu/DropdownMenuRadioItem.vue | 39 ++++++
.../dropdown-menu/DropdownMenuSeparator.vue | 23 ++++
.../ui/dropdown-menu/DropdownMenuShortcut.vue | 17 +++
.../ui/dropdown-menu/DropdownMenuSub.vue | 19 +++
.../dropdown-menu/DropdownMenuSubContent.vue | 28 +++++
.../dropdown-menu/DropdownMenuSubTrigger.vue | 30 +++++
.../ui/dropdown-menu/DropdownMenuTrigger.vue | 16 +++
components/ui/dropdown-menu/index.ts | 16 +++
components/ui/scroll-area/ScrollArea.vue | 33 ++++++
components/ui/scroll-area/ScrollBar.vue | 31 +++++
components/ui/scroll-area/index.ts | 2 +
layouts/default.vue | 37 ++++--
nuxt.config.ts | 2 +
package.json | 1 +
pages/index.vue | 4 +-
pages/warrens/[...path].vue | 3 +
pages/warrens/index.vue | 28 +++++
types/index.ts | 6 +
utils/index.ts | 39 ++++++
39 files changed, 883 insertions(+), 29 deletions(-)
create mode 100644 components/DirectoryEntry.vue
create mode 100644 components/DirectoryList.vue
create mode 100644 components/SidebarUser.vue
create mode 100644 components/ui/avatar/Avatar.vue
create mode 100644 components/ui/avatar/AvatarFallback.vue
create mode 100644 components/ui/avatar/AvatarImage.vue
create mode 100644 components/ui/avatar/index.ts
create mode 100644 components/ui/collapsible/Collapsible.vue
create mode 100644 components/ui/collapsible/CollapsibleContent.vue
create mode 100644 components/ui/collapsible/CollapsibleTrigger.vue
create mode 100644 components/ui/collapsible/index.ts
create mode 100644 components/ui/dropdown-menu/DropdownMenu.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuContent.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuGroup.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuItem.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuLabel.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuRadioItem.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuSeparator.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuShortcut.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuSub.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuSubContent.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
create mode 100644 components/ui/dropdown-menu/DropdownMenuTrigger.vue
create mode 100644 components/ui/dropdown-menu/index.ts
create mode 100644 components/ui/scroll-area/ScrollArea.vue
create mode 100644 components/ui/scroll-area/ScrollBar.vue
create mode 100644 components/ui/scroll-area/index.ts
create mode 100644 pages/warrens/[...path].vue
create mode 100644 pages/warrens/index.vue
create mode 100644 types/index.ts
create mode 100644 utils/index.ts
diff --git a/bun.lock b/bun.lock
index 8ece64c..be4ef90 100644
--- a/bun.lock
+++ b/bun.lock
@@ -25,6 +25,7 @@
"vue-router": "^4.5.1",
},
"devDependencies": {
+ "@iconify-json/lucide": "^1.2.57",
"@nuxtjs/color-mode": "^3.5.2",
"eslint-config-prettier": "^10.1.5",
"prettier": "^3.6.2",
@@ -210,6 +211,8 @@
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
+ "@iconify-json/lucide": ["@iconify-json/lucide@1.2.57", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-I1CIObdPBIL/9v75KKoyHWNhq+qqN6ef8+iJY4AVpHLtnRu0Vbp6K0TKcoYZ70U+EgiL6krEbFdcjK3+fwpfHQ=="],
+
"@iconify/collections": ["@iconify/collections@1.0.566", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-rilPX42tJve3z/HUQdZBrMLH/d8OZlMw+D+nMsxsiC/Miyws/WGq8DtV2w9jGGZBd6HJ+VQ3prIIV7UWhV+2ug=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
diff --git a/components/AppSidebar.vue b/components/AppSidebar.vue
index 415ab7c..6ec416d 100644
--- a/components/AppSidebar.vue
+++ b/components/AppSidebar.vue
@@ -2,22 +2,28 @@
import { Icon } from '#components';
import {
SidebarGroup,
- SidebarGroupLabel,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
} from '@/components/ui/sidebar';
+import {
+ Collapsible,
+ CollapsibleTrigger,
+ CollapsibleContent,
+} from '@/components/ui/collapsible';
-const items = [
+const route = useRoute();
+
+const warrens = [
{
- title: 'Home',
- url: '/',
- icon: h(Icon, { name: 'lucide:home' }),
+ title: 'Thyr',
+ url: '/warrens/Thyr',
+ icon: h(Icon, { name: 'lucide:folder-root' }),
},
{
- title: 'About',
- url: '/about',
- icon: h(Icon, { name: 'lucide:inbox' }),
+ title: 'Serc',
+ url: '/warrens/Serc',
+ icon: h(Icon, { name: 'lucide:folder-root' }),
},
];
@@ -26,18 +32,59 @@ const items = [
- Application
-
-
-
-
- {{ item.title }}
+
+
+
+
+
+ Your Warrens
+
+
+
+
-
-
+
+
+
+
+
+
+
+ {{ warren.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/components/DirectoryEntry.vue b/components/DirectoryEntry.vue
new file mode 100644
index 0000000..7193c9f
--- /dev/null
+++ b/components/DirectoryEntry.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
diff --git a/components/DirectoryList.vue b/components/DirectoryList.vue
new file mode 100644
index 0000000..19aa2d9
--- /dev/null
+++ b/components/DirectoryList.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/SidebarUser.vue b/components/SidebarUser.vue
new file mode 100644
index 0000000..1bde2c8
--- /dev/null
+++ b/components/SidebarUser.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/ui/avatar/Avatar.vue b/components/ui/avatar/Avatar.vue
new file mode 100644
index 0000000..5aa263d
--- /dev/null
+++ b/components/ui/avatar/Avatar.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/components/ui/avatar/AvatarFallback.vue b/components/ui/avatar/AvatarFallback.vue
new file mode 100644
index 0000000..dc20f80
--- /dev/null
+++ b/components/ui/avatar/AvatarFallback.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/components/ui/avatar/AvatarImage.vue b/components/ui/avatar/AvatarImage.vue
new file mode 100644
index 0000000..801392b
--- /dev/null
+++ b/components/ui/avatar/AvatarImage.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/components/ui/avatar/index.ts b/components/ui/avatar/index.ts
new file mode 100644
index 0000000..6a90410
--- /dev/null
+++ b/components/ui/avatar/index.ts
@@ -0,0 +1,3 @@
+export { default as Avatar } from './Avatar.vue'
+export { default as AvatarFallback } from './AvatarFallback.vue'
+export { default as AvatarImage } from './AvatarImage.vue'
diff --git a/components/ui/collapsible/Collapsible.vue b/components/ui/collapsible/Collapsible.vue
new file mode 100644
index 0000000..dcd58e2
--- /dev/null
+++ b/components/ui/collapsible/Collapsible.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/components/ui/collapsible/CollapsibleContent.vue b/components/ui/collapsible/CollapsibleContent.vue
new file mode 100644
index 0000000..4120d2f
--- /dev/null
+++ b/components/ui/collapsible/CollapsibleContent.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/components/ui/collapsible/CollapsibleTrigger.vue b/components/ui/collapsible/CollapsibleTrigger.vue
new file mode 100644
index 0000000..be603a4
--- /dev/null
+++ b/components/ui/collapsible/CollapsibleTrigger.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/components/ui/collapsible/index.ts b/components/ui/collapsible/index.ts
new file mode 100644
index 0000000..abab956
--- /dev/null
+++ b/components/ui/collapsible/index.ts
@@ -0,0 +1,3 @@
+export { default as Collapsible } from './Collapsible.vue'
+export { default as CollapsibleContent } from './CollapsibleContent.vue'
+export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue'
diff --git a/components/ui/dropdown-menu/DropdownMenu.vue b/components/ui/dropdown-menu/DropdownMenu.vue
new file mode 100644
index 0000000..e386052
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenu.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
new file mode 100644
index 0000000..f63c967
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuContent.vue b/components/ui/dropdown-menu/DropdownMenuContent.vue
new file mode 100644
index 0000000..0aac75f
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuContent.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuGroup.vue b/components/ui/dropdown-menu/DropdownMenuGroup.vue
new file mode 100644
index 0000000..c7eb308
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuGroup.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuItem.vue b/components/ui/dropdown-menu/DropdownMenuItem.vue
new file mode 100644
index 0000000..f0a9495
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuItem.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuLabel.vue b/components/ui/dropdown-menu/DropdownMenuLabel.vue
new file mode 100644
index 0000000..61015cc
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuLabel.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
new file mode 100644
index 0000000..d205d0b
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
new file mode 100644
index 0000000..3d6d908
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/components/ui/dropdown-menu/DropdownMenuSeparator.vue
new file mode 100644
index 0000000..5d3fde6
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuSeparator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/components/ui/dropdown-menu/DropdownMenuShortcut.vue
new file mode 100644
index 0000000..1bcbb88
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuShortcut.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuSub.vue b/components/ui/dropdown-menu/DropdownMenuSub.vue
new file mode 100644
index 0000000..7329bca
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuSub.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/components/ui/dropdown-menu/DropdownMenuSubContent.vue
new file mode 100644
index 0000000..bb70eef
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuSubContent.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
new file mode 100644
index 0000000..c641d0a
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/components/ui/dropdown-menu/DropdownMenuTrigger.vue
new file mode 100644
index 0000000..7bc7339
--- /dev/null
+++ b/components/ui/dropdown-menu/DropdownMenuTrigger.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/components/ui/dropdown-menu/index.ts b/components/ui/dropdown-menu/index.ts
new file mode 100644
index 0000000..f488d39
--- /dev/null
+++ b/components/ui/dropdown-menu/index.ts
@@ -0,0 +1,16 @@
+export { default as DropdownMenu } from './DropdownMenu.vue'
+
+export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue'
+export { default as DropdownMenuContent } from './DropdownMenuContent.vue'
+export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue'
+export { default as DropdownMenuItem } from './DropdownMenuItem.vue'
+export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue'
+export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue'
+export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue'
+export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue'
+export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue'
+export { default as DropdownMenuSub } from './DropdownMenuSub.vue'
+export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue'
+export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue'
+export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue'
+export { DropdownMenuPortal } from 'reka-ui'
diff --git a/components/ui/scroll-area/ScrollArea.vue b/components/ui/scroll-area/ScrollArea.vue
new file mode 100644
index 0000000..a813e13
--- /dev/null
+++ b/components/ui/scroll-area/ScrollArea.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/ui/scroll-area/ScrollBar.vue b/components/ui/scroll-area/ScrollBar.vue
new file mode 100644
index 0000000..7f93c74
--- /dev/null
+++ b/components/ui/scroll-area/ScrollBar.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/components/ui/scroll-area/index.ts b/components/ui/scroll-area/index.ts
new file mode 100644
index 0000000..2bd4fae
--- /dev/null
+++ b/components/ui/scroll-area/index.ts
@@ -0,0 +1,2 @@
+export { default as ScrollArea } from './ScrollArea.vue'
+export { default as ScrollBar } from './ScrollBar.vue'
diff --git a/layouts/default.vue b/layouts/default.vue
index db04e7e..8e3fcdc 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -8,12 +8,15 @@ import {
BreadcrumbPage,
BreadcrumbSeparator,
} from '@/components/ui/breadcrumb';
+const route = useRoute();
+
+const breadcrumbs = computed(() => getBreadcrumbs(route.path));
-
+