From 6072f20266d2e032d6d41e05b4ad83a51e5c132a Mon Sep 17 00:00:00 2001 From: Jeton Korenica Date: Mon, 13 Jul 2026 17:51:20 +0200 Subject: [PATCH] feat: add Dropdown Menu component Adds the Dropdown Menu (Reka UI DropdownMenu + COSS styling), wiring up the previously-placeholder 'Dropdown and Popover' nav entry. - ui/DropdownMenu/*: DropdownMenu, Trigger, Content (portal + COSS surface with inset highlight), Item, Label, Separator, Group, Shortcut - 2 demos: labelled menu with shortcuts, and an icon menu with grouped items - Showcase view + route; Home nav 'Dropdown and Popover' (#) -> 'Dropdown Menu' Verified: type-check, lint, build, and visual check (menu opens, items + shortcuts render on the COSS surface). --- src/components/dropdowns/Dropdown01.vue | 37 ++++++++++++++++ src/components/dropdowns/Dropdown02.vue | 43 +++++++++++++++++++ .../ui/DropdownMenu/DropdownMenu.vue | 15 +++++++ .../ui/DropdownMenu/DropdownMenuContent.vue | 35 +++++++++++++++ .../ui/DropdownMenu/DropdownMenuGroup.vue | 11 +++++ .../ui/DropdownMenu/DropdownMenuItem.vue | 25 +++++++++++ .../ui/DropdownMenu/DropdownMenuLabel.vue | 19 ++++++++ .../ui/DropdownMenu/DropdownMenuSeparator.vue | 17 ++++++++ .../ui/DropdownMenu/DropdownMenuShortcut.vue | 11 +++++ .../ui/DropdownMenu/DropdownMenuTrigger.vue | 11 +++++ src/components/ui/DropdownMenu/index.ts | 8 ++++ src/router/index.ts | 6 +++ src/views/Dropdowns.vue | 39 +++++++++++++++++ src/views/Home.vue | 2 +- 14 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 src/components/dropdowns/Dropdown01.vue create mode 100644 src/components/dropdowns/Dropdown02.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenu.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuContent.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuGroup.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuItem.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuLabel.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuSeparator.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuShortcut.vue create mode 100644 src/components/ui/DropdownMenu/DropdownMenuTrigger.vue create mode 100644 src/components/ui/DropdownMenu/index.ts create mode 100644 src/views/Dropdowns.vue diff --git a/src/components/dropdowns/Dropdown01.vue b/src/components/dropdowns/Dropdown01.vue new file mode 100644 index 0000000..b37ca31 --- /dev/null +++ b/src/components/dropdowns/Dropdown01.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/dropdowns/Dropdown02.vue b/src/components/dropdowns/Dropdown02.vue new file mode 100644 index 0000000..1a8b765 --- /dev/null +++ b/src/components/dropdowns/Dropdown02.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenu.vue b/src/components/ui/DropdownMenu/DropdownMenu.vue new file mode 100644 index 0000000..5dfe325 --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenu.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuContent.vue b/src/components/ui/DropdownMenu/DropdownMenuContent.vue new file mode 100644 index 0000000..bfee2c3 --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuContent.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuGroup.vue b/src/components/ui/DropdownMenu/DropdownMenuGroup.vue new file mode 100644 index 0000000..4b69514 --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuGroup.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuItem.vue b/src/components/ui/DropdownMenu/DropdownMenuItem.vue new file mode 100644 index 0000000..4440c1a --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuItem.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuLabel.vue b/src/components/ui/DropdownMenu/DropdownMenuLabel.vue new file mode 100644 index 0000000..4404fbb --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuLabel.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuSeparator.vue b/src/components/ui/DropdownMenu/DropdownMenuSeparator.vue new file mode 100644 index 0000000..434fb15 --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuSeparator.vue @@ -0,0 +1,17 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuShortcut.vue b/src/components/ui/DropdownMenu/DropdownMenuShortcut.vue new file mode 100644 index 0000000..a210caa --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuShortcut.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/components/ui/DropdownMenu/DropdownMenuTrigger.vue b/src/components/ui/DropdownMenu/DropdownMenuTrigger.vue new file mode 100644 index 0000000..4c8a30d --- /dev/null +++ b/src/components/ui/DropdownMenu/DropdownMenuTrigger.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/components/ui/DropdownMenu/index.ts b/src/components/ui/DropdownMenu/index.ts new file mode 100644 index 0000000..367aa48 --- /dev/null +++ b/src/components/ui/DropdownMenu/index.ts @@ -0,0 +1,8 @@ +export { default as DropdownMenu } from './DropdownMenu.vue' +export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue' +export { default as DropdownMenuContent } from './DropdownMenuContent.vue' +export { default as DropdownMenuItem } from './DropdownMenuItem.vue' +export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue' +export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue' +export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue' +export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue' diff --git a/src/router/index.ts b/src/router/index.ts index 3242e25..80d3d66 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -98,6 +98,12 @@ const router = createRouter({ name: 'pagination', component: () => import('@/views/Pagination.vue'), meta: { title: 'coss-ui-vue/pagination' } + }, + { + path: '/dropdowns', + name: 'dropdowns', + component: () => import('@/views/Dropdowns.vue'), + meta: { title: 'coss-ui-vue/dropdowns' } } ] }) diff --git a/src/views/Dropdowns.vue b/src/views/Dropdowns.vue new file mode 100644 index 0000000..63f173e --- /dev/null +++ b/src/views/Dropdowns.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/views/Home.vue b/src/views/Home.vue index b8bad1a..932d8c5 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -80,7 +80,7 @@ const availableComponents = [ { name: 'Breadcrumb', path: '/breadcrumbs' }, { name: 'Progress', path: '/progress' }, { name: 'Pagination', path: '/pagination' }, - { name: 'Dropdown and Popover', path: '#' } + { name: 'Dropdown Menu', path: '/dropdowns' } ] useHead({