@edgedev/create-edge-app 1.0.40 → 1.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.dev +1 -0
- package/.vscode/settings.json +1 -1
- package/app.vue +72 -21
- package/assets/css/tailwind.css +78 -0
- package/bin/cli.js +1 -1
- package/components/subToolbar.vue +4 -13
- package/components/ui/accordion/Accordion.vue +19 -0
- package/components/ui/accordion/AccordionContent.vue +24 -0
- package/components/ui/accordion/AccordionItem.vue +24 -0
- package/components/ui/accordion/AccordionTrigger.vue +39 -0
- package/components/ui/accordion/index.js +4 -0
- package/components/ui/accordion/index.ts +4 -0
- package/components/ui/alert/Alert.vue +16 -0
- package/components/ui/alert/AlertDescription.vue +14 -0
- package/components/ui/alert/AlertTitle.vue +14 -0
- package/components/ui/alert/index.js +21 -0
- package/components/ui/alert/index.ts +23 -0
- package/components/ui/alert-dialog/AlertDialog.vue +14 -0
- package/components/ui/alert-dialog/AlertDialogAction.vue +20 -0
- package/components/ui/alert-dialog/AlertDialogCancel.vue +20 -0
- package/components/ui/alert-dialog/AlertDialogContent.vue +42 -0
- package/components/ui/alert-dialog/AlertDialogDescription.vue +25 -0
- package/components/ui/alert-dialog/AlertDialogFooter.vue +21 -0
- package/components/ui/alert-dialog/AlertDialogHeader.vue +16 -0
- package/components/ui/alert-dialog/AlertDialogTitle.vue +22 -0
- package/components/ui/alert-dialog/AlertDialogTrigger.vue +11 -0
- package/components/ui/alert-dialog/index.ts +9 -0
- package/components/ui/aspect-ratio/AspectRatio.vue +11 -0
- package/components/ui/aspect-ratio/index.ts +1 -0
- package/components/ui/auto-form/AutoForm.vue +105 -0
- package/components/ui/auto-form/AutoFormField.vue +45 -0
- package/components/ui/auto-form/AutoFormFieldArray.vue +110 -0
- package/components/ui/auto-form/AutoFormFieldBoolean.vue +41 -0
- package/components/ui/auto-form/AutoFormFieldDate.vue +57 -0
- package/components/ui/auto-form/AutoFormFieldEnum.vue +49 -0
- package/components/ui/auto-form/AutoFormFieldFile.vue +74 -0
- package/components/ui/auto-form/AutoFormFieldInput.vue +36 -0
- package/components/ui/auto-form/AutoFormFieldNumber.vue +32 -0
- package/components/ui/auto-form/AutoFormFieldObject.vue +78 -0
- package/components/ui/auto-form/AutoFormLabel.vue +14 -0
- package/components/ui/auto-form/constant.ts +39 -0
- package/components/ui/auto-form/dependencies.ts +92 -0
- package/components/ui/auto-form/index.ts +15 -0
- package/components/ui/auto-form/interface.ts +81 -0
- package/components/ui/auto-form/utils.ts +171 -0
- package/components/ui/avatar/Avatar.vue +21 -0
- package/components/ui/avatar/AvatarFallback.vue +11 -0
- package/components/ui/avatar/AvatarImage.vue +9 -0
- package/components/ui/avatar/index.ts +24 -0
- package/components/ui/badge/Badge.vue +16 -0
- package/components/ui/badge/index.ts +25 -0
- package/components/ui/breadcrumb/Breadcrumb.vue +13 -0
- package/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
- package/components/ui/breadcrumb/BreadcrumbItem.vue +16 -0
- package/components/ui/breadcrumb/BreadcrumbLink.vue +19 -0
- package/components/ui/breadcrumb/BreadcrumbList.vue +16 -0
- package/components/ui/breadcrumb/BreadcrumbPage.vue +19 -0
- package/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
- package/components/ui/breadcrumb/index.ts +7 -0
- package/components/ui/button/Button.vue +26 -0
- package/components/ui/button/index.js +33 -0
- package/components/ui/button/index.ts +35 -0
- package/components/ui/calendar/Calendar.vue +60 -0
- package/components/ui/calendar/CalendarCell.vue +24 -0
- package/components/ui/calendar/CalendarCellTrigger.vue +38 -0
- package/components/ui/calendar/CalendarGrid.vue +24 -0
- package/components/ui/calendar/CalendarGridBody.vue +11 -0
- package/components/ui/calendar/CalendarGridHead.vue +11 -0
- package/components/ui/calendar/CalendarGridRow.vue +21 -0
- package/components/ui/calendar/CalendarHeadCell.vue +21 -0
- package/components/ui/calendar/CalendarHeader.vue +21 -0
- package/components/ui/calendar/CalendarHeading.vue +27 -0
- package/components/ui/calendar/CalendarNextButton.vue +32 -0
- package/components/ui/calendar/CalendarPrevButton.vue +32 -0
- package/components/ui/calendar/index.ts +12 -0
- package/components/ui/card/Card.vue +21 -0
- package/components/ui/card/CardContent.vue +14 -0
- package/components/ui/card/CardDescription.vue +14 -0
- package/components/ui/card/CardFooter.vue +14 -0
- package/components/ui/card/CardHeader.vue +14 -0
- package/components/ui/card/CardTitle.vue +18 -0
- package/components/ui/card/index.js +6 -0
- package/components/ui/card/index.ts +6 -0
- package/components/ui/carousel/Carousel.vue +44 -0
- package/components/ui/carousel/CarouselContent.vue +29 -0
- package/components/ui/carousel/CarouselItem.vue +23 -0
- package/components/ui/carousel/CarouselNext.vue +30 -0
- package/components/ui/carousel/CarouselPrevious.vue +30 -0
- package/components/ui/carousel/index.ts +10 -0
- package/components/ui/carousel/interface.ts +20 -0
- package/components/ui/carousel/useCarousel.ts +59 -0
- package/components/ui/chart/ChartCrosshair.vue +44 -0
- package/components/ui/chart/ChartLegend.vue +50 -0
- package/components/ui/chart/ChartSingleTooltip.vue +63 -0
- package/components/ui/chart/ChartTooltip.vue +40 -0
- package/components/ui/chart/index.ts +18 -0
- package/components/ui/chart/interface.ts +64 -0
- package/components/ui/chart-area/AreaChart.vue +136 -0
- package/components/ui/chart-area/index.ts +66 -0
- package/components/ui/chart-bar/BarChart.vue +115 -0
- package/components/ui/chart-bar/index.ts +66 -0
- package/components/ui/chart-donut/DonutChart.vue +100 -0
- package/components/ui/chart-donut/index.ts +39 -0
- package/components/ui/chart-line/LineChart.vue +105 -0
- package/components/ui/chart-line/index.ts +66 -0
- package/components/ui/checkbox/Checkbox.vue +33 -0
- package/components/ui/checkbox/index.ts +1 -0
- package/components/ui/collapsible/Collapsible.vue +15 -0
- package/components/ui/collapsible/CollapsibleContent.vue +11 -0
- package/components/ui/collapsible/CollapsibleTrigger.vue +11 -0
- package/components/ui/collapsible/index.ts +3 -0
- package/components/ui/command/Command.vue +30 -0
- package/components/ui/command/CommandDialog.vue +21 -0
- package/components/ui/command/CommandEmpty.vue +20 -0
- package/components/ui/command/CommandGroup.vue +29 -0
- package/components/ui/command/CommandInput.vue +33 -0
- package/components/ui/command/CommandItem.vue +26 -0
- package/components/ui/command/CommandList.vue +27 -0
- package/components/ui/command/CommandSeparator.vue +23 -0
- package/components/ui/command/CommandShortcut.vue +14 -0
- package/components/ui/command/index.js +9 -0
- package/components/ui/command/index.ts +9 -0
- package/components/ui/context-menu/ContextMenu.vue +15 -0
- package/components/ui/context-menu/ContextMenuCheckboxItem.vue +40 -0
- package/components/ui/context-menu/ContextMenuContent.vue +36 -0
- package/components/ui/context-menu/ContextMenuGroup.vue +11 -0
- package/components/ui/context-menu/ContextMenuItem.vue +34 -0
- package/components/ui/context-menu/ContextMenuLabel.vue +25 -0
- package/components/ui/context-menu/ContextMenuPortal.vue +11 -0
- package/components/ui/context-menu/ContextMenuRadioGroup.vue +19 -0
- package/components/ui/context-menu/ContextMenuRadioItem.vue +40 -0
- package/components/ui/context-menu/ContextMenuSeparator.vue +20 -0
- package/components/ui/context-menu/ContextMenuShortcut.vue +14 -0
- package/components/ui/context-menu/ContextMenuSub.vue +19 -0
- package/components/ui/context-menu/ContextMenuSubContent.vue +35 -0
- package/components/ui/context-menu/ContextMenuSubTrigger.vue +34 -0
- package/components/ui/context-menu/ContextMenuTrigger.vue +13 -0
- package/components/ui/context-menu/index.ts +14 -0
- package/components/ui/dialog/Dialog.vue +14 -0
- package/components/ui/dialog/DialogClose.vue +11 -0
- package/components/ui/dialog/DialogContent.vue +50 -0
- package/components/ui/dialog/DialogDescription.vue +24 -0
- package/components/ui/dialog/DialogFooter.vue +19 -0
- package/components/ui/dialog/DialogHeader.vue +16 -0
- package/components/ui/dialog/DialogScrollContent.vue +59 -0
- package/components/ui/dialog/DialogTitle.vue +29 -0
- package/components/ui/dialog/DialogTrigger.vue +11 -0
- package/components/ui/dialog/index.js +9 -0
- package/components/ui/dialog/index.ts +9 -0
- package/components/ui/drawer/Drawer.vue +19 -0
- package/components/ui/drawer/DrawerContent.vue +28 -0
- package/components/ui/drawer/DrawerDescription.vue +20 -0
- package/components/ui/drawer/DrawerFooter.vue +14 -0
- package/components/ui/drawer/DrawerHeader.vue +14 -0
- package/components/ui/drawer/DrawerOverlay.vue +18 -0
- package/components/ui/drawer/DrawerTitle.vue +20 -0
- package/components/ui/drawer/index.ts +8 -0
- package/components/ui/dropdown-menu/DropdownMenu.vue +14 -0
- package/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +40 -0
- package/components/ui/dropdown-menu/DropdownMenuContent.vue +38 -0
- package/components/ui/dropdown-menu/DropdownMenuGroup.vue +11 -0
- package/components/ui/dropdown-menu/DropdownMenuItem.vue +28 -0
- package/components/ui/dropdown-menu/DropdownMenuLabel.vue +24 -0
- package/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +19 -0
- package/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +41 -0
- package/components/ui/dropdown-menu/DropdownMenuSeparator.vue +22 -0
- package/components/ui/dropdown-menu/DropdownMenuShortcut.vue +14 -0
- package/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
- package/components/ui/dropdown-menu/DropdownMenuSubContent.vue +30 -0
- package/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +33 -0
- package/components/ui/dropdown-menu/DropdownMenuTrigger.vue +13 -0
- package/components/ui/dropdown-menu/index.ts +16 -0
- package/components/ui/form/FormControl.vue +16 -0
- package/components/ui/form/FormDescription.vue +20 -0
- package/components/ui/form/FormItem.vue +19 -0
- package/components/ui/form/FormLabel.vue +23 -0
- package/components/ui/form/FormMessage.vue +16 -0
- package/components/ui/form/index.js +7 -0
- package/components/ui/form/index.ts +7 -0
- package/components/ui/form/injectionKeys.js +1 -0
- package/components/ui/form/injectionKeys.ts +4 -0
- package/components/ui/form/useFormField.js +36 -0
- package/components/ui/form/useFormField.ts +30 -0
- package/components/ui/hover-card/HoverCard.vue +14 -0
- package/components/ui/hover-card/HoverCardContent.vue +41 -0
- package/components/ui/hover-card/HoverCardTrigger.vue +11 -0
- package/components/ui/hover-card/index.ts +3 -0
- package/components/ui/input/Input.vue +24 -0
- package/components/ui/input/index.js +1 -0
- package/components/ui/input/index.ts +1 -0
- package/components/ui/label/Label.vue +27 -0
- package/components/ui/label/index.js +1 -0
- package/components/ui/label/index.ts +1 -0
- package/components/ui/menubar/Menubar.vue +35 -0
- package/components/ui/menubar/MenubarCheckboxItem.vue +40 -0
- package/components/ui/menubar/MenubarContent.vue +43 -0
- package/components/ui/menubar/MenubarGroup.vue +11 -0
- package/components/ui/menubar/MenubarItem.vue +35 -0
- package/components/ui/menubar/MenubarLabel.vue +13 -0
- package/components/ui/menubar/MenubarMenu.vue +11 -0
- package/components/ui/menubar/MenubarRadioGroup.vue +20 -0
- package/components/ui/menubar/MenubarRadioItem.vue +40 -0
- package/components/ui/menubar/MenubarSeparator.vue +19 -0
- package/components/ui/menubar/MenubarShortcut.vue +14 -0
- package/components/ui/menubar/MenubarSub.vue +19 -0
- package/components/ui/menubar/MenubarSubContent.vue +39 -0
- package/components/ui/menubar/MenubarSubTrigger.vue +30 -0
- package/components/ui/menubar/MenubarTrigger.vue +29 -0
- package/components/ui/menubar/index.ts +15 -0
- package/components/ui/navigation-menu/NavigationMenu.vue +33 -0
- package/components/ui/navigation-menu/NavigationMenuContent.vue +34 -0
- package/components/ui/navigation-menu/NavigationMenuIndicator.vue +24 -0
- package/components/ui/navigation-menu/NavigationMenuItem.vue +11 -0
- package/components/ui/navigation-menu/NavigationMenuLink.vue +19 -0
- package/components/ui/navigation-menu/NavigationMenuList.vue +29 -0
- package/components/ui/navigation-menu/NavigationMenuTrigger.vue +34 -0
- package/components/ui/navigation-menu/NavigationMenuViewport.vue +33 -0
- package/components/ui/navigation-menu/index.ts +12 -0
- package/components/ui/number-field/NumberField.vue +23 -0
- package/components/ui/number-field/NumberFieldContent.vue +14 -0
- package/components/ui/number-field/NumberFieldDecrement.vue +25 -0
- package/components/ui/number-field/NumberFieldIncrement.vue +25 -0
- package/components/ui/number-field/NumberFieldInput.vue +8 -0
- package/components/ui/number-field/index.ts +5 -0
- package/components/ui/pagination/PaginationEllipsis.vue +22 -0
- package/components/ui/pagination/PaginationFirst.vue +29 -0
- package/components/ui/pagination/PaginationLast.vue +29 -0
- package/components/ui/pagination/PaginationNext.vue +29 -0
- package/components/ui/pagination/PaginationPrev.vue +29 -0
- package/components/ui/pagination/index.ts +10 -0
- package/components/ui/pin-input/PinInput.vue +23 -0
- package/components/ui/pin-input/PinInputGroup.vue +18 -0
- package/components/ui/pin-input/PinInputInput.vue +18 -0
- package/components/ui/pin-input/PinInputSeparator.vue +15 -0
- package/components/ui/pin-input/index.ts +4 -0
- package/components/ui/popover/Popover.vue +15 -0
- package/components/ui/popover/PopoverContent.vue +48 -0
- package/components/ui/popover/PopoverTrigger.vue +11 -0
- package/components/ui/popover/index.js +3 -0
- package/components/ui/popover/index.ts +3 -0
- package/components/ui/progress/Progress.vue +39 -0
- package/components/ui/progress/index.js +1 -0
- package/components/ui/progress/index.ts +1 -0
- package/components/ui/radio-group/RadioGroup.vue +25 -0
- package/components/ui/radio-group/RadioGroupItem.vue +39 -0
- package/components/ui/radio-group/index.ts +2 -0
- package/components/ui/range-calendar/RangeCalendar.vue +60 -0
- package/components/ui/range-calendar/RangeCalendarCell.vue +24 -0
- package/components/ui/range-calendar/RangeCalendarCellTrigger.vue +40 -0
- package/components/ui/range-calendar/RangeCalendarGrid.vue +24 -0
- package/components/ui/range-calendar/RangeCalendarGridBody.vue +11 -0
- package/components/ui/range-calendar/RangeCalendarGridHead.vue +11 -0
- package/components/ui/range-calendar/RangeCalendarGridRow.vue +21 -0
- package/components/ui/range-calendar/RangeCalendarHeadCell.vue +21 -0
- package/components/ui/range-calendar/RangeCalendarHeader.vue +21 -0
- package/components/ui/range-calendar/RangeCalendarHeading.vue +27 -0
- package/components/ui/range-calendar/RangeCalendarNextButton.vue +32 -0
- package/components/ui/range-calendar/RangeCalendarPrevButton.vue +32 -0
- package/components/ui/range-calendar/index.ts +12 -0
- package/components/ui/resizable/ResizableHandle.vue +26 -0
- package/components/ui/resizable/ResizablePanelGroup.vue +21 -0
- package/components/ui/resizable/index.ts +3 -0
- package/components/ui/scroll-area/ScrollArea.vue +29 -0
- package/components/ui/scroll-area/ScrollBar.vue +30 -0
- package/components/ui/scroll-area/index.ts +2 -0
- package/components/ui/select/Select.vue +15 -0
- package/components/ui/select/SelectContent.vue +53 -0
- package/components/ui/select/SelectGroup.vue +19 -0
- package/components/ui/select/SelectItem.vue +44 -0
- package/components/ui/select/SelectItemText.vue +11 -0
- package/components/ui/select/SelectLabel.vue +13 -0
- package/components/ui/select/SelectScrollDownButton.vue +24 -0
- package/components/ui/select/SelectScrollUpButton.vue +24 -0
- package/components/ui/select/SelectSeparator.vue +17 -0
- package/components/ui/select/SelectTrigger.vue +31 -0
- package/components/ui/select/SelectValue.vue +11 -0
- package/components/ui/select/index.ts +11 -0
- package/components/ui/separator/Separator.vue +20 -0
- package/components/ui/separator/index.js +1 -0
- package/components/ui/separator/index.ts +1 -0
- package/components/ui/sheet/Sheet.vue +14 -0
- package/components/ui/sheet/SheetClose.vue +11 -0
- package/components/ui/sheet/SheetContent.vue +56 -0
- package/components/ui/sheet/SheetDescription.vue +22 -0
- package/components/ui/sheet/SheetFooter.vue +19 -0
- package/components/ui/sheet/SheetHeader.vue +16 -0
- package/components/ui/sheet/SheetTitle.vue +22 -0
- package/components/ui/sheet/SheetTrigger.vue +11 -0
- package/components/ui/sheet/index.ts +31 -0
- package/components/ui/skeleton/Skeleton.vue +14 -0
- package/components/ui/skeleton/index.ts +1 -0
- package/components/ui/slider/Slider.vue +36 -0
- package/components/ui/slider/index.ts +1 -0
- package/components/ui/sonner/Sonner.vue +22 -0
- package/components/ui/sonner/index.ts +1 -0
- package/components/ui/switch/Switch.vue +37 -0
- package/components/ui/switch/index.ts +1 -0
- package/components/ui/table/Table.vue +16 -0
- package/components/ui/table/TableBody.vue +14 -0
- package/components/ui/table/TableCaption.vue +14 -0
- package/components/ui/table/TableCell.vue +21 -0
- package/components/ui/table/TableEmpty.vue +37 -0
- package/components/ui/table/TableFooter.vue +14 -0
- package/components/ui/table/TableHead.vue +14 -0
- package/components/ui/table/TableHeader.vue +14 -0
- package/components/ui/table/TableRow.vue +14 -0
- package/components/ui/table/index.ts +8 -0
- package/components/ui/tabs/Tabs.vue +15 -0
- package/components/ui/tabs/TabsContent.vue +22 -0
- package/components/ui/tabs/TabsList.vue +25 -0
- package/components/ui/tabs/TabsTrigger.vue +27 -0
- package/components/ui/tabs/index.ts +4 -0
- package/components/ui/tags-input/TagsInput.vue +22 -0
- package/components/ui/tags-input/TagsInputInput.vue +19 -0
- package/components/ui/tags-input/TagsInputItem.vue +22 -0
- package/components/ui/tags-input/TagsInputItemDelete.vue +24 -0
- package/components/ui/tags-input/TagsInputItemText.vue +19 -0
- package/components/ui/tags-input/index.ts +5 -0
- package/components/ui/textarea/Textarea.vue +24 -0
- package/components/ui/textarea/index.ts +1 -0
- package/components/ui/toast/Toast.vue +28 -0
- package/components/ui/toast/ToastAction.vue +19 -0
- package/components/ui/toast/ToastClose.vue +22 -0
- package/components/ui/toast/ToastDescription.vue +19 -0
- package/components/ui/toast/ToastProvider.vue +11 -0
- package/components/ui/toast/ToastTitle.vue +19 -0
- package/components/ui/toast/ToastViewport.vue +17 -0
- package/components/ui/toast/Toaster.vue +30 -0
- package/components/ui/toast/index.ts +38 -0
- package/components/ui/toast/use-toast.ts +165 -0
- package/components/ui/toggle/Toggle.vue +35 -0
- package/components/ui/toggle/index.ts +27 -0
- package/components/ui/toggle-group/ToggleGroup.vue +34 -0
- package/components/ui/toggle-group/ToggleGroupItem.vue +35 -0
- package/components/ui/toggle-group/index.ts +2 -0
- package/components/ui/tooltip/Tooltip.vue +14 -0
- package/components/ui/tooltip/TooltipContent.vue +31 -0
- package/components/ui/tooltip/TooltipProvider.vue +11 -0
- package/components/ui/tooltip/TooltipTrigger.vue +11 -0
- package/components/ui/tooltip/index.ts +4 -0
- package/components/ui/v-calendar/Calendar.vue +331 -0
- package/components/ui/v-calendar/index.ts +22 -0
- package/components.json +17 -0
- package/edge-components-install.sh +1 -0
- package/jsconfig.json +9 -0
- package/lib/utils.ts +6 -0
- package/nuxt.config.ts +28 -11
- package/package.json +33 -14
- package/pages/app/account/[page].vue +71 -0
- package/pages/app/dashboard/[[collection]]/[[docId]].vue +181 -0
- package/pages/app/login.vue +9 -7
- package/pages/app/signup.vue +9 -7
- package/plugins/icons.ts +72 -0
- package/tailwind.config.js +85 -0
- package/components/.gitkeep +0 -0
- package/components/account.vue +0 -101
- package/components/billing.vue +0 -8
- package/components/bottomMenu.vue +0 -35
- package/components/dashboard.vue +0 -186
- package/components/editor.vue +0 -247
- package/components/topMenu.vue +0 -17
- package/components/userMenu.vue +0 -64
- package/composables/vuetify.ts +0 -10
- package/pages/app/[[page]]/[[collection]]/[[docId]].vue +0 -48
- package/plugins/edgeFirebaseFramework.ts +0 -5
- package/plugins/vuetify.ts +0 -14
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import { Search } from 'lucide-vue-next'
|
|
4
|
+
import { ComboboxInput, type ComboboxInputProps, useForwardProps } from 'radix-vue'
|
|
5
|
+
import { cn } from '@/lib/utils'
|
|
6
|
+
|
|
7
|
+
defineOptions({
|
|
8
|
+
inheritAttrs: false,
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
const props = defineProps<ComboboxInputProps & {
|
|
12
|
+
class?: HTMLAttributes['class']
|
|
13
|
+
}>()
|
|
14
|
+
|
|
15
|
+
const delegatedProps = computed(() => {
|
|
16
|
+
const { class: _, ...delegated } = props
|
|
17
|
+
|
|
18
|
+
return delegated
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const forwardedProps = useForwardProps(delegatedProps)
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div class="flex items-center border-b px-3" cmdk-input-wrapper>
|
|
26
|
+
<Search class="mr-2 h-4 w-4 shrink-0 opacity-50" />
|
|
27
|
+
<ComboboxInput
|
|
28
|
+
v-bind="{ ...forwardedProps, ...$attrs }"
|
|
29
|
+
auto-focus
|
|
30
|
+
:class="cn('flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50', props.class)"
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import type { ComboboxItemEmits, ComboboxItemProps } from 'radix-vue'
|
|
4
|
+
import { ComboboxItem, useForwardPropsEmits } from 'radix-vue'
|
|
5
|
+
import { cn } from '@/lib/utils'
|
|
6
|
+
|
|
7
|
+
const props = defineProps<ComboboxItemProps & { class?: HTMLAttributes['class'] }>()
|
|
8
|
+
const emits = defineEmits<ComboboxItemEmits>()
|
|
9
|
+
|
|
10
|
+
const delegatedProps = computed(() => {
|
|
11
|
+
const { class: _, ...delegated } = props
|
|
12
|
+
|
|
13
|
+
return delegated
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<ComboboxItem
|
|
21
|
+
v-bind="forwarded"
|
|
22
|
+
:class="cn('relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[highlighted]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50', props.class)"
|
|
23
|
+
>
|
|
24
|
+
<slot />
|
|
25
|
+
</ComboboxItem>
|
|
26
|
+
</template>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import type { ComboboxContentEmits, ComboboxContentProps } from 'radix-vue'
|
|
4
|
+
import { ComboboxContent, useForwardPropsEmits } from 'radix-vue'
|
|
5
|
+
import { cn } from '@/lib/utils'
|
|
6
|
+
|
|
7
|
+
const props = withDefaults(defineProps<ComboboxContentProps & { class?: HTMLAttributes['class'] }>(), {
|
|
8
|
+
dismissable: false,
|
|
9
|
+
})
|
|
10
|
+
const emits = defineEmits<ComboboxContentEmits>()
|
|
11
|
+
|
|
12
|
+
const delegatedProps = computed(() => {
|
|
13
|
+
const { class: _, ...delegated } = props
|
|
14
|
+
|
|
15
|
+
return delegated
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<ComboboxContent v-bind="forwarded" :class="cn('max-h-[300px] overflow-y-auto overflow-x-hidden', props.class)">
|
|
23
|
+
<div role="presentation">
|
|
24
|
+
<slot />
|
|
25
|
+
</div>
|
|
26
|
+
</ComboboxContent>
|
|
27
|
+
</template>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import type { ComboboxSeparatorProps } from 'radix-vue'
|
|
4
|
+
import { ComboboxSeparator } from 'radix-vue'
|
|
5
|
+
import { cn } from '@/lib/utils'
|
|
6
|
+
|
|
7
|
+
const props = defineProps<ComboboxSeparatorProps & { class?: HTMLAttributes['class'] }>()
|
|
8
|
+
|
|
9
|
+
const delegatedProps = computed(() => {
|
|
10
|
+
const { class: _, ...delegated } = props
|
|
11
|
+
|
|
12
|
+
return delegated
|
|
13
|
+
})
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<ComboboxSeparator
|
|
18
|
+
v-bind="delegatedProps"
|
|
19
|
+
:class="cn('-mx-1 h-px bg-border', props.class)"
|
|
20
|
+
>
|
|
21
|
+
<slot />
|
|
22
|
+
</ComboboxSeparator>
|
|
23
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'vue'
|
|
3
|
+
import { cn } from '@/lib/utils'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes['class']
|
|
7
|
+
}>()
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<span :class="cn('ml-auto text-xs tracking-widest text-muted-foreground', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</span>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as Command } from "./Command.vue";
|
|
2
|
+
export { default as CommandDialog } from "./CommandDialog.vue";
|
|
3
|
+
export { default as CommandEmpty } from "./CommandEmpty.vue";
|
|
4
|
+
export { default as CommandGroup } from "./CommandGroup.vue";
|
|
5
|
+
export { default as CommandInput } from "./CommandInput.vue";
|
|
6
|
+
export { default as CommandItem } from "./CommandItem.vue";
|
|
7
|
+
export { default as CommandList } from "./CommandList.vue";
|
|
8
|
+
export { default as CommandSeparator } from "./CommandSeparator.vue";
|
|
9
|
+
export { default as CommandShortcut } from "./CommandShortcut.vue";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as Command } from './Command.vue'
|
|
2
|
+
export { default as CommandDialog } from './CommandDialog.vue'
|
|
3
|
+
export { default as CommandEmpty } from './CommandEmpty.vue'
|
|
4
|
+
export { default as CommandGroup } from './CommandGroup.vue'
|
|
5
|
+
export { default as CommandInput } from './CommandInput.vue'
|
|
6
|
+
export { default as CommandItem } from './CommandItem.vue'
|
|
7
|
+
export { default as CommandList } from './CommandList.vue'
|
|
8
|
+
export { default as CommandSeparator } from './CommandSeparator.vue'
|
|
9
|
+
export { default as CommandShortcut } from './CommandShortcut.vue'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContextMenuRoot, useForwardPropsEmits } from 'radix-vue'
|
|
3
|
+
import type { ContextMenuRootEmits, ContextMenuRootProps } from 'radix-vue'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<ContextMenuRootProps>()
|
|
6
|
+
const emits = defineEmits<ContextMenuRootEmits>()
|
|
7
|
+
|
|
8
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<ContextMenuRoot v-bind="forwarded">
|
|
13
|
+
<slot />
|
|
14
|
+
</ContextMenuRoot>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuCheckboxItem,
|
|
5
|
+
type ContextMenuCheckboxItemEmits,
|
|
6
|
+
type ContextMenuCheckboxItemProps,
|
|
7
|
+
ContextMenuItemIndicator,
|
|
8
|
+
useForwardPropsEmits,
|
|
9
|
+
} from 'radix-vue'
|
|
10
|
+
import { Check } from 'lucide-vue-next'
|
|
11
|
+
import { cn } from '@/lib/utils'
|
|
12
|
+
|
|
13
|
+
const props = defineProps<ContextMenuCheckboxItemProps & { class?: HTMLAttributes['class'] }>()
|
|
14
|
+
const emits = defineEmits<ContextMenuCheckboxItemEmits>()
|
|
15
|
+
|
|
16
|
+
const delegatedProps = computed(() => {
|
|
17
|
+
const { class: _, ...delegated } = props
|
|
18
|
+
|
|
19
|
+
return delegated
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<ContextMenuCheckboxItem
|
|
27
|
+
v-bind="forwarded"
|
|
28
|
+
:class="cn(
|
|
29
|
+
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
|
30
|
+
props.class,
|
|
31
|
+
)"
|
|
32
|
+
>
|
|
33
|
+
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
34
|
+
<ContextMenuItemIndicator>
|
|
35
|
+
<Check class="h-4 w-4" />
|
|
36
|
+
</ContextMenuItemIndicator>
|
|
37
|
+
</span>
|
|
38
|
+
<slot />
|
|
39
|
+
</ContextMenuCheckboxItem>
|
|
40
|
+
</template>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuContent,
|
|
5
|
+
type ContextMenuContentEmits,
|
|
6
|
+
type ContextMenuContentProps,
|
|
7
|
+
ContextMenuPortal,
|
|
8
|
+
useForwardPropsEmits,
|
|
9
|
+
} from 'radix-vue'
|
|
10
|
+
import { cn } from '@/lib/utils'
|
|
11
|
+
|
|
12
|
+
const props = defineProps<ContextMenuContentProps & { class?: HTMLAttributes['class'] }>()
|
|
13
|
+
const emits = defineEmits<ContextMenuContentEmits>()
|
|
14
|
+
|
|
15
|
+
const delegatedProps = computed(() => {
|
|
16
|
+
const { class: _, ...delegated } = props
|
|
17
|
+
|
|
18
|
+
return delegated
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<ContextMenuPortal>
|
|
26
|
+
<ContextMenuContent
|
|
27
|
+
v-bind="forwarded"
|
|
28
|
+
:class="cn(
|
|
29
|
+
'z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
|
30
|
+
props.class,
|
|
31
|
+
)"
|
|
32
|
+
>
|
|
33
|
+
<slot />
|
|
34
|
+
</ContextMenuContent>
|
|
35
|
+
</ContextMenuPortal>
|
|
36
|
+
</template>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContextMenuGroup, type ContextMenuGroupProps } from 'radix-vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<ContextMenuGroupProps>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<ContextMenuGroup v-bind="props">
|
|
9
|
+
<slot />
|
|
10
|
+
</ContextMenuGroup>
|
|
11
|
+
</template>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuItem,
|
|
5
|
+
type ContextMenuItemEmits,
|
|
6
|
+
type ContextMenuItemProps,
|
|
7
|
+
useForwardPropsEmits,
|
|
8
|
+
} from 'radix-vue'
|
|
9
|
+
import { cn } from '@/lib/utils'
|
|
10
|
+
|
|
11
|
+
const props = defineProps<ContextMenuItemProps & { class?: HTMLAttributes['class'], inset?: boolean }>()
|
|
12
|
+
const emits = defineEmits<ContextMenuItemEmits>()
|
|
13
|
+
|
|
14
|
+
const delegatedProps = computed(() => {
|
|
15
|
+
const { class: _, ...delegated } = props
|
|
16
|
+
|
|
17
|
+
return delegated
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<ContextMenuItem
|
|
25
|
+
v-bind="forwarded"
|
|
26
|
+
:class="cn(
|
|
27
|
+
'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
|
28
|
+
inset && 'pl-8',
|
|
29
|
+
props.class,
|
|
30
|
+
)"
|
|
31
|
+
>
|
|
32
|
+
<slot />
|
|
33
|
+
</ContextMenuItem>
|
|
34
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import { ContextMenuLabel, type ContextMenuLabelProps } from 'radix-vue'
|
|
4
|
+
import { cn } from '@/lib/utils'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<ContextMenuLabelProps & { class?: HTMLAttributes['class'], inset?: boolean }>()
|
|
7
|
+
|
|
8
|
+
const delegatedProps = computed(() => {
|
|
9
|
+
const { class: _, ...delegated } = props
|
|
10
|
+
|
|
11
|
+
return delegated
|
|
12
|
+
})
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<ContextMenuLabel
|
|
17
|
+
v-bind="delegatedProps"
|
|
18
|
+
:class="
|
|
19
|
+
cn('px-2 py-1.5 text-sm font-semibold text-foreground',
|
|
20
|
+
inset && 'pl-8', props.class,
|
|
21
|
+
)"
|
|
22
|
+
>
|
|
23
|
+
<slot />
|
|
24
|
+
</ContextMenuLabel>
|
|
25
|
+
</template>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContextMenuPortal, type ContextMenuPortalProps } from 'radix-vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<ContextMenuPortalProps>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<ContextMenuPortal v-bind="props">
|
|
9
|
+
<slot />
|
|
10
|
+
</ContextMenuPortal>
|
|
11
|
+
</template>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
ContextMenuRadioGroup,
|
|
4
|
+
type ContextMenuRadioGroupEmits,
|
|
5
|
+
type ContextMenuRadioGroupProps,
|
|
6
|
+
useForwardPropsEmits,
|
|
7
|
+
} from 'radix-vue'
|
|
8
|
+
|
|
9
|
+
const props = defineProps<ContextMenuRadioGroupProps>()
|
|
10
|
+
const emits = defineEmits<ContextMenuRadioGroupEmits>()
|
|
11
|
+
|
|
12
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<ContextMenuRadioGroup v-bind="forwarded">
|
|
17
|
+
<slot />
|
|
18
|
+
</ContextMenuRadioGroup>
|
|
19
|
+
</template>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuItemIndicator,
|
|
5
|
+
ContextMenuRadioItem,
|
|
6
|
+
type ContextMenuRadioItemEmits,
|
|
7
|
+
type ContextMenuRadioItemProps,
|
|
8
|
+
useForwardPropsEmits,
|
|
9
|
+
} from 'radix-vue'
|
|
10
|
+
import { Circle } from 'lucide-vue-next'
|
|
11
|
+
import { cn } from '@/lib/utils'
|
|
12
|
+
|
|
13
|
+
const props = defineProps<ContextMenuRadioItemProps & { class?: HTMLAttributes['class'] }>()
|
|
14
|
+
const emits = defineEmits<ContextMenuRadioItemEmits>()
|
|
15
|
+
|
|
16
|
+
const delegatedProps = computed(() => {
|
|
17
|
+
const { class: _, ...delegated } = props
|
|
18
|
+
|
|
19
|
+
return delegated
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<ContextMenuRadioItem
|
|
27
|
+
v-bind="forwarded"
|
|
28
|
+
:class="cn(
|
|
29
|
+
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
|
30
|
+
props.class,
|
|
31
|
+
)"
|
|
32
|
+
>
|
|
33
|
+
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
34
|
+
<ContextMenuItemIndicator>
|
|
35
|
+
<Circle class="h-2 w-2 fill-current" />
|
|
36
|
+
</ContextMenuItemIndicator>
|
|
37
|
+
</span>
|
|
38
|
+
<slot />
|
|
39
|
+
</ContextMenuRadioItem>
|
|
40
|
+
</template>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuSeparator,
|
|
5
|
+
type ContextMenuSeparatorProps,
|
|
6
|
+
} from 'radix-vue'
|
|
7
|
+
import { cn } from '@/lib/utils'
|
|
8
|
+
|
|
9
|
+
const props = defineProps<ContextMenuSeparatorProps & { class?: HTMLAttributes['class'] }>()
|
|
10
|
+
|
|
11
|
+
const delegatedProps = computed(() => {
|
|
12
|
+
const { class: _, ...delegated } = props
|
|
13
|
+
|
|
14
|
+
return delegated
|
|
15
|
+
})
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<ContextMenuSeparator v-bind="delegatedProps" :class="cn('-mx-1 my-1 h-px bg-border', props.class)" />
|
|
20
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'vue'
|
|
3
|
+
import { cn } from '@/lib/utils'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes['class']
|
|
7
|
+
}>()
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<span :class="cn('ml-auto text-xs tracking-widest text-muted-foreground', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</span>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
ContextMenuSub,
|
|
4
|
+
type ContextMenuSubEmits,
|
|
5
|
+
type ContextMenuSubProps,
|
|
6
|
+
useForwardPropsEmits,
|
|
7
|
+
} from 'radix-vue'
|
|
8
|
+
|
|
9
|
+
const props = defineProps<ContextMenuSubProps>()
|
|
10
|
+
const emits = defineEmits<ContextMenuSubEmits>()
|
|
11
|
+
|
|
12
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<ContextMenuSub v-bind="forwarded">
|
|
17
|
+
<slot />
|
|
18
|
+
</ContextMenuSub>
|
|
19
|
+
</template>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuSubContent,
|
|
5
|
+
type DropdownMenuSubContentEmits,
|
|
6
|
+
type DropdownMenuSubContentProps,
|
|
7
|
+
useForwardPropsEmits,
|
|
8
|
+
} from 'radix-vue'
|
|
9
|
+
import { cn } from '@/lib/utils'
|
|
10
|
+
|
|
11
|
+
const props = defineProps<DropdownMenuSubContentProps & { class?: HTMLAttributes['class'] }>()
|
|
12
|
+
const emits = defineEmits<DropdownMenuSubContentEmits>()
|
|
13
|
+
|
|
14
|
+
const delegatedProps = computed(() => {
|
|
15
|
+
const { class: _, ...delegated } = props
|
|
16
|
+
|
|
17
|
+
return delegated
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<ContextMenuSubContent
|
|
25
|
+
v-bind="forwarded"
|
|
26
|
+
:class="
|
|
27
|
+
cn(
|
|
28
|
+
'z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
|
29
|
+
props.class,
|
|
30
|
+
)
|
|
31
|
+
"
|
|
32
|
+
>
|
|
33
|
+
<slot />
|
|
34
|
+
</ContextMenuSubContent>
|
|
35
|
+
</template>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
ContextMenuSubTrigger,
|
|
5
|
+
type ContextMenuSubTriggerProps,
|
|
6
|
+
useForwardProps,
|
|
7
|
+
} from 'radix-vue'
|
|
8
|
+
import { ChevronRight } from 'lucide-vue-next'
|
|
9
|
+
import { cn } from '@/lib/utils'
|
|
10
|
+
|
|
11
|
+
const props = defineProps<ContextMenuSubTriggerProps & { class?: HTMLAttributes['class'], inset?: boolean }>()
|
|
12
|
+
|
|
13
|
+
const delegatedProps = computed(() => {
|
|
14
|
+
const { class: _, ...delegated } = props
|
|
15
|
+
|
|
16
|
+
return delegated
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
const forwardedProps = useForwardProps(delegatedProps)
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<ContextMenuSubTrigger
|
|
24
|
+
v-bind="forwardedProps"
|
|
25
|
+
:class="cn(
|
|
26
|
+
'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground',
|
|
27
|
+
inset && 'pl-8',
|
|
28
|
+
props.class,
|
|
29
|
+
)"
|
|
30
|
+
>
|
|
31
|
+
<slot />
|
|
32
|
+
<ChevronRight class="ml-auto h-4 w-4" />
|
|
33
|
+
</ContextMenuSubTrigger>
|
|
34
|
+
</template>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ContextMenuTrigger, type ContextMenuTriggerProps, useForwardProps } from 'radix-vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<ContextMenuTriggerProps>()
|
|
5
|
+
|
|
6
|
+
const forwardedProps = useForwardProps(props)
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<ContextMenuTrigger v-bind="forwardedProps">
|
|
11
|
+
<slot />
|
|
12
|
+
</ContextMenuTrigger>
|
|
13
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as ContextMenu } from './ContextMenu.vue'
|
|
2
|
+
export { default as ContextMenuTrigger } from './ContextMenuTrigger.vue'
|
|
3
|
+
export { default as ContextMenuContent } from './ContextMenuContent.vue'
|
|
4
|
+
export { default as ContextMenuGroup } from './ContextMenuGroup.vue'
|
|
5
|
+
export { default as ContextMenuRadioGroup } from './ContextMenuRadioGroup.vue'
|
|
6
|
+
export { default as ContextMenuItem } from './ContextMenuItem.vue'
|
|
7
|
+
export { default as ContextMenuCheckboxItem } from './ContextMenuCheckboxItem.vue'
|
|
8
|
+
export { default as ContextMenuRadioItem } from './ContextMenuRadioItem.vue'
|
|
9
|
+
export { default as ContextMenuShortcut } from './ContextMenuShortcut.vue'
|
|
10
|
+
export { default as ContextMenuSeparator } from './ContextMenuSeparator.vue'
|
|
11
|
+
export { default as ContextMenuLabel } from './ContextMenuLabel.vue'
|
|
12
|
+
export { default as ContextMenuSub } from './ContextMenuSub.vue'
|
|
13
|
+
export { default as ContextMenuSubTrigger } from './ContextMenuSubTrigger.vue'
|
|
14
|
+
export { default as ContextMenuSubContent } from './ContextMenuSubContent.vue'
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { DialogRoot, type DialogRootEmits, type DialogRootProps, useForwardPropsEmits } from 'radix-vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<DialogRootProps>()
|
|
5
|
+
const emits = defineEmits<DialogRootEmits>()
|
|
6
|
+
|
|
7
|
+
const forwarded = useForwardPropsEmits(props, emits)
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<DialogRoot v-bind="forwarded">
|
|
12
|
+
<slot />
|
|
13
|
+
</DialogRoot>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import {
|
|
4
|
+
DialogClose,
|
|
5
|
+
DialogContent,
|
|
6
|
+
type DialogContentEmits,
|
|
7
|
+
type DialogContentProps,
|
|
8
|
+
DialogOverlay,
|
|
9
|
+
DialogPortal,
|
|
10
|
+
useForwardPropsEmits,
|
|
11
|
+
} from 'radix-vue'
|
|
12
|
+
import { X } from 'lucide-vue-next'
|
|
13
|
+
import { cn } from '@/lib/utils'
|
|
14
|
+
|
|
15
|
+
const props = defineProps<DialogContentProps & { class?: HTMLAttributes['class'] }>()
|
|
16
|
+
const emits = defineEmits<DialogContentEmits>()
|
|
17
|
+
|
|
18
|
+
const delegatedProps = computed(() => {
|
|
19
|
+
const { class: _, ...delegated } = props
|
|
20
|
+
|
|
21
|
+
return delegated
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits)
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<DialogPortal>
|
|
29
|
+
<DialogOverlay
|
|
30
|
+
class="fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
|
|
31
|
+
/>
|
|
32
|
+
<DialogContent
|
|
33
|
+
v-bind="forwarded"
|
|
34
|
+
:class="
|
|
35
|
+
cn(
|
|
36
|
+
'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',
|
|
37
|
+
props.class,
|
|
38
|
+
)"
|
|
39
|
+
>
|
|
40
|
+
<slot />
|
|
41
|
+
|
|
42
|
+
<DialogClose
|
|
43
|
+
class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"
|
|
44
|
+
>
|
|
45
|
+
<X class="w-4 h-4" />
|
|
46
|
+
<span class="sr-only">Close</span>
|
|
47
|
+
</DialogClose>
|
|
48
|
+
</DialogContent>
|
|
49
|
+
</DialogPortal>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes, computed } from 'vue'
|
|
3
|
+
import { DialogDescription, type DialogDescriptionProps, useForwardProps } from 'radix-vue'
|
|
4
|
+
import { cn } from '@/lib/utils'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<DialogDescriptionProps & { class?: HTMLAttributes['class'] }>()
|
|
7
|
+
|
|
8
|
+
const delegatedProps = computed(() => {
|
|
9
|
+
const { class: _, ...delegated } = props
|
|
10
|
+
|
|
11
|
+
return delegated
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
const forwardedProps = useForwardProps(delegatedProps)
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<DialogDescription
|
|
19
|
+
v-bind="forwardedProps"
|
|
20
|
+
:class="cn('text-sm text-muted-foreground', props.class)"
|
|
21
|
+
>
|
|
22
|
+
<slot />
|
|
23
|
+
</DialogDescription>
|
|
24
|
+
</template>
|