From 1226a7948e5004236b532ca0c77eb22b0d1654c5 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Fri, 1 May 2026 14:22:21 +0800 Subject: [PATCH] feat(front): add Command components for command palette functionality including Command, CommandDialog, CommandInput, and related components --- front/components/ui/command/Command.vue | 89 +++++++++++++++++++ front/components/ui/command/CommandDialog.vue | 36 ++++++++ front/components/ui/command/CommandEmpty.vue | 22 +++++ front/components/ui/command/CommandGroup.vue | 46 ++++++++++ front/components/ui/command/CommandInput.vue | 43 +++++++++ front/components/ui/command/CommandItem.vue | 80 +++++++++++++++++ front/components/ui/command/CommandList.vue | 25 ++++++ .../ui/command/CommandSeparator.vue | 17 ++++ .../components/ui/command/CommandShortcut.vue | 14 +++ front/components/ui/command/index.ts | 25 ++++++ front/components/ui/dialog/Dialog.vue | 15 ++++ front/components/ui/dialog/DialogClose.vue | 12 +++ front/components/ui/dialog/DialogContent.vue | 49 ++++++++++ .../ui/dialog/DialogDescription.vue | 19 ++++ front/components/ui/dialog/DialogFooter.vue | 25 ++++++ front/components/ui/dialog/DialogHeader.vue | 14 +++ front/components/ui/dialog/DialogOverlay.vue | 26 ++++++ .../ui/dialog/DialogScrollContent.vue | 53 +++++++++++ front/components/ui/dialog/DialogTitle.vue | 19 ++++ front/components/ui/dialog/DialogTrigger.vue | 12 +++ front/components/ui/dialog/index.ts | 10 +++ front/components/ui/popover/Popover.vue | 15 ++++ front/components/ui/popover/PopoverAnchor.vue | 12 +++ .../components/ui/popover/PopoverContent.vue | 38 ++++++++ .../components/ui/popover/PopoverTrigger.vue | 12 +++ front/components/ui/popover/index.ts | 4 + 26 files changed, 732 insertions(+) create mode 100644 front/components/ui/command/Command.vue create mode 100644 front/components/ui/command/CommandDialog.vue create mode 100644 front/components/ui/command/CommandEmpty.vue create mode 100644 front/components/ui/command/CommandGroup.vue create mode 100644 front/components/ui/command/CommandInput.vue create mode 100644 front/components/ui/command/CommandItem.vue create mode 100644 front/components/ui/command/CommandList.vue create mode 100644 front/components/ui/command/CommandSeparator.vue create mode 100644 front/components/ui/command/CommandShortcut.vue create mode 100644 front/components/ui/command/index.ts create mode 100644 front/components/ui/dialog/Dialog.vue create mode 100644 front/components/ui/dialog/DialogClose.vue create mode 100644 front/components/ui/dialog/DialogContent.vue create mode 100644 front/components/ui/dialog/DialogDescription.vue create mode 100644 front/components/ui/dialog/DialogFooter.vue create mode 100644 front/components/ui/dialog/DialogHeader.vue create mode 100644 front/components/ui/dialog/DialogOverlay.vue create mode 100644 front/components/ui/dialog/DialogScrollContent.vue create mode 100644 front/components/ui/dialog/DialogTitle.vue create mode 100644 front/components/ui/dialog/DialogTrigger.vue create mode 100644 front/components/ui/dialog/index.ts create mode 100644 front/components/ui/popover/Popover.vue create mode 100644 front/components/ui/popover/PopoverAnchor.vue create mode 100644 front/components/ui/popover/PopoverContent.vue create mode 100644 front/components/ui/popover/PopoverTrigger.vue create mode 100644 front/components/ui/popover/index.ts diff --git a/front/components/ui/command/Command.vue b/front/components/ui/command/Command.vue new file mode 100644 index 0000000..4097836 --- /dev/null +++ b/front/components/ui/command/Command.vue @@ -0,0 +1,89 @@ + + + diff --git a/front/components/ui/command/CommandDialog.vue b/front/components/ui/command/CommandDialog.vue new file mode 100644 index 0000000..bf130e6 --- /dev/null +++ b/front/components/ui/command/CommandDialog.vue @@ -0,0 +1,36 @@ + + + diff --git a/front/components/ui/command/CommandEmpty.vue b/front/components/ui/command/CommandEmpty.vue new file mode 100644 index 0000000..3e2a617 --- /dev/null +++ b/front/components/ui/command/CommandEmpty.vue @@ -0,0 +1,22 @@ + + + diff --git a/front/components/ui/command/CommandGroup.vue b/front/components/ui/command/CommandGroup.vue new file mode 100644 index 0000000..699381a --- /dev/null +++ b/front/components/ui/command/CommandGroup.vue @@ -0,0 +1,46 @@ + + + diff --git a/front/components/ui/command/CommandInput.vue b/front/components/ui/command/CommandInput.vue new file mode 100644 index 0000000..0806ba8 --- /dev/null +++ b/front/components/ui/command/CommandInput.vue @@ -0,0 +1,43 @@ + + + diff --git a/front/components/ui/command/CommandItem.vue b/front/components/ui/command/CommandItem.vue new file mode 100644 index 0000000..354274e --- /dev/null +++ b/front/components/ui/command/CommandItem.vue @@ -0,0 +1,80 @@ + + + diff --git a/front/components/ui/command/CommandList.vue b/front/components/ui/command/CommandList.vue new file mode 100644 index 0000000..cfd10c5 --- /dev/null +++ b/front/components/ui/command/CommandList.vue @@ -0,0 +1,25 @@ + + + diff --git a/front/components/ui/command/CommandSeparator.vue b/front/components/ui/command/CommandSeparator.vue new file mode 100644 index 0000000..d39433c --- /dev/null +++ b/front/components/ui/command/CommandSeparator.vue @@ -0,0 +1,17 @@ + + + diff --git a/front/components/ui/command/CommandShortcut.vue b/front/components/ui/command/CommandShortcut.vue new file mode 100644 index 0000000..f5ac344 --- /dev/null +++ b/front/components/ui/command/CommandShortcut.vue @@ -0,0 +1,14 @@ + + + diff --git a/front/components/ui/command/index.ts b/front/components/ui/command/index.ts new file mode 100644 index 0000000..f614577 --- /dev/null +++ b/front/components/ui/command/index.ts @@ -0,0 +1,25 @@ +import type { Ref } from 'vue' +import { createContext } from 'reka-ui' + +export { default as Command } from './Command.vue' +export { default as CommandDialog } from './CommandDialog.vue' +export { default as CommandEmpty } from './CommandEmpty.vue' +export { default as CommandGroup } from './CommandGroup.vue' +export { default as CommandInput } from './CommandInput.vue' +export { default as CommandItem } from './CommandItem.vue' +export { default as CommandList } from './CommandList.vue' +export { default as CommandSeparator } from './CommandSeparator.vue' +export { default as CommandShortcut } from './CommandShortcut.vue' + +export const [useCommand, provideCommandContext] = createContext<{ + allItems: Ref> + allGroups: Ref>> + filterState: { + search: string + filtered: { count: number; items: Map; groups: Set } + } +}>('Command') + +export const [useCommandGroup, provideCommandGroupContext] = createContext<{ + id?: string +}>('CommandGroup') diff --git a/front/components/ui/dialog/Dialog.vue b/front/components/ui/dialog/Dialog.vue new file mode 100644 index 0000000..3601ab3 --- /dev/null +++ b/front/components/ui/dialog/Dialog.vue @@ -0,0 +1,15 @@ + + + diff --git a/front/components/ui/dialog/DialogClose.vue b/front/components/ui/dialog/DialogClose.vue new file mode 100644 index 0000000..ad206f1 --- /dev/null +++ b/front/components/ui/dialog/DialogClose.vue @@ -0,0 +1,12 @@ + + + diff --git a/front/components/ui/dialog/DialogContent.vue b/front/components/ui/dialog/DialogContent.vue new file mode 100644 index 0000000..23b5fa8 --- /dev/null +++ b/front/components/ui/dialog/DialogContent.vue @@ -0,0 +1,49 @@ + + + diff --git a/front/components/ui/dialog/DialogDescription.vue b/front/components/ui/dialog/DialogDescription.vue new file mode 100644 index 0000000..4469bbe --- /dev/null +++ b/front/components/ui/dialog/DialogDescription.vue @@ -0,0 +1,19 @@ + + + diff --git a/front/components/ui/dialog/DialogFooter.vue b/front/components/ui/dialog/DialogFooter.vue new file mode 100644 index 0000000..92a7115 --- /dev/null +++ b/front/components/ui/dialog/DialogFooter.vue @@ -0,0 +1,25 @@ + + + diff --git a/front/components/ui/dialog/DialogHeader.vue b/front/components/ui/dialog/DialogHeader.vue new file mode 100644 index 0000000..abb5add --- /dev/null +++ b/front/components/ui/dialog/DialogHeader.vue @@ -0,0 +1,14 @@ + + + diff --git a/front/components/ui/dialog/DialogOverlay.vue b/front/components/ui/dialog/DialogOverlay.vue new file mode 100644 index 0000000..30d8f1f --- /dev/null +++ b/front/components/ui/dialog/DialogOverlay.vue @@ -0,0 +1,26 @@ + + + diff --git a/front/components/ui/dialog/DialogScrollContent.vue b/front/components/ui/dialog/DialogScrollContent.vue new file mode 100644 index 0000000..3af6a73 --- /dev/null +++ b/front/components/ui/dialog/DialogScrollContent.vue @@ -0,0 +1,53 @@ + + + diff --git a/front/components/ui/dialog/DialogTitle.vue b/front/components/ui/dialog/DialogTitle.vue new file mode 100644 index 0000000..2f7bb0a --- /dev/null +++ b/front/components/ui/dialog/DialogTitle.vue @@ -0,0 +1,19 @@ + + + diff --git a/front/components/ui/dialog/DialogTrigger.vue b/front/components/ui/dialog/DialogTrigger.vue new file mode 100644 index 0000000..668686a --- /dev/null +++ b/front/components/ui/dialog/DialogTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/front/components/ui/dialog/index.ts b/front/components/ui/dialog/index.ts new file mode 100644 index 0000000..baa7d61 --- /dev/null +++ b/front/components/ui/dialog/index.ts @@ -0,0 +1,10 @@ +export { default as Dialog } from './Dialog.vue' +export { default as DialogClose } from './DialogClose.vue' +export { default as DialogContent } from './DialogContent.vue' +export { default as DialogDescription } from './DialogDescription.vue' +export { default as DialogFooter } from './DialogFooter.vue' +export { default as DialogHeader } from './DialogHeader.vue' +export { default as DialogOverlay } from './DialogOverlay.vue' +export { default as DialogScrollContent } from './DialogScrollContent.vue' +export { default as DialogTitle } from './DialogTitle.vue' +export { default as DialogTrigger } from './DialogTrigger.vue' diff --git a/front/components/ui/popover/Popover.vue b/front/components/ui/popover/Popover.vue new file mode 100644 index 0000000..14c2d78 --- /dev/null +++ b/front/components/ui/popover/Popover.vue @@ -0,0 +1,15 @@ + + + diff --git a/front/components/ui/popover/PopoverAnchor.vue b/front/components/ui/popover/PopoverAnchor.vue new file mode 100644 index 0000000..1da5879 --- /dev/null +++ b/front/components/ui/popover/PopoverAnchor.vue @@ -0,0 +1,12 @@ + + + diff --git a/front/components/ui/popover/PopoverContent.vue b/front/components/ui/popover/PopoverContent.vue new file mode 100644 index 0000000..f749531 --- /dev/null +++ b/front/components/ui/popover/PopoverContent.vue @@ -0,0 +1,38 @@ + + + diff --git a/front/components/ui/popover/PopoverTrigger.vue b/front/components/ui/popover/PopoverTrigger.vue new file mode 100644 index 0000000..5f78604 --- /dev/null +++ b/front/components/ui/popover/PopoverTrigger.vue @@ -0,0 +1,12 @@ + + + diff --git a/front/components/ui/popover/index.ts b/front/components/ui/popover/index.ts new file mode 100644 index 0000000..d724e78 --- /dev/null +++ b/front/components/ui/popover/index.ts @@ -0,0 +1,4 @@ +export { default as Popover } from './Popover.vue' +export { default as PopoverAnchor } from './PopoverAnchor.vue' +export { default as PopoverContent } from './PopoverContent.vue' +export { default as PopoverTrigger } from './PopoverTrigger.vue'